在我的文档中,我希望从特定点开始的页面以相反的页面顺序出现,即最后一页应该首先出现,然后是倒数第二页,等等。我该怎么做?
(我并不想反转内容——只想反转页面出现的顺序)
答案1
这会反转设置时输出的页面顺序,并在激活\RPtrue
时保持页面的正常顺序。参考和超链接应该可以工作。我使用 Heiko Oberdiek 的包来挂接原语(负责将页面发送到 dvi/pdf 文件):我们不是将页面发送出去,而是将它们存储在 中。也就是说, 的内容具有以下形式\RPfalse
atbegshi
\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 来说是一个很好的功能,如果有人要求的话,可能很容易添加。