von Rudi Warttmann

Ganz raffiniert automatisch Text formatieren mit rekursiven GREP-Befehlen

In InDesign können Sie nahezu jede gewünschte Formatierung einstellen. Besonders hilfreich ist die Möglichkeit, innerhalb eines Absatzes bestimmte Textpassagen per GREP-Stil vollautomatisch mit einem Zeichenformat belegen zu können. Wie zeigen Ihnen, wie Sie diese Technik geschickt zur Formatierung bestimmter Textstellen einsetzen – sogar rekursiv.

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 \).

Einen Klammerausdruck auszeichnen

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.

verschachtelter 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 \).

Mit einem rekursiven GREP-Befehl auch verschachtelte Ausdrücke auszeichnen

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.

Zurück