从头开始配置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文件放到了仓库里,直接运行就行了。
