Абсолютное позиционирование в 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, но работает в pdflatexи lualatex. Мы можем легко сравнить ожидаемый (картинка слева) и фактический вывод из xelatex(картинка справа). Боюсь, мой ответ открывает подвопрос. Как это можно исправить в TikZ3?

пример 2

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