2013-01-06 15 views
6

Ich versuche, den TeXWorks-Editor so zu konfigurieren, dass er dieselbe Syntaxfarbe wie TeXMaker verwendet. TexWorks verwendet jedoch Regexes, um anzugeben, was gefärbt werden soll. Leider hat es keine Standardeinstellung für Mathematik.Regex, um LaTeX-Gleichungen zu entsprechen

will ich alles zwischen $ und $ übereinstimmen, alles zwischen \[ und \], alles zwischen \( und \), alles zwischen $$ und $$. Letzteres ist nicht sehr notwendig, da es in LaTeX-Dokumenten selten verwendet wird.

Es kann auch mehrere Regexes geben, um alle Fälle zu berücksichtigen.

Natürlich \$ ist entkam so dass ich nicht übereinstimmen soll, noch \\[ usw.

Dann ist alles zwischen \begin{equation} und \end{equation} Ich möchte auch passen, aber das ist einfach.

'Es kann nicht getan werden' ist eine mögliche Antwort.

+0

Warum haben die Antworten und Kommentare beim Bearbeiten der Frage nicht mehr angezeigt? – marczellm

+1

Oli hat seine Antwort als Reaktion auf Ihre Kritik gelöscht, so dass sie nicht mehr sichtbar ist. Ein Wort zu Ihrem Kommentar dort, obwohl: '\ (... \)' * kann verschachtelt sein (bedenke '\ (x = y + z \ text {wo \ (z \) ist der Fehler} \)' was ganz ist gültig). Das ist einer der Gründe, es zugunsten von '$ ... $' zu bevorzugen. Sie können dies jedoch der Einfachheit halber ignorieren. –

+0

@KonradRudolph Ja, das ist nicht wichtig. – marczellm

Antwort

6

dieses PCRE regex Versuchen:

(?<!\\) # 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\} 
) 
)))) 

Sehen Sie diese Regex in Aktion: https://regex101.com/r/wP2aV6/25

Da diese regex Rekursion verwendet es richtig verschachtelte mathematische Ausdrücke behandelt.

Dies funktioniert nur mit PCRE-kompatiblen Regex-Engines. Es erfordert einige erweiterte Funktionen von Regex-Engines, wie negatives Lookbehind, bedingte Ausdrücke und Rekursion, die nicht in allen Regex-Engines vorhanden sind.

+0

Leider scheint die Regex-Engine in TeXWorks (die wahrscheinlich Qt's QRegEx ist) einige von Ihnen verwendete Funktionen nicht zu unterstützen. Zitat: ["Lookbehind Assertions, unabhängige Teilausdrücke und bedingte Ausdrücke werden nicht unterstützt"] (http://doc.qt.digia.com/qt/qregexp.html) Ich verstehe, dass diese Funktionen notwendig sind, also scheint es, dass ich draußen bin Glück hier. Das betrifft nicht deine Regex, die sowieso korrekt ist, also danke für deine Arbeit. TeXWorks sollte zu einer anderen Regex-Engine wechseln, um Mathe-Hervorhebung zu unterstützen. – marczellm

+1

Wäre es möglich, Folgendes zu erkennen: Die öffnende $ muss unmittelbar rechts ein Zeichen haben, während das schließende $ unmittelbar links ein Zeichen haben muss. Somit werden $ 20.000 und $ 30.000 nicht als Mathe analysiert. Also können wir $ 20 Dollar haben und $ \ sum_ {i = 1}^{\ infty} $ – jmlopez

+0

meinst du ein Leerzeichen statt eines Charakters? –

Verwandte Themen