perilaku yang berbeda lualatex dan xelatex menggunakan pckages tanaman dan tikzpagenodes

Aug 18 2020

Menggunakan tikzpagenodespaket untuk memposisikan elemen di halaman, saya perhatikan bahwa saat memuat croppaket, XeLaTeXdan LuaLaTeXmemiliki perilaku yang berbeda.

XeLaTeXsalah menghitung current page nodekoordinat. Untuk mendapatkan koordinat yang benar current page nodeharus digeser menggunakan hoffsetdan voffset.

MWE di bawah ini menunjukkan, dua persegi panjang yang menutupi current page node. Yang biru adalah node yang dihitung dengan tikzpagenodes; yang merah telah digeser agar memiliki persegi panjang yang benar 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}

Output yang benar dengan LuaLaTeX:

Keluaran salah dengan XeLaTeX:

Jawaban

muzimuzhiZ Aug 18 2020 at 22:47

Saya kira ini disebabkan oleh kesalahan ketik pada pgffile driver untuk xetex, dan masalahnya telah dilaporkan ke pgf, lihathttps://github.com/pgf-tikz/pgf/issues/909. Paket cropmenetapkan bukan nol \hoffsetdan \voffset, yang mengungkap masalah.

Potongan kode berikut dapat digunakan sebagai solusi jangka pendek.

% after tikz is loaded
\usepackage{iftex}

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

Contoh lengkapnya:

\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 pagedisediakan langsung oleh tikz, jadi tidak perlu memuat tikzpagenodespaket.