多数の LaTeX ファイルを 1 つずつ作成するプログラムがあります。これらの LaTeX ファイルを作成するときは、実際にエラーなしで .pdf にコンパイルできることを確認することが重要です。
そのために、 を使用しますsubprocess.call(['pdflatex', '-halt-on-error', tex_file_name])
。
a から aへの0
コンパイルが成功すると、それ以外の場合は 1が返されます。.tex
.pdf
私が抱えている問題は、このコード行が実行すべきだと思うことを実行しない唯一の状況は、それをpy.test
実行するときです。このコードをインタープリターから実行するか、コマンド ラインからスクリプトを実行すると、機能します。しかし py.test はそうではありません。
エラーがpy.test
発生すると、 によって作成されたログ ファイルが残りますpdflatex
。このファイルには、次のエラーが含まれています。
{c:/texlive/2012/texmf-var/fonts/map/pdftex/updmap/pdftex.map
!pdfTeX error: pdflatex.exe (file c:/texlive/2012/texmf-var/fonts/map/pdftex/up
dmap/pdftex.map): fflush() failed (Bad file descriptor)
==> Fatal error occurred, no output PDF file produced!
ここで、ファイルをコンパイルする前に何かpy.test
をしているという推測を危険にさらしています。しかし、私は何を知りません。.tex
pdflatex
一時ファイルとディレクトリについては、py.test docsで説明されています。それらが私の問題に関連しているかどうかはわかりませんが、簡単にいじっただけです。
コードを見たい場合は、テスト ケースは次のようになります。
from a import Foo
from b import Tree
from latex_tester import latex_tester
def test_Foo():
q1 = foo.Foo()
latex_tester(Tree(1, q1))
latex_tester は次のようになります。
import uuid
import os
import subprocess
def latex_tester(tree):
""" Test whether latex is compilable to a PDF.
"""
full_path = r'some_path'
uid = str(uuid.uuid1())
file_name = os.path.join(full_path, 'test' + uid + '.tex')
with open(file_name, 'w') as f:
_write_tree(f, tree)
retcode = subprocess.call(['pdflatex', '-halt-on-error', file_name])
if retcode != 0:
raise RuntimeError("This latex could not be compiled.")