如题,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.9
、Emacs25.2.1
、macOS10.12
的测试过,是可以用的,这样就不用每次都输入上面那段配置的代码了。
2 个赞
经验证,需要在 @ kirchhoff 或 @cutejumper 代码的后面再加一句:
setq TeX-command-default "XeLaTeX"
参照下面帖子而得来。
opened 09:30PM - 07 Oct 17 UTC
closed 03:41AM - 08 Oct 17 UTC
is:support
Hey, this might not be related to Doom, but I'm not sure which packages are invo… lved in what happens (maybe org? maybe ivy?).
When a .tex file is opened, running C-c C-c raises an appropriate pane with valid options like latex/pdflatex/bibtex. However, there is no xetex/xelatex, and I can't figure out a way to add those there.
I can type the command there, but that pane also has no "history", so I need to retype the command every time. Any pointers to getting this set up to my needs would be much appreciated!