我正在使用命令\frontmatter
、\mainmatter
和\backmatter
来区分论文的不同部分。
前两个工作正常,但是不行:页面编号从到\backmatter
没有变化(我希望从通常的编号 1,2,3,4...... 移动到这个:i,ii,iii,iv......)\mainmatter
\backmatter
这是代码:
\backmatter
\cleardoublepage
\addcontentsline{toc}{chapter}{\bibname}
\begin{thebibliography}{31}
文档类别为“书籍”:
\documentclass[12pt,a4paper]{book}
如何在 \frontmatter 和 \backmatter 中获得相同的编号
答案1
在book
文档类中,宏\frontmatter
、\mainmatter
和\backmatter
定义如下(参见文件book.cls
):
\newcommand\frontmatter{%
\cleardoublepage
\@mainmatterfalse
\pagenumbering{roman}}
\newcommand\mainmatter{%
\cleardoublepage
\@mainmattertrue
\pagenumbering{arabic}}
\newcommand\backmatter{%
\if@openright
\cleardoublepage
\else
\clearpage
\fi
\@mainmatterfalse}
请注意,如果执行了,则不会改变页面编号方式\backmatter
。另外,请注意\@mainmatter
,布尔开关 ,如果\mainmatter
执行了,则设置为“true”,如果执行了\frontmatter
或,则设置为“false” \backmatter
。(顺便说一下,这个布尔开关最初设置为“true”。因此,如果您的文档不包含任何宏\front/main/back-matter
,则布尔值对于整个文档都为“true”。)
\backmatter
那么,除了以语义方式创建分页符并强制排版所有累积的浮点数之外,执行的目的可能是什么?为此,有必要考虑布尔宏的作用\@mainmatter[true/false]
。继续查阅文件book.cls
,会发现 \if@mainmatter 出现在宏定义中的其他地方\@chapter
。以下是该宏定义的摘录:
\def\@chapter[#1]#2{%
...
\if@mainmatter
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}%
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
...}
如果为“真”——正如我们之前所见,在文档的部分\@mainmatter
中情况如此——则计数器递增,打印一行“第 n 章”格式的内容,并将章节编号和(可能是章节标题的缩写形式)写入目录 (toc) 文件。(写入 toc 文件的信息将在执行宏时使用。)相反,如果为“假”——在文档的和部分中情况如此——则只有章节标题(但没有编号,因为计数器没有递增)会写入 toc 文件。\mainmatter
chapter
\tableofcontents
\@mainmatter
\frontmatter
\backmatter
chapter
传统上,索引位于书的后记部分。传统上,索引被分配了章节级标题,但没有章节编号。宏应该用于索引之类的材料\backmatter
。(当然,如果你的书有索引,而你做希望索引章节被编号,就不要执行\backmatter
宏。
让我们将所有这些放入一个小型 MWE 中,该 MWE\chapter
在文档的前言、正文和后文部分各包含一条指令。这就是生成的目录的样子——请注意,“前”和“后”两章没有章节编号,“前”一章没有罗马数字页码,“正文”和“后”一章没有阿拉伯数字。
\documentclass{book}
\begin{document}
\frontmatter
\tableofcontents
\chapter{Front}
\mainmatter
\chapter{Main}
\backmatter
\chapter{Back}
\end{document}
答案2
的目的\backmatter
不是改变页码,因为这没什么意义(“毫无意义”的轻描淡写)。
之后\backmatter
,章节不再编号,但当使用 指定时,它们会自动进入目录\chapter{title}
。
一些不尊重印刷术和常识的机构要求论文后页的编号必须使用罗马数字,从论文开头的位置开始\mainmatter
。
如果你受制于这样的制度,你值得我所有的同情。你可以通过修改\mainmatter
和的定义来实现这一点\backmatter
。
但是,除非你的生命/学位受到威胁,否则请不要这样做。
\makeatletter
\newcounter{savepagenumber}
\renewcommand\mainmatter{%
\cleardoublepage
\setcounter{savepagenumber}{\value{page}}
\@mainmattertrue
\pagenumbering{arabic}%
}
\renewcommand\backmatter{%
\if@openright
\cleardoublepage
\else
\clearpage
\fi
\pagenumbering{roman}%
\setcounter{page}{\value{savepagenumber}}%
\@mainmatterfalse
}
\makeatother
完整示例
\documentclass{book}
\usepackage{kantlipsum}
\makeatletter
\newcounter{savepagenumber}
\renewcommand\mainmatter{%
\cleardoublepage
\setcounter{savepagenumber}{\value{page}}
\@mainmattertrue
\pagenumbering{arabic}%
}
\renewcommand\backmatter{%
\if@openright
\cleardoublepage
\else
\clearpage
\fi
\pagenumbering{roman}%
\setcounter{page}{\value{savepagenumber}}%
\@mainmatterfalse
}
\makeatother
\begin{document}
\frontmatter
\tableofcontents
\chapter{Introduction}
\kant
\mainmatter
\chapter{First}
\kant
\chapter{Second}
\kant
\backmatter
\chapter{Epilogue}
\kant
\end{document}
前言结束于第 vi 页(空白),“结语”从第 vii 页开始。
答案3
该\backmatter
命令可以将编号章节更改为无编号章节,但不会更改页码格式。
如果您希望roman
在后记中添加页码,请在序言中添加以下几行:
\usepackage{etoolbox}
\makeatletter
\patchcmd{\backmatter}
{\@mainmatterfalse}
{\@mainmatterfalse\pagenumbering{roman}}
{}
{}
\makeatother
梅威瑟:
\documentclass{book}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\backmatter}
{\@mainmatterfalse}
{\@mainmatterfalse\pagenumbering{roman}}
{}
{}
\makeatother
\usepackage{lipsum} % just for dummy text
\begin{document}
\frontmatter
\chapter{Front}
\lipsum[1]
\mainmatter
\chapter{Main}
\lipsum[1]
\backmatter
\chapter{Back}
\lipsum[1]
\end{document}
输出(后记)