LastPage не определен — невозможно получить «страницу x из y» — даже после нескольких компиляций

LastPage не определен — невозможно получить «страницу x из y» — даже после нескольких компиляций

Вот мой 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}

Может кто-нибудь дать совет? Как и следует из заголовка, даже после нескольких компиляций я не могу приступить LastPageк работе. Я использую pdfLaTeX.

решение1

Уберите лишнюю пару фигурных скобок в аргументе \pageref; у вас получится

\pageref{{LastPage}}

и это должно быть

\pageref{LastPage}

Дополнительная пара скобок заставляет LaTeX искать неправильную строку {LastPage}для создания перекрестной ссылки (правильная строка — LastPage). Ваш код выдает несколько предупреждений об этом:

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

Код с некоторыми изменениями, описанными ранее:

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

введите описание изображения здесь

Я перешел \cfoot{...}на самый современный \fancyfoot[C]{...}интерфаз. Я также исправил headheightдлину; ваш MWE выдает предупреждение

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

поэтому я использовал geometryнастройки для увеличения длины, как было предложено в сообщении. Обратите внимание также, что \bfэто старая команда TeX, которую не следует использовать в современных документах; вместо этого следует использовать \bfseries,

Возможно, вам следует рассмотреть другой метод задания интервалов в нижнем колонтитуле; вы можете использовать \qquad(как я сделал в своем примере кода) или \hspace{<length>}вместо всех этих отдельных пробелов вместе.

решение2

Недавно я протестировал версию с \pdfximageи \pdflastximagepagesчерез lualatexдля этой ситуации, но я не рекомендую ее для этой конкретной проблемы в производстве. Если сгенерированный файл PDF пуст или поврежден, этот пример останавливает следующий запуск TeX, если этот (пустой) файл PDF не удален заранее.

Редактировать:Кроме того, не все книги начинаются с первой страницы, и \pdfximageкоманда может быть использована позже в документе, поэтому этот пример приведен только для демонстрации и требует доработки.

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

Извините, я склонен решать проблему, избегая использования пакета lastpageвместо ответа на вопрос. Причина в том, что нам часто нужно обратиться к последней странице, например, когда опускаю Колофон или пустую страницу или даже много страниц, например, когда книга содержит Приложения, страницы для заметок, страницы с рекламой и т. д. Это мое общее решение, которое я могу разместить в \label{mylastpage}любом месте документа.

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

МВЭ, часть 1 МВЭ, часть 2

Связанный контент