Indexmarkierungen importieren?

Noch kommt mein gesamter Buchtext als langer Textstring aus meiner Datenbank. Per Einfügen aus der Zwischenablage wird mein Buchtext in RagTime in eine Textkomponente im Buch-Layout eingefüllt, wobei sich gefüllte Seiten bilden. Soweit ist alles bestens.

Nun möchte ich einen Index erstellen für viele Wörter, die ich auch schon in der Datenbank herausgesucht und aufgelistet habe. RagTime versieht solche Textwörter mit einer unsichtbaren Markierung, die über den Befehl „Index erzeugen …“ abgeklappert und alphabetisch aufgelistet werden, wobei die Seitenzahlen der aktuellen Layout-Komponente ausgelesen werden.

Meine Frage ist nun, ob diese unsichtbare Indexmarkierung schon importiert werden kann – ob ich sie also schon außerhalb von RagTime erzeugen kann.

Um eine Antwort zu finden, exportierte ich einen RagTime-Text als Textauswahl „RagTime“ zu .rtf und schaute nach enthaltenen Index-Markierungen:
{\s2\sl240\slmult1 {\cs1\f0\fs24\lang1031 Rag\-Time{\xe{\v RagTime}}}}

Die Indexmarkierung {\xe{\v RagTime}} hängt also hinten an meinem Wort „RagTime“, das indexiert werden soll.
(Die Indexmarkierung findet sich gelegentlich auch mitten im Wort, das indexiert werden soll).

Dieses .rtf wieder von RagTime importiert verliert allerdings die Indexmarkierung, leider.

Vielleicht hat jemand eine weiterführende Idee.
Habs mal aufgeschrieben. Vielleicht wird etwas draus. :-)

Index und AppleScript war 2007 schon mal Thema: http://experts.ragtime.de/experts/node/2242

Freundliche Grüße,
Norbert Lindenthal

Re: Indexmarkierungen importieren?

#12217 On 26 Juli, 2016 07:26 werkwelt said,

> Vielleicht wird etwas draus. :-)

Für Index markieren.

Bei einem in RagTime gesetzten Buch mit hunderten Seiten und vielen Stichwörtern/Indexwörtern ist die Index-Erstellung eine langwierige manuelle Arbeit, die nur durch Tastaturkürzel wenig beschleunigt werden kann. Die Wörtervorkommen werden gesucht (Suchen und Ersetzen) und dann über Menübefehl "Für Index markieren" proprietär markiert. Für das Buchlayout wird der Index per Menübefehl berechnet. Das Ergebnis ist die alphabetische Indexwörterliste mit den zugehörigen ausgelesenen Seitenzahlen aus dem Buchlayout.

Die proprietäre Indexmarkierung ist der Flaschenhals.

Das beiliegende AppleScript bringt Geschwindigkeit in diesen Flaschenhals. Ausgangslage ist also der Buchtext, der in ein RT-Layout eingefüllt ist. Indexwörter, die beispielsweise beim Korrekturlesen gesammelt wurden, sind ebenfalls in eine Textkomponente gefüllt. Die 4 Menübefehle in RagTime werden über das Menü Extras > Tastaturkürzel… mit Kürzeln ausgerüstet. Die Bedienung der Menübefehle über Tastaturkürzel werden per AppleScript (genauer durch sogenanntes GUI-Scripting) simuliert. Dazu müssen also die Kürzel im RagTime der Anwenderinstallation mit den entsprechenden Scriptzeilen übereinstimmen. Ohne Tastaturkürzel geht es nicht.

Ja, dann das Buch-Layout öffnen (alle anderen RT-Fenster der Übersichtlichkeit halber schließen). Daneben das beiliegende AppleScript im AppleScript-Editor (oder wie er heißt) öffnen. Und dann das Script per Befehl+R starten. Mit den hier beigelegten Musterdateien kann nicht viel schiefgehen.

Das Script gibt über die Mitteilungszentrale etliche Zwischenmeldungen aus.

Für 100 Indexwörter mit zusammen 500 Vorkommen im Buchtext braucht das Script ungefähr 8 Minuten.

Vielen Dank an Thomas und an den RagTime-Support. Hinweise und Mitdenken waren sehr hilfreich, in Einzelfällen absolut entscheidend. An den paar Zeilen hatte ich mindestens 5 Tage lang getüftelt. Unglaublich, was alles beim GUI-Scripting schieflaufen kann.

