我开始使用一台新电脑,而我之前的一个 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}
奇怪的是,当我在新机器(Windows 上的全新 vanilla texlive,带有更新的 PGF 版本 3.1.5)中编译此代码时,移位不适用于坐标 (A),因此它停留在 (CENTER) 上方。然而,在我之前的电脑上(在 MACOS 上运行 MacTex 2019 和 PGF 版本 3.1),坐标 (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}