Wie erhält man das Gegenteil von {?x} und {?y}?

Wie erhält man das Gegenteil von {?x} und {?y}?

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 dvisvgmErsatzstoffe {?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 derbeamertranslate(--12.345,-6.789)-XKoordinate) wird in die SVG-Datei geschrieben.

Ein anderer Ansatz könnte darin bestehen, eine Inline-Berechnung in das translateArgument 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 dvisvgmeine Möglichkeit, Berechnungen mit den Substitutionsparametern {?x}auch {?y}im dvisvgm:rawSpeziellen 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.

Bildbeschreibung hier eingeben

\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 transformAttributs 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>}%

verwandte Informationen