Difference between revisions of "Scaling Rotating Mirroring Clipping"

From Wiki
Jump to navigation Jump to search
(→‎\clip =: clipping sampl)
m (→‎\clip: example a bit better)
Line 129: Line 129:
  
 
<context source="yes">
 
<context source="yes">
 +
\definedfont[SansBold at 36pt]
 +
\baselineskip 0pt
 
\setupcolors[state=start]
 
\setupcolors[state=start]
\clip[ny=3,y=1]{\definedfont[SansBold at 36pt]\color[red]\CONTEXT}
+
\def\MyLogo{\strut\CONTEXT}
\clip[ny=3,y=2]{\definedfont[SansBold at 36pt]\color[yellow]\CONTEXT}
+
\clip[ny=3,y=1]{\color[red]\MyLogo}
\clip[ny=3,y=3]{\definedfont[SansBold at 36pt]\color[blue]\CONTEXT}
+
\clip[ny=3,y=2]{\color[yellow]\MyLogo}
 +
\clip[ny=3,y=3]{\color[blue]\MyLogo}
 
</context>
 
</context>
  
see <cmd>setupclipping</cmd> and <cmd>clip</cmd>
+
see also <cmd>setupclipping</cmd> and <cmd>clip</cmd>

Revision as of 20:48, 15 September 2010

In core-mis.mkii (core-mis.mkiv for MkIV) there are some handy command for graphical text manipulation defined.

\scale

You can insert symbols at a reduced size in the text flow. This example creates a filled square scaled to .5 ex height

\definefontsynonym[Dingbats][uzdr]
\definesymbol[filledSq][\getglyph{Dingbats}{\char110}]
\def\FilledSquare%
    {\dontleavehmode\scale[height=0.5ex]{\symbol[filledSq]}}

In TeX terms, \scale creates a \hbox. If TeX is in vertical mode (as it is when \startlines is in effect, because every line is a paragraph by itself in the mode), then a simple \hbox is not a good enough hint to make it switch to horizontal (paragraph) mode.

Hans then posted a simpler way.

\getscaledglyph{.5}{Serif}{a}

TODO: An explanation and example of the \\scale command. (See: To-Do List)


\mirror

There is a \mirror{\sl mirorred} word in this sentence.

\mirror makes a \hbox and mirrors the contents. If you want to have a longer paragraph mirrored, you have to make a \vbox manually.

\mirror{\vbox{Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: 
once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and 
what is the use of a book,' thought Alice `without pictures or conversation?'}}


\rotate

You can rotate something by an arbitrary angle by saying something like

\rotate[rotation=42]{the ultimate answer}

.

.

The rotation angle and the location (which determines around which point the content is rotated) are optional and can also be set by

\setuprotate[rotation=42,location=normal] % normal is the default
\rotate{the ultimate answer}

An example by Hans Hagen showing the influence of location= argument at different angles:

\dostepwiserecurse{0}{359}{45}
   {\startlinecorrection[blank]
    \hbox
      {\expanded{\setuprotate[rotation=\recurselevel]}%
       \traceboxplacementtrue
       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=depth] {\ruledhbox{\bfb  (depth)}}}}%
       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=fit]   {\ruledhbox{\bfb    (fit)}}}}%
       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=broad] {\ruledhbox{\bfb  (broad)}}}}%
       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=normal]{\ruledhbox{\bfb (normal)}}}}%
       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=high]  {\ruledhbox{\bfb   (high)}}}}}
    \stoplinecorrection}

You can rotate a long paragraph as well.


TODO: Some more comments, and an example. (See: To-Do List)


Depending on the usage you will sometimes probably want to include the content of what you wish to rotate into a box. Compare the following two examples:

\setuplayout[width=3cm]
\setuprotate[rotation=180,location=broad]

a\rotate{e}i\par
a\rotate{\hbox{e}}i

\clip

(This is not just about text manipulation...)

\clip[nx=3,ny=3,x=1,y=1]{\externalfigure[cow]}

Not really perfect:

\definedfont[SansBold at 36pt]
\baselineskip 0pt
\setupcolors[state=start]
\def\MyLogo{\strut\CONTEXT}
\clip[ny=3,y=1]{\color[red]\MyLogo}
\clip[ny=3,y=2]{\color[yellow]\MyLogo}
\clip[ny=3,y=3]{\color[blue]\MyLogo}

see also \setupclipping and \clip