如何保持最后一页的页码均匀?

如何保持最后一页的页码均匀?

我想确保最后一页始终是偶数,因此我将命令定义如下:

\documentclass{article}
\usepackage{lipsum}
\usepackage[paperwidth=302pt,paperheight=400pt, offset=0pt, hmargin=40pt, tmargin=50pt,
    bmargin=75pt, noheadfoot]{geometry}

\newcommand{\OpenNewPageIfNeeded}{%
\ifodd\value{page}%
\newpage%
\hbox{}%
\else%
\fi%
}
\AtEndDocument{\OpenNewPageIfNeeded}

\begin{document}
\lipsum
\end{document}

这在大多数情况下有效,但有时会失败,例如上面的示例代码。

这个问题似乎与确保最后一页平整且空白,我尝试了解决方案但仍然失败,有什么建议吗?

答案1

引用TeX 常见问题解答

输出例程是异步的,并且 (La)TeX 通常会在决定输出任何页面之前处理相当多的“下一页”。因此,页面计数器(在 LaTeX 内部称为\c@page)通常仅在您实际输出例程。

解决方案:例如使用\ifthispageodd来自KOMA 脚本scrextend包。请注意,此宏使用\label/\ref机制,因此 需要 LaTeX 运行才能获得正确的输出。

\documentclass{article}

\usepackage{lipsum}
\usepackage[paperwidth=302pt,paperheight=400pt, offset=0pt, hmargin=40pt, tmargin=50pt,
    bmargin=75pt, noheadfoot]{geometry}
\usepackage{scrextend}

\newcommand{\OpenNewPageIfNeeded}{%
  \ifthispageodd{%
    \newpage
    \null
  }{%
  }%
}
\AtEndDocument{\OpenNewPageIfNeeded}

\begin{document}
\lipsum
\end{document}

答案2

测试应该放在后面,在所有\clearpageat之后\end{document},也许在 aux 之后。您可以使用etoolboxscrlfile

\documentclass{article}
\usepackage{lipsum}
\usepackage[paperwidth=302pt,paperheight=400pt, offset=0pt, hmargin=40pt, tmargin=50pt,
    bmargin=75pt, noheadfoot]{geometry}
\usepackage{scrlfile}
\AfterReadingMainAux{%
  % If last already output page is odd, the current page is even but
  % will not be output. So we add something to it and put it out.
  \ifodd\value{page}\else
    \typeout{Do it}%
    \par\null\newpage
  \fi
}
\makeatother
\begin{document}
\lipsum
\end{document}

答案3

如果您使用阿拉伯页码,处理此问题的一个简单方法是使用最后一页标签:

\documentclass{article}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage[paperwidth=302pt,paperheight=400pt,offset=0pt,hmargin=40pt,tmargin=50pt,
    bmargin=75pt,noheadfoot]{geometry}% http://ctan.org/pkg/geometry

\AtEndDocument{%
  \label{lastpageofdoc}% Set label on last page.
  \ifodd\pageref{lastpageofdoc}\newpage\mbox{}\fi% Add new page if necessary
}

\begin{document}
\lipsum
\end{document}

或者(或者更一般地),strict包选项changepage还允许使用正确检查页面值\checkoddpage,然后是条件\ifoddpage...\else...\fi

\documentclass{article}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage[paperwidth=302pt,paperheight=400pt,offset=0pt,hmargin=40pt,tmargin=50pt,
    bmargin=75pt,noheadfoot]{geometry}% http://ctan.org/pkg/geometry
\usepackage[strict]{changepage}% http://ctan.org/pkg/changepage

\AtEndDocument{%
  \checkoddpage\ifoddpage\newpage\mbox{}\fi
}

\begin{document}
\lipsum
\end{document}

答案4

在 ConTeXt 中,您可以使用\page[odd]插入分页符,以便后续材料从奇数页开始(它用于\setuphead[chapter][page=...]选项中,因此有命名约定;其他选项是evenleftright。后两个仅适用于双面布局)。

因此,为了确保页数始终为偶数,请使用:

\appendtoks
  \page[empty,odd]
\to\everystoptext

\starttext
\input knuth
\stoptext

empty选项确保不包含页眉和页脚。如果需要,只需使用\page[odd]

请注意,如果您使用双面布局,ConTeXt 会自动确保生成的 pdf 有偶数页。

相关内容