![\@abspage@last falha ao digitar o número no cabeçalho](https://rvso.com/image/449626/%5C%40abspage%40last%20falha%20ao%20digitar%20o%20n%C3%BAmero%20no%20cabe%C3%A7alho.png)
Tentei compor o número total de páginas no cabeçalho direito em \@abspage@last
pagestyle 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@last
no 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 .aux
arquivo ainda não existir.
Se quiser ser avisado de que uma nova execução é necessária, você pode verificar se é \@abspage@last
igual 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 .aux
arquivo estiver faltando ou, por algum motivo, \@abspage@last
ainda 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…