前几天写作业的时候突发奇想,想用传说中的LaTeX写一份作业交上去,正好前几天也被迷一样的Word搞得苦不堪言。
之前收藏过一篇来自外国小哥的文章——
How I'm able to take notes in mathematics lectures using LaTeX and Vimcastel.dev知乎上也有相关的中文介绍:
机器之心:世界上最好的编辑器Vim:1700多页数学笔记是如何实时完成的zhuanlan.zhihu.com就以这篇文章为起点,我在一台Windows电脑上开始了 Vim + LaTeX 的踩坑旅程……
安装LaTeX环境
不要再用CTeX套装了。CTeX 套装是一个LaTeX发行版,里面包含了包括CTeX宏包在内的一套适合中文排版的工具集。它本质上是MiKTex的修改版,但已经很久没有更新过,里面的工具已经过于陈旧。CTeX 宏包是集成了中文支持、字体、版式为一体的一组宏包和文档类的合集。CTeX宏包已经发布到了Tex Live与MiKTeX两大发行版的仓库里,所以不使用CTeX套装也可以享受CTeX宏包带来的便利。这里就请大家直接用MiKTeX或者TeX Live吧!
我用的MiKTeX,整个安装过程还是很顺畅的。安装完后有一个“MiKTeX Console”,它是MiKTeX的控制台,可以手动安装升级宏包、修改镜像地址什么的。
TeX Live 也有类似的 Console。里面“选项”下可以改镜像地址,改成一个中国境内的地址后下载速度就不错了。
题外话:我当时安装MiKTeX的时候它没有把自己的路径加到PATH里
安装配置Vim与Vimtex
Vim官网上有gVim可供下载,当然没有谁会用它提供的那个所谓GUI的…
然后开始学习使用Vim,这里不包教,也不包会…
之后安装Vimtex,如果你初次用Vim,还得安装个vim-plug这样的插件管理器,不麻烦。
~/.vimrc
里也得加入相关的配置
"....
Plug 'lervag/vimtex'
let g:tex_flavor='latex'
" 阅读器相关的配置 包含正反向查找功能 仅供参考
let g:vimtex_view_general_viewer = 'SumatraPDF'
let g:vimtex_view_general_options_latexmk = '-reuse-instance'
let g:vimtex_view_general_options
= '-reuse-instance -forward-search @tex @line @pdf'
. ' -inverse-search "' . exepath(v:progpath)
. ' --servername ' . v:servername
. ' --remote-send "^<C-^>^<C-n^>'
. ':execute ''drop '' . fnameescape(''%f'')^<CR^>'
. ':%l^<CR^>:normal! zzzv^<CR^>'
. ':call remote_foreground('''.v:servername.''')^<CR^>^<CR^>""'
set conceallevel=1
let g:tex_conceal='abdmg'
"...
我的配置是相当简单的,基本和原文保持一致,但有两个不一样的地方。
- 我没有关闭
vimtex_quickfix_mode
。“quickfix mode”是指当编译完成之后,会弹出一个split,告诉你哪里有warning啊,哪里有error啊。如果不是过于追求速度,看看warning并把它们全都消灭掉也不错…… - 我使用了 SumatraPDF 作为PDF阅读器,而非Zathura。(因为Windows上没有Zathura…)当然你也可以使用其它的PDF阅读器,比如说使用Zathura就写
let g:vimtex_view_method='zathura'
:help g:vimtex_view_method
里针对不同的阅读器也有不同的推荐配置。如果使用其它的阅读器,那么具体配置内容请看帮助文档。- 其中包含正向查找和反向查找的相关配置。正向查找是指可以让阅读器中的文档定位至源码中光标对应的位置,反向查找指在源码中定位到阅读器文档中某一点处对应的位置。帮助文档提供的阅读器的推荐配置中包含了正反向查找的相关内容。
安装PDF阅读器
我使用的是SumatraPDF,在Vimtex中相关配置就在上面了。:h vimtex-options
里推荐了不少PDF阅读器并提供了推荐配置。你也可以使用自己喜欢的,但还是建议使用Vimtex推荐的PDF阅读器,毕竟一些实用功能还是需要阅读器的配合。
Windows用户要记得把路径加到PATH里啊
开始写LaTeX文档
从零开始学习LaTeX可以看《The Not So ShortIntroduction to LATEX2》,CTeX小组和社区还翻译了中文版《一份不太简短的LATEX2介绍》。CTAN官方访问困难也可访问中国境内的CTAN镜像站。
下面这个也不错:
一份其实很短的 LaTeX 入门文档
一份其实很短的 LaTeX 入门文档 · 看云
关于中文/CTeX
这里推荐使用CTeX宏包。如果以UTF-8保存,[UTF8]
是一定要加的。
documentclass[UTF8]{ctexart}
begin{document}
你好,world!
end{document}
关于数学公式
数学公式的规则是有那么一点复杂,还好这里有个在线LaTeX公式编辑器可供学习研究。我常用它来看一些不常用的数学记号怎么写(我怎么能记得住所有的数学记号啊)。
http://www.codecogs.com/latex/eqneditor.php
关于使用Vimtex
Vimtex提供了一些默认的 key mappings,可以在:h vimtex-usage
里看到。摘几个我觉得好使的列在下面吧。(比如 vimtex-toc-open可以调出一个大纲列表,方便在不同的section/subsection之间跳转,delim-close可以直接关闭当前的环境/命令,等等。)
⚠️ Vimtex 使用了 filetype 特性,所以相关的命令与缩进规则与只在
*.tex
文件中有效
---------------------------------------------------------------------~
LHS RHS MODE~
---------------------------------------------------------------------~
<localleader>li |<plug>(vimtex-info)| `n`
<localleader>lt |<plug>(vimtex-toc-open)| `n`
<localleader>lT |<plug>(vimtex-toc-toggle)| `n`
<localleader>lv |<plug>(vimtex-view)| `n`
<localleader>ll |<plug>(vimtex-compile)| `n`
<localleader>lo |<plug>(vimtex-compile-output)| `n`
<localleader>lg |<plug>(vimtex-status)| `n`
<localleader>lG |<plug>(vimtex-status-all)| `n`
<localleader>lc |<plug>(vimtex-clean)| `n`
<localleader>lC |<plug>(vimtex-clean-full)| `n`
dse |<plug>(vimtex-env-delete)| `n`
dsc |<plug>(vimtex-cmd-delete)| `n`
cse |<plug>(vimtex-env-change)| `n`
csc |<plug>(vimtex-cmd-change)| `n`
<F7> |<plug>(vimtex-cmd-create)| `nxi`
]] |<plug>(vimtex-delim-close)| `i`
---------------------------------------------------------------------~
科普专区:<localleader>
是一个特殊的字符,区分出插件自定义的mappings 默认是一个反斜杠,也可以使用let maplocalleader
配置自己的<localleader>字符。 比如,执行 vimtex-compile 在Normal模式下敲ll
就可以了
第一次编译
好了,你现在有了一份LaTeX源码,现在可以在Normal模式下敲ll
启动编译了。之后,Vimtex会调用Latexmk来调度不同的程序完成一次完整编译过程。(一般为了生成正确的交叉引用等,需要对源文件进行多次编译。)
这里 MiKTeX 会提醒你:“还没有安装Latexmk呢,需要安装吗?”这里狠狠地点击“Install”就完事了。如果使用的是Windows,Latexmk还会提醒你还没有安装Perl解释器。啥都别说了,乖乖去 http://perl.org下载安装Perl,然后再启动编译一遍吧……
然后继续。这时MiKTeX会提示你这个包要不要装,那个包要不要装,咱当然是一路“Install”。如果你的代码没问题的话,稍等片刻Vimtex就会启动SumatraPDF展示你第一篇LaTeX文档的模样了。如果不幸出了一些错误,Vimtex也会告诉你第几行出现了什么问题(即上面提到的“quickfix”功能)。
还有更方便的功能:
- 每当保存文件的时候,Vimtex(其实是Latexmk)就会自动编译新的文档,SumatraPDF也会自动更新为最新的编译输出。
配置了正反向查找后:
- 在SumatraPDF里双击可以让Vim跳转到对应的LaTeX代码。
- 执行
lv
来让SumatraPDF打开编译出的文档,并跳转到光标当前所在源码处的对应位置。
最后的效果就像这样——
接下来你可以换一个好用又好看的终端。我选择的是 ConEmu+PowerShell,搭配双显示器效果更佳~
题外话:几个我用到的宏包
(我这次用到的宏包估计大部分情况下也会用到吧)
usepackage{graphicx} % 插图片
usepackage{amsmath} % 数学公式拓展
usepackage{float} % 浮动体控制
usepackage{listings} % 插入代码,不过据说 minted 的效果更好一些
其它参考
TeX Live 下载及安装说明
使用 Latexmk 编译 tex 文件