Jul
03

Workshop: Automatische 3er-Gruppen von Zahlen

Von Jochen F. Uebel

indesign_icon_klProblem: Via Word werden Zahlen geliefert: 4-, 5-, 6-, 7stellig. Im Satz sollen die Ziffern in 3er-Gruppen aufgetrennt werden, allerdings nicht, wie die DIN-Norm es scheinbar verlangt, mit Hilfe einfacher Leerschläge, sondern mit Hilfe fester Abstandswerte (Laufweite). Verschärfend kommt hinzu, dass in Word oft schon unerwünschte Leerschläge eingegeben worden sind: Sie gilt es zu löschen, bevor Laufweitenveränderungen wirklich zum Zug kommen können. Manuell kann das bei grösseren Werken ein ausgesprochen mühsames und fehlerträchtiges Unterfangen sein.

Zahlen-3er-Gruppen

Lösung: InDesigns Textmuster-Intelligenz. Schon mit Erscheinen von InDesign 5 (CS3) war das Programm in die Lage versetzt worden, abstrakte Textmuster zu finden («Suche Zahlen nach dem Muster XX XXX»). Seit Version 6 (CS4) kann die Software solche Textmuster auch automatisch formatieren.
Mit Hilfe dieser Textmuster-Intelligenz werden wir in Teilaufgabe 1 Leerschläge zwischen Ziffern entfernen. In Teilaufgabe 2 sorgen wir dafür, dass die Zahlen in 3er-Gruppen aufgeteilt werden – über automatische Laufweitenveränderung.

Aufgabe 1:

Wir suchen nach Leerschlägen, die zwischen Ziffern sitzen, und ersetzen durch nichts. «Ziffer—Leerschlag—Ziffer» ist ein Textmuster; also wählen wir beim Suchen/Ersetzen die Option GREP (die technische Abkürzung für Textmustersuche*).

Schritt 1:
Wir geben mit Hilfe der Spickzettel (1) als Suchbegriffe sogenannte «Platzhalter» ein: «Beliebige Ziffer»—«Beliebiger Leerschlag»—«Beliebige Ziffer». Wir erhalten die Formel \d\s\d.

Schritt 2:
Würden wir jetzt durch nichts ersetzen, würden wir solche Ziffer-Leerschlag-Ziffer-Gruppen gänzlich entfernen. Wir klammern deshab die «beliebigen Ziffern» ein: (\d)\s(\d). Die eingeklammerten Formeln sind jetzt Fundstellen, deren Inhalte InDesign sich merkt.

Schritt 3:
Mit Hilfe des Spickzettels schreiben wir in das Ersetzen-Feld die «Gefunden»-Formeln für die erste und zweite Fundstelle: $1$2.
Der Suchen/Ersetzen-Dialog sieht jetzt so aus (zum Vergrössern bitte klicken):

smi_Ziffern-Leerschlagsuche

Stimmt alles, können wir diese Suchroutine speichern (2) und «Alle ändern». Wenn wir nicht so mutig sein wollen, drücken wir schrittweise «Ersetzen/Suchen» (3). Das Ergebnis sind Zahlen ohne Leerschläge.

Aufgabe 2:

Wir sorgen für die Abstände der Ziffern (3er-Gruppen): diesmal allerdings über die Absatzeigenschaft «Innerhalb von Zahlen jede vierte Ziffer mit zusätzlicher Laufweite versehen – von rechts nach links». Vorteil: Werden Zahlen hinzugefügt oder geändert, sind die Ziffernabstände sofort immer wieder korrekt.

Schritt 1:
Wir legen ein Zeichenformat an, das nur eines «weiss»: Laufweite = 210 (Beispielwert; zum Vergrössern bitte klicken).

smi_Zeichenformat-Laufweite

Schritt 2:
Wir rufen in den Absatz- oder Absatzformateigenschaften den Dialog GREP-Stile auf und legen einen neuen GREP-Stil an.

Schritt 3:
Wir bestimmen als wirkendes Zeichenformat das neu erstellte Laufweiten-Format.

