2017-07-18 5 views
2

LaTexファイルに自動スペルチェッカーを実行したい(特定のカスタム単語を検出するスペルに加えて)。 LaTexファイルを読んだり、文書テキスト中の特定の単語を見つけたり(LaTeXマークアップコードの一部である場合は単語を無視する)、LaTeXの強調マークアップの各単語をラップしてファイルを書き戻す必要があります。例えば。LaTexのマークアップを無視して、Pythonを使ってLaTexファイル内の単語を修正する

\title{My Document} 
... 
I won the title! 

「タイトル」を検索すると、「\タイトル」は無視されます。

これは、レンダリング時に、変性ラテックスは、私が例えばを追加ハイライトを使用して見つかった単語が表示されます、ようである:

\title{My Document} 
... 
I won the \colorbox{red}{title}! 

を、私は最終的には追加の解析/制御機能を必要とするかもしれないので、ライブラリが参考になるが、簡単な変更は私が今必要なものです。

LaTexのコマンドやコメントなどは、実際の本文から区別するのが難しいようです。

ありがとうございました。

答えて

1

これを行うには、Python LaTeXパーサが必要です。これは良い候補のように見えるhttps://github.com/alvinwan/TexSoup、そこにいくつか利用可能です。

BeautifulSoupのように、すべてのテキストノードを見つけることができる検索機能があります。通常のPythonの分割/検索機能を使用してスペルミスの単語を見つけてから、テキストノードを新しいラテックスノード選択された単語の回りに折り返し構文を持つ)。

TexSoupのドキュメントは、バックアウト文書の書き方のように少しは不明であるが、そのソースコードを見て、彼らはそう、repr機能を無効にするために表示されます。

with open('out.tex','w') as f: 
    f.write(repr(soup)) 

はあなたのためにそれを行う必要があります。あなたはdescendants発電機を見れば

EDIT

>>> [x for x in soup.descendants if isinstance(x, str)] 
['\x08egin', '(n.) A sacred fruit. Also known as:', '\x08egin', 'Here is the prevalence of each synonym.', '\x08egin', 'red lemon & uncommon ', 'Hello \textit', '.', 'Watermelon', 'red lemon', 'life', 'itemize', '& common', 'tabular', 'document'] 

"子どもたちは" str sおよびTexNode秒のミックスです。チェックのためにそこに純粋な弦を選び、自分で木を歩くだけです。 children属性には、TextNode要素のみが含まれています。

+0

ありがとうございます - 私はTexSoup(Latex2Pythonの一部として)を持っています。私は「すべてのテキストノードを見つける」ことができますか?ドキュメントは明快です。私はおそらくセクションの見出しのようなものでも "テキスト"をチェックする必要があります。受諾いただきありがとうございます。 – jqwha

+0

TextSoupコードを見ていました。あなたは正しい、彼らのドキュメントは吸う。ホールドオン、来る編集... – keredson

+0

調査してくれてありがとう!!私はこの種のコードの再帰的な断片を持っていますが、strの値を変更すると、ソースの "スープ"オブジェクトで更新されません。バハ!何かが間違っている必要があります! – jqwha

0

私が必要とするものを手に入れたので、Pythonは最適なフィッティング・インストゥルメントではありません。あなたが必要とするのは、sedまたはvimの編集者と編集スクリプトのグループです。 Pythonスクリプトを書くよりも速くて簡単に作業できます。

+0

私は一番難しいのはLaTexテキストを本文から区別することだと思います。簡単な検索と置換は非常に簡単です。 – jqwha

+0

あなたの例を見てください > "タイトル"を検索すると、 "\タイトル"は無視されます。 'vim'で頭字語を使うのは簡単でしょう – alexcleac

+0

私はsed正規表現の構文を知らないだけですが、私はほとんど同じように推測します。 この正規表現 '%s/[^ \\] \ zstitle/goooo/g'を使って' vim'で行うことができます。あなたが望むものに置き換えることができます。 – alexcleac

関連する問題