最近在写博客的时候发现对数学公式的支持并不好,于是就想寻找一个解决方案。我本身是一个爱折腾的人,有时尽管有现成的解决方案我有事也不愿意去用。于是多方查找资料,想寻求一个自定义的解决方案,最终把自己的目标定为:使用自己喜爱的文本编辑器Vim写tex代码,能够在Vim中方便的编译tex并生成pdf,当tex文件改变时pdf能够实时做出变化。下面就是我为了达成这个目标所做的一些工作。

  1.目前的文本编辑器大多都支持markdown语法,也都具有对LaTeX公式的支持。那么在现成的文本编辑器中加入LaTex数学公式似乎是一个很简单的问题。下面进行一个试验:我将在本文本编辑器中输入一下一串公式:

$x^n + x^{n-1} + \cdots + x$

  熟悉LaTex的朋友肯定能看出这一串代表什么。看看效果如何 -> $x^n + x^{n-1} + \cdots + x$

  可见本文本编辑器(TinyMCE)能够正确识别LaTex数学公式,那么我最初的愿望也就实现了:在博客中能够随心所欲的书写数学公式。但是我又是爱折腾的人,能够在Vim中写LaTex代码并且实时呈现在pdf的变化上成了我下一个目标。

  2.使用Vim写tex其实并不困难。Vim是可以正确识别Tex文件格式的,只要你把文件名的后缀改成.tex。那么简单的书写LaTex代码肯定是没问题了,接下来我查找资料得到了这样一个插件:Vimtex,插件安装很简单,常规的Plugin安装即可,安装完成后只需要按下<Leader> ll,.tex文件就会自动编译,并且产生pdf。然而这个插件默认是调用系统默认的pdfviewer接口,所以运行<Leader> ll之后打开了我的PDF Expert并且把pdf正确显示出来了。而且当重新保存.tex文件之后,pdf会实时更新,只不过很慢。于是我查找这个插件的文档,选择在系统中安装skim这个开源的pdfviewer,使用brew cask安装即可。安装完成后在.vimrc配置vimtex插件如下。

Plug 'lervag/vimtex'    "帮助写latex
let g:vimtex_latexmk_options='-pdf -pdflatex="xelatex -synctex=1 \%S \%O" -verbose -file-line-error -interaction=nonstopmode'
let g:tex_flavor='latex'
let g:vimtex_view_method='skim'
let g:vimtex_quickfix_mode=0
set conceallevel=1
let g:tex_conceal='abdmg'

  最后两行配置了tex文件的隐藏功能,参看这里https://castel.dev/post/lecture-notes-1/

  The last two lines con­fig­ure the con­ceal­ment. This is a fea­ture where LaTeX code is re­placed or made in­vis­i­ble when your cur­sor is not on that line. By mak­ing \[\]$ in­vis­i­ble, they’re less ob­tru­sive which gives you a bet­ter overview of the doc­u­ment. This fea­ture also re­places \bigcap by by \in by  etc.

  3.按理说按照以上的步骤,已经达到了目的。使用Vim写LaTex,使用<Leader> ll 命令实时编译产生pdf 但是在测试时发现对中文编译时会失败。解决方法是在文件头加上这样一串代码:

