LaTeX 技巧938:如何配置 latexmk

LaTeX 文档的编译过程通常比较复杂,尤其是有参考文献的情况下, 需要多次编译并调用外部命令。这个问题可以通过 latexmk 工具来解决。

latexmk 需要自己进行简单的配置后才能使用起来比较顺手。 建议在个人根目录的 $HOME/.latexmkrc 文件中配置个人的使用习惯, 然后在项目的工作目录的 latexmkrc 文件配置项目相关的编译方法, 如使用 xelatex 或开启 -shell-escape 等。

下面是我推荐的一些配置,更详细的说明参见 latexmkrc 的文档。

$pdf_mode = 1;

默认使用 pdflatex 编译生成 pdf。 如果使用 xelatex 可以设为 5(需要 TeX Live 2017 以上)。 我个人由于需要使用不同的引擎,所以默认设为 1, 然后用命令行参数切换不同的引擎,比如 latexmk -xelatex。

$pdflatex = "pdflatex -file-line-error -halt-on-error -interaction=nonstopmode -synctex=1 %O %S";

给编译命令添加额外的参数:-file-line-error 使报错输出文件和行号; -halt-on-error 和 -interaction=nonstopmode 使编译遇到错误时立即停止; -synctex=1 则开启 synctex 的功能。

$xelatex = "xelatex -file-line-error -halt-on-error -interaction=nonstopmode -no-pdf -synctex=1 %O %S";
$xdvipdfmx = "xdvipdfmx -E -o %D %O %S";

xelatex 的 -no-pdf 参数使编译时只生成 xdv 文件,最后才用 xdvipdfmx 生成 pdf, 这样可以节省嵌入图片耗费的时间(需要 TeX Live 2017 以上)。 注意 -E 参数可以避免一些字体嵌入问题(见 https://github.com/CTeX-org/ctex-kit/issues/352 )。

$bibtex_use = 1.5;

通常 bbl 文件是由 BibTeX 编译 bib 文件生成的,在清理辅助文件时可以删掉; 但是有时并没由提供 bib 文件,只有 bbl(比如 arxiv 上的 TeX 源码), $bibtex_use = 1.5 可以自动检测根据条件清理 bbl 文件(需要 TeX Live 2018 以上)。

$out_dir = "latex.out";

编译时将所有生成文件(包括辅助文件)写到 latex.out 目录下。注意这个配置虽然可以使目录更加整洁,但是可能导致一些软件的功能受影响,建议谨慎选择。

$preview_mode = 1;

编译完成后自动打开 pdf;还可以用 $pdf_previewer 配置 pdf 阅读器, 以及 $preview_continuous_mode 连续自动编译。

$clean_ext = "hd nav snm synctex.gz xdv";

额外需要清理的辅助文件;如配置过 $out_dir 就不再需要了。

add_cus_dep('nlo', 'nls', 0, 'nlo2nls');
sub nlo2nls {
   system("makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\"");
}
push @generated_exts, "nlo", "nls";

一些宏包需要额外的编译命令, 比如 nomencl 宏包需要调用 makeindex 命令将 nlo 文件编译成 nls 文件, 所以要手动配置这个编译过程。

完整的配置文件如下:

$pdf_mode = 1;

$pdflatex = "pdflatex -file-line-error -halt-on-error -interaction=nonstopmode -synctex=1 %O %S";
$xelatex = "xelatex -file-line-error -halt-on-error -interaction=nonstopmode -no-pdf -synctex=1 %O %S";
$xdvipdfmx = "xdvipdfmx -E -o %D %O %S";

$bibtex_use = 1.5;

$out_dir = "latex.out";

$preview_mode = 1;

$clean_ext = "hd nav snm synctex.gz xdv";

add_cus_dep('glo', 'gls', 0, 'glo2gls');
sub glo2gls {
    system("makeindex -s gglo.ist -o \"$_[0].gls\" \"$_[0].glo\"");
}
push @generated_exts, "glo", "gls";

add_cus_dep('nlo', 'nls', 0, 'nlo2nls');
sub nlo2nls {
    system("makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\"");
}
push @generated_exts, "nlo", "nls";
分享到:
未经允许不得转载:LaTeX 技巧938:如何配置 latexmk
已有 条意见

    最新文章

    加载中...
      本站提供专业LaTeX排版、咨询、定制服务,请点击下图咨询详情


      全国首个精品的LaTeX视频教程,大牛带着你入门,让LaTeX学习不再纠结,请点击下图咨询详情

      热门评论

        联系我们

        交流QQ群:91940767
        本站QQ号:343083553
        邮箱联系latexstudio@qq.com
        淘宝店铺latexstudio.taobao.com 提供排版,模板定制,培训,图片处理,视频教程等LaTeX服务。

        关注微信公众号: latex2015

        如果您投稿或者希望加入我们团队,请发送您的简历到latexstudio@qq.com。

        科技艺术的完美融合,专业精致的排版体验

        联系我们联系我们