使用 lualatex 使 latexmk 默认使用 -synctex=1

使用 lualatex 使 latexmk 默认使用 -synctex=1

.latexmkrc设置为传递-synctex=1pdflatex以便能够从我的 pdf 查看器跳回到源:

$pdflatex='pdflatex -synctex=1 %O %B';
$pdf_mode=1;
$pdf_previewer="start okular %O %S";

这很有效。但是,我需要使用lualatex来编译一些文档,因为它使用的包之一不受 支持pdflatex。在这种情况下,我可以使用latexmk -lualatex -synctex=1 document.texsynctex启用,但我想调整我的.latexmkrc以便能够只需键入即可latexmk -lualatex document.tex获得synctex信息(如果命令行中未指定,则保留pdflatex默认设置-lualatex)。到目前为止我还没有成功。特别是,添加行

$lualatex='lualatex -synctex=1 %O %B';

$pdflatex无论是在in定义之前还是之后,.latexmkrc都不会执行任何操作。这可能吗?

注意:以防万一,我的版本latexmk(据报告-v)是 4.41

答案1

使用latexmk4.61 版本,您可以运行

latexmk -showextraoptions

latexmk获取可以提供给并传递给的选项列表(pdf)latex。在这些选项中,您可以找到synctex,因此

latexmk -lualatex -synctex=1

在一次性情况下。在latexmkrc文件中,手册页中有关高级配置的部分显示,可以使用set_tex-commands以下选项来设置全部版本的 latex。因此可以写

set_tex_cmds( '-synctex=1 %O %S' );

并将与之一起latexmk -lualatex运行。lualatexsynctex

答案2

$pdflatex='lualatex -synctex=1 %O %B';在与源文件相同的目录中创建一个 latexmkrc 文件是否不能完成这项工作?

答案3

经过探索/usr/bin/latexmk,我得出了以下.latexmkrc似乎可以解决问题的方法:

push @extra_pdflatex_options, '-synctex=1' ;
$pdf_mode=1;
$pdf_previewer="start okular %O %S";

即,$pdflatex我不再直接重新定义 ,而是添加一个额外的选项传递给它,然后让它latexmk决定应该启动哪个命令。唯一让我担心的是,据我所知,的手册页extra_pdflatex_options上没有记录latexmk,所以我不确定这个解决方案在进化方面的稳健性latexmk

答案4

我建议只.latexmkrc在您的主目录中创建一个文件:放入这两个命令或至少是 pdflualatex 命令。

$pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %O %S;';
$pdflualatex = 'lualatex -interaction=nonstopmode -synctex=1 %O %S;';

然后只需在任何目录中使用以下命令调用 latexmk:latexmk -lualatex它将使用主目录中的设置。

要覆盖该设置,只需将新的 latexmkrc 文件放入编译目录中,或使用-rlatexmk 命令传入 latexmkrc 文件。我没有放置默认的 latexmkrc,但我在 bash 中有一个别名,用于运行-r指向默认命令的命令,因此这也是一个选项。

相关内容