如何搭建Emacs-LaTeX-make工具链

Posted Emacs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何搭建Emacs-LaTeX-make工具链相关的知识,希望对你有一定的参考价值。

背景

在Emacs中生活惯了的人,比如我,慢慢会形成什么文本编辑操作都要在Emacs中进行的习惯和需求。如果有什么文本编辑操作非得到其他编辑器里面做,就会心里痒痒浑身不舒服。这估计也是一种病吧。 LaTeX也是如此。尤其是Emacs中还有AucTeX这样的神器,就更有理由把这个工具链搭配好,来享受行云流水般的工作快感和“心流”。

注:关于AucTeX的强大功能,参见GNU的Auctex示例网页https://www.gnu.org/software/auctex/screenshots.html


为什么要用 make 类工具

熟悉LaTeX工作流程的同学可能知道,如果LaTeX里面没有引用参考文献,那么编译起来可谓一泻千里。如果你开始用bibtex并不断往tex文件里添加引用参考文献(~~学术狗的日常!),那么你经常性地要反复交替运行latex(或 pdflatex)和bibtex以解决aux、bbl、tex等文件的互相依赖问题。有些情况下,这个过程可以达到令人发指的十几遍。 这个时候,make工具的威力就显现出来了:如同对有些计算机语言程序的编译和链接过程,make工具可以递归地、一遍遍自动调用 latex和bibtex,直到输出文件最终稳定。


一个用于 Emacs-LaTeX 工作流的 makefile 脚本的例子

注意以下几个要点

1. LATEXOPTIONS = -src-specials -interaction=nonstopmode

1.1. -src-specials使TeX 在输出的DVI文件中添加关于如何跳转回tex文件对应位置的位置信息。

1.2. -interaction=nonstopmode 使latex一路快速运行到底,而不是停下来问这问那。

2. PDFVIEWER = sumatrapdf -reuse-instance -inverse-search "c:\emacs\bin\emacsclientw.exe +%l \"%f\""

2.1. 我这里采用了Windows下的sumatrapdf, 因为此软件不会锁死打开的pdf文件。如果用 Adobe,pdf文件会被锁定 – 每次都要关闭pdf 再开始编译。

2.2. 注意:要把 sumatrapdf 放在 Windows PATH 中,否则make程序不能调用它。

2.3. sumatrapdf的运行参数-reuse-instance使其可以在同一个打开的窗口中多次自动打开更新过的pdf文件。

2.4. sumatrapdf的运行参数 -inverse-search "c:\emacs\bin\emacsclientw.exe +%l \"%f\"" 使其知道调用emacsclient来访问 tex 源文件。

3. BIBOPTIONS = -include-directory=$(BIBDIR) 及 vpath

3.1. 使得BIBDIR里面的bib文件都可以被自动访问。这个例子里的-- 在这里的BIBDIR是 "C:/H/Bib"。

3.2. vpath %.bib /cygdrive/c/H/Bib 使make程序知道在此路径中搜索 bib 文件。

4. 如果需要pdf文件也具备逆向搜索功能, 即通过点击 pdf 文件中的字段访问 tex文件中的字段 (如同在DVI文件里一样),你需要在tex文件头部加入 /usepackage{pdfsync}。

5. REBUILDABLES 里列出了可以被自动清除的文件的扩展名 -- 运行make clean把它们都清理掉。


makefile 脚本具体内容

MAIN=maintex


