Für bestimmte Anwendungen, wie z. B. Transformationen von SVG-Objekten, benötige ich das Gegenteil (mal -1) der aktuellen PositionXUndjKoordinaten, wie in
\special{dvisvgm:raw <g id='myGroup' transform='translate(-{?x},-{?y})'>}
...
\special{dvisvgm:raw </g>}
wo dvisvgm
Ersatzstoffe {?x}
und {?y}
mit derXUndjWerte des SVG-Koordinatensystems, die der aktuellen Position auf der Dokumentseite entsprechen.
Wenn jedoch negative Werte für {?x}
und/oder verwendet werden (was in -Klassendokumenten {?y}
vorkommen kann ), führt dies zu ungültigem SVG, wie etwa (zwei aufeinanderfolgende " " in derbeamer
translate(--12.345,-6.789)
-
XKoordinate) wird in die SVG-Datei geschrieben.
Ein anderer Ansatz könnte darin bestehen, eine Inline-Berechnung in das translate
Argument einzufügen, wie etwa
translate({?x}/-1, {?y}/-1)
Dies scheint jedoch in SVG-Elementattributen nicht zulässig zu sein, da es zu einem Analysefehler im Webbrowser führt.
Daher die Frage: Gibt es dvisvgm
eine Möglichkeit, Berechnungen mit den Substitutionsparametern {?x}
auch {?y}
im dvisvgm:raw
Speziellen durchzuführen?
Antwort1
Sie sollten in der Lage sein, den Koordinatenraum so zu transformieren, dass Sie die Werte nicht negieren müssen.
Diese beiden Transformationen machen dasselbe.
\documentclass{article}
\begin{document}
===
\vspace{2cm}
aaa
\special{dvisvgm:raw <g id='myGroup' transform='translate(-10,-20)'>}%
xyz
\special{dvisvgm:raw </g>}%
bbb
\vspace{2cm}
aaa
\special{dvisvgm:raw <g id='myGroup2' transform='scale(-1)'>}%
\special{dvisvgm:raw <g transform='translate(10,20)'>}%
\special{dvisvgm:raw <g transform='scale(-1)'>}%
xyz
\special{dvisvgm:raw </g>}%
\special{dvisvgm:raw </g>}%
\special{dvisvgm:raw </g>}%
bbb
\end{document}
Antwort2
Inspiriert von David Carlisles Antwort habe ich mich etwas eingehender mit vorhandenen SVG-Dateien befasst und festgestellt, dass Transformationen innerhalb desselben transform
Attributs verkettet werden können. Dies ermöglicht eine noch kompaktere Formulierung ohne zusätzliche Gruppierungsebenen:
\special{dvisvgm:raw <g id='myGroup' transform='scale(-1)translate({?x},{?y})scale(-1)'>}%
xyz
\special{dvisvgm:raw </g>}%