更正前言的最后一页页码

更正前言的最后一页页码

我想显示前言的最后一页的页码。这是代码:

\documentclass{book}
\usepackage{blindtext}
\usepackage{lastpage}

\begin{document}
    \frontmatter
    
    \begin{tabular}{ll}
        Last front matter page:   &\protect\pageref{lastoffront}
    \end{tabular}
    
    \newpage
    \tableofcontents
    \label{lastoffront}
    \clearpage
    \mainmatter
    \blinddocument
\end{document}

但是,结果显示为“iii”。在我的文档中,前言的最后一页页码是“iv”。如何更正?

这是结果的截图: 在此处输入图片描述

这是我的文档前言的最后一页: 在此处输入图片描述

答案1

您无法使用\label和来可靠地执行此操作,但您可以在发出刷新仍待处理内容的后\pageref检查 处的页码。此时,您可以查看页码是偶数还是奇数。如果是奇数,则标准不会生成空白页;我们只需通过减一来计算最后一页的页码。如果页码是偶数,则这是前言中的最后一页,随后将生成空白页。\mainmatter\clearpage\cleardoublepage\cleardoublepage

\documentclass{book}
\usepackage{blindtext}

\makeatletter
\renewcommand\mainmatter{%
  %\cleardoublepage
  % do a different \cleardoublepage
  \clearpage
  \ifodd\value{page}\relax
    % last page of the frontmatter is even
    \immediate\write\@auxout{%
      \string\gdef\string\lastpageoffront{\romannumeral\numexpr\value{page}-1\relax}%
    }%
  \else
   \immediate\write\@auxout{%
     \string\gdef\string\lastpageoffront{\romannumeral\value{page}}%
   }%
  \fi
  \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}%
}
\providecommand{\lastpageoffront}{??}
\makeatother

\begin{document}

\frontmatter

Last front matter page: \lastpageoffront

\tableofcontents

\mainmatter

\blinddocument
\blinddocument
\blinddocument
\blinddocument
\blinddocument
\blinddocument

\end{document}

有六个\blinddocument命令,目录中的第二页也有文本。尽管只有一个命令,但你还是得到了“iv”。

在此处输入图片描述

我猜目的是为了在后记中重新使用罗马数字编号页码,是吗?

相关内容