Как получить противоположность {?x} и {?y}?

Как получить противоположность {?x} и {?y}?

Для некоторых приложений, таких как преобразования объектов SVG, мне нужна противоположность (умноженная на -1) текущей позицииИксиукоординаты, такие как в

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

где dvisvgmзаменители {?x}и {?y}сИксиузначения системы координат SVG, соответствующие текущему местоположению на странице документа.

Однако в случае замены отрицательных значений на {?x}and/or {?y}(что может произойти в beamerдокументах класса -), это приводит к недопустимому SVG, например translate(--12.345,-6.789)(два последовательных " -" вИкскоордината) записывается в файл SVG.

Другой подход может заключаться в размещении встроенного вычисления в translateаргументе, например:

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

но, похоже, это не допускается в атрибутах элемента SVG, поскольку приводит к ошибке синтаксического анализа в веб-браузере.

Отсюда вопрос: 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

Вдохновленный ответом Дэвида Карлайла, я немного углубился в существующие файлы SVG и обнаружил, что преобразования можно объединять в одном transformатрибуте. Это позволяет получить еще более компактную формулировку без дополнительных групповых уровней:

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

Связанный контент