Schritt 4:
Die Ziffern, die zu verändern sind, sind alle Ziffern, denen 3 Ziffern folgen (nicht aber Ziffern, denen 4 Ziffern folgen),  Ziffern, denen 6 Ziffern folgen (nicht aber Ziffern, denen 7 Ziffern folgen), usw. Textmuster also: X‑XXX, X‑XXX‑XXX usw.
In der Zeile «Auf Text» beginnen wir deshalb wieder mit Hilfe des Spickzettels – suche nach jeder beliebigen Ziffer: \d

Schritt 5:
Über die «Entsprechungen» (Spickzettel) grenzen wir nun ein: 3 weitere Ziffern müssen folgen. Das ist im InDesign-bzw. GREP-Sprachgebrauch ein «Nach-vorne-Schauen mit positivem Ergebnis» oder «Muss anschliessend gefunden werden.» Kurz: «Positives Lookahead». Formel: (?=). Zu ergänzen durch das, was denn gefunden werden soll: 3 Ziffern. Also (?=\d3)? Nein. Damit InDesign versteht, dass wir nicht die Ziffer «3» meinen, sondern 3 Stück, setzen wir die 3 in geschweifte Klammern. Ergebnis: (?=\d{3})

Schritt 6:
Über die «Entsprechungen» grenzen wir weiter ein: Wenn 4 Ziffern folgen, soll InDesign sich zurückhalten. Es geht also wieder ums Nach-vorne-Schauen, jetzt aber mit negativem Ergebnis: «Darf im Anschluss nicht gefunden werden.» «Negatives Lookahead». Formel: (?!). Hinzu kommt wieder der Platzhalter für jede beliebige Ziffer (\d) und in geschweiften Klammern die 4. Ergebnis: (?!\d{4})
Und was ist mit Zahlen, denen 5 Ziffern folgen? Sie wurden durch die «4 nicht»-Anweisung schon erschlagen. Wem 5 folgen, dem folgen auch 4 – also verboten.

smi_GREP_3er-Gruppe_einf

Schritt 7:
Der gefundene GREP-Stil versagt, wenn Zahlen aus 7 oder 10 Ziffern bestehen (Milliarde, Billion). Kein Problem: Hier helfen abgewandelte Kopien dieses GREP-Stils (zum Vergrössern bitte klicken).

smi_GREP_3er-Gruppe_mehr

Manko:
Nicht alle GREP-Formeln sind in den Spickzetteln sichtbar. Adobes kleine GREP-Dokumentation und ein Video, an dessen Ende (ab Minute 3:50) auch der GREP-Stil angesprochen wird, hilft hier ein Stückweit weiter. Ein knappes Dutzend der sogenannten «Metazeichen», die dann noch fehlen, sind in unseren Kursokumentationen (InDesign-Advanced und InDesign-Inside) dokumentiert.

Nachtrag I:
4stellige Zahlen können auch Jahreszahlen sein – die nicht in 3er-Gruppen aufgeteilt werden dürfen. Taucht beides gleichzeitig auf, können weitere GREP-Stile korrigieren. Siehe auch die Kommentare. Zum Vergrössern bitte klicken:

smi_GREP_jahreszahl

Nachtrag II:
Häufig wird auf die Gliederung 4stelliger Ziffern gänzlich verzichtet. Dann muss der erste GREP-Stil etwas erweitert, können die zuletzt gezeigten Stile 4 und 5 aber wieder entfernt werden. Siehe Kommentare. (Zum Vergrössern erneut doppelklicken.)

smi_GREP_5-10stellige-ziffern

Nachtrag III:
Wird für 4stellige Zahlen unterschiedliches Verhalten gewünscht – z.B. Preise gegliedert, Jahreszahlen nicht –, bietet sich beispielsweise dieser GREP-Stil an:
\d(?=\d{3}\s[chf|CHF|eur|EUR])
Siehe wieder: Kommentare. Im Bild:

smi_GREP_jahr_vs_preis

