LastPage não definido - não é possível obter a "página x de y" - mesmo após várias compilações

LastPage não definido - não é possível obter a "página x de y" - mesmo após várias compilações

Aqui está meu 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}

Alguém pode oferecer conselhos? Como o título diz, mesmo depois de várias compilações, não consigo LastPagetrabalhar. Estou a usar pdfLaTeX.

Responder1

Suprima o par extra de colchetes no argumento de \pageref; você tem

\pageref{{LastPage}}

e deveria ser

\pageref{LastPage}

O par extra de colchetes faz com que o LaTeX procure a string errada {LastPage}para produzir a referência cruzada (a string certa é LastPage). Seu código produz alguns avisos sobre isso:

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

O código com algumas modificações explicadas anteriormente:

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

insira a descrição da imagem aqui

Mudei \cfoot{...}para a interface mais moderna \fancyfoot[C]{...}. Também fixei o headheightcomprimento; seu MWE produz um aviso

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

então usei as geometryconfigurações para aumentar o comprimento conforme sugerido pela mensagem. Observe também que \bfé um comando antigo do TeX que não deve ser usado em documentos modernos; você deve usar \bfseriesem vez disso,

Talvez você deva considerar outro método para obter o espaçamento no rodapé; você pode usar \qquad(como fiz no meu código de exemplo) ou \hspace{<length>}em vez de todos esses espaços únicos juntos.

Responder2

Recentemente testei uma versão with \pdfximagee \pdflastximagepagesvia lualatexpara esta situação, mas não a recomendo para este problema específico de produção. Se um arquivo PDF gerado estiver vazio ou quebrado, este exemplo interromperá a próxima execução do TeX se esse arquivo PDF (vazio) não for excluído antecipadamente.

Editar:Além disso, nem todos os livros começam na página 1 e \pdfximageo comando poderia ser usado posteriormente no documento, portanto este exemplo é apenas para demonstração, precisaria de melhorias.

%! 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}

Lamento ter tendência a resolver o problema evitando o uso do lastpagepacote em vez de responder à pergunta. A razão é que muitas vezes precisamos fazer referência antes da última página, por exemplo, quando omitimos o Colofão ou uma página vazia ou mesmo muitas páginas, por exemplo, quando o livro contém Apêndices, páginas para notas, páginas com anúncios, etc. Posso colocar \label{mylastpage}em qualquer lugar do 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

informação relacionada