仅当主文档的总页数为奇数时,我才需要附加草稿页。
以下方法很有效
\documentclass{exam}
\usepackage{blindtext,tikz,ulem,atveryend,hyperref}
\usepackage[totpages,user]{zref}
\newcommand\DraftPage{%https://tex.stackexchange.com/a/263613/2288
\clearpage
\begingroup
\null
\thispagestyle{empty}%
\begin{tikzpicture}[remember picture,overlay]
\node at ([yshift=-2cm]current page.north) {\LARGE\textbf{\uline{Draft Page}}};
\draw[line width=5pt]
(current page.north west) -- (current page.south east);
\draw[line width=5pt]
(current page.south west) -- (current page.north east);
\end{tikzpicture}
\addtocounter{page}{-1}%
\hypersetup{pageanchor=false}%
\clearpage
\endgroup
}
\AtVeryEndDocument{
\ifodd\ztotpages
\DraftPage
\fi
}
\begin{document}
\blindtext[1-30]\\
\textbf{Total number of pages is \ztotpages.}
\DraftPage
\end{document}
直到将其更改为
\begin{document}
\blindtext[1-30]\\
\textbf{Total number of pages is \ztotpages.}
\end{document}
然后我在第二页上得到了错误呈现的附加草稿页。
因此,我有两个问题:
1- 如何使命令\DraftPage
不影响前一个工作案例中检测到的总页数\ztotpages
?换句话说。\ztotpages
需要1
。
2-为什么第二种情况会导致错误的输出?以及如何解决它?
答案1
编辑:
另一个解决方案,希望这次更稳定:
\documentclass{exam}
\usepackage{tikz,ulem,etoolbox,hyperref}
\usepackage{lipsum}
\usepackage[totpages,user]{zref}
\newcommand\DraftPage{
\cleardoublepage % <---
\thispagestyle{empty}
\ifodd\thepage\else % <---
\centering\LARGE\textbf{\uline{Draft Page}} % <---
\begin{tikzpicture}[remember picture,overlay]
\draw[line width=5pt]
(current page.north west) -- (current page.south east);
\draw[line width=5pt]
(current page.south west) -- (current page.north east);
\end{tikzpicture}
\fi% % <---
}
\AtEndDocument{\DraftPage} % <---
\begin{document}
\lipsum%\lipsum\lipsum\lipsum
\lipsum[1-3]
\textbf{Number of pages is \ztotpages.}
\end{document}
此解决方案在奇数页的文档中添加了\DraftPage
文档末尾。这是在至少两次编译文档后获得的。我使用最多包含五页文本的文档测试了此解决方案。两次编译后所有结果都是正确的。
- 的定义
\DraftPage
已更改。现在它包含最后一页是否为奇数的测试。 - 在我的 MWE 中我使用
lipsum
它,blindtext
因为我更熟悉它。 - 解决方案中使用了
etoolbox
包及其文档挂钩\AtEndDocument
而不是atveryend
包及其挂钩\AtVeryEndDocument
,据我所知,它并不像您预期的那样工作(但我可能是错的)。 - 解决方案中不再使用
\ztotpages
。它现在仅用于显示文档的页数。
答案2
我会用\BeforeLastShipout
。
\documentclass{exam}
\usepackage{lipsum,tikz,ulem,atveryend,hyperref}
\usepackage[totpages,user]{zref}
\BeforeClearDocument{\clearpage\DraftPage}
\newcommand{\DraftPage}{%
\ifodd\value{page}\else
\thispagestyle{empty}%
\mbox{}%
\begin{tikzpicture}[remember picture,overlay]
\node at ([yshift=-2cm]current page.north) {\LARGE\textbf{\uline{Draft Page}}};
\draw[line width=5pt]
(current page.north west) -- (current page.south east);
\draw[line width=5pt]
(current page.south west) -- (current page.north east);
\end{tikzpicture}%
\addtocounter{page}{-1}%
\hypersetup{pageanchor=false}%
\renewcommand{\DraftPage}{}%
\fi
}
\begin{document}
\lipsum[1-25]
\textbf{Total number of pages is \zpageref{LastPage}.}
\end{document}
如果更改为\lipsum[1-30]
,则不会发走附加页面。