LaTeX教程(005)- LaTeX \LaTeX LATEX文档结构(05)
2.2.2 修改标头文本
我们使用标准的标题命令会产生预定义的文本。例如,我们使用\chapter
命令时,会生成一个"Chapter X"格式的标头,X是编号,它由计数器的格式化输出命令打印。而Chapter并不是我们输入的,它由定义在\chapter
中的某个命令生成。同样,使用\tableofcontents
时,会生成一个"目录"标题。这些预定义的文本由定义在标题命令中的某个命令生成,我们可以通过重定义这样的命令来更改标头中的预定义文本。
如,Chapter是由命令\chaptername
生成的,我们只需要重定义这个命令,就可以修改它:
\documentclass{book}
\usepackage{ctex}
\usepackage[a5paper]{geometry}
\begin{document}
\renewcommand{\chaptername}{定制的章的标头}
\chapter{这是第一章}
\end{document}
编译:
当然,我们最想要的可能是"第X章"这样的标头,要达到这个目的,只重定义预定义文本的命令是不够的,还要对标头的定义结构稍作修改,我们后面讲解。
除此之外,一些环境也会生成带有预定义文本的标题,如abstract
环境,会生成"摘要":
\documentclass{article}
% 注意abstract是定义在article类中的命令
\usepackage{ctex}
\usepackage[a5paper]{geometry}
\begin{document}
\begin{abstract}
这是一个abstract的测试
\end{abstract}
\end{document}
编译:
注意,如果我们没有引入ctex
包,那么在使用\tableofcontents
命令时标题就不是"目录",而是"Contents",这是因为ctex
包在支持中文的同时,还重定义了某些命令,其中就包括一些预定义的文本,如目录(原本是Contents),附录(原本是Appendix)和摘要(原本是Abstract )等。
在标准文档类的默认设置下,这些预定义的文本与命令的对应关系如下表:
命令 | 默认文本 | 命令 | 默认文本 |
---|---|---|---|
\abstractname | Abstract | \indexname | Index |
\appendixname | Appendix | \listfigurename | List of Figures |
\bibname | Bibliography | \listtablename | List of Tables |
\chaptername | Chapter | \partname | Part |
\contentsname | Contents | \refname | References |
其中\bibname
在report类中使用,\refname
在article类中使用。
有一些命令我们在前面的内容中并没有见到过,但是没有关系,它们都是根据含义命名的,后面遇到时很容易识别出来。
2.2.3 标题设计简介
标题可以分为两大类,一类是陈列标题(display headings),一类是内嵌标题(run-in headings)。陈列标题独占若干行,与前后文本之间都有垂直空间分隔,如\chapter
和\section
等。内嵌标题与前文有垂直分隔,但标题后的文本并不会另起一行,而是紧跟标题之后。我们做一个演示:
\documentclass{article}
\usepackage{ctex}
\usepackage[a5paper]{geometry}
\begin{document}
\section{这是一个陈列标题}
陈列标题独占若干行,与前后文本之间都有垂直空间分隔
\paragraph{这是一个内嵌标题}
内嵌标题与前文有垂直分隔,但标题后的文本并不会另起一行,而是紧跟标题之后。
\end{document}
编译:
本节的剩余部分,我们将讨论如何设计标题,以及如何调整默认的设计。
2.2.4 quotchap
,epigraph
-给章节标题增加引言
我们可以用quotchap
包(由Karsten Tinnefeld创建,由Jan Klever升级)来增强章(\chapter
)的标题。这个包允许我们在章标题的左上角添加一个引言。每一个章标题的引言要在它所对应的\chapter
命令之前,使用savequote
环境来指定。我们先用一个最简示例来做一个演示:
\documentclass{book}
\usepackage{ctex}
\usepackage[a5paper]{geometry}
\usepackage{kantlipsum}
\usepackage{quotchap} % 引用quotchap包
\begin{document}
\begin{savequote}[80pt]
% 使用savequote环境指定引言的内容
% 选项80pt指定引言的宽度,默认是10cm,引言会在到达边界时自动换行
我觉得张三说得对!%引言内容
\qauthor{李四} %\qauthor命令指定引言的作者
\end{savequote}
\chapter{这是第一章的标题}
\kant[1]
\end{document}
编译:
如果你的文档中也有中文,并且使用XeLaTeX
编译,那么可能会出现一些和字体有关的警告,这是因为很多包的默认字体设置并没有考虑多种语言,在当前字体与当前语言不匹配时,系统为了让文字依然能显示出来,只能找到一种替代字体。我们将来也会讲到字体的设置,但在这之前,为了使演示效果更显著,我们需要将更多的字体显示出来。因此,今后我们在必要的时候,会使用全英文,并且使用PDFLaTeX
来编译。现在,我们将上面的文档稍作修改:
\documentclass{book}
\usepackage[a5paper]{geometry}
\usepackage{kantlipsum}
\usepackage{quotchap}
\begin{document}
\begin{savequote}
Cookies! Give me some cookies!
\qauthor{Cookie Monster}
\end{savequote}
\chapter{this is a title of chapter one}
\kant[1]
\end{document}
再次编译:
在我们不进行更多的设置的情况下,增强后的章标题默认就如上图所示。观察上图,引言从左上角开始,其区域的总宽度默认是10cm,其中引言内容靠左,作者名字靠右。我们可以通过在savequote
环境中使用选项去修改它。引言的默认字体是\slshape
。然后是一段放置在引言与标题编号之间的垂直距离,这段距离存储在命令\chapterheadstartvskip
中,我们可以通过重定义这个命令来调整这段距离(甚至可以调整为负距离,就像我们接下来要演示的那样)。然后是一个非常大的标题编号,它并不是黑色的,而是灰度为60%的灰色。编号靠右。编号的下面是标题文本,标题文本也靠右。然后是一段垂直距离,它将标题与后面的内容隔开,这段距离存储在命令\chapterheadendvskip
中,我们可以通过重定义这个命令来调整它。通过前面的英文文档可以看出,章标题后的第一段首行默认是不缩进的。
在
LaTeX
\LaTeX
LATEX有一些命令可以放置一段水平距离或者一段垂直距离,如\vspace
命令(垂直),\hspace
命令(水平)等。当距离为负数时,后面的内容会往相反的方向移动。我们做个演示:
\documentclass{book}
\usepackage[a5paper]{geometry}
\begin{document}
ABCD\hspace*{2cm}EFG % ABCD后面放置一段2cm的水平距离
\vspace*{1cm} % 放置一段1cm的垂直距离
HIJK\hspace*{-10pt}LMN
% 在HIJK后面一段-10pt的水平距离,这意味着LMN会向前移动10pt
OPQ
% 此处放置一段-8pt的垂直距离,这意味着RST会向上移动8pt
\vspace*{-8pt}
RST
\end{document}
编译:
了解了这个原理,我们就可以更灵活地调整这些间隔了。
如果我们不想要灰色的编号,可以在调用quotchap
包的时候加上nogrey
选项,这样编号就会变成黑色的。也可以通过添加选项来更换编号的字体,可以使用的免费字体选项如charter,times,avantgarde 等。或者也可以将一些基本字体族作为\qsetcnfont
命令的参数指定,又或者,可以通过重定义\chapnumfont
命令来实现它。该命令负责章的编号的字体和字号。
命令\quotefont
定义了引言的字体(包括作者名字),而我们可以通过重定义\qauthorfont
命令来局部地改变作者名字的体。即,\quotefont
的定义对整个引言有效,而\qauthorfont
的定义仅对作者名字有效。最后,重定义\sectfont
命令可以影响章的标题文本的字体。将来我们会详细地讲解与字体有关的内容,现在我们仅用它做一些简单的演示。
\documentclass{book}
\usepackage[a5paper]{geometry}
\usepackage{kantlipsum}
\usepackage[nogrey,avantgarde]{quotchap}
% 命令将编号设置为黑色,avantgarde设置编号的字体
\renewcommand\chapterheadstartvskip{\vspace*{-5\baselineskip}}
% 重定义\chapterheadstartvskip命令,将标题编号向上平移一段距离,\baselineskip是一个变量
\usepackage{tgheros}
% 这是一个调用某个字体族所使用的包,这里不细讲
\renewcommand\sectfont{\sffamily\bfseries}
% 重定义\sectfont,设置标题文本的字体,\sffamily,\bfseries都是字体设置命令,下面两行也一样
\renewcommand\quotefont{\sffamily\slshape}
\renewcommand\qauthorfont{\scshape}
\begin{document}
\begin{savequote}[10pc] % 设置引言的宽度,pc,pt,cm等,都是可用的单位
Cookies! Give me some cookies!
\qauthor{Cookie Monster}
\end{savequote}
\chapter{A Package Test}
\kant[1]
\end{document}
编译:
quotchap
包将引言直接集成到章的标题设计中,而epigraph
包(作者是Peter Wilson)则不同,它将引言排版在标题之后(使用\epigraph
或者使用epigraphs
环境)。这些功能极少用到,我们在这里做一个简单的演示,若想了解更多的配置,请阅读epigraph
的包文档。
\documentclass{article}
\usepackage[a5paper]{geometry}
\usepackage{kantlipsum}
\usepackage{epigraph}
\setlength\epigraphwidth{.4\textwidth}
\renewcommand\epigraphsize {\small}
\renewcommand\epigraphflush{flushright}
\renewcommand\sourceflush {flushright}
\begin{document}
\section{A Package Test}
\epigraph{Cookies! Give me some cookies!}{Cookie Monster}
\kant[1]
\end{document}
编译:
可以看出,使用该包,引言之后的第一个段落首行默认有缩进。如果不想要缩进,可以在第一个单词面使用命令\noindent
。
使用\epigraphhead
命令可以将引言放置在章节标题上,详情见包文档。
2.2.5 indentfirst
-标题后第一个段落缩进
标准
LaTeX
\LaTeX
LATEX(默认情况下)遵循英文的排版传统,标题后的第一个段落不进行首行缩进。我们可以改变这一点,使得每一个段落的首行都缩进。方法之一是如下文(2.2.7)所示使用titlesec
包的选项。但不论你是否调用了titlesec
包,你都可以通过调用indentfirst
包(作者David Carlisle)来实现:
\documentclass{article}
\usepackage[a5paper]{geometry}
\usepackage{kantlipsum}
\usepackage{indentfirst} % 调用即生效,不需要任何配置
\begin{document}
\section{section one}
\kant[1]
\end{document}
编译:
2.2.6 nonumonpart
-part标题所在的那一页不显示页码
有时候我们想要part标题页不显示页码。在chapter标题上,实现这一点很容易,在\chapter
命令后手动使用\thispagestyle{empty}
,这一章的标题所在页就不会再显示页码。但part
标题占了一整页,没有可以放置这种声明的地方。解决这个问题,可以使用nonumonpart
包(作者Yvon Henel)。它适用于标准类report和book,以及它们的派生类。你所需要做的就是调用这个包,不用进行任何配置。这个相当简单,我们不再演示。
有时候我们想要part标题页不显示页码。在chapter标题上,实现这一点很容易,在\chapter
命令后手动使用\thispagestyle{empty}
,这一章的标题所在页就不会再显示页码。但part
标题占了一整页,没有可以放置这种声明的地方。解决这个问题,可以使用nonumonpart
包(作者Yvon Henel)。它适用于标准类report和book,以及它们的派生类。你所需要做的就是调用这个包,不用进行任何配置。这个相当简单,我们不再演示。
(2.2.7关于titlesec包的使用内容相当长,我们放在下一篇讲)