1

こんにちは、次の問題で手を使うことができます。texファイルから図を抽出して別のファイルに入れるpythonスクリプトを作成しようとしています。入力ファイルは次のようなものです。

\documentclass[]....
\begin{document}

% More text

\begin{figure}    
figure_info 1
\end{figure}

\begin{figure}    
figure_info 2
\end{figure}    

%More text

出力ファイルは次のようになります。

\begin{figure}    
figure_info 1
\end{figure}

\begin{figure}    
figure_info 2
\end{figure}

助けてくれてありがとう。

4

4 に答える 4

3

答えてくれてありがとう、私は最終的にこのようにしました。おそらく最適な方法ではありませんが、機能します。提案されたソリューションのいくつかを試しましたが、それらを機能させるには微調整が必​​要です。

infile = open('data.tex', 'r')
outfile = open('result.tex', 'w')
extract_block = False
for line in infile:
    if 'begin{figure}' in line:
        extract_block = True
    if extract_block:
        outfile.write(line)
    if 'end{figure}' in line:
        extract_block = False
        outfile.write("------------------------------------------\n\n")

infile.close()
outfile.close()
于 2012-06-15T16:34:19.930 に答える
0

私はおそらく簡単な方法でファイル全体を文字列変数に読み込むでしょう。これ

import string

f = open('/tmp/workfile', 'r')
f = f.read()

text = string.split(f,"\begin{figure} ")

text.pop(0)

for a in text:
    a = string.split(a,"\end{figure}")
    print "\begin{figure}\n"
    print a[0]
    print "\end{figure}"

次のようにコマンドラインからこれを実行できます。

your_script.py > output_file.tex
于 2012-06-15T16:00:09.277 に答える
0
import re

# re.M means match across line boundaries
# re.DOTALL means the . wildcard matches \n newlines as well
pattern = re.compile('\\\\begin\{figure\}.*?\\\\end\{figure\}', re.M|re.DOTALL)

# 'with' is the preferred way of opening files; it
#    ensures they are always properly closed
with open("file1.tex") as inf, open("fileout.tex","w") as outf:
    for match in pattern.findall(inf.read()):
        outf.write(match)
        outf.write("\n\n")

編集:問題が見つかりました-正規表現ではなく、一致していたテストテキストで( \b をエスケープするのを忘れていました)。

于 2012-06-15T15:58:18.747 に答える