之前摘录了一系列 LaTeX 的笔记,主要目的是想重温微积分并好好记录下笔记,不想把多年前的知识丢了。
这里有两篇比利时鲁汶大学学生写的文章,讲述如何用 vim 快速记录数学笔记以及绘图:How I’m able to take notes in mathematics lectures using LaTeX and Vim、How I draw figures for my mathematical lecture notes using Inkscape,其中第二篇综合利用了 python 脚本、开源软件、vim 配置,是典型的利用计算机技术解决问题和提高效率的案例,这种处理问题的思路非常值得学习。
上边第一篇文章的中文版:在数学课上用 LaTeX + Vim 运笔如飞地做笔记。
速记数学笔记
速记主要是采用了两个插件:vimtex、ultisnips,vimtex 用来将 latex 语法高亮,ultisnips 用来提供代码片断。
vimtex
vimtex 不仅可以高亮代码,同时还可以对一些符号进行隐藏和替换,譬如,隐藏公式符号 \[
\]
$
、替换 \bigcup
为 ∩
等,以给予用户较好的编写体验。下边是简单的配置项:
1
2
3
4
5
6
7
8
Plugin 'lervag/vimtex'
let g:tex_flavor='latex'
let g:vimtex_view_method='zathura'
let g:vimtex_quickfix_mode=0
# 设置隐藏内容
set conceallevel=1
let g:tex_conceal='abdmg'
它还支持一些简单命令:\ll
编译文件,\lc
清理辅助文件等。
在写中文时,要注意调整引擎为 xelatex,否则不能完成编译:
1
2
%! TEX program = pdflatex
%! TEX program = xelatex
更多的帮助文档参考:the documentation,或者在 vim 中使用帮助::h vimtex
。
ultisnips
ultisnips 号称是 vim 下的终级片断解决方案,其安装需要 vim 支持 python3,是否支持可以用:vim --version
查看。
ultisnips 本身不提供代码片断,因此需要结合其它提供片断的插件(honza/vim-snippets)一起使用,快速的配置如下:
1
2
3
4
5
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
如果是出于通用目的使用 ultisnips,以上配置就够了,但有时候想自定义片断,那就需要遵循一定的语法,其基本形式如下:
1
2
3
snippet KEYWORD "some description" <options>
[snippet body...]
endsnippet
三个条件 KEYWORD + options + UltiSnipsExpandTrigger,一起决定了片断的展开。
UltiSnipsExpandTrigger 不用多说,是触发片断展开的按键,按个人喜好设定就可以。KEYWORD 则表示片断的名字,键入片断名,插件将其替换为片断体。
options 是片断的触发选项:
- b,行首触发
- i,词中展开
- w,单词边界
- A,自动展开
- …
snippet body 中也有很多功能点:
普通文本替换
1 2 3 4 5
snippet sign "Signature" Yours sincerely, Gilles Castel endsnippet
执行命令,``
1 2 3
snippet today "Date" `date +%F` endsnippet
使用 python 语法,`!p…`
snippet box "Box" `!p snip.rv = '┌' + '─' * (len(t[1]) + 2) + '┐'` │ $1 │ `!p snip.rv = '└' + '─' * (len(t[1]) + 2) + '┘'` $0 endsnippet
占位符,$1、$2 … $0
1 2 3 4 5
snippet beg "begin{} / end{}" bA \begin{$1} $0 \end{$1} endsnippet
关于片断文件存放的位置默认在:~/.vim/UltiSnips/,通过配置全局变量进行调整:
1
2
3
4
## 默认位置
let g:UltiSnipsSnippetDirectories=["UltiSnips"]
## 增加自定义位置
let g:UltiSnipsSnippetDirectories=["UltiSnips", "mycoolsnippets"]
最后附上一这位学生的 latex 片断:tex.snippets。
快速绘图
绘图这篇文章主要是想提下文中用到的一款开源矢量图绘制软件:Inkscape,三大平台都有,它能够生成 latex 文件,方便在 vim + latex 场景下使用。