我对从 LaTeX 文档生成的 PDF 进行后处理pdfbook
,并希望最后一页出现在封底。因此,我需要在最后一页之前插入尽可能多的页面,以便其页码可以被 4 整除。
我期待这但问题是
- 这看起来很复杂,而且
- 如果没有额外的包的话我就不想添加它们。
因此我的想法是添加空白页前最后一页,直到变成3模4。
伪代码:
- 常规文档文本
- 如果{当前页}%4!= 3:
\newpage
- 如果{当前页}%4!= 3:
\newpage
- 如果{当前页}%4!= 3:
\newpage
- 最后一页的内容
这可行吗?如何用 LaTeX 编写代码?
答案1
那么主要问题是如何检查“模 4)”,这是 egreg 在另一个问题中的回答的核心。您只需将对 lastpage 的引用替换为当前页码。注意,这只有在确实存在明确的“ \newpage”时才有效!
\documentclass{article}
\makeatletter
\newcommand{\checkmultipleoffour}{%
\newpage %<---!
\count@=\the\c@page%<---
\@tempcnta=\count@
\divide\@tempcnta by 4
\multiply\@tempcnta by 4
\count@=\numexpr\count@-\@tempcnta\relax
\ifnum\count@>0
\pagestyle{empty}
\loop\ifnum\count@<4
\null\clearpage
\advance\count@\@ne
\repeat
\fi
}
\makeatother
\begin{document}
blub
\checkmultipleoffour
blabla
\end{document}
答案2
我偶然发现了同样的问题,并且Ulrike 的回答对我来说并没有完全发挥作用,因为文档中的某些内容重置了页码(根据 Okular,它们的编号为 1(封面)、2、1(标题)、2、i(索引)、ii、1、2、3、4、...)并且\the\c@page
没有提供绝对的 PDF 页码。
我四处打听绝对页码,\theps@count
对我来说不起作用,因为包含提供它的包会破坏构建并出现未定义的引用。我在聊天中被告知,最近的 LᴬTᴇΧ 维护了绝对页数;ltshipout
记录了它们,并且\ReadonlyShipoutCounter
是这里要使用的。
使用起来有点棘手,但对我们的场景来说很好:紧接着\clearpage
¹ 的是该页的绝对页码。以前的页面,因此我们只需添加\@ne
(一)但重复使用相同的算法。
① 使用\clearpage
,而不是\newpage
,因为后者在多列排版中仅终止一列,并且不会清除浮动。
我对算法进行了另一种改变:它输出一个额外的空白页以确保封面内部始终完全空白,因此现在给出的代码会插入 1‥4 个空白页。
% clear 1‥4 pages for the back cover
\clearpage% to flush out the previous page, if it isn’t yet
\pagestyle{empty}%
\null\clearpage% force one to be empty for inner back cover
% align outer back cover to multiple of 4
\makeatletter%
% \clearpage\ReadonlyShipoutCounter = abs page number of previous page
\count@=\ReadonlyShipoutCounter%
\advance\count@\@ne% number of the current page
% modulo 4
\@tempcnta=\count@%
\divide\@tempcnta by 4%
\multiply\@tempcnta by 4%
\count@=\numexpr\count@-\@tempcnta\relax%
% if modulo is not 0, align to multiple of 4…
\ifnum\count@>0%
% by inserting (4-modulo) empty pages
\loop\ifnum\count@<4%
\null\clearpage%
\advance\count@\@ne%
\repeat%
\fi%
\makeatother%
% render outer back cover, for example:
\pagecolor{blue}\afterpage{\nopagecolor}%
\AddToShipoutPictureFG*{\AtPageUpperLeft{%
% other half of the coloured background
\put(0mm,-100mm){%
\color{green}%
\rule{\paperwidth}{100mm}%
}%
}}%
\null\clearpage% force out back cover