Para certas aplicações, como transformações de objetos SVG, preciso do oposto (vezes -1) da posição atualxesimcoordenadas, como em
\special{dvisvgm:raw <g id='myGroup' transform='translate(-{?x},-{?y})'>}
...
\special{dvisvgm:raw </g>}
onde dvisvgm
substitutos {?x}
e {?y}
com oxesimvalores do sistema de coordenadas SVG que correspondem à localização atual na página do documento.
Porém, no caso de valores negativos substituídos por {?x}
e/ou {?y}
(o que pode acontecer em beamer
documentos -class), isso leva a SVG inválido, como algo como translate(--12.345,-6.789)
(dois " -
" consecutivos noxcoordenada) é gravado no arquivo SVG.
Outra abordagem poderia ser colocar um cálculo embutido no translate
argumento, como
translate({?x}/-1, {?y}/-1)
mas isso não parece ser permitido nos atributos do elemento SVG, pois leva a um erro de análise no navegador da Web.
Daí a pergunta: dvisvgm
Fornece um meio para realizar cálculos nos parâmetros de substituição {?x}
e {?y}
nos dvisvgm:raw
especiais?
Responder1
Você deve ser capaz de transformar o espaço de coordenadas para não precisar negar os valores.
Essas duas transformações fazem a mesma coisa.
\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}
Responder2
Inspirado na resposta de David Carlisle, me aprofundei um pouco mais nos arquivos SVG existentes e descobri que as transformações podem ser concatenadas no mesmo transform
atributo. Isto permite uma formulação ainda mais compacta sem níveis de grupo adicionais:
\special{dvisvgm:raw <g id='myGroup' transform='scale(-1)translate({?x},{?y})scale(-1)'>}%
xyz
\special{dvisvgm:raw </g>}%