Última página no definida: no se puede obtener la "página x de y", incluso después de varias compilaciones

Última página no definida: no se puede obtener la "página x de y", incluso después de varias compilaciones

Aquí está mi MWE:

\documentclass[11pt,letterpaper,oneside,notitlepage]{article}

\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{natbib}
\usepackage{graphicx}
\usepackage[loose]{units}
\usepackage{url}
\usepackage{pgf,tikz}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{multirow}
\usepackage{dcolumn}
\newcolumntype{.}{D{.}{.}{-1}}
\usepackage{booktabs}
\usepackage{alltt}
\usepackage[font=small,format=plain,labelfont=bf,up,textfont=it,up]{caption}
\usepackage[margin=1in]{geometry}


% these commands use the fancyhdr package to get "x of y" style
% page numbering.  The headrulewidth command gets rid of a decorative 
% horizontal rule that is default with "fancy" pagestyle.
\pagestyle{fancy}
\cfoot{\thepage\ of \pageref{LastPage}}
\renewcommand{\headrulewidth}{0pt}


\begin{document}

\cfoot{{Cyclic triaxial test report  \ \ \ \ \ \ \   Page \thepage\ of \pageref{{LastPage}} \ \ \ \ \ \ \ Test ID: {testid} \\ {{\bf PRELIMINARY REPORT - NOT FOR ENGINEERING USE!}}}}

\subsection*{1}
\subsection*{2}
\subsection*{3}
\clearpage 
\subsection*{a}
\clearpage 
\subsection*{b}
\clearpage 
\subsection*{c}
\clearpage 
\subsection*{d}
\clearpage 
\clearpage 
\end{document}

¿Alguien puede ofrecer consejos? Como dice el título, incluso después de varias compilaciones, no puedo ponerme LastPagea trabajar. Estoy usando pdfLaTeX.

Respuesta1

Suprima el par extra de llaves en el argumento de \pageref; tienes

\pageref{{LastPage}}

y debería ser

\pageref{LastPage}

El par de llaves extra hace que LaTeX busque la cadena incorrecta {LastPage}para producir la referencia cruzada (la cadena correcta es LastPage). Su código produce algunas advertencias sobre esto:

LaTeX Warning: Reference `{LastPage}' on page 1 undefined on input line 35.

El código con algunas modificaciones explicadas antes:

\documentclass[11pt,letterpaper,oneside,notitlepage]{article}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{natbib}
\usepackage{graphicx}
\usepackage[loose]{units}
\usepackage{url}
\usepackage{pgf,tikz}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{multirow}
\usepackage{dcolumn}
\newcolumntype{.}{D{.}{.}{-1}}
\usepackage{booktabs}
\usepackage{alltt}
\usepackage[font=small,format=plain,labelfont=bf,up,textfont=it,up]{caption}
\usepackage[margin=1in]{geometry}


% these commands use the fancyhdr package to get "x of y" style
% page numbering.  The headrulewidth command gets rid of a decorative 
% horizontal rule that is default with "fancy" pagestyle.
\pagestyle{fancy}
\fancyfoot[C]{\thepage\ of \pageref{LastPage}}
\renewcommand{\headrulewidth}{0pt}

\begin{document}

\fancyfoot[C]{{Cyclic triaxial test report\qquad Page \thepage\ of \pageref{LastPage}\qquad  Test ID: {testid} \\ {\bfseries PRELIMINARY REPORT -- NOT FOR ENGINEERING USE!}}}

\subsection*{1}
\subsection*{2}
\subsection*{3}
\clearpage 
\subsection*{a}
\clearpage 
\subsection*{b}
\clearpage 
\subsection*{c}
\clearpage 
\subsection*{d}AAA
\clearpage 
\clearpage 
\end{document}

ingrese la descripción de la imagen aquí

Cambié \cfoot{...}a la interfaz más moderna \fancyfoot[C]{...}. También arreglé la headheightlongitud; su MWE produce una advertencia

Package Fancyhdr Warning: `\headheight` is too small (`12.0pt`): Make it
at least `13.59999pt`.

así que utilicé la geometryconfiguración para aumentar la longitud como lo sugiere el mensaje. Observe también que \bfes un comando TeX antiguo que no debería usarse en documentos modernos; deberías usar \bfseriesen su lugar,

Quizás debería considerar otro método para establecer el espacio en el pie de página; puedes usar \qquad(como hice yo en mi código de ejemplo) o \hspace{<length>}en lugar de todos esos espacios individuales juntos.

Respuesta2

Recientemente probé una versión con \pdfximagey \pdflastximagepagesvía lualatexpara esta situación, pero no la recomiendo para este problema particular en producción. Si un archivo PDF generado está vacío o roto, este ejemplo detiene la siguiente ejecución de TeX si ese archivo PDF (vacío) no se elimina con anticipación.

Editar:Además, no todos los libros comienzan en la página 1 y \pdfximageel comando podría usarse más adelante en el documento, por lo que este ejemplo es solo para demostración; necesitaría mejoras.

%! lualatex example.tex
\documentclass[a4paper]{article}
\def\myfile{example.pdf}
\IfFileExists{\myfile}  % Is document typeset for the first time?
  {\pdfximage{\myfile}} % Positive response...
  {\relax}              % Negative response...
\usepackage{fancyhdr}
\pagestyle{fancy}\fancyhf{}
\fancyhead[C]{Page \thepage\ of \the\pdflastximagepages}
\begin{document}
Some text.\par\newpage Some more text.
\end{document}

Lo siento, tiendo a resolver el problema evitando el uso del lastpagepaquete en lugar de responder la pregunta. La razón es que a menudo necesitamos antes de la última página a la que referirnos, por ejemplo, cuando se omite el colofón o una página vacía o incluso muchas páginas, por ejemplo, cuando el libro contiene apéndices, páginas para notas, páginas con anuncios, etc. Esta es mi solución común cuando Puedo poner \label{mylastpage}en cualquier parte del documento.

\documentclass[a4paper]{article}
\usepackage{fancyhdr}
\pagestyle{fancy}\fancyhf{}
\fancyhead[C]{Page \thepage\ of \pageref{mylastpage}}
\begin{document}
Some text.\newpage Some more text.
\label{mylastpage}
\end{document}

MWE, parte 1 MWE, parte 2

información relacionada