Latex ST2插件——请提供创建事件侦听器的建议

Latex ST2插件——请提供创建事件侦听器的建议,latex,sublimetext2,sublimetext,pdflatex,Latex,Sublimetext2,Sublimetext,Pdflatex,我使用的是OSX TexLive MacTeX,它不支持-aux directory或aux_dir的最新XMK选项。没有内置方法将辅助文件发送到其他地方,但将新的*.pdf文件保存在*.tex文件的工作目录中。因此,我可以清理工作目录,或者将*.pdf文件从-output目录复制回工作目录 我正在寻找一些建议,请,关于如何最好地创建一个事件监听器,将触发第二阶段2的任何崇高文本2插件下面。第一阶段1是构建一个latex文档并创建一个*.pdf,这需要时间。第二阶段是使用带有little-c选项

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

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

有时LaTeX文档由于错误(例如,*.tex文档中的打字错误)而无法正确生成。如果生成过程失败,则无需清理或复制*.pdf文件-即*.pdf文件可能尚未创建,或者它将包含错误

问题的核心是正确构建LaTeX文档时发生的事件到底是什么;那么,构建失败时发生的事件到底是什么

我们的目标是在成功完成LaTeX构建后,任何一个插件的第二阶段都会自动激活。如果构建过程失败,那么不要进入第二阶段2-并显示错误消息-Ooops!生成过程失败-请检查*.tex文档中的错误

任何帮助都将不胜感激

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的末尾时,将在成功构建*.pdf文件后自动清理。不需要lambda超时。注意:有必要将两行代码缩进self.window.active_view.run_commandjump_to_pdf,{from_keybinding:True}的同一级别

在OSX上安装MacTeX将在此处安装latexmk脚本版本4.31:/usr/local/texlive/2012/texmf dist/scripts/latexmk/latexmk.pl。对于该perl脚本,可以在第5511行附近添加一个cleanup命令,就在print$My_name:All targets@dests是最新的\n;行之后;。[注:latexmk的当前版本为4.35,-aux目录限制在TexLive而非latexmk范围内-即latexmk依赖TexLive来完成所有功能。]

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

注意:latexmk.pl v的第5510行似乎是。4.31可能是在python控制台中运行的事件,可以使用Sublime插件监听该事件,以便在不修改latexmk.pl脚本的情况下自动实现清理。需要做进一步的研究,看看插件是否可以监听控制台输出作为后续命令行的触发事件。如果依赖LaTeXTools插件,那么可能需要依赖该插件的*.log文件和/或输出来处理事件,而不是第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。

与事件侦听器相比,执行此项目的更好方法是使用subprocess.check\u call和call。bash等价于&&

特别感谢约翰·柯林斯博士。latexmk的作者

        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";