naive blog
LaTeX入门(六)——章节与列表
在我们的写作中,除了字斟句酌、段落分明以外,我们还需要做的,就是将这些段落组织成一个有层次的主体。就像我们设计衣服,找到了合适的纱线,纺成了一匹匹布料,我们还需要将这些布料用心组合,搭配出合适的衣服。
在LaTeX中,与文章层次有关的,就是章节与列表。
章节
不同的文档类中的章节不一样。我们常用的article文档类的章节层次有:section, subsection, subsubsection, paragraph, subparagraph. 常用的report文档类的章节层次有:chapter, section, subsection, subsubsection, paragraph, subparagraph. 也就是说,report比article多了一个chapter.
调用这些章节层次的方法为:
\section{}
,
\subsection{}
等等,以此类推。其中大括号内的参数为该章节的名字。比如说,在一篇数学建模的论文中,我们可以在正文中有如下章节结构:
\section{问题重述}
\section{符号说明}
\section{问题分析}
\section{基本假设}
\section{模型的建立与求解}
\subsection{问题一的求解}
\subsection{问题二的求解}
\subsection{问题三的求解}
\section{模型的优缺点}
在写完章节名以后,就可以写本章的内容了。比如说,
\section{问题重述}
本次建模的题目为......
\section{符号说明}
......
也就是说,
\section{}
这些命令,起到了分隔文章主体的作用。
同时,LaTeX强大的一点在于,你只需要写
\section{}
,而不需要声明这是第几章,它会自动给你编号。比如说,你在ctexart文档类中把上述的框架写进正文,排版出来的效果为:
此外,如果想要改变章节标题的格式,对于英文文档类,请参考宏包
titlesec
的说明文档(就像之前说的那样,用texdoc)。对于中文文档类,如ctexart, ctexrep等,我们可以使用
\CTEXsetup[]{}
命令,具体方法请参考宏包
ctex
的说明文档,这里不再赘述。一般我们也不太会需要改变章节标题的格式,唯一可能会想改变的,是把中文
\section
居左。我们可以在导言区中写
\CTEXsetup[format+={\raggedright}]{section}
来实现。
此外,值得一提的是,对于英文文档类,如article等,由于英文论文的写作规范,每个章节的首段是不缩进的。这不需要我们额外设置,LaTeX是自动设置好的。具体效果可参见下图:
在某些时候,我们会发现,尽管LaTeX给我们提供到了subsubsection,但结构层次依然不够。但是,paragraph却有其与众不同的特点,标题后不能换行,对subsubsubsection的需要就出现了。但是,LaTeX并没有给我们subsubsubsection命令,我们需要自己定义。将下面一段文字复制到导言区:
\usepackage{titlesec}
\titleclass{\subsubsubsection}{straight}[\subsection]
\newcounter{subsubsubsection}[subsubsection]
\renewcommand\thesubsubsubsection{\thesubsubsection.\arabic{subsubsubsection}}
\renewcommand\theparagraph{\thesubsubsubsection.\arabic{paragraph}}
\titleformat{\subsubsubsection}
{\normalfont\normalsize\bfseries}{\thesubsubsubsection}{1em}{}
\titlespacing*{\subsubsubsection}
{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\makeatletter
\renewcommand\paragraph{\@startsection{paragraph}{5}{\z@}%
{3.25ex \@plus1ex \@minus.2ex}%
{-1em}%
{\normalfont\normalsize\bfseries}}
\renewcommand\subparagraph{\@startsection{subparagraph}{6}{\parindent}%
{3.25ex \@plus1ex \@minus .2ex}%
{-1em}%
{\normalfont\normalsize\bfseries}}
\def\toclevel@subsubsubsection{4}
\def\toclevel@paragraph{5}
\def\toclevel@paragraph{6}
\def\l@subsubsubsection{\@dottedtocline{4}{7em}{4em}}
\def\l@paragraph{\@dottedtocline{5}{10em}{5em}}
\def\l@subparagraph{\@dottedtocline{6}{14em}{6em}}
\makeatother
\setcounter{secnumdepth}{4}
即可在正文中使用
\subsubsubsection{}
命令了。
一篇文章中,不仅仅有正文,还也许会有参考文献及附录。
参考文献
对于参考文献,这里不再介绍bibtex的方法,如果想了解的同学可以去网上自行搜索。下面介绍手动控制参考文献的方法:
在正文中使用
thebibliography
环境。下面给大家看一下我某次数学建模的参考文献:
\begin{thebibliography}{99}
\bibitem{CPStructure}{Borgatti, S. and Everett, M. Models of core/periphery structures. Social Networks, 21:
375-395, October 2000}
\bibitem{rightskewed}{Newman, M. The structure and function of complex networks. SIAM Review, 45:167-256, 2003.}
\bibitem{CD}{Natarajan Meghanathan.A Binary Search Algorithm for Correlation Study of Decay Centrality vs. Degree Centrality and Closeness Centrality[J].Computer and information science,2017,10(2):52-75.}
\bibitem{CC}{Masucci, A. Paolo,Molinero, Carlos.Robustness and closeness centrality for self-organized and planned cities[J].The European physical journal, B. Condensed matter physics,2016,89(2):-.}
\bibitem{SA}{Chengxiang Zhuge,Chunfu Shao,Shuling Wang, et al.Sensitivity analysis of integrated activity-based model: using MATSim as an example[J].Transportation Letters,2019,11(2):93-103. DOI:10.1080/19427867.2017.1286772.}
\bibitem{CE}{L. Laporta,J. Afonso,I. Mesquita.The need for weighting indirect connections between game variables: Social Network Analysis and eigenvector centrality applied to high-level men’s volleyball[J].International Journal of Performance Analysis in Sport,2018,18(6):1067-1077. DOI:10.1080/24748668.2018.1553094.}
\end{thebibliography}
排版出来的效果为:
在
\begin{thebibliography}
后还有一个
{99}
, 这是参考文献的最大条数,你也可以写
{80}
之类的,不重要。
在这之间的每一个
\bibitem
代表一条参考文献。同样地,这是LaTeX自动帮你编号的。它实际上只有一个参数,我之所以写了两个大括号,是方便我们理解和使用。
\bibitem{aRef}{aContent}
, 排版出来的效果只有
aContent
.
aRef
有什么用呢?它用于文章前面的交叉引用(关于这个我后面的文章里会详细说明)。这里只需要知道一点,在文章后面写了以后,在文章正文内就能使用
\cite{aRef}
来引用这条参考文献。排版出来的效果为出现这个参考文献对应的编号。如果需要将编号置于右上角,则可以在导言区里写
\newcommand{\upcite}[1]{\textsuperscript{\cite{#1}}}
然后在正文中使用
\upcite{aRef}
即可。
而这些参考文献的格式从哪来,我们一般是在百度学术或者Google学术上,找到对应的论文,然后点引用,会出现三种格式。我们直接复制GB/T 7714即可。
附录
使用附录的方式有许多种,我常用的是使用宏包
appendix
,其他方法大家也可以自行搜索。
在导言区里写上:
\usepackage[toc, page]{appendix}
然后,在正文中想要出现附录的地方使用
appendices
环境,并且添加一句话,即:
\begin{appendices}
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
\end{appendices}
然后,在这个环境中用
\section{}
等命令就能产生附录中的章节了。那句额外的代码,是为了不在目录中出现每个附录章节的名字,而只在目录中出现一个附录代表全体。
对于中文文档类,如ctexart等,需要在导言区
\usepackage[toc, page]{appendix}
之后加上两句话:
\renewcommand{\appendixtocname}{附录}
\renewcommand{\appendixpagename}{附录}
这两个的作用,一个是在目录中用“附录”替换"appendices", 一个是在正文中用“附录”替换"appendices".
目录
刚刚提到了好多次目录,那么目录是怎么做的呢?
在你正文中想要加入目录的地方,写上一行命令:
\tableofcontents
然后排版两次(原因我会在之后的文章中提到),就能得到相应的目录了。
列表
除了章节以外,比章节更细的层次划分就是列表了。LaTeX中常见的列表有两种:有序列表和无序列表。有序列表即以1, 2, 3..这类的序号编号每一条条目,无序列表即每一条条目都被一个·所引起。
有序列表的使用方法为:
\begin{enumerate}
\item anItem
\item anotherItem
\end{enumerate}
无序列表的使用方法为:
\begin{itemize}
\item anItem
\item anotherItem
\end{itemize}
每一个
\item
代表一个条目。
在列表中换行可以使用
\\
.但是,我们会发现,在列表中不分段落,没有缩进。
我们可以实现列表的嵌套,即例如:
将不同动物放入冰箱的步骤:
\begin{itemize}
\item 大象
\begin{enumerate}
\item 打开冰箱门
\item 把大象放进去
\item 关上冰箱门
\end{enumerate}
\item 长颈鹿
\begin{enumerate}
\item 打开冰箱门
\item 把大象拿出来
\item 把长颈鹿放进去
\item 关上冰箱门
\end{enumerate}
\end{itemize}
排版效果为:
此外,我们也可以自己定制列表环境。使用宏包
enumitem
. 具体方法请参见宏包的说明文档。在数学建模中,我们常用一个用于问题重述的列表环境,即生成“问题一”“问题二”的列表。我的代码为:
\usepackage{enumitem}
\newlist{question}{enumerate}{1}
\setlist[question,1]{itemsep = 0pt, parsep = 0pt, align=left, leftmargin=*, label = {\bfseries 问题\chinese*}}
直接复制到导言区,然后就可以在正文中使用
\begin{question}
\item %这是问题一
\item %这是问题二
\item %这是问题三
\end{question}
来使用了。
最后讲一下如何修改
enumerate
和
itemize
列表编号的问题。
对于
enumerate
列表,即有序列表来说,第一级列表编号默认为1. 2. 3. ... 如果我们要修改这个列表编号怎么办呢?对于每一个有序列表,都有一个
enumi
来存储当前的计数。比如说现在第一级列表到了第三个,那么
enumi
就是3(这里是第一级列表,如果列表内再嵌套列表,也就是第二级有序列表,则就是
enumii
, 第三级就是
enumiii
以此类推)。 而命令
\theenumi
控制的是
enumi
的表现形式,比如说,如果我们在导言区中写
\renewcommand{\theenumi}{\chinese{enumi}}
那么第一级编号时出现的就不是1 2 3而是一二三。
而命令
\labelenumi
控制的是在列表中的编号格式。比如说,我们如果在导言区中写
\renewcommand{\labelenumi}{(\theenumi)}
那么在列表中出现的就是(一) (二) (三)这种。
对于
itemize
列表,即无序列表来说,就没有了那个计数器。所以,我们只需要在导言区中写
\renewcommand{\labelitemi}{sth.}
其中
sth.
是你想将无序列表变成的模样。比如说,空心圆圈
$\circ$
等等。