EPS=img/*.eps


TEX=tomo_spectra.tex


BIB=da.bib


REBUILDABLES =  \

*.log   \

*.blg   \

*.bbl   \

*.aux   \

*.lof   \

*.lot   \


LATEXOPTIONS = -src-specials -interaction=nonstopmode


PDFVIEWER = sumatrapdf -reuse-instance -inverse-search "c:\emacs\bin\emacsclientw.exe +%l \"%f\""


BIBDIR = "C:/H/Bib"


BIBOPTIONS = -include-directory=$(BIBDIR)


vpath %.bib /cygdrive/c/H/Bib


viewpdf : $(MAIN).pdf

    $(PDFVIEWER) $(MAIN).pdf &


dvi : $(MAIN).dvi

    yap -1  $(MAIN).dvi


$(MAIN).pdf : $(MAIN).dvi

    pdfclosem $(MAIN).pdf ; dvipdfm $(MAIN).dvi


$(MAIN).dvi : $(MAIN).bbl $(EPS)

    latex $(LATEXOPTIONS) $(MAIN)

        if ( grep 'Rerun' $(MAIN).log > /dev/null ) ; then\

            latex $(LATEXOPTIONS) $(MAIN) ; \

        else :; fi


$(MAIN).bbl : $(TEX)

    rm -f $(MAIN).aux *.bbl; latex $(LATEXOPTIONS) $(MAIN); bibtex $(BIBOPTIONS) $(MAIN)


clean :

    rm -f $(REBUILDABLES)


原生工具latexmk

如果不用make和makefile,我们还可以使用latex系统原生的工具 latexmk

1. latexmk是latex系统自带的一个 Perl 语言脚本,其功能和make类似。不过,有一个好处是你不用编写自己的makefile脚本了。

2. 先调调胃口,给出几个外部参考文献:

关于工作流程

http://emacsist.com/10707

http://pragmaticemacs.com/emacs/speed-up-pdf-export-from-org-mode-with-latexmk/

https://zhangda.wordpress.com/how-to-achieve-auto-compilation-for-the-org-latex-pdf-publishing-chain/ (鄙人拙作)

关于latexmk配置

http://jon.smajda.com/2008/03/08/latexmk/

3. latexmk这么好用, 那么它在哪里? 应该在latex系统里自带了。

试用下面命令查看它的路径在哪里:

which latexmk

latexmk is /cygdrive/c/CTEX/MiKTeX/miktex/bin/latexmk


查看 latexmk 是否正常运行:

latexmk -v

Latexmk, John Collins, 5 February 2015. Version 4.43a


4. 工作流

在tex文件所在目录打开shell,运行如下命令,latexmk会自动检查tex文件的更新情况,并自动编译成 pdf 文件。

latexmk -pvc -pdf -view=none paper.tex

注意,在上面例子中,命令里指明了paper.tex是目标文件。如果没有指明,latexmk会自动寻找当前目录中的tex文件并运行。如果多个tex文件共存于当前目录,则需指明目标tex文件,否则会引起混淆。


用下面的samatrapdf命令调用实现pdf文件的自动预览 (自动检测本地pdf文件变化并自动更新显示)。

sumatrapdf -reuse-instance paper.pdf


5. 一些更舒服(懒惰)的配置:

用shell aliases来省去敲各种命令参数:

# for viewing pdf but not locking the file

alias pdfview='sumatrapdf -reuse-instance'


# for easily use latexmk

alias mklatex='latexmk -pvc -pdf'

# -f for non stop

alias mktex='latexmk -f -pvc -pdf -view=pdf'

我的 latexmk 的设置:

$pdf_previewer = 'sumatrapdf -reuse-instance %O %S';

$clean_ext = 'paux lox pdfsync out';

注意:

.latexmkrc 的默认路径是 $HOME directory

.latexmkrc 的语法是Perl语言

我在此文件中设定了sumatrapdf作为默认pdf viewer

我在此文件中设定了paux lox pdfsync out等需要被自动清理的文件类型。



本期编辑:aborn  校验: geekplux

以上是关于如何搭建Emacs-LaTeX-make工具链的主要内容,如果未能解决你的问题,请参考以下文章

[Rust]使用MSVC工具链和VSCode搭建Rust环境

如何更改ubuntu中交叉编译工具链?

嵌入式开发环境搭建之安装交叉编译工具链

交叉工具链的搭建方法

搭建arm交叉工具链

嵌入式交叉编译环境搭建