_______________
* «GREP» ist «Global Regular Expression Print»: Software, die vorhandenen Text überall («global») nach wiederkehrenden Mustern («regular expression») durchsucht und die Fundstellen neu gestaltet ausgibt («print»).

Feedback? Immer gern!

twitter_logo

11 Kommentare

1

Hallo Jochen
Das hatte ich mir auch schon mal so entwickelt, aber man kann es (zumindest für den ersten Durchlauf = vierstellige Zahlen) nicht einsetzen, weils dann alle Jahreszahlen zerhaut … oder werden die bei Euch in der Schweiz auch so aufgeteilt …
Gruß aus dem Ruhrgebiet
Frank

2

Hallo Frank. Jahreszahlen werden auch in der Schweiz ohne Ziffernabstände gesetzt. Taucht in einem Text also beides auf – «normale» Zahlen und Jahreszahlen –, können weitere GREP-Stile helfen: Ich habe einen entsprechenden Screen ans Ende des Blogs gestellt. Das hierfür einzusetzende Zeichenformat darf nicht einfach «[Ohne]» sein, sondern muss die Laufweitenveränderung explizit zurückstellen (z.B. Laufweite = 0).
Finesse: Obgleich diese Zeichenformate dynamisch vergeben werden, können sie anschliessend gesucht und gefunden werden. So dass ein Check, ob 4stellige Zahlen berechtigterweise auf das Jahreszahl-Zeichenformat gestellt worden sind, leicht ist.

3
Marco MorgenthalerNo Gravatar
Juli 4th, 2009 at 13:43

Hallo Jochen

Eine Anmerkung zu deinem Nachtrag: Sollen Zahlen erst ab 5 Stellen gegliedert werden (was mir typografisch sinnvoll erscheint), reicht es nicht, wie von dir angegeben den ersten GREP-Stil gänzlich zu streichen. Wenn ich deine GREP-Ausdrücke richtig verstehe, werden dann nur Zahlen ab 7 Ziffern gegliedert, und die letzte Dreiergruppe überhaupt nicht mehr (Stil anwenden, wenn nachher 6 Ziffern folgen).

Wenn generell 4-stellige Zahlen gegliedert werden, wobei die Jahreszahlen 19?? und 20?? nachträglich wieder zurückgestellt werden, bleibt das Problem der Unterscheidung zwischen einer Jahreszahl (2008) und einer Mengenangabe (2000 Franken).

Eine einfachere Lösung (für Zahlen ab 5 Ziffern) findet sich auf http://www.hilfdirselbst.ch/foren/1000er_Trennzeichen_bei_%3Cb_style%3Dcolor%3A_black%3B_background-color%3A_FFFF80%3EZahlen%3C_b%3E_P312677.html#312677
(einfache GREP-Suche/Ersetzen ohne GREP-Stile)

Gruss, Marco

4

Hallo Jochen
Danke für die Ergänzung …
Das heisst jetzt aber doch, dass ich anschliessend via GREP-Suche alle \d(?=\d{3})(?!\d{4}) anspringen und nach optischer Kontrolle in z_laufweite-ziffern ersetzen muss? das ist doch nicht wirklich automatisierbar … ?
BTW: Danke für die Antwort am Samstag!!!!!
Gruß Frank

5

Hallo Marco, Du hast recht; vielen Dank: Soll erst ab 5stelligen Zahlen gegliedert werden, kann ich nicht den ersten gezeigten GREP-Stil einfach löschen. Ich muss ihn vielmehr verändern:
(?<!\<)\d(?=\d{3})(?!\d{4}):
«Formatiere die Ziffer, der 3 Ziffern folgen (aber keine 4) – vorausgesetzt, dieser Ziffer geht kein Wortbeginn voraus».
(Für Einsteiger: «kein Wortbeginn» ist erneut eine «Entsprechung», nun aber eine negative: «Negatives Lookbehind»; Formel: <!. «Wortbeginn» ist im Spickzettel eine «Position»; Formel: \<).
«Lookbehinds» (also «Zurück-Gucker») müssen vor den zu ändernden Zeichen eingegeben werden.
Damit es unsere Leser leichter haben, füge ich auch diesen Screen in den Blog ein.

