如何求 {?x} 和 {?y} 的相反數?

如何求 {?x} 和 {?y} 的相反數?

對於某些應用程序,例如 SVG 物件的轉換,我需要當前位置的相反值(乘以 -1)Xy座標,例如

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

其中dvisvgm替代品{?x}{?y}Xy與文件頁面上的目前位置相對應的 SVG 座標系值。

{?x}然而,在負值替換and/or的情況下{?y}(這可能發生在beamer類文檔中),這會導致無效的 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>}%

相關內容