LaTeX总结

符号参考

数学符号

1
2
3
% 这对 \max \sum 也有效
\min\limits_{} 置于下方
\min\nolimits_{} 置于右下方

字号参考

1
2
3
4
5
6
7
8
9
10
\tiny           5pt
\scriptsize 7pt
\footnotesize 8pt
\small 9pt
\normalsize 10pt
\large 12pt
\Large 14.4pt
\LARGE 17.28pt
\huge 20.74pt
\Huge 24.88pt

字体参考

1
2
3
4
5
6
\textbf  加粗
\textit 意大利斜体
\textsl slanted斜体

\textsf 无衬线
\texttt 等宽

用法:\textbf{content}

插入公式

1
2
3
4
5
6
7
8
9
10
11
\begin{align*}
f(z)&=b\\
&=c+d
\end{align*}

$$
\begin{aligned}
f(z)&=b\\
&=c+d
\end{aligned}
$$

第二种与第一种有相同的排版效果的,但如果只用一个$,可以置于行内;在markdown中编写latex公式在预览时,有的只支持aligned而不支持align;但\tag不能用在aligned中。更多内容参考StackExchange

插入列表

1
2
3
4
5
6
7
8
9
\begin{itemize}
\item first
\item second
\end{itemize}

\begin{enumerate}
\item first
\item second
\end{enumerate}

插入图片

1
2
3
4
5
6
7
8
9
10
11
12
13
\usepackage{graphicx} 

\begin{figure}[h]
\centering
\includegraphics[width=0.5\textwidth]{image.jpg}
\end{figure}

\begin{figure}[t]
\centering
\includegraphics[width=0.7\textwidth]{image.png}
\caption{Image title}
\label{image}
\end{figure}

插入代码

1
2
3
4
5
6
\usepackage{listings}

\begin{lstlisting}[language=R]
a <- c(1, 2)
b <- a + 1
\end{lstlisting}

(注意:如果要显示的代码顶格,这段代码不能缩进)

样式设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
% 灰色背景
\definecolor{light-gray}{gray}{0.95}
\lstset{columns=fullflexible, basicstyle=\ttfamily,
backgroundcolor=\color{light-gray},xleftmargin=0.5cm}

% 外边框
\lstset{basicstyle=\scriptsize,
numbers=left, %设置行号位置
numberstyle=\tiny, %设置行号大小
keywordstyle=\color{blue!70}, %设置关键字颜色
commentstyle=\color[cmyk]{1,0,1,0}, %设置注释颜色
frame=shadowbox, %设置边框格式
rulesepcolor=\color{red!20!green!20!blue!20},
escapeinside=``, %逃逸字符(1左面的键),用于显示中文
breaklines, %自动折行
extendedchars=false, %解决代码跨页时,章节标题,页眉等汉字不显示的问题
xleftmargin=2em,xrightmargin=2em, aboveskip=1em, %设置边距
%tabsize=4, %设置tab空格数
%showspaces=false %不显示空格
}

插入表格

三线表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\usepackage{booktabs}

\begin{table}
\centering
\setlength{\abovecaptionskip}{0pt}%
\setlength{\belowcaptionskip}{7pt}%
\caption{Three line}
\begin{tabular}{ccc}
\toprule
first&second&third\\
\midrule
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9 \\
\bottomrule
\end{tabular}
\end{table}

插入算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
\usepackage{algorithm}
\usepackage{algpseudocode}

