如何在 Sublime Text 2 中的 pdflatex 和 xelatex 转换之间切换?

slh*_*hck 9 latex xetex texlive sublime-text-2 macos

我经常在编译“经典”LaTeX 和 XeTeX 文档之间切换。

Sublime Text 2 有一个名为LaTeXTools的包,它允许你通过一个简单的CmdB. 整洁的。

构建文件LaTeX.sublime-build显然存在于标准包文件夹中,您可以将其复制到您的User文件夹中进行自定义。在这里,它允许您更改提供给 的参数latexmk,即从 切换pdflatexxelatex,例如像这样:

"cmd": ["latexmk", "-cd",
  //"-e", "\\$pdflatex = 'pdflatex %O -interaction=nonstopmode -synctex=1 %S'",
  "-e", "\\$pdflatex = 'xelatex %O -interaction=nonstopmode -synctex=1 %S'",
  //"-silent",
  "-f", "-pdf"],
Run Code Online (Sandbox Code Playgroud)

现在,每次打开另一个文档时都必须这样做非常乏味——打开我的构建首选项,注释掉一行,保存等。

理想情况下,我希望能够切换引擎

  • ... 自动- 例如 TextMate 以某种方式做到这一点CmdR,尽管 TextMate 配置设置为pdflatex. 也许是一些latexmk.pl-fu,我不知道。

  • ...使用简单的键盘快捷键或设置– 也许按CmdLCmdX或类似的。这将在pdflatex和之间切换xelatex

我怎么能这样设置?

slh*_*hck 12

注意: LaTeXTools for Sublime Text 现在支持自动引擎检测,如果您的文件以 开头%!TEX program = <program>,其中<program>pdflatexxelatex或 中的任何一个lualatex。仅当您出于任何原因需要手动切换引擎时,才需要以下说明。


LaTeX.sublime-build文件LaTeXTools夹中的文件~/Library/Application Support/Sublime Text 2/Packages复制到~/Library/Application Support/Sublime Text 2/Packages/User/,但执行两次并为这些文件指定以下名称:

  • LaTeX.sublime-build.latex
  • LaTeX.sublime-build.xetex

更改文件以分别使用pdflatex用于 LaTeX 的和xelatex用于 XeTeX 的引擎(如问题所示)。

然后,通过Tools » New Plugin...创建一个新插件(保存switch.py到上面的位置):

import sublime, sublime_plugin, os, shutil, filecmp

class SwitchCommand(sublime_plugin.ApplicationCommand):
  def run(self):
    folder = os.path.expanduser( \
        '~/Library/Application Support/Sublime Text 2/Packages/User/')
    latex_src = folder + 'LaTeX.sublime-build.latex'
    xetex_src = folder + 'LaTeX.sublime-build.xetex'
    dest = folder + 'LaTeX.sublime-build'

    if filecmp.cmp(dest, latex_src):
      sublime.status_message("Switching to XeTeX")
      shutil.copy(xetex_src, dest)
    else:
      sublime.status_message("Switching to LaTeX")
      shutil.copy(latex_src, dest)
Run Code Online (Sandbox Code Playgroud)

并在Preferences » Key Bindings – User 中为它创建一个键盘快捷键:

[ {
  "keys": ["super+shift+x"], "command": "switch"
} ]
Run Code Online (Sandbox Code Playgroud)

您还可以通过将Main.sublime-menu文件添加到您的User包来将其添加到您的菜单中:

[ {
    "id":"tools", "children":
    [ {
        "command": "switch",
        "caption": "Switch between LaTeX/XeTeX"
      }
    ]
} ]
Run Code Online (Sandbox Code Playgroud)

现在,这会将当前活动的构建文件与 XeTeX 和 LaTeX 所需的构建设置进行比较,并在必要时切换它们。

这肯定会使用一些改进,但它目前有效。