[已解决] Spacemacs 如何设置 xelatex 为默认的 latex 引擎?

如题,spacemacs 默认使用 pdflatex 进行编译,如何让它改用 xelatex 作为默认引擎,google 没能搜出方法,只是搜到一个解决方案,就是在 tex 文件末尾加上如下一段内容,然而经测试这并没有什么卵用:

%%% Local Variables:
%%% coding: utf-8
%%% mode: latex
%%% TeX-master: t
%%% TeX-command-extra-options: "-shell-escape"
%%% TeX-engine: xetex
%%% End:
1 个赞

我没用spacemacs自带的latex layer,我的自己配置是加了这个

 (add-hook 'LaTeX-mode-hook
              #'(lambda ()
                  (add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex --synctex=1%(mode)%' %t" TeX-run-TeX nil t))))

这样C-c C-c 默认就是xelatex

在.tex文件末尾加上这样一段是可以用 xelatex 编译的。要先保存,然后重新载入文件才能生效。

%%% Local Variables:
%%% mode: latex
%%% TeX-command-extra-options: "-shell-escape"
%%% TeX-master: t
%%% TeX-engine: xetex
%%% End:
1 个赞

首先,要让你末尾加的这句话生效,你需要保存再 revert-buffer, 像 @megoto 所说的。

如果你用 Spacemacs 且用 SPC m b 的话, 默认是调用 latexmk的,这样只需要修改 ~/.latexmkrc 使其调用 xelatex 即可(以下未测试,-shell-escape参数并不必须):

$pdflatex = 'xelatex --shell-escape %O %S';

如果你使用 SPC m M-RET (或者 M-RET M-RET),这个命令调用 TeX-command-master,需要修改 TeX-command-list, 像 @kirchhoff 所说的一样即可。 注意如果你添加多个自定义的编译引擎,保证 xelatex 是在这个 TeX-command-list 变量的最前面即可默认选择 xelatex

(add-hook 'LaTeX-mode-hook
              (lambda ()
                  (add-to-list 'TeX-command-list '("foo" "blahblahblah" TeX-run-TeX nil t)) ;不要拷贝这行,仅为说明作用
                  (add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex --synctex=1%(mode)%' %t" TeX-run-TeX nil t))))

注意 lambda 前最好不要添加 ' 或者 #'

4 个赞

然而它还是在使用 pdfTeX 编译,我已经保存了无数遍了,重新打开了无数遍了。

Microsoft Windows [版本 6.1.7601] 版权所有 © 2009 Microsoft Corporation。保留所有权利。

f:\texdoc\elementary-math-book>latex “\nonstopmode\input” “book.tex” latex “\nonstopmode\input” “book.tex” This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/W32TeX) (preloaded format=latex) restricted \write18 enabled. entering extended mode LaTeX2e <2015/01/01> Babel <3.9l> and hyphenation patterns for 5 languages loaded.

revert-buffer 的出现以下提示并且我按下了y: The local variables list in book.tex contains values that may not be safe (*).

Do you want to apply it? You can type y – to apply the local variables list. n – to ignore the local variables list. ! – to apply the local variables list, and permanently mark these values (*) as safe (in the future, the will be set automatically.)

 mode : latex
  • TeX-command-extra-options : “-shell-escape”
  • TeX-master : t
  • TeX-engine : xetex

我在这个提示里按下了感叹号,然后 C-c C-c 出现了xelatex选项,选择后出现tex-shell,自己手动输入tex文件名后可以完成编译.

话说,怎么结贴?

非常不好意思的说,以前没有去看 latex layer 的文档,今天看了README,启用了latex layer,然后那几个变量加在文件结尾是可以的。

1 个赞

其实这个就是一个设置的问题,只是现在的LaTeX layer没有比较好的更改编译引擎的方法。如果为了解决中文问题,使用xelatex作为引擎,并且想要 SPC m b来实现编译的话,除了上面的方法,可以使用我这段的代码,个人认为比较方便,也是在LaTeX mode 中添加一个函数:

;;LaTeX config
(add-hook 'LaTeX-mode-hook
        (lambda ()
          (setq TeX-auto-untabify t     ; remove all tabs before saving
                TeX-engine 'xetex       ; use xelatex default
                TeX-show-compilation t)  ; display compilation windows
          (TeX-global-PDF-mode t)       ; PDF mode enable, not plain
          (setq TeX-save-query nil)
          (imenu-add-menubar-index)
          (define-key LaTeX-mode-map (kbd "TAB") 'TeX-complete-symbol)))

这里面有些是我自己习惯加进去的设置,可以删掉,就注意TeX-engine的设置就行了。

已经在Spacemacs 0.200.9Emacs25.2.1macOS10.12的测试过,是可以用的,这样就不用每次都输入上面那段配置的代码了。

2 个赞

谢谢walsvid的设置办法,我用起来没有问题。

经验证,需要在 @ kirchhoff 或 @cutejumper代码的后面再加一句:

setq TeX-command-default "XeLaTeX"

参照下面帖子而得来。

我现在用lsp Write LaTeX in Spacemacs Export Org file To pdf with Chinese Fonts