第三节 舒适的 \(\rm \LaTeX\) 编辑环境

状态:效果准备中

3.1 VS Code x \(\rm \LaTeX\)

VS Code 的高颜值编辑器可以大大地增强 \(\rm \LaTeX\) 的编写体验。参考了这个链接来更好地设置相关环境。

3.1.1 进入官网按照指示安装 VS Code。

3.1.2 在扩展商店中,搜索 Chinese,安装中文语言包。搜索 LaTeX Workshop,安装 \(\rm \LaTeX\) 扩展。

3.1.3 安装完毕后,在英文路径下创建一个 .tex 文件(注意是小写),会发现这个插件会被自动激活。

3.1.4 进入 VS Code 的设置页面,搜索 latex,进入 settings.json 编辑,插入以下设置。保存后关闭。

VS Code settings.json 增补部分
"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%"
        ]
    },
    {
        "name": "lualatex",
        "command": "lualatex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "%DOCFILE%"
        ]
    }
],
"latex-workshop.latex.recipes": [
    {
        "name": "pdflatex",
        "tools": [
            "pdflatex"
        ]
    },
    {
        "name": "lualatex",
        "tools": [
            "lualatex"
        ]
    },
    {
    "name": "pdf->bib->pdf->pdf",
    "tools": [
        "pdflatex",
        "bibtex",
        "pdflatex",
        "pdflatex"
    ]
    },
    {
        "name": "xelatex",
        "tools": [
            "xelatex"
        ],
    },
    {
        "name": "xe->bib->xe->xe",
        "tools": [
            "xelatex",
            "bibtex",
            "xelatex",
            "xelatex"
        ]
    },
],
        
        

3.1.5 配置完成后,重启 VS Code 使配置生效。点击 \( \rm \TeX \) 按钮进入选单,双击 Snippet Panel 调出小控件区域,以便插入一些符号,这样就不必记忆一些数学符号命令了,这里都有。。

3.2 \(\rm \LaTeX\) 文档基本结构

3.2.1 \(\rm \LaTeX\) 正文区域一般在document环境下。

\begin{document}
Hello,\LaTeX!
\end{document}

3.2.2 点击左下角号,双击Build LaTeX Project下的Recipe: pdf->bib->pdf->pdf,编译 \(\rm \LaTeX\) 文件。

3.2.3 然后点击右上角的 View LaTeX PDF File查看生成的 PDF 文件。上面会提示使用什么方式打开,可以使用VS Code Tab标签页方式打开,就可以看到你的第一个 \(\rm \LaTeX\) 生成的 PDF 文件了!

3.2.4 你会发现编译器会弹出错误,提示

The font size command \normalsize is not defined.

这是因为我们还没有定义文档类型,在导言区添加

\documentclass[a4paper]{article}
\documentclass写在document环境之前,用以定义文档类型,参数[a4paper]用于定义纸张类型,article用于指定预选风格,这里采用了普遍使用的文章风格。

3.2.5 最后,我们把提示框关掉。在设置选单里,搜索

latex-workshop.message.warning.show
latex-workshop.message.error.show
将复选框勾除。然后搜索
Wrap
Word Wrap下拉选单选中on启动编辑器自动换行。 最后可以在编译成功后自动清除临时文件,搜索
latex auto clean
选中onBuild选项,将会让完成编译后自动删除临时文件。

3.3 Markdown 预览 \(\rm \LaTeX\) 公式

可能每次都要编译一次 \(\rm \LaTeX\) 文档有时候还是太麻烦了,费时费力。我们不妨采用 Markdown 的 \(\rm \LaTeX\) 预览功能方便地做出大纲,也就弥补了 \(\rm \LaTeX\) 在实时预览方面的缺陷。

定界符$ $用于生成行内公式。

3.3.1 前往插件商店下载Markdown All in One

3.3.2 新建一个 .md 文件,输入

$a=b+c$

3.3.3 点击右上角的打开侧边预览按钮,就可以看到对应的 \(\rm \LaTeX\) 公式了。\[a=b+c\]

只要在 Markdown 中将大纲列好,之后在送入 \(\rm \LaTeX\) 处理,就能比较高效地完成 \(\rm \LaTeX\) 文档了!

备注:Typora 软件支持导出 .tex 文件功能。

3.4 实例:用 \(\rm \LaTeX\) 写一次数学作业

有些时候,我们被要求使用 \(\rm \LaTeX\) 写一些数学作业。我们将会按照上述流程来试验一次。

testAssignment.tex [预览]
\documentclass[a4paper,12pt]{article}
\usepackage{CJKutf8}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{geometry}

% 边距
\geometry{left=3.0cm,right=2.0cm,top=3.0cm,bottom=3.0cm}

