5

そこからPDFドキュメントを生成するLaTeXコードを生成しようとしています。現在、コードを動的に作成するためにDjangoテンプレートシステムを使用していますが、ここから先に進む方法についてはわかりません。コードを .tex ファイルに保存し、サブプロセスを使用して pdflatex を実行して PDF を生成できることを理解しています。しかし、「プレーンな」Python で LaTeX コードをエスケープするのに非常に苦労したため、Django テンプレート システムを使用することにしました。Django によって生成された出力を pdflatex にパイプする方法はありますか? 生成されたコードは正常に動作していますが、どうすればよいかわかりません。

前もって感謝します

4

1 に答える 1

6

以前に取り組んだプロジェクトで同じ問題に取り組んでいましたが、LaTeX が生成する中間ファイルの処理が心配だったので、出力をパイプする代わりに、一時フォルダーに一時ファイルを作成しました。これは私が使用したコードです (これは数年前のもので、まだ Python/Django に慣れていないときからです。今日これを書いていれば、もっと良いものを思いつくことができると確信していますが、これは間違いなく私にとってはうまくいきました) ):

import os
from subprocess import call
from tempfile import mkdtemp, mkstemp
from django.template.loader import render_to_string
# In a temporary folder, make a temporary file
tmp_folder = mkdtemp()
os.chdir(tmp_folder)        
texfile, texfilename = mkstemp(dir=tmp_folder)
# Pass the TeX template through Django templating engine and into the temp file
os.write(texfile, render_to_string('tex/base.tex', {'var': 'whatever'}))
os.close(texfile)
# Compile the TeX file with PDFLaTeX
call(['pdflatex', texfilename])
# Move resulting PDF to a more permanent location
os.rename(texfilename + '.pdf', dest_folder)
# Remove intermediate files
os.remove(texfilename)
os.remove(texfilename + '.aux')
os.remove(texfilename + '.log')
os.rmdir(tmp_folder)
return os.path.join(dest_folder, texfilename + '.pdf')

このdest_folder変数は通常、メディア ディレクトリ内のどこかに設定されているため、PDF を静的に提供できます。返される値は、ディスク上のファイルへのパスです。その URL がどうなるかのロジックは、 を設定する関数によって処理されますdest_folder

于 2010-07-16T00:28:08.253 に答える