perilaku yang berbeda lualatex dan xelatex menggunakan pckages tanaman dan tikzpagenodes
Menggunakan tikzpagenodes
paket untuk memposisikan elemen di halaman, saya perhatikan bahwa saat memuat crop
paket, XeLaTeX
dan LuaLaTeX
memiliki perilaku yang berbeda.
XeLaTeX
salah menghitung current page node
koordinat. Untuk mendapatkan koordinat yang benar current page node
harus digeser menggunakan hoffset
dan 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
Saya kira ini disebabkan oleh kesalahan ketik pada pgf
file driver untuk xetex, dan masalahnya telah dilaporkan ke pgf
, lihathttps://github.com/pgf-tikz/pgf/issues/909. Paket crop
menetapkan bukan nol \hoffset
dan \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 page
disediakan langsung oleh tikz
, jadi tidak perlu memuat tikzpagenodes
paket.