我想确保最后一页始终是偶数,因此我将命令定义如下:
\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
测试应该放在后面,在所有\clearpage
at之后\end{document}
,也许在 aux 之后。您可以使用etoolbox
或scrlfile
:
\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=...]
选项中,因此有命名约定;其他选项是even
、left
和right
。后两个仅适用于双面布局)。
因此,为了确保页数始终为偶数,请使用:
\appendtoks
\page[empty,odd]
\to\everystoptext
\starttext
\input knuth
\stoptext
该empty
选项确保不包含页眉和页脚。如果需要,只需使用\page[odd]
。
请注意,如果您使用双面布局,ConTeXt 会自动确保生成的 pdf 有偶数页。