\@abspage@last falha ao digitar o número no cabeçalho

\@abspage@last falha ao digitar o número no cabeçalho

Tentei compor o número total de páginas no cabeçalho direito em \@abspage@lastpagestyle fancy. Em vez de número, o texto abspage@lasté impresso. Por que? E como lidar com isso?

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}

Responder1

Você precisa\makeatletter em volta \rhead{...}, não dentro dele, mas você pode fazer melhor.

Não existe uma interface “oficial” para utilização \@abspage@lastno documento, principalmente porque não se destina a salvar o número da última página, mas sim o número total de páginas, inclusive aquelas com esquema de numeração diferente.

Se você não alterar o esquema de numeração, poderá usá-lo definindo primeiro sua própria interface

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

O valor padrão é 1073741823, que você obterá quando o .auxarquivo ainda não existir.

Se quiser ser avisado de que uma nova execução é necessária, você pode verificar se é \@abspage@lastigual a \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}

Se o .auxarquivo estiver faltando ou, por algum motivo, \@abspage@lastainda não estiver definido, você receberá

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

É claro que isso falharia se o seu documento tivesse 1073741823 páginas, mas…

informação relacionada