使用latexmk编译XeLaTeX tex文件

Bri*_*unt 23 latex latexmk xelatex

如何在Mac OS X上编译XeLaTeXtex文档latexmk

目前我正在运行latexmk job.tex并收到错误:

! 
 ********************************************
 * XeTeX is required to compile this document.
 * Sorry!
 ********************************************.
\RequireXeTeX ...********************************}
                                                  \endgroup \fi 
l.18 \RequireXeTeX

? ^D
! Emergency stop.
\RequireXeTeX ...********************************}
                                                  \endgroup \fi 
l.18 \RequireXeTeX
Run Code Online (Sandbox Code Playgroud)

我TEX文件的第一行是(通过所建议的这个帖子):

% !TEX TS-program = xelatexmk
Run Code Online (Sandbox Code Playgroud)

我尝试过其他人(例如program = xelatex),但无济于事.

latexmk 描述其命令如下:

$ latexmk -commands xelatex job
Commands used by latexmk:
   To run latex, I use "latex %O %S"
   To run pdflatex, I use "pdflatex %O %S"
   ...
Run Code Online (Sandbox Code Playgroud)

从命令行中选择tex程序似乎没有任何逻辑机制,并且从源头也不清楚如何做到这一点.

我也看过了rubber,但它似乎也没有用.

我感谢您提供的任何见解.

布赖恩

小智 17

latexmk -v
Latexmk, John Collins, 16 January 2010. Version 4.13a
Run Code Online (Sandbox Code Playgroud)

我放

$pdflatex = 'xelatex --shell-escape %O %S';
Run Code Online (Sandbox Code Playgroud)

在我的.latexmkrc文件中.当然,这是一种解决方法.但是当我打电话时,它对我有用

latexmk -pvc -pdf MyXetexFile
Run Code Online (Sandbox Code Playgroud)


and*_*e-r 10

这是我的快速修复,因此latexmk适用于XeLaTeX:
添加

`elsif (/^-xelatex$/) { $pdf_mode = 1; $pdflatex = 'xelatex %O %S'; $pdf_previewer =
'start evince %O %S';}`
Run Code Online (Sandbox Code Playgroud)

在线上方(或附近)

`elsif (/^-pdf$/) { $pdf_mode = 1; }`
Run Code Online (Sandbox Code Playgroud)

.

然后你可以打电话latexmk -xelatex file.tex.工作,但我没有广泛测试.应该与之相似lualatex.

  • 我将在下一个版本(4.31)中为latexmk添加-xelatex选项.这将像这里给出的修改一样工作(除了将预览器设置为evince). (14认同)
  • 值得注意的是,从版本 4.24 开始,您可以通过执行“latexmk -pdflatex='xelatex %O %S' -pdf [...]”而不是修改 Latexmk 脚本来获得相同的效果。这有点冗长,但它可以完成工作。如果/当添加标志时,我更喜欢它基于变量 $xelatex。这样我们就可以在 ~/.latexmkrc 中定义变量,以便传递标志等,就像我们现在使用 $latex 和 $pdflatex 所做的那样。 (3认同)

Rol*_*Kau 9

$ latexmk -v
Latexmk, John Collins, 27 July 2010. Version 4.18
Run Code Online (Sandbox Code Playgroud)

我运行命令:

latexmk -pdf -e '$pdflatex=q/xelatex %O %S/' foo.tex
Run Code Online (Sandbox Code Playgroud)

这与andre-r和Kay的答案基本相同,但仅限于命令行.


בני*_*ילי 5

latexmk --xelatex job.tex 现在这个参数在这个简单的形式中是可以通过的。


use*_*654 5

在版本:4.65(2019 年 6 月 18 日)中,使用其中一条评论建议的-xelatex选项和设置之间存在差异-pdflatex

选项 1:-xelatex

$ latexmk -xelatex file.tex
Run Code Online (Sandbox Code Playgroud)

使用-xelatex选项或-pdfxe选项,tex 文件首先被排版为xdv扩展 DVI)文件。然后,xdvipdfmx调用将xdv文件转换为pdf文件。

latexmk,$xelatex_default_switches设置为-no-pdf(第 395 行)以xelatex生成一个xdv文件而不是默认的 PDF 文件。

因此该-xelatex选项等效于:

$ xelatex -no-pdf file.tex  # called one or more times to produce file.xdv
$ xdvipdfmx file.xdv        # called only once in the end
Run Code Online (Sandbox Code Playgroud)

选项 2:-pdflatex=xelatex

第二个选项是在pdflatex打开-pdf选项的同时进行如下设置:

# %O is a substitution for options and %S is for source file
$ latexmk -pdflatex='xelatex %O %S' -pdf file.tex
Run Code Online (Sandbox Code Playgroud)

在这种方式中,xelatex用于直接生成PDF文件,不生成中间输出文件。请注意,今天,xelatex首先生成一个xdv流并在内部通过管道将xdvipdfmx其生成为 PDF 文件。

因此,这种方法等效于:

$ xelatex file.tex     # called one or more times to produce file.pdf
Run Code Online (Sandbox Code Playgroud)

user36296的评论更新 2019.08.31 。

  • 在第二个选项中,中间文件将在内部生成并在每次运行时转换为 pdf。因此,此选项比第一个选项稍慢,第一个选项最后只完成一次转换为 pdf (2认同)