29.11.2012 Views

MetaFun - Pragma ADE

MetaFun - Pragma ADE

MetaFun - Pragma ADE

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

We use the low level CONTEXT macro \appendtoks to extend the token list \MPtoks. The<br />

\handletokens macro passes each token (character) of MetaPost is Fun! to the macro<br />

\whatever. The tokens are appended to the token register \MPtoks (already defined). Then we<br />

typeset the content of \MPtoks in \MPbox (also already defined). The width of the box is passed to<br />

METAPOST and stored in len.<br />

By default the content of the drawing is expanded, which means that the macro is replaced by its<br />

current meaning, so the current width ends up in the METAPOST file. The next part of the drawing,<br />

starting with btex, puts the token in a picture. This time we don't expand the drawing, since we<br />

want to pass font information. Here, the [-] suppresses expansion of btex \bfd #1 etex. The<br />

process is iterated by \handletokens for each character of the text MetaPost is Fun!.<br />

Before we typeset the text, now available in pieces in pic, in a circle, we will first demonstrate<br />

what they look like. You may like to take a look at the file mpgraph.mp to see what is passed to<br />

METAPOST.<br />

\startMPdrawing<br />

pair len ; len := origin ;<br />

for i=1 upto n :<br />

draw pic[i] shifted len ;<br />

draw boundingbox pic[i] shifted len<br />

withpen pencircle scaled .25pt withcolor red ;<br />

len := len+(xpart urcorner pic[i]-xpart llcorner pic[i],0) ;<br />

endfor ;<br />

\stopMPdrawing<br />

We can call up this drawing with \getMPdrawing, but first we inform the compiler that our META<br />

POST drawing is completed.<br />

\MPdrawingdonetrue\getMPdrawing<br />

This results in:<br />

MetaPostisFun!<br />

Compare this text with the text as typeset by TEX:<br />

MetaPost is Fun!<br />

and you will see that the text produced by METAPOST is not properly kerned. When putting characters<br />

after each other, TEX uses the information available in the font, to optimize the spacing between<br />

characters, while METAPOST looks at characters as separate entities. But, since we have stored the<br />

optimal spacing in len, we can let METAPOST do a better job. Let's first calculate the correction<br />

needed.<br />

\startMPdrawing<br />

for i=1 upto n :<br />

wid[i] := abs(xpart urcorner pic[i] - xpart llcorner pic[i]) ;<br />

pos[i] := len[i]-wid[i] ;<br />

TEX text Typesetting in METAPOST<br />

229

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!