Für mich war noch eine Erkenntnis/ein Test wichtig. RagTime 6.6 läuft vollkommen fehlerfrei durch. RagTime 6.5 läßt die Buchdatei manchmal abstürzen. Es heißt, daß Programmteile in RagTime 6.6 für die AppleScript-Schnittstelle verbessert wurde.

Zwei Musterdateien zum Herunterladen:
http://werkwelt.de/ARC/RT/Fur_Index_markieren_6.rtd
http://werkwelt.de/ARC/RT/Fur_Index_markieren_6.rtd.zip
http://werkwelt.de/ARC/RT/Fur_Index_markieren_6.scpt

Und hier die Tastaturkürzel:

Menü Extras > Tastaturkürzel > RagTime-Befehle "Index = erzeugen =85 "         i {shift down, control down, option down, command down}
Menü Extras > Tastaturkürzel > RagTime-Befehle "Für = Index markieren"         i {                control down, option down, command down}
Menü Extras > Tastaturkürzel > RagTime-Befehle "Index-Fenster öffnen"           i {                control down,                    command down}

Menü Extras > Tastaturkürzel > Bearbeiten-Befehle "Suchtext"                        f {                control down, option down, command down}

RagTime (mit Indexerstellung), FileTime, FileMaker, AppleScript, Spell Catcher X, Zeichenmaschine, SVG und der Arc FritzSchreiber geben Flügel.

Mit freundlichen Grüßen,
Norbert Lindenthal

Re: Indexmarkierungen importieren?

#12215 On 16 Juli, 2016 21:06 Thomas Kaegi said,

Hallo Norbert

Nein, ich kann dir keine echte Lösung vorschlagen. Aber ich habe mir überlegt, wie ich vorgehen würde, um vielleicht eine Lösungsmöglichkeit zu finden:

Ich würde umgekehrt vorgehen:
1. In einem RagTime-Rechenblatt eine Liste aller zu indexierenden Wörter erstellen
2. Mit einem Scriptprogramm die Vorkommen dieser Wörter im Text im RagTime-Layout suchen und bei jedem Treffer den Befehl "Für Index markieren" aufrufen.

Das scheint aber mit AppleScript nicht zu gehen, mindestes nicht direkt. Im Buch von Detlef Schulz finde ich auf Seite 581 zwar den Befehl "offset". Aber der findet nur das erste Vorkommen eines Suchtextes. Zudem sieht es nicht so aus, als ob ein RagTime-"text flow" (eine RagTime-Textkomponente) als Text angegeben werden könnte, in dem gesucht werden soll.

Eigentlich müsste es entweder mit AppleScript-GUI-Scripting (mit dem ich selbst noch nie wirklich klargekommen bin) oder mit einem anderen Scriptprogramm zu machen sein.

So ein Script würde dann in etwa so aussehen:

1. In einer äusseren Schlaufe (umfasst die Schritte 2-8) ein Wort nach dem anderen aus der Tabelle der zu indexierenden Worte in den Zwischenspeicher kopieren
2. Das Layout mit dem Text aufrufen
3. Das Suchen-Fenster öffnen und den Zwischenspeicher als Suchwort einsetzen
4. "Von Anfang an suchen"
6. Suchen-Fenster schliessen (sonst kann der folgende Befehl nicht aufgerufen werden)
7. "Für Index markieren"
8. In einer inneren Schlaufe (bis keine Treffer mehr kommen)
8.1 Das Suchen-Fenster öffnen und "Suchen"
8.2 Suchen-Fenster schliessen
8.3 "Für Index markieren"

Wie gesagt: Das ist der Weg, auf dem ich eine Lösung suchen würde. Ob der Versuch aber überhaupt Erfolgschancen hat, lässt sich schlecht beurteilen. Ich glaube, dass es mit dem Scripting-Programm QuicKeys zu machen sein müsste - da ich damit besser zurecht komme als mit AppleScript-GUI-Scripting wäre das meine Wahl. Aber einfach ist es sicher weder mit QuicKeys noch mit AppleScript-GUI-Scripting.

Gruss, Thomas

Re: Indexmarkierungen importieren?

#12216 On 17 Juli, 2016 06:34 werkwelt said,

Moin, Thomas,

danke für Deine schnelle genaue Ausführung. Dann werde ich mal anfangen. GUI-Scripting per AppleScript konnte ich schon mal. Und QuicKeys sind bekannt. Ob die noch laufen auf neuerem OS X …

RagTime, FileTime, FileMaker, AppleScript, Spell Catcher X, Zeichenmaschine, SVG und der Arc FritzSchreiber geben Flügel.

Mit freundlichen Grüßen,
Norbert Lindenthal