从某一点开始反转页面顺序

从某一点开始反转页面顺序

在我的文档中,我希望从特定点开始的页面以相反的页面顺序出现,即最后一页应该首先出现,然后是倒数第二页,等等。我该怎么做?

(我并不想反转内容——只想反转页面出现的顺序)

答案1

这会反转设置时输出的页面顺序,并在激活\RPtrue时保持页面的正常顺序。参考和超链接应该可以工作。我使用 Heiko Oberdiek 的包来挂接原语(负责将页面发送到 dvi/pdf 文件):我们不是将页面发送出去,而是将它们存储在 中。也就是说, 的内容具有以下形式\RPfalseatbegshi\shipout\RPbox\RPbox

  • 跳过1 pt
  • 第一页需要翻转。
  • 大小的字距<first page number> sp
  • 第二页要反转。
  • 大小的字距<second page number> sp
  • ETC。

然后\RPfalse我们使用\lastkern\lastbox检索盒子寄存器的内容并逐页发送页面,并放置正确的页码(这确保引用正确)。对的赋值是\c@page在本地完成的,这样一旦输出了所有页面,就会恢复旧值。

另外,我\clearpage在宏中放入了一个\RPtrue\RPfalse因为我认为这会更有意义,但没有它事情也应该可以正常工作。

\documentclass{article}
\usepackage{atbegshi}
\newif\ifRP
\newbox\RPbox
\setbox\RPbox\vbox{\vskip1pt}
\makeatletter
\AtBeginShipout{%
  \ifRP
    \AtBeginShipoutDiscard%
    \global\setbox\RPbox\vbox{\unvbox\RPbox
      \box\AtBeginShipoutBox\kern\c@page sp}%
  \fi
}%
\renewcommand{\RPtrue}{%
  \clearpage
  \ifRP\RPfalse\fi
  \global\let\ifRP\iftrue
}%
\renewcommand{\RPfalse}{%
  \clearpage
  \global\let\ifRP\iffalse
  \setbox\RPbox\vbox{\unvbox\RPbox
    \def\protect{\noexpand\protect\noexpand}%
    \@whilesw\ifdim0pt=\lastskip\fi
      {\c@page\lastkern\unkern\shipout\lastbox}%
  }%
}%
\makeatother

% Test document.
\usepackage{lipsum}
\usepackage{hyperref}
\begin{document}

  \tableofcontents

  \section{Lipsum 1--50}
  \lipsum[1-50]

  \RPtrue

    \section{Lipsum 51--100}
    \lipsum[51-100]

  \RPfalse

  \section{Lipsum 101--150}
  \lipsum[101-150]

\end{document}

答案2

可能永远不会被释放pdftex 的主干(即 1.50)添加了命令\pdfpagedivert\pdfpageundivert其工作方式类似于转移米4. 有了它,您可以按照自己喜欢的任何方式更改生成的 PDF 中的页面顺序。

这对于 LuaTeX 来说是一个很好的功能,如果有人要求的话,可能很容易添加。

相关内容