2013-01-06 13 views
6

TeXWorksエディタをTeXMakerと同じ構文カラーを使用するように設定しようとしています。しかし、TexWorksは正規表現を使用して何を色付けするかを指定します。残念ながら、それは数学のためのデフォルト設定を持っていません。RegexとLaTeXの式が一致する

私は $$の間のすべてを一致させたい

\[\]間 すべて、 \(\)間のすべてのもの、$$$$間 すべて。後者はLaTeX文書ではめったに使用されないのであまり必要ありません。

また、すべての場合に一致する正規表現が複数ある場合もあります。私はそれを一致させる必要はありませんので、当然のこと\$

がエスケープされず、またなど

\\[は、それから私はまた\begin{equation}\end{equation}の間のすべてを一致させたいが、それは簡単です。

「できません」は可能な回答です。

+0

質問を編集すると、回答とコメントが消えたのはなぜですか? – marczellm

+1

Oliはあなたの批評に答えて彼の答えを削除しましたので、もう見えません。しかし、あなたのコメントには次のような言葉があります: '\(... \)' *はネストすることができます( '\(x = y + z \ text {ここで\(z \)はエラーです} \)有効)。これが '$ ... $'を好む理由の一つです。ただし、簡単にするために無視することもできます。 –

+0

@KonradRudolphはい、それは重要ではありません。 – marczellm

答えて

6

このPCRE正規表現を試してみてください。

(?<!\\) # negative look-behind to make sure start is not escaped 
(?:  # start non-capture group for all possible match starts 
    # group 1, match dollar signs only 
    # single or double dollar sign enforced by look-arounds 
    ((?<!\$)\${1,2}(?!\$))| 
    # group 2, match escaped parenthesis 
    (\\\()| 
    # group 3, match escaped bracket 
    (\\\[)|     
    # group 4, match begin equation 
    (\\begin\{equation\}) 
) 
# if group 1 was start 
(?(1) 
    # non greedy match everything in between 
    # group 1 matches do not support recursion 
    (.*?)(?<!\\) 
    # match ending double or single dollar signs 
    (?<!\$)\1(?!\$)| 
# else 
(?: 
    # greedily and recursively match everything in between 
    # groups 2, 3 and 4 support recursion 
    (.*(?R)?.*)(?<!\\) 
    (?: 
    # if group 2 was start, escaped parenthesis is end 
    (?(2)\\\)| 
    # if group 3 was start, escaped bracket is end 
    (?(3)\\\]|  
    # else group 4 was start, match end equation 
    \\end\{equation\} 
) 
)))) 

はアクションでこの正規表現を参照してください:https://regex101.com/r/wP2aV6/25

この正規表現は、再帰を使用しているので、それが正しくネストされた数式を処理します。

これはPCRE互換の正規表現エンジンでのみ機能します。それは、すべての正規表現エンジンには存在しない負のlookbehind、条件式、および再帰のような正規表現エンジンのいくつかの高度な機能を必要とします。

+0

残念ながら、TeXWorksの正規表現エンジン(おそらくQtのQRegExです)は、使用した機能をサポートしていないようです。引用:["lookbehindアサーション、独立した部分式と条件式はサポートされていません"](http://doc.qt.digia.com/qt/qregexp.html)これらの機能が必要であることを理解していますここで運がいい。これはあなたの正規表現に関係なく、とにかく正しいので、あなたの仕事に感謝します。 TeXWorksは、数学の強調表示をサポートするために別の正規表現エンジンに切り替える必要があります。 – marczellm

+1

以下を検出することは可能でしょうか?開始$は右にすぐに文字を持っていなければなりませんが、終了$にはすぐ左に文字がなければなりません。したがって、$ 20,000と$ 30,000は数学として解析されません。だから私たちは$ 20ドルと$ \ sum_ {i = 1}^{\ infty} $ – jmlopez

+0

を持つことができます文字の代わりにスペースを意味するのですか? –