如何根据当前页码插入空白页?

如何根据当前页码插入空白页?

我对从 LaTeX 文档生成的 PDF 进行后处理pdfbook,并希望最后一页出现在封底。因此,我需要在最后一页之前插入尽可能多的页面,以便其页码可以被 4 整除。

我期待但问题是

  1. 这看起来很复杂,而且
  2. 如果没有额外的包的话我就不想添加它们。

因此我的想法是添加空白页最后一页,直到变成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

相关内容