diff options
author | Karl Berry <karl@freefriends.org> | 2007-10-27 22:42:59 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-10-27 22:42:59 +0000 |
commit | 04f8d3312301550a655b78c346f9c38a9377e0c5 (patch) | |
tree | 9d33b81e721c0f7fdea86b630b2137ac06ce41ea /Master/texmf-dist | |
parent | b573709765ac7c870e6e7ee9879a552dffd9f93b (diff) |
new latex package gu (25nov06)
git-svn-id: svn://tug.org/texlive/trunk@5293 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/gu/README | 31 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/gu/gudemo.tex | 480 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/gu/gudoc.pdf | bin | 0 -> 766552 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/gu/gudoc.tex | 1204 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/gu/gu.sty | 958 |
5 files changed, 2673 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/gu/README b/Master/texmf-dist/doc/latex/gu/README new file mode 100644 index 00000000000..14ce71173c6 --- /dev/null +++ b/Master/texmf-dist/doc/latex/gu/README @@ -0,0 +1,31 @@ +gu.sty - Gruppe-Untergruppe-Stammbäume setzen + +(Note for English speaking users: see further down for an English version of +this summary.) + +Das Paket gu.sty erleichtert das Setzen von einfachen kristallographischen +Gruppe-Untergruppe-Schemata im Bärnighausen-Formalismus und/oder +Lagenfortführungstabellen. Die einzelnen Elemente und Abstände werden +innerhalb einer neuen Umgebung namens "stammbaum" mittels vorgegebener +Kommandos definiert. Anschließend werden alle Abstände automatisch berechnet +und der Stammbaum und/oder die Tabellen ausgegeben. Momentan werden maximal +zwei Abstiegsschritte unterstützt, eine Erweiterung ist aber relativ +problemlos möglich. Für Einzelheiten und Dokumentation siehe gudoc.pdf. +Dieses Paket unterliegt der LaTeX Project Public License, siehe +http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html für nähere +Details. Copyright (C) 2006, 2007 Stefan Lange + + +The aim of the package gu.sty is to simplify typesetting of simple +crystallographic group-subgroup-schemes in the Bärnighausen formalism. It +defines a new environment "stammbaum", wherein all elements of the scheme +are defined. Afterwards all necessary dimensions are calculated and the +scheme is drawn. Currently two steps of symmetry reduction are supported. +Further documentation is currently only available in German in the file +gudoc.pdf. + +This material is subject to the LaTeX Project Public License. See +http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the +details of that license. + +Copyright (C) 2006, 2007 Stefan Lange
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/gu/gudemo.tex b/Master/texmf-dist/doc/latex/gu/gudemo.tex new file mode 100644 index 00000000000..6161a3f8395 --- /dev/null +++ b/Master/texmf-dist/doc/latex/gu/gudemo.tex @@ -0,0 +1,480 @@ +\documentclass[tablecaptionabove]{scrartcl} +\usepackage{amssymb} % Symbole +\usepackage{ifpdf} +\ifpdf +\usepackage[pdftex]{gu} +\else +\usepackage[dvips]{gu} +%\usepackage[dvips,pstarrows]{gu} +\fi + +%\setlength{\extrarowheight}{0.1em} % Extraabstand Zellinhalt-Zellrahmen + + +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{ngerman} +%\usepackage[german]{babel} +\usepackage{textcomp,lmodern} + + +\begin{document} + +Momentan werden zwei Symmetrieabstiegsschritte unterstützt. Ein schematischer +Stammbaum ist in Abbildung~\ref{abb_schematisch} gezeigt. + +\begin{figure}[btp] +\begin{stammbaum} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%% Ab hier die einzelnen Elemente eintragen %%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Die verschiedenen Elemente, die links gesetzt werden, der Stammbaum +\setuplinks{true} % Raumgruppe+Summenformel eins: true=Anzeigen, false=Ausblenden + {2em} % Mindestlänge Linie/Pfeil1: Muss unbedingt Längeneinheit + % sein, zum Ausblenden: 0em oder 0pt etc. + {true} % Abstiegssymbol eins: true=Anzeigen, false=Ausblenden + {true} % Raumgruppe+Summenformel zwei: true=Anzeigen, false=Ausblenden + {2em} % Mindestlänge Linie/Pfeil2: Muss unbedingt Längeneinheit + % sein, zum Ausblenden: 0em oder 0pt etc. + {true} % Abstiegssymbol zwei: true=Anzeigen, false=Ausblenden + {true} % Raumgruppe+Summenformel drei: true=Anzeigen, false=Ausblenden + {0em} % zusätzliche Abstände zwischen den Elementen: Muss + % unbedingt Längeneinheit sein + + +% Die Elemente rechts, die Tabellen mit der Lagenfortführung +\setuprechts{true} % Lagentabelle eins: true=Anzeigen, false=Ausblenden + {2em} % Pfeile eins Mindestlänge: Muss unbedingt Längeneinheit + % sein, zum Ausblenden: 0em oder 0pt etc. + {true} % Transformationsmatrix eins: true=Anzeigen, false=Ausblenden + {true} % Lagentabelle zwei: true=Anzeigen, false=Ausblenden + {4em} % Pfeile zwei Mindestlänge: Muss unbedingt Längeneinheit + % sein, zum Ausblenden: 0em oder 0pt etc. + {true} % Transformationsmatrix zwei: true=Anzeigen, false=Ausblenden + {true} % Lagentabelle drei: true=Anzeigen, false=Ausblenden + {0.5em} % zusätzliche Abstände zwischen den Elementen: Muss + % unbedingt Längeneinheit sein + +% Weitere Einstellungen +\setupdivers{2em} % horizontaler Abstand Stammbaum <--> Lagentabellen + {0em} % Extraabstand für Kollisionskontrolle Pfeile rechts x + {0em} % Extraabstand für Kollisionskontrolle Pfeile rechts y + {false} % Abstieg 1: true=Symbole links und rechts auf gleicher Höhe + {false} % Abstieg 2: true=Symbole links und rechts auf gleicher Höhe + {false} % true=Randbox, false=keine Randbox anzeigen + +% Einstellungen, die die Lagentabellen betreffen +\setuprlagentabellen{4.5em} % Spaltenbreite (Längeneinheit, bei Bedarf anpassen) + {2} % Anzahl Spalten Tabelle 1 (Zahl) + {1} % Anzahl Spalten Tabelle 2 (Zahl) + {1} % Anzahl Spalten Tabelle 3 (Zahl) +{0em}% horizontale Verschiebung Tabelle eins +{0em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + +% Raumgruppe und Summenformel eins +\lverbindungeins{% +\fbox{{\Huge lblockeins}}% +} + +% Abstiegssymbol eins +\labstiegeins{% +\fbox{lseins}% +} + +% Raumgruppe und Summenformel zwei +\lverbindungzwei{% +\fbox{{\tiny lblockzwei}}% +} + +% Abstiegssymbol zwei +\labstiegzwei{% +\fbox{lszwei}% +} + +% Raumgruppe und Summenformel drei +\lverbindungdrei{% +\fbox{{\Huge lblockdrei}}% +} + +% Transformationsmatrix zwischen Tabelle 1 und 2 +\rlagentranseins{% +\fbox{rseins}% +} + +% Transformationsmatrix zwischen Tabelle 2 und 3 +\rlagentranszwei{% +\fbox{rszwei}% +} + +% Lagentabelle eins +% Optional Verschiebung in x angeben (Längeneinheit) +% negative Werte funktionieren evtl. noch nicht so 100% +\rlagentabelleeins{% +\fbox{{\tiny rblockeins}}% +} + +% Lagentabelle zwei +% Optional Verschiebung in x angeben (Längeneinheit) +% negative Werte funktionieren evtl. noch nicht so 100% +\rlagentabellezwei{% +\fbox{{\Huge rblockzwei}}% +} + +% Lagentabelle drei +% Optional Verschiebung in x angeben (Längeneinheit) +% negative Werte funktionieren evtl. noch nicht so 100% +\rlagentabelledrei{% +\fbox{{\tiny rblockdrei}}% +} + + +% Die Pfeile zwischen den Tabellen +% \rpfeileinszwei{start}{ziel} zeichnet einen Pfeil von Spalte "start" nach +% Spalte "ziel" von Lagentabelle eins nach Lagentabelle zwei +% \rpfeilzweidrei{start}{ziel} zeichnet einen Pfeil von Spalte "start" nach +% Spalte "ziel" von Lagentabelle zwei nach Lagentabelle drei +\rechtspfeilsetup{ +\rpfeileinszwei{1}{1} +\rpfeilzweidrei{1}{1} +\rpfeileinszwei{1}{3} +\rpfeilzweidrei{1}{3} + + + +} + +\end{stammbaum} +\caption{Allgemeiner schematischer Aufbau der einzelnen Elemente.} +\label{abb_schematisch} +\end{figure} + + +Abbildung~\ref{abb_einfach} zeigt einen einfachen Stammbaum mit einem +Symmetrieabstieg ohne Lagenfortführung. +\begin{figure}[btp] +\centering +\begin{stammbaum} + +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Abstiegssymbol 2 +{false}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{false}% Lagentabelle 1 +{0em}% Mindestlänge Linie/Pfeil 1 +{false}% Transformation 1 +{false}% Lagentabelle 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Transformation 2 +{false}% Lagentabelle 3 +{0em}% zusätzliche vertikale Abstände + +\setupdivers% +{0em}% horizontaler Abstand links <-> rechts +{0em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{false}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen + +\setuprlagentabellen% +{0em}% Spaltenbreite +{0}% Anzahl Spalten Tabelle eins +{0}% Anzahl Spalten Tabelle zwei +{0}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{0em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/mmc$\\ +\fbox{AuSn}\\ +\end{tabular}% +} + +\labstiegeins{% +t2% +} + +\lverbindungzwei{% +\begin{tabular}{c}% +$P\overline{3}m1$\\ +\fbox{AuNiSn$_2$}\\ +\end{tabular}% +} + +\end{stammbaum} + +\caption{Einfacher Stammbaum ohne Lagenfortführung.} +\label{abb_einfach} +\end{figure} + + + + + +Abbildung~\ref{abb_einfach_mit} zeigt einen einfachen Stammbaum mit einem +Symmetrieabstieg mit Lagenfortführung. Dieses Mal werden die Lagentabellen mit +definiert. Zur Demonstration des optionalen Parameters zur Verschiebung der +Tabellen ist die untere Tabelle um \texttt{2em} nach rechts verschoben. +\begin{figure}[btp] +\centering +\begin{stammbaum} +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Abstiegssymbol 2 +{false}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{true}% Lagentabelle 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{false}% Transformation 1 +{true}% Lagentabelle 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Transformation 2 +{false}% Lagentabelle 3 +{0.5em}% zusätzliche vertikale Abstände + +\setupdivers% +{1em}% horizontaler Abstand links <-> rechts +{0em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{true}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen + +\setuprlagentabellen% +{4.5em}% Spaltenbreite +{2}% Anzahl Spalten Tabelle eins +{3}% Anzahl Spalten Tabelle zwei +{0}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{2em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + + +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/mmc$\\ +\fbox{AuSn}\\ +\end{tabular}% +} + +\labstiegeins{% +t2% +} + +\lverbindungzwei{% +\begin{tabular}{c}% +$P\overline{3}m1$\\ +\fbox{AuNiSn$_2$}\\ +\end{tabular}% +} + +\rlagentabelleeins{% +\begin{tabularx}{\spaltenbreiteem*\spalteneins}[b]{|z|z|} +\hline +Au: $2a$ & Sn: $2c$ \\ +$\overline{3}m.$ & $\overline{6}m2$ \\ +\hline +0 & \ed \\ +0 & \zd \\ +0 & \ev \\ +\hline +\end{tabularx}% +} + +\rlagentabellezwei{% +\begin{tabularx}{\spaltenbreiteem*\spaltenzwei}[b]{|z|z|z|} +\hline +Au: $2a$ & Ni: $1b$ & Sn: $2d$ \\ +$\overline{3}m.$ & $\overline{3}m.$ & $3m.$ \\ +\hline +0 & 0 & \ed \\ +0 & 0 & \zd \\ +0 & \eh & 0.2831 \\ +\hline +\end{tabularx}% +} + +\rechtspfeilsetup{% +\rpfeileinszwei{1}{1} +\rpfeileinszwei{1}{2} +\rpfeileinszwei{2}{3} +} +\end{stammbaum} +\caption{Einfacher Stammbaum mit Lagenfortführung.} +\label{abb_einfach_mit} +\end{figure} + + + +Abbildung~\ref{abb_mit_aufw} zeigt einen etwas aufwändigeren Stammbaum +mit zwei Symmetrieabbaustufen und Lagenfortführung. Außerdem wird die +Möglichkeit der Angabe einer Lagentransformation demonstriert, auch wenn sie in +diesem Beispiel kristallographisch gesehen sinnfrei ist. Die Pfeile rechts +werden gegebenenfalls durchbrochen, wenn sie den Text der Lagentransformation +schneiden würden. Die virtuelle Box um den Text der Lagentransformation (rseins, +rszwei), die benutzt wird, um zu bestimmen, ob der Pfeil unterbrochen werden +muss oder nicht, kann mit Hilfe eines Parameters zur Feineinstellung (Teil des +Befehls \texttt{\textbackslash{}setupdivers}) manuell +vergrößert oder verkleinert werden, wenn die Ergebnisse suboptimal aussehen. + +Dieses Beispiel zeigt auch die beiden unterschiedlichen Anordnungsoptionen für +die Abstiegssymbole und die Lagentransformation. Im ersten Schritt sind beide +auf gleicher Höhe ausgerichtet, das Abstiegssymbol ist dafür nicht mehr genau in +der Mitte zwischen lblockeins und lblockzwei. Im Fall des zweiten Abstiegs sind +rseins und lseins jeweils genau in der Mitte der Pfeile, aber dafür nicht bündig +auf einer Höhe. Das Verhalten läßt sich mittels der Schalter in +\texttt{\textbackslash{}setupdivers} einstellen. + + +\begin{figure}[btp] +\centering +\begin{stammbaum} + +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{2em}% Mindestlänge Linie/Pfeil 2 +{true}% Abstiegssymbol 2 +{true}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{true}% Lagentabelle 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{true}% Transformation 1 +{true}% Lagentabelle 2 +{2em}% Mindestlänge Linie/Pfeil 2 +{true}% Transformation 2 +{true}% Lagentabelle 3 +{0.5em}% zusätzliche vertikale Abstände + +\setupdivers% +{3em}% horizontaler Abstand links <-> rechts +{-0.5em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{true}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen + +\setuprlagentabellen% +{4.5em}% Spaltenbreite +{2}% Anzahl Spalten Tabelle eins +{2}% Anzahl Spalten Tabelle zwei +{4}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{0em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/m \, 2/c \, 2/m$\\[0.3em] +\fbox{hex. TiI$_3$}\\ +\end{tabular}% +} + +\labstiegeins{% +\begin{tabular}{c} +k3\\ +$\mathbf{a-b, a+2b, c}$ +\end{tabular}% +} + +\lverbindungzwei{% +$P6_3/m \, 2/m \, 2/c$%\\ +} + +\labstiegzwei{% +t2% +} + +\lverbindungdrei{% +\begin{tabular}{c} +$P\overline{3} \, 2/m \, 1$\\[0.3em] +\fbox{$\beta$-WCl$_6$}\\ +\end{tabular}% +} + +\rlagentranseins{% +$x,y,z$ (überflüssig)% +} + +\rlagentranszwei{% +$x,y,z$ (sinnfrei) % +} + +\rlagentabelleeins{% +\begin{tabularx}{\spaltenbreiteem*\spalteneins}[t]{|z|z|} +\hline +Ti: $2b$ & $\Box$: $4d$ \\ +$\overline{3}m$ & $3.2$ \\ +\hline +0 & \zd \\ +0 & \ed \\ +0 & 0 \\ +\hline +\end{tabularx}% +} + +\rlagentabellezwei{% +\begin{tabularx}{\spaltenbreiteem*\spaltenzwei}[t]{|z|z|}% +\hline +$2a$ & $4f$ \\ +$\overline{3}m$ & $3m$ \\ +\hline +0 & \ed \\ +0 & \zd \\ +0 & 0.0 \\ +\hline +\end{tabularx}% +} + +\rlagentabelledrei{% +\begin{tabularx}{\spaltenbreiteem*\spaltendrei}[t]{|z|z|z|z|} +\hline +W1: $1a$ & $\Box$: $1b$ & W2: $2d$ & $\Box$: $2d$\\ +$\overline{3}m$ & $\overline{3}m$ & $3m$ & $3m$ \\ +\hline +0 & 0 & \ed & \ed \\ +0 & 0 & \zd & \zd \\ +0 & \eh & 0.473 & 0.0 \\ +\hline +\end{tabularx}% +} + + +\rechtspfeilsetup{ +\rpfeileinszwei{1}{1} +\rpfeileinszwei{1}{2} +\rpfeilzweidrei{1}{1} +\rpfeilzweidrei{1}{2} +\rpfeilzweidrei{2}{3} +\rpfeilzweidrei{2}{4} +} +\end{stammbaum} + +\caption{Etwas aufwändigerer Stammbaum mit Lagenfortführung und +(sinnfreier) Koordinatentransformation.} +\label{abb_mit_aufw} +\end{figure} + +\end{document} + diff --git a/Master/texmf-dist/doc/latex/gu/gudoc.pdf b/Master/texmf-dist/doc/latex/gu/gudoc.pdf Binary files differnew file mode 100644 index 00000000000..cefeba9d4e4 --- /dev/null +++ b/Master/texmf-dist/doc/latex/gu/gudoc.pdf diff --git a/Master/texmf-dist/doc/latex/gu/gudoc.tex b/Master/texmf-dist/doc/latex/gu/gudoc.tex new file mode 100644 index 00000000000..a808af122f2 --- /dev/null +++ b/Master/texmf-dist/doc/latex/gu/gudoc.tex @@ -0,0 +1,1204 @@ +\documentclass[tablecaptionabove]{scrartcl} +\usepackage{amssymb} % Symbole +\usepackage{ifpdf} +\ifpdf +\usepackage[pdftex]{gu} +\else +\usepackage[dvips]{gu} +%\usepackage[dvips,pstarrows]{gu} +\fi + +%\setlength{\extrarowheight}{0.1em} % Extraabstand Zellinhalt-Zellrahmen + + +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{ngerman} +%\usepackage[german]{babel} +\usepackage{textcomp,lmodern,booktabs} +\ifpdf +\usepackage[pdftex,usenames]{color} +\else +\usepackage[dvips,usenames]{color} +\fi +\usepackage{microtype} +\usepackage[% +\ifpdf + pdftex,% +\else + dvipdfm,% +\fi + linktocpage=true,% nur Seitenzahl im toc/lof/lot ist verlinkt + pdfpagelabels=true,% + plainpages=false,% + final=true,% auch im draft-Modus von KOMA schon linken + bookmarks=true,% + bookmarksnumbered=true,% Abschnittsnummern in den Bookmarks + colorlinks=true,% + pdftitle={Das Paket gu},% + pdfsubject={Dokumentation},% + pdfauthor={Stefan Lange},% + pdfkeywords={Gruppe, Untergruppe, Stammbaum, Bärnighausen, + Symmetrieabbau, Lagenfortführung},% + linkcolor=blue,% Farbe von Querverweisen \ref etc. + citecolor=blue,% Farbe von Lit. \cite etc. + pagecolor=blue,% Farbe von Seitenverweisen im toc etc. + pagebackref=true,% Rckverweise im Lit-Verzeichnis auf die Seiten + ]{hyperref} + + + + +\title{Das Paket gu} +\author{Stefan Lange} +\date{2007-01-19} + +\begin{document} +\maketitle +\tableofcontents +\listoffigures +\listoftables +\section{Überblick} +Das Paket \texttt{gu.sty} erleichtert das Setzen von einfachen +Gruppe-Untergruppe-Stammbäumen +und/oder Lagenfortführungstabellen im Bärnighausen-Formalismus.\footnote{siehe H. +Bärnighausen, \textit{Comm. Math. Chem.} \textbf{1980}, \textit{9}, 139. und H. +Bärnighausen, U. Müller, \textit{Symmetriebeziehungen zwischen den Raumgruppen +als Hilfsmittel zur straffen Darstellung von Strukturzusammenhängen in der +Kristallchemie}, Universität Karlsruhe und Universität/GH Kassel, \textbf{1996}.} +Die einzelnen Elemente und Abstände werden innerhalb einer neuen Umgebung namens +\texttt{stammbaum} mittels vorgegebener Kommandos +definiert. +Anschließend werden alle Abstände automatisch berechnet und der Stammbaum +und/oder die Tabellen ausgegeben. +Momentan werden maximal zwei Abstiegsschritte unterstützt, eine Erweiterung ist +aber relativ problemlos möglich. + +\section{Voraussetzungen} +\texttt{gu.sty} benötigt \LaTeXe mit folgenden Zusatzpaketen: +\begin{itemize} +\item array +\item tabularx +\item pict2e +\item calc (mindestens Version [2005/08/06]) +\item fp +\item ifthen +\end{itemize} + +\section{Optionen} +Unterstützt werden die meisten Optionen des Paketes \texttt{pict2e.sty} (vgl. +Dokumentation dieses Pakets). Alle Optionen +werden an dieses Paket unverändert durchgereicht. Eine Aufstellung ist in +Tabelle~\ref{tabelle_optionen} zu finden. +Hinweis (aus der \texttt{pict2e}-Dokumentation): \texttt{pict2e} (und damit auch +\texttt{gu}) sollte immer mit der gleichen +Treiberoption wie die Pakete \texttt{graphic\{x,s\}} und \texttt{color} aufgerufen werden. +Andernfalls könnten unerwünschte Nebeneffekte auftreten. + +\begin{table}[tbp] +\caption{Unterstützte Paketoptionen von \texttt{gu.sty}} +\label{tabelle_optionen} +\centering +\begin{tabular}{l l} +\toprule +Option & Funktion \\ +\midrule +dvips & Treiberoption \\ +xdvi & Treiberoption \\ +pdftex & Treiberoption \\ +vtex & Treiberoption \\ +dvipdfm & Treiberoption \\ +ltxarrows & Pfeilspitzen im \LaTeX{}-Stil \\ +pstarrows & Pfeilspitzen im PSTricks-Stil\\ + +\bottomrule +\end{tabular} +\end{table} + +\section{Neue Befehle und Umgebungen} +\texttt{gu.sty} definiert die neue Umgebung \texttt{stammbaum}. Ein +Stammbaum im Bärnighausen-Formalismus wird also nach folgendem Prinzip +definiert: +\begin{quote} +\texttt{\textbackslash{}begin\{stammbaum\}\newline +\textbackslash{}befehl1\newline +\textbackslash{}befehl2\newline +\ldots\newline +\textbackslash{}end\{stammbaum\}} +\end{quote} +Momentan werden zwei Symmetrieabstiegsschritte unterstützt. Ein schematischer +Stammbaum ist in Abbildung~\ref{abb_schematisch} gezeigt. Die neuen Befehle und +ihre Bedeutung werden im folgenden kurz beschrieben. + +\begin{figure}[btp] +\begin{stammbaum} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%% Ab hier die einzelnen Elemente eintragen %%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Die verschiedenen Elemente, die links gesetzt werden, der Stammbaum +\setuplinks{true} % Raumgruppe+Summenformel eins: true=Anzeigen, false=Ausblenden + {2em} % Mindestlänge Linie/Pfeil1: Muss unbedingt Längeneinheit + % sein, zum Ausblenden: 0em oder 0pt etc. + {true} % Abstiegssymbol eins: true=Anzeigen, false=Ausblenden + {true} % Raumgruppe+Summenformel zwei: true=Anzeigen, false=Ausblenden + {2em} % Mindestlänge Linie/Pfeil2: Muss unbedingt Längeneinheit + % sein, zum Ausblenden: 0em oder 0pt etc. + {true} % Abstiegssymbol zwei: true=Anzeigen, false=Ausblenden + {true} % Raumgruppe+Summenformel drei: true=Anzeigen, false=Ausblenden + {0em} % zusätzliche Abstände zwischen den Elementen: Muss + % unbedingt Längeneinheit sein + + +% Die Elemente rechts, die Tabellen mit der Lagenfortführung +\setuprechts{true} % Lagentabelle eins: true=Anzeigen, false=Ausblenden + {2em} % Pfeile eins Mindestlänge: Muss unbedingt Längeneinheit + % sein, zum Ausblenden: 0em oder 0pt etc. + {true} % Transformationsmatrix eins: true=Anzeigen, false=Ausblenden + {true} % Lagentabelle zwei: true=Anzeigen, false=Ausblenden + {4em} % Pfeile zwei Mindestlänge: Muss unbedingt Längeneinheit + % sein, zum Ausblenden: 0em oder 0pt etc. + {true} % Transformationsmatrix zwei: true=Anzeigen, false=Ausblenden + {true} % Lagentabelle drei: true=Anzeigen, false=Ausblenden + {0.5em} % zusätzliche Abstände zwischen den Elementen: Muss + % unbedingt Längeneinheit sein + +% Weitere Einstellungen +\setupdivers{2em} % horizontaler Abstand Stammbaum <--> Lagentabellen + {0em} % Extraabstand für Kollisionskontrolle Pfeile rechts + {0em} + {false} % Abstieg 1: true=Symbole links und rechts auf gleicher Höhe + {false} % Abstieg 2: true=Symbole links und rechts auf gleicher Höhe + {false} % true=Randbox, false=keine Randbox anzeigen + +% Einstellungen, die die Lagentabellen betreffen +\setuprlagentabellen{4.5em} % Spaltenbreite (Längeneinheit, bei Bedarf anpassen) + {2} % Anzahl Spalten Tabelle 1 (Zahl) + {1} % Anzahl Spalten Tabelle 2 (Zahl) + {1} % Anzahl Spalten Tabelle 3 (Zahl) +{0em}% horizontale Verschiebung Tabelle eins +{0em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + +% Raumgruppe und Summenformel eins +\lverbindungeins{% +\fbox{{\Huge lblockeins}}% +} + +% Abstiegssymbol eins +\labstiegeins{% +\fbox{lseins}% +} + +% Raumgruppe und Summenformel zwei +\lverbindungzwei{% +\fbox{{\tiny lblockzwei}}% +} + +% Abstiegssymbol zwei +\labstiegzwei{% +\fbox{lszwei}% +} + +% Raumgruppe und Summenformel drei +\lverbindungdrei{% +\fbox{{\Huge lblockdrei}}% +} + +% Transformationsmatrix zwischen Tabelle 1 und 2 +\rlagentranseins{% +\fbox{rseins}% +} + +% Transformationsmatrix zwischen Tabelle 2 und 3 +\rlagentranszwei{% +\fbox{rszwei}% +} + +% Lagentabelle eins +% Optional Verschiebung in x angeben (Längeneinheit) +% negative Werte funktionieren evtl. noch nicht so 100% +\rlagentabelleeins{% +\fbox{{\tiny rblockeins}}% +} + +% Lagentabelle zwei +% Optional Verschiebung in x angeben (Längeneinheit) +% negative Werte funktionieren evtl. noch nicht so 100% +\rlagentabellezwei{% +\fbox{{\Huge rblockzwei}}% +} + +% Lagentabelle drei +% Optional Verschiebung in x angeben (Längeneinheit) +% negative Werte funktionieren evtl. noch nicht so 100% +\rlagentabelledrei{% +\fbox{{\tiny rblockdrei}}% +} + + +% Die Pfeile zwischen den Tabellen +% \rpfeileinszwei{start}{ziel} zeichnet einen Pfeil von Spalte "start" nach +% Spalte "ziel" von Lagentabelle eins nach Lagentabelle zwei +% \rpfeilzweidrei{start}{ziel} zeichnet einen Pfeil von Spalte "start" nach +% Spalte "ziel" von Lagentabelle zwei nach Lagentabelle drei +\rechtspfeilsetup{ +\rpfeileinszwei{1}{1} +\rpfeilzweidrei{1}{1} +\rpfeileinszwei{1}{3} +\rpfeilzweidrei{1}{3} + + + +} + +\end{stammbaum} +\caption{Allgemeiner schematischer Aufbau der einzelnen Elemente.} +\label{abb_schematisch} +\end{figure} + +\subsection{Allgemeines} +Einige Befehle dienen der Konfiguration des Stammbaumes, also der Definition, +welche Elemente vorhanden sind. Diese Befehle sind obligatorisch, ein Weglassen +führt zu Fehlermeldungen. + +Argumente vom Typ \emph{Länge} erwarten eine von \TeX{} +unterstützte Längeneinheit (sp, pt, bp, dd, mm, pc, cc, cm, in, ex oder em). Zum +vollständigen Deaktivieren eines solchen Elements muss die entsprechende Länge +auf 0 gesetzt werden, allerdings \emph{mit} Einheit, also etwa \texttt{0em}. + +Argumente vom Typ \emph{boolean} erwarten als Eingabe entweder \texttt{true} oder +\texttt{false}. \texttt{true} aktiviert das jeweilig Element, \texttt{false} +deaktiviert es, so dass es nicht angezeigt wird. + +Argumente vom Typ \emph{Integer} erwarten eine positive ganze Zahl. + + + +\subsection{Befehle zur Konfiguration des Stammbaumes (obligatorisch)} + +\subsubsection{\textbackslash{}setuplinks} +\texttt{\textbackslash{}setuplinks} erwartet insgesamt acht Argumente, welche die +einzelnen Elemente und Abstände im linken Teil der Abbildung, dem +Symmetriestammbaum, steuern. Die +Argumente sind im Einzelnen in Tabelle~\ref{tab_optionen_setuplinks} aufgeführt. + +\begin{table}[hbtp] +\centering +\caption{Argumente von \texttt{\textbackslash{}setuplinks}} +\label{tab_optionen_setuplinks} +\begin{tabular}{l l l l} +\toprule +& Typ & Beschreibung & Name in Abb.~\ref{abb_schematisch} \\ +\midrule +\texttt{\textbackslash{}setuplinks} & \{\emph{boolean}\} & Raumgruppe und +Summenformel eins & lblockeins \\ + +& \{\emph{Länge}\} & Mindestlänge Linie/Pfeil1 & \\ +& \{\emph{boolean}\} & Abstiegssymbol eins & lseins \\ +& \{\emph{boolean}\} & Raumgruppe und Summenformel zwei & +lblockzwei \\ +& \{\emph{Länge}\} & Mindestlänge Linie/Pfeil2 & \\ +& \{\emph{boolean}\} & Abstiegssymbol zwei & lszwei \\ +& \{\emph{boolean}\} & Raumgruppe und Summenformel drei & lblockdrei \\ +& \{\emph{Länge}\} & zusätzliche vertikale Abstände& \\ +\bottomrule +\end{tabular} +\end{table} + +\subsubsection{\textbackslash{}setuprechts} +\texttt{\textbackslash{}setuprechts} erwartet insgesamt acht Argumente, welche die +einzelnen Elemente und Abstände im rechten Teil der Abbildung, den +Tabellen mit der Lagenfortführung, steuern. Die +Argumente sind im Einzelnen in Tabelle~\ref{tab_optionen_setuprechts} aufgeführt. + +\begin{table}[hbtp] +\centering +\caption{Argumente von \texttt{\textbackslash{}setuprechts}} +\label{tab_optionen_setuprechts} +\begin{tabular}{l l l l} +\toprule +& Typ & Beschreibung & Name in Abb.~\ref{abb_schematisch} \\ +\midrule +\texttt{\textbackslash{}setuprechts} & \{\emph{boolean}\} & Lagentabelle eins & +rblockeins \\ + +& \{\emph{Länge}\} & Mindestlänge Linie/Pfeil1 & \\ +& \{\emph{boolean}\} & Transformation eins & rseins \\ +& \{\emph{boolean}\} & Lagentabelle zwei & +rblockzwei \\ +& \{\emph{Länge}\} & Mindestlänge Linie/Pfeil2 & \\ +& \{\emph{boolean}\} & Transformation zwei & rszwei \\ +& \{\emph{boolean}\} & Lagentabelle drei & rblockdrei \\ +& \{\emph{Länge}\} & zusätzliche vertikale Abstände& \\ +\bottomrule +\end{tabular} +\end{table} + + +\subsubsection{\textbackslash{}setupdivers} +\label{setupdivers} +\texttt{\textbackslash{}setupdivers} erwartet insgesamt sechs Argumente, welche +weitere Zeichnungsoptionen, steuern. Die +Argumente sind im Einzelnen in Tabelle~\ref{tab_optionen_setupdivers} aufgeführt. + +\begin{table}[hbtp] +\centering +\caption{Argumente von \texttt{\textbackslash{}setupdivers}} +\label{tab_optionen_setupdivers} +\begin{tabular}{l l l} +\toprule +& Typ & Beschreibung \\ +\midrule +\texttt{\textbackslash{}setupdivers} & \{\emph{Länge}\} & horizontaler Abstand +links $\leftrightarrow$ rechts \\ +& \{\emph{Länge}\} & Feinabstimmung Kollisionskontrolle x \\ +& \{\emph{Länge}\} & Feinabstimmung Kollisionskontrolle y \\ +& \{\emph{boolean}\} & lseins und rseins vertikal zentrieren \\ +& \{\emph{boolean}\} & lszwei und rszwei vertikal zentieren \\ +& \{\emph{boolean}\} & Randbox zeichnen \\ +\bottomrule +\end{tabular} +\end{table} + + +\subsubsection{\textbackslash{}setuprlagentabellen} +\texttt{\textbackslash{}setuprlagentabellen} erwartet insgesamt sieben Argumente, +welche die Lagenfortführungstabellen steuern. Die +Argumente sind im Einzelnen in Tabelle~\ref{tab_optionen_setuprlagentabellen} aufgeführt. +Die letzten drei Längenangaben bei den Lagentabellen definieren dabei eine optionale +Verschiebung der jeweiligen Tabelle in $x$-Richtung. Achtung: Führt +eventuell zu Problemen, weitgehend ungetestet. + +\begin{table}[hbtp] +\centering +\caption{Argumente von \texttt{\textbackslash{}setuprlagentabellen}} +\label{tab_optionen_setuprlagentabellen} +\begin{tabular}{l l l} +\toprule +& Typ & Beschreibung \\ +\midrule +\texttt{\textbackslash{}setuprlagentabellen} & \{\emph{Länge}\} & +Spaltenbreite \\ +& \{\emph{Integer}\} & Anzahl Spalten Tabelle 1 \\ +& \{\emph{Integer}\} & Anzahl Spalten Tabelle 2 \\ +& \{\emph{Integer}\} & Anzahl Spalten Tabelle 3 \\ +& \{\emph{Länge}\} & optionale horizontale Verschiebung Tabelle 1 \\ +& \{\emph{Länge}\} & optionale horizontale Verschiebung Tabelle 2 \\ +& \{\emph{Länge}\} & optionale horizontale Verschiebung Tabelle 3 \\ +\bottomrule +\end{tabular} +\end{table} + + +\subsection{Befehle zur Definition der einzelnen Elemente (optional)} +\subsubsection{Festlegen der einzelnen Elemente links} +Die einzelnen Blöcke links (Stammbaum) werden mit weiteren Befehlen +definiert. Die Angabe dieser Elemente ist optional, nicht benötigte Blöcke +müssen nicht definiert werden. + +Alle Befehle erwarten je ein Argument, einen beliebigen +\TeX{}-Ausdruck, also zum Beispiel einen einzelnen Buchstabe, ein Wort, eine +mathematische Formel, eine Tabelle etc. Die einzelnen Befehle und die +entsprechende Bezeichung des jeweiligen Elements in +Abbildung~\ref{abb_schematisch} lauten: +\begin{itemize} +\item \texttt{\textbackslash{}lverbindungeins}\{\TeX\emph{-Ausdruck}\}: lblockeins +\item \texttt{\textbackslash{}lverbindungzwei}\{\TeX\emph{-Ausdruck}\}: lblockzwei +\item \texttt{\textbackslash{}lverbindungdrei}\{\TeX\emph{-Ausdruck}\}: lblockdrei +\item \texttt{\textbackslash{}labstiegeins}\{\TeX\emph{-Ausdruck}\}: lseins +\item \texttt{\textbackslash{}labstiegzwei}\{\TeX\emph{-Ausdruck}\}: lszwei +\end{itemize} + + +\subsubsection{Festlegen der einzelnen Elemente rechts} +Die einzelnen Blöcke rechts (Lagenfortführung) werden mit weiteren Befehlen +definiert. Die Angabe dieser Elemente ist optional, nicht benötigte Blöcke +müssen nicht definiert werden. + +Alle Befehle ervarten je ein Argument, einen beliebigen +\TeX{}-Ausdruck, also zum Beispiel einen einzelnen Buchstabe, ein Wort, eine +mathematische Formel, eine Tabelle etc. Die einzelnen Befehle und die +entsprechende Bezeichung des jeweiligen Elements in +Abbildung~\ref{abb_schematisch} lauten: +\begin{itemize} +\item +\texttt{\textbackslash{}rlagentabelleeins}\{\TeX\emph{-Ausdruck}\}: +rblockeins +\item +\texttt{\textbackslash{}rlagentabellezwei}\{\TeX\emph{-Ausdruck}\}: +rblockzwei +\item +\texttt{\textbackslash{}rlagentabelledrei}\{\TeX\emph{-Ausdruck}\}: +rblockdrei +\item \texttt{\textbackslash{}rlagentranseins}\{\TeX\emph{-Ausdruck}\}: rseins +\item \texttt{\textbackslash{}rlagentranszwei}\{\TeX\emph{-Ausdruck}\}: rszwei +\end{itemize} + +\subsubsection{Festlegen der Pfeile rechts} +Die Definition der Pfeile rechts zwischen den einzelnen Lagentabellen erfolgt +mit Hilfe des Befehls \texttt{\textbackslash{}rechtspfeilsetup}. Dieser erhält +als Argument eine Reihe von Pfeildefinitionen. Als Hilfe existieren die beiden +weiteren Befehle +\begin{itemize} +\item \texttt{\textbackslash{}rpfeileinszwei}\{\emph{Integer}\}\{\emph{Integer}\} und +\item \texttt{\textbackslash{}rpfeilzweidrei}\{\emph{Integer}\}\{\emph{Integer}\}. +\end{itemize} + Beide erhalten jeweils zwei Argumente, +die die Nummer des Start- und des Endkästchens der Pfeile festlegen. + +\texttt{\textbackslash{}rpfeileinszwei}\{1\}\{3\} zeichnet so beispielsweise einen +Pfeil von Kästchen 1 der ersten Tabelle nach Kästchen 3 der zweiten Tabelle, +\texttt{\textbackslash{}rpfeilzweidrei}\{4\}\{3\} entsprechend von Kästchen 4 der +zweiten Tabelle nach Kästchen 3 der dritten. + +Hinweis: Die Start- und Endwerte müssen technisch gesehen keine Integerzahlen +sein, eine Angabe der Form \texttt{\textbackslash{}rpfeileinszwei}\{1\}\{2.9\} +ist durchaus möglich. Dies kann nützlich sein, um einzelne Pfeile minimal in der +Position anzupassen, um ein \glqq{}Ineinanderlaufen\grqq{} mehrerer Pfeilspitzen +zu verhindern. + +\subsubsection{Details zu den Lagentabellen} +Damit die Pfeile rechts zwischen den Lagentabellen automatisch generiert werden +können, müssen die Tabellen eine fixe, bekannte Breite besitzen. Aus diesem +Grund sind die Lagentabellen in \texttt{tabularx}-Umgebungen mit fester +Gesamtbreite anzugeben. Als Spaltentyp wurde der neue Typ \texttt{z} definiert, +der Spalten mit fester Breite und zentriertem Inhalt liefert. Die Tabellen +werden am einfachsten folgendermaßen definiert (Beispiel für Tabelle eins): +\begin{quote} +\begin{verbatim} +\rlagentabelleeins{% +\begin{tabularx}{\spaltenbreiteem*\spalteneins}[b]{|z|z|} +... Tabelleninhalt ... +\end{tabularx}% +} +\end{verbatim} +\end{quote} +Die Längenangabe +\texttt{\{\textbackslash{}spaltenbreiteem{}*\textbackslash{}spalteneins\}} und +die Platzierungsangabe \texttt{[b]} sollten dabei auf keinen Fall editiert +werden, da hiermit die Berechnung der Breite und der vertikalen Platzierung +durchgeführt werden. Die Einstellung der Spalten, im Beispiel \texttt{|z|z|}, +muss an die Anzahl der tatsächlich vorhandenen Spalten angepasst werden. + +Achtung: Eine Änderung der Schriftgröße mitten in einer Stammbaum-Umgebung kann +bei Verwendung relativer Längeneinheiten (em, ex) zu unerwarteten Nebenwirkungen +wie falsch platzierten Pfeilen führen! + +\subsection{Sonstige neue Befehle} +Der neue Befehl \texttt{\textbackslash{}nfrac} wird +definiert.\footnote{\texttt{\textbackslash{}nfrac} wurde übernommen aus: Donald +E. Knuth: The \TeX{}book. Addison-Wesley Publ., Reading, Mass., + März 1992.} Er erwartet zwei +Argumente und bietet eine +alternative Schreibweise für Brüche im Vergleich zur Standard-\LaTeX-Variante: +\begin{quote} +\texttt{\textbackslash{}nfrac\{2\}\{3\}}: $\nfrac{2}{3}$ +im Gegensatz zu +\texttt{\textbackslash{}frac\{2\}\{3\}}: $\frac{2}{3}$ +\end{quote} +Einige Abkürzungen für häufig benutzte Brüche werden ebenfalls vordefiniert: +\begin{quote} +\texttt{\textbackslash{}eh}: \eh, +\texttt{\textbackslash{}ed}: \ed, +\texttt{\textbackslash{}ev}: \ev, +\texttt{\textbackslash{}es}: \es, +\texttt{\textbackslash{}zd}: \zd, +\texttt{\textbackslash{}dv}: \dv, +\texttt{\textbackslash{}fs}: \fs, +\texttt{\textbackslash{}ea}: \ea, +\texttt{\textbackslash{}da}: \da, +\texttt{\textbackslash{}fa}: \fa, +\texttt{\textbackslash{}sa}: \sa, +\end{quote} + +\section{Beispiele} +\subsection{Einfacher Stammbaum ohne Lagenfortführung} +Abbildung~\ref{abb_einfach} zeigt einen einfachen Stammbaum mit einem +Symmetrieabstieg ohne Lagenfortführung. Der entsprechende Quellcode ist in +Abbildung~\ref{abb_einfach_src} gezeigt. +\begin{figure}[htbp] +\centering +\begin{stammbaum} + +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Abstiegssymbol 2 +{false}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{false}% Lagentabelle 1 +{0em}% Mindestlänge Linie/Pfeil 1 +{false}% Transformation 1 +{false}% Lagentabelle 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Transformation 2 +{false}% Lagentabelle 3 +{0em}% zusätzliche vertikale Abstände + +\setupdivers% +{0em}% horizontaler Abstand links <-> rechts +{0em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{false}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen + +\setuprlagentabellen% +{0em}% Spaltenbreite +{0}% Anzahl Spalten Tabelle eins +{0}% Anzahl Spalten Tabelle zwei +{0}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{0em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/mmc$\\ +\fbox{AuSn}\\ +\end{tabular}% +} + +\labstiegeins{% +t2% +} + +\lverbindungzwei{% +\begin{tabular}{c}% +$P\overline{3}m1$\\ +\fbox{AuNiSn$_2$}\\ +\end{tabular}% +} + +\end{stammbaum} + +\caption{Einfacher Stammbaum ohne Lagenfortführung.} +\label{abb_einfach} +\end{figure} + +\begin{figure}[bp] +\centering +\begin{minipage}{0.45\textwidth} +\begin{tiny} +\begin{verbatim} +\begin{stammbaum} + +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Abstiegssymbol 2 +{false}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{false}% Lagentabelle 1 +{0em}% Mindestlänge Linie/Pfeil 1 +{false}% Transformation 1 +{false}% Lagentabelle 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Transformation 2 +{false}% Lagentabelle 3 +{0em}% zusätzliche vertikale Abstände + +\setupdivers% +{0em}% horizontaler Abstand links <-> rechts +{0em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{false}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen +\end{verbatim} +\end{tiny} +\end{minipage} +\hfill +\begin{minipage}{0.45\textwidth} +\begin{tiny} +\begin{verbatim} +\setuprlagentabellen% +{0em}% Spaltenbreite +{0}% Anzahl Spalten Tabelle eins +{0}% Anzahl Spalten Tabelle zwei +{0}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{0em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/mmc$\\ +\fbox{AuSn}\\ +\end{tabular}% +} + +\labstiegeins{% +t2% +} + +\lverbindungzwei{% +\begin{tabular}{c}% +$P\overline{3}m1$\\ +\fbox{AuNiSn$_2$}\\ +\end{tabular}% +} + +\end{stammbaum} +\end{verbatim} +\end{tiny} +\end{minipage} +\caption{Quellcode zu Abb.~\ref{abb_einfach}: Einfacher Stammbaum ohne Lagenfortführung.} +\label{abb_einfach_src} +\end{figure} + + + +\subsection{Einfacher Stammbaum mit Lagenfortführung} +Abbildung~\ref{abb_einfach_mit} zeigt einen einfachen Stammbaum mit einem +Symmetrieabstieg mit Lagenfortführung. Dieses Mal werden die Lagentabellen mit +definiert. Zur Demonstration des optionalen Parameters zur Verschiebung der +Tabellen ist die untere Tabelle um \texttt{2em} nach rechts verschoben. Der +zugehörige Quellcode ist in Abbildung~\ref{abb_einfach_mit_src} gezeigt. + +\begin{figure}[btp] +\centering +\begin{stammbaum} +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Abstiegssymbol 2 +{false}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{true}% Lagentabelle 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{false}% Transformation 1 +{true}% Lagentabelle 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Transformation 2 +{false}% Lagentabelle 3 +{0.5em}% zusätzliche vertikale Abstände + +\setupdivers% +{1em}% horizontaler Abstand links <-> rechts +{0em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{true}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen + +\setuprlagentabellen% +{4.5em}% Spaltenbreite +{2}% Anzahl Spalten Tabelle eins +{3}% Anzahl Spalten Tabelle zwei +{0}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{2em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + + +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/mmc$\\ +\fbox{AuSn}\\ +\end{tabular}% +} + +\labstiegeins{% +t2% +} + +\lverbindungzwei{% +\begin{tabular}{c}% +$P\overline{3}m1$\\ +\fbox{AuNiSn$_2$}\\ +\end{tabular}% +} + +\rlagentabelleeins{% +\begin{tabularx}{\spaltenbreiteem*\spalteneins}[b]{|z|z|} +\hline +Au: $2a$ & Sn: $2c$ \\ +$\overline{3}m.$ & $\overline{6}m2$ \\ +\hline +0 & \ed \\ +0 & \zd \\ +0 & \ev \\ +\hline +\end{tabularx}% +} + +\rlagentabellezwei{% +\begin{tabularx}{\spaltenbreiteem*\spaltenzwei}[b]{|z|z|z|} +\hline +Au: $2a$ & Ni: $1b$ & Sn: $2d$ \\ +$\overline{3}m.$ & $\overline{3}m.$ & $3m.$ \\ +\hline +0 & 0 & \ed \\ +0 & 0 & \zd \\ +0 & \eh & 0.2831 \\ +\hline +\end{tabularx}% +} + +\rechtspfeilsetup{% +\rpfeileinszwei{1}{1} +\rpfeileinszwei{1}{2} +\rpfeileinszwei{2}{3} +} +\end{stammbaum} +\caption{Einfacher Stammbaum mit Lagenfortführung.} +\label{abb_einfach_mit} +\end{figure} + +\begin{figure}[btp] +\centering +\begin{minipage}{0.45\textwidth} +\begin{tiny} +\begin{verbatim} +\begin{stammbaum} +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Abstiegssymbol 2 +{false}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{true}% Lagentabelle 1 +{2em}% Mindestlänge Linie/Pfeil 1 +{false}% Transformation 1 +{true}% Lagentabelle 2 +{0em}% Mindestlänge Linie/Pfeil 2 +{false}% Transformation 2 +{false}% Lagentabelle 3 +{0.5em}% zusätzliche vertikale Abstände + +\setupdivers% +{1em}% horizontaler Abstand links <-> rechts +{0em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{true}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen + +\setuprlagentabellen% +{4.5em}% Spaltenbreite +{2}% Anzahl Spalten Tabelle eins +{3}% Anzahl Spalten Tabelle zwei +{0}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{2em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei +\end{verbatim} +\end{tiny} +\end{minipage} +\hfill +\begin{minipage}{0.45\textwidth} +\begin{tiny} +\begin{verbatim} +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/mmc$\\ +\fbox{AuSn}\\ +\end{tabular}% +} + +\labstiegeins{% +t2% +} + +\lverbindungzwei{% +\begin{tabular}{c}% +$P\overline{3}m1$\\ +\fbox{AuNiSn$_2$}\\ +\end{tabular}% +} + +\rlagentabelleeins{% +\begin{tabularx}{\spaltenbreiteem*\spalteneins}[b]{|z|z|} +\hline +Au: $2a$ & Sn: $2c$ \\ +$\overline{3}m.$ & $\overline{6}m2$ \\ +\hline +0 & \ed \\ +0 & \zd \\ +0 & \ev \\ +\hline +\end{tabularx}% +} + +\rlagentabellezwei{% +\begin{tabularx}{\spaltenbreiteem*\spaltenzwei}[b]{|z|z|z|} +\hline +Au: $2a$ & Ni: $1b$ & Sn: $2d$ \\ +$\overline{3}m.$ & $\overline{3}m.$ & $3m.$ \\ +\hline +0 & 0 & \ed \\ +0 & 0 & \zd \\ +0 & \eh & 0.2831 \\ +\hline +\end{tabularx}% +} + +\rechtspfeilsetup{% +\rpfeileinszwei{1}{1} +\rpfeileinszwei{1}{2} +\rpfeileinszwei{2}{3} +} +\end{stammbaum} +\end{verbatim} +\end{tiny} +\end{minipage} + +\caption{Quellcode zu Abb.~\ref{abb_einfach_mit}: Einfacher Stammbaum mit Lagenfortführung.} +\label{abb_einfach_mit_src} +\end{figure} + + +\subsection{Etwas aufwändigerer Stammbaum mit Lagenfortführung} +Abbildung~\ref{abb_mit_aufw} zeigt einen etwas aufwändigeren Stammbaum +mit zwei Symmetrieabbaustufen und Lagenfortführung. Außerdem wird die +Möglichkeit der Angabe einer Lagentransformation demonstriert, auch wenn sie in +diesem Beispiel kristallographisch gesehen sinnfrei ist. Die Pfeile rechts +werden gegebenenfalls durchbrochen, wenn sie den Text der Lagentransformation +schneiden würden. Die virtuelle Box um den Text der Lagentransformation (rseins, +rszwei), die benutzt wird, um zu bestimmen, ob der Pfeil unterbrochen werden +muss oder nicht, kann mit Hilfe eines Parameters zur Feineinstellung (Teil des +Befehls \texttt{\textbackslash{}setupdivers}, siehe Abschnitt~\ref{setupdivers}) manuell +vergrößert oder verkleinert werden, wenn die Ergebnisse suboptimal aussehen. In +diesem Fall wurde der Parameter für die horizontale Feineinstellung auf +\texttt{-0.5em} angepasst, um ein Durchbrechen des unteren Pfeils rechts außen +zu verhindern. + +Dieses Beispiel zeigt auch die beiden unterschiedlichen Anordnungsoptionen für +die Abstiegssymbole und die Lagentransformation. Im ersten Schritt sind beide +auf gleicher Höhe ausgerichtet, das Abstiegssymbol ist dafür nicht mehr genau in +der Mitte zwischen lblockeins und lblockzwei. Im Fall des zweiten Abstiegs sind +rseins und lseins jeweils genau in der Mitte der Pfeile, aber dafür nicht bündig +auf einer Höhe. Das Verhalten läßt sich mittels der Schalter in +\texttt{\textbackslash{}setupdivers} einstellen (siehe +Abschnitt~\ref{setupdivers}). + +Weiterhin wurden die Pfeilmindestlängen links und rechts auf diverse +verschiedene Werte festgelegt, um diese Option zu demonstrieren. + +Der Quellcode zu diesem Beispiel ist in Abbildung~\ref{abb_mit_aufw_src} +gezeigt. +\begin{figure}[btp] +\centering +\begin{stammbaum} + +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{1em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{4em}% Mindestlänge Linie/Pfeil 2 +{true}% Abstiegssymbol 2 +{true}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{true}% Lagentabelle 1 +{5em}% Mindestlänge Linie/Pfeil 1 +{true}% Transformation 1 +{true}% Lagentabelle 2 +{2em}% Mindestlänge Linie/Pfeil 2 +{true}% Transformation 2 +{true}% Lagentabelle 3 +{0.5em}% zusätzliche vertikale Abstände + +\setupdivers% +{3em}% horizontaler Abstand links <-> rechts +{-0.5em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{true}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen + +\setuprlagentabellen% +{4.5em}% Spaltenbreite +{2}% Anzahl Spalten Tabelle eins +{2}% Anzahl Spalten Tabelle zwei +{4}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{0em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/m \, 2/c \, 2/m$\\[0.3em] +\fbox{hex. TiI$_3$}\\ +\end{tabular}% +} + +\labstiegeins{% +\begin{tabular}{c} +k3\\ +$\mathbf{a-b, a+2b, c}$ +\end{tabular}% +} + +\lverbindungzwei{% +$P6_3/m \, 2/m \, 2/c$%\\ +} + +\labstiegzwei{% +t2% +} + +\lverbindungdrei{% +\begin{tabular}{c} +$P\overline{3} \, 2/m \, 1$\\[0.3em] +\fbox{$\beta$-WCl$_6$}\\ +\end{tabular}% +} + +\rlagentranseins{% +$x,y,z$ (überflüssig)% +} + +\rlagentranszwei{% +$x,y,z$ (sinnfrei)% +} + +\rlagentabelleeins{% +\begin{tabularx}{\spaltenbreiteem*\spalteneins}[t]{|z|z|} +\hline +Ti: $2b$ & $\Box$: $4d$ \\ +$\overline{3}m$ & $3.2$ \\ +\hline +0 & \zd \\ +0 & \ed \\ +0 & 0 \\ +\hline +\end{tabularx}% +} + +\rlagentabellezwei{% +\begin{tabularx}{\spaltenbreiteem*\spaltenzwei}[t]{|z|z|}% +\hline +$2a$ & $4f$ \\ +$\overline{3}m$ & $3m$ \\ +\hline +0 & \ed \\ +0 & \zd \\ +0 & 0.0 \\ +\hline +\end{tabularx}% +} + +\rlagentabelledrei{% +\begin{tabularx}{\spaltenbreiteem*\spaltendrei}[t]{|z|z|z|z|} +\hline +W1: $1a$ & $\Box$: $1b$ & W2: $2d$ & $\Box$: $2d$\\ +$\overline{3}m$ & $\overline{3}m$ & $3m$ & $3m$ \\ +\hline +0 & 0 & \ed & \ed \\ +0 & 0 & \zd & \zd \\ +0 & \eh & 0.473 & 0.0 \\ +\hline +\end{tabularx}% +} + + +\rechtspfeilsetup{ +\rpfeileinszwei{1}{1} +\rpfeileinszwei{1}{2} +\rpfeilzweidrei{1}{1} +\rpfeilzweidrei{1}{2} +\rpfeilzweidrei{2}{3} +\rpfeilzweidrei{2}{4} +} +\end{stammbaum} + +\caption{Etwas aufwändigerer Stammbaum mit Lagenfortführung und +(sinnfreier) Koordinatentransformation.} +\label{abb_mit_aufw} +\end{figure} + +\begin{figure}[btp] +\centering +\begin{minipage}{0.45\textwidth} +\begin{tiny} +\begin{verbatim} + +\begin{stammbaum} + +\setuplinks% +{true}% Raumgruppe und Summenformel 1 +{1em}% Mindestlänge Linie/Pfeil 1 +{true}% Abstiegssymbol 1 +{true}% Raumgruppe und Summenformel 2 +{4em}% Mindestlänge Linie/Pfeil 2 +{true}% Abstiegssymbol 2 +{true}% Raumgruppe und Summenformel 3 +{0em}% zusätzliche vertikale Abstände + +\setuprechts% +{true}% Lagentabelle 1 +{5em}% Mindestlänge Linie/Pfeil 1 +{true}% Transformation 1 +{true}% Lagentabelle 2 +{2em}% Mindestlänge Linie/Pfeil 2 +{true}% Transformation 2 +{true}% Lagentabelle 3 +{0.5em}% zusätzliche vertikale Abstände + +\setupdivers% +{3em}% horizontaler Abstand links <-> rechts +{-0.5em}% Feinabstimmung Kollisionskontrolle x +{0em}% Feinabstimmung Kollisionskontrolle y +{true}% lseins und rseins vertikal zentrieren +{false}% lszwei und rszwei vertikal zentieren +{false}% Randbox zeichnen + +\setuprlagentabellen% +{4.5em}% Spaltenbreite +{2}% Anzahl Spalten Tabelle eins +{2}% Anzahl Spalten Tabelle zwei +{4}% Anzahl Spalten Tabelle drei +{0em}% horizontale Verschiebung Tabelle eins +{0em}% horizontale Verschiebung Tabelle zwei +{0em}% horizontale Verschiebung Tabelle drei + +\lverbindungeins{% +\begin{tabular}{c}% +$P6_3/m \, 2/c \, 2/m$\\[0.3em] +\fbox{hex. TiI$_3$}\\ +\end{tabular}% +} + +\labstiegeins{% +\begin{tabular}{c} +k3\\ +$\mathbf{a-b, a+2b, c}$ +\end{tabular}% +} + +\lverbindungzwei{% +$P6_3/m \, 2/m \, 2/c$%\\ +} + +\labstiegzwei{% +t2% +} +\end{verbatim} +\end{tiny} +\end{minipage} +\hfill +\begin{minipage}{0.45\textwidth} +\begin{tiny} +\begin{verbatim} +\lverbindungdrei{% +\begin{tabular}{c} +$P\overline{3} \, 2/m \, 1$\\[0.3em] +\fbox{$\beta$-WCl$_6$}\\ +\end{tabular}% +} + +\rlagentranseins{% +$x,y,z$ (überflüssig)% +} + +\rlagentranszwei{% +$x,y,z$ (sinnfrei)% +} + +\rlagentabelleeins{% +\begin{tabularx}{\spaltenbreiteem*\spalteneins}[t]{|z|z|} +\hline +Ti: $2b$ & $\Box$: $4d$ \\ +$\overline{3}m$ & $3.2$ \\ +\hline +0 & \zd \\ +0 & \ed \\ +0 & 0 \\ +\hline +\end{tabularx}% +} + +\rlagentabellezwei{% +\begin{tabularx}{\spaltenbreiteem*\spaltenzwei}[t]{|z|z|}% +\hline +$2a$ & $4f$ \\ +$\overline{3}m$ & $3m$ \\ +\hline +0 & \ed \\ +0 & \zd \\ +0 & 0.0 \\ +\hline +\end{tabularx}% +} + +\rlagentabelledrei{% +\begin{tabularx}{\spaltenbreiteem*\spaltendrei}[t]{|z|z|z|z|} +\hline +W1: $1a$ & $\Box$: $1b$ & W2: $2d$ & $\Box$: $2d$\\ +$\overline{3}m$ & $\overline{3}m$ & $3m$ & $3m$ \\ +\hline +0 & 0 & \ed & \ed \\ +0 & 0 & \zd & \zd \\ +0 & \eh & 0.473 & 0.0 \\ +\hline +\end{tabularx}% +} + + +\rechtspfeilsetup{ +\rpfeileinszwei{1}{1} +\rpfeileinszwei{1}{2} +\rpfeilzweidrei{1}{1} +\rpfeilzweidrei{1}{2} +\rpfeilzweidrei{2}{3} +\rpfeilzweidrei{2}{4} +} +\end{stammbaum} +\end{verbatim} +\end{tiny} +\end{minipage} +\caption{Quellcode zu Abb.~\ref{abb_mit_aufw}: Etwas aufwändigerer Stammbaum mit Lagenfortführung und +(sinnfreier) Koordinatentransformation.} +\label{abb_mit_aufw_src} +\end{figure} + +\section{Lizenz} +Dieses Paket unterliegt der LaTeX Project Public License, siehe +\href{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html}{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html} für nähere +Details. +Copyright \textcopyright{} 2006, 2007 Stefan Lange + +\section{Dank} +Die Idee für dieses Paket basiert auf einem \LaTeXe{}-Beispiel von Prof. Dr. U. +Müller, in dem ebenfalls Stammbäume mit Hilfe der picture-Umgebung gesetzt +werden. Ich danke Melanie Bawohl, Michael Bräu und Michael Leitl für das Testen und viele +hilfreiche Kommentare und Hinweise. + +\section{Fehler} +Ich habe versucht, alle offensichtlichen Fehler zu beseitigen. Nichtsdestotrotz +sind möglicherweise noch Fehler enthalten. Insbesondere ist das Paket sehr +anfällig gegenüber unsinnigen Eingaben, es gibt kein Fehlermanagement. Die +Übersetzungszeit für einen Stammbaum ist aufgrund sehr vieler (ineffizient +umgesetzter) Berechnungen relativ hoch. + +\section{Kontakt} +Anregungen, Kommentare und Fehlerberichte sind erwünscht an die email-Adresse +\href{mailto:hoirkman@gmx.de}{hoirkman@gmx.de}. + + +\end{document} diff --git a/Master/texmf-dist/tex/latex/gu/gu.sty b/Master/texmf-dist/tex/latex/gu/gu.sty new file mode 100644 index 00000000000..a2b9c771f70 --- /dev/null +++ b/Master/texmf-dist/tex/latex/gu/gu.sty @@ -0,0 +1,958 @@ +% This is `gu.sty' +% Copyright (C) 2006 Stefan Lange, all rights reserved. +% +% This package may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% +% Changelog: +% 2006-11-20: erste veröffentlichte Version +% 2006-12-02: kleiner Bugfix (Pfeile rechts wurden bei +% rblock{eins,zwei,drei}deltax != 0 nicht richtig verschoben) +% 2007-01-19: weiterer Bugfix: Pfeile von rechts-oben nach links-unten +% wurden nicht richtig berechnet +% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{gu}[2007/01/19 Gruppe-Untergruppe-Stammbaeume] +\typeout{gu.sty, Version 2007-01-19, Paket zum Setzen von +Gruppe-Untergruppe-Stammbaeumen im Baernighausen-Formalismus} +\typeout{Copyright (C) 2006, 2007 Stefan Lange} +\DeclareOption{dvips}{\PassOptionsToPackage{\CurrentOption}{pict2e}} +\DeclareOption{xdvi}{\PassOptionsToPackage{\CurrentOption}{pict2e}} +\DeclareOption{pdftex}{\PassOptionsToPackage{\CurrentOption}{pict2e}} +\DeclareOption{vtex}{\PassOptionsToPackage{\CurrentOption}{pict2e}} +\DeclareOption{dvipdfm}{\PassOptionsToPackage{\CurrentOption}{pict2e}} +\DeclareOption{ltxarrows}{\PassOptionsToPackage{\CurrentOption}{pict2e}} +\DeclareOption{pstarrows}{\PassOptionsToPackage{\CurrentOption}{pict2e}} +\ProcessOptions\relax + + +\RequirePackage{array} +\RequirePackage{tabularx} +\RequirePackage{pict2e} +\RequirePackage{calc}[2005/08/06] % Infix-Notation für Rechnungen mit Längeneinheiten +\RequirePackage{fp} % Gleitkomma-Berechnungen +\RequirePackage{ifthen} % Verzweigungen + +\newcolumntype{z}{>{\centering\arraybackslash}X} % zentrierte Spalten + % mit fester Breite + +\newlength{\@tempvar} % Temporäre Variable + +\newboolean{@randbox} +\newboolean{@lleinsvorhanden} +\newboolean{@llzweivorhanden} +\newboolean{@lpeinsvorhanden} +\newboolean{@lpzweivorhanden} +\newboolean{@lblockeinsvorhanden} +\newboolean{@lblockzweivorhanden} +\newboolean{@lblockdreivorhanden} +\newboolean{@lseinsvorhanden} +\newboolean{@lszweivorhanden} +\newboolean{@rblockeinsvorhanden} +\newboolean{@rblockzweivorhanden} +\newboolean{@rblockdreivorhanden} +\newboolean{@rseinsvorhanden} +\newboolean{@rszweivorhanden} +\newboolean{@rpeinsvorhanden} +\newboolean{@rpzweivorhanden} +\newboolean{@abstiegeinsvertzentr} +\newboolean{@abstiegzweivertzentr} +\newboolean{@kollisiono} +\newboolean{@kollisionu} +\newboolean{@kollisionl} +\newboolean{@kollisionr} + +\newcommand{\@variableninitialisieren}{ +\setboolean{@randbox}{false} +\setboolean{@lleinsvorhanden}{false} +\setboolean{@llzweivorhanden}{false} +\setboolean{@lpeinsvorhanden}{false} +\setboolean{@lpzweivorhanden}{false} +\setboolean{@lblockeinsvorhanden}{false} +\setboolean{@lblockzweivorhanden}{false} +\setboolean{@lblockdreivorhanden}{false} +\setboolean{@lseinsvorhanden}{false} +\setboolean{@lszweivorhanden}{false} +\setboolean{@rblockeinsvorhanden}{false} +\setboolean{@rblockzweivorhanden}{false} +\setboolean{@rblockdreivorhanden}{false} +\setboolean{@rseinsvorhanden}{false} +\setboolean{@rszweivorhanden}{false} +\setboolean{@rpeinsvorhanden}{false} +\setboolean{@rpzweivorhanden}{false} +\setboolean{@abstiegeinsvertzentr}{false} +\setboolean{@abstiegzweivertzentr}{true} +\setboolean{@kollisiono}{false} +\setboolean{@kollisionu}{false} +\setboolean{@kollisionl}{false} +\setboolean{@kollisionr}{false} + + +\newcommand{\@rechtepfeile}{} +\newcommand{\@lseins}{} +\newcommand{\@lleins}{} +\newcommand{\@lpeins}{} +\newcommand{\@lszwei}{} +\newcommand{\@llzwei}{} +\newcommand{\@lpzwei}{} +\newcommand{\@lblockeins}{} +\newcommand{\@lblockzwei}{} +\newcommand{\@lblockdrei}{} +\newcommand{\@rseins}{} +\newcommand{\@rszwei}{} +\newcommand{\@rblockeinsdeltaxem}{} +\newcommand{\@rblockeins}{} +\newcommand{\@rblockzweideltaxem}{} +\newcommand{\@rblockzwei}{} +\newcommand{\@rblockdreideltaxem}{} +\newcommand{\@rblockdrei}{} +\newcommand{\spaltenbreiteem}{} +\newcommand{\spalteneins}{} +\newcommand{\spaltenzwei}{} +\newcommand{\spaltendrei}{} +\newcommand{\@lpeinsminem}{} +\newcommand{\@lpzweiminem}{} +\newcommand{\@lleeryem}{} +\newcommand{\@rpeinsminem}{} +\newcommand{\@rpzweiminem}{} +\newcommand{\@rleeryem}{} +\newcommand{\@leerxem}{} +\newcommand{\@kollextrarandxem}{} +\newcommand{\@kollextrarandyem}{} +} + + +\newcommand{\@variablenreinitialisieren}{ +\setboolean{@randbox}{false} +\setboolean{@lleinsvorhanden}{false} +\setboolean{@llzweivorhanden}{false} +\setboolean{@lpeinsvorhanden}{false} +\setboolean{@lpzweivorhanden}{false} +\setboolean{@lblockeinsvorhanden}{false} +\setboolean{@lblockzweivorhanden}{false} +\setboolean{@lblockdreivorhanden}{false} +\setboolean{@lseinsvorhanden}{false} +\setboolean{@lszweivorhanden}{false} +\setboolean{@rblockeinsvorhanden}{false} +\setboolean{@rblockzweivorhanden}{false} +\setboolean{@rblockdreivorhanden}{false} +\setboolean{@rseinsvorhanden}{false} +\setboolean{@rszweivorhanden}{false} +\setboolean{@rpeinsvorhanden}{false} +\setboolean{@rpzweivorhanden}{false} +\setboolean{@abstiegeinsvertzentr}{false} +\setboolean{@abstiegzweivertzentr}{true} +\setboolean{@kollisiono}{false} +\setboolean{@kollisionu}{false} +\setboolean{@kollisionl}{false} +\setboolean{@kollisionr}{false} + +\renewcommand{\@rechtepfeile}{} +\renewcommand{\@lseins}{} +\renewcommand{\@lleins}{} +\renewcommand{\@lpeins}{} +\renewcommand{\@lszwei}{} +\renewcommand{\@llzwei}{} +\renewcommand{\@lpzwei}{} +\renewcommand{\@lblockeins}{} +\renewcommand{\@lblockzwei}{} +\renewcommand{\@lblockdrei}{} +\renewcommand{\@rseins}{} +\renewcommand{\@rszwei}{} +\renewcommand{\@rblockeinsdeltaxem}{} +\renewcommand{\@rblockeins}{} +\renewcommand{\@rblockzweideltaxem}{} +\renewcommand{\@rblockzwei}{} +\renewcommand{\@rblockdreideltaxem}{} +\renewcommand{\@rblockdrei}{} +\renewcommand{\spaltenbreiteem}{} +\renewcommand{\spalteneins}{} +\renewcommand{\spaltenzwei}{} +\renewcommand{\spaltendrei}{} +\renewcommand{\@lpeinsminem}{} +\renewcommand{\@lpzweiminem}{} +\renewcommand{\@lleeryem}{} +\renewcommand{\@rpeinsminem}{} +\renewcommand{\@rpzweiminem}{} +\renewcommand{\@rleeryem}{} +\renewcommand{\@leerxem}{} +\renewcommand{\@kollextrarandxem}{} +\renewcommand{\@kollextrarandyem}{} +} + +\newcommand{\@umrechnen}[2]{ % aufrufen mit \@umrechnen{\laenge}{\variable} +\setlength{\@tempvar}{#1} % rechnet \laenge in sp um und speichert das +\FPset{#2}{\number\@tempvar} % Ergebnis in \variable +} + +\newcommand{\rpfeileinszwei}[2]{% +% +% aufrufen mit \rpfeileinszwei{startkastennr}{endkastennr} +% +% Pfeillängen rechts (Länge bezieht sich auf die y-Komponente) +% +\ifthenelse{\boolean{@rpeinsvorhanden}}{ +% +% Berechnung x-Werte der Pfeile rechts +\FPeval\@rleinsx{\@rblockeinsx+(({#1}-0.5)*\@spaltenbreite)+0.5*\@rblockeinsdeltax} +% Die Steigung für die nicht-vertikalen Pfeile +\FPeval\@rpstx{round(({#2}-{#1})*\@spaltenbreite+\@rblockzweideltax-\@rblockeinsdeltax,0)} % Steigungskomponente 1: x +\FPeval\@rpsty{round(2*\@rpeinsh+\@rseinsh,0)} % Steigungskomponente 2: y +% Wertebereich der Steigungskomponenten ist nur -1000..+1000 +% so oft durch 10 teilen und runden, bis diese Bedingung erfüllt ist +% +\whiledo{\@rpstx > 1000 \OR \@rpstx<-1000 \OR \@rpsty > 1000 \OR \@rpsty < -1000}{ +\FPeval\@rpstx{round(\@rpstx/10,0)} +\FPeval\@rpsty{round(\@rpsty/10,0)} +} +% Die Pfeillänge für schräge Pfeile berechnet sich dadurch automatisch: +\FPifeq{\@rpstx}{0} +\FPeval\@rplaenge{\@rpeinsh} +\else +\FPeval\@rplaenge{abs(\@rpstx/\@rpsty*\@rpeinsh)} % Pfeillänge +\fi +% +% Koordinaten der restlichen Elemente +% +\FPifeq{\@rpstx}{0} +\FPset\@rpeinsx{\@rleinsx} +\else +% \@rplaenge muss mit dem Vorzeichen von \@rpstx multipliziert werden, +% sonst stimmt die Berechung für schräg von rechts oben nach links unten +% verlaufende unterbrochene Pfeile nicht! (siehe Bugreport von Leimi) +% Das Vorzeichen wird durch (\@rpstx/abs(\@rpstx)) bestimmt +% auch bei Kollisionskontrolle! +\FPeval\@rpeinsx{\@rleinsx+(\@rpstx/abs(\@rpstx))*\@rplaenge+(\@rseinsh*\@rpstx/\@rpsty)} +\fi + +% Schneidet der Pfeil die Box der Transformationsmatrix? +% Den ganzen Scheiß nur durchnudeln, wenns überhaupt ein rseins gibt +\ifthenelse{\boolean{@rseinsvorhanden}}{ +% Fall 1: Schneiden von Ober- oder Unterkante der Box +% x-Wert berechnen, für y=Oben, Unten der Transformations-Box +\FPifeq{\@rpstx}{0} +\FPeval\@kollisionxo{round(\@rleinsx,0)} +\FPset\@kollisionxu{\@kollisionxo} +\else +\FPeval\@kollisionxo{round(\@rleinsx+(\@rpstx/abs(\@rpstx))*\@rplaenge,0)} +\FPeval\@kollisionxu{round(\@rleinsx+(\@rpstx/abs(\@rpstx))*\@rplaenge+(\@rseinsh*\@rpstx/\@rpsty),0)} +\fi + +% Fall 2: Schneiden von linker oder rechter Kante der Box +% y-Wert für x=rseinsx +\FPifeq{\@rpstx}{0} +{} % nix tun, macht keinen Sinn bei senkrechtem Pfeil +\else +\FPeval\@kollisionyl{round( +(\@rseinsy+\@rseinsh)-(\@rpsty/\@rpstx*(\@rseinsx-(\@rleinsx+(\@rpstx/abs(\@rpstx))*\@rplaenge))) +,0)} +% y-Wert für x=rseinsx+rseinsb +\FPeval\@kollisionyr{round( +(\@rseinsy+\@rseinsh)-(\@rpsty/\@rpstx*(\@rseinsx+\@rseinsb-(\@rleinsx+(\@rpstx/abs(\@rpstx))*\@rplaenge))) +,0)} +\fi + +% Kollision ist dann, wenn kollisionxo oder u zwischen \@rseinsx und +% \@rseinsx+\rtanseinsb liegt incl. evtl.-feintuning +\FPeval\@kollxuntergr{round(\@rseinsx-\@kollextrarandx,0)} +\FPeval\@kollxobergr{round(\@rseinsx+\@rseinsb+\@kollextrarandx,0)} + +\ifthenelse{\@kollisionxo > \@kollxuntergr \AND \@kollisionxo < \@kollxobergr} +{\setboolean{@kollisiono}{true}}{} +\ifthenelse{\@kollisionxu > \@kollxuntergr \AND \@kollisionxu < \@kollxobergr} +{\setboolean{@kollisionu}{true}}{} + +% Kollision ist auch, wenn kollisionyl oder r zwischen rseinsy und +% rseinsy+rseinsh liegen (incl. evtl Koll.-feintuning) +% +% Für senkrechte Pfeile macht diese Abfrage keinen Sinn, in diesem Fall +% bleibt alles auf false, also nur für rpstx!=0 testen +\FPifeq{\@rpstx}{0} +{} % nix tun +\else +\FPeval\@kollyuntergr{round(\@rseinsy-\@kollextrarandy,0)} +\FPeval\@kollyobergr{round(\@rseinsy+\@rseinsh+\@kollextrarandy,0)} +\ifthenelse{\@kollisionyl > \@kollyuntergr \AND \@kollisionyl < \@kollyobergr} +{\setboolean{@kollisionl}{true}}{} +\ifthenelse{\@kollisionyr > \@kollyuntergr \AND \@kollisionyl < \@kollyobergr} +{\setboolean{@kollisionr}{true}}{} +\fi +} % Ende if-Block rseinsvorhanden: Kollisionskontrolle +{} + +\ifthenelse{\boolean{@kollisiono} \OR \boolean{@kollisionu} \OR +\boolean{@kollisionl} \OR \boolean{@kollisionr}} +{ +% zeichnen +\put(\@rleinsx,\@rleinsy){% +\line(\@rpstx,-\@rpsty){\@rplaenge}% +} +\put(\@rpeinsx,\@rpeinsy){% +\vector(\@rpstx,-\@rpsty){\@rplaenge}% +} +% für nächsten Pfeil wieder alles auf false setzen +\setboolean{@kollisiono}{false} +\setboolean{@kollisionu}{false} +\setboolean{@kollisionl}{false} +\setboolean{@kollisionr}{false} +} +% ansonsten einfach durchgehenden Pfeil zeichnen +{ +\FPifeq{\@rpstx}{0} +\FPeval\@rplaenge{2*\@rplaenge+\@rseinsh} +\else +% Absolutbetrag! (bugreport Leimi) +\FPeval\@rplaenge{2*\@rplaenge+abs((\@rseinsh*\@rpstx/\@rpsty))} +\fi +\put(\@rleinsx,\@rleinsy){% +\vector(\@rpstx,-\@rpsty){\@rplaenge}% +} +} +}{} +} + +\newcommand{\rpfeilzweidrei}[2]{% +% +% aufrufen mit \rpfeilzweidrei{startkastennr}{endkastennr} +% +% Pfeillängen rechts (Länge bezieht sich auf die y-Komponente) +% +\ifthenelse{\boolean{@rpzweivorhanden}}{ +% +% Berechnung x-Werte der Pfeile rechts +\FPeval\@rlzweix{\@rblockzweix+(({#1}-0.5)*\@spaltenbreite)+0.5*\@rblockzweideltax} +% Die Steigung für die nicht-vertikalen Pfeile +\FPeval\@rpstx{round(({#2}-{#1})*\@spaltenbreite+\@rblockdreideltax-\@rblockzweideltax,0)} % Steigungskomponente 1: x +\FPeval\@rpsty{round(2*\@rpzweih+\@rszweih,0)} % Steigungskomponente 2: y + +% Wertebereich der Steigungskomponenten ist nur -1000..+1000 +% so oft durch 10 teilen und runden, bis diese Bedingung erfüllt ist +% +\whiledo{\@rpstx > 1000 \OR \@rpstx<-1000 \OR \@rpsty > 1000 \OR \@rpsty < -1000}{ +\FPeval\@rpstx{round(\@rpstx/10,0)} +\FPeval\@rpsty{round(\@rpsty/10,0)} +} +% Die Pfeillänge für schräge Pfeile berechnet sich dadurch automatisch: +\FPifeq{\@rpstx}{0} +\FPeval\@rplaenge{\@rpzweih} +\else +\FPeval\@rplaenge{abs(\@rpstx/\@rpsty*\@rpzweih)} % Pfeillänge +\fi +% +% Koordinaten der restlichen Elemente +% +\FPifeq{\@rpstx}{0} +\FPset\@rpzweix{\@rlzweix} +\else +% \@rplaenge muss mit dem Vorzeichen von \@rpstx multipliziert werden, +% sonst stimmt die Berechung für schräg von rechts oben nach links unten +% verlaufende unterbrochene Pfeile nicht! (siehe Bugreport von Leimi) +% Das Vorzeichen wird durch (\@rpstx/abs(\@rpstx)) bestimmt +% auch bei Kollisionskontrolle! +\FPeval\@rpzweix{\@rlzweix+(\@rpstx/abs(\@rpstx))*\@rplaenge+(\@rszweih*\@rpstx/\@rpsty)} +\fi +% Schneidet der Pfeil die Box der Transformationsmatrix? +% Den ganzen Scheiß nur durchnudeln, wenns überhaupt ein rszwei gibt +\ifthenelse{\boolean{@rszweivorhanden}}{ +% Fall 1: Schneiden von Ober- oder Unterkante der Box +% x-Wert berechnen, für y=Oben, Unten der Transformations-Box +\FPifeq{\@rpstx}{0} +\FPeval\@kollisionxo{round(\@rlzweix,0)} +\FPset\@kollisionxu{\@kollisionxo} +\else +\FPeval\@kollisionxo{round(\@rlzweix+(\@rpstx/abs(\@rpstx))*\@rplaenge,0)} +\FPeval\@kollisionxu{round(\@rlzweix+(\@rpstx/abs(\@rpstx))*\@rplaenge+(\@rszweih*\@rpstx/\@rpsty),0)} +\fi + +% Fall 2: Schneiden von linker oder rechter Kante der Box +% y-Wert für x=rszweix +\FPifeq{\@rpstx}{0} +{} % nix tun, macht keinen Sinn bei senkrechtem Pfeil +\else +\FPeval\@kollisionyl{round( +(\@rszweiy+\@rszweih)-(\@rpsty/\@rpstx*(\@rszweix-(\@rlzweix+(\@rpstx/abs(\@rpstx))*\@rplaenge))) +,0)} +% y-Wert für x=rszweix+rszweib +\FPeval\@kollisionyr{round( +(\@rszweiy+\@rszweih)-(\@rpsty/\@rpstx*(\@rszweix+\@rszweib-(\@rlzweix+(\@rpstx/abs(\@rpstx))*\@rplaenge))) +,0)} +\fi + +% Kollision ist dann, wenn kollisionxo oder u zwischen \@rszweix und +% \@rszweix+\rtanszweib liegt incl. evtl.-feintuning +\FPeval\@kollxuntergr{round(\@rszweix-\@kollextrarandx,0)} +\FPeval\@kollxobergr{round(\@rszweix+\@rszweib+\@kollextrarandx,0)} + +\ifthenelse{\@kollisionxo > \@kollxuntergr \AND \@kollisionxo < \@kollxobergr} +{\setboolean{@kollisiono}{true}}{} +\ifthenelse{\@kollisionxu > \@kollxuntergr \AND \@kollisionxu < \@kollxobergr} +{\setboolean{@kollisionu}{true}}{} + +% Kollision ist auch, wenn kollisionyl oder r zwischen rszweiy und +% rszweiy+rszweih liegen (incl. evtl Koll.-feintuning) +% +% Für senkrechte Pfeile macht diese Abfrage keinen Sinn, in diesem Fall +% bleibt alles auf false, also nur für rpstx!=0 testen +\FPifeq{\@rpstx}{0} +{} % nix tun +\else +\FPeval\@kollyuntergr{round(\@rszweiy-\@kollextrarandy,0)} +\FPeval\@kollyobergr{round(\@rszweiy+\@rszweih+\@kollextrarandy,0)} +\ifthenelse{\@kollisionyl > \@kollyuntergr \AND \@kollisionyl < \@kollyobergr} +{\setboolean{@kollisionl}{true}}{} +\ifthenelse{\@kollisionyr > \@kollyuntergr \AND \@kollisionyl < \@kollyobergr} +{\setboolean{@kollisionr}{true}}{} +\fi +} % Ende if-Block rszweivorhanden: Kollisionskontrolle +{} +\ifthenelse{\boolean{@kollisiono} \OR \boolean{@kollisionu} \OR +\boolean{@kollisionl} \OR \boolean{@kollisionr}} +{ +% zeichnen +\put(\@rlzweix,\@rlzweiy){% +\line(\@rpstx,-\@rpsty){\@rplaenge}% +} +\put(\@rpzweix,\@rpzweiy){% +\vector(\@rpstx,-\@rpsty){\@rplaenge}% +} +% für nächsten Pfeil wieder alles auf false setzen +\setboolean{@kollisiono}{false} +\setboolean{@kollisionu}{false} +\setboolean{@kollisionl}{false} +\setboolean{@kollisionr}{false} +} +% ansonsten einfach durchgehenden Pfeil zeichnen +{ +\FPifeq{\@rpstx}{0} +\FPeval\@rplaenge{2*\@rplaenge+\@rszweih} +\else +% Absolutbetrag! (bugreport Leimi) +\FPeval\@rplaenge{2*\@rplaenge+abs((\@rszweih*\@rpstx/\@rpsty))} +\fi +\put(\@rlzweix,\@rlzweiy){% +\vector(\@rpstx,-\@rpsty){\@rplaenge}% +} +} +}{} +} + + +\newcommand{\rechtspfeilsetup}[1]{ +\renewcommand{\@rechtepfeile}{#1} +} + +\newcommand{\labstiegeins}[1]{ +\renewcommand{\@lseins}{#1} +\@umrechnen{\widthof{\@lseins}}{\@lseinsb} % links, Symbol 1 +\@umrechnen{\totalheightof{\fbox{\@lseins}}}{\@lseinsh} % links, Symbol 1 +\renewcommand{\@lleins}{\line(0,-1){\@lleinsh}} +\renewcommand{\@lpeins}{\vector(0,-1){\@lpeinsh}} +} + +\newcommand{\labstiegzwei}[1]{ +\renewcommand{\@lszwei}{#1} +\@umrechnen{\widthof{\@lszwei}}{\@lszweib} % links, Symbol 1 +\@umrechnen{\totalheightof{\fbox{\@lszwei}}}{\@lszweih} % links, Symbol 1 +\renewcommand{\@llzwei}{\line(0,-1){\@llzweih}} +\renewcommand{\@lpzwei}{\vector(0,-1){\@lpzweih}} +} + +\newcommand{\lverbindungeins}[1]{ +\renewcommand{\@lblockeins}{#1} +\@umrechnen{\widthof{\@lblockeins}}{\@lblockeinsb} +\@umrechnen{\totalheightof{\fbox{\@lblockeins}}}{\@lblockeinsh} +} + +\newcommand{\lverbindungzwei}[1]{ +\renewcommand{\@lblockzwei}{#1} +\@umrechnen{\widthof{\@lblockzwei}}{\@lblockzweib} +\@umrechnen{\totalheightof{\fbox{\@lblockzwei}}}{\@lblockzweih} +} + +\newcommand{\lverbindungdrei}[1]{ +\renewcommand{\@lblockdrei}{#1} +\@umrechnen{\widthof{\@lblockdrei}}{\@lblockdreib} +\@umrechnen{\totalheightof{\fbox{\@lblockdrei}}}{\@lblockdreih} +} + +\newcommand{\rlagentranseins}[1]{ +\renewcommand{\@rseins}{#1} +\@umrechnen{\widthof{\@rseins}}{\@rseinsb} % rechts, Matrix 1 +\@umrechnen{\totalheightof{\fbox{\@rseins}}}{\@rseinsh} % rechts, Matrix 1 +} + +\newcommand{\rlagentranszwei}[1]{ +\renewcommand{\@rszwei}{#1} +\@umrechnen{\widthof{\@rszwei}}{\@rszweib} % rechts, Matrix 1 +\@umrechnen{\totalheightof{\fbox{\@rszwei}}}{\@rszweih} % rechts, Matrix 1 +} + +\newcommand{\rlagentabelleeins}[1]{ +\renewcommand{\@rblockeins}{#1} +\@umrechnen{\widthof{\@rblockeins}+\@rblockeinsdeltaxem}{\@rblockeinsb} % rechts, Tabelle 1 +\@umrechnen{\totalheightof{\@rblockeins}}{\@rblockeinsh} +} + +\newcommand{\rlagentabellezwei}[1]{ +\renewcommand{\@rblockzwei}{#1} +\@umrechnen{\widthof{\@rblockzwei}+\@rblockzweideltaxem}{\@rblockzweib} % rechts, Tabelle 1 +\@umrechnen{\totalheightof{\@rblockzwei}}{\@rblockzweih} +} + +\newcommand{\rlagentabelledrei}[1]{ +\renewcommand{\@rblockdrei}{#1} +\@umrechnen{\widthof{\@rblockdrei}+\@rblockdreideltaxem}{\@rblockdreib} % rechts, Tabelle 1 +\@umrechnen{\totalheightof{\@rblockdrei}}{\@rblockdreih} +} + +\newcommand{\setuprlagentabellen}[7]{ +\renewcommand{\spaltenbreiteem}{#1} % Spaltenbreite, bei Bedarf anpassen +\renewcommand{\spalteneins}{#2} % Anzahl der Spalten von Tab. 1 +\renewcommand{\spaltenzwei}{#3} % Anzahl der Spalten von Tab. 2 +\renewcommand{\spaltendrei}{#4} % Anzahl der Spalten von Tab. 3 +\@umrechnen{\spaltenbreiteem}{\@spaltenbreite} +\renewcommand{\@rblockeinsdeltaxem}{#5} +\@umrechnen{\@rblockeinsdeltaxem}{\@rblockeinsdeltax} +\renewcommand{\@rblockzweideltaxem}{#6} +\@umrechnen{\@rblockzweideltaxem}{\@rblockzweideltax} +\renewcommand{\@rblockdreideltaxem}{#7} +\@umrechnen{\@rblockdreideltaxem}{\@rblockdreideltax} +} + +\newcommand{\setuplinks}[8]{ +\setboolean{@lblockeinsvorhanden}{#1} +\renewcommand{\@lpeinsminem}{#2} % Mindestlänge Pfeile/Linien links 1 +\setboolean{@lseinsvorhanden}{#3} +\setboolean{@lblockzweivorhanden}{#4} +\renewcommand{\@lpzweiminem}{#5} % Mindestlänge Pfeile/Linien links 2 +\setboolean{@lszweivorhanden}{#6} +\setboolean{@lblockdreivorhanden}{#7} +\renewcommand{\@lleeryem}{#8} % vertikale Abstände, linke Spalte +\@umrechnen{\@lpeinsminem}{\@lpeinsmin} % Mindestlänge Linie/Pfeil1 links, in sp +\@umrechnen{\@lpzweiminem}{\@lpzweimin} % Mindestlänge Linie/Pfeil2 links, in sp +\@umrechnen{\@lleeryem}{\@lleery} % links, Abstände in y, in sp +\ifthenelse{\NOT \@lpeinsmin > 0}{ +\setboolean{@lleinsvorhanden}{false} +\setboolean{@lpeinsvorhanden}{false}}{ +\setboolean{@lleinsvorhanden}{true} +\setboolean{@lpeinsvorhanden}{true} +} +\ifthenelse{\NOT \@lpzweimin > 0}{ +\setboolean{@llzweivorhanden}{false} +\setboolean{@lpzweivorhanden}{false}}{ +\setboolean{@llzweivorhanden}{true} +\setboolean{@lpzweivorhanden}{true} +} +} + +\newcommand{\setuprechts}[8]{ +\setboolean{@rblockeinsvorhanden}{#1} +\renewcommand{\@rpeinsminem}{#2} +\setboolean{@rseinsvorhanden}{#3} +\setboolean{@rblockzweivorhanden}{#4} +\renewcommand{\@rpzweiminem}{#5} +\setboolean{@rszweivorhanden}{#6} +\setboolean{@rblockdreivorhanden}{#7} +\renewcommand{\@rleeryem}{#8} +\@umrechnen{\@rpeinsminem}{\@rpeinsmin} % rechts, Pfeilhöhen/längen, in sp +\@umrechnen{\@rpzweiminem}{\@rpzweimin} % rechts, Pfeilhöhen/längen, in sp +\@umrechnen{\@rleeryem}{\@rleery} % rechts, Abstände in y, in sp +\ifthenelse{\NOT \@rpeinsmin > 0}{ +\setboolean{@rpeinsvorhanden}{false} +}{ +\setboolean{@rpeinsvorhanden}{true} +} +\ifthenelse{\NOT \@rpzweimin > 0}{ +\setboolean{@rpzweivorhanden}{false} +}{ +\setboolean{@rpzweivorhanden}{true} +} +} + +\newcommand{\setupdivers}[6]{ +\renewcommand{\@leerxem}{#1} % horizontaler Abstand der beiden Spalten +\@umrechnen{\@leerxem}{\@leerx} % Abstand links <-> rechts, in sp +\renewcommand{\@kollextrarandxem}{#2} % Extraabstand x für Kollisionskontrolle +\@umrechnen{\@kollextrarandxem}{\@kollextrarandx} +\renewcommand{\@kollextrarandyem}{#3} % Extraabstand y für Kollisionskontrolle +\@umrechnen{\@kollextrarandyem}{\@kollextrarandy} +\setboolean{@abstiegeinsvertzentr}{#4} +\setboolean{@abstiegzweivertzentr}{#5} +\setboolean{@randbox}{#6} +} + +% schöne inline-Brüche +\providecommand{\nfrac}[2]{\leavevmode\kern.1em% +\raise.5ex\hbox{\scriptsize #1}% +\kern-.1em/\kern-.15em% +\lower.25ex\hbox{\scriptsize #2}} +% Ein paar Abkürzungen für häufige Brüche +\providecommand{\eh}{\ensuremath{\nfrac{1}{2}}} +\providecommand{\ed}{\ensuremath{\nfrac{1}{3}}} +\providecommand{\ev}{\ensuremath{\nfrac{1}{4}}} +\providecommand{\es}{\ensuremath{\nfrac{1}{6}}} +\providecommand{\zd}{\ensuremath{\nfrac{2}{3}}} +\providecommand{\dv}{\ensuremath{\nfrac{3}{4}}} +\providecommand{\fs}{\ensuremath{\nfrac{5}{6}}} +\providecommand{\ea}{\ensuremath{\nfrac{1}{8}}} +\providecommand{\da}{\ensuremath{\nfrac{3}{8}}} +\providecommand{\fa}{\ensuremath{\nfrac{5}{8}}} +\providecommand{\sa}{\ensuremath{\nfrac{7}{8}}} + + +\newcommand{\@abmessungenaufnullsetzen}{ +% +% Abmessungen für alle Elemente links auf 0 setzen: +\FPset\@lblockeinsh{0} +\FPset\@lblockeinsb{0} +\FPset\@lseinsh{0} +\FPset\@lseinsb{0} +\FPset\@lblockzweih{0} +\FPset\@lblockzweib{0} +\FPset\@lszweih{0} +\FPset\@lszweib{0} +\FPset\@lblockdreih{0} +\FPset\@lblockdreib{0} +% Abmessungen für alle Elemente rechts auf 0 setzen: +\FPset\@rblockeinsh{0} +\FPset\@rblockeinsb{0} +\FPset\@rblockeinsdeltax{0} +\FPset\@rblockzweih{0} +\FPset\@rblockzweib{0} +\FPset\@rblockzweideltax{0} +\FPset\@rblockdreih{0} +\FPset\@rblockdreib{0} +\FPset\@rblockdreideltax{0} +\FPset\@rseinsh{0} +\FPset\@rseinsb{0} +\FPset\@rszweih{0} +\FPset\@rszweib{0} +} + +\@variableninitialisieren +\@abmessungenaufnullsetzen + +\newcommand{\@guberechnenundzeichnen}{ +\setlength{\unitlength}{1sp} % scaled point (kleinstmögliche Einheit von TeX) +% +% Bestimmung maximale Breite links +\FPeval\@lmaxb{max(\@lblockeinsb,\@lseinsb)} +\FPeval\@lmaxb{max(\@lmaxb,\@lblockzweib)} +\FPeval\@lmaxb{max(\@lmaxb,\@lszweib)} +\FPeval\@lmaxb{max(\@lmaxb,\@lblockdreib)} +% -> \@lmaxb ist nun die maximale Breite in der linken Spalte in sp + +% Bestimmung maximale Breite rechts +\FPeval\@rmaxb{max(\@rblockeinsb,\@rblockzweib)} +\FPeval\@rmaxb{max(\@rmaxb,\@rblockdreib)} +% -> \@rmaxb ist nun die maximale Breite in der rechten Spalte in sp + +% Gesamtbreite +\FPeval\@maxb{\@lmaxb+\@leerx+\@rmaxb} + +% +% Berechnung der Pfeillängen links und rechts +% +% Berechnung der Gesamthöhen von Abstieg eins und zwei +% unter Annahme der eingegebenen Pfeilmindestlängen + +\FPeval\@labstiegeinsh{2*\@lleery+2*\@lpeinsmin+\@lseinsh} +\FPeval\@rabstiegeinsh{2*\@rleery+2*\@rpeinsmin+\@rseinsh} +\FPeval\@labstiegzweih{2*\@lleery+2*\@lpzweimin+\@lszweih} +\FPeval\@rabstiegzweih{2*\@rleery+2*\@rpzweimin+\@rszweih} + +% Höhe der Elemente mit berücksichtigen, wenn sie später vertikal zentriert +% werden: +\FPeval\@rabstiegeinshvergleich{\@rabstiegeinsh+0.5*\@rblockeinsh+0.5*\@rblockzweih} +\FPeval\@labstiegeinshvergleich{\@labstiegeinsh+0.5*\@lblockeinsh+0.5*\@lblockzweih} +\FPeval\@rabstiegzweihvergleich{\@rabstiegzweih+0.5*\@rblockzweih+0.5*\@rblockdreih} +\FPeval\@labstiegzweihvergleich{\@labstiegzweih+0.5*\@lblockzweih+0.5*\@lblockdreih} + +% Abstieg eins +\FPifgt{\@rabstiegeinshvergleich}{\@labstiegeinshvergleich} +% rechts>links +% rechte Pfeile auf gewünschtem Minimumwert belassen, +% linke Längen von Linie und Pfeil neu berechnen +\FPset\@rpeinsh{\@rpeinsmin} +\FPeval\@lleinsh{ + (\@rabstiegeinshvergleich + -0.5*\@lblockeinsh + -0.5*\@lblockzweih + -2*\@lleery + -\@lseinsh)*0.5 + } +\FPset\@lpeinsh{\@lleinsh} +% +\else +% rechts<links +% linke Pfeile auf gewünschtem Minimumwert belassen, +% rechte Pfeillängen entsprechend berechnen +\FPset\@lleinsh{\@lpeinsmin} +\FPset\@lpeinsh{\@lpeinsmin} +\FPeval\@rpeinsh{ + (\@labstiegeinshvergleich + -0.5*\@rblockeinsh + -0.5*\@rblockzweih + -2*\@rleery + -\@rseinsh)*0.5 + } +\fi + +% Abstieg zwei +\FPifgt{\@rabstiegzweihvergleich}{\@labstiegzweihvergleich} +% rechts>links +% rechte Pfeile auf gewünschtem Minimumwert belassen, +% linke Längen von Linie und Pfeil neu berechnen +\FPset\@rpzweih{\@rpzweimin} +\FPeval\@llzweih{ + (\@rabstiegzweihvergleich + -0.5*\@lblockzweih + -0.5*\@lblockdreih + -2*\@lleery + -\@lszweih)*0.5 + } +\FPset\@lpzweih{\@llzweih} +% +\else +% rechts<links +% linke Pfeile auf gewünschtem Minimumwert belassen, +% rechte Pfeillängen entsprechend berechnen +\FPset\@llzweih{\@lpzweimin} +\FPset\@lpzweih{\@lpzweimin} +\FPeval\@rpzweih{ + (\@labstiegzweihvergleich + -0.5*\@rblockzweih + -0.5*\@rblockdreih + -2*\@rleery + -\@rszweih)*0.5 + } +\fi + + +% Neuberechnung der Höhen für die Abstiege eins und zwei mit den aktuellen +% Pfeillängen +\FPeval\@labstiegeinsh{2*\@lleery+2*\@lpeinsh+\@lseinsh} +\FPeval\@rabstiegeinsh{2*\@rleery+2*\@rpeinsh+\@rseinsh} +\FPeval\@labstiegzweih{2*\@lleery+2*\@lpzweih+\@lszweih} +\FPeval\@rabstiegzweih{2*\@rleery+2*\@rpzweih+\@rszweih} +% Höhe rechts: +\FPeval\@rh{ + \@rblockeinsh + +\@rabstiegeinsh + +\@rblockzweih + +\@rabstiegzweih + +\@rblockdreih + } +% Höhe links: +\FPeval\@lh{ + \@lblockeinsh + +\@labstiegeinsh + +\@lblockzweih + +\@labstiegzweih + +\@lblockdreih + } +% Bestimmung der Gesamthöhe +\FPeval\@maxh{max(\@rh,\@lh)} + +% +% Berechnung der x-Werte: +% +% Berechung Mittelpunkt x linke Spalte +\FPeval\@lmx{\@lmaxb/2} % links, Mitte x + +% Berechung der Startpunkte x der einzelnen Elemente +\FPeval\@lblockeinsx{\@lmx-(\@lblockeinsb/2)} % links Raumgruppe+Summenformel eins +\FPeval\@lseinsx{\@lmx-(\@lseinsb/2)} % links, Symbol, 1 +\FPeval\@lblockzweix{\@lmx-(\@lblockzweib/2)} % links Raumgruppe+Summenformel zwei +\FPeval\@lszweix{\@lmx-(\@lszweib/2)} % links, Symbol, 2 +\FPeval\@lblockdreix{\@lmx-(\@lblockdreib/2)} % links Raumgruppe+Summenformel drei + +% Rechte Spalte +% x-Wert für Tabellen +\FPeval\@rblockeinsx{\@lmx+(0.5*\@lmaxb)+\@leerx+0.5*\@rblockeinsdeltax} % +%rechts, Tabelle eins x, 0.5*delta wegen makebox +\FPeval\@rblockzweix{\@lmx+(0.5*\@lmaxb)+\@leerx+0.5*\@rblockzweideltax} % rechts, Tabelle zwei x +\FPeval\@rblockdreix{\@lmx+(0.5*\@lmaxb)+\@leerx+0.5*\@rblockdreideltax} % rechts, Tabelle drei x + +% Transformationsmatrix 1 mittig zu Tabelle 1 +\FPeval\@rseinsx{\@rblockeinsx+0.5*0.5*(\@rblockeinsb+\@rblockzweib)-0.5*\@rseinsb} +% Transformationsmatrix 2 mittig zu Tabelle 2 +\FPeval\@rszweix{\@rblockzweix+0.5*0.5*(\@rblockzweib+\@rblockdreib)-0.5*\@rszweib} + +% +% Berechnung der y-Werte: +% +% Platzierung der Elemente so, dass immer Raumgruppe+Summenformel und +% die zugehörige Lagentabelle bündig sind. + +\FPifgt{\@rblockeinsh}{\@lblockeinsh} +% Tabelle eins ganz oben +\FPeval\@rblockeinsy{\@maxh-\@rblockeinsh} +\FPeval\@lblockeinsy{\@rblockeinsy+0.5*\@rblockeinsh-0.5*\@lblockeinsh} +\else +% Raumgruppe+Summenformel eins ganz oben +\FPeval\@lblockeinsy{\@maxh-\@lblockeinsh} +\FPeval\@rblockeinsy{\@lblockeinsy+0.5*\@lblockeinsh-0.5*\@rblockeinsh} +\fi + +% Startpunkte y der Symmetrieabstiegsblöcke eins links und rechts +\FPeval\@lleinsy{\@lblockeinsy-\@lleery} +\FPeval\@rleinsy{\@rblockeinsy-\@rleery} + + +% Abstieg eins +% restliche Sachen so berechnen, dass alles schön vertikal zentriert ist. +\FPeval\@rblockzweiy{\@rleinsy-2*\@rpeinsh-\@rseinsh-\@rleery-\@rblockzweih} +\FPeval\@lblockzweiy{\@rblockzweiy+0.5*\@rblockzweih-0.5*\@lblockzweih} +\FPeval\@rseinsy{\@rleinsy-\@rpeinsh-\@rseinsh} + +\FPeval\@lseinsy{\@lleinsy-\@lleinsh-\@lseinsh} % links zentriert +\ifthenelse{\boolean{@abstiegeinsvertzentr}}{ +\FPeval\@labstiegeinsmittey{\@lseinsy+0.5*\@lseinsh} +\FPeval\@rabstiegeinsmittey{\@rseinsy+0.5*\@rseinsh} +\FPeval\@abstiegeinsmitteydelta{\@rabstiegeinsmittey-\@labstiegeinsmittey} +\FPeval\@lleinsh{\@lleinsh-\@abstiegeinsmitteydelta} +\FPeval\@lseinsy{\@lseinsy+\@abstiegeinsmitteydelta} +\FPeval\@lpeinsh{\@lpeinsh+\@abstiegeinsmitteydelta} +}{} +\FPset\@lpeinsy{\@lseinsy} +\FPeval\@rpeinsy{\@rleinsy-\@rpeinsh-\@rseinsh} + +% Startpunkte y der Symmetrieabstiegsblöcke zwei links und rechts +\FPeval\@llzweiy{\@lblockzweiy-\@lleery} +\FPeval\@rlzweiy{\@rblockzweiy-\@rleery} + +% Abstieg zwei +% restliche Sachen so berechnen, dass alles schön vertikal zentriert ist. +\FPeval\@rblockdreiy{\@rlzweiy-2*\@rpzweih-\@rszweih-\@rleery-\@rblockdreih} +\FPeval\@lblockdreiy{\@rblockdreiy+0.5*\@rblockdreih-0.5*\@lblockdreih} +\FPeval\@rszweiy{\@rlzweiy-\@rpzweih-\@rszweih} + +\FPeval\@lszweiy{\@llzweiy-\@llzweih-\@lszweih} +\ifthenelse{\boolean{@abstiegzweivertzentr}}{ +\FPeval\@labstiegzweimittey{\@lszweiy+0.5*\@lszweih} +\FPeval\@rabstiegzweimittey{\@rszweiy+0.5*\@rszweih} +\FPeval\@abstiegzweimitteydelta{\@rabstiegzweimittey-\@labstiegzweimittey} +\FPeval\@llzweih{\@llzweih-\@abstiegzweimitteydelta} +\FPeval\@lszweiy{\@lszweiy+\@abstiegzweimitteydelta} +\FPeval\@lpzweih{\@lpzweih+\@abstiegzweimitteydelta} +}{} +\FPset\@lpzweiy{\@lszweiy} +\FPeval\@rpzweiy{\@rlzweiy-\@rpzweih-\@rszweih} + + +% Das ganze zeichnen + +\begin{picture}(\@maxb,\@maxh) +\ifthenelse{\boolean{@randbox}}{ + \put(0,0){% +\framebox(\@maxb,\@maxh){}% +} +}{} + +\ifthenelse{\boolean{@lblockeinsvorhanden}}{ + \put(\@lblockeinsx,\@lblockeinsy){% +\makebox(\@lblockeinsb,\@lblockeinsh){\@lblockeins}% +} +}{} + +\ifthenelse{\boolean{@lleinsvorhanden}}{ + \put(\@lmx,\@lleinsy){% +\@lleins% +} +}{} + +\ifthenelse{\boolean{@lseinsvorhanden}}{ + \put(\@lseinsx,\@lseinsy){% +\makebox(\@lseinsb,\@lseinsh){\@lseins}% +} +}{} + +\ifthenelse{\boolean{@lpeinsvorhanden}}{ + \put(\@lmx,\@lpeinsy){% +\@lpeins% +} +}{} + +\ifthenelse{\boolean{@lblockzweivorhanden}}{ + \put(\@lblockzweix,\@lblockzweiy){% +\makebox(\@lblockzweib,\@lblockzweih){\@lblockzwei}% +} +}{} + +\ifthenelse{\boolean{@llzweivorhanden}}{ + \put(\@lmx,\@llzweiy){% +\@llzwei% +} +}{} + +\ifthenelse{\boolean{@lszweivorhanden}}{ + \put(\@lszweix,\@lszweiy){% +\makebox(\@lszweib,\@lszweih){\@lszwei}% +} +}{} + +\ifthenelse{\boolean{@lpzweivorhanden}}{ + \put(\@lmx,\@lpzweiy){% +\@lpzwei% +} +}{} + +\ifthenelse{\boolean{@lblockdreivorhanden}}{ + \put(\@lblockdreix,\@lblockdreiy){% +\makebox(\@lblockdreib,\@lblockdreih){\@lblockdrei}% +} +}{} + +\ifthenelse{\boolean{@rblockeinsvorhanden}}{ + \put(\@rblockeinsx,\@rblockeinsy){% +\makebox(\@rblockeinsb,\@rblockeinsh){\@rblockeins}% +} +}{} + +\ifthenelse{\boolean{@rseinsvorhanden}}{ + \put(\@rseinsx,\@rseinsy){% +\makebox(\@rseinsb,\@rseinsh){\@rseins}% +} +}{} + +\ifthenelse{\boolean{@rszweivorhanden}}{ + \put(\@rszweix,\@rszweiy){% +\makebox(\@rszweib,\@rszweih){\@rszwei}% +} +}{} + +\ifthenelse{\boolean{@rblockzweivorhanden}}{ + \put(\@rblockzweix,\@rblockzweiy){% +\makebox(\@rblockzweib,\@rblockzweih){\@rblockzwei}% +} +}{} + +\ifthenelse{\boolean{@rblockdreivorhanden}}{ + \put(\@rblockdreix,\@rblockdreiy){% +\makebox(\@rblockdreib,\@rblockdreih){\@rblockdrei}% +} +}{} + +\@rechtepfeile + +\end{picture} +} + +\newenvironment{stammbaum}% +{% +}% +{% +\@guberechnenundzeichnen{}% +\@variablenreinitialisieren{}% +\@abmessungenaufnullsetzen{}% +} + + + |