1

多数の 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をしているという推測を危険にさらしています。しかし、私は何を知りません。.texpdflatex

一時ファイルとディレクトリについては、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.")
4

2 に答える 2

1

私はまったく同じ問題を抱えていました。

.tex ドキュメントを作成するためのプログラミング言語として C# を使用していますが、PDF に画像を含めたときに pdflatex 中にクラッシュしました。

そして、手動で開始した場合は機能しました...

エラー:

pdfTeX warning: pdflatex
!pdfTeX error: pdflatex (file <linktoFile>/file.pdf): fflush() failed (Bad file descriptor)

残念ながら、xelatexも機能しなかったので、検索して最終的に見つけました。

基本的に、この行でエラーが発生しました:

string tex = tex.Replace("\uFFFD\uFFFDMEMNAME\uFFFD\uFFFD", user.Surname)

ここで user.Surname は null でした。

tex 文字列がファイルに保存されると、不思議なことに null が記憶され、pdflatex はまったく別の場所でクラッシュします。一方、同じファイルで pdflatex を手動で再度開始すると、null がなくなり、機能します。

姓を入力すると、すべての混乱がなくなり、プログラムから機能するようになりました。

たぶん、これは同じ問題を抱えている人を助けるでしょう。

于 2014-06-04T09:31:29.340 に答える
1

奇妙なことに、「pdflatex」の代わりに「xelatex」を使用すると、正常に動作します。

将来の読者のために-おそらくこれらの両方のツールをインストールしたTeXworksをインストールしました。xelatex が生成される最終的な pdf に影響するかどうかはわかりません。良い.pdfを生成しているようです

とにかく、他に何も来ていないようで、確かに私の問題を解決したので、私は自分の質問にこの答えを出しました。

于 2013-09-09T03:14:51.113 に答える