Changes

Jump to navigation Jump to search
m
→‎Rotating: add mirror
In [http://source.contextgarden.net/tex/context/base/core-mis.mkii core-mis.mkii] ([http://source.contextgarden.net/tex/context/base/core-mis.mkiv core-mis.mkiv] You can use the commands for MkIV) there are some handy command text, but also for graphical text manipulation definedgraphics or other “building blocks”.
== \scale =Scaling=
You The {{cmd|scale}} command is all-purpose, you can insert symbols at scale by factors or to a reduced defined size in the text flow. This example creates a filled square scaled to .5 ex height
<texcode>\definefontsynonym[Dingbats][uzdr]\definesymbol[filledSq][\getglyphAs a special case, you can insert symbols at a reduced size in the text flow using {Dingbats{cmd|getscaledglyph}{\char110}]\def\FilledSquare% {\dontleavehmode\scale[height=0.5ex]{\symbol[filledSq]}}</texcode>
In TeX terms, \scale creates a <context source=yes>\hboxgetscaledglyph{. If TeX is in vertical mode (as it is when \startlines is in effect, because every lineis 5}{Serif}{a paragraph by itself in the mode), then } a simple \hbox is not getscaledglyph{2}{Serif}{a good enough hint to make it switch to horizontal (paragraph) }mode. </context>
Hans then posted a simpler way.
<texcode>
\getscaledglyph{.5}{Serif}{a}
</texcode>
{{todo|An explanation and example of the <cmd>\scale</cmd> command.}} =Mirroring = \mirror == <texcodecontext source=yes>There is a \mirror{\sl mirorred} word in this sentence.</texcode> <context>There is a \mirror{\sl mirorredword} word in this sentence.
</context>
<code>\{{cmd|mirror</code> }} makes a <code>\hbox</code> and mirrors the contents. If you want to have a longer paragraph mirrored, you have to make a <code>\vbox</code> manually.
<texcodecontext source=yes>
\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, `\quote{and what is the use of a book,' } thought Alice `\quote{without pictures or conversation?'}}}</texcodecontext
<context>\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?'}}</context>= Rotating =
== \You can {{cmd|rotate ==}} something by an arbitrary angle like
You can rotate something by an arbitrary angle by saying something like <texcodecontext source=yes>
\rotate[rotation=42]{the ultimate answer}
</texcode>.<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
 <texcodecontext source=yes>
\setuprotate[rotation=42,location=normal] % normal is the default
\rotate{the ultimate answer}
</texcodecontext<context source=yes>\ss Next generation L\rotate{m}\rotate{m}TSP\mirror{3}Al\rotate[rotation=270,location=high]{v}?</context> You can rotate a long paragraph as well. ==Location parameter==
An example by Hans Hagen showing the The influence of <code>location=</code> argument at different angles:
<texcodecontext source=yes>
\dostepwiserecurse{0}{359}{45}
{\startlinecorrection[blank]
\hbox to .2\hsize{\hss\ruledhbox{\rotate[location=high] {\ruledhbox{\bfb (high)}}}}}
\stoplinecorrection}
</context>
 
=== Rotating Figures ===
 
The following code shows how the location parameter influences rotation with a frame:
 
<texcode>
\setupbodyfont[sans, 30pt]
\setuppagenumbering[location=,]
\showframe
 
\starttext
\topskip4cm
\dostepwiserecurse{0}{360}{10}{
\doloopoverlist{normal,default,depth,fit,broad,high,middle}{
\ruledhbox{\rotate[rotation=\recurselevel, location=\recursestring]{%
\framed
[width=\textheight, height=\textwidth, rulethickness=5pt,
depth=0cm, foregroundstyle=\bfd]
{\recursestring, \recurselevel°}
}
}
}
}
\stoptext
</texcode>
or, even nicer: <contextsource="yes">\setuplayoutuseMPlibrary[locationdum]\setupexternalfigures[width=4em,height=middle3em,scaleframe=.5on,]\dostepwiserecurse{0}{359}{45} {\startlinecorrection[blank] \hbox {\expanded{\setuprotate[rotation=bf\recurselevel]recurselevel˚}% \traceboxplacementtruequad \hbox to .2\hsizedoloopoverlist{\hss\ruledhboxnormal,depth,fit,broad,high,middle}{ \rotate[location=depth] {dontleavehmode\ruledhbox{\bfb (depth)}}}}% \hbox to .2\hsize{\hss\ruledhbox{ \rotate[rotation=\recurselevel, location=fit\recursestring] {\ruledhbox{\bfb (fit)}}}}% \hbox to .2externalfigure[\hsize{\hss\ruledhbox{\rotate[location=broadrecursestring] {\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)}}}}}\par \stoplinecorrection}
</context>
You can rotate ==In a long paragraph as well. {{todo|Some more comments, and an example.}}box==
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:
<texcodecontext source=yes>
\setuplayout[width=3cm]
\setuprotate[rotation=180,location=broad]
a\rotate{e}i\par
a\rotate{\hbox{e}}i
</context>
 
==Page dependent landscape figures==
 
Sometimes, in a double-sided portrait document, you may wish to rotate a landscape figure so that the top is towards the spine of the book – no matter whether it’s on an odd or even page. In this case the {{cmd|doifoddpageelse}} command can help:
 
<texcode>
\rotate[rotation=\doifoddpageelse{90}{270}]{\externalfigure[cow]}
</texcode>
<This example is by Wolfgang, from [http://www.ntg.nl/pipermail/ntg-context>\setuplayout[width=3cm]\setuprotate[rotation=180,location=broad/2011/059834.html the thread starting here]. The thread contains other solutions to the problem.
a\rotate{e}i\para\rotate{\hbox{e}}i</context>=Clipping=
== \clip ==(This is not just about text manipulation...)You can adjust the size of an element by cropping/clipping its borders:
<context source="yes">
</context>
Not really perfect<context source="yes">\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}}</context> And here’s how to cut out a piece by measures (see also {{cmd|setupclipping}} and {{cmd|clip}}):
<context source="yes">
\definedfont[SansBold at 36pt]\baselineskip 0pt\setupcolors[state=start]\def\MyLogo{\strut\CONTEXT}\clip[nywidth=33cm,yheight=1]{\color[red]\MyLogo}\clip[ny1cm, hoffset=31cm,yvoffset=25mm]{\colorexternalfigure[yellowcow]\MyLogo}\clip[ny=3,ywidth=3]{\color[blue5cm]\MyLogo}
</context>
see also <cmd>setupclipping<=Further reading= Graphic transformations are implemented in [https:/cmd> /source.contextgarden.net/tex/context/base/mkiv/grph-trf.mkiv grph-trf.mkiv] and <cmd>clip<[https://source.contextgarden.net/tex/context/base/mkiv/cmd>grph-trf.lua grph-trf.lua]. [[Category:Basics]][[Category:Graphics]]

Navigation menu