VS Code 以及其他的安利向(3)-LaTex

LaTex 本身有一定的复杂性和学习门槛。在本文中,笔者尝试走一条特殊的思路写这个教程。这也是笔者自己学会 LaTex 的道路。但这条道路是不能覆盖 LaTex 的方方面面(笔者自己也没学会)。所以实在遇到问题,除了联系笔者增补教程,还可以求助搜索引擎。再次复习一下这个系列文章的宗旨:

搜索引擎是最好的老师,不会的需求,直接去查询,学好

本文的大概思路安装环境->学会数学语法->从模板学习 LaTex

笔者会提供一个现成的可用的 Latex 源代码。在这个基础上就能编译出自己的文档了。需要的更多功能可以在之后通过搜索引擎学习。

何为 LaTex

相比如 markdown 这样的简单标记语言,latex 是一套更完整,复杂的标记语言+排版系统。优点有:

  1. LaTex 有极其发达的数学公式支持。支持自动编号,全文引用(可以有链接跳转)等等特性。LaTex 的数学公式语法被 markdown 和 word 自带的插入公式借用,所以说至少学习 LaTex 后,使用 word 的公式功能也更方便。
  2. 相比 word 所见即所得,虽然 word 也有样式等功能,LaTex 容易实现排版和内容分离。这一点还使得 LaTex 方便切换主题。内容不变可以输出排版不一样的文档。
  3. bibTex 可以实现极其方便的引用文献处理。
  4. 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{}来给出环境。

基本符号

  1. 指数^,下标_,如果不止一个字母/数字的上下标,用{}括起来
  2. \frac{}{} 分数
  3. \sqrt{} 平方根
  4. \partial 偏导数
  5. \ +希腊字母的名字输出希腊字母,例如\alpha 输出$\alpha$
  6. \int 积分,\sum 求和,\lim 极限,\prod 连乘,^_用来表示上下限,和上下标含义一样。
  7. \approx 约等于,\neq 不等号,\geq 大于等于,\leq 小于等于
  8. \mathrm{}在数学公式里面输入正体,用于输入单位等。\mathbb{}花体字$\mathbb{N}$
  9. \left( \right)左右大括号,这些符号必须成对使用。同理可以比如{[等,\right.表示空白。

数学公式环境

  1. 单独的$括起来,是无编号行内公式。
  2. 连着两个$,之间括起来,编号好的行间公式
  3. \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 的表格代码。

excel2latex

这样会自动生成这样的 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
   \label{yinyong}

引用的时候

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
   \cite{rn1}

在文章结尾处

1
2
    \bibliographystyle{gbt7714-2005}%选择引用文献格式
    \bibliography{.bib}%对应的.bib文件名字

选择"xe->bib->xe->xe"四次编译。LaTex 会根据文献最早在 tex 文档里面出现的顺序,在文章结尾自动排版文献的顺序。而且,出现在 bib 文件中,但最后 tex 文件中没有引用的文章,不会出现在最后的 pdf 文档当中。

bibTex 的优势就在于此,自由选择引用的格式,无需操心编号问题。