\@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 页,这个操作就会失败,但是......