Heute greife ich mal ein Windows-Thema auf. Warum? – Nun, ich muss in der Firma für Windows enwickeln und mache dies gerne in einer nativen Umgebung. Also habe ich mein Entwicklungs-Notebook auf Windows 7 (64-Bit) umgerüstet. Ungeachtet dessen mag ich auf LaTeX nicht verzichten, weshalb ich selbiges auch installiert habe. Ich nutze es für technische Dokumentationen, die nicht selten auch Syntaxdiagramme o.ä. enthalten, die ich dann mit rail erstelle.
Eines vorweg: MiKTeX hat die Zusammenarbeit mit railverweigert. Das von MiKTeX produzierte aux-File war/ist mit rail nicht kompatibel. Möglicheweise kann man das heilen, ich habe mich aber für TeXLive 2013 entschieden. TeXLive verwende ich auch unter Linux. Damit klappt alles wunderbar.
Jetzt aber zum Kern dieses Beitrags. Das rail-Paket kann man sich bei CTAN herunterladen. Unter Linux, wo ich das Paket bislang eingesetzt habe, wird es übersetzt, in LaTeX enstsprechend eingerichtet und gut ist es. Da ich das bereits ein paar Male gemacht hatte, wusste ich, das auch ein fertiges Windows-Binary dem Paket beigefügt ist. – Doch was für eine Enttäuschung: Das Programm ist ein uraltes 16-Bit-Proggi. Das wollte und wird mein Windows 7 nicht akzeptieren.
Lösung: Selbst ist der Mann. Der Quellcode ist vorhanden, also ran an den Compiler und alles frisch übersetzt. – Kenne ich doch von Linux!
Was im Grunde einfach klingt, gestaltet sich dann in der Praxis doch etwas schwieriger. Um das Proggi zu übersetzen benötigt man einen Scanner- bzw. Parser-Generator. flex und bison sind aber nicht gerade übliche Windows-Tools. Ich habe mir also verschiedene C-Compiler angesehen, die frei für Windows verfügbar sind. Keiner von ihnen hatte die nötigen Werkzeuge mit im Gepäck. Daher habe ich zu Cygwin gegriffen, einer Linux-ähnlichen Umgebung unter Windows.
Mittels Cygwin ließ sich rail dann problemlos übersetzen und auch in der nativen Windows-Umgebung einsetzen. Ich brauchte lediglich ein paar Änderungen im Makefile machen.
karsten@norderney ~/Downloads/Rail $ make bison -y -dv gram.y conflicts: 2 reduce/reduce cmp -s gram.c y.tab.c || cp y.tab.c gram.c cmp -s gram.h y.tab.h || cp y.tab.h gram.h gcc -DYYDEBUG -O -c -o rail.o rail.c gcc -DYYDEBUG -O -c -o gram.o gram.c flex -t lex.l > lex.c gcc -DYYDEBUG -O -c -o lex.o lex.c gcc -DYYDEBUG -O rail.o gram.o lex.o -o rail karsten@norderney ~/Downloads/Rail $ _
Unter Windows wird die Datei cygwin1.dll benötigt. Die kann man sich aus der Cygwin-Installation ausborgen und nach C:\Windows\System32kopieren. Damit läuft das Proggi dann perfekt.
Wer jetzt auch Lust auf Compilieren bekommen hat, der kann sich das Paket hier herunterladen. Ein angepasstes Makefile ist beigefügt. Wer dazu keine Lust hat, oder keine Gelegenheit, der kann die beigefügte EXE-Datei benutzen. Die Datei cygwin1.dll ist übrigens auch dabei.
Wer Probleme hat Manpages unter Windows anzusehen, der mag in den folgenden Abdruck derselben schauen:
RAIL(1) General Commands Manual RAIL(1) NAME rail - railroad diagrams for LaTeX SYNOPSIS rail [-+acdhit] [file] DESCRIPTION rail is part of the Rail package, which allows you to use railroad dia‐ grams with LaTeX. It will read file.rai and create file.rao if there are no errors. If there are any errors, file.rao will be removed. If no file argument is given, rail reads from standard input and writes to standard output. OPTIONS Option arguments start with a minus or a plus sign, followed by one or more option letters. If a minus sign is used, the options are set. With a plus sign, the options are reset. By default, no options are set. Options can also be set or reset from the LaTeX file. This overrides the corresponding options setting from the command line. The effect of setting each option is described below. -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 out‐ put stream. -d Turns on yacc(1) debugging output. This only works if the pro‐ gram 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. FILES file.rai rail input file file.rao rail output file SEE ALSO Rail - Syntax Diagrams For LaTeX AUTHOR L.W.J. Rooijakkers <lwj@cs.kun.nl>, K. Barthelmann <barthel@infor‐ matik.uni-mainz.de> with contributions by J. Olsson and others VERSION 1.2 #1 BUGS Due to the use of yacc, the error messages are not very helpful, but this is difficult to correct. Jul 26, 1998
Viel Spaß mit Syntaxdiagrammen!
Nachtrag: Bei der Punkt-Akademie findet sich ein Beitrag, wie rail auch unter macOS / OS X genutzt werden kann.