Como obter o oposto de {?x} e {?y}?

Como obter o oposto de {?x} e {?y}?

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 dvisvgmsubstitutos {?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 beamerdocumentos -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 translateargumento, 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: dvisvgmFornece um meio para realizar cálculos nos parâmetros de substituição {?x}e {?y}nos dvisvgm:rawespeciais?

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.

insira a descrição da imagem aqui

\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 transformatributo. 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>}%

informação relacionada