今日体验了一把vim-latex 插件,感觉很棒,然而挑剔的我还是遇到了几个问题:
-
OSX 系统中Alt 键相关的快捷键失效。
-
插件自带的编译快捷键\ll
只能用pdflatex 引擎,并且有编号的时候需要多编译几次,而我通常使用的是xetex 引擎。
问题1 比较容易解决,把用到的Alt 相关快捷键重新绑定到Meta(Option)键上,经过一番Google,参考vim-latex 插件文档 以及sidyll 在stackoverflow 上解决关于alt 的绑定的方法 的灵感,作出解决方案:
.vimrc
1
2
3
4
| imap ¬ <Plug>Tex_LeftRight
imap ∫ <Plug>Tex_MathBF
imap ç <Plug>Tex_MathCal
imap ˆ <Plug>Tex_InsertItemOnThisLine
|
问题2 稍微棘手一点,也绕了一个弯。首先参考了Mass 在tex.stackexchange上的关于设置xelatex的方法 作出如下修改:
.vimrc
1
2
3
4
5
6
7
| function ComplieWithXeTeX()
let oldRule = g:Tex_CompileRule_pdf
let g:Tex_CompileRule_pdf = 'xelatex --synctex=-1 -src-specials -interaction=nonstopmode $*'
call Tex_RunLaTeX()
let g:Tex_CompileRule_pdf = oldRule
endfunction
map <Leader>lx :<C-U>call ComplieWithXeTeX()<CR>
|
通过临时改变Tex_CompileRule_pdf
这个内置参数,来调用所需引擎 。现在,问题似乎解决了,通过lx来使用xelatex,ll启动pdflatex,但是,有编号的时候,比如引用公式,则需要编译多次,不太方便,曾样才能像使用latexmk
这个命令这么方便呢?在Brian 的博客的启发下,得到如下解决办法:
.vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function CompileWithLatexmk()
let targ = expand("%:t")
execute '!latexmk '. targ
call ErrorCheck()
endfunction
function ErrorCheck()
let log = expand("%:r") . "." . "log"
try
silent execute 'vimgrep /^!/ ' . log
copen
catch /^Vim\%((\a\+)\)\=:E480/
endtry
endfunction
map <Leader>lg :<C-U>call CompileWithLatexmk()<CR>
|
加入了错误日志回复,虽然也能用了,但是和原生的插件错误日志显示完全不同,关闭会关闭整个文档。正当一筹莫展之际,灵感一现的我突然想到,如果把第一个方法结合latexmk
,不就完美了?所以最终解决方案如下:
.vimrc
1
2
3
4
5
6
7
8
9
10
11
12
| function ComplieWithXeTeX()
let oldRule = g:Tex_CompileRule_pdf
let g:Tex_CompileRule_pdf = 'latexmk --synctex=-1 -src-specials -interaction=nonstopmode $*'
call Tex_RunLaTeX()
let g:Tex_CompileRule_pdf = oldRule
endfunction
map <Leader>lx :<C-U>call ComplieWithXeTeX()<CR>
function CleanTempFiles()
execute '!latexmk -c'
endfunction
map <Leader>lc :<C-U>call CleanTempFiles()<CR>
|
其实就是把xelatex
换成latexmk
,最后还增加定义了自动清理临时文件的命令。
最后,祭出我的.latexmkrc
,希望能帮到偶然读到的人。