Я также отправляю решение, пожалуйста, сэкономьте свое время и силы на этом вопросе.
У меня вот такая проблема. Абсолютное позиционирование перестало работать в некоторых случаях после обновления 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
Думаю, нет необходимости открыто выражать, как я был счастлив, когда увидел все новые функции в 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?