2009-04-08 12 views
16

私はsconsを使ってラテックス文書を作成しようとしています。特に、私はsconsに\ input {}というテーブルを含むファイルをメイン文書に生成するpythonプログラムを呼び出させたいと思っています。私はsconsのドキュメンテーションを見てきましたが、すぐに私に何をする必要があるか分かりません。私が達成したい何sconsに外部スクリプトを呼び出す方法は?

は、あなたがこのメイクファイルになるだろうどのような本質的である:

document.pdf: table.tex 
    pdflatex document.tex 

table.tex: 
    python table_generator.py 

私はsconsの中でこれを表現するにはどうすればよいですか?この単純なケースで

答えて

16

これらの線に沿って何かを行う必要があります -

env.Command ('document.tex', '', 'python table_generator.py') 
env.PDF ('document.pdf', 'document.tex') 

それはdocument.texは「Pythonスクリプトを呼び出すことによって生成されることを宣言し、このgeneratd「document.tex」から作成されるPDFドキュメントを要求ファイル。

これは念頭に置くだけであることに注意してください。いくつかの調整が必要な場合があります。特に、私はいつも 'document.tex'の生成のためにどのようなセマンティクスを望んでいるのかは分かりません。それが存在しないときだけ?他のファイルが変わったら? (この依存関係をCommand()の2番目の引数として追加したいと思うでしょう)。

さらに、必要に応じてCommand()の出力をPDF()の入力として使用できます。明確にするために、私はそれをしなかった。

4

、最も簡単な方法は、ちょうど関係なく、あなたSConstructファイルにこれらの行が配置されている場合、彼らはコンパイルのいずれかの前に起こるのだろうとによって実行されるリンクする

from subprocess import call 
call("python table_generator.py") 
call("pdflatex document.tex") 

をsubprocessモジュールを使用することですSCons。

これらのコマンドは、ファイルが変更されたときだけでなく、SConsを実行するたびに実行されるという欠点があります。これは、サンプルのMakefileで起こることです。したがって、これらのコマンドが実行に時間がかかる場合、これは良い解決策ではありません。

ファイルが変更されたときにこれらのコマンドを実行する必要がある場合は、SConsのマニュアルセクションWriting Your Own Buildersを参照してください。

+3

これはラテックススキャナとどのように統合されていますか? SConstructにまだPDF(target = 'document.pdf'、source = 'document.tex')を置くことはできますか? – saffsd

関連する問題