Vedit - ein neuer Editor im Netz

Dr. F. Heberlein


1    Vedit: Ein Stück Softwaregeschichte

Mit dem Programm Vedit bietet das Universitätsrechenzentrum einen neuen Editor an, der je nach individueller Vorliebe als Ergänzung oder Ersatz des altbekannten PEdit (`Edi') dienen kann. Dieser `neue' Editor ist eigentlich ein Methusalem: er ist das älteste auf dem Markt befindliche PC-Programm und war schon seit 1980, d.h. vor Einführung des PC, als Editor für Unix- und CP/M-Rechner erhältlich. In Amerika v.a. unter Programmierern als the venerable text editor (Steve Smith, PCMagazin 6/98) immer noch populär, hat er in Deutschland nur begrenzte Verbreitung gefunden, ein Schicksal, das er mit vielen guten Programmen kleiner amerikanischer Softwarefirmen teilt.

Die Vorzüge des Programms sind rasch umrissen; es

Diese Punkte mögen zeigen, dass Vedit an der Kath. Universität Eichstätt in verschiedenen Bereichen sinnvoll eingesetzt werden kann, nämlich als Programm-Editor, zur Datenkonversion, zur Manipulation sehr großer Dateien und als komfortabler Editor für LATEX. Für die beiden letztgenannten Bereiche folgen nun einige Anwendungsbeispiele.

2    Vedit als LATEX-Editor

Syntax-Hervorhebung: Auch erfahrene LATEX-Nutzer werden das typische Durcheinander von Kommandos, Fußnoten und Haupttext auf dem Bildschirm nicht zu den Vorzügen dieses Satzprogramms rechnen. Dies zeigen schon die periodisch auftauchenden Versuche, LATEX wenigstens eine Art `Pseudo-Wysiwyg' anzudienen, womit ihm dann aber auch die Zähigkeit und Schwerfälligkeit solcher Windows-Programme anhängt.

Die gewohnte Effizienz der Texteingabe zu bewahren und gleichzeitig ein hohes Maß an Übersichtlichkeit zu schaffen, wird durch die Verwendung einer der oben genannten Definitionsdateien zur Syntaxhervorhebung gewährleistet. LATEX-Nutzer finden in der Eichstätter Version von Vedit eine Datei Tex.syn, die TEX-Kommandos und Fußnoten farblich vom Haupttext abgrenzt; da es sich um eine reine Textdatei handelt, bietet es keinerlei Probleme, diese Datei den eigenen Vorstellungen anzupassen.

Um die Definitionsdatei zu aktivieren, gibt es zwei Möglichkeiten:

Kommando-Makros: In der Netzversion des PEdit wurden bekanntlich die wichtigsten LATEX-Befehle als Tastaturmakros nach dem Muster Alt-S = \section{} implementiert. Dieses Verfahren hat den Nachteil, dass so nur 26 Befehle definiert werden können. In Vedit bietet sich stattdessen an, mit Hilfe der Skriptsprache zwei Auswahlmenüs zu erstellen, die über die Funktionstasten F11 (einfache LATEX-Befehle wie \section{}) und F12 (Umgebungsbefehle) oder über das User-Menü erreichbar sind. Drückt man also F12, erscheint eine Tabelle mit LATEX-Umgebungen, drückt man dann den zugehörigen Kennbuchstaben, z.B. (e), wird \begin{enumerate}...\end{enumerate} in den Text eingefügt. Die Tastatur bleibt so für anderweitige Belegung frei. Wer dieses Verfahren nicht mag, kann weiterhin seine Tastaturmakros definieren, und zwar durch simples Edieren der Datei vedit.key.

Tabellen: Wer kein geborener Pedant ist, hat mit der Konstruktion von Tabellen in LATEX sicher schon mancherlei Verdruss erlebt: ein vergessenes & oder \\ kann bei Programm und Nutzer gleichermaßen eine Kette unwilliger Reaktionen auslösen. Abhilfe schafft hier das Tabellen-Skript (erreichbar über das Menü F12 (u)), das zunächst nach der Anzahl der Zeilen und Spalten fragt, sodann die Werte für die einzelnen Felder anfordert und so die Tabelle konstruiert1.

Konversion nach HTML: Bekanntlich steht für die Unwandlung von *.tex nach *.htm(l) eine Reihe von Konvertern zur Verfügung, die aber alle eine spezielle Vorbehandlung des Inputfiles, zumindest hinsichtlich der Umlaute, verlangen. Für den derzeit wohl besten2, TTH , wurde das Skript tth.vdm geschrieben, das die Kodierung von Umlauten und die Übergabe des Inputfiles an den Konverter kombiniert, so dass durch einfachen Tastendruck (Aufruf des Menüpunktes TeX to TTH im User-Menü) eine vollautomatische Konversion einer Datei nn.tex in eine Datei nn.htm erfolgt.

Folgende Dateien benötigen Sie dazu:
(a) ein Unterverzeichnis c:\tth, in dem die Datei tth.exe und die zugehörigen Hilfsdateien stehen. Diese finden Sie an folgender Adresse im Internet:
http://hutchinson.belmont.ma.us/tth/.
(b) Die Skripts tth.vdm und texttth.vdm in ihrem lokalen Verzeichnis c:\vedit. Was diese Skripten im einzelnen tun, studieren Sie am besten an Ort und Stelle, d.h. in den Dateien, wo der Programmcode ausführlich kommentiert ist.

3    Beispiele für die Verwendung der Skriptsprache

Für die Verwendung der Vedit-Skriptsprache folgen nun drei Beispiele aus der Praxis, und zwar zwei `historische' und ein aktuelles:

(1) Der erste Fall ist trivial: es erscheint eines Tages der Doktorand NN mit der Beschwerde, dass sein Doktorvater einen gravierenden Mangel der eben eingereichten Dissertation darin erblicke, dass er Seitenverweise in der Form `308f.', nicht aber `308 f.' verwendet habe. NN hat daraufhin in seiner Windows-Textverarbeitung, nach populärer Auffassung dem teuersten und besten, was man haben kann, eine Suche-/Ersetze-Operation nach dem Muster 308f. ® 308 f. vorgenommen, die alle Seitenverweise erfolgreich geändert, aber nebenbei auch noch Ergebnisse wie `Rump f.' und `Strump f.' gezeitigt hat. NN sieht sich nun mit der Aussicht konfrontiert, auf allen 600 Seiten seiner Arbeit die Verweise manuell überprüfen zu müssen. Muss er nicht, denn folgendes simple Skript erledigt das für ihn (Nach den // steht die Erklärung des Programmcodes):

BOF                             //gehe zum Dateianfang
repeat(all){                    //Wiederhole Operation bis zum Dateiende
search("|df.",errbreak)         //Suche eine Zahl ("|d"), gefolgt von "f.",
                                //break-out wenn keine mehr gefunden
char(1)                         //Bewege Cursor 1 Position nach rechts
inschar(" ")                    //Fuege einen Leerschlag ein
}
Dieses Skript wird nun mit Hilfe des sog. Wildfile-Macros an sämtlichen Dateien auf einmal ausgeführt. In etwa 30 Sekunden ist das Problem behoben, und NN zieht gleichermaßen verdutzt wie zufrieden von dannen.

(2) Die Eichstätter Klassische Philologie liefert für ein neues Schulbuchprojekt die Lexikon-Daten: jedes Wort wird lemmatisiert, mit Stellenangabe und abschließender Frequenzangabe pro Lemma, was folgendermaßen aussieht:

...
l[ ATTENTVS                ]     w[ ADTENTI             ] a[ TA] s[954]\
fq[ 5]@

l[ ATTERO                  ]     w[ ATTEREBANTUR        ] a[ CU] s[04:006]\
l[ ATTERO                  ]     w[ ATTRITIS            ] a[ CU] s[08:002]\
l[ ATTERO                  ]     w[ ADTRIUERAT          ] a[ SC] s[16:002]\
fq[ 3]@
Der Verlag findet's schön und gut, wünscht sich aber die Frequenzangabe (fq[ ) nicht nur am Ende einer Gruppe, sondern hinter jeder einzelnen Wortform. Ein Blick in das Handbuch des Datenbankprogramms klärt darüber auf, dass dieser Wunsch nicht, wie vom Verlag vermutet, eine Petitesse darstellt, denn die Frequenz wird ja erst am Ende der Recherche ermittelt und kann demzufolge erst nach dem letzten Lemma eingetragen werden. Auch hier hilft ein kleines Vedit-Skript weiter:


BOF()                   // Gehe zum Dateianfang
WHILE(!AT_EOF){          //Solange Dateiende nicht erreicht ...:

    Search("@|l|l",ADVANCE+ERRBREAK)    // Suche "@ CR CR" (= Lemma-Ende-Marker) 
    BlockBegin(CURPOS)                  // Setze hier Block-Beginn
    Search("fq[",errbreak)              // Suche FQ[ - Feld und ...           
    BlockEnd(CURPOS)                    // ... setze davor Block-Ende.
    line(1)                             // Gehe 1 Zeile weiter (zum fq[ - Feld)
    RegCopy(9,1,LINESET)                // Kopiere FQ[ Feld nach
                                        // Zwischenspeicher #9 (mit CR)
    GOTOPOS(BlockBegin)                 // Gehe zum Block-Anfang (d.h. Lemma-Anfang)
    ReplaceBlock("\|L"," |@(9)",BB,BE,ALL)   // Ersetze Zeilenumbruch (d.h.
                                      //  Record-Ende) durch Inhalt von #9
}
FileSave(Begin)                //Sichere die Datei und gehe zum Dateianfang
while(!at_eof){                //Solange Dateiende nicht erreicht...:
s("|<fq[",advance+noerr)       //Suche und ...
DelLine(1)                     //...loesche ueberfluessiges fq[ - Feld
                               // am Ende der Lemma-Bloecke    
}
FileSave(Begin)             // Sichere die Datei               

Jetzt sieht alles so aus, wie der Verlag es sich wünscht:

l[ ATTERO     ]     w[ ATTEREBANTUR        ] a[ CU] s[04:006] fq[ 3]@
l[ ATTERO     ]     w[ ATTRITIS            ] a[ CU] s[08:002] fq[ 3]@
l[ ATTERO     ]     w[ ADTRIUERAT          ] a[ SC] s[16:002] fq[ 3]@
Diese Operation wurde an 156.000 Records ausgeführt und dauerte weniger als drei Minuten. Die Skriptsprache von Vedit ist damit deutlich schneller als andere Skriptsprachen wie etwa Perl.

(3) Einer der größten Vorzüge von Vedit ist, dass auch sehr große Dateien schnell geladen und gelesen werden können. Das maschinenlesbare lateinische Lexikon, das der Arbeit am `Query-Corpus' zugrundeliegt3, hat einen Umfang von ca. 12MB. Die Ladezeit beträgt unter 1sec, das vollständige Durchsuchen (146000 Records) nach einem Lemma 6sec4. Wir haben uns daher entschlossen, die Lemmatisierung lateinischer Texte nicht mehr, wie früher in zwei Phasen (Parsing und Desambiguierung) vorzunehmen, sondern beides zusammenzufassen: Ein Vedit-Skript sucht für eine gegebene Wortform die möglichen Lemmata im Lexikon, der Bearbeiter wählt per Cursor das richtige aus und lässt es mit Hilfe eines weiteren Skripts in eine Datei schreiben. Die `Trefferquote' liegt dabei bei rund 75% und wird sich durch das weitere Anwachsen des Lexikons noch steigern lassen.

4    Dokumentation

Zu Vedit gibt es eine Online-Dokumentation im PDF-Format (Pfad/Dateiname:
i:\editoren\vedit\vlpus.pdf). Um sie lesen zu können, müssen Sie den Adobe Acrobat Reader aufrufen, der im Netz in der Programmgruppe TexWare zu finden ist. Weitere Informationen zu Vedit gibt es auf der Homepage des Herstellers (http://www.vedit.com), wo demnächst auch ein Diskussionsforum für Vedit-Nutzer starten wird.

Appendix 1: Automatisches Syntax-Highlighting für LATEX

Wenn Sie Vedit als Editor für LATEX benutzen, möchten Sie vielleicht, dass beim Programmstart die Syntaxhervorhebung automatisch geladen wird. Das können Sie durch folgende Änderungen in der Start-Datei startup.vdm bewerkstelligen:

(A) Suchen Sie in der Datei startup.vdm nach folgendem Textblock:

// Test if this is a ".TXT" word processing file...
//
BOF()
if ( Search(".txt|>",NOERR)==1 || Search(".hlp|>",NOERR)==1 ) {
Buf_Switch(#109)
Config(PG_AUTO_IND,1,LOCAL)
Config(PG_IND_INC,4,LOCAL)
Config(W_WORD_WRAP,1,LOCAL)     //Enable word wrap
Config(W_RT_MARG,70,LOCAL)      //Set right margin to 70
Config(W_LF_MARG,0,LOCAL)
Config_Tab(8;LOCAL)             //Set tabs stops to every 8
Goto ENDMACRO
}
(B) Nehmen Sie folgende Veränderungen vor:

  1. Zeilen 1 und 4: Ersetzen Sie .TXT durch .tex.
  2. Fügen Sie vor die vorletzte Zeile (Goto ENDMACRO) eine Zeile mit folgendem Text ein:
    Config(PG_E_SYNTAX,1,LOCAL) //Enable syntax highlighting for TEX

  3. Suchen Sie nach folgendem Eintrag:
    // Syntax_Load("html.syn") // Setup syntax highlighting for HTML

    Fügen Sie danach eine Zeile mit folgendem Inhalt ein:
    Syntax_Load("tex.syn") // Setup syntax highlighting for TEX

    Wichtig: am Anfang dieser Zeile darf kein `//' stehen!

Beim Neustart von Vedit wird nun das Syntax-File für LATEX automatisch geladen.


Fußnoten:

1 Feinheiten wie etwa die Ausrichtung in der Tabellenspalte ([lcr]) müssen allerdings derzeit noch von Hand nachgearbeitet werden; Vorschläge zur Implementation dieser und anderer Funktionen sind stets willkommen.

2 Weil er problemlos Tabellen und mathematischen Code konvertiert 

3 Informationen zu diesem Projekt: http://www.ku-eichstaett.de/SLF/Klassphil/home.htm 

4 Auf einem Pentium 133MHz. Die entsprechenden Werte für PEdit betragen 46sec bzw. 50sec. Der Unterschied bei der Suchzeit beruht v.a. darauf, dass Vedit über einen schnellen read-only-Modus verfügt 

Ansprechpartner:Zimmer: Telefon: PMail:
Dr. Friedrich Heberlein EI: UA-250-1544 friedrich.heberlein