% 大题
\newenvironment{firstlayer}{\begin{list}{}{\renewcommand{\makelabel}[1]{\textbf{##1}.\hfil}}}{\end{list}}

% 小题
\newenvironment{secondlayer}{\begin{list}{}{\renewcommand{\makelabel}[1]{(##1)\hfil}}}{\end{list}}

% 证明
\renewcommand{\proofname}{\textbf{证明}}

% 解
\providecommand{\sol}{\textbf{解}.~}

% 标题
\title{示例作业}
\author{LogCreative}
\date{2020 年 8 月}

\begin{document}
\begin{CJK}{UTF8}{song}
\maketitle

\begin{firstlayer}

\item[2] 简单图 $G$ 中,如果 $m>\frac{1}{2}(n-1)(n-2)$,证明 $G$ 不存在孤立节点。

\begin{proof}
    % 证明环境
    若不然,则有一孤立点 $v$,子图 $G'=G-v$ 的边数

    \begin{equation}\label{ls}
        \left\lvert E(G')\right\rvert = \left\lvert E(G)\right\rvert = m>\frac{1}{2}(n-1)(n-2) 
    \end{equation}

    然而,$G'$ 边数最多的情况是完全图 $K_{n-1}$,也就是
    \begin{equation}\label{lss}
        \left\lvert E(G')\right\rvert \leq \frac{1}{2}(n-1)(n-2)
    \end{equation}

    这与式子 \eqref{ls} 矛盾。

    由于当孤立节点数不止一个时,式子 \eqref{lss} 依然成立。所以不存在孤立节点。

\end{proof}

\begin{secondlayer}

    \item[2] \sol 这是一个解。

\end{secondlayer}

\end{firstlayer}

\end{CJK}
\end{document}

3.4.1 做一个作业,我们要有标题。在导言区定义标题属性。

\title{示例作业}
\author{LogCreative}
\date{2020 年 8 月}

标题属性
属性 描述
title 标题
author 作者
date 日期

然后在正文区运行制作标题命令。

\maketitle

3.4.2 编译后发现中文显示不出来,就需要引入CJKutf8包以及对应的CJK环境。

\usepackage{CJKutf8}

\begin{document}
\begin{CJK}{utf}{song}
正文区
\end{CJK}
\end{document}

\usepackage用于引入宏包,CJK环境的两个参数分别是编码方式(UTF-8)和字体名称(宋体)。

保存后,将会自动下载对应的包进行编译。

3.4.3 下面就是输入一些内容了。我们注意一下 kerning 的问题,半角英文与全角中文之间要空一个空格。日期这里也稍微改一下。

proof证明环境由amsthm宏包提供。公式由\label来指定标签,并使用\equref引用这个公式。

3.4.4 可以新建一个 .md 文件写出大纲并实时预览公式。然后复制到 .tex 正文区。

备注:如果有引用问题,可以重新使用Recipe: pdflatex命令生成文件,标准的链条应当编译两次以上。悬浮在公式标签上可以看到公式预览。

3.4.5 继续美化。在\documentclass参数中添加12pt更改基础字号大小,使用geometry宏包定义边距。

添加两个列表环境,以更方便地显示题号。

% 大题
\newenvironment{firstlayer}{\begin{list}{}{\renewcommand{\makelabel}[1]{\textbf{##1}.\hfil}}}{\end{list}}

% 小题
\newenvironment{secondlayer}{\begin{list}{}{\renewcommand{\makelabel}[1]{(##1)\hfil}}}{\end{list}}
这样在正文中使用这样的形式就可以显示大题与小题题号了。
\begin{firstlayer}
    \item[2] 这是第二大题。
    \begin{secondlayer}
        \item[2] 这是第二小题。
    \end{secondlayer}
\end{firstlayer}
这是枚举列表环境enumerate的变种。
\begin{enumerate}
    \item 我是第一项。
    \item 我是第二项。
\end{enumerate}
  1. 我是第一项。
  2. 我是第二项。
item后中括号添加参数可以定义它的序号。与此类似的环境还有itemize点状列表和description描述型列表。\newenvironment将定义一个新的环境,\renewcommand将重新定义一个命令。

重新定义证明的题头。在导言区添加下述命令即可。

\renewcommand{\proofname}{\textbf{证明}}

\textbf用于加粗字体,\textit可以斜向字体。但后者在正文中一般使用\emph命令。

还可以使用下面的命令定义解的题头,输入\sol即可使用。

\providecommand{\sol}{\textbf{解}.}
\providecommand用于定义新的命令。

3.4.6 最后,如果需要你展示这些内容,就可以使用 Marp 插件,基于之前的 .md 文件生成 PPT 了。

点击右上角的Marp Commands,选择Toggle Marp preview for current Markdown,以使用 Marp 插件。

使用#添加标题,使用$$嵌入行间公式,使用**加粗字体。(拓展:*为斜体)

再次点击右上角的 Marp 命令,选择Export slide deck选择 .pptx 格式,导出。发现需要安装 Google Chrome,安装完后重启一下 VS Code,再进行上步操作就可以了。

提一句,Marp 中使用---分隔幻灯片。这样我们的幻灯片就大功告成了!我觉得这也是 Marp 作为一个 Mardown 到 PPT 转换器的重要用途之一。

testAssignment.md [预览]
---
marp: true
---

# 问题 2

简单图 $G$ 中,如果 $m>\frac{1}{2}(n-1)(n-2)$,证明 $G$ 不存在孤立节点。

**证明:** 若不然,则有一孤立点 $v$,子图 $G'=G-v$ 的边数

$$
%ls
    \left\lvert E(G')\right\rvert = \left\lvert E(G)\right\rvert = m>\frac{1}{2}(n-1)(n-2) 
$$

---

然而,$G'$ 边数最多的情况是完全图 $K_{n-1}$,也就是
$$
%lss
    \left\lvert E(G')\right\rvert \leq \frac{1}{2}(n-1)(n-2)
$$

这与第一个式子矛盾。

由于当孤立节点数不止一个时,第二个式子依然成立。所以不存在孤立节点。

3.5 使用 Overleaf 在线与本地化编辑 \(\rm \LaTeX\) 文档

账号信息需要打码。

3.5.1 Overleaf 是一款易用、在线、协同合作的 \( \rm \LaTeX \) 编辑器。使用邮箱注册账号,然后登录。将之前的文件使用 zip 文件打包(右键发送到压缩(zipped)文件夹)。之后回到网页,Create First Project创建一个新的项目,上传之前的 .zip 文件。

你会发现编译错误,提示缺失字体。这是因为 Overleaf 上的字体系统是不同的,我们只需要把CJK环境参数song改为gbsn,点击重新编译即可编译成功。(字体也变得更细了一点呢)

\begin{CJK}{utf}{gbsn}

3.5.2 为了能够本地双向同步,这一步就要花一些时间了,毕竟希望免费获得这项功能嘛。

按下左上角的返回主菜单,在右上角的账户菜单里,找到用户设置,你会发现使用Dropbox整合需要升级至会员,点进去再看需要每个月支付 15 美金,这有点小贵。

但是这没关系,Overleaf 推出了一项传销(划掉)营销计划,在上方的Upgrade按钮,拉至最下方,点击Unlock premium features进入 Overleaf Bonus Reward Programme Overleaf 额外奖励计划(或者是直接点击这个链接)。这项计划拉到下面,发现会有邀请码,你会发现,只要有 6 个邮箱通过上方的邀请链接(必须是这个邀请链接)注册自己的账号,就可以永久免费获得对应的功能!

所以,你可以自己注册 6 个邮箱,然后进入这个链接注册就好了嘛,够 6 个就 OK,毕竟这么好的机会怎么能不用呢。最后解锁完毕后刷新这个页面会有提示。回到账户页面与 Dropbox 账户绑定就 OK。(Dropbox 需要翻墙才可以访问)

3.5.3 回到原项目,在菜单中再次在同步点击Dropbox,会提示你绑定账号,按照流程进行,完成后会提示你已经同步到对应的云文件夹。

3.5.4 前往官网下载 Dropbox 并安装,使用对应的账号登录,可以设置自己需要存储文件的位置。之后就可以看到本地云端的文件了。更改本地文件,Overleaf 端自动同步,是不是方便多了;更改 Overleaf 文件,返回菜单再进入会强制刷新 Dropbox 文件,本地也会随之改变,还是很方便的。

当然由于字体的不同,会出现一些问题,本地需要使用 Mik\(\rm \TeX\) 安装cjk-fonts宏包才可以使用gbsn字体。

3.5.5 Overleaf 平台更加适合一些大众审阅者共享使用,方法就是点击右上角共享按钮,启用通过链接分享功能,或者是通过 Overleaf 账号实时共享项目。

3.6 使用 git 版本控制

标准化的工程制作流程很大程度上依赖于 git 版本控制,在维护大型项目时这种必要性会更加凸出。VS Code 便捷的操作界面很大程度地减少了 git 的操作难度。

3.6.1 点击 VS Code 的左侧边栏的源代码管理按钮,软件提示需要安装 git 软件,点击链接。在git 官网点击Download for Windows按钮下载软件。下载完成后,基本上按照流程下一步就可以,中间能需要更改默认的编辑器为 VS Code。

3.6.2 安装完成后重启 VS Code。如果有现有的存储库(repository)就可以直接复制其 Github 页面Code下面的链接至输入栏,选择存储库的位置就可以克隆存储库。克隆完成后可以打开。

3.6.3 修改完成后,我们进行最基本的操作,提交并同步更改。由于是第一次进行提交,需要设置用户名和电邮。点击下侧的❌⚠按钮打开下边栏,选择终端启动 VS Code 自带的终端。替换name为自己的 Github 用户名,email为自己的注册电邮,然后输入下面两行设定全局信息。

git config --global user.name "name"
git config --global user.email "email"

之后点击按钮生成一次提交(commit),输入该次提交的摘要,按Enter提交。之后再按下🔄进行同步。这时会提示输入 Github 的账号和密码,完成后就结束提交了。