Ganz raffiniert automatisch Text formatieren mit rekursiven GREP-Befehlen
von Rudi Warttmann
Ganz raffiniert automatisch Text formatieren mit rekursiven GREP-Befehlen
Stufe 1: Text innerhalb von Klammern auszeichnen
Diese Situation kennen Sie aus der Praxis: Klammerausdrücke sollen ausgezeichnet werden, einschließlich der öffnenden und schließenden Klammer. Es gilt also, einen GREP-Befehl zu erstellen, der die öffnende Klammer, den Text bis zur nächsten schließenden Klammer und dann diese schließende Klammer findet.
Mithilfe dieses GREP-Befehls können Sie über die Absatzformatoptionen dem gefundenen Klammerausdruck automatisch ein vorher definiertes Zeichenformat zuweisen.
Was bedeutet »auszeichnen«?
Mit dem Fachausdruck »auszeichnen« ist ganz allgemein die abweichende Formatierung zur besonderen optischen Kennzeichnung gemeint; dies kann beispielsweise bedeuten, die Schrift auf »Fett«, »Kursiv« zu stellen oder einzufärben.
Der benötigte GREP-Befehl lautet:
\([^()]*\)
Im Klartext: eine öffnende Klammer \(, gefolgt von null oder mehr Zeichen, die aber weder öffnende noch schließende Klammer sind [^()]*, gefolgt von einer schließenden Klammer \).

Bild: Der GREP-Befehl zum Auffinden von Klammerausdrücken. Selbstverständlich können Sie auch nach eckigen, geschweiften oder spitzen Klammern suchen lassen; letztere tauchen z.B. in HTML-Tags wie <div> oder <h1> auf.
Möchten Sie leere Klammerpaare nicht auszeichnen, dann ersetzen Sie den Stern * im GREP-Ausdruck durch ein Plus-Zeichen +; dieses bedeutet »ein- oder mehrmal«.
Stufe 2: Verschachtelte Klammerausdrücke auszeichnen
Wenn nun der Fall auftritt, dass Klammerausdrücke ineinander verschachtelt sind, dann erzielt dieser GREP-Ausdruck zwar bei den inneren Klammern richtigerweise einen Treffer, aber er erreicht nicht den Gesamt-Klammerausdruck.

Bild: Der oben genannte GREP-Befehl findet nicht wie gewünscht den gesamten Klammerausdruck.
Hier können Sie seit InDesign CS6 zu einem Kniff in GREP greifen, der leider bis heute nicht dokumentiert ist: der rekursiven Anwendung eines GREP-Ausdrucks, ausgedrückt durch |?R. Geben Sie als GREP-String nun ein:
\(([^()]|(?R))*\)
Im Klartext: eine öffnende Klammer \(, gefolgt von null oder mehr Zeichen, die aber weder öffnende noch schließende Klammer sind [^()]* – aber einschließlich im Ausdruck enthaltener Klammerausdrücke, ausgedrückt durch die Rekursion |?R –, gefolgt von einer schließenden Klammer \).

Bild: Der rekursive GREP-Befehl findet nun auch den umschließenden Klammerausdruck.
Neue Ausdrücke seit InDesign CS6
Der GREP-Ausdruck |?R ist Teil einer kleinen Gruppe von Ausdrücken, die seit InDesign CS6 zur Verfügung stehen. Ebenfalls hingekommen sind insbesondere die Ausdrücke
- \h für alle horizontalen Leerräume einschließlich Tabulator sowie
- \v für alle Umbruchzeichen.
»Tipp der Woche« weiterlesen
Dieser »Tipp der Woche« war eine Woche lang für alle Besucher freigeschaltet. Nun ist er nur noch für registrierte Nutzer sichtbar.
Um also den ganzen Artikel lesen zu können, loggen Sie sich bitte ein oder registrieren Sie sich.
Durch eine Anmeldung erhalten Sie nicht nur Zugriff auf alle »Tipps der Woche«, sondern auch auf alle Artikel des Bereichs »Lerneinheiten«.