\@abspage@last가 헤더에 숫자를 입력하지 못했습니다.

\@abspage@last가 헤더에 숫자를 입력하지 못했습니다.

\@abspage@last페이지 스타일 아래 에서 오른쪽 헤더의 총 페이지 수를 조판하려고 했습니다 fancy. 숫자 대신 텍스트 abspage@last가 인쇄됩니다. 왜? 그리고 그것을 처리하는 방법은 무엇입니까?

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}

답변1

당신은 필요\makeatletter \rhead{...}, 내부는 아니지만 더 잘할 수 있습니다.

\@abspage@last문서에서 사용할 수 있는 "공식적인" 인터페이스는 없습니다 . 주로 마지막 페이지 번호를 저장하는 것이 아니라 다른 번호 매기기 구성표를 포함한 총 페이지 수를 저장하기 위한 것이기 때문입니다.

번호 매기기 체계를 변경하지 않는 경우 먼저 자체 인터페이스를 정의하여 사용할 수 있습니다.

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

기본값은 1073741823이며, 파일이 .aux아직 존재하지 않을 때 얻을 수 있습니다.

재실행이 필요하다는 경고를 받으려면 \@abspage@last다음과 같은지 확인하면 됩니다 \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}

.aux파일이 없거나 어떤 이유로 아직 정의되지 않은 경우 \@abspage@last다음과 같은 메시지가 표시됩니다.

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

물론 문서의 페이지 수가 1073741823이면 실패하겠지만...

관련 정보