Смещение координат TikZ ведет себя по-другому на новой машине

Смещение координат TikZ ведет себя по-другому на новой машине

Я начал использовать новый компьютер, и один из моих предыдущих кодов TikZ выдал неожиданные результаты. После его отладки я пришел к следующему MWE.

\documentclass{article}
\usepackage{tikz}

\begin{document}
\thispagestyle{empty}
    \begin{tikzpicture}[remember picture,overlay]
        \coordinate  (CENTER) at (current page.center);
        \coordinate  (A) at ([xshift=1cm,yshift=-2cm] CENTER); %This coordinate is not shifted on PGF 3.1.5 running on texlive on windows; but it is shifted on PGFs 3.1 running on MacTex.
        \coordinate [xshift=1cm,yshift=-2cm] (B) at (CENTER); %This is shifted in both computers.

        \node at (CENTER) {XXX};
        \node at (A) {000};
        \node at (B) {111};
    \end{tikzpicture}
\end{document}

Странно, но смещение не применяется к координате (A), поэтому она остается над (CENTER), когда я компилирую этот код на новой машине (совершенно новый vanilla texlive на Windows с обновленной версией PGF 3.1.5). Однако на моем предыдущем компьютере (работающем под управлением MacTex 2019 с PGF версии 3.1 на MACOS) координата (A) смещена, поэтому она отображается над (B).

Такое поведение происходит с координатами, но не с узлами. В следующем коде узлы (A) и (B) появляются в одной и той же позиции, как и ожидалось.

\begin{tikzpicture}[remember picture,overlay]
    \node  (CENTER) at (current page.center) {XXX};
    \node  (A) at ([xshift=1cm,yshift=-2cm] CENTER) {000};
    \node [xshift=1cm,yshift=-2cm] (B) at (CENTER) {111};
\end{tikzpicture}%

Кто-нибудь знает, почему это происходит? Мне следует сообщить об этом как об ошибке где-то (как)? Я беспокоюсь, что мне придется обновить все мои старые коды, чтобы скомпилировать файлы на новой машине.

решение1

Этот вопрос уже рассматривается не столь прямо в#809. Поскольку это серьезная проблема,исправление 3.1.5aуже выпущен, и вы сможете получить его на CTAN через пару дней.

В это время,Анри Менкеобеспечивает обходной путь:

\makeatletter
\def\tikz@@coordinate@at@math#1{%
  \pgf@process{#1}%
  \edef\tikz@temp{(\the\pgf@x,\the\pgf@y)}%
  \expandafter\tikz@coordinate@caller\tikz@temp{}%
}%
\makeatother

Рабочий пример в 3.1.5:

\documentclass{article}
\usepackage{tikz}
\makeatletter
\def\tikz@@coordinate@at@math#1{%
  \pgf@process{#1}%
  \edef\tikz@temp{(\the\pgf@x,\the\pgf@y)}%
  \expandafter\tikz@coordinate@caller\tikz@temp{}%
}%
\makeatother
\begin{document}
\begin{tikzpicture}[remember picture,overlay]
  \coordinate (CENTER) at (current page.center);
  \coordinate (A) at ([xshift=1cm,yshift=-2cm] CENTER);
  \coordinate [xshift=1cm,yshift=-2cm] (B) at (CENTER); 
  \node at (CENTER) {XXX};
  \node at (A) {000};
  \node at (B) {111};
\end{tikzpicture}
\end{document}

введите описание изображения здесь

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