[GastForen Programme Print/Bildbearbeitung Adobe InDesign Klammerpaare

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Klammerpaare

vglue
Beiträge gesamt: 14

10. Aug 2012, 23:57
Beitrag # 1 von 16
Bewertung:
(10822 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag oder Abend,

gibt es möglicherweise ein Skript oder ein Tool, nach dessen Anwendung ich in Texten auf einen Blick sehe, ob eine öffnende Klammer -- rund, eckig oder geschweift -- eine schließende Entsprechung hat? Also am besten so, dass der Text innerhalb des Klammerpaars geeignet eingefärbt ist. (So, wie ich's von einfacheren Editioren -- WinEdt o.ä. -- kenne.)

Von mir aus auch zur Anwendung im Textmodus, obwohl ich den sonst praktisch nie benutze (eigtl. nur, wenn ich versehentlich die englische Tastatur eingeschaltet habe und Ctr-Z taste ;-) ).

Vielen Dank für jeden Tipp.
X

Klammerpaare

Marco Morgenthaler
Beiträge gesamt: 2474

11. Aug 2012, 10:38
Beitrag # 2 von 16
Beitrag ID: #499268
Bewertung:
(10766 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo vglue

Eine klassische Aufgabe für Grep. Das Grundmuster für Text in Klammern ist:
\([^)]+\) oder \([^(]+\). Unten sind die verschiedenen Klammern (rund, eckig, geschweift) mit «Oder» | aneinandergereiht.

Suchen:
\([^(]+\)|\[[^[]+\]|\{[^{]+\}
Format ersetzen:
Zeichenfarbe z. B. Magenta

Text innerhalb eines Klammerpaars werden inklusive Klammern eingefärbt.

Um öffnende Klammern zu finden, bei denen die schliessende Klammer fehlt, kannst du nach Einfärben der Klammerausdrücke alle Klammern finden, die nicht eingefärbt sind:

Suchen:
[([{]
Format suchen:
Zeichenfarbe [Schwarz]

Wenn du die Grep-Ausdrücke hier kopierst, achte darauf, dass keine (unsichtbaren) Leerstellen am Schluss mitkopiert werden.

Grüsse, Marco


als Antwort auf: [#499262]

Klammerpaare

-hans-
Beiträge gesamt: 748

11. Aug 2012, 12:25
Beitrag # 3 von 16
Beitrag ID: #499269
Bewertung:
(10722 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

vorausgesetzt es gibt keine verschachtelten Klammerungen ...
Dann wird es eine Doktorarbeit dafür enen Grep zu schreiben ;-)


als Antwort auf: [#499268]

Klammerpaare

pixxxelschubser
Beiträge gesamt: 1708

11. Aug 2012, 12:44
Beitrag # 4 von 16
Beitrag ID: #499271
Bewertung:
(10706 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von vglue … Also am besten so, dass der Text innerhalb des Klammerpaars geeignet eingefärbt ist …


Dafür hat dir Marco ja den entsprechenden Grep bereits geliefert.


Zitat von vglue … nach dessen Anwendung ich in Texten auf einen Blick sehe, ob eine öffnende Klammer -- rund, eckig oder geschweift -- eine schließende Entsprechung hat? …


Manchmal ist es sicherlich sinnvoller, zu sehen, ob es keine schließende Entsprechung gibt. Aber in Verbindung mit der o.g. Aufgabenstellung wird es dann ziemlich bunt (siehe nachfolgender Screenshot)

http://www.abload.de/...aare_findenn9up1.png

Und wie -hans- bereits erwähnte: Das ist bereits eine halbe Doktorarbeit und wenn dann noch Verschachtelungen hinzukommen – na dann gut Nacht.


als Antwort auf: [#499262]

Klammerpaare

Marco Morgenthaler
Beiträge gesamt: 2474

11. Aug 2012, 13:00
Beitrag # 5 von 16
Beitrag ID: #499272
Bewertung:
(10699 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo

Ich verstehe das Problem mit den verschachtelten Klammern nicht ganz (so es denn welche gibt). Mein Grep funktioniert auch dann, das heisst, es wird der gesamte Klammerausdruck (inkl. verschachtelter Klammern) eingefärbt.

blabla (bla bla [bla bla] bla bla) blabla

Falls gewünscht kann nachher der Grep für eckige Klammern (als Beispiel) gestartet werden, mit folgendem Ergebnis:

blabla (bla bla [bla bla] bla bla) blabla

Und die Klammern ohne schliessende Entsprechungen werden ja mit meinem zweiten Grep einfach gefunden und können dann manuell vervollständigt werden.

Dafür braucht es keine Doktorarbeit =;o)

Ein schönes Wochenende, Marco


als Antwort auf: [#499271]

Klammerpaare

WernerPerplies
Beiträge gesamt: 2762

11. Aug 2012, 13:30
Beitrag # 6 von 16
Beitrag ID: #499273
Bewertung:
(10665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marco,

Zitat Ich verstehe das Problem mit den verschachtelten Klammern nicht ganz


Ich schon.

Schau mal (nicht in InDesign, aber da sollte es nicht viel anders sein):
geschachtelte runde Klammer

Und dieser Fall kommt zumindestens beim Programmieren sehr häufig vor.


als Antwort auf: [#499272]
(Dieser Beitrag wurde von WernerPerplies am 11. Aug 2012, 13:31 geändert)

Klammerpaare

vglue
Beiträge gesamt: 14

11. Aug 2012, 13:52
Beitrag # 7 von 16
Beitrag ID: #499275
Bewertung:
(10647 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo und guten Tag!

Erst einmal vielen vielen Dank für die bisherigen Antworten. Insbesondere an Marco!

Als Vorbemerkung: Anlass für meine Frage war (ist), dass ich einen fast-200-Seiten-Text in Bearbeitung habe, in dem etwa (mindestens) 15 Klammerpaare pro Seite vorkommen, und zwar in Literaturangaben. Der Autor wollte sowohl etwas schreiben wie
(bla bla [bla] bla)
als auch, ggfs., etwas wie
(bla bla [bla] bla [bla] bla).

Dabei hat er, scheint's, selbst ein bisschen den Überblick verloren; daher hat er nicht alles geschlossen, was er mal geöffnet hatte. Oder umgekehrt: geschlossen, ohne geöffnet zu haben. Der pixxxelschubser hat völlig richtigerweise darauf hingewiesen, dass es ja eher darum geht, die *Nicht*-Paare zu finden.

Was ich nun machen kann (Danke, Marco) ist, die offensichtlich richtigen Paare einzufärben und mich auf die schwarzen Klammern zu konzentrieren. Das hilft mir schon *sehr* viel weiter.

Für mein Problem reicht diese Vorgehensweise wohl aus – in einem mathematischen Text (mit einseitig offenen Intervallen, zum Beispiel) könnte das allerdings möglicherweise so nicht ausreichend sein …

Dankeschön also nochmals,
und ein schönes Wochenende, weiterhin!


als Antwort auf: [#499262]

Klammerpaare

vglue
Beiträge gesamt: 14

11. Aug 2012, 14:00
Beitrag # 8 von 16
Beitrag ID: #499276
Bewertung:
(10639 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Achso, vergessen:

Ich wollte noch erklären, was ich *ursprünglich* mit dem Einfärben meinte.

In WinEdt kann man – während der Bearbeitung – durch geeignet farbige Einstellungen verfolgen, welche schließende Klammer zu welcher öffnenden gehört. Oder sogar: Gibt es eine Abführung zu einer Anführung? [Oder gar: Gibt es ein \end{equation} zu einem \begin{equation}?]

Und ich dachte mir, so etwas könnte möglicherweise auch in InDesign implementierbar sein. Ähnlich wie nach Anwendung des Top-Top-Skripts "ShowHideLocalFormatting" – welches mir sofort anzeigt, wenn es eine Abweichung vom Format gibt.

Aber wie gesagt: Ich komme jetzt auch mit Marcos GREP-Abfrage wunderbar zurecht! ;-)


als Antwort auf: [#499262]

Klammerpaare

Marco Morgenthaler
Beiträge gesamt: 2474

11. Aug 2012, 14:04
Beitrag # 9 von 16
Beitrag ID: #499277
Bewertung:
(10638 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@ Werner: Ah, jetzt verstehe ich. Es geht um gleichartige Klammern, die verschachtelt sind. In einer einfachen Verschachtelung wie (blabla (bla) blabla (bla) blabla) sollte der folgende Grep die ganze Klammer (mit oder ohne zusätzliche verschachtelte Klammern der gleichen Art) finden:

\([^(]*((\([^(]+\))[^(]*)*\)

Um übrigens nur zusammenhängende Klammern zu finden, müsste der grundlegende Grep leicht ergänzt werden, also beide Klammern () in der neg. Zeichenklasse:

\([^)(]+\)

Es scheint, dass das Problem von vglue aber nichts mit dieser Art von Verschachtelung zu tun hat (wie ich jetzt lese).

Gruss, Marco

EDIT @ vglue: Um fehlende schliessende Klammern zu finden, könntest du auch folgenden Grep laufen lassen (am Beispiel der runden Klammern):

\((?![^(]+\))

Da aber fehlende öffnende Klammern nicht analog gefunden werden (Lookback funktioniert nicht gleich wie der Lookahead), weiss ich jetzt auch keine andere Lösung als mit dem Einfärben. Im zweiten Grep müssen dann die Klammern paarweise stehen:

[()[\]{}]


als Antwort auf: [#499273]
(Dieser Beitrag wurde von Marco Morgenthaler am 11. Aug 2012, 14:15 geändert)

Klammerpaare

vglue
Beiträge gesamt: 14

11. Aug 2012, 14:11
Beitrag # 10 von 16
Beitrag ID: #499278
Bewertung:
(10631 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Übrigens (ich bin danach erstmal ruhig, versprochen!) verstehe ich tatsächlich nicht, warum ich zu dieser meiner Problemstellung weder hier noch sonstwo auch nur eine Erwähnung, geschweige denn eine Lösung gefunden habe.

Ich hätte eher gedacht, das ist eine Frage, auf die alle Textver- und -bearbeiter irgendwann mal stoßen. So kann man sich täuschen.


als Antwort auf: [#499262]

Klammerpaare

WernerPerplies
Beiträge gesamt: 2762

11. Aug 2012, 14:16
Beitrag # 11 von 16
Beitrag ID: #499279
Bewertung:
(10610 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marco,

der erste Ausdruck findet das äußere Paar, der zweite das innere Paar, aber ich kann mir nicht vorstellen, dass man eine generelle Lösung mit beliebig tiefer Schatelung mit einem RegEx-Ausdruck finden kann.

Ich löse so etwas, in dem ich den Text Zeichen für Zeichen durchgehe, die öffnende Klammer auf den Stack packe, und für eine schließende Klammer die letzte Klammer vom Stack entferne, ist keine Klammer mehr da, oder bleibt eine übrig, ist der Ausdruck falsch.


als Antwort auf: [#499277]

Klammerpaare

Marco Morgenthaler
Beiträge gesamt: 2474

17. Aug 2012, 16:11
Beitrag # 12 von 16
Beitrag ID: #499581
Bewertung:
(10287 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo allerseits

Da das Problem fehlender Zeichen bei runden oder eckigen Klammern (…), […], aber auch bei einzelnen fehlenden Anführungszeichen »…« doch von grösserem praktischem Nutzen sein kann, habe ich noch nachgedacht, wie ein direkter Grep diese Stellen finden könnte. Also ohne den Umweg über das Einfärben, was doch etwas umständlich ist.

Hier nun jeweils drei Grep-Suchen für fehlende öffnende Klammern bzw. Anführungszeichen und drei Grepsuchen für fehlende schliessende Klammern bzw. Anführungszeichen.

Fehlende Anfangszeichen
Findet …)
\A[^(]*?(\([^(]*?\)[^(]*?)*?\)

Vom Anfang des Textabschnitts suche ich also eine schliessende Klammer ), ohne dass davor eine öffnende Klammer ( steht. Dabei werden paarweise auftretende Klammerausdrücke (…) nicht berücksichtigt.

Findet …]
\A[^[]*?(\[[^[]*?\][^[]*?)*?\]

Findet …«
\A[^»]*?(»[^»]*?«[^»]*?)*?«

Fehlende Schlusszeichen
Findet (…
\((?![^(]+\))

Hier kann ich einen negativen Lookahead einsetzen, da die Anzahl der Zeichen im Lookahead nicht fix sein muss.

Findet […
\[(?![^[]+\])

Findet »…
»(?![^»]+«)

Die problematischen Stellen müssen natürlich einzeln manuell korrigiert werden. Bei den fehlenden Anfangszeichen wird der ganze Textstring bis zum vereinzelten Schlusszeichen, z. B. der schliessenden Klammer, markiert. Das problematische Zeichen findet sich also am Schluss und kann wenn nötig durch Klick auf Rechtspfeil der Tastatur gefunden werden (der Cursor befindet sich dann unmittelbar hinter dem vereinzelten Schlusszeichen).

Vielleicht sind diese Greps ja dem einen oder der anderen nützlich. Getestet habe ich es an einem kurzen Beispieltext.

Und noch was: Zurzeit läuft der Greenpeace Photo Award (http://www.photo-award.ch), und ich freue mich, wenn ihr dort mal vorbeischaut und eure Stimme abgebt, siehe auch http://www.hilfdirselbst.ch/..._P499522.html#499522

Tja, das wärs für diesmal.
Einen schönen Tag und Grüsse
Marco


als Antwort auf: [#499278]

Klammerpaare

drerol74
Beiträge gesamt: 507

17. Aug 2012, 17:13
Beitrag # 13 von 16
Beitrag ID: #499586
Bewertung:
(10246 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marco,

ich suche mit diesen GREP-Ausdrücken nach fehlenden geschlossenen oder offenen Klammern:

Für runde Klammern:
(?x) ( \( [^)]* (\(|$) ) | ( (\)|^) [^(]* \) )

Für eckige Klammern:
(?x) ( \[ [^\]]* (\[|$) ) | ( (\]|^) [^\[]* \] )

Für geschwungene Klammern:
(?x) ( \{ [^}]* (\{|$) ) | ( (\}|^) [^{]* \} )

So ein ähnlicher Ansatz, wie deiner. Und zwar wird bei der Suche immer der Bereich von der fehlerhaften Klammer bis zur nächsten gleichartigen Klammer markiert - also genau jener Bereich, in dem der Hund begraben liegen sollte.

Voraussetzung dafür ist, dass keine verschachtelten gleichartigen Klammern vorkommen. Was aber - denke ich - nur in Spezialfällen sinnvoll ist (mathematischer Satz).

Ganz sicher wird allerdings keiner der Ansätze sein, z.B. wenn zweimal die Klammer falsch gesetzt wird.

(Falls dieser Ansatz oben schon erwähnt wurde, meinen Beitrag einfach ignorieren.)

Schöne Grüße
Roland


als Antwort auf: [#499581]

Klammerpaare

Marco Morgenthaler
Beiträge gesamt: 2474

17. Aug 2012, 17:54
Beitrag # 14 von 16
Beitrag ID: #499588
Bewertung:
(10235 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Roland

Glückwunsch – deine Greps scheinen auch zu funktionieren und haben den Vorteil, dass sie fehlende offene oder geschlossene Klammern in einem Grep-Durchlauf finden. Bei mir geht die ODER-Schlaufe nicht (offenbar wegen \A).

Die Suche nach fehlenden Anführungszeichen »…« wäre dann entsprechend:

(?x) ( » [^«]* (»|$) ) | ( («|^) [^»]* « )

Allerdings funktioniert das nur innerhalb des Absatzes richtig, denn ein Text wie:

Blabla »blabla bla. [Absatzmarke]
bla bla« bla bla usw.

wird als falsch markiert. Was bei Klammern in der Praxis wohl kaum vorkommt (innerhalb des Klammerpaares ein Absatz), könnte bei Anführungszeichen doch ab und zu der Fall sein, z. B. bei Werk-Zitaten über mehrere Absätze.

Deine Lösung ist jedenfalls sehr elegant!

Gruss, Marco


als Antwort auf: [#499586]

Klammerpaare

drerol74
Beiträge gesamt: 507

17. Aug 2012, 18:23
Beitrag # 15 von 16
Beitrag ID: #499593
Bewertung:
(10213 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke.

Antwort auf: Allerdings funktioniert das nur innerhalb des Absatzes richtig,

Ja, das mit dem Absatz stimmt. Da muss man dann direkt am Text entscheiden. Der Ausdruck ist da sozusagen besonders gierig ;)

Schöne Grüße
Roland


als Antwort auf: [#499588]
X