lastpage、hyperref 和 xifthen

lastpage、hyperref 和 xifthen

我正在尝试编写一个代码来确定当前页面是否是最后一页。不过,我确实遇到了一些问题。在这里的示例中,如果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}

相关内容