文章目录
  1. 1. 安装 Texlive
  2. 2. 配置 sublime text
    1. 2.1. 编译功能
    2. 2.2. 反向查找
    3. 2.3. 公式、图片预览
  3. 3. LaTeX 常见操作
  4. 4. Markdown 与 pandoc
    1. 4.1. LaTeX 模板
    2. 4.2. pandoc 命令
  • 我就是手写,就是交不上论文,我也不会再用一次 Word!
  • 真香

总是被 Word 的辣鸡“智能”折腾得死去活来,可是又找不到代替之法,可以和 Word 一较高下的系统我也试过不少了,可是都多多少少有些问题:

  • Texmacs:我最青睐的软件,非常智能,极大减轻了排版负担,写个实验报告之类的小短文非常合适。可惜它更新缓慢,容易崩溃(频率比 Word 还高……),并且我不清楚该怎么修改它的模版,怕是写不了什么正式论文。
  • Lyx:一套基于 \(\mathrm{\LaTeX}\) 的 WYSIWYG 排版系统,其实也不错,我用它写过文科论文。但是对于图片处理的支持较差,也有模版太少的问题,不过模版编辑还是比较容易的。
  • markdown+css:这个方法是基于 typora 的,因为我希望能从 md 直接导出 pdf ,事实证明 css 的配置确实是麻烦……可以用来写短文,但是图片要另外裁剪。
  • markdown+\(\mathrm{\LaTeX}\):看起来十分可行,但是 pandoc 的 \(\mathrm{\LaTeX}\) 模版配置没太搞懂……
  • markdown+Word:使用 pandoc 转码,看起来很好,利用 WYSIWYG 的 Word 排图片、微调都很方便……但是 Word 能把一切搞砸。
  • \(\mathrm{\LaTeX}\) 肉搏:直接用 \(\mathrm{\LaTeX}\) …… 算了。

结论是:无论怎么说,还是要用 \(\mathrm{\LaTeX}\) 一系的了。之前为 \(\mathrm{\LaTeX}\) 而痛疼不已,很大程度上是因为太容易报错了。听说 CTEX 套件已经过时,于是决定卸载,重新安装 Texlive,从头开始。

安装 Texlive

官方网站下载安装程序,因为怕出毛病。选择简单暴力的 Simple Install ,把所有东西都装上(5G 多……),选一个亚洲的镜像站,速度应该会快些。

数小时以后……

安装完成!核对一下 D:\texlive\2017\bin\win32 是不是已经在系统路径里了。现在就可以使用 Texlive 进行编译,一般来说是使用xeLaTeX,更新的luaLaTeX似乎也可以(实际上即使是最古老的pdfLaTeX也能支持中文了)。Texlive 提供了可视化包管理器 TeX live Manager,非常方便。

这里有一个问题,我一开始使用时出现了关于 perl 的错误。后来发现是 Lyx 自作聪明地把自己携带的 perl 路径写进了系统路径里,于是把这一条路径删掉,还是不行。最后把 Lyx 卸载了才算了事……

配置 sublime text

看起来大佬们最常使用的编辑器不是 Texstudio、Texmaker 之流,而是无所不能的 sublime。首先用 Package Control 安装插件 LaTeXTools ,之后从Preferences->Package Settings->LaTeXTools修改设置。

LaTeXtools 引以为豪的功能有两个:直接调用编译系统进行编译,以及公式、图片的预览。下面分别进行设置,我的设置文件已经保存到 github仓库。在设置时,可以使用设置中的check system看看是否已经完成配置。

编译功能

打开配置文件Setting-user(虽然扩展名奇怪,其实还是json语法),找到Platform settings一段当中的windows部分(209行附近),修改其中的路径。

  • 因为使用了 Texlive,所以要修改决定编译套件的的distro和决定编译器路径的texpath。按照提示写成"D:\\texlive\\2017\\bin\\win32;$PATH"
  • 在 windows 上,LaTeXTools 使用 SumatraPDF 显示编译结果,这个方便的阅读器我早就装了,只要把路径写到sumatra一项就可以。因为已经在系统路径里了,也可以不写。
  • 还要有 sublime text 的路径,也是因为在系统路径里,省略。

结果如下:

1
2
3
4
5
6
7
"windows": {
"texpath" : "D:\\texlive\\2017\\bin\\win32;$PATH",
"distro" : "texlive",
"sumatra": "",
"sublime_executable": "",
"keep_focus_delay": 0.5
},

由于 \(\mathrm{\LaTeX}\) 的编译系统众多,所以Ctrl+B是使用默认编译方法,其他方法可以在Ctrl+Shift+B菜单里找到:包括三种主流编译器,每种又有traditionalbasic选项——真是搞不明白。反正使用xeLaTeX-traditional就不错。

理论上说,之后只要写好了.tex文件,再使用Ctrl+B就行了。

——嗯,对于正常人是这样的,可惜我的 sublime 出现了迷之问题,和LaTeXTools的作者们沟通也没有结果(ρ_・).。所以要用Ctrl+Shift+P调出主菜单,选择LaTeXTools-build with xeLaTeX才行。

