从头开始配置LaTeX
- 我就是手写,就是交不上论文,我也不会再用一次 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 | "windows": { |
由于 \(\mathrm{\LaTeX}\) 的编译系统众多,所以Ctrl+B
是使用默认编译方法,其他方法可以在Ctrl+Shift+B
菜单里找到:包括三种主流编译器,每种又有traditional
和basic
选项——真是搞不明白。反正使用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-user
的 Preview setting
一节,比如预览的方式、范围、编译系统、图片大小等等,我修改了其中的四行:
1 | // MATH LIVE PREVIEW |
最终效果很棒:
LaTeX 常见操作
- 汉语支持。对于常见的文章,可以直接使用
ctex
宏包中定义好的documentclass
,其中已经对汉语排版进行了细致的优化。如果想要对段落细调,可以用
1
2\setlength{\parindent{2em}} % 段首缩进
\setlength{\parskip{0.5em}} % 段间距
\textbf{}
粗体,\emph{}
斜体,\texttt{}
等宽文档层级:
\section{}
,\subsection{}
,\paragraph{}
,\subparagrapg{}
绘制矢量图。矢量图比位图强多啦!但是\(\mathrm{\LaTeX}\)不能直接插入
svg
图片。可以用 Inkscape 的导出为Tikz
的功能获取代码,粘贴到文件中即可。
Markdown 与 pandoc
虽然 \(\mathrm{\LaTeX}\) 能够正常运行了,但是写起来毕竟麻烦,理想的方法是用 Markdown 编写,再用 pandoc 转码,经过微调后编译成 pdf。注意 pandoc 对 Markdown 有一些扩展,也有一些约束。
LaTeX 模板
pandoc 文档中包含了模版的编辑方法,使用pandoc -D latex
可以查看默认模板。总的来说很简单,有以下几条规则:
- 控制语句和参数调用都是以
$something$
的形式出现,注释为$-- text
的形式,其他都作为tex
文本。注意%
也不能注释掉控制语句,它只会原样出现在输出文件里。 - 用到的参数可以用两种方法给出:在命令行运行 pandoc 时以
--arg=value
的形式给出;或者在.md
文件中以YAML frontmatter
的形式给出。显然第二个更加灵活方便。 - 参数的使用方法:可以用在判断和循环中,也可以用
$arg$
的形式直接调用其值(作为文本)。 三种控制结构:
顺序结构。直接写在最外层的语句会被原封不动的写进输出文件里。
判断结构。语法是
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 | pandoc in_file # 输入文件 |
如果只是输出成.tex
文件,前四行就够了。
因为嫌麻烦,我把这些命令写了一个md2tex.py
文件放到了仓库里,直接运行就行了。