You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置vimtex使用xelatex后仍报错,编译器未生效如何解决?

VimTeX配了XeLaTeX还是报fontspec引擎错误?看这几个排查点

问题还原

我给VimTeX配置了XeLaTeX编译,完整配置如下:

-- 开启文件类型检测、插件和缩进
vim.cmd('filetype plugin indent on')

-- 开启语法高亮
vim.cmd('syntax enable')

-- 配置VimTeX编译器
vim.g.vimtex_compiler_latexmk = {
  executable = 'latexmk',
  options = {
    '-xelatex',  -- 指定用XeLaTeX
    '-file-line-error',
    '-synctex=1',
    '-interaction=nonstopmode',
  },
}

-- 配置VimTeX预览器
vim.g.vimtex_view_method = 'skim'
vim.g.vimtex_view_skim_sync = 1
vim.g.vimtex_view_skim_activate = 1

vim.g.maplocalleader = ','

但用本地leader键,,启动实时编译时,还是弹出fontspec的报错:

/usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.sty|45 error| Fatal Package fontspec Error: The fontspec package requires either XeTeX or LuaTeX. You must change your typesetting engine to, e.g., "xelatex" or "lualatex" instead of "latex" or "pdflatex".
/usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.sty|45 error| Emergency stop.
/usr/local/texlive/2023/texmf-dist/tex/latex/fontspec/fontspec.sty|45 error| ==> Fatal error occurred, no output PDF file produced!

已经确认vim.g.vimtex_compiler_latexmk配置没问题,到底哪里出问题了?


排查方向和解决办法

1. 配置加载时机错了,被VimTeX默认值覆盖

很多人把VimTeX配置直接写在init.lua/.vimrc里,但VimTeX插件加载可能比你的配置晚,导致你设的参数被插件默认值冲掉了。

解决:
把VimTeX的配置移到after/plugin/vimtex.lua(用Lua的话)或者after/plugin/vimtex.vim(用Vimscript的话)。这个目录下的文件会等所有插件加载完再执行,能确保你的配置生效。

2. 全局latexmkrc在搞鬼

latexmk会自动读用户目录下的.latexmkrc文件,如果这个文件里指定了默认用pdflatex,会直接覆盖VimTeX传的-xelatex参数。

解决:

  • 打开~/.latexmkrc看看,如果有$pdflatex = 'pdflatex %O %S';这种行,要么注释掉,要么改成$pdflatex = 'xelatex %O %S';;要是不需要全局配置,直接删了这个文件也行。
  • 或者在VimTeX配置里加个'-no-recursion'选项,让latexmk忽略所有.latexmkrc:
vim.g.vimtex_compiler_latexmk = {
  executable = 'latexmk',
  options = {
    '-xelatex',
    '-no-recursion', -- 跳过latexmkrc配置
    '-file-line-error',
    '-synctex=1',
    '-interaction=nonstopmode',
  },
}

3. ,,映射没关联到正确的编译命令

有时候其他插件或者自定义配置会覆盖本地leader的,,映射,导致你按的不是VimTeX的实时编译命令VimtexCompile。

解决:

  • 直接在命令模式输:VimtexCompile启动编译,如果这样能正常跑,说明是映射的问题。可以手动重新绑定:
vim.api.nvim_create_autocmd('FileType', {
  pattern = 'tex',
  callback = function()
    vim.keymap.set('n', '<localleader><localleader>', '<cmd>VimtexCompile<CR>', {buffer = true})
  end
})

4. 看日志确认实际执行的命令

VimTeX有编译日志,能看到实际调用的latexmk命令到底带没带-xelatex参数。

解决:
在Vim里输:VimtexLog打开日志,搜开头是latexmk的行,看看有没有-xelatex。如果没有,那肯定是配置没生效,回到第1点检查加载顺序。


总结

最常见的就是配置加载时机不对或者全局latexmkrc干扰,先查这俩。直接用:VimtexCompile测试,再配合日志看实际命令,很快就能定位问题。

内容的提问来源于stack exchange,提问作者Prabhjot Singh Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:40:11