文章目录
- 1. 章节目录
- 1.1 生成章节
- 1.2 生成目录
- 2. 交叉引用和脚注
- 2.1 交叉引用
- 2.2 脚注
- 3. 特殊环境
- 3.1 列表
- 3.2 文本对齐
- 3.3 引用环境
- 3.4 代码环境
1. 章节目录
1.1 生成章节
写文章或者论文的时候,章节目录可谓是必不可少的,下面我们来聊聊LaTeX怎么处理章节。
LaTeX中的章节,从上到下一般由如下几个层级的划分:
\chapter{⟨title⟩}
\section{⟨title⟩}
\subsection{⟨title⟩}
\subsubsection{⟨title⟩}
\paragraph{⟨title⟩}
\subparagraph{⟨title⟩}
其中 \chapter
层级是 report、book
才有的,article
中并不存在。
LaTeX中的章节章节命令都是自动编号的,如果不需要自动编号,则可以使用 *
命令,如 \section*{⟨title⟩}
。
此外,对于一些比较大的文章,还可以使用 \part
命令将其分为几个独立的部分,每一个部分是相互独立的,每一个部分中的章节重新编号。示例如下
\documentclass[12pt, a4paper, oneside,titlepage]{report}
\usepackage{ctex, ulem} %导入中文包
\title{LaTex教程}
\author{Suppose}
\date{\today}
\begin{document}
\maketitle
\chapter{绪论}
\section{引言}
单单从字面上理解,知识图谱应该是一种更加结构化的知识库,将散乱的知识有效的组织起来,方便人们的查阅,而不是像普通的信息一样全部由文字组成。
伴随着web技术的不断演进与发展,人类先后经历了以文档互联为主要特征的“web 1.0”时代,以数据互联为特征的“web 2.0”时代,正在迈向基于知识互联的崭新“Web 3.0”时代。
\section{实验方法}
\part{正文}
\section{实验结果}
\subsection{数据}
\subsection{图表}
\subsubsection{实验条件}
\subsubsection{实验过程}
\subsection{结果分析}
\section{结论}
\section{致谢}
\end{document}
输出如下
1.2 生成目录
LaTeX中生成目录的方法十分简单,只需要在合适的地方插入命令 \tableofcontents
即可。
默认会插入一页新页作为目录,如在上述代码的 \maketitle
后添加 \tableofcontents
后,可以得到下面的一页新页。不过这样添加后,目录会变成第一页,但是很多情况下目录是不要页码的,所以还需要在 \tableofcontents
后面添加下面三行代码。
\thispagestyle{empty} %去除目录的页码
\newpage %断页
\setcounter{page}{1}%新页从1开始编号
显示的目录如下
2. 交叉引用和脚注
2.1 交叉引用
LaTeX一个很强大的功能就是交叉引用。
在行文过程中,我们可能需要引用自己前面写过的结果。比如“在第一章第5节我们提到……”“请参见我在第327页做的推导……”之类的。在这种情况下,自动化的需求是非常高的。如果说我手动输入了这些数字,那么一旦文档结构有变动,产生的工作量将非常可观。这些东西你还不能不改,因为你不改的话完全就是错的,本来想引用第3节结果写的是“见第2节”。但这在 LaTeX 中完全不是问题。我们可以用标签(label)和交叉引用来解决这个问题。
标签和交叉引用的基本思路是这样的。首先把我需要引用的章节用 \label{标签名称} 进行标记,然后在需要引用它的时候用 \ref{标签名称} 进行引用。这样一来,引擎在进行编译的时候就需要编译两次:第一次生成所有章节的编号,第二次再把这些编号填充到相应的位置。下面我们来看一个使用的例子:
\documentclass[12pt, a4paper, oneside,titlepage]{article}
\usepackage{ctex, ulem} %导入中文包
\begin{document}
\section{引言}
\section{实验方法}
\section{实验结果}\label{sec:shi}
\subsection{数据}
我在第 \ref{sec:shi} 节中提到过
\section{结论}
\section{致谢}
\end{document}
2.2 脚注
使用 \footnote
命令可以在页面底部生成一个脚注,实例如下
\documentclass[12pt, a4paper, oneside,titlepage]{article}
\usepackage{ctex, ulem} %导入中文包
\begin{document}
\section{引言}
\section{实验方法}
\section{实验结果}\label{sec:shi}
\subsection{数据}
我在第 \ref{sec:shi} 节中提到过 \footnote{我根本没提到过}
\section{结论}
\section{致谢}
\end{document}
3. 特殊环境
3.1 列表
LATEX 提供了基本的有序和无序列表环境 enumerate
和 itemize
,两者的用法很类似,都用\item
标明每个列表项。enumerate
环境会自动对列表项编号。基本用法如下
\begin{enumerate}
\item . . .
\end{enumerate}
其中 \item
可带一个可选参数,将有序列表的计数或者无序列表的符号替换成自定义的符号。列表可以嵌套使用,最多嵌套四层。
关键字环境 description
的用法与以上两者类似,不同的是 \item
后的可选参数用来写关键字,以粗体显示,一般是必填的。示例如下
\documentclass[12pt, a4paper, oneside,titlepage]{article}
\usepackage{ctex, ulem} %导入中文包
\begin{document}
\begin{enumerate}
\item 第一
\item[*] 第二
\item 第三
\end{enumerate}
\begin{itemize}
\item 第一
\item[*] 第二
\item 第三
\end{itemize}
\begin{description}
\item[Enumerate] Numbered list.
\item[Itemize] Non-numbered list.
\end{description}
\end{document}
3.2 文本对齐
center
、flushleft
和 flushright
环境分别用于生成居中、左对齐和右对齐的文本环境。除此之外,还可以用 \centering
、\raggedright
、\raggedleft
命令直接改变文字的对齐方式。正文区内容如下
\begin{center}
Centered text using a
center environment.
\end{center}
\begin{flushleft}
Left-aligned text using a
flushleft environment.
\end{flushleft}
\begin{flushright}
Right-aligned text using a
flushright environment.
\end{flushright}
\centering
Centered text paragraph.
\raggedright
Left-aligned text paragraph.
\raggedleft
Right-aligned text paragraph.
从上述可以看出,center
等环境会在上下文产生一个额外间距,而 \centering
等命令不产生,只是改变对齐方式。
3.3 引用环境
LaTex常用的引用环境有三种, quote
、quotation
、verse
。quote
用于引用较短的文字,首行不缩进;quotation
用于引用若干段文字,首行缩进。引用环境较一般文字有额外的左右缩进。verse
用于排版诗歌,与 quotation
恰好相反,verse
是首行悬挂缩进的。
Francis Bacon says:
\begin{quote}
Knowledge is power.
\end{quote}
《木兰诗》:
\begin{quotation}
万里赴戎机,关山度若飞。
朔气传金柝,寒光照铁衣。
将军百战死,壮士十年归。
归来见天子,天子坐明堂。
策勋十二转,赏赐百千强。⋯⋯
\end{quotation}
Rabindranath Tagore’s short poem:
\begin{verse}
Beauty is truth’s smile
when she beholds her own face in
a perfect mirror.
\end{verse}
3.4 代码环境
代码块
使用 \usepackage{listings}
宏包,并使用 \lstset{}
进行基础设置,然后使用 \begin{lstlisting}[language=xxx]
和 \end{lstlisting}
插入代码块。
基础设置包括行号,不显示字符串空格,代码块边框,不包含颜色等设置,要设置颜色和字体请见下文的高级用法。
\documentclass[12pt, a4paper, oneside,titlepage]{article}
\usepackage{ctex, listings} %导入中文包
% 代码块基础设置
\lstset{
numbers=left, % 在左侧显示行号
showstringspaces=false, % 不显示字符串中的空格
frame=single, % 设置代码块边框
columns=flexible,%不随便添加空格,只在已经有空格的地方添加空格
breaklines,%自动换行
}
\begin{document}
\maketitle
\begin{lstlisting}[ % 进行参数设置
language=c,gobble = 4,tabsize=4]
#include <stdio.h>
// main function
int main() {
printf("Hello World!");
return 0;
if (a == 1){
c = 2
}
}
\end{lstlisting}
\end{document}
显示如下
实际上,在使用\usepackage{listings}
宏包时,可以在导言中对所有的代码块进行全局设置,也可以在每一个环境引用中进行单独的设置,常用的设置如下:
设置 | 含义 | 可选值 |
---|---|---|
breaklines | 代码过长时是否自动换行 | true ,false |
numbers | 在哪里显示每行的编号 | left 、right 、none |
stepnumber | 每隔多少行显示行号 | 整数即可 |
firstnumber | 行号起始数字 | 整数或 last :起始行数为上一段lstlisting 环境结尾的行数 |
tabsize | 缩进的空格数 | 整数 |
showstringspaces | 是否显示程序中的空格 | true ,false |
此外还可以设置字符串颜色、关键字颜色、背景色、边框样式等等,这里提供一个比较好的设置模板,大家可以直接拿来用。
\usepackage[dvipsnames]{xcolor} % 更全的色系
% 代码块基础设置
\lstset{
backgroundcolor = \color{yellow!10}, % 背景色:淡黄
basicstyle = \small\ttfamily, % 基本样式 + 小号字体
rulesepcolor= \color{gray}, % 代码块边框颜色
breaklines = true, % 代码过长则换行
numbers = left, % 行号在左侧显示
numberstyle = \small, % 行号字体
keywordstyle = \color{blue}, % 关键字颜色
commentstyle =\color{green!100}, % 注释颜色
stringstyle = \color{red!100}, % 字符串颜色
frame = shadowbox, % 用(带影子效果)方框框住代码块
showspaces = false, % 不显示空格
columns = fixed, % 字间距固定
morekeywords = {as}, % 自己添加新的关键字
tabsize=4,
}
将其加入导言后,正文引用环境时只需要设置 language
参数即可。
伪代码
需要使用 \usepackage{algorithm2e}
宏包,其一个例子如下
\documentclass[12pt, a4paper, oneside,titlepage]{article}
\usepackage{ctex, listings} %导入中文包
\title{LaTex教程}
\author{Suppose}
\date{\today}
\usepackage[ruled,linesnumbered]{algorithm2e}
\begin{document}
\maketitle
\begin{algorithm}
\caption{Simulation-optimization heuristic}\label{algorithm}
\KwData{current period $t$, initial inventory $I_{t-1}$, initial capital $B_{t-1}$, demand samples}
\KwResult{Optimal order quantity $Q^{\ast}_{t}$}
$r\leftarrow t$\;
$\Delta B^{\ast}\leftarrow -\infty$\;
\While{$\Delta B\leq \Delta B^{\ast}$ and $r\leq T$}{$Q\leftarrow\arg\max_{Q\geq 0}\Delta B^{Q}_{t,r}(I_{t-1},B_{t-1})$\;
$\Delta B\leftarrow \Delta B^{Q}_{t,r}(I_{t-1},B_{t-1})/(r-t+1)$\;
\If{$\Delta B\geq \Delta B^{\ast}$}{$Q^{\ast}\leftarrow Q$\;
$\Delta B^{\ast}\leftarrow \Delta B$\;}
$r\leftarrow r+1$\;}
\end{algorithm}
\end{document}
输出为
在导言区引用的时候,可以进行一些设置,参数如下
参数 | 含义 |
---|---|
linesnumbered | 显示行号 |
ruled | 标题显示在上方,不加就默认显示在下方 |
vlined | 代码段中用线连接 |
boxed | 将算法插入在一个盒子里 |
其使用规则如下
如果需要使用if-elseif-elseif-else这样的形式,可以使用如下的格式
\uIf {condition 1} {
code 1;
} \ElseIf {condition 2} {
code 2;
}