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