16

scons を使用してラテックス ドキュメントを作成しようとしています。特に、\input{} であるテーブルを含むファイルをメイン ドキュメントに生成する python プログラムを呼び出す scons を取得したいと考えています。私は scons のドキュメントに目を通しましたが、何をする必要があるのか​​すぐにはわかりません。

私が達成したいことは、本質的にこのメイクファイルで得られるものです:

document.pdf:  table.tex
    pdflatex document.tex

table.tex:
    python table_generator.py

これをsconsで表現するにはどうすればよいですか?

4

2 に答える 2

16

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

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

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

これは精神のみであることに注意してください。微調整が必​​要な場合があります。特に、「document.tex」の生成にどのようなセマンティクスが必要かはわかりません-毎回生成する必要がありますか? 存在しないときだけ?他のファイルが変更されたときは?(その場合、この依存関係を Command() の 2 番目の引数として追加する必要があります)。

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

于 2009-04-08T14:33:08.250 に答える
3

この単純なケースでは、最も簡単な方法は subprocess モジュールを使用することです

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

これらの行が SConstruct ファイルのどこに配置されているかに関係なく、SCons によって実行されるコンパイルとリンクの前に発生します。

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

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

于 2009-04-08T13:14:31.420 に答える