1

Python と pandoc を使用していくつかの html を latex に変換しようとしていますが、いくつかの問題に悩まされています。

私のpythonスクリプトをpandocと通信するために、私が使用しているファイルにsubprocess.Popenリダイレクトstdoutして、ラテックステンプレートに含めるために保存しています。

古典的な実装方法を使用する場合Popen

from subprocess import Popen, PIPE, STDOUT

filedesc = open('myfile.tex','w')
args = ['pandoc', '-f', 'html', '-t', 'latex']
p = Popen(args, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
outp, err = p.communicate(input=html)
filedesc.write(outp)

あるべきではない追加の新しい行を含む行を取得します。

> \textbf{M. John Harrison} (Rugby, Warckwickshire, 1945) は同時代の

>

>イギリスの作家。

これは (不思議なことに?) フstdout=PIPE​​ァイル記述子を変更することで簡単に解決できます。

from subprocess import Popen, PIPE, STDOUT

filedesc = open('myfile.tex','w')
args = ['pandoc', '-f', 'html', '-t', 'latex']
p = Popen(args, stdout=filedesc, stdin=PIPE, stderr=STDOUT)
outp, err = p.communicate(input=html)
# not needed
# filedesc.write(outp)

しかし、文字列バッファーを使用したい場合、stdout パラメーターとして使用できないため、同じ問題が発生します。

Popen/pandocがこれを行うのを止める方法について何か考えはありますか?

ありがとう!

4

1 に答える 1

1

うーん、pythonのPIPEの「一種のバグ」らしい(???)。

このコードを Windows システムで実行しています。これは、新しい行が入力されると、UNIX スタイルの (よりクリーンな) LF (\n) 改行ではなく、CR+LF (\r\n) スタイルになることを意味します。

pandoc によって変換される大きな html テキストを導入した時点で、出力はパイプによってコマンド ラインに返されます。したがって、標準の列幅に達するたびに、醜い「改行」文字が導入されます。私の場合は、CR+LF です。これは私の出力をとても奇妙に見せていました。

私が実装した汚い解決策はreplace('\r\n','\n')、出力を書き込む前に a を追加することですが、それが最もエレガントなものかどうかはわかりません。

from subprocess import Popen, PIPE, STDOUT

html = '<p><b>Some random html code</b> longer than 80 columns ... </p>'
filedesc = open('myfile.tex','w')
args = ['pandoc', '-f', 'html', '-t', 'latex']
p = Popen(args, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
outp, err = p.communicate(input=html)
filedesc.write(outp.replace('\r\n','\n'))**strong text**
于 2013-04-17T21:58:37.537 に答える