\begin{algorithm}
\caption{Euclid's algorithm}\label{euclid}
%% 可以去掉procedure部分,用Input, Output格式
% \textbf{Input:} data $\mathbf{x}$.
\begin{algorithmic}[1] % 去掉[1]可以去掉标号
\Procedure{Euclid}{$a,b$}\Comment{The g.c.d. of a and b}
\State $r\gets a\bmod b$
\While{$r\not=0$}\Comment{We have the answer if r is 0}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile\label{euclidendwhile}
\For{$i=1, \ldots, 10$}
\State \texttt{<do stuff>}
\EndFor
\State \textbf{return} $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
% \textbf{Output:} data $\mathbf{y}$.
\end{algorithm}

引用图表

引用图、表、公式、章节,都是加一个\label{mark},引用时使用\ref{mark},下面以引用图为例

1
2
3
4
5
6
\begin{figure}[t]
\centering
\includegraphics[width=0.7\textwidth]{image.png}
\caption{Image title}
\label{fig:example}
\end{figure}

注意\label要放在插入图片命令之后,caption放在插入图片命令之后则标题会在图像下方。正文中这样用Figure \ref{fig:example},生成的pdf中就会显示为Figure 1,即只是将\ref的位置替换为数字

常见引用格式如下

1
2
3
4
Fig. \ref{fig:example}
Table \ref{table:example}}
Eqn.(\ref{eq:example}}) / Equation (\ref{eq}) / Eq. \ref{eq}
Section \ref{section:example}}

引用文献

thebibliography

文章最后用下面方式列出所有参考文献,会自动编号1,2,3,...,也会加一个标题References

1
2
3
4
5
6
\newpage

\begin{thebibliography}{99}
\bibitem{AlexNet} Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
\bibitem{ResNet} He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
\end{thebibliography}

在正文中这样引用\cite{AlexNet},引用多篇则\cite{AlexNet, ResNet}。需要编译两次才能正常引用。

换标题样式,如\renewcommand{\refname}{\centerline {REFERENCES}}

