\@abspage@last no puede escribir el número en el encabezado

\@abspage@last no puede escribir el número en el encabezado

Intenté escribir el número total de páginas en el encabezado derecho en \@abspage@lastestilo de página fancy. En lugar de un número, abspage@lastse imprime el texto . ¿Por qué? ¿Y cómo afrontarlo?

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}

Respuesta1

Necesitas\makeatletter alrededor \rhead{...}, no dentro de él, pero puedes hacerlo mejor.

No existe una interfaz "oficial" para usar \@abspage@lasten el documento, principalmente porque no está destinada a guardar el último número de página, sino el número total de páginas, incluidas aquellas con un esquema de numeración diferente.

Si no cambia el esquema de numeración, puede usarlo definiendo primero su propia interfaz

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

El valor predeterminado es 1073741823, que obtendrá cuando el .auxarchivo aún no exista.

Si desea que se le advierta que es necesario volver a ejecutar, puede verificar si \@abspage@lastes 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}

Si .auxfalta el archivo o, por algún motivo, \@abspage@lastaún no está definido, obtendrá

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

Por supuesto, esto fallaría si su documento tiene 1073741823 páginas, pero...

información relacionada