
仅用于本人留档收藏,非转载。
本文由 简悦 SimpRead 转码, 原文地址 zhuanlan.zhihu.com
文将介绍 Windows 10 平台下如何用 Sublime 来编辑 LaTeX 文件的方法.
下面我首先介绍下我与 Sublime Text 的邂逅.
首次接触 Sublime Text 是由于朋友向我要李代数的文献, 并没有指明要哪方面的文献, 因此我并不知道他想要什么, 于是我只能使用 Total Commander 将我的文献库的文献目录提炼出来, 但是还是希望给人家的是一个完整的列表, 清楚明白. 从 Total Commander 提炼出来的目录大致如下
1 | 229B Lie Groups and Lie Algebras_2012-Andy Soffer.pdf |
于是有了一个需求, 能否在每一行前面都加上一个序号, 变成一个列表, 清楚地展示出来, 也就是希望变成如下形式
也便于他好找. 但是使用 Markdown 如果一项一项地添加, 这显然是累傻小子, 于是便期望能批出来, 快捷地实现这个功能, 于是搜索了下, 在 Sublime Text 找到了完美的解决方案.
1 | Ctrl+A > Ctrl+Shift+L > Home |
然后在每输入 1. 空格, 我知道, 这个使用 Markdown 的语法就能渲染成我向要的效果. 这是 Sublime Text 给我的第一次惊艳.
此时过来很就, 我也没有在意这玩意, 说实话, 我用 TexWorks 已经算是个中级用户, 因此在这个舒适区已经待习惯了, 自然没有做出改变的动力, 直到有一天我打开某大佬的 27000 多行的 LaTeX 源文件, 整个电脑卡得不要不要的, 而 Sublime Text 打开几乎是秒开, 这次让我再次对其刮目相看, 心中种下了也许 Sublime Text 是好的这一个一个概念.
直到我看到网上的神文 <<世界上最好的编辑器 Vim 1700 多页数学笔记是如何实时完成的>>, 首次知道有代码片段这个种东西, 知道在课堂上做笔记还能做到与上课老师同步, 这使我不得不做出一丝的改变, 不过该文的作者是使用 Linux 下的 Vim 来完成的, Vim 的入门实在是不那么友好, 因此我就退到了 Sublime Text, 经历了若干时间的调教, 现在看来 Sublime Text 的确高效.
同时 Sublime Text 也展示了另外一些惊艳之处, 比如在
1 | \begin{equation} |
中, 我想同时在 equation 后面加个星号, 而 Sublime Text 有 Ctrl + d 这样的快捷键来实现, 这些都时我经验的, 同时由于也初步学会了代码片段这种玩意, 因此自然时效率提高了不少.
本文是记录我折腾 Sublime Text 的过程, 同时也深感独学而无友, 则孤陋而寡闻, 因此本文读者有好的提高效率更好的手段, 方法和技巧, 也欢迎赐教. 求教邮箱: mathth@163.com.
| 软件 | 官网 |
|---|---|
| TeX Live | https://tug.org/texlive/ |
| MiKTeX | https://miktex.org/ |
| Sublime Text 4 或者 Sublime Text 3 | https://www.sublimetext.com/ |
| SumatraPDF | https://www.sumatrapdfreader.org/free-pdf-reader |
这里有两套选择方案, 一套是
1 | TeX Live+Sublime Text+SumatraPDF |
另一套是
1 | MiKTeX+Sublime Text+SumatraPDF |
各有优缺点, 在此不详说.
到上表中 TeX Live 的下载链接下载 TeX Live 的镜像文件,然后使用解压工具解压或者用虚拟光驱直接加载, 在文件夹中寻找到 install-tl-advanced.bat 批处理文件, 管理员权限运行 install-tl-advanced.bat 进行安装.
注意, 为了后期使用方便, 最好不要使用默认路径, 重新选择安装路径进行设置好后, 点击安装 TeXLive, 大约 20 分钟左右能安装好, 安装时长跟硬件有关. 详细的安装过程在此不表, 网络上很多教程, 几乎没有什么技术含量.
此处我的安装路径为
1 | D:\texlive |
下面我们以安装 Sublime Text 4 为例.
首次安装 Sublime Text 后, 其界面显示未必如我们所愿, 因此有必要对其进行一定基础的配置, 比如为了保护我们的视力, 我们通常不要让背景的颜色太过明亮, 同时字号也不应该太小, 这些都时我们可以自定义的.
具体的配置方法是在 Sublime Text 的菜单栏中按如下路径
1 | Preferences -> Settings |
然后就可以打开 Sublime Text 的配置界面,
边部分是系统默认的, 右边是你可以自己自定义的, 比如我就进行了部分修改.
1 | { |
当然这些设置的修改比较复杂, 如果你想知道哪些设定需要修改, 并且如何修改, 那么办法当然是去读左边这 859 行的文本说明.
这一步很关键, 如果没有将 texlive, SumatraPDF 的安装路径添加到到环境变量中, 后续编译的时候可能导致计算机找不到对应的工具而出错, 大致的原理相当于生活中给每家每户安装一个门牌号码, 需要的时候按门牌号码去寻找.
添加环境变量的方法如下.
进入 TeXlive 的安装路径, 找到 bin 文件夹下 win32 文件夹所在的路径, 然后将 win32 文件夹所在的路径添加到系统的环境变量中, 例如, 我的 texlive 的 bin 文件夹所在的路径是
1 | D:\texlive\2022\bin\win32 |
我的 SumatraPDF.exe 文件的安装路径为
1 | D:\Software_Install\SumatraPDF |
将这两个路径添加到系统环境变量中去.
具体的添加方法是
1 | This PC ->Properties-> Adanced system settings-> Adanced->Environment Variable |
点击 New 按钮, 将上面两个路径复制添加进去, 然后点击 OK 就可以了, 如下图.
4. 为 Sublime Text 安装插件
Package Control 是 Sublime Text 的包管理工具, 后期的各种插件也就是软件包的安装与卸载都是通过 Package Control 来管理的, 因此很重要.
注: 一个没有插件来扩展其功能的编辑器就像一只被困在笼子里的小鸟或者野兽, 没有自由也没有其野性和凶猛, 因此使用插件来扩展其功能是必然的选择.
安装 Sublime Text 的包管理工具 Package Control 通常由三种方法.
方法 1
在 Sublime Text 这样的高版本里, 直接打开 Sublime Text , 然后按快捷键 Ctrl+Shift+P, 在下图的输入框种输入 install Package Control, 键入 Enter 就开始安装了.
装完成后如果得到如下提示界面
则表明安装成功.
方法 2
如果方法 1 安装失败的话, 可以对 Package Control 进行本地安装.
方法 3
方法 3 是针对 Sublime Text 的老版本, 比如 Sublime Text 3 , 具体办法如下
1 | import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by) |
需要注意的是高版本如 Sublime Text 4 不需要复制这段代码来进行安装的.
回车安装,等待几秒钟就安装好了, 安装成功后的提示界面如下
LaTeXTools Plugin version 3.14.1 (2017-06-01)
Thank you for installing the LaTeXTools plugin!
To learn about the features of this plugin, go to the Github page:
https://github.com/SublimeText/LaTeXTools
and scroll down to the README file. Actually, the Markdown source of that file is in the plugin directory, which you can open using “Browse Packages…” in Sublime Text.
You can also check out Marciano’s blog at
http://tekonomist.wordpress.com
Happy TeXing!
Ian Bacher, Marciano Siniscalchi, and Richard Stein
安装好 LaTeXTools 之后,继续在 Sublime Text 中的菜单栏依次点击
1 | Preferences ->Package Settings -> LaTeXTools -> Settings-User |
进入用户设置界面, 为了快速找到相应的代码, 可使用快捷键 Ctrl +f 进行搜索, 在搜索框中输入关键词 windows , 然后按 Enter 键进入, 可以通过搜索的方式进行寻找, 找到如下代码片段
1 | "windows": { |
你应该能猜到 // 是注释的意思, 因此真正有用的代码是哪些行也能识别出来, 将其修改成如下
1 | "windows": { |
注意观察上面更改的部分, 分别是:
需要注意的是, Windows 的路径直接复制过来是正确的, Sublime Text 的路径是用 / 或者两个反斜线 \backslash \backslash 表示, 这个路径的表示法是 Linux 等操作系统的表示法, 不是微软的.
注意通常在此步, 我们还需要将
1 | "builder": "traditional", |
中的参数
1 | "builder": "simple", |
经过如上设置, Sublime Text 与 TeXLive ,SumatraPDF 就实现了关联,随便找个 tex 文件,Ctrl+B 就可以编译了.
下面我们用如下文件进行测试
1 | %\documentclass[UTF8, twocolumn]{ctexart} |
使用快捷键 Ctrl+B 编译, 我们可得
还不是很舒服的是, 我们双击 SumatraPDF 的 PDF 文件不能回到 Sublime Text 的源文件, 也就是 SumatraPDF 还不能进行反向搜寻, 这对于 LaTeX 的查错是非常不方便的, 因此下面我们来开启 SumatraPDF 的反向搜索功能.
方法 1. 在已经将 SumatraPDF 添加到系统环境变量的情况下, 使用 Win+R 后,输入 cmd,执行以下命令
1 | sumatrapdf.exe -inverse-search "\" D:\Software_Install\Sublime Text\sublime_text.exe\" \"%f:%l\" |
注意上面路径
1 | D:\Software_Install\Sublime Text\sublime_text.exe\ |
实质是我的 sublime tex 安装目录下 sublime_text.exe 的路径, 因此在此步配置时你需要根据自己的 Sublime Text 安装路径进行适当的调整.
方法 2 : 当然, 还可以在 SumatraPDF 中点 设置 - 选项,打开如下选项
事实上, 从上面的红色方框中可见, 笔者将 Vim 设置为作为 SumatraPDF 反向搜索的目标文件了, 设置的方法完全一样, 只需要将第一个双引号之间的路径改为 sublime_text.exe 的安装路径即可, 也就是将整个方框中的内容改成如下内容
1 | "D:\Software_Install\Sublime Text\sublime_text.exe" "%f:%l" |
这样在 SumatraPDF 中双击 PDF 显示的相应位置就可以跳转到 Sublime Text 编辑的 LaTeX 源代码处, 实现反向搜索,
注意:如果在 SumatraPDF 点击 设置 -> 选项 之后,找不到红色框框这个地方,这是 SumatraPDF 没有开启 TeX 增强功能造成的,这时候进入高级设置, 即 settings->Advanced options,然后找到如下代码
1 | EnableTeXEnhancements = false |
将 EnableTeXEnhancements 参数 false 改为 true, 如下所示
1 | EnableTeXEnhancements = true |
这样, 重新启动 SumatraPDF, 逆向搜索命令行, 也就时红色的方框就会出现, 再按照前面的方法配置即可.
我不清楚这个现象是仅我自己出现还是普遍现象, 这个现象很奇怪, 具体的方法是去配置 LaTeXTools. 在 Sublime text 菜单栏下
1 | Preferences ->Package Settings -> LaTeXTools -> Settings-User |
用 Ctrl +f 搜索 windows 找到如下代码
1 | "windows": { |
其中第 10 至 12 行就是这个问题的关键, 我们需要将第 12 行 sublime_executable 后面的双引号后面填入 subl.exe 的路径, 具体修改结果如下, 方法前面已经讲过, 不在赘述.
1 | "windows": { |
只需要注意 subl.exe 与 Sublime_text.exe 在同一个安装路径下, 如下图
需要注意的是, sublime text 的快捷键是非常丰富的, 如果能够熟练地使用, 其编辑效率是会非常高的, 其操作模式已经非常接近 vim, 虽然以我了解来看它还不是 vim 的对手. 试问在编辑器领域, 又有几个编辑器能与 Vim 或 emacs 一战.
不过话又说回来, vim 或 emacs 的学习门槛太高了, 普通不以计算机技术谋生是否有必要, 本人不得而知, 反正笔者起起落落好多年都每学会, 嗯, 核心还是没有认真学.
不过话又说回来, 留两个 vim 或者 emacs 这样得美丽的背影岂不是也挺好, 这种深宅大院, 能量太低的话, 进去空有公主的梦, 丫环的命, 悲惨世界.
下面我们分类来介绍 sublime text 的快捷键.
| win/linux 快捷键 | 功能描述 | 注释或评论 |
|---|---|---|
| ctrl + N | 新建文件 | |
| ctrl + O | 打开文件 | |
| ctrl + S | 保存文件 | |
| ctrl + shift + S | 另存文件 | |
| --- | 保存全部文件 | |
| Ctrl + W | 关闭当前文件 |
| win/linux 快捷键 | 功能描述 | 注释或评论 |
|---|---|---|
| ctrl + A | 全选 | |
| ctrl + B | 编译 | |
| ctrl + shift+ B | 可选引擎编译 | 也就是如果要在多个引擎间进行选择使用这个快捷键编译 |
| ctrl + C | 复制 | |
| ctrl + X | 剪切 | |
| ctrl + V | 粘贴 | |
| ctrl + / | 注释 | 一次是注释, 在此输入 ctrl + / 是取消注释 |
| ctrl + shift + / | 块注释 | 可能是快捷键冲突, 可用 shift+↑或 shift + ↓ 结合 Ctrl+L 代替 |
| ctrl + Z | 撤销 | |
| ctrl + Y | 恢复撤销 | |
| Ctrl + Shift + Enter | 在当前行前插入新行 | |
| Ctrl + Enter | 在当前行后插入新行 | 这个功能与 Typora 用法一致, 挺好 |
| Ctrl + Shift + K | 删除行 | 删除光标所在的当前行, 这个功能显然比 word 强多了 |
| Ctrl + Shift + D | 复制 (多) 行 | 写矩阵时, 这玩意得效率就出来了 |
| ctrl + J | 合并 (多) 行 | |
| Ctrl + K + K | 从光标处删至除行尾 | |
| 从光标处删除至行首 | ||
| ctrl + K + U | 改为大写 | |
| ctrl + K + L | 改为小写 | |
| Ctrl + Shift + V | 粘贴并自动缩进 | |
| Ctrl + K + V | 从历史中选择粘贴 | |
| tab | 向右缩进 | |
| shift + tab | 向左缩进 | |
| Ctrl + shift + ↑/↓ | 交换 2 行位置 | |
| Ctrl + shift + ] | 展开标签 | 这个功能实现代码折叠. |
| Ctrl + shift + [ | 折叠关闭标签 | |
| Ctrl + K + J | 展开全部标签 | |
| Ctrl + K + T | 折叠标签属性 | |
| Ctrl + K + n | 折叠第 n 级标签 |
| win/linux 快捷键 | 功能描述 | 注释或评论 |
|---|---|---|
| ctrl + U | 软撤销 (可撤销光标移动) | |
| ctrl + shift + U | 软重做 (可重做光标移动) | |
| ctrl + L | 选择行 | 重复按下时将从此行连续向下选择多行 |
| Ctrl + D | 选择词 | 重复按下可多次向下选择相同的词 |
| shift + ↑/↓ | 向上 / 下选中多行。 | 重复 shift + ↑ 就是从光标出向上选择多行, 其他类似 |
| Shift + ←/→ | 向左 / 右选中文本。 | |
| ctrl + shift + M | 扩展选区至对应的括号 | |
| ctrl + shift + A | 扩展选区至对应的标签 | |
| ctrl + shift + Space | 扩展选区至对应的作用域 | |
| ctrl + ↑/↓ | 扩展选区至文件开头 / 结尾。 | |
| Ctrl + Shift + L | 将选区转换成多个单行选区 | |
| Ctrl + Shift + ←/→ | 向左 / 右单位性地选中文本。 | |
| ctrl + - | 光标跳回上一个位置 | |
| ctrl + shift + - | 光标恢复位置 | |
| Ctrl + ←/→ | 向左单位性地快速移动光标 | |
| Ctrl + Alt + ↑/↓ | 向上 / 下添加多行光标 | 可实现多行同时编辑修改等, 相当棒 |
| win/linux 快捷键 | 功能描述 | 注释或评论 |
|---|---|---|
| ctrl + f | 查找 | |
| chrl + h | 查找并替换 | |
| --- | 查找下一个符合当前所选的内容 | |
| --- | 查找所有符合当前选择的内容进行多重编辑 | |
| ctrl + shift + f | 在所有打开的文件中进行查找 |
| win/linux 快捷键 | 功能描述 | 注释或评论 |
|---|---|---|
| Ctrl + Shift + N | 打开一个新的 sublime 窗口 | |
| Ctrl + Shift + W | 关闭窗口 | |
| F11 | 全屏 | |
| Shift+F11 | 全屏免打扰模式,只编辑当前文件 | |
| Alt + Shift + [1,2,3,4,5] | 拆分窗口为:单列、双列、三列、四列、网格、双行、三行 | |
| ctrl + [1,2,3,4] | 焦点移动到相应的组 (分屏编号) | |
| ctrl + shift + [1,2,3,4] | 将当前文件移动到相应的组 (分屏编号) |
| win/linux 快捷键 | 功能描述 | 注释或评论 |
|---|---|---|
| alt + [1,2,3,4] | 选择相应的标签页 | |
| ctrl + tab | 向后切换窗口内打开的文件 | |
| ctrl + shift + tab | 向后切换窗口内打开的文件 | |
| ctrl + P | 跳转到一切 | |
| --- | 前往文件 | |
| --- | 前往项目 | |
| ctrl + R | 前往符号 | |
| ctrl + shift + P | 前往符号项目内符号 | |
| ctrl + G | 前往行 | 跳转到 ... 行, 比如 ctrl + G+100 就跳转到第 100 行 |
| Alt + G | 后退 | |
| Alt + shift + G | 前进 | |
| Ctrl + K + B | 开关侧栏 | |
| ctrl + ~ | 打开控制台 | |
| Esc | 退出 | 退出光标多行选择,搜索框,命令框等 |
| ctrl + M | 跳转至对应的括号 |
| 插件名 | 用途 | 注释或评论 |
|---|---|---|
| Package Control | sublim 的包管理工具 | |
| latextools | LaTeX 自动补全工具 | |
| latex-cwl |
LaTeX-cwl 是 LaTeX 代码自动补全工具,下载方法也是 Ctrl+Shift+P→install package→LaTeX-cwl 回车即可下载安装.
latextools 和 latex-cwl 插件有着相当丰富的功能, 要熟悉或者自定义的话, 需要熟悉它们的功能, 这只能去阅读它们的网站了.
Sublime Text 的自动补全是个复杂的现象, 除了其本身拥有的快捷键之外和进行全局定义的快捷键之外, 一些插件也拥有丰富的自动补全功能, 而且这些自动补全还可以自定义进行扩展.
下面我们以 LaTeXTools 的自动补全为例子来看看如果自动补全数学公式等.
LaTeXTools 插件为常规文本和数学文本提供了相当丰富的自动补全功能,这些自动补全都以 Tab 键作为触发。你可以在 LaTeXTools 插件的安装目录里面看到LaTeX.sublime-completions 和 LaTeX math.sublime-completions 看其都定义了哪些自动补全的快捷键或者代码片段.
这两个文件分别定义了常规文本模式下和数学模式下的自动补全,它们都以 Tab 键作为触发。
详细的用法可以阅读
1 | https://latextools.readthedocs.io/en/latest |
我们可以仿照 LaTeX.sublime-completions 的模式,添加自己所需要的自动补全。如添加以下一行
1 | { "trigger": "befr", "contents": "\\begin{frame}{$1}\n$0\n\\end{frame}"} |
就可以实现在 Sublime Text 中输入 befr 后按 Tab 就自动扩展为后面的内容了。注意:$ 后数字越大,光标先出现在那儿,按了 Tab 后光标会按数字降序移动。
此外,Shift+Enter 也为我们提供了一个非常好的功能,那就是当光标所处环境为 itemize、enumerate 时,自动添加\item,而如果只是敲Enter 则仅有为文本编辑器自带的换行功能——即换行加缩进,如果环境为 description,则会添加、item[],这个无疑为列举环境的快速书写提供了很大的便利。
去年曾经有一篇文章叫做 <<世界上最好的编辑器 Vim 1700 多页数学笔记是如何实时完成的>>, 在文章中作者展示了在 Vim 的加持下作者是如何做到课堂上做笔记做到与讲课老师同步的水准, 无他, 唯手熟尔, 作者在 Vim+ LaTeX + Snippets 的匹配下, 结合大量的快捷键, 做到了这个水平, 事实上, sublime 也是可以使用 Snippets 的.
创建代码片段通常有两种办法, 通常的方法是在 Sublime Text 的菜单栏中按如下路径
1 | Tools -> Developer -> New Snipper |
这样就打开了 Sublime Text 的代码片段, 大致的语法结构如下
1 | <snippet> |
此时你可以按照其语法结构来自定义代码片段.
另外一个方法笔记偷懒, 在 Sublime Text 的菜单栏中选择
1 | Preferences->Browse Packages |
这样打开了 Sublime Text 的包文件夹, 此时可以在这个目录下创建一个名叫 usersnippets 的文件夹, 就可以使用 Sublime Text 代码片段的语法来创建代码片段.
下面我们通过一个例子来说明如何创建一些常用的代码片段, 比如我们通常在数学文本中经常要输入如下形式的分段函数.
下面我们通过一个例子来说明如何创建一些常用的代码片段, 比如我们通常在数学文本中经常要输入如下形式的分段函数.
$\begin{equation} f(x)=\left{ \begin{aligned} -1 \quad x<0\ 0 \quad x=0\ 1 \quad x>0\ \end{aligned} \right . \end{equation}$\begin{equation} f(x)=\left{ \begin{aligned} -1 \quad x<0\ 0 \quad x=0\ 1 \quad x>0\ \end{aligned} \right . \end{equation}
其 LaTeX 代码如下,
1 | \begin{equation} |
如果我们每次都需要输入如上这段代码, 显然是很浪费时间的, 比较好的方法是我们创建如下代码片段
1 | <snippet> |
然后将其命名为
1 | bcase.sublime-snippet |
最后将这个文件存储在 usersnippets 文件夹中, 然后在 Sublime Text 的编辑界面输入 bcase +Tab 就可以以自动补全的方式输入代码
1 | \begin{equation} |
稍微修改就能得到你想要的分段模式下的函数.
显然, 只有你愿意, 这里将会有无限的可能.
\include{} 来调用, 但是使用 Sublime Text 编译时 Sublime Text 不会像 TeXworks 那样自动找到子文件, 这时一个好的办法时是使用魔法注释, 在主文件的序言部分加入如下注释1 | %!TEX root = ../book.tex |
这样 Sublime Text 就可以根据路径去加载子文件进行编译了.
注意: 这的 … 是相对路径的写法, 在 LaTeX 中, 文件路径使用相对路径通常比使用绝对路径要方便很多, 因为当你的 LaTeX 文件拷贝到其他电脑上进行编译时, 绝对路径通常通常由于更换了计算机而导致错误, 因此使用相对路径是一个好的选择.
本文在参考了 B 站上一个网名为 交大胖的网页的视频, 作者水平较高, 推荐读者阅读.
同时还参与了不少网络论文, 在此不在一一列举, 整体致谢.