【问题标题】:ST2 Plugin -- suggestions, please, for creating an event listenerST2 插件——请提供有关创建事件侦听器的建议
【发布时间】:2013-03-15 21:58:57
【问题描述】:

我正在使用 OSX TexLive (MacTeX),它不支持 -aux-directoryaux_dir 的 latexmk 选项。没有将辅助文件发送到其他地方的内置方法,而是将新的 *.pdf 文件保存在 *.tex 文件的工作目录中。因此,我可以清理工作目录,或者将 *.pdf 文件从 -output-directory 复制回工作目录。

我正在寻找一些建议,关于如何最好地创建一个事件侦听器,以触发以下任一 Sublime Text 2 插件的第二 (2) 阶段。第一阶段 (1) 是构建一个乳胶文档并创建一个 *.pdf(这需要时间)。第二阶段 (2) 是清理工作目录(使用带有小 -c 选项的内置 latexmk 脚本);或者,将 *.pdf 从 -output-directory 复制到包含 *.tex 文件的工作目录。两个插件都可以工作,并且第二阶段 (2) 配置了 10 秒 lambda 超时,以便latexmk 构建过程有机会在进入第二阶段 (2) 之前完成。 [latexmk 命令在这里有效(没有绝对路径),因为 $PATH 已使用不同的插件设置。]

有时,由于 *.tex 文档中的错误(例如拼写错误),LaTeX 文档无法正确构建。当构建过程失败时,没有必要清理或复制 *.pdf - 即,*.pdf 甚至可能还没有创建,或者它会包含错误。

问题的核心是正确构建 LaTeX 文档时出现的 event 究竟是什么?而且,构建失败时出现的event 到底是什么?

目标是在成功完成 LaTeX 构建后自动激活任一插件的第二 (2) 阶段。如果构建过程失败,则不要进行第二阶段 (2) -- 并显示错误消息 -- Ooops! The build process failed -- please check the *.tex document for errors.

任何帮助将不胜感激。

import sublime, sublime_plugin
import os, os.path, shutil

class LatexmkWorkingDirectory(sublime_plugin.TextCommand):
   def run(self, edit):
      self.view.window().run_command('exec', {'cmd': ["latexmk", "-r", "/Users/HOME/Library/Application Support/Sublime Text 2/Packages/User/0.latexmkrc/.latexmkrc", self.view.file_name() ]})
      sublime.set_timeout(lambda: self.view.window().run_command('exec', {'cmd': ["latexmk", "-c", "-r", "/Users/HOME/Library/Application Support/Sublime Text 2/Packages/User/0.latexmkrc/.latexmkrc", self.view.file_name() ]}), 10000)

class LatexmkOutputDirectory(sublime_plugin.TextCommand):
   def run(self, edit):
      path, file = os.path.split(self.view.file_name())
      prefix, suffix = os.path.splitext(file)
      self.view.window().run_command('exec', {'cmd': ["latexmk", "-r", "/Users/HOME/Library/Application Support/Sublime Text 2/Packages/User/0.latexmkrc/.latexmkrc", "-output-directory=/tmp", self.view.file_name() ]})
      sublime.set_timeout(lambda: shutil.copyfile('/tmp/' + prefix + '.pdf', path + '/' + prefix + '.pdf'), 10000)

虽然还不是提议的事件监听器插件的解决方案,但以下两行代码(当添加到 LaTexTools makePDF.py 的 the very end 时,将在成功完成构建 *.pdf 文件后自动清理。一个 lambda timeout 不是必须的。注意:需要将两行代码缩进到与self.window.active_view().run_command("jump_to_pdf", {"from_keybinding": True})相同的级别。

from subprocess import call
call(["latexmk", "-c", "-r", "/Users/HOME/Library/Application Support/Sublime Text 2/Packages/User/0.latexmkrc/.latexmkrc", self.file_name])

在 OSX 上安装 MacTeX 会在此处安装 latexmk 脚本(4.31 版):/usr/local/texlive/2012/texmf-dist/scripts/latexmk/latexmk.pl。至于那个 perl 脚本,可以在行 5511 周围添加一个清理命令,就在行 print "$My_name: All targets (@dests) are up-to-date\n"; 之后。 [注:latexmk 当前版本为 4.35。 -aux-directory 限制在 TexLive(不是 latexmk)内——即,latexmk 依赖于 TexLive 来完成所有的魔法。]

已知问题:硬连接 latexmk.pl 脚本进行清理将阻止 LaTexTools 插件发挥其魔力,因为它依赖于 *.log 文件。如果该 *.log 文件很快被清理,那么魔法就被打破了。所以,如果使用 LaTexTools,我们可以硬连线makePDF.py 的最后两行。或者,我们可以硬连线 latexmk.pl 而不使用 LaTexTools。

注意:latexmk.pl (v. 4.31) 的第 5510 行可能是在 python 控制台中运行的 the event,它可能会被 Sublime 插件监听,所以无需修改 latexmk.pl 脚本即可自动实现该清理。需要做进一步的研究,看看插件是否可以监听控制台输出作为后续命令行的触发事件。如果依赖 LaTeXTools 插件,则可能需要依赖 *.log 文件和/或该插件的 the event 输出(而不是第 5510 行)。

        print "$My_name: All targets (@dests) are up-to-date\n";
        print "$My_name: Cleanup (@dests) -- hardwired @ lines 5511 to 5513\n";
        system("latexmk", "-r", "/Users/HOME/Library/Application Support/Sublime Text 2/Packages/User/0.latexmkrc/.latexmkrc", "-c", @dests);
        print "$My_name: Cleanup (@dests) -- complete!\n";

对于 4.35 版本,行是 5676 到 5678。

【问题讨论】:

    标签: latex sublimetext2 sublimetext pdflatex


    【解决方案1】:

    与事件侦听器相比,执行此项目的更好方法是使用 subprocess.check_call 和调用。 && 的 bash 等效项。

    Python equivalent to Bash: `latexmk file.tex && latexmk -c file.tex`

    特别感谢 John Collins 博士。 (latexmk 的作者)。

    https://github.com/lawlist/LaTexTools-Unofficial-Modification

    https://github.com/lawlist/ST2-plugin-latexmk-save-build-clean

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-19
      • 2013-05-13
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      相关资源
      最近更新 更多