comportamiento diferente lualatex y xelatex usando paquetes de cultivo y tikzpagenodes

Aug 18 2020

Usando el tikzpagenodespaquete para posicionar elementos en la página, noté que al cargar el croppaquete, XeLaTeXya LuaLaTeXtienen un comportamiento diferente.

XeLaTeXcalcula incorrectamente las current page nodecoordenadas. Para obtener las coordenadas correctas, se current page nodedebe cambiar con hoffsety voffset.

El MWE a continuación muestra dos rectángulos que cubren el current page node. El azul es el nodo calculado por tikzpagenodes; el rojo se ha cambiado para tener el rectángulo correcto con XeLaTeX.

\documentclass{article}
\usepackage{calc}
\usepackage[
%
  paperwidth = 210mm, 
  paperheight = 270mm,
  includefoot,
  includemp,
  nomarginpar,
%  textwidth
%  textheight
% marginparwidth
% marginparsep
  inner = 19.2mm+10mm,
  outer = 19.2mm+10mm,
  top = 14.6mm,
  bottom = 10.8mm,
  bindingoffset = 5.4mm,
%  showcrop
]%
{geometry}

\usepackage%
[
cam,
width = 230mm,
height = 290mm,
center]%
{crop}

\usepackage{tikzpagenodes}
\usetikzlibrary{calc}


\begin{document}
\tikz[remember picture,overlay] {%
\draw [blue,line width=2mm]
(current page.south west)
rectangle
(current page.north east)
;

\draw [red,line width=2mm]
($(current page.south west)+ (-\hoffset, \voffset)$)
rectangle
($(current page.north east)+ (-\hoffset, \voffset)$)
;
}%
\end{document}

Salida correcta con LuaLaTeX:

Salida incorrecta con XeLaTeX:

Respuestas

muzimuzhiZ Aug 18 2020 at 22:47

Supongo que esto se debe a un error tipográfico en pgfel archivo del controlador de xetex, y se ha informado del problema a pgf, consultehttps://github.com/pgf-tikz/pgf/issues/909. El paquete cropestablece distintos de cero \hoffsety \voffset, que descubren el problema.

El siguiente fragmento de código se puede utilizar como solución temporal a corto plazo.

% after tikz is loaded
\usepackage{iftex}

\makeatletter
\ifXeTeX
  \def\pgf@sys@pdf@mark@pos@pgfpageorigin{\pgfqpoint{\hoffset}{\voffset}}
\fi
\makeatother

Un ejemplo completo:

\documentclass{article}
\usepackage{calc}
\usepackage[
  paperwidth = 210mm, 
  paperheight = 270mm,
  includefoot,
  includemp,
  nomarginpar,
%  textwidth
%  textheight
% marginparwidth
% marginparsep
  inner = 19.2mm+10mm,
  outer = 19.2mm+10mm,
  top = 14.6mm,
  bottom = 10.8mm,
  bindingoffset = 5.4mm,
%  showcrop
]%
{geometry}

\usepackage[
  cam,
  width = 230mm,
  height = 290mm,
  center
]%
{crop}

\usepackage{tikz}
\usepackage{iftex}

\makeatletter
\ifXeTeX
  \def\pgf@sys@pdf@mark@pos@pgfpageorigin{\pgfqpoint{\hoffset}{\voffset}}
\fi
\makeatother

\begin{document}
\tikz[remember picture,overlay]
  \draw [blue,line width=2mm]
    (current page.south west) rectangle (current page.north east);
\end{document}

PD: El nodo current pagelo proporciona directamente tikz, por lo que no es necesario cargar el tikzpagenodespaquete.