Seite 1 von 1

Syntaxdiagramm (rail-Paket) zentrieren?

Verfasst: Mi 30. Apr 2014, 11:26
von and_go
Hallo,
ich suche nach einer Möglichkeit, ein mit dem rail-Paket erstelltes Syntaxdiagramm zu zentrieren. \centering und die center-Umgebung werden ignoriert. Eine Verschiebung nach rechts kann ich erzielen, indem ich
\railparam{\addtolength{\leftmargin}{100pt}}\railinit
ergänze und den Wert manuell für jedes Diagramm anpasse -> unschön!
Habt ihr bessere Ideen? Laut Dokumentation erstellt es eine Picture-Umgebung in einer List-Umgebung, falls euch das weiterhilft.
Folgendes ist die Ausgangslage mit einem linksbündigen Diagramm als Ergebnis:
\documentclass{book}
\usepackage{libs/rail} 
\begin{document}
\paragraph*{SET TAMONITOR}
\begin{rail}
'SET TAMONITOR' ( 'TRUE' | 'FALSE' );
\end{rail}
\end{document}
Inhalt der RAO-Datei zum Testen:
% This file was generated by 'C:\DOKUME~1\XPMUSER\DESKTOP\RAIL\RAIL\RAIL.EXE' from 'test.rai'
\rail@i {1}{ 'SET TAMONITOR' ( 'TRUE' | 'FALSE' ); }
\rail@o {1}{
\rail@begin{2}{}
\rail@term{SET TAMONITOR}[]
\rail@bar
\rail@term{TRUE}[]
\rail@nextbar{1}
\rail@term{FALSE}[]
\rail@endbar
\rail@end
}
Wird noch mehr Code benötigt? Ich bin diesbezüglich noch ein Newbie.

Verfasst: Mi 30. Apr 2014, 13:03
von esdd
Eine automatisierte Lösung für das Zentrieren eines rail Diagrammes dürfte schwierig bis gar nicht möglich sein.

rail erstellt die Abbildung in einer picture Umgebung der Breite 0 und packt diese picture Umgebung deshalb in eine minipage der Breite \linewidth. Damit sind die rail Abbildungen dann immer \linewidth breit.

Eventuell kannst du die Diagramme alle um den gleichen Betrag einrücken statt sie zu zentrieren?

Wenn sie aber unbedingt zentriert werden müssen, dann ist es vermutlich einfacher die tatsächliche Breite des Diagrammes von Hand auszumessen statt jeweils den nötigen Einzug zu ermitteln. Zumal sich dieser ja ändern würde, wenn man aus irgendeinem Grund die Textbreite ändert. Die (gemessene) tatsächliche Breite kann man als Argument einer zentrierten minipage verwenden.
\documentclass{book}
\usepackage{rail}

\begin{document} 
\paragraph*{SET TAMONITOR} 


\begin{center}
\begin{minipage}{6.8cm}
\begin{rail} 
 'SET TAMONITOR' ( 'TRUE' | 'FALSE' ); 
\end{rail}
\end{minipage}
\end{center}
\end{document}
Siehe auch Worin besteht der Unterschied zwischen \textwidth und \linewidth?

Gruß
Elke

Verfasst: Mi 30. Apr 2014, 13:20
von and_go
danke, das hilft mir schon mal weiter. Ggf. kann man in rail.sty eine Zentrierung ergänzen. Der Code ist ja noch überschaubar.

Verfasst: Mi 30. Apr 2014, 13:26
von esdd
and_go hat geschrieben:danke, das hilft mir schon mal weiter. Ggf. kann man in rail.sty eine Zentrierung ergänzen. Der Code ist ja noch überschaubar.
Nein, kann man nicht so einfach, da in der rail.sty nirgendwo die tatsächliche Breite des Diagrammes ermittelt wird. Der picture Umgebung wird wie gesagt mitgeteilt, dass sie die Breite 0 hat ... Und wenn du die in der rail.sty zentrierst, landet der linke Rand in der Mitte.

Du kannst das auch sehen, wenn du in meinem Code oben die Breite der minipage auf 0 setzt. Du bekommst dann keinerlei Warnung wegen einer zu vollen Box und der linke Rand der rail Abbildung ist zentriert.

Gruß
Elke

Verfasst: Do 1. Mai 2014, 20:19
von and_go
schade, da ich eh alle Teildiagramme zentriert bräuchte, was das rail-Package nicht ermöglicht, habe ich mich dazu entschieden, Arbeit zu investieren und die Diagramme mit tikz zu erstellen. Mit TikzEdit geht das auch recht komfortabel.