1

-aux-directoryまたはのlatexmkオプションをサポートしていないOSXTexLive(MacTeX)を使用していますaux_dir。補助ファイルを別の場所に送信する組み込みの方法はありませんが、新しい*.pdfファイルを*.texファイルの作業ディレクトリに保持します。したがって、作業ディレクトリをクリーンアップするか、*。pdfファイルを作業ディレクトリにコピーして-output-directory戻すことができます。

以下のSublimeText2プラグインのいずれかのフェーズ2をトリガーするイベントリスナーを作成するための最良の方法について、いくつかの提案を探しています。フェーズ1(1)は、ラテックスドキュメントを作成し、*。pdfを作成することです(これには時間がかかります)。-cフェーズ2(2)は、作業ディレクトリをクリーンアップすることです(小さなオプションで組み込みのlatexmkスクリプトを使用します)。または、-output-directory*。pdfを*.texファイルを含む作業ディレクトリにコピーします。プラグインは両方とも機能し、フェーズ2は10秒のラムダタイムアウトで構成されているため、latexmkビルドプロセスはフェーズ2に進む前に終了する機会があります。[は別のプラグインで設定されているlatexmkため、コマンドはここで(絶対パスなしで)機能し$PATHます。]

* .texドキュメントのエラー(タイプミスなど)が原因で、LaTeXドキュメントが正しくビルドされない場合があります。ビルドプロセスが失敗した場合、*。pdfをクリーンアップまたはコピーする必要はありません。つまり、*。pdfが作成されていないか、エラーが含まれている可能性があります。

event問題の核心は、LaTeXドキュメントが正しくビルドされたときに何が起こるかということです。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)

提案されたイベントリスナープラグインの解決策はまだありませんが、次の2行のコード(the very endLaTexTools makePDF.pyに追加すると、*。pdfファイルのビルドが正常に完了すると自動的にクリーンアップされます。ラムダタイムアウトは必要ありません。注) :2行のコードをと同じレベルにインデントする必要があります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です。制限はTexLive内にあります(latexmkではありません) 。-aux-directoryつまり、latexmkはTexLiveに依存してすべての魔法を実行します。]

既知の問題:latexmk.plスクリプトをハードワイヤリングしてクリーンアップすると、*。logファイルに依存するため、LaTexToolsプラグインがその魔法を実行できなくなります。その*.logファイルがすぐにクリーンアップされると、魔法は壊れます。したがって、LaTexToolsを使用している場合は、の最後の2行を配線することができmakePDF.pyます。または、latexmk.plを配線して、LaTexToolsを使用しないようにすることもできます。

注:latexmk.pl(v。4.31)の5510行目は、おそらくthe eventpythonコンソールで実行されているように見えます。これは、Sublimeプラグインでリッスンできる可能性があるため、latexmk.plスクリプトを変更せずにクリーンアップを自動的に実装できます。 。プラグインが後続のコマンドラインのトリガーイベントとしてコンソール出力をリッスンできるかどうかを確認するには、さらに調査を行う必要があります。LaTeXToolsプラグインに依存している場合は、the event(5510行目ではなく)*。logファイルおよび/またはそのプラグインによる出力に依存する必要があります。

        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です。

4

1 に答える 1

0

イベントリスナーではなく、このプロジェクトを実行するためのより良い方法は、subprocess.check_callとcallを使用することでした。に相当するbash &&

Bashと同等のPython: `latexmk file.tex && latemk -c file.tex`

ジョン・コリンズ博士に感謝します。(latexmkの作者)。

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

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

于 2013-03-30T20:25:51.180 に答える