如何得到 {?x} 和 {?y} 的反面?

如何得到 {?x} 和 {?y} 的反面?

对于某些应用,例如 SVG 对象的转换,我需要当前位置的相反数(乘以 -1)X坐标,例如

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

替代dvisvgm{?x}{?y}X与文档页面上的当前位置相对应的 SVG 坐标系的值。

然而,如果用负值代替{?x}and/or {?y}(可能出现在beamer-class 文档中),则会导致无效的 SVG,就像translate(--12.345,-6.789)-X坐标)写入 SVG 文件。

另一种方法可能是在参数中放置内联计算translate,例如

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

但这似乎在 SVG 元素属性中是不允许的,因为它会导致 Web 浏览器出现解析错误。

因此问题是:是否dvisvgm提供一种对替代参数{?x}和特殊{?y}参数进行计算的方法dvisvgm:raw

答案1

您应该能够转换坐标空间,这样您就不需要否定这些值。

这两个变换做同样的事情。

在此处输入图片描述

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

答案2

受 David Carlisle 的回答启发,我深入研究了现有的 SVG 文件,发现可以在同一transform属性内连接转换。这样可以实现更紧凑的公式,而无需额外的组级别:

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

相关内容