结果是我的汉化插件过时了……为什么会有这种迷之影响……总之使用了Package Control中找到的新版汉化之后,一切OK。

反向查找

这也算是编译功能的一部分——在 pdf 文件中双击,就可以跳转到源文件中的对应位置,非常方便。但是这个配置是在 SumatraPDF 进行的,所以单列出来。

打开设置->高级选项,找到InverseSearchCmdLine,改为:

1
InverseSearchCmdLine = "D:\Program Files\Sublime Text 3\sublime_text.exe" "%f:%l"

完成。

公式、图片预览

LaTeXTools 依靠 ImageMagick 和 Ghostscrpit 将公式转换为图片显示出来,所以要先安装这两个软件,之后把他们添加到系统路径里。

具体的预览方案,在Setting-userPreview setting 一节,比如预览的方式、范围、编译系统、图片大小等等,我修改了其中的四行:

1
2
3
4
5
6
7
// MATH LIVE PREVIEW
"preview_math_scope": "text.tex.latex meta.environment.math",
"preview_math_latex_compile_program": "xelatex",

// IMAGE PREVIEW
"preview_popup_image_size": 300,
"preview_phantom_image_size": 150,

最终效果很棒:

公式预览

公式预览

LaTeX 常见操作

  1. 汉语支持。对于常见的文章,可以直接使用ctex宏包中定义好的documentclass,其中已经对汉语排版进行了细致的优化。如果想要对段落细调,可以用

1
2
\setlength{\parindent{2em}} % 段首缩进
\setlength{\parskip{0.5em}} % 段间距

  1. \textbf{}粗体,\emph{}斜体,\texttt{}等宽

  2. 文档层级:\section{}, \subsection{}, \paragraph{}, \subparagrapg{}

  3. 绘制矢量图。矢量图比位图强多啦!但是\(\mathrm{\LaTeX}\)不能直接插入svg图片。可以用 Inkscape 的导出为Tikz的功能获取代码,粘贴到文件中即可。

Markdown 与 pandoc

虽然 \(\mathrm{\LaTeX}\) 能够正常运行了,但是写起来毕竟麻烦,理想的方法是用 Markdown 编写,再用 pandoc 转码,经过微调后编译成 pdf。注意 pandoc 对 Markdown 有一些扩展,也有一些约束。

LaTeX 模板

pandoc 文档中包含了模版的编辑方法,使用pandoc -D latex可以查看默认模板。总的来说很简单,有以下几条规则:

  1. 控制语句和参数调用都是以$something$的形式出现,注释为$-- text的形式,其他都作为tex文本。注意%也不能注释掉控制语句,它只会原样出现在输出文件里。
  2. 用到的参数可以用两种方法给出:在命令行运行 pandoc 时以--arg=value的形式给出;或者在 .md文件中以YAML frontmatter的形式给出。显然第二个更加灵活方便。
  3. 参数的使用方法:可以用在判断和循环中,也可以用$arg$的形式直接调用其值(作为文本)。
  4. 三种控制结构:

    • 顺序结构。直接写在最外层的语句会被原封不动的写进输出文件里。

    • 判断结构。语法是

    1
    2
    3
    4
    5
    $if(arg)$          $-- 若 arg 存在(被设定过),即为真
    case_1 $-- 则把文本'case_1'写入输出文件
    $else$
    case_2
    $endif$

    换行不是必须的,也常常他们连续的写在一个大括号里。

    • 循环结构。语法是

    1
    2
    3
    $for(arg)$         $-- 对于 arg 中的每一个值
    balabala$arg$
    $endfor$

了解了这些,在默认模版上就可以修改出合适的模板了。我的已经放到了github仓库。这里有个问题,就是documentclass有默认值article,没办法用$if(documentclass)$ctexart的方法设置默认类型,所以我直接把它写死了,没办法从frontmatter里改,要改的话得先修改模板。

pandoc 命令

最后一步就是用 pandoc 转码啦!不需要指明输入/输出类型,pandoc 会根据输入/输出文件名自动判断,常用参数如下:

1
2
3
4
5
6
7
8
9
pandoc in_file            # 输入文件
-s # 输出独立文件,有这一项模板才有效
-o output_file # 输出文件
--template='mytemp.latex' # 模板
--filter pandoc-crossref # 使用交叉引用
--filter pandoc-citeproc # 使用文献引用
--biblio reference.bib # 使用的bibtex 文件
--csl template.csl # 文献应用格式
--latex-engine=xelatex # latex 引擎

如果只是输出成.tex文件,前四行就够了。

因为嫌麻烦,我把这些命令写了一个md2tex.py文件放到了仓库里,直接运行就行了。

文章目录
  1. 1. 安装 Texlive
  2. 2. 配置 sublime text
    1. 2.1. 编译功能
    2. 2.2. 反向查找
    3. 2.3. 公式、图片预览
  3. 3. LaTeX 常见操作
  4. 4. Markdown 与 pandoc
    1. 4.1. LaTeX 模板
    2. 4.2. pandoc 命令