\@abspage@last はヘッダーの番号をタイプセットできません

\@abspage@last はヘッダーの番号をタイプセットできません

\@abspage@lastページスタイルで右ヘッダーに合計ページ数をタイプセットしようとしました fancy。 数字の代わりにテキストabspage@lastが印刷されます。 なぜでしょうか? また、どのように対処すればよいでしょうか?

MWE:

\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}

.auxデフォルト値は 1073741823 で、ファイルがまだ存在しない場合に取得されます。

再実行が必要であることを警告したい場合は、 が に\@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 ページある場合は失敗しますが...

関連情報