我正在尝试编写一个代码来确定当前页面是否是最后一页。不过,我确实遇到了一些问题。在这里的示例中,如果hyperref
加载了,代码将无法运行。如果没有加载,它会产生我想要的结果。此外,在我的实际文档中,代码实际上可以与一起使用hyperref
,尽管我不知道为什么。但是出于某种原因,它确实会写一个额外的“页面”。然而,我并不是要求对此做出解释,因为文档目前相当复杂。
\documentclass[11pt]{article}
\usepackage{lastpage, xifthen,hyperref}
\begin{document}
\ifthenelse{1=\pageref*{LastPage}}{Not last page}{Last page}
\end{document}
答案1
处理与页面相关的引用时需要小心谨慎。\pageref*
不会返回最后一页数字必然。此外,带有的检查\pageref
可能无法扩展,因此在与的比较中毫无用处\ifthenelse
。
下面\label
使用检查机制实现了自动化refcount
可扩展\getpagerefnumber
:
\documentclass{article}
\usepackage{hyperref,lastpage,refcount}
\usepackage{lipsum}% Just for this example
\newcounter{lastpagecheck}% Counter associated with each \checkiflastpage call
\newcommand{\checkiflastpage}{%
\stepcounter{lastpagecheck}% Increment lastpagecheck counter
\label{lpc-\thelastpagecheck}% Mark unique \label
% Perform expandable check if you're on the LastPage
\ifnum\getpagerefnumber{lpc-\thelastpagecheck}=\getpagerefnumber{LastPage}
Last page%
\else
Not last page (this page = \pageref{lpc-\thelastpagecheck}; last page = \pageref{LastPage})%
\fi
}
\begin{document}
\sloppy% Just for this example
\checkiflastpage
\lipsum[1-20]
\checkiflastpage
\end{document}
正如前面提到的,这种方法背后的原理是用一个唯一的标记来标记执行检查的位置\label
(称为lpc-\thelastpagecheck
,借助于一个lastpagecheck
随着每次调用而递增的唯一计数器\checkiflastpage
)。
由于此实现使用了\label
-\ref
系统,因此您必须在第一次运行时至少编译两次以确保引用稳定。
您可能需要考虑使用atveryend
对文档的最后一页进行适当的衡量,但这实际上取决于文档的构造。
答案2
我使用以下代码实现了这个功能,该代码基于 Werners 的回应此主题
\documentclass[11pt]{article}
\usepackage{lastpage,xifthen,hyperref}
\begin{document}
\ifthenelse{\number\numexpr\getpagerefnumber{LastPage}=\thepage}{Last page}{Not last page}
\newpage
\ifthenelse{\number\numexpr\getpagerefnumber{LastPage}=\thepage}{Last page}{Not last page}
\end{document}