%! Tex program = xelatex

  将编译软件换成对中文支持更好的xelatex,目前没有发现更好的解决办法。

  下面看看最终的效果:

  确实达到了预期的目标。需要改进的是LaTex语法的自动补全等等,因为自己刚刚入门,留待日后钻研。

  下面附上这个文章的核心Vimtex的简易命令说明:

  Start compiling the document with '\ll'

  Open pdf viewer and/or do forward searching with '\lv'

  Stop the running compilation with '\ll' (or 'lk')

  To parse the log file for errors and warnings, press '\le'

  To clearn auxiliary files, press '\lc' (or '\lC' to remove pdf's)

使用Vim写LaTeX代码(Vim+Vimtex+Skim)的更多相关文章

  1. 用vim写go代码——vim-go插件

    GoImport:导入包 GoImport!:导入远程包 GoImportAs: 导入包并且重命名

  2. gvim写html代码时如何快速地跳转到一个标签的结束位置: 终极插件: matchit.vim

    gvim写html代码时如何快速地跳转到一个标签的结束位置 参考这个vimrc的配置, 里面有一些 很好的东西, 配置很有用, 以前没有用到: http://www.cnblogs.com/wangj ...

  3. 【转】vim格式化C代码

    转自:http://blog.chinaunix.net/uid-24774106-id-3396220.html 在自己的目录下编辑自己的.vimrc, vim ~/.vimrc 添加下面的几行: ...

  4. Vim 写 iOS App

    Vim 写 iOS App 我们都知道 Vim 和 Emacs 都是文本编辑器中的上古神器,你也许用 ctags,cscopes 配合 Vim 完成过大型 C 或者 C++ 的开发,你也许配合过其他插 ...

  5. linux常用终端指令+如何用vim写一个c程序并运行

    在装好ubuntu之后今天学习了一些linux的一些基础知识: windows里面打开命令窗口是win+r,在linux系统里面,ctrl+alt+t打开终端,今天的一些指令都是围绕终端来说的 首先s ...

  6. 就是要用Vim写Vue

    Vim关于Vue的生态链还是很少,不过凑活凑活还是能用的. 缩进 缩进采用的是两个空格,.vimrc配置: au BufNewFile,BufRead *.html,*.js,*.vue set ta ...

  7. vim(5)vim下wimrc的配置,解决中文乱码问题

    解决linux下vim乱码的情况:(修改vimrc的内容) 全局的情况下:即所有用户都能用这个配置 文件地址:/etc/vimrc 在文件中添加: ,ucs-bom,gb18030,gbk,gb231 ...

  8. VIM学习一: VIM命令学习及插件介绍

    一.光标移动及编辑命令(含查找替换) [打开关闭窗口] :e file或:open file       打开新文档 :q或者ctrl+w+q         关闭当前视图的窗口 :tab split ...

  9. 【vim】mac配置vim,molokai配色

    效果如下: 首先修改主目录下的.vimrc: "======================================================================= ...

随机推荐

  1. 把数据写入txt中 open函数中 a与w的区别

    a: 打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾. 也就是说,新的内容将会被写入到已有内容之后.如果该文件不存在,创建新文件进行写入. w:  打开一个文件只用于写入.如果该文 ...

  2. js中时间戳和时间格式之间的转换

    //时间格式转化 getNowDate(timestamp) { var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000 va ...

  3. JAVA定义变量和基础的数据类型和关键字

      标识符语法 1)java中定义标识符格式以字母,数字,下划线,$符合组成,不能以数字开头,且不能为  java中的关键字.         2)标识符意义要明确,不要乱起         3)标识 ...

  4. PIC单片机编译器自带的延时程序

    https://wenku.baidu.com/view/3c94e2934028915f814dc205.html

  5. [wordpress使用]002_主题

    使用WordPress作为博客内容管理系统有一个很大的好处是,WordPress拥有大量的优秀的免费模板.你所需要的是下载安装,和稍作修改.下面接着开始WordPress教程:WordPress主题 ...

  6. Spring_使用JdbcTemplate和JdbcDaoSupport

    1.JdbcTemplate 简化 JDBC 模板查询 ①每次使用都创建一个 JdbcTemplate 的新实例, 这种做法效率很低下.②JdbcTemplate 类被设计成为线程安全的, 所以可以再 ...

  7. CNN卷积神经网络的卷积层、池化层的输出维度计算公式

    卷积层Conv的输入:高为h.宽为w,卷积核的长宽均为kernel,填充为pad,步长为Stride(长宽可不同,分别计算即可),则卷积层的输出维度为: 其中上开下闭开中括号表示向下取整. MaxPo ...

  8. C#线程 线程进阶

    第四部分:高级线程 非阻塞同步 前面我们说过,即使在分配或增加字段的简单情况下,也需要同步.尽管锁定始终可以满足此需求,但是竞争性锁定意味着线程必须阻塞,从而遭受上下文切换的开销和调度的延迟,这在高度 ...

  9. Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)部分(A~E)题解

    (A) Even Subset Sum Problem 题解:因为n非常非常小,直接暴力枚举所有区间即可. #include<bits/stdc++.h> using namespace ...

  10. Java 第十一届 蓝桥杯 省模拟赛 梅花桩

    小明每天都要练功,练功中的重要一项是梅花桩. 小明练功的梅花桩排列成 n 行 m 列,相邻两行的距离为 1,相邻两列的距离也为 1. 小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上.小 ...