พฤติกรรมที่แตกต่างกัน lualatex และ xelatex โดยใช้การครอบตัดและ tikzpagenodes pckages

Aug 18 2020

การใช้tikzpagenodesแพคเกจเพื่อจัดตำแหน่งองค์ประกอบในหน้าฉันสังเกตเห็นว่าเมื่อโหลดcropแพ็กเกจXeLaTeXและLuaLaTeXมีพฤติกรรมที่แตกต่างกัน

XeLaTeXคำนวณcurrent page nodeพิกัดไม่ถูกต้อง เพื่อให้ได้พิกัดที่ถูกต้องcurrent page nodeควรจะเปลี่ยนการใช้และhoffsetvoffset

MWE ด้านล่างแสดงรูปสี่เหลี่ยมสองรูปที่ครอบคลุมไฟล์current page node. สีน้ำเงินคือโหนดที่คำนวณโดยtikzpagenodes; 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}

แก้ไขผลลัพธ์ด้วยLuaLaTeX:

ผลลัพธ์ไม่ถูกต้องด้วยXeLaTeX:

คำตอบ

muzimuzhiZ Aug 18 2020 at 22:47

ผมคิดว่านี้เกิดจากการพิมพ์ผิดในpgfไฟล์ไดรเวอร์ 's สำหรับ xetex และปัญหาได้รับการรายงานไปpgfให้ดูhttps://github.com/pgf-tikz/pgf/issues/909. แพ็กเกจcropตั้งค่าที่ไม่เป็นศูนย์\hoffsetและ\voffsetเปิดเผยปัญหา

สามารถใช้ข้อมูลโค้ดต่อไปนี้เป็นวิธีแก้ปัญหาระยะสั้นได้

% after tikz is loaded
\usepackage{iftex}

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

ตัวอย่างเต็ม:

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

ปล: โหนดcurrent pageมีให้โดยตรงtikzดังนั้นจึงไม่จำเป็นต้องโหลดtikzpagenodesแพ็คเกจ