6

Hallo Fank,
bin jetzt nicht 100%ig sicher, auf welchen Stand der Diskussion Du Dich beziehst. Ich stehe im Moment dort:
Sollen ausschließlich Jahreszahlen nicht gegliedert werden, bedarf es der gezeigten insgesamt Stile 4 und 5: Sie stellen die Gliederung bei allen Zahlen zurück, die mit «19» oder «20» beginnen.
Da solche Zahlen auch z.B. in Preisen etc. vorkommen können, kann zur Sicherheit anschliessend eine Textsuche nach dem Jahreszahlenformat gestartet werden – oder, noch besser, Du sagst es, eine GREP-Suche.

Wenn 4stellige Preise gegliedert werden sollen, Jahreszahlen aber nicht, wäre zu prüfen, ob die Preise noch mehr auszeichnet als nur 4stellige Ziffern. Vielleicht regelhaft eine hintangestellte Währungsangabe? Dann hiesse der GREP vielleicht so:
«Formatiere jede Ziffer, der 3 Ziffern UND Leerschlag UND chf oder CHF oder eur oder EUR folgen.»
Via Screenshot lässt sich dieser lange GREP schon nicht mehr zeigen; deshalb der Code hier:
\d(?=\d{3}\s[chf|CHF|eur|EUR])

7

Hallo Jochen
Marcos Post war noch nicht sichtbar bei mir, als ich meinen geschrieben hatte …

Vierstellige Zahlen müssen sehr wohl gegliedert werden. Ich verwende da auch keinen Wert wie 210 als Laufweitenkorrektur, sondern einen geringeren, der aber noch deutlich strukturiert. Die Ansicht, dass eine Gliederung erst ab fünfstellig anfangen soll, halte ich für falsch und für den Leser verwirrend. Bei sehr vielen Arten von Publikationen (ich mache zum Beispiel zwei- bis dreitausend Seiten geschichtlichen, wissenschaftlichen Satz im Monat) ist eine Unterscheidung von vierstelligen Zahlen und Jahreszahlen enorm wichtig.

Ich habe deine GREPs mit dem folgenden Satz getestet: “1805 haben 1806 Schweizer 1807 Rindviecher verzehrt.” Und nach deinen GREPs und den Ergänzungen habe ich nun herausbekommen:
“1805 haben 1 806 Schweizer 1 807 Rindviecher verzehrt.” Damit bin ich außerordentlich zufrieden!
Dank
sagt
Frank

8

Ergänzung:
Aber wir sollten jetzt kein Fass aufmachen, wer welche Zahlen wie spationieren möchte. Ich habe für meine Wünsche eine Lösung und wer es anders machen mag, kanns entsprechend abgespeckt auch!
Gruß Frank

9

Hallo Frank,
vielen Dank für das Feedback. Ja, natürlich: Die Spationierung «210» ist markant und diente vor allem der leichteren Lesbarkeit in diesem Blog.
Artikel, was wann wie gegliedert werden sollte, gibt es zuhauf: Mir gefiel dieser recht gut.
Was mich noch interessiert: Wie hast Du die Jahreszahl von den Schweizern und den (armen) Rindern unterschieden? Einfach nach dem Muster «… wenn “Schweizer” oder “Rindviecher” folgen»?

10

Hallo Jochen
ich habe heute was gelernt: Schweizer haben Humor! Recht so!
Spass beiseite: Wie in so vielen Fällen bei unserer Arbeit kommt es auf ein Rudiment von Intelligenz an, und das ist leider/oder zum Glück nicht in “regular expressions” zu pressen.
Gute Nacht für heute
Frank!

11

Hallo Frank,
habe noch keinen weiß-roten Pass – «leider», wie mir manchmal rausrutscht.
Sonntägliche Grüße aus Freiburg (im Breisgau)!

Hinterlassen Sie hier Ihren Kommentar