LaTeX是一种用于高质量排版的文档准备系统,常用于中型到大型技术或科学文档,发音为Lah-tech或Lay-tech。
编译与文件
编译器
LaTeX常见的编译器有latex、xelatex、pdflatex、lualatex,功能和区别如下:
引擎与编译器
介绍
TeX - LaTeX
TeX是于1978年由Donald Erwin Knuth开发的排版引擎,而LaTeX则是由L. Lamport教授开发的基于TeX的排版系统,实际上是将TeX许多控制命令进行封装。latex命令编译后生成dvi文件,再由其他程序转化为pdf文件。
pdfTeX - pdfLaTex
可直接将tex代码编译成pdf文件,由pdflatex对LaTeX格式的文档进行解释,再交由pdfTeX引擎进行处理。
XeTeX - XeLaTeX
XeTeX引擎可以直接支持Unicode,一般中文LaTeX文档常使用XeLaTeX编译方式。在XeLaTeX出现之前,pdfLaTeX和LaTeX常使用天元、CCT和CJK宏包(目前还在用)来实现中文字符排版,使用时编码格式需设置为UTF-8。
编译命令
编译命令一般包括三部分,编译器、latex文档名、编译选项:
1 2 3 4 5 6 latex test.tex -etex -interaction -errorstopmode/nonstopmode -synctex # -etex打开e-tex扩展 # -interaction选择互动模式 # -errorstopmode遇到错误停下来 # -nonstopmode强行一直编译下去 # -SyncTeX用于提供正反向查找的文件,有时也被压缩为synctex.gz文件
文件后缀
LaTeX工程通常设计多种文件格式,在编写源码阶段涉及到的文件包括:
文件扩展名
内容
.tex
LaTeX源码
.bib
BIBTEX数据库文件,内容为参考文献的条目
.bst
BIBTEX用到的参考文献模板
.sty
LaTeX宏包,宏包名称与文件名一致
.cls
文档类文件,文档类名称与文件名一致
编译后产生的文件包括:
文件扩展名
内容
.log
记录编译时的输出和错误信息
.aux
重要的辅助文件,用于多次编译时和此前的编译信息进行互动
.toc
latex生成的目录记录文件
.lof
latex生成的图片目录记录五年间
.lot
latex生成的表格目录记录文件
.bbl
BIBTEX生成的参考文件记录文件
.blg
BIBTEX生成的日志文件
.idx
LATEX生成的供makeindex处理的索引记录文件
.ind
makeindex处理.idx生成的用于排版的格式化索引记录文件
.ilg
makeindex生成的日志文件
.out
hyperref宏包生成的PDF书签记录文件
.synctex/.synctex.gz
用于正反向查找
.dvi
latex编译器输出的中间文件,可用于后续通过dvipdf等命令生成最终文件
例如,将文件test.tex编译为test.pdf的命令为:
1 2 3 latex test.tex # 将test.tex编译为test.dvi dvipdfmx test.dvi # 将test.dvi转化为test.pdf del *.aux *.dvi *.log # 删除多余文件
LaTeX源文件的基本结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 \documentclass [utf8,a4paper]{article}\usepackage {ctex}\usepackage {graphicx}\title {文档名}\author { 张三\thanks {Email:xiuqhou@outlook.com} \and 李四\thanks {Corresponding author} \and others} \date {\today }\begin {document}\maketitle 此处书写正文 \end {document}
文档类
1 \documentclass [options]{class}
class文档类指明文档类型,编译后产生不同的输出形式和适用领域。常见文档类:
文档类
介绍
article/ctexart
排版科技期刊、段报告、程序文档、邀请函
report/ctexrep
多章节的长报告、短片书籍、毕业论文等
book/ctexbook
排版书籍
beamer/ctexbeamer
排版演示文稿/PPT
需要注意以上文档类仅输出形式不同,并不限定适用范围,例如book文档类也常见于排版毕业论文。
options调节文档类属性:
宏包
宏包是一些格式为.sty的文件,用于拓宽功能,使用时需要在文档中引入:
常用的宏包如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 \usepackage [body={16.1cm, 22.2cm},a4paper]{geometry} \usepackage {ctex} \usepackage {graphicx} \usepackage {caption} \usepackage {float} \usepackage {amsmath} \usepackage {amssymbol} \usepackage {booktabs} \usepackage {arydshln} \usepackage {subfigure} \usepackage {subfigure}{ccaption} \usepackage {tikz} \usepackage {algorithm2e} \usepackage {identfirst}
断行与分页
断行:
1 2 3 4 5 6 \\ [length] \\ *[length] \newline \linebreak [n] \nolinebreak [n]\sloppy
分页:
1 2 3 \newpage \clearpage \cleardoublepage
伪代码
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 \usepackage {algorithm}\usepackage {algorithmic}\begin {algorithm}[h]\renewcommand {\algorithmicrequire }{\textbf {Input:}}\renewcommand {\algorithmicensure }{\textbf {Output:}} \caption {Simplified Model I} \begin {algorithmic}[1] \REQUIRE InPut matrix . \STATE Initialization . \WHILE {Not Converged and $ k\leq n$ } \STATE $ k\leftarrow {k+1}$ \ENDWHILE \FOR {$ i=0$ to $ 10$ } \STATE carry out some processing \ENDFOR \IF {some condition is true} \STATE do some processing \ELSIF {some other condition is true} \STATE do some different processing \ELSIF {some even more bizarre condition is met} 3 \STATE do something else \ELSE \STATE do the default actions \ENDIF \ENSURE Matrix \end {algorithmic} \end {algorithm}
字体
1 2 3 4 \textbf {} \textit {} \textcolor {red}{}
公式
公式类型
1 2 3 4 5 6 7 \begin {equation} a^ 2 + b^ 2=c^ 2 \end {equation}$ $ a^ 2 + b^ 2=c^ 2 $ $
效果:
a 2 + b 2 = c 2 a^2+b^2=c^2
a 2 + b 2 = c 2
行内公式使用$$直接嵌入到文字中
效果为a 2 + b 2 = c 2 a^2+b^2=c^2 a 2 + b 2 = c 2 。
多行公式环境包括:flalign、align、gather、split等。
flalign环境:默认右对齐,可以使用&符号来设置对齐的位置,此时所有&会对齐。每行会进行编号,可以在行尾通过\nonumber设置本行不编号。
1 2 3 4 5 \begin {flalign} a^ 2+b^ 2=c^ 2\\ a^ 2+b^ 2=c^ 2\nonumber \\ a^ 2+b^ 2=c^ 2 \end {flalign}
效果如下所示:
a 2 + b 2 = c 2 a 2 + b 2 = c 2 a 2 + b 2 = c 2 \begin{aligned}
a^2+b^2=c^2\\
a^2+b^2=c^2\nonumber\\
a^2+b^2=c^2
\end{aligned}
a 2 + b 2 = c 2 a 2 + b 2 = c 2 a 2 + b 2 = c 2
align环境:align环境效果和用法与flalign相同。区别在于flalign整体两端对齐, 会比align宽一些。
1 2 3 4 5 \begin {align} a^ 2+b^ 2=c^ 2\\ a^ 2+b^ 2=c^ 2\nonumber \\ a^ 2+b^ 2=c^ 2 \end {align}
效果:
a 2 + b 2 = c 2 a 2 + b 2 = c 2 a 2 + b 2 = c 2 \begin{align}
a^2+b^2=c^2\\
a^2+b^2=c^2\nonumber\\
a^2+b^2=c^2
\end{align}
a 2 + b 2 = c 2 a 2 + b 2 = c 2 a 2 + b 2 = c 2
子公式
使用subsequations环境嵌套align环境,会自动在后面用英文设置子公式编号
1 2 3 4 5 6 7 \begin {subequations} \begin {align} \mathbf B_ {A_ i}^ {k+1}\left (\frac \rho 2||\mathbf Z_ {A_ i}\mathbf B_ {A_ i}^ k+\mathbf H^ k-\mathbf {ZB}^ k-\mathbf U^ k-\mathbf Z_ {A_ i}\mathbf B_ {A_ i}||_ 2^ 2+\lambda ||\mathbf B_ {A_ i}||_ 1 \right )\\ \mathbf H^ {k+1}=\frac {1}{n+\rho }\left (\mathbf Y+\rho \mathbf {ZB}^ {k+1}+\rho \mathbf U^ k\right )\\ \mathbf U^ {k+1}=\mathbf U^ k+\mathbf {ZB}^ {k+1}-\mathbf H^ {k+1} \end {align} \end {subequations}
效果如下:
公式语法
上下标
1 2 3 4 5 \begin {flalign}a_ 2^ 2\\ _ z^ xA\\ \mathop A\limits _ y^ x\\ \end {flalign}
效果如下:
a 2 2 z x A A y x a_2^2\\
\\_z^xA\\
\mathop A\limits_y^x\\ % 使用\limits可以将上下标换成中心位置的上下标
a 2 2 z x A y A x
标记
1 2 3 4 5 6 7 8 9 10 11 12 13 \begin {flalign}A'\\ ^ \backprime A\\ \dot A\\ \ddot A\\ \bar a \\ \tilde a \\ \mathop a\limits ^ {\scriptscriptstyle \frown } \\ \breve {a} \\ \hat a \\ \check a \\ \underline {a} \\ \end {flalign}
A ′ ‵ A A ˙ A ¨ a ˉ a ~ a ⌢ a ˘ a ^ a ˇ a ‾ A' \\% 角分符号
\\^\backprime A \\% 回角符号
\dot A \\% 单点符号
\ddot A \\% 双点符号
%\dddot A \\% 三点符号
%\ddddot A \\% 四点符号
\bar a \\% 上横线
\tilde a \\% 上波浪线
\mathop a\limits^{\scriptscriptstyle\frown} \\% 上方上弧线,\scriptscriptstyle控制大小,\mathop和\limits控制中间上方的位置,\frown表示弧线
\breve{a} \\% 上方下弧线
\hat a \\% 帽子
\check a \\%
\underline{a} \\% 下横线
A ′ ‵ A A ˙ A ¨ a ˉ a ~ a ⌢ a ˘ a ^ a ˇ a
大型运算符
1 2 3 4 5 6 7 8 9 \sum _ {i=1}^ N \\ \sum \nolimits _ {i=1}^ N \\ \prod _ {i=1}^ N \\ \coprod \\ \int _ {i=1}^ N \\ \iint _ {i=1}^ N \\ \oint \\ \bigcap \\ \bigcup \\
∑ i = 1 N ∑ i = 1 N ∏ i = 1 N ∐ ∫ i = 1 N ∬ i = 1 N ∮ ⋂ ⋃ \sum_{i=1}^N \\% 连加
\sum\nolimits_{i=1}^N \\
\prod_{i=1}^N \\% 连乘
\coprod \\
\int_{i=1}^N \\% 积分
\iint_{i=1}^N \\% 两重积分
\oint \\% 围线积分
\bigcap \\
\bigcup \\
i = 1 ∑ N ∑ i = 1 N i = 1 ∏ N ∐ ∫ i = 1 N ∬ i = 1 N ∮ ⋂ ⋃
空格
预定义空格
1 2 3 4 5 6 7 8 9 a\qquad b \\ a\quad b \\ a\enspace b \\ a\; b \\ a\: b \\ a\ b \\ a~b \\ a\, b或a\thinspace b \\ a\! b或a\negthinspace b \\
a b a b a b a b a b a b a b a b 或 a b a b 或 a b a\qquad b \\% 2em
a\quad b \\% 1em
a\enspace b \\% 0.5em
a\;b \\% 5/18em
a\:b \\% 4/18em
a\ b \\% 1/3em
a~b \\% 1/3em
a\,b或a\thinspace b \\% 3/18em
a\!b或a\negthinspace b \\% -3/18em
a b a b a b a b a b a b a b a b 或 a b a b 或 a b
自定义间距
1 2 \hspace {1em} \\ \vspace {1em}
填充
浮动体
表格
LaTeX表格去以下几个网站制作:
表格有两种形式,一种plain形式,一种booktabs形式。后者的竖线在每一行表格中会断开,因此一般只画三线表形式的横线,两者横线的命令也不同:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \begin {table} \centering \begin {tabular}{c|ccc} \hline 1 & 2 & 3 & 4 & 5\\ \hline 6 & 7 & 8 & 9 & 10\\ \hline \end {tabular}\end {table}\begin {table}\centering \begin {tabular}{cccc} \toprule 1 & 2 & 3 & 4 & 5\\ \middlerule 6 & 7 & 8 & 9 & 10\\ \bottomrule \end {tabular}\end {table}
多行和多列
1 2 \multirow {3}{*}{文字} \multicolumn {5}{c}{文字}
单元格内部换行
默认的表格中,单元格内的文字不会自动换行,加“\\”换行符也不行,可以在单元格中使用以下命令:
1 2 \makecell [c]{单元格内第一行文字\\ 单元格内第二行文字} \begin {tabular}[c]{@{}c@{}}单元格第一行文字\\ 第二行文字\end {tabular}
图片
基本命令
1 2 3 4 5 6 \begin {figure}[h] \centering \includegraphics [scale=0.55]{pictures/Error_ with_ Missing_ Rate.png} \caption {Imputation error on Lorenz-63 with missing rate changing} \label {fig:error with missing rate} \end {figure}
图片缩放
图片可依据预定义的文档宽度width和高度height按比例缩放,或使用scale命令依据图片原始大小进行缩放。例如:
1 2 3 \includegraphics [width=0.55\textwidth ]{pictures.png} \includegraphics [height=0.55\textwidth ]{pictures.png} \includegraphics [scale=0.8]{pictures.png}
需注意当width和height单独使用时,图片会进行等比例缩放,而同时使用时会进行自定义拉伸。常用的预定义文档宽度和高度包括:
命令
含义
\textwidth
整个页面版芯(文字部分)的宽度
\textheight
整个页面版芯(文字部分)的高度
\paperwidth
整个页面纸张的宽度
\paperheight
整个页面纸张的高度
\linewidth
当前行的宽度,受所在environment影响,例如进行了芬兰,则宽度为单位栏的宽度。
浮动体位置
h: 优先将图片放到源码中图片引入的位置,即当前位置。
p: 浮动页,将图片放到一致允许有浮动对象的页面上。
b: 底部,优先放置在页面底部。
t: 顶部,优先放置在页面顶部。
!: 覆盖内置布局方式,可与其他样式组合使用。
H: 强制在当前位置放置图片,需要float宏包。
子图
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 \begin {figure}[h] \centering \subfigure [子图1显示的标题文字] {\label {引用信息} \includegraphics [width=0.23\textwidth ]{图片路径} } \subfigure [子图2显示的标题文字] {\label {引用信息} \includegraphics [width=0.23\textwidth ]{图片路径} } \subfigure [子图1显示的标题文字] {\label {引用信息} \includegraphics [width=0.23\textwidth ]{图片路径} } \subfigure [子图2显示的标题文字] {\label {引用信息} \includegraphics [width=0.23\textwidth ]{图片路径} } \caption {总图显示的标题文字} \label {总图的引用信息} \end {figure}
自定义浮动体显示格式
浮动体名称一般格式如Fig 1.表名
,其中Fig
被称为captionname,表名
为captiontitle,可参考如下命令进行自定义:
1 2 3 4 5 6 7 8 9 \renewcommand {\figurename }{图} \renewcommand {\tablename }{表}\captiondelim {\hspace {1em}}\captiondelim {\hspace {1em}}\setlength {\abovecaptionskip }{0pt} \setlength {\belowcaptionskip }{0pt}\captionnamefont {\wuhao } \captiontitlefont {\wuhao }
交叉引用
LaTeX中交叉引用需要使用\label
和\ref
两个命令,\label{标签}
指定引用的标签名,\ref{标签}
用于对该标签进行引用,此外\label
命令需要放在\caption
标题命令后。交叉引用需要多次编译。
引入\usepackage{cleveref}
宏包可自动为引用增加上对象类型,例如Figure和Table,此时引用方式变为:
如果希望给引用增加上超链接, 则可以使用hyperref
宏包,实现鼠标跳转到引用对象的功能。
参考文献
首先建立paper.bib引用库文件,里面放bibtex格式的文献引用信息,paper.bib文件必须和tex文件放在同一目录下。paper.bib文件中的内容如下:
1 2 3 4 5 6 7 8 9 @article{liu2016barrier, title={Barrier Lyapunov functions-based adaptive control for a class of nonlinear pure-feedback systems with full state constraints}, author={Liu, Yan-Jun and Tong, Shaocheng}, journal={Automatica}, volume={64}, pages={70--75}, year={2016}, publisher={Elsevier} }
正文中的引用方式为:
文章末插入参考文献列表的方式为:
1 2 3 \bibliographystyle {IEEEtran} \bibliography {paper}
中文参考文献的引用需要引用gbt7714包,并设置language,注意中文作者姓名不能加标点符号,同样使用and隔开。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \usepackage {gbt7714}@article{Yu2022ARIMA-GRU, author = {于军琪 and 聂己开 and 赵安军 and 侯雪妍}, file = {:C\: /Users/houxiuquan/AppData/Local/Mendeley Ltd./Mendeley Desktop/Downloaded/于 et al. - 2022 - 基于特征挖掘的ARIMA-GRU短期电力负荷预测.pdf:pdf}, journal = {电力系统及其自动化学报}, keywords = {autoregressive in,load forecasting,phase space reconstruction,variational modal decomposition,vmd}, mendeley-groups = {基于分布式建模的电力负荷预测研究/分布式负荷预测/时间序列分析}, number = {3}, pages = {91--99}, title = {基于特征挖掘的ARIMA-GRU短期电力负荷预测}, volume = {34}, year = {2022}, language = {chinese}, }
参考文献若想保持标题问题不变,可在title两侧增加一对大括号
1 2 3 4 5 6 7 8 9 10 11 12 13 @article{Yu2022ARIMA-GRU, author = {于军琪 and 聂己开 and 赵安军 and 侯雪妍}, file = {:C\: /Users/houxiuquan/AppData/Local/Mendeley Ltd./Mendeley Desktop/Downloaded/于 et al. - 2022 - 基于特征挖掘的ARIMA-GRU短期电力负荷预测.pdf:pdf}, journal = {电力系统及其自动化学报}, keywords = {autoregressive in,load forecasting,phase space reconstruction,variational modal decomposition,vmd}, mendeley-groups = {基于分布式建模的电力负荷预测研究/分布式负荷预测/时间序列分析}, number = {3}, pages = {91--99}, title = {{基于特征挖掘的ARIMA-GRU短期电力负荷预测}}, volume = {34}, year = {2022}, language = {chinese}, }
跨文件交叉引用
1 2 \usepackage {xr} \externaldocument {supple}
跨文件交叉引用依赖于aux文件,因此编译时,需要先编译一遍tex文件生成aux文件,再再编译两次,才可生成正确的交叉引用。以bare_jrnl.tex和supple.tex文件互相引用为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 编译tex文件,生成交叉引用的用于aux文件,跨文件的交叉引用依赖aux文件 pdflatex bare_jrnl.tex pdflatex supple.tex # 编译生成各自的参考文献 bibtex bare_jrnl.aux bibtex supple.aux # 再次编译两次,生成引用信息,生成最终的两个pdf文件 pdflatex bare_jrnl.tex pdflatex bare_jrnl.tex pdflatex supple.tex pdflatex supple.tex # 删除辅助文件(windows下,linux用rm 命令) del *.aux *.bib *.log *.gz *.bbl *.blg