Große Texte schreibe ich gerne mit LaTeX. Für Syntaxdiagramme im Text verwende ich seit Jahren rail. Hierbei handelt es sich um ein LaTeX-Paket nebst zugehörigem Programm, welches die Diagrammdateien für LaTeX übersetzt. Das Paket ist im Original ausschließlich im Quellcode zu haben. Unter Gnu/Linux habe ich es mehrfach übersetzt. Auch eine Version für Windows habe ich schon gebastelt. Nun wollte ich einen bestehenden Text, der Syntaxdiagramme enthält, unter macOS überarbeiten und übersetzen.
Also rail auf den Rechner geladen und … – So einfach war es nicht mit der Übersetzung. Der Apple-Compiler kann mit dem uralten Quellcode nichts anfangen. Wie es dennoch funktioniert, beschreibe ich hier. Wer keine Lust zum Compilieren hat, findet am Ende des Artikels ein Archiv, in dem sich nicht nur der Quellcode, sondern auch ausführbare Dateien für macOS/OS X und Windows befinden.
Voraussetzungen schaffen
Neben rail, welches man sich bei CTAN herunterladen kann, brauchen wir natürlich Xcode, die Entwicklungsumgebung für macOS/OS X. Die kann man sich leicht aus dem App-Store herunterladen. Das kostet auch nichts – toll. Außerdem werden noch die Kommandozeilenwerkzeuge für Xcode benötigt. Auch die gibt es gratis. Um sie zu installieren, geben wir, nach erfolgreicher Xcode-Installation, den folgenden Befehl im Terminalfenster ein:
1 |
$ sudo xcode-select --install |
Damit, so dachte ich anfangs, wäre alles gut. Wie jedoch schon zu Beginn dieses Artikels angedeutet, funktioniert das Ganze nicht. rail lässt sich mit den Apple-Tools nicht übersetzen. Bloße Anpassungen des Makefiles reichen nicht aus. Man braucht noch die Werkzeuge yacc, Bison und einen „alten“ gcc. Ich verwende hier macOS Sierra und habe mich für das Repository MacPorts entschieden, um die benötigten Werkzeuge zu installieren. Um MacPorts zu installieren wird Xcode samt Kommandowerkzeugen benötigt. Deren Installation ist/war also nicht umsonst, auch wenn sonst nicht programmiert werden soll. Wie MacPorts und die dort verfügbaren Programme installiert werden, ist auf der Dokumentationsseite detailliert und einfach verständlich beschrieben. Als gcc-Version habe ich Version 4.3 verwendet. Mit den neueren Versionen ließ sich rail bei mir nicht übersetzen.
Ergänzung/Korrektur (02/2019)
rail lässt sich sehr wohl mit den Apple-Werkzeugen übersetzen. MacPorts & Co. sind nicht erforderlich. Allerdings muss man ein wenig am Quellcode ändern und natürlich auch das Makefile anpassen. Ich habe es getan.
Am Ende des Beitrags befindet sich eine separate Schaltfläche, um den modifizierten Quellcode herunterzuladen. Die Übersetzung und Installation funktioniert wie üblich, so wie auch unten angegeben:
1 2 3 |
$ make $ sudo make install $ sudo texhash |
Ergänzung/Korrektur (12/2020)
Mit Veröffentlichung von macOS Big Sur haben sich die Richtlinien des macOS-Compilers nochmals verschärft. – Das ist im Grunde eine gute Sache, macht aber die Übersetzung alter Quellcodes schwieriger. Ich habe die Rail-Quellen und das Makefile angepasst, so dass sich das Programm nunmehr auch unter macOS Gig Sur einwandfrei übersetzen und installieren lässt. – Den entsprechenden Download-Button finden Sie unten.
rail übersetzen
Dieser Part des Beitrags ist für aktuelle macOS-Versionen teilweise obsolet. Lesen Sie die obigen Ergänzungen und verwenden gegebenenfalls des jeweils verlinkten Quellcode. Ich habe rail den Erfordernissen der aktuellen macOS-Versionen angepasst, so dass sie das Programm nunmehr ohne die Erweiterungen von MacPorts übersetzen können.
Nach Abschluss der Vorarbeiten, habe ich das Makefile angepasst. Das für macOS Sierra und MacTex 2016 angepasste Makefile liegt dem beigefügten Archiv unter dem Namen Makefile.macos bei. Wer selbst compilieren möchte, muss es also entsprechend umbenennen oder kopieren. Damit nun auch der richtige Compiler verwendet wird, muss der gcc4.3 aktiviert werden. Bei MacPorts funktioniert das mit folgendem Befehl:
1 |
$ sudo port select --set gcc mp-gcc43 |
Später kann man mit
1 |
$ sudo port select --set gcc none |
wieder zum Apple-Compiler zurückschalten. Vorher sollte man natürlich rail übersetzen und installieren.
Für aktuelle macOS-Versionen verwenden Sie bitte die überarbeitete Version von rail, die Sie unten im Download-Bereich finden. Diese Version können Sie ohne zusätzlichen Compiler von MacPorts übersetzen.
Das ist nun einfach:
1 2 3 |
$ make $ sudo make install $ sudo texhash |
Das war es dann auch schon. rail ist einsatzbereit installiert.
Syntaxdiagramme erstellen
In den im Paket enthaltenen Beispiel- bzw. Dokumentationsdateien kann man lernen, wie rail angewendet wird. Das im Beitragsbild dargestellte Diagramm stammt aus rail.tex, der Dokumentation zu rail. Die Dokumentation zeigt beispielhaft verschiedene Syntaxdiagramme und ist leicht verständlich.
Als erstes muss das rail-Paket in das Dokument eingebunden werden:
1 |
\usepackage{rail} |
Wer will, kann auch noch Optionen direkt im Dokument verankern. Beispiel:
1 |
\railoptions{+ac} |
Es geht aber auch über die Kommandozeile. Hier ein Auszug aus der Manage, welche die Parameter erläutert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
-a An alternate layout is used for the * operator with an empty second argument. Instead of transforming x * into () | x + it is transformed into () + x. -c The input is checked for undefined identifiers and unnamed rules. Statistics about those are printed to the standard output stream. -d Turns on yacc(1) debugging output. This only works if the program has been compiled with YYDEBUG defined (which is the default) and your yacc supports it. -h Arrow-heads are drawn where lines enter the boxes. -i Index entries are generated for all named rules, i.e., rules that are of the form identifier : body. -t The parse tree of a rule body is included as comments in file.rao. |
Dies ist der aus der Dokumentation entnommene Quelltext für das Beitragsbild:
1 2 3 4 5 |
\begin{rail} decl : 'def' identifier '=' ( expression + ';' ) | 'type' identifier '=' type ; \end{rail} |
Zuerst ist dann das Dokument mit LaTeX zu übersetzen. Beispielsweise mit pdflatex:
1 |
$ pdflatex dokument |
Sodann folgt ein rail-lauf und ein oder mehrere weitere LaTeX-Läufe. Die Anzahl hängt bekanntlich vom Dokument und den darin enthaltenen Querverweisen ab. Also mindestens:
1 2 |
$ rail dokument $ pdflatex dokument |
Fertig ist das LaTeX-Dokument mit Syntaxdiagramm. – Letztlich also doch ganz einfach.
Download
Wer rail nicht selbst übersetzen mag, der kann sich hier ein Archiv herunterladen. Das Archiv enthält fertig übersetze Programme für macOS bzw. OS X sowie für Windows. Für Windows sind zwei Versionen enthalten, 16- und 32-Bit. Die 16-Bit-Version gehört zum Umfang des Original-Archivs. Ich denke nicht, dass jemand etwas damit anfangen kann. Die von mir übersetzte Version hat 32-Bit und läuft unter Window 7 oder neuer. Die dazu erforderliche Datei cygwin1.dll ist auch enthalten.
Hier ist das Download-Archiv.
Ergänzung vom 16.12.2020: Mit macOS Big Sur haben sich nochmals die Richtlinien des Compilers verschärft, alten C-Code zu übersetzen. Ich habe rail also nochmals angepasst.
Einen Hinweis möchte/muss ich noch geben. rail mag den Windows-Zeilenumbruch nicht. Näheres hierzu kann in den Kommentaren meines analogen Beitrags zu LaTeX und rail nachgelesen werden.
Karsten Brodmann