VS Code 以及其他的安利向(3)-LaTex¶
LaTex 本身有一定的复杂性和学习门槛。在本文中,笔者尝试走一条特殊的思路写这个教程。这也是笔者自己学会 LaTex 的道路。但这条道路是不能覆盖 LaTex 的方方面面(笔者自己也没学会)。所以实在遇到问题,除了联系笔者增补教程,还可以求助搜索引擎。再次复习一下这个系列文章的宗旨:
搜索引擎是最好的老师,不会的需求,直接去查询,学好
本文的大概思路安装环境->学会数学语法->从模板学习 LaTex
笔者会提供一个现成的可用的 Latex 源代码。在这个基础上就能编译出自己的文档了。需要的更多功能可以在之后通过搜索引擎学习。
何为 LaTex¶
相比如 markdown 这样的简单标记语言,latex 是一套更完整,复杂的标记语言+排版系统。优点有:
- LaTex 有极其发达的数学公式支持。支持自动编号,全文引用(可以有链接跳转)等等特性。LaTex 的数学公式语法被 markdown 和 word 自带的插入公式借用,所以说至少学习 LaTex 后,使用 word 的公式功能也更方便。
- 相比 word 所见即所得,虽然 word 也有样式等功能,LaTex 容易实现排版和内容分离。这一点还使得 LaTex 方便切换主题。内容不变可以输出排版不一样的文档。
- bibTex 可以实现极其方便的引用文献处理。
- LaTex 还有比如 tikz 宏包,可以直接实现简单的画图功能。
安装 LaTex 发行版¶
发行版就是基于 LaTex 语言的编译器等等打包好的可以用的软件。根据很多大佬们的说法,CTex 套装已经非常老旧,其中配套的 WinEdt 其实是一个收费软件。我们这个教程不准备使用这个套装,而是选择 Tex Live。
Tex Live 可以在Tuna(清华大学开源镜像站)上下载镜像,这样速度比从国外下载会快很多。在右侧,“获取下载链接”->“应用软件”->“Tex 排版系统”->“Tex Live2020”。单击即可下载一个 iso 压缩包。
警告,Tex Live 压缩包大概有 4GB,注意网速和流量
解压该文件,以管理员身份(在右键文件后在菜单里选择),打开 install-tl-windows.bat 文件。这个是个自动安装脚本,如果没有特别的比如空间要求,建议可以直接“下一步”到底。全部安装,注意勾选添加到环境变量
警告,Tex Live 安装好大概会有 8GB 大小,安装需要一定时间,请耐心等待
Tex Live 会自带一个 Texworks Editor,也可以用来写 LaTex。但我们这个系列一切基于 VS Code。
配置 VS Code¶
在插件市场搜索下载插件 LaTex Workshop。这个插件基本就能帮助完成所有 LaTex 相关的任务。
进入设置界面。点击右上角“打开设置(JSON)”,粘贴以下设置。虽然这是个快速上手向教程,但还是建议仔细阅读这些设置的注释,尽量理解这些设置的含义。
写 LaTex 在 VS Code 中新建一个 英文标题(防止中文不支持).tex 文件就能开始编写了。
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
93
94
95
96
97
98
99
100
101
102
103
| "latex-workshop.latex.autoBuild.run": "never",
//可选默认是onFileChange,改写了文件会自动编译,可以改成never,手动编译
"latex-workshop.message.error.show": false,//可选,不显示错误信息
"latex-workshop.message.warning.show": false,//可选,不显示警告信息
"latex-workshop.latex.tools": [//必须有
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"%DOCFILE%"
]
},
{
"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",
//xelatex编译一遍,一般的Latex文档这样编译
//xelatex不支持中文标题!!!!
"tools": [
"xelatex"
]
},
{
"name": "xe->bib->xe->xe",
//需要bibTex的文档,用于有bib文件引用的LAtex文档
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
},
{
"name": "xe->xe->xe",//Latex文档内部有交叉引用时候这样编译
"tools": [
"xelatex",
"xelatex",
"xelatex"
]
},
{
"name": "pdflatex",
//换一个编译器,一般来说xelatex对中文等支持更好,这个选项以备万一
//pdflatex可以支持中文标题
"tools": [
"pdflatex"
]
},
{
"name": "pdf->bib->pdf->pdf",//同上
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex",
]
}
],
"latex-workshop.latex.clean.fileTypes": [
//tex文件编译会有一些辅助软件,可以靠这个设置清理
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk",
"*.gz"
],
|
LaTex 数学公式相关 a 语法¶
这个是 LaTex 最精华的一部分,建议至少学会这个部分。这一部分的知识也可以用于 markdown 文档编写。
首先,LaTex 语法一般来说,如果是英文字母描述的命令,使用\开头。\也可以用作一些特殊符号的转义,比如%是 LaTex 的注释符号,如果需要打出%本身,可以打%,作为一个整体表示百分号。
Latex 里面使用\begin{}\end{}
来给出环境。
基本符号¶
- 指数^,下标_,如果不止一个字母/数字的上下标,用{}括起来
- \frac{}{} 分数
- \sqrt{} 平方根
- \partial 偏导数
- \ +希腊字母的名字输出希腊字母,例如\alpha 输出$\alpha$
- \int 积分,\sum 求和,\lim 极限,\prod 连乘,^_用来表示上下限,和上下标含义一样。
- \approx 约等于,\neq 不等号,\geq 大于等于,\leq 小于等于
- \mathrm{}在数学公式里面输入正体,用于输入单位等。\mathbb{}花体字$\mathbb{N}$
- \left( \right)左右大括号,这些符号必须成对使用。同理可以比如{[等,\right.表示空白。
数学公式环境¶
- 单独的$括起来,是无编号行内公式。
- 连着两个$,之间括起来,编号好的行间公式
\begin{equation} \end{equation}
之间括起来的是编号的行间公式
公式对齐¶
上述的环境只能支持一行的公式。如果比如需要写出连等式子,可以在数学环境(上面的 2,3 条)里面使用\begin{aligned} \end{aligned}
。在中间的数学公式就可以实现对齐。
&是对齐符号,每行的&会自动对齐,连等式子一般写成&=。两个\是换行符,表示不同行公式之间的换行。
使用\left{\right.
在数学环境和\begin{aligned} \end{aligned}
,可以实现多条公式前面有个大括号括起来。
数学公式范例¶
1
2
3
4
5
6
7
8
9
10
| %注意这里面用到了公式环境,对齐,上下标,分号,根号,大括号
\begin{equation}%公式环境
\left\{
%大括号~
\begin{aligned}%对齐
& \mu_L=\frac{e}{2m}P_L=\frac{e}{2m}\sqrt{L(L+1)}\frac{h}{2\pi} \\
& \mu_s=\frac{e}{m}P_s=\frac{e}{m}\sqrt{S(S+1)}\frac{h}{2\pi} \\
\end{aligned}
\right.%与left成对
\end{equation}
|
显示效果
LaTex 文章模板¶
这个版本是已经可以使用的。建议仔细阅读文档里面的注释,尽量理解含义。(这样您的 LaTex 就已经能走上正路了。
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
| \documentclass[UTF8]{ctexart}%文档宏观定义
\usepackage{lmodern}%导入宏包,LaTex导入宏包多次不会报错,所以可以随便复制粘贴宏包,即使不需要
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{float}
\usepackage{adjustbox}
\usepackage{geometry}
\usepackage{fullpage}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{tikz}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{subfigure}
\lstset{
%背景框
framexleftmargin=10mm,
frame=none,
%背景色
%backgroundcolor=\color[rgb]{1,1,0.76},
backgroundcolor=\color[RGB]{245,245,244},
%样式
keywordstyle=\bf\color{blue},
identifierstyle=\bf,
numberstyle=\color[RGB]{0,192,192},
commentstyle=\it\color[RGB]{0,96,96},
stringstyle=\rmfamily\slshape\color[RGB]{128,0,0}, %显示空格
showstringspaces=false
}
\newcommand*{\de}{^\circ\hspace{-0.09em}}
%温度
\newcommand*{\dif}{\mathop{}\!\mathrm{d}}
%导数的d
\newcommand*{\e}[1]{\times 10^{#1}}
%\e{}用来表示科学计数法
\newcommand*{\celsius}{\ensuremath{^\circ\hspace{-0.09em}\mathrm{C}}}
%摄氏度
\ctexset{
section = {
format = \raggedright\large\bfseries,
}
}
\title{}%标题
\author{}%作者名
\date{\today}%自动生成今天日期
\geometry{hcentering}
\textwidth 16cm%文章页面宽度
\linespread{1}
\setCJKmainfont{Microsoft YaHei}
%设置字体
\begin{document}%文章开头
\maketitle
\begin{enumerate}%有序列表
\item %每一项以此引起
\end{enumerate}
\begin{itemize}无序列表
\item%每一项以此引起
\end{itemize}
\section{}%一级标题,编号
\section*{}%一级标题,不编号
\subsection{}%二级标题,编号
\subsection*{}%二级标题,不编号
\subsubsection{}%三级标题,编号
\subsubsection*{}%三级标题,不编号
\begin{figure}[H]%插入图片
\centering%居中
\includegraphics[height=12cm,width=0.6\linewidth]{5pic1.jpg}
%插入图片,方括号是调整大小,大括号是图片相对路径名,如果tex文件和图片在同一个文件夹下,可以直接写名字
\caption{}%描述名字
\end{figure}
\begin{figure}[H]%多图片
\centering
\subfigure[title]%多图片的图片名
{
\begin{minipage}[t]{0.5\linewidth}
\centering
\includegraphics[width=\linewidth]{5pic3.jpg}
\end{minipage}%
}
\subfigure[]%多图片的图片名
{
\begin{minipage}[t]{0.5\linewidth}
\centering
\includegraphics[width=\linewidth]{5pic4.jpg}
\end{minipage}%
}
\centering
\end{figure}
\begin{lstlisting}[language=c]
%代码框,language选择语言
xx[j] = xx[j - 1] + d * vv[j - 1];
\end{lstlisting}
\end{document}
|
在这个基础上删改就能编译出一篇好看的 pdf 文档了。
或许读者已经注意到,我给出的模板没有涉及表格。表格很重要,但是表格的语法比较复杂。这里笔者给出一个简单的解决方案Excel2LaTex。这是一个 excel 的宏文件。使用时启动加载,框选现成的 excel 表格部分,点击“加载项”里面的 Convert table to latex,就能自动生成 LaTex 的表格代码。
这样会自动生成这样的 LaTex 代码
1
2
3
4
5
6
7
8
9
10
11
| % Table generated by Excel2LaTeX from sheet 'Sheet1'
\begin{table}[htbp]
\centering
\caption{Add caption}
\begin{tabular}{ccc}
C光 & d光 & F光 \\
1.4 & 1.5 & 1.55 \\
1.9 & 2 & 2.1 \\
\end{tabular}%
\label{tab:addlabel}%
\end{table}%
|
这样的表格一般来说不尽如人意,笔者喜欢修改一些设置。注意对比不同点和阅读注释
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| \begin{table}[H]%大写H可以让表格一路排版下来,位置不浮动
\centering%居中
\begin{tabular}{ccc}
\toprule%插入分割线
C光 & d光 & F光 \\
\midrule%插入分割线
1.4 & 1.5 & 1.55 \\
1.9 & 2 & 2.1 \\
\bottomrule%插入分割线
%这三个rule可以生成三线表格,比较学术化,美观
\end{tabular}
\label{tab:addlabel}%标签
\caption{Add caption}%表格标题放在表格底下
\end{table}
|
内部引用¶
如果是文章内部自己要引用图片/表格/公式,在对应环境里面加上一句
引用的时候
1
| \ref{yinyong}%注意标签名字要对应
|
就会自动生成好对应的编号,不是 图片/表格/公式+编号。这样的 tex 文档要选择"xe->xe->xe"三次编译,才能建立起文档内部的引用关系。
bibTex¶
在同一个目录里面新建一个.bib 格式文件。bibTex 的格式可以通过比如 EndNotes 等很多引用管理软件自动导出。注意第一行的“rn1”是文件的引用描述名
1
2
3
4
5
6
7
8
| @book{rn1,
author = {李约瑟},
title = {中国科学技术史},
publisher = {香港 : 中华书局香港分局},
address = {香港},
year = {1975},
type = {Book}
}
|
在写.tex 文件的时候,在需要引用的地方,写
在文章结尾处
1
2
| \bibliographystyle{gbt7714-2005}%选择引用文献格式
\bibliography{.bib}%对应的.bib文件名字
|
选择"xe->bib->xe->xe"四次编译。LaTex 会根据文献最早在 tex 文档里面出现的顺序,在文章结尾自动排版文献的顺序。而且,出现在 bib 文件中,但最后 tex 文件中没有引用的文章,不会出现在最后的 pdf 文档当中。
bibTex 的优势就在于此,自由选择引用的格式,无需操心编号问题。