修改样式如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
\makeatletter
\renewcommand\@biblabel[1]{}
\renewenvironment{thebibliography}[1]
{\section*{\refname}%
\@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}%
\list{\@biblabel{\@arabic\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\advance\leftmargin by 2em%
\itemindent -2em
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
\sloppy
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000%
\sfcode`\.\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
\makeatother

BibTeX

bibfile.bib文件中用BibTex格式列出参考文献,如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@inproceedings{he2016deep,
title={Deep residual learning for image recognition},
author={He, Kaiming and Zhang, Xiangyu and Ren, Shaoqing and Sun, Jian},
booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},
pages={770--778},
year={2016}
}

@inproceedings{krizhevsky2012imagenet,
title={Imagenet classification with deep convolutional neural networks},
author={Krizhevsky, Alex and Sutskever, Ilya and Hinton, Geoffrey E},
booktitle={Advances in neural information processing systems},
pages={1097--1105},
year={2012}
}

在要列参考文献的位置,设置各式,引用bib文件

1
2
\bibliographystyle{plain}
\bibliography{bibfile}

bib文件文件名不要求与tex文件名相同,只要文件名和这里引用的对应就行。

正文中引用具体文献时用\cite{krizhevsky2012imagenet},引用多个时这样\cite{he2016deep, krizhevsky2012imagenet}

编译需要四次才能正确引用,比如现在有一个example.tex文件,则顺次运行下面四条命令

1
2
3
4
xeletex example
bibtex example
xeletex example
xeletex example

可以在vscode中将这四条命令配置成一个Recipe一键运行。

中文支持

  1. xelatex编译

4种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
\documentclass[12pt]{article}
\usepackage[UTF8]{ctex}
\begin{document}
中文English
\end{document}

\documentclass{article}
\usepackage{xeCJK}
\begin{document}
中文English
\end{document}

\documentclass{ctexart}
\begin{document}
中文English
\end{document}

\documentclass[12pt]{article}
\usepackage{CJK}
\begin{document}
\begin{CJK*}{GBK}{song}
\CJKtilde\CJKindent
中文English
\end{CJK*}
\end{document}
  1. pdfLatex编译
1
2
3
4
\documentclass[UTF8]{ctexart}
\begin{document}
中文English
\end{document}

中文字体设置

这里只讨论xelatex编译下的中文字体设置,windows10环境。

这些设置在latex和beamer下都适用,不会影响英文字体。

查找可用字体

查找XeCJK宏包手册,搜索fc-list找到这部分内容的说明。

简单记录如下,命令行中输入

1
2
3
chcp 65001
fc-list > fontlist.txt
fc-list -f "%{family}\n" :lang=zh > zhfont.txt

得到fontlist.txtzhfont.txt两个文件

全局设置

本节适用于ctexXeCJK两个宏包,调用时唯一的区别在于将包名换一下。

1
2
3
4
5
6
7
8
\documentclass[UTF8]{article}
\usepackage{ctex}

\setCJKmainfont{微软雅黑}

\begin{document}
一段文字
\end{document}

setCJKmainfont中的微软雅黑可以使用

1
微软雅黑 宋体 黑体 仿宋 楷体 等线

等等,出现在zhfont.txt文件中的名称都可以(对应fontlist.txt文件每一行冒号前面部分,应该只有中文字体有效,即zhfont.txt文件中的名称)。

也可以直接载入字体文件名

1
\setCJKmainfont{simkai.ttf}

新下载的字体只要拖动到与simkai.ttf这些字体相同的文件夹(Windows下为C:\Windows\Fonts)下,即可直接通过文件名调用。

还可以设置粗体参数

1
2
3
4
5
6
7
\documentclass[UTF8]{article}
\usepackage{ctex}
\setCJKmainfont[BoldFont=SimHei]{NSimSun}

\begin{document}
一段文字\textbf{加粗}
\end{document}

局部设置

本节适用于ctexXeCJK两个宏包,调用时唯一的区别在于将包名换一下。

1
2
3
4
5
6
7
8
9
10
11
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{simkai.ttf}

\setCJKfamilyfont{hei}{SimHei}
\newcommand{\hei}{\CJKfamily{hei}}

\begin{document}
默认字体
{\hei 这段文字是黑体} \\
\end{document}

这种设置方法可以支持zhfont.txt中的所有字体。

ctex局部设置

1
2
3
4
5
6
7
\documentclass[UTF8]{article}
\usepackage{ctex}

\begin{document}
一段文字\\
{\songti 这段文字是宋体} \\
\end{document}

\songti目前测试只有下面几种可用

1
2
3
4
{\songti 这段文字是宋体}   \\
{\kaishu 这段文字是楷体} \\
{\heiti 这段文字是黑体} \\
{\fangsong 这段文字是仿宋} \\

这种不需要设置就可以使用,但是字体有所局限

ctexart字体设置

以上出现的在ctexart中都适用

1
2
3
4
5
6
7
8
9
\documentclass{ctexart}
\setCJKmainfont{simkai.ttf}
\setCJKfamilyfont{hei}{SimHei}
\newcommand{\hei}{\CJKfamily{hei}}
\begin{document}
默认字体
{\hei 这段文字是黑体} \\
{\songti 这段文字是宋体}
\end{document}

总结

  • ctex宏包完美支持各种情况,包括字体的全局设置、局部设置,以及在article/beamer中的使用。实际使用中只要加载ctex宏包,使用xelatex编译就完美了
  • ctexart文档类支持article中的各种设置,但是不能在beamer中使用
  • xeCJK宏包多数功能都可以使用,只缺少一种局部设置功能

简单模板

英文模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
\documentclass[a4paper,12pt]{article} 
\usepackage{amsmath,amssymb,amstext}
\usepackage{float}
\usepackage{array} % 数组和表格制作
\usepackage{fancyhdr} % 页眉页脚设置
\usepackage{graphicx} % 插图
\usepackage{tabularx} % 自动设置表格列宽
\usepackage{multirow} % 跨行表格
\usepackage{multicol} % 跨列表格
\usepackage{titlesec} % 标题设置
\usepackage{titletoc} % 目录格式设置
\usepackage{epstopdf} % 编译生成pdf时,能够插入eps格式图片
\usepackage{listings}
\usepackage{xcolor}
\usepackage{color}
\usepackage{booktabs}
\usepackage{lmodern}
\usepackage[top=2.5cm,bottom=2.0cm,left=2.0cm,right=2.0cm]{geometry} % 页边距%1.5倍行距


\lstset{basicstyle=\scriptsize,
numbers=left, %设置行号位置
numberstyle=\tiny, %设置行号大小
keywordstyle=\color{blue!70}, %设置关键字颜色
commentstyle=\color[cmyk]{1,0,1,0}, %设置注释颜色
frame=shadowbox, %设置边框格式
rulesepcolor=\color{red!20!green!20!blue!20},
escapeinside=``, %逃逸字符(1左面的键),用于显示中文
breaklines, %自动折行
extendedchars=false, %解决代码跨页时,章节标题,页眉等汉字不显示的问题
xleftmargin=2em,xrightmargin=2em, aboveskip=1em, %设置边距
%tabsize=4, %设置tab空格数
%showspaces=false %不显示空格
}

\begin{document}
\begin{center}
{\Large \textbf{\textsf{title}} \\}

\textsf{Name: }\qquad
\textsf{ID: }
\end{center}

text text text

\end{document}

中文模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
\documentclass[a4paper,12pt]{article} 
\usepackage{ctex}
\usepackage{amsmath,amssymb,amstext}
\usepackage{float}
\usepackage{array} % 数组和表格制作
\usepackage{fancyhdr} % 页眉页脚设置
\usepackage{graphicx} % 插图
\usepackage{tabularx} % 自动设置表格列宽
\usepackage{multirow} % 跨行表格
\usepackage{multicol} % 跨列表格
\usepackage{titlesec} % 标题设置
\usepackage{titletoc} % 目录格式设置
\usepackage{epstopdf} % 编译生成pdf时,能够插入eps格式图片
\usepackage{listings}
\usepackage{xcolor}
\usepackage{color}
\usepackage{booktabs}
\usepackage{lmodern}
\usepackage[top=2.5cm,bottom=2.0cm,left=2.0cm,right=2.0cm]{geometry} % 页边距

\setCJKfamilyfont{hei}{SimHei}
\newcommand{\hei}{\CJKfamily{hei}}

\renewcommand{\figurename}{{图}}
\linespread{1.7} %1.5倍行距


\lstset{basicstyle=\scriptsize,
numbers=left, %设置行号位置
numberstyle=\tiny, %设置行号大小
keywordstyle=\color{blue!70}, %设置关键字颜色
commentstyle=\color[cmyk]{1,0,1,0}, %设置注释颜色
frame=shadowbox, %设置边框格式
rulesepcolor=\color{red!20!green!20!blue!20},
escapeinside=``, %逃逸字符(1左面的键),用于显示中文
breaklines, %自动折行
extendedchars=false, %解决代码跨页时,章节标题,页眉等汉字不显示的问题
xleftmargin=2em,xrightmargin=2em, aboveskip=1em, %设置边距
%tabsize=4, %设置tab空格数
%showspaces=false %不显示空格
}

\begin{document}
\begin{center}
{\Large \hei 比较长的标题\\}
\large
\hei{姓名: 姓名 \qquad \\}
\hei{学号: 学号}
\end{center}

内容

\end{document}

常用命令

生成标题

1
2
3
4
5
6
% 正文
\title{}
\author{Bob \and Tom}
\date{December 25th, 2019}
\providecommand{\keywords}[1]{\textbf{\textit{Keywords:}} #1}
\maketitle

其他命令

1
2
3
4
5
6
7
8
9
10
11
12
\tableofcontents

\section
\subsection
\subsubsection
\paragraph{mark} mark会首行加粗,后文紧接


\begin{abstract}

\end{abstract}
\keywords{}

Theorem等环境参考这里

文档类型可选article,report,book,中文则有对应的ctexart,ctexrep,ctexbook,选择中文的文档类型好处之一在于不同配置图表的中文题注。

下载模板

英文模板

导入一些常用包,然后套用其他模板,或者overleaf上找模板,包括Journal, Homework, Project等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
\usepackage{amsmath,amssymb,amstext} 
\usepackage{float}
\usepackage{array} % 数组和表格制作
\usepackage{fancyhdr} % 页眉页脚设置
\usepackage{graphicx} % 插图
\usepackage{tabularx} % 自动设置表格列宽
\usepackage{multirow} % 跨行表格
\usepackage{multicol} % 跨列表格
\usepackage{titlesec} % 标题设置
\usepackage{titletoc} % 目录格式设置
\usepackage{epstopdf} % 编译生成pdf时,能够插入eps格式图片
\usepackage{listings} % 插入代码
\usepackage{booktabs} % 三线表
\usepackage{xcolor}
\usepackage{color}
\usepackage{lmodern}

中文模板

英文导入的包+中文包,配置中文字体

1
2
3
4
5
6
7
\usepackage{ctex}

\setCJKfamilyfont{hei}{SimHei}
\newcommand{\hei}{\CJKfamily{hei}}

\renewcommand{\figurename}{{图}}
\linespread{1.5} %1.5倍行距

VScode配置

基于LaTeX Workshop插件,配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{
"folders": [

],

"settings": {
"workbench.colorCustomizations": {
"editorIndentGuide.background": "#656464",
"editorIndentGuide.activeBackground": "#656464"

},

"latex-workshop.view.pdf.viewer": "external",
"latex-workshop.view.pdf.external.viewer.command": "C:/Program Files/SumatraPDF/SumatraPDF.exe",
"latex-workshop.view.pdf.external.viewer.args": [
"%PDF%"
],

// 正向搜索设置
"latex-workshop.view.pdf.external.synctex.command": "C:/Program Files/SumatraPDF/SumatraPDF.exe",
"latex-workshop.view.pdf.external.synctex.args": [
"-forward-search",
"%TEX%",
"%LINE%",
"%PDF%"
],

"latex-workshop.latex.tools": [
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%.tex"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}
],

"latex-workshop.latex.recipes": [
{
"name": "xelatex",
"tools": [
"xelatex"
]
},
{
"name": "xelatex -> bibtex -> xelatex*2",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
},
{
"name": "pdflatex",
"tools": [
"pdflatex"
]
},
{
"name": "pdflatex -> bibtex -> pdflatex*2",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
}

],
},
}

latex-workshop.latex.tools中定义一些工具;latex-workshop.latex.recipes中组合工具,其中第一条是保存是默认运行的。一般用xelatex运行,因为中文等支持都比较灵活,需要用Bibtex引用文献时手动点击运行第二个recipe。

在tex文件页面,左边栏会有一个TEX栏,recipe命令都是在这里选,其中Snippet Panel可以显示一些常见的符号。

如果是英文文档,可以选择用pdflatex来编译,这样更快,不需要修改配置,只需要在文档开头加一行,保存时会默认用pdflatex编译

1
%!TEX program = pdflatex

反向搜索设置:在SumatraPDF中,设置-选项,下方填入

1
"C:\Program Files\Microsoft VS Code\Code.exe" "C:\Program Files\Microsoft VS Code\resources\app\out\cli.js" -g "%f:%l"

则双击pdf中文字会定位tex文件中的位置。

快捷键

  • Ctrl + Alt + C可以删除多余文件
  • Ctrl + Alt + B手动build
    • 当不想保存时自动build,则修改这条配置latex-workshop.latex.autoBuild.run
    • 打开第二个tex文件后,保存时自动build可能就会失效,这时关掉VScode重新打开就会好,或者用上述方法手动build
  • Ctrl + Alt + J确定光标位置后正向搜索
    • 等价于点击"Navigate, select and edit" --> "SyncTex from cursor"

其他插件

  • Paste Image: 方便地插入剪切板中的图片,支持tex和md文件,也可以设置图片路径

资源搜集