comportement différent lualatex et xelatex en utilisant les pckages crop et tikzpagenodes

Aug 18 2020

En utilisant le tikzpagenodespackage pour positionner des éléments dans la page, j'ai remarqué que lors du chargement du croppackage, XeLaTeXet LuaLaTeXavoir un comportement différent.

XeLaTeXcalcule incorrectement les current page nodecoordonnées. Pour obtenir les coordonnées correctes, le current page nodedoit être décalé en utilisant hoffsetet voffset.

Le MWE ci-dessous montre, deux rectangles couvrant le current page node. Le bleu est le nœud calculé par tikzpagenodes; le rouge a été décalé pour avoir le rectangle correct avec 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}

Corriger la sortie avec LuaLaTeX:

Sortie incorrecte avec XeLaTeX:

Réponses

muzimuzhiZ Aug 18 2020 at 22:47

Je suppose que cela est dû à une faute de frappe dans pgfle fichier du pilote de xetex, et le problème a été signalé pgf, voirhttps://github.com/pgf-tikz/pgf/issues/909. Les cropensembles de packages sont différents de zéro \hoffsetet \voffset, qui découvrent le problème.

L'extrait de code suivant peut être utilisé comme solution de contournement à court terme.

% after tikz is loaded
\usepackage{iftex}

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

Un exemple complet:

\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}

PS: Node current pageest directement fourni par tikz, il n'est donc pas nécessaire de charger le tikzpagenodespackage.