如何使第二个 \mainmatter 之后的页码连续?

如何使第二个 \mainmatter 之后的页码连续?

\mainmatter我正在写一个包含多个s 和s 的文档\backmatter。结构基本上是:

...
\mainmatter
\backmatter
...
\mainmatter
\backmatter
...

有没有简单的方法可以防止 LaTeX 重置页面计数器?也不\backmatter应该重置计数器。

答案1

这在很大程度上取决于你使用的文档类别。采用标准book作为基础,\fontmatter并且\mainmatter都重置页面计数器。\backmatter另一方面则不然:

\newcommand\frontmatter{%
    \cleardoublepage
  \@mainmatterfalse
  \pagenumbering{roman}}
\newcommand\mainmatter{%
    \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}}
\newcommand\backmatter{%
  \if@openright
    \cleardoublepage
  \else
    \clearpage
  \fi
  \@mainmatterfalse}

发出上述命令时导致页码重置的重要原因是\pagenumbering(取自latex.ltx):

\def\pagenumbering#1{%
  \global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
   \c@page}}

如上所述,这会将页计数器设置为 1 ( \global\c@page \@ne) 并重新定义表示\thepage( \gdef\thepage{\csname @#1\endcsname\c@page})。因此,通过发出\pagenumbering{roman}(如 所执行的\frontmatter),LaTeX 会发出相当于

\setcounter{page}{1}
\renewcommand{\thepage}{\arabic{page}}

memoir做了类似的事情。如果你的问题是仅有的“如何防止 LaTeX 重置页码计数器?”,那么您不应该使用\frontmatter和朋友,或者至少使\pagenumbering正在做的事情无效。您最好重新定义页码计数器打印机制\thepage,如上所示。或者,为了方便使用,为了坚持您当前的布局,也许在您的序言中加上以下内容就足够了(这会删除页码计数器重置):

\makeatletter
\def\pagenumbering#1{%
  \gdef\thepage{\csname @#1\endcsname \c@page}}
\makeatother

最后,也不会book重置memoir的页面计数器\backmatter

答案2

解决您的问题的一个简单方法是删除\pagenumbering发出的命令\mainmatter,该命令负责重置页码。所以我建议

\makeatletter
\def\mainmatter{%
  \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}
  \def\mainmatter{\cleardoublepage\@mainmattertrue}
}
\makeatother

第一次调用\mainmatter会照常执行,因此页码将为阿拉伯数字,从 1 开始。然后它将自身重新定义为仅发出\cleardoublepage\@mainmattertrue。后者恢复章节编号。

答案3

\mainmatter无需重置的命令的另一种解决方案:

\newcommand\mainmatterWithoutReset
 {\edef\temppagenumber{\arabic{page}}%
  \mainmatter
  \setcounter{page}{\temppagenumber}%
 }

该命令将页码计数器的当前值存储在宏中\temppagenumber,然后执行\mainmatter,这将重置页码计数器,这是将页码样式更改为阿拉伯语的副作用,最后将页码计数器重置为其原始值。

\mainmatter要以旧名称使用新名称,请按以下方式定义:

\let\mainmatterorig\mainmatter
\renewcommand\mainmatter
 {\edef\temppagenumber{\arabic{page}}%
  \mainmatterorig
  \setcounter{page}{\temppagenumber}%
 }

相关内容