TikZ3 中的绝对定位

TikZ3 中的绝对定位

我也正在提交解决方案,请节省您在这个问题上的时间和精力。

我的问题是这样的。将 TikZ2 升级到 TikZ3 后,绝对定位在某些情况下会停止工作。这是我期望页面顶部有一个正方形的代码(左图),但我得到的是不同的(右图)。我们该如何在 TikZ3 中修复它?

%! pdflatex or xelatex or lualatex
%! bug0002-problem.tex
%! running it twice
\documentclass[a4paper]{article}
\pagestyle{empty}
\addtolength{\hoffset}{-1in}
\addtolength{\voffset}{-1in}
\usepackage{tikz} % version 3
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
\node[minimum width=4cm, minimum height=4cm, draw, fill=orange, anchor=north] at (current page.north) {Hello World!};
\end{tikzpicture}
\end{document}

示例 1

答案1

我认为没有必要明确表达当我看到 TikZ3 中的所有新功能时我有多高兴,以及当关键功能(对我来说)不时停止正常工作时我有多不高兴。

我的第一个解决方案从代码本身就很明显:注释掉\addtolength{\hoffset}{-1in}\addtolength{\voffset}{-1in}。在实际项目中追踪它并不那么简单,而且当页面镜像很久以前设置时,我不可能使用这样的解决方案。这是代码。

%! pdflatex or xelatex or lualatex
%! bug0002-solution-a.tex
%! running it twice
% This solution works in xelatex!
\documentclass[a4paper]{article}
\pagestyle{empty}
%\addtolength{\hoffset}{-1in}
%\addtolength{\voffset}{-1in}
\usepackage{tikz} % version 3
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
\node[minimum width=4cm, minimum height=4cm, draw, fill=orange, anchor=north] at (current page.north) {Hello World!};
\end{tikzpicture}
\end{document}

我需要另一种解决方案,而且我已经找到了:让我们将\hoffset\voffset维度恢复为它们的初始值,但仅限于所有环境中,tikzpicture因为 TikZ3 显然正在使用它们进行计算。请尝试这个示例,我使用\tikzset并修改了样式every picture

%! pdflatex or xelatex or lualatex
%! bug0002-solution-b.tex
%! running it twice
% This solution does not work in xelatex!
\documentclass[a4paper]{article}
\pagestyle{empty}
\addtolength{\hoffset}{-1in}
\addtolength{\voffset}{-1in}
\usepackage{tikz} % version 3
\begin{document}
\tikzset{every picture/.style={execute at begin picture={
   \hoffset=0pt
   \voffset=0pt
   }}} 
\begin{tikzpicture}[remember picture, overlay]
\node[minimum width=4cm, minimum height=4cm, draw, fill=orange, anchor=north] at (current page.north) {Hello World!};
\end{tikzpicture}
\end{document}

我相信还有更多事情发生,因为这个解决方案在 中不起作用,但在和xelatex中起作用。我们可以轻松比较预期(左图)和实际输出(右图)。恐怕我的答案是打开一个子问题。如何在 TikZ3 中修复这个问题?pdflatexlualatexxelatex

示例 2

相关内容