\ pagedir TRT พร้อม pgfpages ทำให้ผลลัพธ์ไม่ถูกต้อง (เลื่อนออกจากหน้า)

Aug 19 2020

การใช้\pagedir TRTกับ \pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm,landscape]จากpgfpagesแพ็กเกจจะสร้างเพจตรรกะที่จะเลื่อนออกจากหน้า

ปัญหาเดียวกันกับเล4 on 1ย์เอาต์8 on 1, 16 on 1.

% lualatex 
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{pgfpages}

\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm,landscape]

\begin{document}

\pagedir TRT \bodydir TRT \pardir TRT

\Huge 

Page 1
 
\newpage

Page 2

\end{document}

อัพเดต 22/08/2020

ฉันพบวิธีการเปลี่ยนหน้าตรรกะโดยใช้\pagerightoffsetปัญหาคือสำหรับทุกเลย์เอาต์ฉันต้องเพิ่มจำนวนกะด้วยตนเอง

ตัวอย่างที่มีหน้าแนวนอนเค้าโครง 2 ต่อ 1

% lualatex 
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{pgfpages}


\pgfpagesuselayout{2 on 1}[a4paper,landscape]

\begin{document}

\pagerightoffset = .55\pgfphysicalwidth % <--
\pagedir TRT \bodydir TRT \pardir TRT 

\Huge 

Page 1
 
\newpage

Page 2

\end{document}

คำตอบ

3 DavidPurton Aug 19 2020 at 21:00

ฉันคิดว่าคุณจะต้องสร้างเลย์เอาต์ใหม่ที่จัดวางหน้าเว็บ RTL

ฉันเปลี่ยนหนึ่งบรรทัดใน2 on 1เค้าโครงจาก:

center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%

ถึง:

center=\pgfpoint{-.25\pgfphysicalwidth}{.5\pgfphysicalheight}%

ฉันทำสิ่งนี้กับxpatch:

\usepackage{xpatch}
\expandafter\xpatchcmd\csname pgfpages@layout@2 on 1\endcsname
  {center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}}
  {center=\pgfpoint{-.25\pgfphysicalwidth}{.5\pgfphysicalheight}}
  {}
  {}

สำหรับเลย์เอาต์ที่มีจำนวนหน้าต่อหน้ามากขึ้นคุณต้องเรียกหลายxpatchcmdครั้ง

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

\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{pgfpages}

\pgfpagesdeclarelayout{rtl 2 on 1}
{
  \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default
  \edef\pgfpageoptionwidth{\the\paperheight}
  \def\pgfpageoptionborder{0pt}
  \def\pgfpageoptionfirstshipout{1}
}
{
  \pgfpagesphysicalpageoptions
  {%
    logical pages=2,%
    physical height=\pgfpageoptionheight,%
    physical width=\pgfpageoptionwidth,%
    current logical shipout=\pgfpageoptionfirstshipout%
  }
  \ifdim\paperheight>\paperwidth\relax
    % put side-by-side
    \pgfpageslogicalpageoptions{1}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.5\pgfphysicalwidth,%
      resized height=\pgfphysicalheight,%
      center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{2}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.5\pgfphysicalwidth,%
      resized height=\pgfphysicalheight,%
      center=\pgfpoint{-.25\pgfphysicalwidth}{.5\pgfphysicalheight}% <- Shift second page to left hand side
    }%
  \else
    % stack on top of one another
    \pgfpageslogicalpageoptions{1}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=\pgfphysicalwidth,%
      resized height=.5\pgfphysicalheight,%
      center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{2}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=\pgfphysicalwidth,%
      resized height=.5\pgfphysicalheight,%
      center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
  \fi    
}

\pgfpagesuselayout{rtl 2 on 1}[a4paper,border shrink=5mm,landscape]

\usepackage[bidi=basic-r,nil]{babel}
\babelprovide[import,main]{arabic}
\babelfont{rm}{Amiri}
      
\begin{document}

\Huge 
نص من اليمين الى اليسار

 الصفحة الأولى 1

\newpage

\Huge 
نص من اليمين الى اليسار

الصفحة الثانية 2

\end{document}

SalimBou Aug 24 2020 at 22:01

ฉันพบวิธีแก้ปัญหาที่สลับพิกัด x ภายในทุก\pgfpointคำสั่งเช่นนี้

\let\Pgfpoint\pgfpoint
\def\pgfpoint#1#2{\Pgfpoint{-1*#1}{#2}}

ต้องเพิ่มโปรแกรมแก้ไขนี้ในคำสั่งpgfpagesที่มีคำสั่ง\pgfpointเพื่อ จำกัด การดำเนินการของโปรแกรมแก้ไขภายในคำสั่งอื่นจากแพ็คเกจอื่น

% lualatex 
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{pgfpages}


\let\Pgfpoint\pgfpoint
\def\pgfpoint#1#2{\Pgfpoint{-1*#1}{#2}}
\pgfpagesuselayout{4 on 1}[a4paper,landscape]

\begin{document}

\pagedir TRT \bodydir TRT \pardir TRT 

\Huge 

Page 1
 
\newpage

Page 2

\newpage

Page 3

\newpage

Page 4

\end{document}