Die y-Koordinate der Grundlinie von mit `btex ... etex` gesetztem Text ist in MetaPost im Normalfall Null. Für die Positionierung der Grafik in TeX ist jedoch die Bounding-Box maßgeblich. Diese wird durch Unterlängen im Text oder weitere Grafikelemente bestimmt, wie hier dem Kreis. Um zu erreichen, dass in TeX die Grundlinie der MetaPost-Grafik mit der Grundlinie der aktuellen Zeile übereinstimmt, muss die Bounding-Box der Grafik unterhalb der Abszisse abgeschnitten werden. Dies lässt sich mit Hilfe des Kommando `setbounds` erreichen. Zusätzlich muss die interne Variable `bboxmargin` auf Null gesetzt werden, die einen Zuschlag zur eigentlichen Bounding-Box festlegt. Im folgenden Beispiel wird ein Makro `schneide_unterhalb` definiert, welches die Korrektur der Bounding-Box vornimmt. Argument ist eine y-Koordinate. Das Makro muss als letztes vor `endfig` ausgeführt werden.
\documentclass{article}
\usepackage{luamplib}
\begin{document}
Die Kreiszahl
\begin{mplibcode}
def schneide_unterhalb(expr y) =
begingroup
save bb; path bb;
interim bboxmargin := 0;
bb := bbox currentpicture;
setbounds currentpicture to
(xpart llcorner bb, y) -- (xpart lrcorner bb, y) --
urcorner bb -- ulcorner bb -- cycle;
endgroup
enddef;
u := 10;
beginfig(0);
picture text;
text := btex $\pi$ etex;
draw text;
draw fullcircle scaled u shifted center text;
schneide_unterhalb(0);
endfig;
\end{mplibcode}
ist eine mathematische Konstante.
\end{document}
![alt text][1]
![gesetztes Beispiel][1]
Falls man mehrere Grafiken so behandeln möchte, kann man das Makro auch automatisch per `extra_endfig` ausführen lassen:
extra_endfig := extra_endfig & "schneide_unterhalb(0);";
Zumindest in MetaPost. Die Umgebung `mplibcode` des Pakets `luamplib` scheint übergreifende Variablenzuweisungen momentan nicht zu unterstützen. Als Behelf kann man die Makrodefinition und die Zuweisung an `extra_endfig` auch in eine Datei schreiben und diese in jeder Umgebung per `input` einbinden. Es empfiehlt sich dann, statt des
Makroparameters eine neue interne Variable einzuführen.
newinternal numeric lowerbb;
lowerbb := 0;
def schneide_unterhalb =
begingroup
save bb; path bb;
interim bboxmargin := 0;
bb := bbox currentpicture;
setbounds currentpicture to
(xpart llcorner bb, lowerbb) -- (xpart lrcorner bb, lowerbb) --
urcorner bb -- ulcorner bb -- cycle;
endgroup
enddef;
extra_endfig := extra_endfig & "schneide_unterhalb;";
Bindet man dieses Paket ein, wird die Bounding-Box jeder Grafik unterhalb der y-Koordinate Null abgeschnitten. Durch Zuweisungen an die Variable `lowerbb` kann man die y-Kordinate für einzelne Grafiken ändern. Die Zuweisungen sollten lokal mittels `interim` erfolgen, da `luamplib` in Zukunft möglicherweise umgebungsübergreifende Zuweisungen unterstützt.
[1]: http://i.imgur.com/sheUzwC.png?1http://i.imgur.com/sheUzwC.png?1