\ pagedir pgfpages가있는 TRT로 인해 잘못된 결과가 발생합니다 (페이지 밖으로 이동).

Aug 19 2020

\pagedir TRTwith \pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm,landscape]from 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}

업데이트 2020/08/22

을 사용하여 논리적 페이지를 이동하는 방법을 찾았습니다 \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

나는 \pgfpoint이와 같은 모든 명령 내에서 x 좌표를 반전시키는 솔루션을 찾습니다.

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