Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4
zu extra_endfig und luamplib

27 Jun '13, 09:35

Stephan%20Hennig's gravatar image

Stephan Hennig
5613

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
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3
block-code markup

27 Jun '13, 00:54

cgnieder's gravatar image

cgnieder
22.1k253463

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] 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);"; [1]: http://i.imgur.com/sheUzwC.png?1
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2
Füge Bild ein.

27 Jun '13, 00:41

Stephan%20Hennig's gravatar image

Stephan Hennig
5613

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

27 Jun '13, 00:19

Stephan%20Hennig's gravatar image

Stephan Hennig
5613

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×