\@abspage@last 无法在页眉中排版数字

\@abspage@last 无法在页眉中排版数字

\@abspage@last我尝试在pagestyle 下排版右侧页眉中的总页数 fancy。打印出来的不是数字,而是文本abspage@last。为什么?如何处理?

梅威瑟:

\documentclass[a4paper]{article}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage\ of \makeatletter\@abspage@last\makeatother}
\begin{document}
First page:\\
total pages are: \@abspage@last\\ % typeset abspage@last. Why not give error message?
total pages are: \makeatletter\@abspage@last\makeatother % typeset the right number
\clearpage
Second page
\clearpage
Third page
\end{document}

答案1

你需要\makeatletter 大约 \rhead{...},不在其中,但你可以做得更好。

该文档中没有可供使用的“官方”界面\@abspage@last,主要是因为它不是用于保存最后一页的页码,而是保存总页数,包括具有不同编号方案的页数。

如果不改变编号方案,可以通过先定义自己的接口来使用它

\documentclass[a4paper]{article}
\usepackage{fancyhdr}

\makeatletter
\newcommand{\lastpagenumber}{\@abspage@last}
\makeatother

\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage\ of \lastpagenumber}

\begin{document}

First page:
\clearpage
Second page
\clearpage
Third page

\end{document}

默认值为 1073741823,当.aux文件尚不存在时您将获得该值。

如果您想要收到需要重新运行的警告,您可以检查是否\@abspage@last等于\maxdimen

\documentclass[a4paper]{article}
\usepackage{fancyhdr}

\makeatletter
\newcommand{\lastpagenumber}{%
  \ifnum\@abspage@last=\maxdimen
    \@lastpagewarning
  \else
    \@abspage@last
  \fi
}
\newcommand{\@lastpagewarning}{%
   \@latex@warning@no@line{Could not determine last page number, rerun LaTeX}%
   ??\gdef\@lastpagewarning{??}%
}
\makeatother

\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage\ of \lastpagenumber}

\begin{document}

First page:
\clearpage
Second page
\clearpage
Third page

\end{document}

如果.aux文件丢失或由于某种原因\@abspage@last尚未定义,您将得到

LaTeX Warning: Could not determine last page number, rerun LaTeX.

当然,如果你的文档有 1073741823 页,这个操作就会失败,但是......

相关内容