Difference between revisions of "Scaling Rotating Mirroring Clipping"

From Wiki
Jump to navigation Jump to search
Line 53: Line 53:
  
 
You can rotate something by an arbitrary angle by saying something like  
 
You can rotate something by an arbitrary angle by saying something like  
<texcode>
+
<context source=yes>
 
\rotate[rotation=42]{the ultimate answer}
 
\rotate[rotation=42]{the ultimate answer}
</texcode>.
+
</context>
<context>
 
\rotate[rotation=42]{the ultimate answer}
 
</context>.
 
  
 
The rotation angle and the location (which determines around which point the content is rotated) are optional and can also be set by
 
The rotation angle and the location (which determines around which point the content is rotated) are optional and can also be set by
<texcode>
+
 
 +
<context source=yes>
 
\setuprotate[rotation=42,location=normal] % normal is the default
 
\setuprotate[rotation=42,location=normal] % normal is the default
 
\rotate{the ultimate answer}
 
\rotate{the ultimate answer}
</texcode>
+
</context>
  
 
An example by Hans Hagen showing the influence of <code>location=</code> argument at different angles:
 
An example by Hans Hagen showing the influence of <code>location=</code> argument at different angles:
  
<texcode>
+
<context source=yes>
 
\dostepwiserecurse{0}{359}{45}
 
\dostepwiserecurse{0}{359}{45}
 
   {\startlinecorrection[blank]
 
   {\startlinecorrection[blank]
Line 80: Line 78:
 
       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=high]  {\ruledhbox{\bfb  (high)}}}}}
 
       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=high]  {\ruledhbox{\bfb  (high)}}}}}
 
     \stoplinecorrection}
 
     \stoplinecorrection}
</texcode>
+
</context>
  
<context>
 
\setuplayout[location=middle,scale=.5]
 
\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}
 
</context>
 
  
 
You can rotate a long paragraph as well.
 
You can rotate a long paragraph as well.

Revision as of 00:34, 17 December 2010

In core-mis.mkii (core-mis.mkiv for MkIV) there are some handy commands 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]}


\setupcolors[state=start]
\definedfont[SansBold at 20mm]
\baselineskip 0pt % switch off the space between the stripes
\lineskip 0pt
\def\MyLogo{\vbox{\hbox{\CONTEXT}\null}} % null is necessary for the whole bounding box
\clip[ny=3,y=1]{\color[yellow]\MyLogo}
\clip[ny=3,y=2]{\color[orange]\MyLogo}
\clip[ny=3,y=3]{\color[red]\MyLogo}

see also \setupclipping and \clip