inDesign GREP-Stile

Ich habe ein paar Dokumente, die rechtliche Zeilen für 4 verschiedene Länder haben (Japan, China, Macau und Arabisch). Die rechtliche Zeile besteht zum größten Teil aus Englisch und dann den japanischen Schriftzeichen, chinesischen Schriftzeichen usw. Zum Beispiel: chinesische Schriftzeichen TM und © Mein Unternehmen. Alle Rechte vorbehalten.

Ich habe ein Tutorial für duale Schriftarten mit GREP-Stilen befolgt. Für jedes Land habe ich 4 verschiedene Charakterstile erstellt. Jede mit ihrer eigenen festgelegten Schriftart. Das Textfeld im Dokument ist mit einem Absatzstil verknüpft, der die englische Schriftart enthält, die ich verwenden möchte (Arial). Ich verwende Unicode-Bereiche für jede Sprache. Die chinesischen CJK-Bereiche sind beispielsweise 4E00–9FD5

Meine GREP-Stile sind wie folgt:

Stil anwenden: Macao
auf Text:[\x{4E00}-\x{9FD5}\x{3000}-\x{303F}]+

Stil anwenden: China
auf Text:[\x{3000}-\x{efff}\x{4E00}-\x{9FD5}\x{3300}-\x{33FF}][^.,;:?!\d]+

Stil anwenden: Japan
auf Text:[\x{3040}-\x{309F}\x{30A0}-\x{30FF}\x{FF00}-\x{FFEF}\x{3000}-\x{303F}\x{4E00}-\x{9FD5}]+

Stil anwenden: Arabisch
auf Text:[\x{0600}-\x{06FF}\x{0750}-\x{077F}][^.,;:?!\d]+

Der obige GREP-Stil funktioniert gut für japanische Dokumente, aber nicht für chinesische oder Macau-Dokumente. Wenn ich die Reihenfolge der GREP-Stile ändere, damit die chinesischen oder Macau-Dateien funktionieren, funktioniert das japanische Dokument nicht mehr.

Mein Dilemma ist, dass ich nicht für jedes Land unterschiedliche Dokumente haben und ihren eigenen grep-Stil laden kann, da die Dokumente Inhalte miteinander teilen.

Ich habe mich gefragt, ob es eine bestimmte Reihenfolge der GREP-Stile gibt, der ich folgen sollte, oder ob ich etwas so Grundlegendes vermisse, damit es in allen 4 Sprachen richtig funktioniert.

Warum verwenden Sie unterschiedliche Schriftarten für China und Macau? Sie sind vermutlich beide in Mandarin mit vereinfachten Buchstaben geschrieben, warum also überhaupt zwei verschiedene Stile?

Antworten (1)

Die Engine für reguläre Ausdrücke wählt die erste mögliche Übereinstimmung aus. Zum Beispiel wird der reguläre Ausdruck foo|foo barnie übereinstimmen, foo bareinfach weil er immer zuerst auf foo passt. Sehen Sie, wie der Motor ein Match macht und seine Arbeit von diesem Punkt an fortsetzt, ohne zurückzublicken.

Ähnliches passiert mit GREP-Stilen. Außer es passiert umgekehrt, da einzelne Stile separat angewendet werden und der letzte in der Liste Vorrang hat. Der letzte Stil überschreibt also die anderen. China überschreibt also einfach Japan, wenn es in der Liste unter Japan liegt, da Japan größtenteils eine Untergruppe von China ist, wie Sie dies formuliert haben.

Behebung Ihrer Probleme

Ok, wie kann man das beheben? Ich bin mir nicht sicher, ob es möglich ist, solange beide dieselben Kanji-Bereiche verwenden! Das ist nicht die Art von Dingen, in denen grep gut ist. Es sei denn, Sie können die Bereiche nicht vollständig überlappen lassen.

Ihre GREP-Ausdrücke sind jedoch mit ziemlicher Sicherheit falsch. Schauen wir uns zuerst die einzelnen Teile an

[\x{3000}-\x{efff}\x{4E00}-\x{9FD5}\x{3300}-\x{33FF}]

Look 3000 < 3300 < 4E00und EFFF > 9FD5 > 33FFdas bedeutet, dass die Bereiche nach dem ersten redundant sind und das Äquivalent zum Schreiben:

[\x{3000}-\x{efff}]

Das heißt, wenn es keinen Fehler in der Matching-Engine gibt. Zweitens verwenden Sie zwei verschiedene Übereinstimmungslogiken:

  • Muster einer beliebigen Anzahl von Dingen in Reichweite, die von Macau und Japan verwendet werden

    [...]+verwendet diese Logik)

  • Muster einer beliebigen Anzahl von Dingen, denen irgendetwas folgt, außer denen, die von China und Arabisch verwendet werden

    [...][^.,;:?!\d]+

Nun, das zweite Ihrer Muster ist wirklich seltsam. Dies führt beispielsweise dazu, dass der arabische Stil verwendet wird, selbst wenn der spätere Teil des Satzes auf Japanisch ist, während Japanisch bei weitem nicht so gierig ist, mit ihm übereinzustimmen. Dies ist mit ziemlicher Sicherheit nicht das, was Sie beabsichtigt haben. Außerdem wird es das Debuggen erschweren.

Versuch das zu beheben

Wie gesagt, ich bin mir nicht sicher, ob es möglich ist. Sie könnten versuchen, eine andere Strategie zu verwenden, anstatt eine beliebige Anzahl von Dingen in einem Set zusammenzubringen, solange es das Set nicht verletzt. Dazu müssen Sie Lookaheads verwenden. Leider haben Lookaheads keine unendliche Breite, so dass dies für Sie möglicherweise nicht sehr gut funktioniert. Im Wesentlichen sind reguläre Ausdrücke für diesen Job nicht wirklich geeignet.

Eine alternative Strategie öffnet sich, wenn Sie ein Zeichen oder eine Position haben, die Sie am Anfang und am Ende Ihres Textes abgleichen können. wie Absatzanfang und Absatzende, dann können Sie leicht einen Bereich abgleichen, der mit diesem Zeichen beginnen/enden MUSS, und es werden alle solche Dinge verworfen, die etwas Ungültiges enthalten.

Angenommen, Sie möchten dies pro Absatz tun, lassen Sie der Einfachheit halber testen, dass der Absatz nur ASCII-Kleinbuchstaben und Leerzeichen und Punkt und Komma enthalten kann, dann ^[a-z .,]+$würde dies übereinstimmen:

the old man sighed but did not answer, and they moved on 
in silence. the surf grew suddenly louder, as they emerged
from the forest upon a stretch of sand dunes bordering the sea. 

aber nicht

The old man sighed but did not answer, and they moved on 
in silence. The surf grew suddenly louder, as they emerged
from the forest upon a stretch of sand dunes bordering the sea. 

Auf die Rechnung, dass da ein ungültiges Zeichen dazwischen steht.

PS

In jedem Fall müssen Sie erkennen, dass reguläre Ausdrücke nicht für alle Aufgaben geeignet sind, bei denen Sie automatisierte Heuristiken wünschen. Dies ist wahrscheinlich einer von ihnen. Verwenden Sie etwas Anspruchsvolleres.