Vim Latex 的使用和配置技巧 (二)

在这篇文章里, 我将继续介绍一下我用 vim 编辑 Latex的技巧, 以及一些相关的配置.

在上一篇文章里, 我简单地介绍了vim的安装, latex-suite和vimtex插件的安装, 以及latex-suite中常用的命令. 上篇文章的链接是:

Vim Latex 的使用和配置技巧 (一)

在这一篇文章里, 我将继续介绍一下latex-suite的其他进阶设置.

5. Latex-Suit 的宏命令(二)

5.1 LaTeX的编译

假如我现在编译好了一个tex文档, 文件名是testLaTeX.tex, 如下:


% 导言区

\documentclass[a4paper]{article}

\usepackage{ams math}

% 文档区

\begin{document}

% 正文开始

This is a \LaTeX file.

\end{document}

编译好LaTeX文档之后, 我们不必在别的编译器里编译文档, 可以考虑下面几种办法:

5.1.1 用vim自带的命令行

我们知道, 在Terminal里, 用


pdflatex testLaTeX.tex

就可以编译文档. 结果如下:

在vim里, 我们可以用它自带的命令行来运行: ! + shell 命令. 比如, 在vim里, 我们可以用


!pdflatex %

来编译当前文档. 其中, %代表当前文档名. 结果如下:

如何打开编译出来的pdf文档呢? 可以用:


!open %:r.pdf

这样, 就可以用默认的pdf浏览器来打开你的pdf文档了. 当然, 也可以给这两个命令添加一个快捷方式. 比如, 在~/.vim/ftplugin/tex.vim文件里, 添加:


imap <F2> <ESC>:w<CR>:!pdflatex  % && open %:r.pdf<CR><CR>

nmap <F2> <ESC>:w<CR>:!pdflatex % && open %:r.pdf<CR><CR>

重新打开tex文件, 当你再按一下<F2>键, 就可以编译+打开文档了. 在这里, 我们解析一下这一行代码的含义.

  • imapnmap是定义映射的命令. 开头的i代表insert模式的映射, n代表normal模式下的映射. 如果想定义一个对于所有模式的映射, 可以直接用map来定义.

  • <F2>: 是映射的快捷键.

  • <ESC>:w<CR>: 退出编辑模式, 并保存.

  • :!pdflatex %: 用pdflatex编译该文件.

  • open %:r.pdf<CR><CR>打开编译出来的pdf文件.

  • &&: 命令的连接.

  • ~/.vim/ftplugin/tex.vim: 这是tex文件的local配置文件, 如果没有, 可以自己创建.

5.1.2 LaTeX-suite的编译

当然, LaTeX-suite自带一些编译文档的命令. 默认情况下, 在normal模式下,

  • \ll: 编译文档

  • \lv: 查看文档

  • \ls: 查看文档, 并跳到当前光标所在的位置.

如果lv不管用, 可能需要改一下pdf浏览器的设置. 比如, 在MacOS中, 我用的是skim. 安装Skim之后, 在~/.vim/ftplugin/tex.vim中, 我们加入下面一行:


let g:Tex_ViewRule_pdf = 'Skim'

就可以用Skim打开对应的pdf文档. 至于Skim的安装, 可以用brew命令:


brew cask install skim

另外多说一句, 有些时候, 我们不光需要用pdflatex编译, 也需要用bibtex编译. 这时, 我们可以通过定义


let g:Tex_MultipleCompileFormats='pdf,bib,pdf,pdf'

这样一来, 按一下\ll, 就可以以pdflatex, BibTeX, pdflatex’, ‘pdflatex的顺序, 一下子编译好文档.

在我自己的tex.vim文件里, 我还有下面一行自定义的命令:


imap <C-b> <ESC><ESC>:w<CR>\ll:only<CR>\ls

nmap <C-b> <ESC>:w<CR>\ll:only<CR>\ls

这样一来, 用Ctrl+b, 就可以保存文档、编译文档并查看pdf文件.

5.1.3 LaTeX project的编译

在LaTeX project中, 我们可能会有很多源文件, 比如:


thesis/

    main.tex

    abstract.tex

    intro/

        intro.tex

        figures/

            fig1.eps

            fig2.eps

    chapter1/

        chap1.tex

        figures/

            fig1.eps

    conclusion/

        conclusion.tex

        figures/

在这个文件夹里, main.tex是主要文件:


% file: main.tex

\documentclass{report}

\begin{document}

\input{abstract.tex}

\input{intro/intro.tex}

\input{chapter1/chap1.tex}

\input{conclusion/conclusion.tex}

\end{document}

这个时候, 在main.tex所在的文件夹里, 创建一个空文件: main.tex.latexmain. 这样一来, 在main.tex相关的文件里, 用\ll会自动找到main.tex文件, 并编译.

5.2 Alt 命令

5.2.1 添加特殊字体

tex中, 我们经常会需要不同的字体. 比如\mathbb{R}代表实数域, \mathcal{F}代表sigma-域等等. 这时, 我们可以用LaTeX-suite中的Alt命令来做:


R<Alt-B>  --> \mathbf{R},  # 粗体

F<Alt-C> --> \mathcal{F}. # 花体

我们可以自己定义这个命令. 比如说, 我们想定义\mathbb的相关命令, 就可以在~/.vim/ftplugin/tex.vim中, 添加下面这个函数:


" Tex_Mathbb:

function! Tex_Mathbb()

    return "\<Left>\\mathbb{\<Right>}"

endfunction

imap <A-x> <C-r>=Tex_Mathbb()<CR>

这样一来, 我们就可以:


R<Alt-x> -> \mathbb{R}

5.2.2 添加括号

LaTeX中的大号的括号有两种模式, 一个是用\left( \frac{a}{b} \right), 另一种是\B{b}igl( \frac{a}{b} \B{b}igr). 这里, 我想做到下面这种效果:


( + <Alt-g> --> \bigl( 光标 \bigr) <++>

怎么可以做到这一点呢?

可以定义如下的vim函数:


" Map <A-g> as \bigl( \bigr)

function! Tex_bigLR()

let line = getline(line("."))

let char = line[col(".")-2]

let previous = line[col(".")-3]

let matchedbrackets = '()[]{}|?'

if char =~ '(\|\[\|{\||\|?'

let add = ''

if char =~ '{'

let add = "\\"

endif

let rhs = matchstr(matchedbrackets, char.'\zs.\ze')

        if char =~ '|'

            let add = '\'

            let char='lvert'

            let rhs='rvert'

        endif

        if char =~ '?'

            let add = '\'

            let char='lVert'

            let rhs='rVert'

        endif

return "\<BS>".IMAP_PutTextWithMovement('\bigl'.add.char.' <++> \bigr'.add.rhs.'<++>')

    else

        return ''

    endif

endfunction " }}}

"定义映射

inoremap <silent> <Plug>Tex_bigLR      <C-r>=Tex_bigLR()<CR>

imap <A-g> <Plug>Tex_bigLR

这样一来,


( + <Alt-g> --> \bigl( 光标 \bigr) <++>

[ + <Alt-g> --> \bigl[ 光标 \bigr] <++>

{ + <Alt-g> --> \bigl\{ 光标 \bigr\} <++>

| + <Alt-g> --> \bigl\lvert \bigr\rvert<++>

? + <Alt-g> --> \bigl\lVert 光标 \bigr\rVert <++>

<++>就像latex-suite的其他命令一样, 再用<C-j>就可以跳出括号外.

至于\Big, \bigg\Bigg, 可以类似地定义.


相关文章:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342