¿Cómo obtener el opuesto de {?x} y {?y}?

¿Cómo obtener el opuesto de {?x} y {?y}?

Para ciertas aplicaciones, como transformaciones de objetos SVG, necesito el opuesto (veces -1) de la posición actualXyycoordenadas, como en

\special{dvisvgm:raw <g id='myGroup' transform='translate(-{?x},-{?y})'>}
...
\special{dvisvgm:raw </g>}

donde dvisvgmsustitutos {?x}y {?y}con elXyyvalores del sistema de coordenadas SVG que corresponden a la ubicación actual en la página del documento.

Sin embargo, en el caso de valores negativos sustituidos por {?x}y/o {?y}(lo que puede suceder en beamerdocumentos de clase), esto conduce a un SVG no válido, como algo así como translate(--12.345,-6.789)(dos " -" consecutivos en elXcoordinar) se escribe en el archivo SVG.

Otro enfoque podría ser colocar un cálculo en línea en el translateargumento, como

translate({?x}/-1, {?y}/-1)

pero esto no parece estar permitido en los atributos de elementos SVG, ya que genera un error de análisis en el navegador web.

De ahí la pregunta: ¿Se dvisvgmproporciona un medio para realizar cálculos en los parámetros de sustitución {?x}y {?y}en los dvisvgm:rawespeciales?

Respuesta1

Debería poder transformar el espacio de coordenadas para no necesitar negar los valores.

Estas dos transformaciones hacen lo mismo.

ingrese la descripción de la imagen aquí

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

Respuesta2

Inspirándome en la respuesta de David Carlisle, profundicé un poco más en los archivos SVG existentes y descubrí que las transformaciones se pueden concatenar dentro del mismo transformatributo. Esto permite una formulación aún más compacta sin niveles de grupo adicionales:

\special{dvisvgm:raw <g id='myGroup' transform='scale(-1)translate({?x},{?y})scale(-1)'>}%
xyz
\special{dvisvgm:raw </g>}%

información relacionada