-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 end
LaTexTools 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 event
pythonコンソールで実行されているように見えます。これは、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です。