%
%! 20-01-2000 neue bond types
%  Enamin-Beispiel
% kann die chemspecial in der pr�ambel sthen?
% hat "furanose" keinen Drehwinkelparameter?
% kommentar mit // anmerken!
%
\documentclass[tech,10pt]{buch}
\usepackage{tabularx, booktabs,moreverb}
\usepackage{epic,eepicemu,biochem,echem}
\usepackage[dvips]{graphics}
\usepackage{ochem}

\newenvironment{prog}
{\small\verbatim}
{\endverbatim
 }

\newcommand{\textdegree}{\ensuremath{^{\mathrm{o}}}}
\renewcommand{\rmdefault}{bzh}

%\chemfont{\rmfamily\small}
%
%  latex manual
%  chemie.pl -pp manual.chm
%  latex manual
%  makeindex -s tech.ist manual
%  dvips manual
%

\begin{document}
\begin{chemspecial}
package("biochem")
package("echem")
include(`natur.inc')
include(`utils.inc')
define(`bndlen_', `N')
include(`condensed.inc')
include(`cyclohexanes.inc')
require("mncyclib")
require("bicyclib")
require("polycyclib")
\end{chemspecial}

\frontmatter

\author{Ingo Kl"ockl}
\subtitle{Benutzerhandbuch \chemversion}
\title{OCHEM}
\maketitle

Ingo Kl"ockl\\
Institut f"ur Kernchemie Universit"at Mainz\\
Fritz Strassmann-Weg 2\\
D-55099 Mainz\\
[email protected]\\
[email protected]\\
Gesetzt mit \LaTeX{} und \chemversion.\\*[10cm]
\chemversion\\
\copyright{} 1999--2001 Ingo Kl"ockl\\
This program can be redistributed and/or modified under the terms
of the LaTeX Project Public License Distributed from CTAN
archives in directory\\ \texttt{macros/latex/base/lppl.txt}; either
version 1 of the License, or any later version.

\tableofcontents
\tableofschemes

%
%
% -------------------------------------------
% -------------------------------------------
% -------------------------------------------
%
%
\mainmatter

%
%
%
\chapter{Einf"uhrung}

%
%
\section{"Ubersicht}
Das vorliegende Paket soll den Chemiker in die Lage versetzen, organische
Strukturformeln sowie ganze Reaktionsschemata in \LaTeX-Texte zu integrieren.
Ziel ist, anhand einer einfachen
Beschreibung der Formeln und Reaktionen die genaue Anordnung der einzelnen
Formeln innerhalb des Schemas einem Chemie-Compiler zu "uberlassen, "ahnlich
wie \TeX{} anhand der Befehle Textst"ucke selbst"andig anordnet. Analog
der Erzeugung von Graphiken mit MetaPost werden die chemischen Beschreibungen
mit der \LaTeX-Bearbeitung in eine Textdatei geschrieben, die nach dem Compilieren
\TeX-Fragmente mit den Formelbildern liefert. Die Fragmente werden automatisch
an der Stelle der Chemiebeschreibung in das \LaTeX-Dokument eingef"ugt.
Es ist nicht erforderlich, diese Fragmente neben
den eigentlichen Dokumentdateien aufzuheben, da sie jederzeit durch den
Compiler neu erzeugt werden k"o"nn en, so wie auch Metapost-Graphiken wieder
aus den Sourcen generierbar sind. Haben sich die Formeln jedoch nicht ge"andert,
ist eine Neucompilation nicht erforderlich und der Schritt der Compilation
kann ausgespart werden. In diesem Falle m"ussen die Fragmente nat"urlich noch
existieren.

Die Aufmerksamkeit der Formelzeichnung richtet sich vor allem auf eine planare
Wiedergabe, worunter auch g"angige schematische Stereodarstellungen
verstanden werden, wie Sesselkonformationen des Zyklohexans oder Verbr"uckungen
bei Polyzyklen, zum Beispiel des Morphins oder Crassanins. Da das
Paket von einer geometrischen Beschreibung der Strukturen ausgeht, k"onnen
komplizierte Ger"uste, wie sie beispielsweise Alkaloiden zu eigen sind, gewisse
Probleme aufwerfen, wenn Sie eine r"aumliche Darstellung anfertigen wollen.
Sie m"ussen in einem solchen Falle "uber die gew"ohnliche Menge an Bindungswinkeln
und -l"angen hinaus individuelle Berechnungen dieser Werte anstellen und flei"sigen
Gebrauch von \verb+saveXY+ und \verb+restoreXY+ machen\footnote{Nichts f"ur
Warmduscher und Schattenparker also.}. OCHEM ist in dieser Hinsicht kein
molecular modelling-Tool (seufz).
Ich glaube, alle zur Beschreibung auch solcher Strukturen erforderlichen
(graphischen) Primitive bereitgestellt zu haben; wenn Sie keine M"oglichkeit
sehen, bestimmte Strukturen zu erzeugen, bin ich "uber einen Hinweis dankbar.

Mechanistiker k"onnen mit Hilfe kleiner gebogener Pfeile Elektronenverschiebungen
andeuten. Sie werden sehen, da"s die unz"ahligen Mausbewegungen bei
Benutzung eines WYSIWYG-Graphikeditors eine getreue Repr"asentierung in Textform
besitzen und die Formelbeschreibung rasch anwachsen lassen k"onnen. Auch hier
gilt: falls jemand eine gute Idee zur Beschreibung der Pfeilchen hat, m"oge er
sie vorbringen (am besten mit Implementierung :-) )

Die Formeln werden mit maximaler Qualit"at in Form eines
Fragments mit PostScript-Code in die \TeX-Dateien
geschrieben, soda"s sie nur mit einem PostScript-Treiber und -drucker
sichtbar sind! Verf"ugen Sie "uber keinen Zugang zu PostScript"=Druckern, k"onnen Sie mit dem
Programm GV oder seinen Derivaten allerdings die PS-Ausgabedateien in andere Druckerformate
konvertieren. Die Texte, die in den Formeln auftreten, werden mit \TeX{}
gesetzt und erfordern somit kein PostScript.
Die Entscheidung zugunsten von PostScript  h"angt (neben der Menge an
freier Zeit) vor allem mit den bescheidenen
graphischen F"ahigkeiten des originalen \LaTeX{} zusammen, das keine Linien
unter beliebigem Winkel oder Kreise mit freiem Radius zeichnen kann. Der Compiler
erzeugt jedoch eine generische Ausgabe, die vom Modul \verb+be.pm+ in
verschiedene finale Formate umgesetzt wird. Hier ist auch ein \LaTeX-Ausgabeformat
vorgesehen, das nur \LaTeX-Mittel nutzt, aber aus den erw"ahnten Gr"unden
im allgemeinen keine so sch"onen Formeln liefert (vergleichen Sie selbst, in
welchen F"allen die Ausgabe hochwertig ist und in welchen M"angel auftreten).
Dieses native \LaTeX-Ausgabeformat soll k"unftig jedoch verbessert werden, wobei
vermutlich das Paket \verb+eepic+ zum Einsatz kommen wird.

%
%
\section{Installation}
Der Chemie-Compiler besteht aus einem Perl-Script, das die eigentliche
Compilierung vornimmt, sowie einigen Modulen, ebenfalls in Perl geschrieben.
Sie ben"otigen die folgenden Dateien in einem Perl-gerechten Verzeichnisbaum:
\begin{prog}
chemie.pl
streambuf.pm
loc.pm
bbox.pm
be.pm
mncyclib.pm
bicyclib.pm
\end{prog}
Das File \verb+chemie.pl+ stellt den eigentlichen Compiler dar und mu"s in ein
Verzeichnis kopiert werden, das im Suchpfad liegt (Variable \verb+PATH+ f"ur
Windows), die anderen Dateien enthalten Hilfsklassen (jaja, alles sehr objektorientiert, wow!). Die
\verb+*lib.pm+-Module sind Bibliotheken f"ur Ringstrukturen. Alle \verb+.pm+"=Dateien
m"ussen in ein Verzeichnis im Perl-Baum kopiert werden, in dem Bibliotheksdateien
liegen, typischerweise kann dies \verb+/perl/5.005/lib+ sein.

Zur Einbindung in \LaTeX-Dokumente ist die Paketdatei
\begin{prog}
ochem.sty
\end{prog}
in einem von \LaTeX{} durchsuchten Verzeichnis erforderlich. Um die Gr"o"sen
der \TeX-Texte zu ermitteln, ruft der Compiler intern \LaTeX{} auf. Je
nachdem, wie auf Ihrem Rechnern das \LaTeX-System gestartet wird, m"ussen Sie
den Wert von \verb+$latexcmd+ im Script \verb+chemie.pl+ "andern.
Der Default ist zu folgendem Aufruf von \LaTeX{} "aquivalent:
\begin{prog}
latex <datei>
\end{prog}
Die Zeichenfolge \verb+latex+ mu"s zum Beispiel durch
\verb+tex386+ ersetzt werden, falls Sie \LaTeX{} wie folgt starten:
\begin{prog}
tex386 <datei>
\end{prog}
M"ochten Sie die Formeln mit Mitteln von \LaTeX{} setzen, ben"otigen Sie noch
die Pakete \verb+epic+ und \verb+eepic+. Sie werden im jeweiligen \LaTeX-Dokument
hinzugeladen.

Wollen Sie einen Pr"aprozessor f"ur Makroersetzung einsetzen, ben"otigen Sie
auch diesen. F"ur den GNU-Pr"aprozessor M4 existieren Makros zum Satz von
Naturstoffen sowie allgemein"=n"utzlicher Natur in den folgenden
Includedateien:
\begin{prog}
natur.inc
utils.inc
\end{prog}
Diese Include-Dateien m"ussen ebenfalls in ein Verzeichnis im Suchpfad kopiert werden.



%
%
\section{Einbindung in \LaTeX}
Die Beschreibung der Formeln und Reaktionsschemata erfolgt in einer speziellen
Beschreibungssprache in ASCII-Dateien. Diese Dateien k"onnen entweder manuell
erstellt oder online aus einem \LaTeX-Dokument mit eingebetteten Formeln
erzeugt werden. Hier soll haupts"achlich die letzte Methode dargestellt werden,
da sie die gr"o"sere Bequemlichkeit bietet und die Formelbeschreibung und der
korrespondierende Text nicht auf mehrere Dateien verteilt sind.

Sie m"ussen im \LaTeX-Dokument das Paket \verb+ochem.sty+ laden und erhalten damit
die neue Umgebung \verb+chemistry+, innerhalb derer die Formelprogramme stehen:
\index{chemistry (Umgebung)}\index{Umgebung!chemistry}%
\begin{prog}
% file beispiel.tex
\documentclass{...}
\usepackage{ochem}

\begin{document}

\begin{chemistry}[phenol]
 formula(C,C)
 { ring(){ 3: bond(90) atom("OH",L); }
 }
\end{chemistry}

\begin{chemistry}
 formula(C,C,"Benzen",HR,24)
 { ring(){ }  }
\end{chemistry}

\end{document}
\end{prog}
Die vollst"andige Bearbeitung eines solchen Chemiedokumentes erfordert zwei
\LaTeX-Bearbeitungen. Im ersten Lauf mit
\begin{prog}
latex beispiel
\end{prog}
werden die Inhalte aller \verb+chemistry+"=Umgebungen
in eine Datei \verb+\jobname.chm+ geschrieben, und zwar in Form einzelner
\verb+schema+-Befehle (siehe unten), die die Formeln und Schemata der einzelnen
Umgebungen enthalten. Die Namen der Bl"ocke werden durch den Parameter der
\verb+chemistry+"=Umgebungen festgelegt und k"onnen bei der Fehlersuche behilflich
sein. Lassen Sie diesen Parameter fort, wird eine laufende Nummer eingesetzt.

Die nach dem ersten Lauf resultierende Datei \verb+\jobname.chm+ mu"s nun mit dem
Formelcompiler "ubersetzt werden
\begin{prog}
chemie.pl beispiel.chm
\end{prog}
und liefert f"ur jede \verb+chemistry+"=Umgebung
eine Datei, die \LaTeX-Code enth"alt. Der Name dieser Dateien wird
ebenfalls aus dem ersten Parameter und der Extension \verb+.ctx+ gebildet, f"ur
das Beispiel "ubersetzen Sie also die Datei \verb+beispiel.chm+ und erhalten
\verb+phenol.ctx+. (Die Extension \verb+.ctx+ kann als "`chemistry \TeX"'
gedeutet werden; aufgrund der tempor"aren Natur dieser Dateien, die jederzeit
durch Neucompilierung erzeug- und "uberschreibbar sind, m"ussen sie nicht
wie normale \TeX-Files verwaltet werden, Befehle wie \verb+ls *.tex+ lieferten
sonst eine un"ubersehbare F"ulle von Kleinstdateien, auch das Packen aller
\verb+.tex+-Dateien in ein Archiv w"urde diese tempor"aren Dateien miterfassen.)
Der Compiler schreibt f"ur jede bearbeitete \verb+chemistry+"=Umgebung deren
Namen (\verb+phenol+ im Beispiel) in eckigen Klammern auf das Terminal:
\begin{prog}
This is OCHEM chemistry compiler version 1.0b 2001-04-10
requires OCHEM.STY 3.0e
[phenol.ctx] [1.ctx]
\end{prog}
Diese Angabe ist n"utzlich, da Sie, falls ein Abbruch durch fehlerhaften
Chemiecode erfolgt, leicht die Umgebung finden k"onnen, die den Fehler enth"alt.

Die nach der Compilierung erhaltenen \verb+.ctx+-Dateien werden bei der zweiten
Bearbeitung mit \LaTeX{}
\begin{prog}
latex beispiel
\end{prog}
automatisch eingeladen und bilden den vollst"andigen
Formelinhalt. Da in jedem Lauf versucht wird, sie zu laden,
erhalten Sie f"ur jede Datei die Warnung, da"s sie noch nicht existiere.


\subsection*{\LaTeX-Umgebung f"ur Direktbefehle}
Bei einigen Gelegenheiten m"ussen Sie direkt Chemiebefehle des
Abschnitts~\ref{sec:cmd} in die \verb+.chm+"=Zwischendatei schreiben,
zum Beispiel um Bibliotheken zu laden oder Makrodefinitionen f"ur den Pr"aprozessor
einzuf"ugen. Sie benutzen zu diesem Zwecke
die \verb+chemspecial+"=Umgebung, die Ihre Befehle ohne Umsetzung in die
Programmdatei schreibt:
\begin{prog}
\begin{chemspecial}
 <direkte Befehle>
\end{chemspecial}
\end{prog}


\subsection*{Umgang mit dem Compiler}
Zur Erzeugung der fertigen \LaTeX-Fragmente mit den Formelbildern mu"s das
beim ersten \LaTeX-Lauf gebildete Programmfile, hier \verb+beispiel.chm+,
compiliert werden. Sie benutzen dazu das Perlscript \verb+chemie.pl+:
\begin{prog}
chemie.pl beispiel.chm
\end{prog}
Eventuell m"ussen Sie auf Ihrem Rechner, um das Perlscript zu starten, einen Aufruf
der folgenden Form vornehmen:
\begin{prog}
perl chemie.pl beispiel.chm
\end{prog}

Es existieren folgende Compilerswitches:
\begin{description}
\item[-type s] Legt das Ausgabeformat fest, \verb+s+ kann einen der Werte
PS, PSLATEX oder LATEX annehmen. Default: PSLATEX.
\item[-trace lev]
Druckt eine Aufrufliste der internen Funktionen bis zu einer maximalen
Schachtelungsebene von \verb+lev+ aus, mit deren Hilfe eventuell
Fehler besser gefunden werden k"onnen (vor allem Programmierfehler \verb+:-)+ ).
Default: 0.
\item[-pp] Weist den Compiler an, einen Pr"aprozessorlauf mit der Eingabedatei
zu starten, um Makros et cetera aufzul"osen. Sie m"ussen \verb+chemie.pl+
f"ur Ihren Pr"aprozessor angepa"st haben. (Default: kein Pr"aprozessorlauf.)
\end{description}

Ausgabedateien im reinen \LaTeX-Format werden mit folgendem Aufruf erzeugt:
\begin{prog}
chemie.pl -type LATEX beispiel.chm
\end{prog}


\subsection*{Eingabekonventionen}
Bei der Eingabe der Formeln sind einige Konventionen zu beachten:
\begin{itemize}
\item Texte wie Formelnamen oder Bezeichner von Variablen sind mit doppelten
Anf"uhrungszeichen einzuleiten und zu beenden:
\begin{prog}
set("rXS",24)
formula(C,C,"Formelname",HA,24)
{ ... }
\end{prog}
Stehen innerhalb der Zeichenkette Anf"uhrungszeichen, so sind diese zu verdoppeln:
\begin{prog}
formula(C,C,"Kaurans""aure",HA,24)
{ ... }
\end{prog}
Die Verdoppelung ist "ahnlich wie in FORTRAN  ein Hinweis f"ur den Parser,
ein literales Anf"uhrungszeichen als Textbestandteil zu lesen und es nicht
als Ende  der Zeichenkette zu interpretieren.

Treten Anf"uhrungszeichen zu Beginn des Namens auf, stehen also drei Zeichen \verb+"+
unmittelbar hintereinander, m"ussen Sie, um Fehlinterpretationen zu vermeiden, folgende
Konstruktion eingeben:
\begin{prog}
formula(C,C,"{}""Ostrogen",HA,24)
{ ... }
\end{prog}
Die leere Klammer \verb+{}+ wird sp"ater beim Textsatz mit \LaTeX{} ignoriert, trennt
aber das einfache vom doppelten Anf"uhrungszeichen.
\item Ma"sangaben wie L"angen sind entweder in einer symbolischen Form anzugeben
(zum Beispiel \verb+N+ f"ur eine normallange Bindung) oder als Ma"szahl \textit{ohne
Einheit}, es wird stets Punkt (pt) angenommen.
\end{itemize}

\textit{Kommentare} beginnen mit einem Prozentzeichen und gelten bis zum Ende
der Zeile, in der dieses steht:\index{Kommentarzeile}
\begin{prog}
% ganze Zeile ist Kommentar

formula(L,R)  % Formel von Atropin
{ ... }
\end{prog}
Prozentzeichen innerhalb von Anf"uhrungszeichen sind Bestandteil der Zeichenkette
und werden nicht als Kommentareinleitung betrachtet (es k"onnen also Ausbeuteangaben
in die Schemata integriert werden).

%IK 19.1.2000 begin
Da der M4-Pr"aprozessor das Hashzeichen \verb+#+ als Kommentarmarke benutzt, treten zwei
Probleme auf:
\begin{itemize}
\item Prozentzeichen werden von M4 nicht als Kommentarbeginn erkannt und auch in den Kommentaren
 unerw"unschterweise Ersetzungen durchgef"uhrt.
\item Tritt in einer Formel das Zeichen \verb+#+ auf, wie beispielsweise in \verb+bond(#1)+,
 w"are durch den Pr"aprozessorlauf der dem Hashzeichen folgende Zeilenrest verschwunden,
 was zu Fehlermeldungen des Chemiecompilers f"uhrt.
\end{itemize}
Zu Beginn eines jeden Includefiles wird daher mit der Zeile
\begin{prog}
changecom(`//')
\end{prog}
die Folge \verb+//+ als Kommentarmarke f"ur M4 gew"ahlt. Um Zeilen auszukommentieren,
schreiben Sie dann
\begin{prog}
formula(L,R) % normaler Kommentar
{  %// TERPEN(O)   M4-Makro auskommentiert
  ...
  Me_ bond(#1)   %// Kommentar
}
\end{prog}
%IK 19.1.2000 end


\subsection*{Der Chemiefont}
Der Befehl \verb+\chemfont+ spezifiziert Kommandos zur Auswahl des Zeichensatzes,
der f"ur den Satz von Textzeichen innerhalb der Formeln zum Einsatz kommen soll.
Als Standard ist \verb+\sffamily+ vorgesehen, das hei"st alle Zeichen sind ebenso gro"s
wie die Buchstaben des Grundtextes, aber serifenlos.
Sie k"onnen im Vorspann des Dokumentes einen anderen Font einstellen, zum Beispiel
die Serifengrundschrift in kleinerem Schriftgrad:
\begin{prog}
\chemfont{\rmfamily\small}
\end{prog}
Oder die aktuelle Grundschrift:
\begin{prog}
\chemfont{}
\end{prog}

\subsection*{Ringstrukturmodule}\index{Bibliotheken!laden}\index{require}
Wie in Abschnitt~\ref{sec:eigeneringe} des Tutorial geschildert werden wird,
k"onnen Sie Bibliotheken mit eigenen Ringstrukturen aufbauen oder bereits
vorhandene nutzen. Sie werden
bei Bedarf dem \LaTeX-Dokument, das sie ben"otigt, hinzugef"ugt. Jede
verwendete Bibliothek mu"s \textit{vor ihrer Verwendung} durch einen Befehl
in der \verb+chemspecial+"=Umgebung geladen werden:
\begin{prog}
\begin{chemspecial}
 require("<Lib>")
\end{chemspecial}
\end{prog}
Um die mitgelieferte Bibliothek \verb+bicyclib.pm+ mit bizyklischen
Naturstoffringen einzusetzen, mu"s Ihr Dokument sinngem"a"s dem in
Schema~\ref{fig:campha} gezeigten entsprechen.


\begin{schema}
\begin{prog}
\documentclass[...]{...}
\usepackage{ochem}

\begin{document}

\begin{chemspecial}
 require("bicyclib")
\end{chemspecial}

\begin{chemistry}[campher]
multiline(1,L)
{ formula(L,R,"Zyklopentadien")
 { ring(,,H1=3=,,5,0){} }

 formula(L,R){ atom("+") }

 formula(L,R,"Methylacrylat")
 { bond(-90,=U) bond(-30) atom("COOCH$_3$",L) }

 arrow(){}

 formula(L,R)
 { ring("bc221h",,5=){ 2: bond(-30) atom("COOCH$_3$",L); }
 };
}
\end{chemistry}

\end{document}
\end{prog}

\begin{chemistry}[campher]
multiline(1,L){
 formula(L,R,"Zyklopentadien")
 { ring(,,H1=3=,,5,0){} }

 formula(L,R){ atom("+") }

 formula(L,R,"Methylacrylat")
 { bond(-90,=U) bond(-30) atom("COOCH$_3$",L) }

 arrow(){}

 formula(L,R)
 { ring("bc221h",,5=){ 2: bond(-30) atom("COOCH$_3$",L); }
 };}
\end{chemistry}
\caption{Verwendung von Ringstrukturen, hier des Bizyklohexans, aus einer
Bibliothek.\label{fig:campha}}
\end{schema}


\subsection*{Neue Gleitumgebung}
Das Paket enth"alt eine weitere Umgebung \verb+schema+, die
"ahnlich der \verb+figure+"=Umgebung gleitende Abbildungen mit eigenem
Nummernkreis f"ur Reaktionsschemata bereitstellt. Eine einfache Anwendung
ist folgende:
\begin{prog}
\begin{schema}
 \begin{chemistry}[phenolsyn]
    ...
 \end{chemistry}
 \caption{Eine einfache Phenolsynthese.\label{phen}}
\end{schema}
\end{prog}

Im zweispaltigen Layout k"onnen Sie die Sternform (\verb+schema*+"=Umgebung)
verwenden, um die Schemata "uber beide Spalten zu setzen.


\subsection*{Formeln sind \LaTeX-Boxen!}
Wie Sie aus der "Uberschrift entnehmen k"onnen, bilden die
\verb+chemistry+"=Umgebungen normale \LaTeX-Boxen, genauer
\verb+picture+"=Umgebungen oder
-boxen, soda"s Sie zur Positionierung der Formeln im Text alles anwenden
k"onnen, was auch mit \LaTeX-Abbildungen gestattet ist, zum Beispiel
die Anordnung mehrerer vertikaler schmaler Reaktionsketten nebeneinander oder
das Plazieren von Formeln mitten im Textflu"s oder in Abbildungen oder
eigenen Zeilen.

% 13.04.2001 IK
\subsection*{Formeln als EPS-, PNG- ... Graphiken}\index{EPS-Format}
\index{PNG-Format}\index{JPG-Format}\index{Graphikformate (EPS, JPG, PNG)}
\index{Webformate}\index{WWW!Publikation im}\index{Internet!Publikation im}
\index{Publizieren!im Internet (WWW)}
Die bislang dargestellte Methode, eine Formel mithilfe der
\verb+chemistry+"=Umgebung in ein \LaTeX-Dokument einzubinden, setzt voraus,
da" Sie stets die vom Formelcompiler erzeugten kleinen \LaTeX-Dateien bereit
haben. An sich nicht schlimm, wird hierdurch jedoch eine Benutzung dieser
Formeln nur in \LaTeX-Dokumenten m"oglich. Sie k"onnen jedoch auch durch
eine Paketoption \verb+separate+ ein Dokument erstellen, das ausschlie"slich
\verb+chemistry+"=Umgebungen enth"alt, die durch die Option automatisch
auf eigenen Seiten, je eine Umgebung und damit Formel auf einer Seite,
gesetzt werden. Da auch der Seitenstil "empty" eingesetzt wird, erscheinen
keine Seitenzahlen mehr.

Als Beispiel diene die Datei \verb+formeln.tex+, die die folgenden drei
Formeln enth"alt:\index{Carmins""ure}\index{Indigo}\index{Purpur}

\begin{fullpage}
\includegraphics{farben1.eps}
\includegraphics{farben2.eps}
\includegraphics{farben3.eps}
\end{fullpage}

\begin{prog}
\documentclass{report}
\usepackage{german}
\usepackage[separate]{ochem}
\begin{document}

\begin{chemistry}[indigo]
 formula(L,R,"Indigo",HR,24)
 {
   ring(,,H,,5,0){
     vertex(,2){};
     0: bond(r,=C,L) ring(,0,H,,5,r){
                      vertex(,2){};
                      1: atom("N") bond(r) atom("H");
                      4: bond(r,=C) atom("O");
                    };
     1: atom("N") bond(r) atom("H");
     4: bond(r,=C) atom("O");
   }
 }
\end{chemistry}

\begin{chemistry}[purpur]
 formula(L,R,"\shortstack{6,6'-Dibrom-indigo\\Purpur}",HR,24)
 {
   ring(,,H,,5,0){
     vertex(,2){ 3: bond(r) atom("Br"); };
     0: bond(r,=C,L) ring(,0,H,,5,r){
                      vertex(,2){ 3: bond(r) atom("Br"); };
                      1: atom("N") bond(r) atom("H");
                      4: bond(r,=C) atom("O");
                    };
     1: atom("N") bond(r) atom("H");
     4: bond(r,=C) atom("O");
   }
 }
\end{chemistry}

\begin{chemistry}[carmin]
 formula(L,R,"Carmins""aure",HR,24)
 { ring(,,H){
     vertex(,1,4){ 0: bond(r,,Ln) atom("C",C,R) atom("OOH",L);
                    1: bond(r) atom("O",C,L) atom("H",R);
                    3: bond(r) atom("C",C,R) atom("H$_3$",L);
                  };
     vertex(,4,1){ 0: bond(r) atom("O",C,R) atom("H",L);
                    3: bond(r) atom("O",C,R) atom("H",L);
                    4: bond(r) atom("CO(CHOH)$_4$CH$_3$",L);
                    5: bond(r) atom("O",C,R) atom("H",L);
                  };
     0: bond(r,=C) atom("O");
     3: bond(r,=C) atom("O");
   }
 }
\end{chemistry}

\end{document}
\end{prog}
(Beachten Sie in diesem Beispiel, da"s die einzelnen \verb+chemistry+"=Umgebungen
jeweils Namen \verb+indigo+, \verb+purpur+ und \verb+carmin+ erhalten haben!)

Dieses Dokument, das ausschlie"slich noch Formeln enth"alt, ist die Grundlage,
um aus den einzelnen Formeln einzelne EPS-Dateien zu erstellen, die
anschlie"send in ein beliebiges anderes Graphikformat konvertiert werden
k"onnen, wie JPG oder PNG, um die Formeln in einer Webpr"asentation einzusetzen.

Um zum Beispiel die Formel der Carmins"aure (dritte Formel oder Formel auf
der dritten Seite des Dokumentes) in das PNG-Format zu konvertieren, kann
die Befehlsfolge
\begin{prog}
dvips -E -n 1 -p 3 -o carmin.eps formeln.dvi
convert carmin.eps carmin.png
\end{prog}
eingesetzt werden. Die Option \verb+-E+ von dvips, um EPS-Dateien zu erzeugen,
ist auf jedem Rechner vorhanden, das Programm "convert" ist Bestandteil
der OpenSource"=Graphikbearbeitungsprogramme Image~Magick, die vor allem unter Linux
oft installiert sind oder f"ur verschiedene Betriebssysteme leicht aus dem
Internet geladen werden k"onnen.

Um eine ganze Reihe von Formeln zu konvertieren, kann das mitgelieferte
Perl-Script \verb+makePic.pl+ sehr hilfreich sein:
\begin{prog}
makePic.pl --n=3 --format=png --outfile=formeln formeln
\end{prog}
Es erstellt mit diesem Aufruf die Dateien \verb+farben1.eps+ und
\verb+farben1.png+ bis \verb+farben3.eps+ und \verb+farben3.png+. Noch einfacher
wird die Konversion dadurch, da"s die Namen der einzelnen
\verb+chemistry+"=Umgebungen in eine spezielle Datei \verb+formeln.names+
geschrieben werden. Diese Namen  k"onnen durch den einfachen Aufruf
\begin{prog}
makePic.pl --namefile --format=png formeln
\end{prog}
als Namen der einzelnen Graphikdateien verwendet werden. F"ur das
gegebene Beispieldokument erhalten Sie die Dateien \verb+indigo.eps+ und
\verb+indigo.png+, \verb+purpur.eps+ und \verb+purpur.png+ sowie
\verb+carmin.eps+ und \verb+carmin.png+.

Die PNG-Graphik
kann zur Internet-Publikation eingesetzt, die EPS-Graphik
dagegen nach Belieben in ein \LaTeX-Dokument eingebunden werden:
\begin{prog}
\fbox{
 \includegraphics{formeln3.eps}
}
\end{prog}

\fbox{\includegraphics{farben3.eps}}

Beachten Sie bitte, da"s das Paket Image Magick auf Ihrem Rechner installiert
sein mu"s.
% /13.04.2001 IK
%
%
\section{Ausgabeformate}
Es ist leicht m"oglich, anstelle
der PostScript-Ausgabe andere Formate generieren zu lassen. S"amtliche
Ausgaben werden aus graphischen Primitiven zusammengesetzt, die vom Modul
\verb+be.pm+ in konkrete Anweisungen "ubersetzt werden. Diese Primitive umfassen
Linien, Kreise, Text, verschiedene Bindungen sowie Reaktionspfeile.
Gelingt es Ihnen, nur f"ur diese Grundelemente eine Umsetzung im gew"unschten Format
zu finden, k"onnen sie k"unftig alle, auch komplexe Formeln und Schemata in
dieses Format compilieren lassen. Als Grundlage f"ur solche Eigenentwicklungen
k"onnen die bereits vorhandenen Ausgabeformate dienen, die durch eine eindeutige
Zahl unterschieden werden:
\begin{description}
\item[\$be::BE\_PSLATEX] Texte werden in \LaTeX in einer \verb+picture+"=Umgebung
gesetzt, die Graphikausgabe erfolgt in PostScript. Die Definition der verschiedenen
Bindungsarten und Reaktionspfeile ist in \verb+ochem.sty+ als PostScript-Headerdatei
enthalten. Die Dimensionen der Textboxen werden ermittelt, indem alle auftretenden
Texte in eine tempor"are \LaTeX-Datei geschrieben werden, die durch den
Compiler "ubersetzt wird und f"ur jeden Text die Gr"o"se (Breite, H"ohe,
Tiefe) liefert. In diesem Modus k"onnen Sie die besten Ergebnisse erwarten.
\item[\$be::BE\_PS] Dieses Format erzeugt ein reines PostScriptfile im EPS-Format.
Achtung, die Gr"o"sen von Text werden derzeit nicht ermittelt und stets auf
Null gesetzt, was in falschen und seltsamen Verschiebungen der Texte resultiert. Dieses
Format dient im Moment vor allem zum raschen Testen w"ahrend der Entwicklung,
ohne \LaTeX{} benutzen
zu m"ussen, da die reinen Formelbilder korrekt dargestellt sind. Wenn Sie
keinen Text in der Formel haben, k"onnen Sie so fertige EPS-Ausgabedateien
erzeugen.
\item[\$be::BE\_LATEX] Dies ist eine reine Ausgabe mit graphischen \LaTeX-Primitiven
wie Linien, Pfeilen und Kreisen. Entsprechend den sparsamen M"oglichkeiten,
werden nicht alle Bindungsformen, Winkel und Kreisradien unterst"utzt.
\end{description}


Abh"angig von den Ausgabeformaten, mu"s auch die Ermittlung der Textgr"o"sen
auf unterschiedliche Weisen geschehen. Da dieser Vorgang unmittelbar nach dem
Parsen des Programmcodes erfolgt, finden Sie die entsprechenden Zeilen nicht in
\verb+be.pm+, sondern in \verb+streambuf.pm+. Auch in diesem Modul wird anhand
des Formattyps entschieden, ob \LaTeX{} zur Ermittlung der Textgr"o"se aufgerufen
werden mu"s. F"ur eine reine PostScript-Ausgabe existiert derzeit keine
Gr"o"senermittlung.

\section{Makrodefinitionen}\index{Pr""aprozessor}\index{Makro}
Beim Compilieren des von \LaTeX{} erzeugten \verb+.chm+-Files kann durch den
Schalter \verb+-pp+ eine Pr"aprozessorbearbeitung
veranla"st werden, um Makros aufzul"osen oder bedingte Bearbeitung zuzulassen.
Hierf"ur m"ussen Sie in \verb+chemie.pl+ bei der Auswertung der Variablen
\verb+$preproc+ innerhalb der Backticks den Aufruf Ihres bevorzugten
Pr"aprozessors einf"ugen. Der Pr"aprozessor mu"s den Inhalt der Eingabedatei,
deren Name in \verb+$infile+ steht, in bearbeiteter Form in die Zwischendatei
\verb+$tmpfile+ "ubertragen.
Wenn Sie den Gnu M4-Pr"aprozessor benutzen, m"ussen Sie keine
Anpassung vornehmen.

M"ochten Sie keinen Pr"aprozessor einsetzen, brauchen Sie nichts anzupassen
und d"urfen den Compiler nicht mit \verb+-pp+ aufrufen.

\subsection*{Der M4-Pr"aprozessor}
Hier soll keine Manpage zu M4 gegeben, sondern nur kurz dargestellt werden,
wie ein Makro definiert und eingesetzt wird. Jede Makrodefinition mu"s vor
ihrer Benutzung innerhalb einer \verb+chemspecial+"=Umgebung auftreten; sowohl
Name wie auch Ersetzungstext m"ussen dabei durch einfaches Backtick respektive
Hochkomma geklammert sein. Die aktuellen Argumente sind "uber die Variablen
\verb+$1+, \verb+$2+~\dots verf"ugbar. Mit der Sequenz
\begin{prog}
\begin{chemspecial}
 define(`C3', `bond(30) atom("$1") bond(-30)')
\end{chemspecial}

\begin{chemistry}
 formula()
 { C3(O) C3(NH) }
   % ^-- aquivalent zu
   % bond(30) atom("O") bond(-30) ...
   % ... bond(30) atom("NH") bond(-30)
\end{chemistry}
\end{prog}
wird die Struktur des Methoxymethyl-methylamins erzeugt.


Sie k"onnen auch Makros schreiben, die mit Hilfe von \verb+ifelse+ Entscheidungen
treffen. Als Beispiel dient hier die Reihe einiger f"unfgliedriger
Heterozyklen (Thiophen, Furan und Pyrrol), in der die Chalkogenvertreter keinen
Wasserstoff tragen:\index{Makro!Entscheidungen}
\begin{prog}
\begin{chemspecial}
 define(`CP',`ring("cpentane",,1=3=)
   {0: atom("$1");
    ifelse($1,`N',`0: bond(-90) atom("H");')
   }')
\end{chemspecial}

\begin{chemistry}
 formula(L,R,"Furan",HA,24){ CP(O) }
 formula(L,R,"Pyrrol",HA,24){ CP(N) }
 formula(L,R,"Thiophen",HA,24){ CP(S) }
\end{chemistry}
\end{prog}
Das Makro vergleicht seinen Parameter mit dem Symbol f"ur Stickstoff und
erzeugt, falls der Vergleich positiv ausf"allt, eine weitere Bindung zum
Wasserstoffatom.


Haben Sie eine Anzahl Makros geschrieben, die Sie immer wieder ben"otigen,
k"onnen Sie diese in einem Includefile zusammenfassen und bei Bedarf nachladen~--
eine Art von Bibliotheksdatei auf der Ebene des Pr"aprozessors. Ausf"uhrliche
Beispiele von Makros finden Sie in den Abschnitten~\ref{sec:natur} und
\ref{sec:utils}. Sie m"ussen das gew"unschte Includefile mit der Folge
\begin{prog}
\begin{chemspecial}
include(`natur.inc')
\end{chemspecial}
\end{prog}
in Ihr Dokument einbinden.
\verb+include+ ist ein weiterer Pr"aprozessorbefehl von M4, der die angegebene
Datei l"adt und die darin enthaltenen Makrodefinitionen ausf"uhrt.

Um maximalen Nutzen aus
Makros zu ziehen, m"ussen sie m"oglichst flexibel geschrieben werden.
Beim Terpenger"ust \verb+TERPEN+ lag zum Beispiel die "Uberlegung zugrunde, da"s die
nat"urlichen Terpene dieses Typs meistens an den Kohlenstoffatomen C$^1$,
C$^2$, C$^3$ und C$^8$ substituiert sind. Der seltener auftretende Substituent
an C$^2$ wird als (eventuell leerer) Parameter "ubergeben.
Die anderen Positionen werden gespeichert und k"onnen mit \verb+restoreXY+
zum Startpunkt von Substituenten werden.
Mit Hilfe einiger \verb+ifelse+"=Befehle wird das \verb+STEROID+"=Makro so
gestaltet, da"s es die "ahnlichen Ger"uste wichtiger Steroidgrundk"orper
erzeugen kann, wobei die Beschreibung der vier Ringe gemeinsam verwendet wird.

Sie sollten beim Schreiben Ihrer Makros "ahnliche "Uberlegungen
anstellen, um zu einer Anzahl von wichtigen Schl"usselatomen zu gelangen,
an denen Modifikationen m"oglich sind. Kleine "Anderungen k"onnen als
Parameter "ubergeben werden,  sind komplizierte Formeln zu erwarten, werden
diese Parameter leicht un"ubersichtlich und es ist besser, im Makro solche
Schl"usselpositionen zu speichern und sp"ater mit \verb+restoreXY+ wieder
anzuspringen. Variable Ger"ustteile k"onnen mit \verb+ifelse+ eingesetzt werden
und auf einer gemeinsamen Struktur aufbauen.




%
%
\section{Ausblick}
Ich habe in der vorliegenden Version die Ideen bearbeitet, die mir spontan zum
Thema Formelsatz in den Sinn gekommen sind; folgen weitere, werden diese in
sp"ateren Versionen ebenfalls zur Verf"ugung stehen. Da sich viele "Anderungen
oder Erweiterungen erst beim intensiven Nutzen des Pakets herauskristallisieren,
w"are ich "uber Anregungen oder Kritik aus Nutzerkreisen interessiert.

Da jedem automatisch der Sourcecode zug"angig ist, kann unter "`Nutzung"'  auch
die \textit{Weiterentwicklung} verstanden werden *smile*! Zun"achst
auf den Satzmechanismus konzentriert, habe ich hier ein weites Feld zum
Bestellen hinterlassen; einige Punkte, die verbessert werden m"ussen, sind
zum Beispiel:
\begin{itemize}
\item Verbesserte Ausgabe nur mit Mitteln von \LaTeX{} (Moduskennung
\verb+$be::BE_LATEX+).
\item Ermittlung der Textgr"o"se auch bei reiner PostScript-Ausgabe mit der Moduskennung
\verb+$be::BE_PS+.
\item Vielleicht kann auch das Programmdesign insgesamt und von Grund auf besser oder
einfacher gestaltet werden.
\end{itemize}
Ge"anderter Code sollte analog dem Vorgehen bei \TeX/\LaTeX{} durch eine
Namens"anderung kenntlich gemacht werden, das
hei"st es darf unter allen Umst"anden nur eine einzige Version \chemversion
existieren!
Damit nach konstruktiven "Anderungen alle in den Genu"s der Bem"uhungen und
weiterentwickelter Versionen kommen k"onnen, schlage ich vor, Verbesserungen in
Form  des Sourcecodes oder detaillierter Bemerkungen an mich zu mailen, damit
sie in die derzeit aktuelle Version eingepflegt werden k"onnen.
Meine EMail-Adresse ist
\begin{prog}
[email protected]
[email protected]
\end{prog}


%
% -------------------------------------------
%
\chapter{Tutorial}\index{Tutorial}
Dieses Kapitel soll Ihnen gen"ugend Material an die Hand geben, um erfolgreich
mit dem Formelsatz beginnen zu k"onnen. Es enth"alt eine Anleitung f"ur die
ersten Schritte, zeigt aber auch versteckte Aspekte einzelner Befehle und
besondere Einsatzm"oglichkeiten sowie Beispiele aus der Praxis.
Eine ausf"uhrliche Beschreibung der Kommandos wird in der Befehlsreferenz
in Kapitel~\ref{ref} gegeben.

%
%
\section{Grundlegende Elemente}

\subsection{Einfache Formeln}
Bei der Beschreibung der Formeln wird ein geometrischer Ansatz verfolgt. Um
eine gr"o"stm"ogliche Zahl an Strukturen beschreiben zu k"onnen, existiert nur
eine minimale Anzahl an Grundelementen wie die Bindung in beliebiger Richtung
in verschiedener Erscheinung, das Atomsymbol, Verzweigungen sowie einfache
(monozyklische) Ringger"uste.
Diese Elemente kombinieren Sie, indem Sie an einem Atom, zum Beispiel eines
Ringes, eine Bindung in der gew"unschten Richtung anf"ugen, die zu einem
bestimmten Ringatom eines weiteren Ringes f"uhrt und so fort. M"ochten Sie
komplexere Ringe wie zum Beispiel Inden verwenden, liegt Ihnen kein Makro
f"ur Indexger"uste vor, sondern Sie kombinieren einen Sechs- und einen F"unfring.
Der Vorteil liegt gegen"uber einer Sammlung von Makros f"ur jede Struktur
klar auf der Hand: es kann eine gr"o"sere Vielfalt von Strukturen dargestellt
werden, obwohl im Compiler selber nur eine Handvoll implementiert werden mu"s.
Auch k"onnen wenige Befehle rascher erlernt werden als zahlreiche unterschiedliche.

Der Nachteil: bei manchen Strukturen ben"otigen Sie mehr Grundelemente als bei
Einsatz eines spezialisierten Makros. Da die Bindungen auch durch einen Winkel
beschrieben werden, m"ussen Sie mehr geometrisch als chemisch denken (aber die
meisten Strukturen arbeiten ohnehin mit einer immer gleichen Menge von Winkeln).
Einige symbolische Winkelangaben im Zusammenhang mit Ringsystemen helfen Ihnen
aber, komplizierte Winkelberechnungen zu vermeiden.

Jede Formel wird mit dem Befehl \verb+formula+ gesetzt, dessen Parameter weiter
unten besprochen werden. Im Rumpf des Befehls steht die geometrische Beschreibung
der Struktur. Nachfolgend einige Beispiele f"ur sehr einfache
Strukturen, die jedoch die Grundz"uge des Verfahrens deutlich machen. Die
Formel besteht aus einer einfachen Folge von Bindungen, woraus eine aliphatische
Verbindung resultiert:
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)  { bond(30) bond(-30) bond(30,=) bond(-30) }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{.5\textwidth}
\begin{prog}
 formula(L,R)
 { bond(30) bond(-30) bond(30,=) bond(-30) }
\end{prog}
\end{minipage}\end{fullpage}
F"ur die Doppelbindung ist die Angabe eines optionalen Parameters erforderlich.
Einfachbindungen entsprechen dem Defaultwert und m"ussen nicht gesondert notiert
werden. Beachten Sie die stets wiederkehrenden Winkelangaben 30\textdegree,
150\textdegree{} sowie -30\textdegree{} und -150\textdegree{} f"ur schr"age, aber
flach verlaufende Bindungen. Diese Winkelwerte harmonieren mit den Kanten von
Sechsringen, die aufrecht auf einer Ecke stehen. Bevorzugen Sie auf Kanten
liegende Sechsringe, werden Sie die Winkel 60\textdegree, 120\textdegree{} sowie
-60\textdegree{} und -120\textdegree{} einsetzen. Dar"uberhinaus ben"otigen Sie
bis auf wenige Ausnahmen nur noch die Hauptachsenwinkel 0\textdegree,
90\textdegree, 180\textdegree{} und -90\textdegree.

Da Ketten einzelner Bindungen sehr h"aufig auftreten, ist hierf"ur eine Kurzform
erlaubt, in der mehrere Bindungsbeschreibungen, durch Semikola getrennt,
zusammengefa"st sind. Obige Formel l"a"st sich auch schreiben als
\begin{prog}
 formula(L,R){ bond(30;-30;30,=;-30) }
\end{prog}

Der Hauptnachteil der vorgestellten Beschreibung ist, da"s die konkreten
Bindungswinkel es erschweren, eine identische Alkylkette in anderer Orientierung,
zum Beispiel gedreht, darzustellen. Sie m"ussten alle Winkel umrechnen. Eine
gr"o"sere Abstraktion wird durch symbolische Winkelangaben erreicht, die vor
allem im Zusammenhang mit Ringsystemen von Bedeutung sind und weiter unten
genauer vorgestellt werden. Der Beispiel-Aliphat kann damit wie folgt
formuliert werden:
\begin{prog}
 formula(L,R){ bond(r; r/; r,=; r/) }
\end{prog}
\verb+r+ ist ein spezieller Winkel, der normalerweise der radialen Bindung an
Ringen an der aktuellen Ringposition entspricht. Liegt kein Ring in der
Beschreibung der Formel vor, wird ein Defaultwert von 30\textdegree{}
f"ur \verb+r+, von 90\textdegree{} f"ur \verb+t+ und von -90\textdegree{}
f"ur \verb+b+ eingesetzt.
Die (komprimierte) Beschreibung kann damit wie folgt gelesen werden: bilde
eine (radiale) Bindung; bilde abknickende Bindung; bilde Bindung in der
urspr"unglichen (radialen) Richtung als Doppelbindung; bilde wieder eine
abknickende Bindung. Eine solche Beschreibung ist unabh"angig von konkreten
Winkeln und kann somit an verschiedenen Stellen der Formel eingesetzt werden.
\verb+ring+ setzt selbst"andig die Winkel auf sinnvolle Werte, bei reinen
Alkylketten m"ussen Sie in seltenen F"allen mit \verb+set+ die Winkel manuell
setzen (Beispiele in der Referenz zu \verb+bond+). Mit konkreten Winkeln
k"onnen Sie jederzeit, auch bei intensiver Verwendung der symbolischen Angaben,
die gew"unschte Richtung erzwingen.

%IK 20.1.2000 begin
Die \label{atombsp}
zweite und alle weiteren Formeln zeigen, wie Atomsymbole in das Ger"ust aus Bindungen integriert
werden. Beachten Sie die Positionierungen der einzelnen Atomgruppen: einzelne
Atome an terminalen Positionen werden mit der Voreinstellung \verb+C,C+ von
\verb+atom+ zumeist zentriert zum Bindungsende gesetzt, w"ahrend l"angere
Texte b"undig mit einer seitlichen Kante anschlie"sen (ein solcher Kantenabschlu"s
w"are aus Gr"unden der Einheitlichkeit auch f"ur einzelne Buchstaben wie "`O"' anzuraten,
ist mir aber meistens zu umst"andlich :-( ).
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { atom("HOOC",L,R) bond(30;-30)
   atom("O")
   bond(30;-30)
   atom("CH$_2$CH$_2$",L,R)
   bond(30;-30)
   atom("COOH",L,R)
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{.5\textwidth}
\begin{prog}
 formula(L,R)
 { atom("HOOC",L,R) bond(30;-30) atom("O")
   bond(30;-30) atom("CH$_2$CH$_2$",L,R)
   bond(30;-30) atom("COOH",L,R)
 }
\end{prog}
\end{minipage}
\end{fullpage}
%IK 20.1.2000 end
Ein besonderes Problem tritt auf, wenn Bindungen von 90\textdegree{} oder
\label{textbsp}
-90\textdegree{} in langen Texten enden, zum Beispiel in der Carboxyl- oder Hydroxylgruppe.
Um diese lange Gruppe nicht seitlich, sondern (sch"oner) zentriert zum C anzusetzen,
wird der Text in einen zentrierbaren (C) und einen seitlich ansetzbaren (OOH) Teil
aufgespalten (Formel links). In der Formel rechts k"onnen Sie erkennen,
welches Aussehen die COOH-Gruppe
bes"a"se, w"are sie einfach in einem St"uck mit \verb+L+ positioniert worden
(Bindung oben). Eine Zentrierung des Textes h"atte katastrophale Folgen
(COOH-Gruppe unten).
\begin{fullpage}
\begin{minipage}{8cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 0: bond(r) atom("C",C,R) atom("OOH",L);
     3: bond(r) atom("C",C,L) atom("HOO",R);
   }
 }
 formula(L,R)
 { ring()
   { 0: bond(r) atom("COOH",C);
     3: bond(r) atom("COOH",L);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 0: bond(r) atom("C",C,R) atom("OOH",L);
     3: bond(r) atom("C",C,L) atom("HOO",R);
   }
 }
 formula(L,R)
 { ring()
   { 0: bond(r) atom("COOH",C);
     3: bond(r) atom("COOH",L); }
 }
\end{prog}
\end{minipage}
\end{fullpage}
Das Problem tritt nicht in Erscheinung, wenn die Bindungen schr"ag auf einen langen
Textabschnitt treffen und seitlich zum gesamten Text positioniert werden, wie Sie
bereits an der Etherkette mit den zwei Carboxylgruppen gesehen haben.

Ringstrukturen werden mit dem Befehl \verb+ring+ erzeugt. In seiner einfachsten
Form erhalten Sie einen Benzenring, mit verschiedenen Parametern k"onnen Sie
jedoch auch n-gliedrige Ringe sowie andere wichtige Ger"uste (Campher) darstellen.
Mit Ringen begegnen Ihnen erstmal Elemente, von denen mehrere Substituenten
abzweigen k"onnen. Diese Substituenten werden wie normale Formeln beschrieben,
m"ussen jedoch jeweils durch ein \verb+;+ angeschlossen werden. Das Ringatom,
von dem aus der Substituent abzweigt, wird durch eine Nummer, bei Null beginnend,
bezeichnet. Um nicht f"ur jede Ringposition den genauen Winkel, unter dem die
Bindungen abzweigen, lernen zu m"ussen, k"onnen Sie bei \verb+bond+ eine
symbolische Winkelangabe \verb+r+ f"ur radiale Bindungen angeben (eine
ausf"uhrlichere Diskussion symbolischer Winkel finden Sie im n"achsten Abschnitt):
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 0: bond(r);
     3: bond(r) atom("C",C,R) atom("OOH",L);
     4: bond(r; r/; r);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 0: bond(r);
     3: bond(r) atom("C",C,R) atom("OOH",L);
     4: bond(r; r/; r); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Eine weitere Form der Verzweigung kann bei Ketten auftreten. \verb+branch+
h"alt die aktuelle Position in anonymer Form fest und erlaubt es, Substituenten
anzugeben, die mit \verb+;+ abgeschlossen werden und an diesem Punkt beginnen:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { atom("HO",L,R) bond(0)
   atom("CH$_2$",L,R) bond(0)
   atom("CH$_2$",L,R) bond(0)
   branch { bond(-45) atom("OH", L);
            bond(45,=) atom("O",L);
            atom("C");
          }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { atom("HO",L,R) bond(0)
   atom("CH$_2$",L,R) bond(0)
   atom("CH$_2$",L,R) bond(0)
   branch { bond(-45) atom("OH", L);
            bond(45,=) atom("O",L);
            atom("C");
          }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Da dieser Punkt nach Abarbeitung des Befehlsrumpfes noch erhalten bleibt, kann von
ihm aus die Kette weitergef"uhrt werden. Sie k"onnen daher eine Hauptkette formulieren
und die von dieser abzweigenden Seiten"aste mit \verb+branch+ beschreiben:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { bond(30)
   branch { bond(120,t);
            bond(60,o) atom("O",C,R) atom("H",L);
          }
   bond(-30; 30)
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { bond(30)
   branch { bond(120,t);
            bond(60,o) atom("O",C,R) atom("H",L);
          }
   bond(-30; 30)
 }
\end{prog}
\end{minipage}
\end{fullpage}

Die Befehle \verb+saveXY+ und \verb+restoreXY+ bieten die M"oglichkeit, die
aktuelle Position unter einer Nummer zu speichern und an beliebiger Stelle
darauf zuzugreifen. Die rekursive Schachtelung, die bei Verzweigungen mit
\verb+branch+ auftritt, kann so in einen linearen Ablauf umgewandelt werden.
Besonders bei tief geschachtelten Verzweigungen kann diese Form vorteilhaft
sein.
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { atom("HO",L,R) bond(0)
   atom("CH$_2$",L,R) bond(0)
   atom("CH$_2$",L,R) bond(0)
   saveXY(#1)     atom("C")
   restoreXY(#1)  bond(-45) atom("OH", L)
   restoreXY(#1)  bond(45,=) atom("O",L)
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { atom("HO",L,R) bond(0)
   atom("CH$_2$",L,R) bond(0)
   atom("CH$_2$",L,R) bond(0)
   saveXY(#1)     atom("C")
   restoreXY(#1)  bond(-45) atom("OH", L)
   restoreXY(#1)  bond(45,=) atom("O",L)
 }
\end{prog}
\end{minipage}
\end{fullpage}


\subsection{Formeln anordnen}
Haben Sie erst einmal eine Formelbeschreibung erstellt, kann diese innerhalb
des \verb+formula+"=Befehls als Einheit betrachtet und automatisch plaziert
werden. An dieser Stelle kommen die Parameter des Befehls ins Spiel: sie geben
an, wie die Formel relativ zu einem Startpunkt plaziert werden soll (zentriert,
linksb"undig, mit einer Ecke oder Kante) und an welcher Stelle der Formel der
Anschlu"spunkt f"ur nachfolgende Formeln liegt (ebenfalls zentriert, eine Kante
oder Ecke). Dieser Anschlu"spunkt wird zum Startpunkt f"ur folgende Formeln.
Daraus folgt, da"s Sie f"ur beide Parameter beliebige Werte, zum Beispiel
\verb+C,C+, einsetzen k"onnen, wenn es Ihnen nur darum geht, ein Formelbild in
den Text einzuf"ugen, da beide Parameter erst im Zusammenspiel mehrerer Formeln
ihren Sinn erhalten.

Betrachten Sie als Beispiel das Schema~\ref{fig:introb}, in dem in der linken
H"alfte Formeln Seite an Seite erscheinen, auf eine gemeinsame vertikale Mitte
ausgerichtet  mit dem Positionierungsparameter \verb+L,R+. Diesselben Formeln
mit \verb+T,B+ gesetzt, reihen sich rechts an einer gemeinsamen Mittelkante, aber
vertikal auf.

\begin{schema}
\begin{prog}
\begin{chemistry}[intro2a]
 formula(L,R){ bond(30; -30; 30,=; -30) }

 formula(L,R)
 { atom("HOOC",L,R) bond(30; -30; 30) atom("COOH", L) }

 formula(L,R)
 { ring()
   { 0: bond(r);
     4: bond(r; r/; r); }
 }
\end{chemistry}
\hfil
\begin{chemistry}[intro2b]
 formula(T,B){ bond(30; -30; 30,=; -30) }

 formula(T,B)
 { atom("HOOC",L,R) bond(30; -30; 30) atom("COOH", L) }

 formula(T,B)
 { ring()
   { 0: bond(r);
     4: bond(r; r/; r); }
 }
\end{chemistry}
\end{prog}

\begin{chemistry}[intro2a]
 formula(L,R){ bond(30; -30; 30,=; -30) }

 formula(L,R)
 { atom("HOOC",L,R) bond(30; -30; 30) atom("COOH", L) }

 formula(L,R)
 { ring()
   { 0: bond(r);
     4: bond(r; r/; r); }
 }
\end{chemistry}
\hfil
\begin{chemistry}[intro2b]
 formula(T,B){ bond(30; -30; 30,=; -30) }

 formula(T,B)
 { atom("HOOC",L,R) bond(30; -30; 30) atom("COOH", L) }

 formula(T,B)
 { ring()
   { 0: bond(r);
     4: bond(r; r/; r); }
 }
\end{chemistry}
\caption{Die Positionierungsparameter vermitteln den Zusammenhang zwischen
den einzelnen Formeln. In der linken H"alfte von links nach
rechts angeordnete Formeln, in der rechten H"alfte "ubereinandergestellte
Formeln (von oben nach unten).\label{fig:introb}}
\end{schema}

Die beiden Varianten, Formeln aneinanderzuf"ugen, d"urften die meistgenutzten
sein, da mit ihnen Reaktionsketten aufgebaut werden k"onnen. (In einem sp"ateren
Abschnitt werden Sie noch lernen, wie neben dem bislang linearen Ablauf
Verzweigungen hinzuf"ugen.) Es sind jedoch zwei wichtige Sonderanordnungen
zu erw"ahnen:
\begin{itemize}
\item Eine regelm"a"sige tabellarische Anordnung kann mit den bisherigen Mitteln
nicht erreicht werden, da die Position jeder folgenden Formel von der Gr"o"se
der vorhergehenden abh"angig ist. Der Befehl $\to$\verb+gotoXY+ setzt den
Startpunkt einer Formel unabh"angig vom Kontext auf einen bestimmten Punkt und
bietet somit die Grundlage einer regelm"a"sigen Anordnung. Ein Beispiel finden
Sie in der Befehlsreferenz zu \verb+gotoXY+.
\item Eine freie Anordnung von Formeln kann sinnvoll sein, wenn zwei oder mehr
Reaktanden zu einem Produkt f"uhren und die Reaktanden nicht hintereinander,
durch Pluszeichen verbunden, Schlange vor ihrem Reaktionspfeil stehen sollen,
sondern "`wolkenartig"' verteilt sein sollen. Dies ist mit dem Befehl
$\to$\verb+shiftXY+ realisierbar, der den aktuellen Punkt um einen bestimmten
Betrag verschiebt. Als Bezugspunkt wird dann in der Regel der Startpunkt der
ersten Formel gew"ahlt, alle anderen beziehen sich dann auf diese.
Ein Beispiel ist im Tutorial in Abschnitt~\ref{sec:emove} gegeben.
\end{itemize}


%
%
\section{Komplexere Formeln}
Dieser Abschnitt stellt komplexere Formeln sowie die zu ihrer Beschreibung
n"otigen Mittel vor. Einige der verwendeten Tricks werden in der alphabetischen
Referenz erw"ahnt, andere nicht, in jedem Falle k"onnen Sie in diesem Abschnitt
eine ausf"uhrlichere Diskussion wichtiger Darstellungsmittel finden, aus welchem
Grunde dieser Abschnitt die Lekt"ure der Referenz nicht ersetzen mag.
Haben Sie eine Formel zu setzen, zu deren Beschreibung
Ihnen anscheinend die Mittel fehlen, schauen Sie "uber die hier gezeigten
Strukturen, vielleicht erhalten Sie die richtigen Anregungen. Manchmal geht's
auch einfach mit Pfusch und wilden Linien:-)

\subsection{Symbolische Winkel}\label{symbolwinkel}
\index{Winkel!symbolische}\index{Symbolische Winkel}
Der \verb+ring+"=Befehl liefert "uber die symbolische Angabe \verb+r+ hinaus
f"ur jedes Ringatom drei Kardinalwinkel, die f"ur radiale Bindungen und Bindungen
parallel zu den beiden angrenzenden Kanten verwendet werden. Diese werden von
\verb+bond+ ausgewertet, wenn Sie einen der "`Winkel"' \verb+r+, \verb+t+ oder
\verb+b+ angeben. Sie k"onnen so Bindungen erzeugen, ohne sich um den konkreten
Winkel, unter dem sie vom Ring abzweigen, Gedanken zu machen. Die n"achste
Verbindung zeigt die Verwendung aller drei Symbole:
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,,5,90)
   { 0: bond(r);
     2: bond(t) atom("top",L);
     2: bond(b) atom("bottom",L);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,5,90)
   { 0: bond(r);
     2: bond(t) atom("top",L);
     2: bond(b) atom("bottom",L); }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H1=)
   { 0: bond(t,t); 0: bond(b,o);
     3: bond(r);
     4: bond(r);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H1=)
   { 0: bond(t,t); 0: bond(b,o);
     3: bond(r);
     4: bond(r); }
 }
\end{prog}
\end{minipage}\end{fullpage}
Bei den Ringger"usten mit r"aumlicher Intention (\verb+chair+, \verb+bc222o+
und so weiter) wird die Bedeutung der \verb+t+- und \verb+b+-Winkel als
"`top"'  und "`bottom"' deutlich, Beispiel finden Sie bei der Vorstellung der
Bibliotheksmodule und des $\to$\verb+ring+"=Befehls.

M"undet eine Bindung mit symbolischem Winkel in einem weiteren Ring, kennen Sie
den Winkel nicht, um den der zweite Ring gedreht werden mu"s, damit die
Bindung auch bez"uglich dieses zweiten Ringes in einer der drei Relationen \verb+r+,
\verb+t+ oder \verb+b+ steht. Dies ist auch nicht erforderlich, da anstelle
des Drehwinkels des zweiten Ringes ebenfalls eine dieser symbolischen Angaben
stehen kann. Sie m"ussen nur die Nummer des Ringatoms angeben, an dem die
Bindung endet:
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(){4: bond(r)
             ring(,4,H,,5,r){ 0: bond(r);
                              4: bond(t,s,n) atom("4"); };
         }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(){4: bond(r)
             ring(,4,H,,5,r){ 0: bond(r); };
         }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(){4: bond(r)
             ring(,0,H,,5,r){ 0: bond(t,t); };
         }
 }
 formula(L,R)
 { ring(){4: bond(r,o)
             ring(,0,H,,5,b){ 0: bond(t,t); };
         }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(){ 4: bond(r)
              ring(,0,H,,5,r){ 0: bond(t,t); }; }
 }
 formula(L,R)
 { ring(){ 4: bond(r,o)
              ring(,0,H,,5,b){ 0: bond(t,t); }; }
 }
\end{prog}
\end{minipage}\end{fullpage}

Das Acoran zeigt, da"s auch Spiroverbindungen gezeichnet werden k"onnen,
bei denen die beiden Ringe nicht durch eine Bindung
verbunden sind. Der symbolische Winkel \verb+r+ ist ein f"ur jede Ringposition
spezifischer Default f"ur Drehwinkel:
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Acoran",HR,24)
 { ring(,,H)
   {1: bond(r);
    4: ring(,0,H,,5,r)
       { 1: bond(r);
         4: bond(r) branch { bond(r+);
                             bond(r-);
                           };
       };
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Acoran",HR,24)
 { ring(,,H)
   {1: bond(r);
    4: ring(,0,H,,5,r)
       { 1: bond(r);
         4: bond(r) branch { bond(r+);
                             bond(r-); };
       };
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

Ein nachgestelltes \verb-+- oder \verb+-+ vergr"o"sert beziehungsweise
\index{r+}\index{bond!r+}\index{Winkel!r+}%
\index{r-}\index{bond!r-}\index{Winkel!r-}%
verkleinern den Winkel um 60\textdegree. Aus der Sicht der zu zeichnenden
Bindung entspricht dies einer Drehung um 60\textdegree{} nach links
beziehungsweise rechts. Sie k"onnen so ohne Kenntnis des genauen Winkels
verzweigte Alkyl-,  zum Beispiel Isopropylsubstituenten beschreiben:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H1=)
   { 3: bond(r) branch { bond(r+);  bond(r-); };
     1: bond(r) branch { bond(r+);  bond(r-); };
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H1=)
   { 3: bond(r) branch { bond(r+);  bond(r-); };
     1: bond(r) branch { bond(r+);  bond(r-); }; }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Weist eine der Ketten der Verzweigung mehr als eine Methyleneinheit auf, ist
es geschickter, die Verzweigung mit \verb+rt+ oder \verb+r/t+ zu formulieren,
siehe unten.

Mit den \verb-+-- und \verb+-+-Angaben k"onnen auch l"angere Alkylketten
ohne Wissen um den genauen Winkel formuliert werden.
Da die Drehungen relativ zum augenblicklichen Drehwinkel erfolgen, k"onnen
Sie alle identischen Alkylsubstituenten, an welcher Ringpositionen sie auch
auftreten, durch Angabe ein und derselben Beschreibung setzen.
Beachten Sie, da"s bei diesem Verfahren alle
Ketten durch Drehung aus derselben Grundform hervorgehen und die Ketten so in
Abh"angigkeit ihres Startatoms unterschiedlich orientiert sind:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(T,B)
 { ring(,,H1=,,7,90)
   { 1: bond(r; r-; r; r-; r);
     2: bond(r; r-; r; r-) ;
     5: bond(r; r-; r; r-) ;
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(T,B)
 { ring(,,H1=,,7,90)
   { 1: bond(r; r-; r; r-; r);
     2: bond(r; r-; r; r-) ;
     5: bond(r; r-; r; r-) ;  }
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(T,B)
 { ring(,,H1=,,6,90)
   { 1: bond(r; r-; r; r-; r);
     2: bond(r; r-; r; r-) ;
     5: bond(r; r-; r; r-) ;
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(T,B)
 { ring(,,H1=,,6,90)
   { 1: bond(r; r-; r; r-; r);
     2: bond(r; r-; r; r-) ;
     5: bond(r; r-; r; r-) ; }
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,,5,90)
   { vertex(,1,4,H,6)
     { 0: bond(r);
       1: bond(r; r-; r,=U; r+; r);
     };
     vertex(,3,1,H,7)
     { 0: bond(r);
       4: bond(r; r-; r,=U; r+; r);
       5: bond(r; r-; r,=U; r+; r);
     };
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,5,90)
   { vertex(,1,4,H,6)
     { 0: bond(r);
       1: bond(r; r-; r,=U; r+; r);
     };
     vertex(,3,1,H,7)
     { 0: bond(r);
       4: bond(r; r-; r,=U; r+; r);
       5: bond(r; r-; r,=U; r+; r);
     };
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Einige dieser Ketten werden "ublicherweise horizontal orientiert
\index{r/}\index{bond!r/}\index{Winkel!r/}%
dargestellt. W"unschen Sie eine solche Anordnung, k"onnen Sie den symbolischen
Winkel \verb+r/+ anstelle der festen Rechtsdrehung \verb+r-+ benutzen.
Diese Angabe legt keine bestimmte Drehrichtung fest, sondern bestimmt diese
anhand der augenblicklichen Bindungsrichtung: weist die Bindung nach oben
rechts (zum Beispiel 30\textdegree), wird die n"achste Bindung nach unten rechts
(-30\textdegree) gezogen. Auf Bindungen nach unten links folgen solche nach
links oben und so fort. Diese Anordnung f"allt am angenehmsten bei
sechsgliedrigen Ringen auf:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(T,B)
 { ring(,,H1=,,7,90)
   { 1: bond(r; r/; r; r/; r) ;
     2: bond(r; r/; r; r/) ;
     5: bond(r; r/; r; r/) ;
   }
 }
 formula(T,B)
 { ring(,,H1=,,6,90)
   { 1: bond(r; r/; r; r/; r) ;
     2: bond(r; r/; r; r/) ;
     5: bond(r; r/; r; r/) ;
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(T,B)
 { ring(,,H1=,,7,90)
   { 1: bond(r; r/; r; r/; r) ;
     2: bond(r; r/; r; r/) ;
     5: bond(r; r/; r; r/) ; }
 }
 formula(T,B)
 { ring(,,H1=,,6,90)
   { 1: bond(r; r/; r; r/; r) ;
     2: bond(r; r/; r; r/) ;
     5: bond(r; r/; r; r/) ; }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Wiederholte Anwendung der \verb-+-- und \verb+-+-Symbole erh"oht oder
vermindert jeweils um 60\textdegree, soda"s auch geschachtelte Alkylketten
ohne Kenntnis der genauen Winkel der aktuellen Ringposition gesetzt werden k"onnen:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,,5,90)
   { 1: bond(r)
        branch { bond(r+); }
        bond(r-,=)
        branch { bond(r--; r---; r--); }
        bond(r) bond(r-);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,5,90)
   { 1: bond(r)
        branch { bond(r+); }
        bond(r-,=)
        branch { bond(r--; r---; r--); }
        bond(r) bond(r-); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Das folgende Beispiel diskutiert eine M"oglichkeit der Kettenverzweigungen genauer.
Durch die Festlegung einer Linksdrehung f"ur die Methylverzweigung (\verb-r+-)
resultieren auf der "`linken"' Seite des Ringes andere Ketten als
auf der rechten, was die Orientierung der Methylgruppen angeht.
Die Ketten entstehen durch strenge Rotation:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 1: bond(r) branch { bond(r+); } bond(r-;r);
     2: bond(r) branch { bond(r+); } bond(r-;r);
     4: bond(r) branch { bond(r+); } bond(r-;r);
     5: bond(r) branch { bond(r+); } bond(r-;r);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 1: bond(r) branch { bond(r+); } bond(r-;r);
     2: bond(r) branch { bond(r+); } bond(r-;r);
     4: bond(r) branch { bond(r+); } bond(r-;r);
     5: bond(r) branch { bond(r+); } bond(r-;r); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Die symbolischen Winkel \verb+rt+ und \verb+r/t+ versuchen, eine gef"alligere,
\index{rt}\index{bond!rt}\index{Winkel!rt}%
\index{r/t}\index{bond!r/t}\index{Winkel!r/t}%
das hei"st symmetrischere und an den Koordinatenachsen orientierte Anordnung solcher
Querbindungen zu erzielen, indem Links- oder Rechtsdrehungen zugelassen und
auch automatisch bestimmt werden:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 1: bond(r) branch { bond(rt,,s); }
        bond(r/) branch { bond(r/t,,s); } bond(r);
     2: bond(r) branch { bond(rt,,s); }
        bond(r/) branch { bond(r/t,,s); } bond(r);
     4: bond(r) branch { bond(rt,,s); }
        bond(r/) branch { bond(r/t,,s); } bond(r);
     5: bond(r) branch { bond(rt,,s); }
        bond(r/) branch { bond(r/t,,s); } bond(r);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 1: bond(r) branch { bond(rt,,s); }
        bond(r/) branch { bond(r/t,,s); } bond(r);
     2: bond(r) branch { bond(rt,,s); }
        bond(r/) branch { bond(r/t,,s); } bond(r);
     4: bond(r) branch { bond(rt,,s); }
        bond(r/) branch { bond(r/t,,s); } bond(r);
     5: bond(r) branch { bond(rt,,s); }
        bond(r/) branch { bond(r/t,,s); } bond(r); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Zur Darstellung der Stereochemie an Doppelbindungen mu"s zu den bislang
genannten noch der symbolische Winkel \verb+r\+ hinzutreten, mit dem eine
Bindung \textit{entgegen} dem Knickwinkel \verb+r/+ gezeichnet wird.
Die Auswirkungen sowie die korrekte Formulierung von
\index{r/}\index{bond!r/}\index{Winkel!r/}%
winkelunabh"angigen E/Z-Isomeren ist in der folgenden Formel gezeigt:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(T,B,"(E)-Isomer",HR,24)
 { ring()
   { 1: bond(r; r/; r,=; r/; r; r/);
     2: bond(r; r/; r,=; r/; r; r/);
     4: bond(r; r/; r,=; r/; r; r/);
     5: bond(r; r/; r,=; r/; r; r/);
   }
 }
 formula(T,B,"(Z)-Isomer",HR,24)
 { ring()
   { 1: bond(r; r/; r,=; r\; r; r/);
     2: bond(r; r/; r,=; r\; r; r/);
     4: bond(r; r/; r,=; r\; r; r/);
     5: bond(r; r/; r,=; r\; r; r/);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(T,B,"(E)-Isomer",HR,24)
 { ring()
   { 1: bond(r; r/; r,=; r/; r; r/);
     2: bond(r; r/; r,=; r/; r; r/);
     4: bond(r; r/; r,=; r/; r; r/);
     5: bond(r; r/; r,=; r/; r; r/); }
 }
 formula(T,B,"(Z)-Isomer",HR,24)
 { ring()
   { 1: bond(r; r/; r,=; r\; r; r/);
     2: bond(r; r/; r,=; r\; r; r/);
     4: bond(r; r/; r,=; r\; r; r/);
     5: bond(r; r/; r,=; r\; r; r/); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

\subsection{Lineare Systeme}
Viele Formelbilder lassen sich als lineare Abfolge von einfachen Bindungen
oder zumindest identischen oder "ahnlichen Einheiten auffassen und daher
linear beschreiben.

Der durchaus komplizierte Chlorinring kann trotz seines Ringcharakter als
lineares System aufgefa"st werden, das aus vier Pyrrol-/Methyleneinheiten
besteht. Jede diese Methylenbr"ucken endet am Pyrrolring der n"achsten
Einheit. Der Ring kann somit durch eingeschachtelte nahezu identische
Beschreibungen der Grundeinheit beschrieben werden. Der Ringschlu"s ergibt
sich durch korrekte Wahl der Winkel aus Symmetriegr"unden von selber.
(Da die Anschlu"spunkte
einer Struktureinheit stets von der vorhergehenden abh"angig sind, erlangt man
hier keinen Gewinn durch den Einsatz einer Linearisierung mit \verb+saveXY+
und \verb+restoreXY+. Dieser w"are nur gegeben, wenn die Startpunkte der
Partialformeln allesamt zu Beginn verf"ugbar w"aren.)\index{Chlorin}\index{Porphin}
\enlargethispage{2\baselineskip}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Chlorin",HR,24)
 { ring(,,H1=3=,,5,-45)
   { 0: atom("N") bond(-45) atom("H");
     4: bond(30) bond(-30,=)
        ring(,1,H2=4=,,5,-135)
        {  0: atom("N");
           4: bond(-60) bond(-120,=)
              ring(,1,H2=,,5,135)
              { 0: atom("N") bond(135) atom("H");
                4: bond(-150,=) bond(150)
                   ring(,1,H0=,,5,45)
                   { 0: atom("N");
                     4: bond(120,=) bond(60);
                   };
              };
        };
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Chlorin",HR,24)
 { ring(,,H1=3=,,5,-45)
   { 0: atom("N") bond(-45) atom("H");
     4: bond(30) bond(-30,=)
        ring(,1,H2=4=,,5,-135)
        {  0: atom("N");
           4: bond(-60) bond(-120,=)
              ring(,1,H2=,,5,135)
              { 0: atom("N") bond(135) atom("H");
                4: bond(-150,=) bond(150)
                   ring(,1,H0=,,5,45)
                   { 0: atom("N");
                     4: bond(120,=) bond(60);
                   };
              };
        };
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}


\subsection{Linear anellierte Ringe}
Der einfachste Fall anellierter Ringsysteme liegt dann vor, wenn alle Ringe
ein gemeinsames Atom aufweisen. Sie k"onnen sich zunutze machen, da"s \verb+ring+
den aktuellen Startpunkt nicht verschiebt und so, wenn der aktuelle Punkt genau
diesem gemeinsamen Atom entspricht, alle Ringe in einem Rutsch dargestellt
werden. Alle Ringe liegen dann in derselben Schachtelungsebene, was die Formel
m"oglicherweise "ubersichtlicher gestaltet als die Angabe von Ringen als
Substituenten weiterer Ringe. Damit beide Ringe die gleiche Kantenl"ange
haben und somit nahtlos zusammenpassen, mu"s ihre L"ange mit \verb+#N+ (auf
Wunsch auf \verb+#L+ oder andere L"angen, wesentlich ist das \verb+#+-Zeichen)
gleichgesetzt:\index{Guajan}\index{Cadinen}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Guajan",HR,24)
 { ring(,4,H,#N,7,0){ 1: bond(r) branch { bond(r+); bond(r-); };
                      5: bond(r);}
   ring(,2,H,#N,5,180){4: bond(r); }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Guajan",HR,24)
 { ring(,4,H,#N,7,0){ 1: bond(r) branch { bond(r+); bond(r-); };
                      5: bond(r);}
   ring(,2,H,#N,5,180){4: bond(r); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"$\beta$-Cadinen",HR,24)
 { ring(,5,H1=){ 1: bond(r); }
   ring(,1,H3=){ 0: bond(r,t) branch{ bond(r+);
                                        bond(r-);};
                 1: bond(t,t) atom("H");
                 2: bond(b,o) atom("H");
                 3: bond(r);
               }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"$\beta$-Cadinen",HR,24)
 { ring(,5,H1=){ 1: bond(r); }
   ring(,1,H3=){ 0: bond(r,t) branch{ bond(r+);
                                      bond(r-);};
                 1: bond(t,t) atom("H");
                 2: bond(b,o) atom("H");
                 3: bond(r);
               }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Haben nicht alle Ringe ein gemeinsames Atom, m"ussen Sie einen Basisring
ausw"ahlen, der die weiteren Ringe als Substituenten tr"agt.
Um die "Ubersicht zu bewahren, kann es sinnvoll sein, den am kompliziertesten
substituierten Ring als Basis zu w"ahlen, um einfachere
Substitution an den Ringen zu erhalten, die selbst Substituent dargestellen.
Im Falle des Hirsutans wird der zentrale F"unfring als Basis gew"ahlt, da auf
diese Weise zwei einfache Ringe als Substituenten auftreten. W"are einer
der endst"andigen Ringe gew"ahlt worden, w"are der zentrale F"unfring dessen
Substituent, der wiederum einen Ring als Substituent tr"uge, was die Formel
unn"otig komplizieren w"urde. In diesen und den folgenden Formeln ist der Basisring
durch gr"o"sere Strichst"arke hervorgehoben:\index{Hirsutan}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Hirsutan",HR,24)
 { save(#1) set("rLW",1.5)
   ring(,,H,,5,90)
   { C: restore(#1);
     vertex(,1,2,H,5){ 0: bond(t); 0: bond(b); };
     vertex(,3,3,H,5){ 0: bond(r); };
     3: bond(t);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Hirsutan",HR,24)
 { ring(,,H,,5,90)
   { vertex(,1,2,H,5){ 0: bond(t); 0: bond(b); };
     vertex(,3,3,H,5){ 0: bond(r); };
     3: bond(t); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Die \verb+vertex+"=Syntax "ubernimmt die ansonsten komplizierten Berechnungen
der korrekten Startpunkte und Drehwinkel aller anelierter Ringe. Ein weiteres
Beispiel zeigt, wie einfach zusammengesetzte Ringsysteme beschreibbar sind.
Die beiden gezeigten Varianten demonstrieren, da"s die Wahl des Basisringes
auch die Gesamtdrehung der Formel beeinflu"st: im ersten Falle ist das
nicht gedrehte Zyklooktan die Basis, der F"unfring erscheint an der schr"ag
verlaufenden [a]-Kante und verleiht dem Gesamtmolek"ul so einen gedrehten
Eindruck. W"ahlen Sie, wie im zweiten Falle, dagegen den F"unfring als Basis,
entsteht der Eindruck einer horizontal liegenden Formel. Beachten Sie die variable
Kantenl"ange der Ringe. Sie k"onnen jederzeit mit \verb+#+ eine bestimmte Kantenl"ange
f"ur einen Ring festlegen.
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { save(#1) set("rLW",1.5)
   ring(,,H,,8,0)
   { C: restore(#1);
     vertex(,0,1,H0=,5){ 0: bond(r); };
     0: bond(t);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,8,0)
   { vertex(,0,1,H0=,5){ 0: bond(r); };
     0: bond(t);
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { save(#1) set("rLW",1.5) ring(,,H1=,,5,0)
   { C:restore(#1);
     vertex(,2,0,H,8){ 0: bond(t); };
     1: bond(r); }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H1=,,5,0)
   { vertex(,2,0,H,8){ 0: bond(t); };
     1: bond(r);
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Mehrere Substituenten bauen komplizierte Systeme auf, wobei die ankondensierten Ringe
ihrerseits weitere Ringe tragen k"onnen, soda"s Systeme entstehen, in denen nicht
alle Ringe direkt an einer Kante des Basisringes liegen. Beides wird durch die folgenden
Beispiele illustriert:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { save(#1) set("rLW",1.5) ring(,,H,,5,90)
   { C:restore(#1);
     vertex(,1,0,,6){ };
     vertex(,3,0,H2=4=,6){ };
     vertex(,4,0,H,6){ };
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,5,90)
   { vertex(,1,0,,6){ };
     vertex(,3,0,H2=4=,6){ };
     vertex(,4,0,H,6){ };
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { save(#1) set("rLW",1.5) ring(,,H,,8,0)
   { C: restore(#1);
     vertex(,1,1,,6){ 0: bond(r);
                        vertex(,3,0,H2=4=,7){};
                      };
     0: bond(r);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,8,0)
   { vertex(,1,1,,6)
     { 0: bond(r);
       vertex(,3,0,H2=4=,7){};
     };
     0: bond(r);
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}


\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Buxenin-G",HR,24)
 { save(#1) set("rLW",1.5) ring(,,H4=,,7,0)
   { C: restore(#1);
     0: bond(b,t) atom("H");
     vertex(,3,1,H,6){ 3: bond(t); 3: bond(b);
                       4: bond(r,t) atom("H$_3$CNH",R); };
     vertex(,6,4,H5=,6){ 2: bond(t,t);
                         3: bond(-90,o);
                         vertex(,2,2,H,5)
                         { 4: bond(r)
                              branch { bond(r+) atom("N",C,R)
                                                atom("H$_2$",L); }
                              bond(r-);
                         };
                       };
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Buxenin-G",HR,24)
 { ring(,,H4=,,7,0)
   { 0: bond(b,t) atom("H");
     vertex(,3,1,H,6){ 3: bond(t); 3: bond(b);
                       4: bond(r,t) atom("H$_3$CNH",R); };
     vertex(,6,4,H5=,6){ 2: bond(t,t);
                         3: bond(-90,o);
                         vertex(,2,2,H,5)
                         { 4: bond(r)
                              branch { bond(r+) atom("N",C,R)
                                                atom("H$_2$",L); }
                              bond(r-);
                         };
                       };
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Nicht immer mu"s die beiden Ringen gemeinsame Bindung sichtbar sein.
Das Humulen besteht aus einem Neunring, kondensiert mit einem Vierring. Der
Eindruck der quadratischen Aussparung wird einfach durch je eine unsichtbare
Bindung in jedem der Ringe erreicht:\index{Humulen}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Humulen",HR,24)
 { save(#1) set("rLW",1.5) ring(,,H4s,,9,0)
   { C: restore(#1);
     3: bond(r);
     vertex(,4,3,H3s,4)
        { 2: bond(100,<.);
          2: bond(170,<<);
        };
     8: bond(r);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Humulen",HR,24)
 { ring(,,H4s,,9,0)
   { 3: bond(r);
     vertex(,4,3,H3s,4,-45)
        { 2: bond(100,<.); 2: bond(170,<<); };
     8: bond(45);
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}


\subsection{Manuelle Erstellung anellierter Systeme}
Sie haben im letzten Abschnitt gesehen, wie mit \verb+vertex+ mehrkernige Systeme
aus streng polygonalen Ringen aufbaut werden k"onnen. Diese Syntaxerweiterung
ist jedoch nur f"ur den Typ \verb+ring+, also $n$-Ecke, definiert und kann
daher nicht mit anderen Typen wie \verb+cpentane+ verwendet werden. M"ussen
Ringe aus solchen anderen Typen aufgebaut werden, m"ussen Sie die Berechnungen
der korrekten Drehwinkel selber vornehmen. Es folgt eine kleine Anleitung, in
der eine allgemeine Formel f"ur den Drehwinkel entwickelt wird, die
auf Polygonen basiert, aber auf andere Typen "ubertragbar ist, wenn Sie deren
typische Winkel kennen. Die Basispolygone sind dabei \textit{nicht} gedreht,
\verb+<p2>+ besitzt den Wert Null.

Den einzelnen Kanten sind gem"a"s Tabelle~\ref{tab:winkel} Winkel $\theta_i$
zugeordnet, die in die allgemeine Formel einzusetzen sind. In der folgenden
allgemeinen Formel bedeuten $\phi_{soll}$ den gew"unschten Drehwinkel des
Grundk"orpers, $\phi$ den korrekten Drehwinkel des Ringes, der als Substituent
dargestellt wird, $\theta_1$ und $\theta_2$ die Kantenwinkel der zusammentreffenden
Kanten von Basis- und Substituentenring:
\begin{displaymath}
\phi = \phi_{soll} + (\theta_1 - \theta_2) + 180
\end{displaymath}


\begin{table}
\caption{Zuordnung des Kantenwinkels zu den einzelnen Kanten f"ur verschiedene
Polygone (Zyklopentan, $n=5$ bis Zyklooktan, $n=8$). Die Kantennummer ist
gleichzeitig die Nummer eines Substituenten.\label{tab:winkel}}
\begin{center}\begin{tabular}{ccrrrr}\toprule
Kante & Kantennummer & $n=5$ & $n=6$ & $n=7$ & $n=8$\\\midrule
a & 0 & 54   & 60   & 64   & 67\\
b & 1 & -18  & 0    & 13   & 23\\
c & 2 & -90  & -60  & -38  & -22\\
d & 3 & -162 & -120 & -90  & -67\\
e & 4 & -234 & -180 & -141 & -112\\
f & 5 &      & -240 & -193 & -157\\
g & 6 &      &      & -244 & -202\\
h & 7 &      &      &      & -247\\
\bottomrule\end{tabular}\end{center}
\end{table}

Die folgende Verbindung basiert auf dem f"unfgliedrigen Pyrrolidinring und
wird zur Verdeutlichung mit den Drehwinkeln 0\textdegree, 45\textdegree{} und
90\textdegree{} dargestellt. Die Nullpunkte der einzelnen Furanringe werden
vom Sauerstoffatom eingenommen, der Nullpunkt des Pyrrolidins vom Stickstoff.

Konstruieren wir zun"achst den Grundk"orper ohne Drehung des Pyrrolidinkerns.
Durch folgende Kantenkorrespondenzen ergeben sich die angegebenen Winkel:

\begin{center}\begin{tabular}{lllll}\toprule
\multicolumn{2}{c}{Pyrrolidin} & \multicolumn{2}{c}{Furan} & Winkel\\
Kante & Substituent $i$ & Kante & Startatom $j$ & & \\\midrule
b & 1 & e & $4+1 = 5$ & $0 + -18 - -180 + 180 = -18$\\
d & 3 & b & $1+1 = 2$ & $0 + -162 - 0 + 180 = 18$\\
e & 4 & e & $4+1 = 5$  & $0 + -234 - -180 + 180 = -234$\\
\bottomrule\end{tabular}\end{center}

Durch die Wahl der Ringkanten, die "ubereinstimmen sollen, ist die Lage des
Nullpunktes des gedrehten Ringes festgelegt und ebenfalls in der Tabelle
angegeben. Es gilt dabei, da"s die Substituentenposition $i$ des Basisringes die
Nummer der Kante ist (Tabelle~\ref{tab:winkel}). Das Startatom $j$, das in der
Beschreibungsliste des Substituentenringes eingesetzt werden mu"s, ist um Eins
h"oher als die Kantennummer.

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,#N,5,0)
   { 1: ring(,5,H,#N,6,-18){ 0: atom("O");};
     3: ring(,2,H,#N,6,18){ 0: atom("O");};
     4: ring(,5,H,#N,6,-234){ 0: atom("O");};
     0: atom("N");
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,#N,5,0)
   { 1: ring(,5,H,#N,6,-18){ 0: atom("O");};
     3: ring(,2,H,#N,6,18){ 0: atom("O");};
     4: ring(,5,H,#N,6,-234){ 0: atom("O");};
     0: atom("N"); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Bei den gedrehten Systemen mu"s nun einfach der Drehwinkel $\phi_{soll}$
zu allen Winkeln addiert werden.

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,#N,5,90)
   { 1: ring(,5,H,#N,6,72){ 0: atom("O");};
     3: ring(,2,H,#N,6,108){ 0: atom("O");};
     4: ring(,5,H,#N,6,-144){ 0: atom("O");};
     0: atom("N");
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,#N,5,90)
   { 1: ring(,5,H,#N,6,72){ 0: atom("O");};
     3: ring(,2,H,#N,6,108){ 0: atom("O");};
     4: ring(,5,H,#N,6,-144){ 0: atom("O");};
     0: atom("N"); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Und schlie"slich noch ein System aus F"unf-, Sieben- und Achtringen:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,#N,7,0)
   { 4: ring(,3,H,#N,5,129){ 0: bond(r);};
     1: ring(,6,H,#N,8,350){ 0: bond(r,<<);};
     0: bond(r);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,#N,7,0)
   { 4: ring(,3,H,#N,5,129){ 0: bond(r);};   % 0 + -141 - -90 + 180
     1: ring(,6,H,#N,8,350){ 0: bond(r,<<);}; % 0 + 13 - -157 + 180
     0: bond(r); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Die typischen Winkel beim Ringtyp \verb+cpentane+ entsprechen denen des
Sechsecks, wobei Sie die fortfallende Ecke ber"ucksichtigen m"ussen.

\subsection{Angular anellierte Ringe}
Ringsysteme, in denen die Ringe mehr als eine gemeinsame Bindung haben,
k"onnen mitunter schwierig zu beschreiben sein, wenn Sie sie aus Polygonen
aufbauen, da die Bindungen zum Beispiel eines F"unfringen andere Winkel aufweisen
als die der Sechs- oder Siebenringe. Bei kondensierten Sechsringen tritt
dieses Problem nicht auf; f"ur den h"aufigen Fall des Zusammentreffens von
Sechs- und F"unfringen kann zur Darstellung der F"unfringe der Typ \verb+"cpentane"+
gew"ahlt werden, dessen Winkel nahtlos zu denen der Sechsringe passen.

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"($+$)-Hibiscon A",HR,24)
 { ring(,4,H){ 1: bond(r,o) atom("HO",R);
               2: bond(r,=C) atom("O");
               5: bond(b,o) atom("H"); }
   ring(,2,H){ 0: bond(r,o) branch{ bond(r+); bond(r-);}; }
   ring("cpentane",,0=3=){ 2: atom("O");}
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"($+$)-Hibiscon A",HR,24)
 { ring(,4,H){ 1: bond(r,o) atom("HO",R);
               2: bond(r,=C) atom("O");
               5: bond(b,o) atom("H"); }
   ring(,2,H){ 0: bond(r,o) branch{ bond(r+); bond(r-);}; }
   ring("cpentane",,0=3=){ 2: atom("O");}
 }
\end{prog}
\end{minipage}
\end{fullpage}

Die Formel des Crassanins zeigt, da"s auch das Ger"ust des Bizyklo[2.2.2]oktans
mit einem Sechsring kombinieren werden kann, da die Bindungsl"angen im
Bizyklus denen der sonstigen Bindungen entspricht. Die Kantenl"angen des F"unfrings mu"s
mit der Gr"o"senangabe \verb+#N+ etwas verringert werden, damit der Benzenring nicht
erheblich gr"o"ser als der Zyklohexanring wirkt:\index{Crassanin}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Crassanin", HR,24)
 { ring("bc222o",,,N)
   { 2: bond(30) bond(-30);
     0: ring(,,H,N)
        { 1: ring(,4,H,#N,5,-70)
             { 0: bond(-70,=C) atom("O");
               1: atom("N") bond(r) atom("H");
               vertex(,2,1){ 4: bond(r) atom("O",C,L) atom("H$_3$C",R);
                             5: bond(r) atom("O",C,L) atom("H$_3$C",R);  };
             };
        };
     0: bond(-90,o,NN) atom("C",C,R) atom("OOCH$_3$",L);
     4: bond(-60,<<) atom("H");
     7: atom("N");
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Crassanin", HR,24)
 { ring("bc222o",,,N)
   { 2: bond(30) bond(-30);
     0: ring(,,H,N)
        { 1: ring(,4,H,#N,5,-70)
             { 0: bond(-70,=C) atom("O");
               1: atom("N") bond(r) atom("H");
               vertex(,2,1){ 4: bond(r) atom("O",C,L) atom("H$_3$C",R);
                             5: bond(r) atom("O",C,L) atom("H$_3$C",R);  };
             };
        };
     0: bond(-90,o,NN) atom("C",C,R) atom("OOCH$_3$",L);
     4: bond(-60,<<) atom("H");
     7: atom("N"); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Treten andere Ringgr"o"sen hinzu, ist es am einfachsten, ein Grundger"ust aus
F"unf- und Sechsringen aufzubauen und die gr"o"seren oder kleineren unregelm"a"sigen
Ringe in Form von Kohlenstoffbr"ucken hinzuzuf"ugen, was im n"achsten Abschnitt
angesprochen wird.

\subsection{(Kohlenstoff-) Br"ucken}
Br"ucken k"onnen in verschiedenen Formen in Erscheinung treten. In den folgenden
F"allen
\begin{chemistry}
 formula(L,R,"(a)",HR,12)
 { ring(,,H){ 3: bond(30,o;-30,o;-90,o;-150,o);
            }
 }
 formula(L,R,"(b)",HR,12)
 { ring(,,H){ 0: bond(-20,o) saveXY(#1);
              4: bond(-40,o;#1,o);
            }
 }
 formula(L,R,"(c)",HR,12)
 { ring(,,H){ 5: saveXY(#1,-30,N);
              0: bond(#1,o);
              4: bond(#1,o);
            }
 }
\end{chemistry}
werden die gestrichelten Bindungen als Br"ucke betrachtet.

Fall (a) zeichnet sich dadurch aus, da"s die Br"ucke eine Kopie eines Teilst"uckes
des Grundk"orpers ist, das nur verschoben wurde. Es treten keine Positionierungsprobleme
auf, wenn Sie die entsprechenden Teile des Grundk"orpers exakt "ubernehmen
(Parallelverschiebungen sind winkeltreu).

Fall (b) ist problematisch, weil die Br"ucke kein Pendant im Grundger"ust hat.
Wenn Sie die Br"ucke von einem Br"uckenkopf her aufbauen, wissen Sie sp"atestens
bei der Bindung, die den Ringschlu"s herstellt (die letzte der Br"ucke), nicht,
welchen Winkel und welche L"ange Sie w"ahlen m"ussen, um exakt auf den Br"uckenkopf
zu treffen. Hier empfehle ich, die Br"ucke von beiden Br"uckenk"opfen her
aufzubauen und die letzte Position eines Teilst"uckes zu speichern. Diese Position
dient als Ziel einer wilden Linie, die vom anderen Teilst"uck her mit \verb+bond(#n)+
gezeichnet wird. Als wilde Linie w"ahlen Sie am besten diejenige Bindung des
Br"uckenzuges aus, von der Sie am wenigsten wissen, wie Winkel und L"ange
zu w"ahlen sind.

Fall (c) ist nochmals problematischer, weil die Br"ucke so kurz ist, da"s keine
wilde Linie das unbekannte Teilst"uck "uberbr"ucken kann. Hier kann helfen,
wenn Sie durch eine unsichtbare Bindung einen Punkt anspringen, der die Br"ucke
symmetrische teilt, dessen Position speichern und dann, wiederum mit \verb+bond(#n)+,
zwei wilde Linien von den beiden Br"uckenk"opfen her ziehen. Welchen Punkt Sie
als Zielpunkt ausw"ahlen, h"angt leider etwas von ihrer geometrischen
Phantasie ab.

\subsubsection*{Fall (a)}
Ein Beispiel f"ur den einfachen Falle, da"s die Br"ucke einem bereits
vorhandenen Teilst"uck entspricht, das nur verschoben ist, ist das
Cytisin. Die kopierte und verschobene Br"ucke ist gestrichelt dargestellt
(was in diesem Falle keine stereochemische Aussage sein soll!!!):

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"($-$)-Cytisin",HR,24)
 { ring(,5,1=3=){ 0: bond(r,=C) atom("O");
                  5: atom("N");
                }
   ring(,1,H){ 3: bond(r,t) atom("H");
               5: bond(r,t) atom("H");
               3: bond(30,o; -30,o) atom("N")
                  branch { bond(30,o) atom("H"); }
                  bond(-90,o; -150,o);
             }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"($-$)-Cytisin",HR,24)
 { ring(,5,1=3=){ 0: bond(r,=C) atom("O");
                  5: atom("N");
                }
   ring(,1,H){ 3: bond(r,t) atom("H");
               5: bond(r,t) atom("H");
               3: bond(30,o; -30,o) atom("N")
                  branch { bond(30,o) atom("H"); }
                  bond(-90,o; -150,o);
             }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Auch das Morphin weist eine Verbr"uckung auf, die einem Ausschnitt des Sechsringes
gleicht und nach der Verschiebung wieder exakt auf ein Ringatom des Grundk"orpers
trifft. Im Gegensatz zum Cytisin werden hier aber kurze Bindungen mit
"`krummen"' Winkeln f"ur die Verschiebung sowie dickere Bindungen f"ur die
Br"ucke benutzt, um einen perspektivischen Eindruck zu erreichen. Der
Furanring ist durch drei anellierte Sechsringe sehr verzogen und wird in
diesem Falle asymmetrisch wiedergegeben, wobei der Ringschlu"s durch eine
wilde Linie erfolgt:\index{Morphin}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Morphin",HR,24)
 { ring(,,H1=3=5=)
   { 2: bond(r) atom("HO",R);
     1: bond(-135,,L) atom("O") saveXY(#1);
   }
   ring(,2,H)
   { 1: ring(,3,H5=)
        { 1: bond(r,<.) atom("HO",R);  %// 20-01-2000 IK
          2: bond(#1,<.);
          4: bond(t,<<) atom("H");
        };
     5: bond(t,<.) atom("H");
     1: bond(-70,t,S; -30,p; 30,t)
        saveXY(#2)
        atom("N") bond(110,t,S)
        restoreXY(#2) bond(-30);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Morphin",HR,24)
 { ring(,,H1=3=5=)
   { 2: bond(r) atom("HO",R);
     1: bond(-135,,L) atom("O") saveXY(#1);
   }
   ring(,2,H)
   { 1: ring(,3,H5=)
        { 1: bond(r,<.) atom("HO",R);
          2: bond(#1,<.);
          4: bond(t,<<) atom("H");
        };
     5: bond(t,<.) atom("H");
     1: bond(-70,t,S; -30,p; 30,t)
        saveXY(#2)
        atom("N") bond(110,t,S)
        restoreXY(#2) bond(-30);
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Die Br"ucke im Lycopodin ist ein weiteres Beispiel f"ur verschobene Repliken
des Grundk"orpers:\index{Lycopodin}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Lycopodin",HR,24)
 { ring(,2,H){}
   ring(,4,H)
   { 3: bond(b,<<) atom("H");
     5: atom("N");
   }
   ring(,0,H)
   { 4: bond(r,=C) atom("O");
     0: bond(-170,t,S; 150,p) saveXY(#1)
        bond(90,t; 10,t,S)
        restoreXY(#1) bond(-150,<.)
        restoreXY(#1) bond(150,<<) atom("H");
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Lycopodin",HR,24)
 { ring(,2,H){}
   ring(,4,H)
   { 3: bond(b,<<) atom("H");
     5: atom("N");
   }
   ring(,0,H)
   { 4: bond(r,=C) atom("O");
     0: bond(-170,t,S; 150,p) saveXY(#1)
        bond(90,t; 10,t,S)
        restoreXY(#1) bond(-150,<.)
        restoreXY(#1) bond(150,<<) atom("H");
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}


\subsubsection*{Fall (b)}
Die folgenden beiden Beispiele weisen eine Br"ucke auf, die durch Ann"aherung
von beiden Br"uckenk"opfen her aufgebaut wird, der Ringschlu"s erfolgt durch
eine wilde Linie (Br"ucke wiederum gestrichelt gezeichnet):\index{Kauran}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,2,H){ 1: bond(-120,o) saveXY(#1);
               vertex(,5,2,H,5){ 1: bond(-150,o; #1,o); };
             }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,2,H)
   { 1: bond(-120,o) saveXY(#1);
     vertex(,5,2,H,5){ 1: bond(-150,o; #1,o); };
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"($-$)-Kauran",HR,24)
 { ring(,,H){ 3: bond(-90,t) atom("H");
               2: bond(b,o);
               1: bond(b,t) atom("H");
               vertex(,1,1,H,6){3: bond(-120,t); 3: bond(-60,o); };
               vertex(,3,3,H,6){ 1: bond(-40,o) saveXY(#1) bond(30,o);
                                3: bond(-20,o) bond(#1,o);
                              };
             }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"($-$)-Kauran",HR,24)
 { ring(,,H)
   { 3: bond(-90,t) atom("H");
     2: bond(b,o);
     1: bond(b,t) atom("H");
     vertex(,1,1,H,6){3: bond(-120,t); 3: bond(-60,o); };
     vertex(,3,3,H,6){ 1: bond(-40,o) saveXY(#1) bond(30,o);
                      3: bond(-20,o) bond(#1,o);
                    };
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Die Darstellung einer dem Humulen nahe verwandten Struktur bringt Schwierigkeiten,
wenn die E/Z-Isomerie, die aus der Doppelbindung im Neunring resultiert,
korrekt wiedergegeben werden soll. Am besten fassen Sie den Neunring als
Br"ucke mit einem unbekannten Teilst"uck auf, das durch eine wilde Linie
wiedergegeben wird. (Im Beispiel entsteht eine Asymmetrie, da diese wilde Linie
nicht exakt in der vertikalen Mitte des Vierringes endet; wollen Sie eine
perfekt symmetrische Formel, m"ussen Sie L"osungen analog dem Falle (c)
suchen):

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"(E)-Isomer",HR,24)
 { ring(,,H,#N,4,-45)
   { 3: bond(70; 10; -50; -110,=) saveXY(#1);
     0: bond(-70; -10; 50; #1);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"(E)-Isomer",HR,24)
 { ring(,,H,#N,4,-45)
   { 3: bond(70; 10; -50; -110,=) saveXY(#1);
     0: bond(-70; -10; 50; #1);
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}


\subsubsection*{Fall (c)}
Die L"osung dieses Problems wurde bereits gegeben, im Beispiel ist es sogar
einfach, den Zielpunkt zu bestimmen, da er in radialer Verl"angerung des
Ringatoms, das sich zwischen den beiden Br"uckenk"opfen befindet, liegt
(hier Position \verb+5+).

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"(c)",HR,24)
 { ring(,,H){ 5: saveXY(#1,-30,N);
              0: bond(#1,o);
              4: bond(#1,o);
            }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"(c)",HR,24)
 { ring(,,H){ 5: saveXY(#1,-30,N);
              0: bond(#1,o);
              4: bond(#1,o); }
 }
\end{prog}
\end{minipage}
\end{fullpage}


\subsubsection*{Wilde Linien}
Aus den vorangegangenen Beispielen ist deutlich geworden, wie n"utzlich
wilde Linien sind (vor allem zum Pfuschen). Sind die Br"ucken sehr kompliziert
und m"ussen Sie daher un"ubersichtliche Befehlsketten schreiben, kann es
sinnvoll sein, die Position eines oder beider Br"uckenk"opfe mit \verb+saveXY+
zu speichern und sp"ater, au"serhalb der geschachtelten Beschreibungen des
Grundk"orpers, mit \verb+restoreXY+ wieder aufzugreifen.




%
%
\section{Reaktionsketten}\index{Reaktionskette}\index{Kette!Reaktions-}
Das Konzept der automatischen Positionierung von Formeln zueinander kann mit
dem weiteren Grundelement des Reaktionspfeils so erweitert werden, da"s nicht
nur Formeln nebeneinander gestellt, sondern mit zwischengesetzten Pfeilen zu
ganzen Reaktionsschemata oder -ketten verbunden werden.
Neben einer einfachen linearen Abfolge sind daneben auch Verzweigungen und deren
Gegenteil, die Zusammenf"uhrung sowie mehrzeilige Schemata m"oglich.

\subsection{Horizontale lineare Anordnung}
Anstelle der bereits bekannten beiden Positionierungsparameter einer Formel
verf"ugt das Pfeilelement "uber die Angabe einer Richtung und L"ange, um den Anschlu"spunkt
zu bestimmen. Der Pfeil beginnt dabei stets am aktuellen Startpunkt.Im einfachsten Falle
einer horizontal von links nach rechts gerichteten
Kette notieren Sie eine Folge von Formeln mit den Positionierungen (L,R) sowie
von Pfeilen mit einem Winkel von 0\textdegree{} (Voreinstellung),
wie Schema~\ref{fig:hora}zeigt:
\begin{prog}
\begin{chemistry}[hor1]
 formula(L,R){ ring(){ 4: bond(r);  5: bond(r); } }

 arrow()
 { text(T,C){ formula(C,C){ atom("Br$_2$") }}
   text(B,C){ formula(C,C){ atom("h$\nu$") }}
 }

 formula(L,R)
 { ring(){ 4: bond(r) atom("CH$_2$Br",L);
           5: bond(r) atom("CH$_2$Br",L); }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("Na$_2$S") }}
   text(B,C){ formula(C,C){ atom("CH$_3$CH$_2$OH") }}
 }

 formula(L,R)
 { ring(,5){}
   ring("cpentane",1){ 4: atom("S"); }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("NaIO$_4$") }}
   text(B,C){ formula(C,C){ atom("H$_2$O, O $^o$C") }}
 }

 formula(L,R)
 { ring(,5){}
   ring("cpentane",1)
   { 4: atom("S") bond(r,=C) atom("O"); }
 }
\end{chemistry}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[hor1]
 formula(L,R)
 { ring(){ 4: bond(r);  5: bond(r); } }

 arrow()
 { text(T,C){ formula(C,C){ atom("Br$_2$") }}
   text(B,C){ formula(C,C){ atom("h$\nu$") }}
 }

 formula(L,R)
 { ring(){ 4: bond(r) atom("CH$_2$Br",L);
           5: bond(r) atom("CH$_2$Br",L);}
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("Na$_2$S") }}
   text(B,C){ formula(C,C){ atom("CH$_3$CH$_2$OH") }}
 }

 formula(L,R)
 { ring(,5){}
   ring("cpentane",1){ 4: atom("S"); }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("NaIO$_4$") }}
   text(B,C){ formula(C,C){ atom("H$_2$O, O $^o$C") }}
 }

 formula(L,R)
 { ring(,5){}
   ring("cpentane",1){ 4: atom("S") bond(r,=C)
                            atom("O"); }
 }
\end{chemistry}
\caption{Horizontales Reaktionsschema: Darstellung eines Benzothiophens.
\label{fig:hora}}
\end{fullpage}
\end{schema}

Die einzelnen Formeln werden mit dieser Positionierung auf eine gemeinsame
Mittellinie, auf der die Reaktionspfeile liegen, zentriert. Es ist auch
denkbar, die Ketten von rechts nach links aufzubauen, wobei die Positionierung
(R,L) benutzt wird, f"ur die Pfeile ein Winkel von 180\textdegree.

Eine Erweiterung der Formelsyntax l"a"st die Beschriftung der Komponenten zu
und ist speziell f"ur den Satz von Formeln in horizontalen Ketten geeignet.
Sie m"ussen dazu den Typ \verb+HA+ (horizontal, absoluter Abstand) w"ahlen und
den Abstand der  Text\textit{unterkante} von der Mittellinie
angeben, wie Schema~\ref{fig:horb} zeigt. Der Befehl \verb+\shortstack+ erlaubt es,
Zeilenumbr"uche innerhalb des Textes vorzunehmen:
\begin{prog}
\begin{chemistry}[hor2]
 formula(L,R,"o-Xylen",HA,36)
 { ring(){ 4: bond(r);  5: bond(r); } }

 arrow()
 { text(T,C){ formula(C,C){ atom("Br$_2$") }}
   text(B,C){ formula(C,C){ atom("h$\nu$") }}
 }

 formula(L,R,"$\alpha,\alpha'$-o-Xylen",HA,36)
 { ring(){ 4: bond(r) atom("CH$_2$Br",L);
           5: bond(r) atom("CH$_2$Br",L); }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("Na$_2$S") }}
   text(B,C){ formula(C,C){ atom("CH$_3$CH$_2$OH") }}
 }

 formula(L,R,"\shortstack{Dihydro-\\benzo[b]thiophen}",HA,36)
 { ring(,5){}
   ring("cpentane",1){ 4: atom("S"); }
 }
\end{chemistry}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[hor2]
 formula(L,R,"o-Xylen",HA,36)
 { ring(){ 4: bond(r);  5: bond(r); }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("Br$_2$") }}
   text(B,C){ formula(C,C){ atom("h$\nu$") }}
 }

 formula(L,R,"$\alpha,\alpha'$-o-Xylen",HA,36)
 { ring(){ 4: bond(r) atom("CH$_2$Br",L);
           5: bond(r) atom("CH$_2$Br",L);
         }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("Na$_2$S") }}
   text(B,C){ formula(C,C){ atom("CH$_3$CH$_2$OH") }}
 }

 formula(L,R,"\shortstack{Dihydro-\\benzo[b]thiophen}",HA,36)
 { ring(,5){}
   ring("cpentane",1){ 4: atom("S"); }
 }
\end{chemistry}
\caption{Horizontales Reaktionsschema mit Formelnamen, die auf eine
gemeinsame Linie unterhalb des Reaktionspfeils ausgerichtet sind (fester Abstand
des Textes zur Mittellinie).\label{fig:horb}}
\end{fullpage}
\end{schema}

Bei diesem Verfahren ist es erforderlich, den ben"otigten Abstand der Texte
von der Mittellinie abzusch"atzen oder durch Versuche zu ermitteln. In beiden
F"allen k"onnen Sie nur schwer f"ur mehrere Schemata einen gleichm"a"sigen
Abstand erreichen. Der Befehl \verb+multiline+, der speziell f"ur den Satz
$n$-zeiliger horizontaler Reaktionsketten konzipiert ist, tr"agt dem jedoch
Rechnung, indem er in jeder Zeile die am tiefsten liegende Formelunterkante
bestimmt und zu dieser einen konstanten Abstand \verb+rTextSep+ einh"alt, um
die H"ohe der gesamten Textzeile zu berechnen. Alle Formelbeschriftungen in dieser
Zeile liegen somit auf gleicher H"ohe und halten einen identischen Mindestabstand
von der gr"o"sten Formel ein. W"ahlen Sie $n=1$, k"onnen Sie das angesprochene
Problem l"osen (Schema~\ref{fig:horc}). Beachten Sie, da"s Formeln innerhalb von
\verb+multiline+ keine Positionierungsparameter f"ur die Beschriftung (\verb+HR+
und "ahnliche) besitzen d"urfen, da diese Werte ja selbst"andig bestimmt werden:
\begin{prog}
\begin{chemistry}[hor3]
multiline(1)
{ formula(L,R,"o-Xylen")
 { ring(){ 4: bond(r);  5: bond(r); } }

 arrow()
 { text(T,C){ formula(C,C){ atom("Br$_2$") }}
   text(B,C){ formula(C,C){ atom("h$\nu$") }}
 }

 formula(L,R,"$\alpha,\alpha'$-o-Xylen")
 { ring(){ 4: bond(r) atom("CH$_2$Br",L);
           5: bond(r) atom("CH$_2$Br",L); }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("Na$_2$S") }}
   text(B,C){ formula(C,C){ atom("CH$_3$CH$_2$OH") }}
 }

 formula(L,R,"\shortstack{Dihydro-\\benzo[b]thiophen}")
 { ring(,5){}
   ring("cpentane",1){ 4: atom("S"); }
 };
}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[hor3]
multiline(1)
{ formula(L,R,"o-Xylen")
 { ring(){ 4: bond(r);  5: bond(r); }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("Br$_2$") }}
   text(B,C){ formula(C,C){ atom("h$\nu$") }}
 }

 formula(L,R,"$\alpha,\alpha'$-o-Xylen")
 { ring(){ 4: bond(r) atom("CH$_2$Br",L);
           5: bond(r) atom("CH$_2$Br",L);
         }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("Na$_2$S") }}
   text(B,C){ formula(C,C){ atom("CH$_3$CH$_2$OH") }}
 }

 formula(L,R,"\shortstack{Dihydro-\\benzo[b]thiophen}")
 { ring(,5){}
   ring("cpentane",1){ 4: atom("S"); }
 };
}
\end{chemistry}
\caption{Horizontales Reaktionsschema mit Formelnamen, die automatisch in
konstantem Abstand auf einer gemeinsamen Linie unterhalb des Reaktionspfeils
ausgerichtet sind.\label{fig:horc}}
\end{fullpage}
\end{schema}

Zur Bestimmung des korrekten Abstands der Texte von der Mittellinie werden nur
diejenigen Formeln herangezogen, die auch eine Beschriftung aufweisen. Der Fall,
da"s ein sehr ausgedehntes Zwischenprodukt (zum Beispiel ein vertikal dargestelltes
Isomerengemisch ohne Text) die H"ohe der Beschriftungen der gesamten Zeile
bestimmt, tritt somit nicht ein, wie Sie in Schema~\ref{fig:multia} sehen k"onnen.


\subsection{Mehrzeilige Schemata}
Die Diskussion ging bislang von einzelnen Reaktionszeilen aus. Es ist jedoch
m"oglich, mehrere solcher Zeilen "ubereinandersetzen zu lassen, wobei automatisch
zwischen den einzelnen Zeilen ein konstanter Abstand \verb+rMultilineSep+
gesetzt wird, unter Ber"ucksichtigung eventueller Beschriftungen
(Schema~\ref{fig:multiline}).

\begin{prog}
\begin{chemistry}[multli1]
set("rArrowExtend",12)
multiline(2,L)
{ % line 1
 formula(L,R,"Naphthalin")
 { ring(,5){}  ring(,1){} }

 arrow(){ text(B,C){ formula(C,C){ atom("AlCl$_3$") } } }

 formula(L,R,"Succinylnaphthalin")
 { ring(,5){}
   ring(,1)
   { 3: bond(r)
        branch { bond(150,=) atom("O"); }
        bond(30; -30; -90) atom("C",C,R) atom("OOH",L); }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("ZnHg") } }
   text(B,C){ formula(C,C){ atom("HCl") } } }

 formula(L,R,"Naphthylbutters""aure")
 { ring(,5){}
   ring(,1){ 3: bond(r; 30; -30; -90) atom("C",C,R) atom("OOH",L); }
 }
 ;
 %line 2
 arrow()
 { text(T,C){ formula(C,C){ atom("H$_3$PO$_4$") } }
   text(B,C){ formula(C,C){ atom("Zyklisierung") } } }

 formula(L,R)
 { ring(,5){}
   ring(,1){ 3: ring(,1,H){ 5: bond(r,=) atom("O"); }; }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("ZnHg") } }
   text(B,C){ formula(C,C){ atom("HCl") } } }

 formula(L,R,"Tetrahydrophenanthren")
 { ring(,5){}
   ring(,1){ 3: ring(,1,H){}; }
 }

 arrow(){ text(T,C){ formula(C,C){ atom("DDQ") } } }

 formula(L,R,"Phenanthren")
 { ring(,5){}
   ring(,1){ 3: ring(,1){}; }
 }
 ;
}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[multli1]
set("rArrowExtend",12)
multiline(2,L)
{ % line 1
 formula(L,R,"Naphthalin")
 { ring(,5){}  ring(,1){}
 }

 arrow()
 { text(B,C){ formula(C,C){ atom("AlCl$_3$") } } }

 formula(L,R,"Succinylnaphthalin")
 { ring(,5){}
   ring(,1)
   { 3: bond(r)
        branch  { bond(150,=) atom("O");}
        bond(30; -30; -90) atom("C",C,R) atom("OOH",L);        %// 20-01-2000 IK
   }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("ZnHg") } }
   text(B,C){ formula(C,C){ atom("HCl") } }
 }

 formula(L,R,"Naphthylbutters""aure")
 { ring(,5){}
   ring(,1){ 3: bond(r; 30; -30; -90)atom("C",C,R) atom("OOH",L); }    %// 20-01-2000 IK
 }
 ;

 %line 2
 arrow()
 { text(T,C){ formula(C,C){ atom("H$_3$PO$_4$") } }
   text(B,C){ formula(C,C){ atom("Zyklisierung") } }
 }

 formula(L,R)
 { ring(,5){}
   ring(,1)
   { 3: ring(,1,H){ 5: bond(r,=) atom("O"); }; }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("ZnHg") } }
   text(B,C){ formula(C,C){ atom("HCl") } }
 }

 formula(L,R,"Tetrahydrophenanthren")
 { ring(,5){}
   ring(,1){ 3: ring(,1,H){}; }
 }

 arrow()
 { text(T,C){ formula(C,C){ atom("DDQ") } }
 }

 formula(L,R,"Phenanthren")
 { ring(,5){}
   ring(,1){ 3: ring(,1){}; }
 }
 ;
}
\end{chemistry}
\caption{Synthese von Phenanthren, mehrzeilig gesetzt mit \texttt{multiline}.
\label{fig:multiline}}
\end{fullpage}
\end{schema}

Sie k"onnen auf diese Weise eine lange Reaktionskette in mehrere Zeilen
brechen oder auch eine Schar von unabh"angigen kurzen Ketten "ubereinander
setzen. Dar"uberhinaus findet der Befehl Anwendung beim Zusammenfassen mehrerer
einzelner Formeln oder gr"o"seren Reaktionsausschnitten, Beispiele hierzu sind
im Abschnitt~\ref{sec:multiline} gegeben.

\subsection{Vertikale Anordnung}
Ebenso einfach wie horizontale Ketten k"onnen vertikal verlaufende Abl"aufe
gesetzt werden, wobei die Hauptrichtung von oben nach unten mit der Positionierung
(T,B), seltener von unten nach oben mit (B,T) erreicht wird, wie man anhand
des Schemas~\ref{fig:verta} (links) sieht. Die Pfeile weisen nun unter einem
Winkel von -90\textdegree{} nach unten:
\begin{prog}
\begin{chemistry}[vert1]
 formula(T,B)
 { ring(){} }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("Cl") bond(30)
               branch{ bond(90,=C) atom("O"); }
                       bond(-30; 30) }}
   text(B,C){ formula(C,C){ atom("AlCl$_3$") }}
 }

 formula(T,B)
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O"); }
        bond(r-; r); }
 }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("S/Morpholin") }} }

 formula(T,B)
 { ring()
   { 4: bond(r; r-; r) atom("COOH",L,R); }
 }
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[vert1]
 formula(T,B)
 { ring(){} }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("Cl") bond(30)
               branch{ bond(90,=C) atom("O"); }
               bond(-30; 30) }}
   text(B,C){ formula(C,C){ atom("AlCl$_3$") }}
 }

 formula(T,B)
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O"); }
        bond(r-; r); }
 }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("S/Morpholin") }} }

 formula(T,B)
 { ring()
   { 4: bond(r; r-; r) atom("COOH",L,R);
   }
 }
\end{chemistry}
\hfil
\begin{chemistry}[vert2]
 formula(T,B,"Benzen",V,24)
 { ring(){} }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("Cl") bond(30)
               branch{ bond(90,=C) atom("O"); }
               bond(-30; 30) }}
   text(B,C){ formula(C,C){ atom("AlCl$_3$") }}
 }

 formula(T,B)
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O"); }
        bond(r-; r);
   }
 }

 arrow(-90)
 { text(T,L){ formula(C,C){ atom("S/Morpholin") }} }

 formula(T,B,"\shortstack{3-Phenyl-\\propans""aure}",V,24)
 { ring()
   { 4: bond(r;r-;r) atom("COOH",L,R);
   }
 }
\end{chemistry}
\caption{Vertikales Reaktionsschema: Darstellung der 7-Oxononans"aure. Rechts
dasselbe Schema mit Bennenung der Komponenten. Die Texte weisen einen festen
Abstand zur Formelunterkante auf.
\label{fig:verta}}
\end{schema}

Auch hierbei ist eine Beschriftung der Formeln m"oglich, wobei in jedem
Falle der Abstand der Textunterkante von der Formelunterkante angegeben werden
mu"s (Typ \verb+V+), da keine horizontale Mittellinie existiert. Auch in diesem Falle
k"onnen Zeilenumbr"uche mit \verb+\shortstack+ innerhalb des Textparameters auftreten
(Schema~\ref{fig:verta} rechts):
\begin{prog}
\begin{chemistry}[vert2]
 formula(T,B,"Benzen",V,24)
 { ring(){} }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("Cl") bond(30)
               branch{ bond(90,=C) atom("O"); }
               bond(-30; 30) }}
   text(B,C){ formula(C,C){ atom("AlCl$_3$") }}
 }

 formula(T,B)
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O"); }
        bond(r-; r); }
 }

 arrow(-90)
 { text(T,L){ formula(C,C){ atom("S/Morpholin") }} }

 formula(T,B,"\shortstack{3-Phenyl-\\propans""aure}",V,24)
 { ring()
   { 4: bond(r; r-; r) atom("COOH",L,R); }
 }
\end{chemistry}
\end{prog}

Bislang wurde davon ausgegangen, da"s die Hauptrichtung der Kette stets dieselbe
ist~-- von links nach rechts oder von oben nach unten. Dies mu"s nicht immer
der Fall sein, es steht Ihnen frei, die Positionierungsparameter einer Formel
zum Beispiel auf \verb+L,B+ zu setzen, um den Verlauf an dieser Stelle von
links-rechts nach oben-unten zu "andern und einen Knick zu erreichen.

%
%
\subsection{Kontext und Verzweigung}\label{sec:branch}\index{Kontext}
\index{Reaktionskette!verzweigt}\index{Kette!Reaktions-!verzweigt}
\index{Verzweigung!in Reaktionskette}
Es ist nun an der Zeit, das Konzept des \textit{Kontextes} zu verdeutlichen.
Implizit haben Sie es mit dem Zeichnen des ersten Schemas bereits angewandt,
ohne es zu wissen. Ein Kontext ist nichts weiter als die Bounding Box einer
Formel. Er wird eingesetzt, um die Koordinaten der neuen Kardinalpunkte
der Formel (die vier Ecken, die vier Seitenmitten sowie der Mittelpunkt)
anhand der Positionierungsparameter \verb+<pos>+ und \verb+<Cpos>+ zu
berechnen. Jeder \verb+formula+"=Befehl setzt den aktuellen Kontext auf die
Bounding Box der durch ihn gezeichneten Formel.

Unmittelbar sichtbar kann der Kontext durch die Befehle \verb+fbox+ oder
\verb+bracket+ gemacht werden: sie nutzen den aktuellen Kontext, um die
zugeh"orige Formel einzurahmen oder mit eckigen Klammern einzuschlie"sen.

Ein wichtiges Merkmal von Reaktionsketten, das grundlegend auf dem Kontext
aufbaut, ist die \textit{Verzweigung}, durch die Sie von einer Formel ausgehend,
mehrere Ketten weiterlaufen lassen k"onnen. Dabei speichern Sie mit \verb+savecontext+
den Kontext und damit die geometrische Ausdehnung der Formel  unter einer
bestimmten Nummer  und k"onnen so immer, wenn Sie ihn erneut ben"otigen,
mit \verb+setcontext+ unter dieser Nummer darauf zugreifen. Dies ist zu Beginn
jeder weiteren Reaktionskette erforderlich, da durch die folgenden Formeln
der Kontext der Verzweigungsformel "uberschrieben ist.

Eine einfache Verzweigung der Reaktionskette wird in der Beschreibung zum
Befehl \verb+setcontext+ in Schema~\ref{fig:conta} gegeben. Hier soll anhand
der Reaktionsm"oglichkeiten eines Borans die Mehrfachverzweigung dargestellt
werden. Ebenso wie bei der einfachen Verzweigung speichern Sie den Kontext
der Formel, die als Verzweigungspunkt dienen soll, ein einziges Mal ab, da er
sich nicht "andert. Zum Unterschied vom einfachen Falle verwenden Sie ihn aber
mehrmals, um mit \verb+setcontext+ einen Anschlu"spunkt zu berechnen:
\begin{prog}
\begin{chemistry}[cont2]
 formula(L,R)
 { atom("R") bond(30; -30,=) }

 arrow()
 { text(T,L){ formula(C,C){ atom("H") bond(0) atom("B")
       branch{bond(90; 30); bond(-30; 30);} }} }

 formula(L,R,"Alkylboran",HR,24)
 { atom("R") bond(30; -30; 30)
   atom("B")
   branch{bond(90; 30); bond(-30; 30);}
 }
 savecontext(#1)

 arrow()
 { text(T,L){ formula(C,C){ atom("R'-COOD") }} }
 formula(L,R)
 { atom("R") bond(30; -30; 30) atom("D") }

 setcontext(#1,TR)
 arrow(45)
 { text(T,L){ formula(C,C){ atom("AgNO$_3$/OH$^\ominus$") }} }
 formula(BL,R)
 { atom("R") bond(30; -30; 30; -30; 30) atom("R") }

 setcontext(#1,BR)
 arrow(-45)
 { text(T,L){ formula(C,C){ atom("H$_2$O$_2$/OH$^\ominus$") }} }
 formula(TL,R)
 { atom("R") bond(30; -30; 30) atom("OH",L) }

 setcontext(#1,B)
 arrow(-90)
 { text(T,L){ formula(C,C){ atom("Br$_2$/OH$^\ominus$") }} }
 formula(T,R)
 { atom("R") bond(30; -30; 30) atom("Br",L) }
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[cont2]
 formula(L,R)
 { atom("R") bond(30; -30,=) }

 arrow()
 { text(T,L){ formula(C,C){ atom("H") bond(0) atom("B")
       branch{bond(90; 30); bond(-30; 30);} }} }

 formula(L,R,"Alkylboran",HR,24)
 { atom("R") bond(30; -30; 30)
   atom("B")
   branch{bond(90; 30); bond(-30; 30);}
 }
 savecontext(#1)

 arrow()
 { text(T,L){ formula(C,C){ atom("R'-COOD") }} }
 formula(L,R)
 { atom("R") bond(30; -30; 30) atom("D") }

 setcontext(#1,TR)
 arrow(45)
 { text(T,L){ formula(C,C){ atom("AgNO$_3$/OH$^\ominus$") }} }
 formula(BL,R)
 { atom("R") bond(30; -30; 30; -30; 30) atom("R") }

 setcontext(#1,BR)
 arrow(-45)
 { text(T,L){ formula(C,C){ atom("H$_2$O$_2$/OH$^\ominus$") }} }
 formula(TL,R)
 { atom("R") bond(30; -30; 30) atom("OH",L) }

 setcontext(#1,B)
 arrow(-90)
 { text(T,L){ formula(C,C){ atom("Br$_2$/OH$^\ominus$") }} }
 formula(T,R)
 { atom("R") bond(30; -30; 30) atom("Br",L) }
\end{chemistry}
\caption{Was passiert mit dem Boran? Mehrfachverzweigungen, von derselben
Formel ausgehend, k"onnen es zeigen. Der Kontext der Verzweigungsstelle, hier
des Borans, mu"s daf"ur gespeichert werden.\label{fig:contb}}
\end{schema}

Weitere M"oglichkeiten der Verzweigungen, wobei mehrere Formeln einen
gemeinsamen Kontext bilden und so als Einheit agieren, werden im folgenden
Abschnitt vorgestellt.


\subsection{Reaktionsabschnitte als Einheit betrachten}\label{sec:multiline}
\index{Formeln!als Einheit}
So kann der Wunsch bestehen, innerhalb einer horizontalen Kette ein
Zwischenprodukt mit mehreren mesomeren Zust"anden vertikal "ubereinander
darzustellen, wie dies in Schema~\ref{fig:multia} zu sehen ist. Hier besteht
die L"osung darin, einen \verb+multiline+"=Befehl mit einem kleinen
vertikal orientierten Schema als \textit{einzeiligen} Inhalt zu verwenden. Die
beiden Grenzstrukturen k"onnen so als Einheit betrachet werden,
die durch die Positionierung \verb+L,R+ zur Reaktionskette zentriert ist.
Die innere Ausrichtung ist bei einzeiligem Inhalt von \verb+multiline+ sinnlos
und kann beliebig gew"ahlt werden. Zus"atzlich wurde eine \verb+multiline+"=Umgebung
benutzt, um die Formelbeschriftung auf gleiche H"ohe zu bringen:
\begin{prog}
\begin{chemistry}[multli2]
multiline(1)
{ formula(L,R,"Benzen"){ ring(){} }

 arrow()
 { text(T,L){ formula(C,C){ atom("Cl") bond(30)
     branch{bond(90,=C) atom("O");} bond(-30) } }
 }

 multiline(1,C)
 { formula(T,B)
   { ring(,,H0=2=)
     { 4: bond(30) branch{ bond(90,=C) atom("O");} bond(-30);
       4: bond(b) atom("H");
       5: bond(r,s,S) atom("$\oplus$"); }
   }
   arrow(-90,,<=>){}
   formula(T,B)
   { ring(,,H2=5=)
     { 4: bond(30) branch{ bond(90,=C) atom("O");} bond(-30);
       4: bond(b) atom("H");
       1: bond(r,s,S) atom("$\oplus$"); }
   };
 }

 arrow(){}

 formula(L,R,"Azetylbenzen")
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O");} bond(r-); }
 }
;}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[multli2]
multiline(1){
formula(L,R,"Benzen")
{ ring(){} }

arrow()
{ text(T,L){ formula(C,C){ atom("Cl") bond(30) branch{
   bond(90,=C) atom("O");} bond(-30) } }
}

multiline(1,C)
{ formula(T,B)
 { ring(,,H0=2=)
   { 4: bond(30) branch{ bond(90,=C) atom("O");} bond(-30);
     4: bond(b) atom("H");
     5: bond(r,s,S) atom("$\oplus$");
   }
 }
 arrow(-90,,<=>){}
 formula(T,B)
 { ring(,,H2=5=)
   { 4: bond(30) branch{ bond(90,=C) atom("O");} bond(-30);
     4: bond(b) atom("H");
     1: bond(r,s,S) atom("$\oplus$");
   }
 };
}

arrow(){}

formula(L,R,"Azetylbenzen")
{ ring()
 { 4: bond(r) branch { bond(r+,=C) atom("O");} bond(r-); }
}
;}
\end{chemistry}
\caption{Ein unabh"angiges vertikales Schema wird als einzeiliges
\texttt{multiline}-Objekt gesetzt und kann so als Einheit in den horizontalen
Formelverlauf eingef"ugt werden.\label{fig:multia}}
\end{schema}

Sie k"onnen mit diesem Verfahren ebensogut horizontal angeordnete Grenzstrukturen
oder Reaktionsabschnitte innerhalb von vertikalen Ketten anordnen, wobei
\verb+T,B+ als Positionierung eingesetzt werden mu"s. Dies ist beim Gemisch
verschiedener Chlorbutene im Schema~\ref{fig:nylon} benutzt worden.

\subsection{Kontexte zusammenfassen}\index{Superkontext}\index{Kontext!Super-}
\verb+multiline+ kann Ihnen auch weiterhelfen, wenn Sie einige Formeln
zusammenfassen wollen, um eine Klammerung aller beteiligten Formeln erzielen
m"ochten, zum Beispiel um die mesomeren Zwischenstrukturen des Schemas~\ref{fig:multia}.
Der Befehl \verb+bracket+ klammert jedoch nur die letzte gezeichnete Formel.
Eine einzeilige \verb+multiline+-Einheit liefert nach au"sen hin einen
\textit{Superkontext}, das hei"st einen Kontext, der alle eingeschachtelten
Kontexte enth"alt und es daher erlaubt, eine Kettenverzweigung oder Einrahmung
auf alle beteiligten Formeln zu beziehen. Betrachten Sie als Beispiel f"ur eine
Einrahmung Schema~\ref{fig:multib}:
\begin{prog}
\begin{schema}
\begin{chemistry}[multli3]
multiline(1)
{ formula(L,R,"Benzen"){ ring(){} }

 arrow()
 { text(T,L){ formula(C,C){ atom("Cl") bond(30)
     branch{bond(90,=C) atom("O");} bond(-30) } }
 }

 multiline(1,C)
 { formula(T,B)
   { ring(,,H0=2=)
     { 4: bond(30) branch{ bond(90,=C) atom("O");} bond(-30);
       4: bond(b) atom("H");
       5: bond(r,s,S) atom("$\oplus$"); }
   }
   arrow(-90,,<=>){}
   formula(T,B)
   { ring(,,H2=5=)
     { 4: bond(30) branch{ bond(90,=C) atom("O");} bond(-30);
       4: bond(b) atom("H");
       1: bond(r,s,S) atom("$\oplus$"); }
   }
   ;
 }
 bracket()
 arrow(){}

 formula(L,R,"Azetylbenzen")
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O");} bond(r-); }
 }
;}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[multli3]
multiline(1){
formula(L,R,"Benzen")
{ ring(){} }

arrow()
{ text(T,L){ formula(C,C){ atom("Cl") bond(30) branch{
   bond(90,=C) atom("O");} bond(-30) } }
}

multiline(1,C)
{ formula(T,B)
 { ring(,,H0=2=)
   { 4: bond(30) branch{ bond(90,=C) atom("O");} bond(-30);
     4: bond(b) atom("H");
     5: bond(r,s,S) atom("$\oplus$");
   }
 }
 arrow(-90,,<=>){}
 formula(T,B)
 { ring(,,H2=5=)
   { 4: bond(30) branch{ bond(90,=C) atom("O");} bond(-30);
     4: bond(b) atom("H");
     1: bond(r,s,S) atom("$\oplus$");
   }
 }
 ;
}
bracket()

arrow(){}

formula(L,R,"Azetylbenzen")
{ ring()
 { 4: bond(r) branch { bond(r+,=C) atom("O");} bond(r-); }
}
;}
\end{chemistry}
\caption{Ein Superkontext mit \texttt{multiline} erlaubt die Klammerung mehrerer
Formeln. Er wird durch ein \texttt{multiline}"=Objekt gebildet.\label{fig:multib}}
\end{schema}

Anstelle des \verb+bracket+-Befehls k"onnen Sie ebensogut mehrfache
Verzweigungen mit \verb+savecontext+ und \verb+setcontext+ aufbauen, wobei
der Superkontext als Grundlage verwendet wird. Unabh"angig von diesem
k"onnen Sie aber auch auf die Einzelkontexte zugreifen, sofern diese
\textit{innerhalb} von \verb+multiline+ gespeichert werden, wie das
Beispiel des Schemas~\ref{fig:multid} zeigt:
\begin{prog}
\begin{chemistry}[multli4]
formula(L,R)
{ bond(-30,=) bond(30)
 branch {bond(90,=C) atom("O");} bond(-30);
}

arrow()
{ text(T,C){ formula(C,C){ atom("+ H$^\oplus$") } } }

multiline(1,C)
{ formula(T,B)
 { bond(-30,=; 30) branch{ bond(-90,s,S) atom("$\oplus$");
                           bond(90) atom("O",C,R) atom("H",L);
                         }
               bond(-30)
 }
 savecontext(#1)
 arrow(-90,,<=>){}
 formula(T,B)
 { atom("$\oplus$") bond(-90,s,S)
   bond(-30; 30,=)
   branch { bond(90) atom("O",C,R) atom("H",L); }
   bond(-30)
 }
 savecontext(#2)
 ;
}
bracket()

setcontext(#1,R)
arrow(){}
formula(L,R,"1,2-Addukt",HR,24)
{ bond(-30,=; 30)
 branch{ bond(150);
         bond(90,=C) atom("O");
       }
 bond(-30) atom("R")
}
setcontext(#2,R)
arrow(){}
formula(L,R,"1,4-Addukt",HR,24)
{ atom("R") bond(-90)
 bond(-30; 30)
 branch { bond(90,=C) atom("O"); } bond(-30)
}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[multli4]
formula(L,R)
{ bond(-30,=; 30)
 branch { bond(90,=C) atom("O");} bond(-30)
}

arrow()
{ text(T,C){ formula(C,C){ atom("+ H$^\oplus$") } } }

multiline(1,C)
{ formula(T,B)
 { bond(-30,=;30) branch{ bond(-90,s,S) atom("$\oplus$");
                                bond(90) atom("O",C,R) atom("H",L);
                              }
                                bond(-30)
 }
 savecontext(#1)
 arrow(-90,,<=>){}
 formula(T,B)
 { atom("$\oplus$") bond(-90,s,S)
   bond(-30;30,=)
   branch { bond(90) atom("O",C,R) atom("H",L); }
            bond(-30)
 }
 savecontext(#2)
 ;
}
bracket()

setcontext(#1,R)
arrow(){}
formula(L,R,"1,2-Addukt",HR,24)
{ bond(-30,=;30)
 branch{ bond(150);
         bond(30) atom("O",L,R) atom("H",L);
       }
bond(-30) atom("R")
}
setcontext(#2,R)
arrow(){}
formula(L,R,"1,4-Addukt",HR,24)
{ atom("R") bond(-90)
 bond(-30;30)
 branch { bond(90,=C) atom("O");} bond(-30)
}
\end{chemistry}
\caption{Unabh"angig vom Superkontext k"onnen Verzweigungen auf die
einzelnen Teilformeln ausgerichtet werden, wenn deren Kontexte einzeln
gespeichert werden.\label{fig:multid}}
\end{schema}

Das Speichern der Kontexte einzelner Formeln eines \verb+multiline+"=Zusammenhanges
ist von allgemeiner Bedeutung, wenn zwar \verb+multiline+ zum Ausrichten der
Formelbeschriftungen benutzt werden soll, aber dennoch die Formeln Verzweigungspunkte
darstellen. Hierzu folgt ein weiteres Beispiel (Schema~\ref{fig:multie}):
\begin{prog}
\begin{chemistry}[multli5]
multiline(1)
{ formula(L,R,"Zimts""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L); } }
 savecontext(#1)

 arrow(){}
 formula(L,R,"p-Cumars""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L);
          2: bond(r) atom("HO",R); }
 }
 savecontext(#2)

 arrow(){}
 formula(L,R,"Kaffees""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L);
          2: bond(r) atom("HO",R);
          1: bond(r) atom("HO",R); }
 }
;}
setcontext(#1,B) arrow(-90){}
formula(T,B,"Cumarin",V,24)
{ ring(,,H5=)
 { vertex(,1,1){};
   3: atom("O");
   4: bond(r,=C) atom("O"); }
}
setcontext(#2,TR) arrow(45){}
setcontext(#2,BR) arrow(-45){}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[multli5]
multiline(1)
{ formula(L,R,"Zimts""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L); } }
 savecontext(#1)

 arrow(){}
 formula(L,R,"p-Cumars""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L);
          2: bond(r) atom("HO",R); }
 }
 savecontext(#2)

 arrow(){}
 formula(L,R,"Kaffees""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L);
          2: bond(r) atom("HO",R);
          1: bond(r) atom("HO",R); }
 }
;}
setcontext(#1,B) arrow(-90){}
formula(T,B,"Cumarin",V,24)
{ ring(,,H5=)
 { vertex(,1,1){};
   3: atom("O");
   4: bond(r,=C) atom("O"); }
}
setcontext(#2,TR) arrow(45){}
setcontext(#2,BR) arrow(-45){}
\end{chemistry}
\caption{Mit \texttt{multiline} angeordnete Formelbeschriftungen und
Verzweigungen, erm"oglicht durch individuelle Kontexte.\label{fig:multie}}
\end{fullpage}
\end{schema}

F"ur jede Formel, die als Verzweigungspunkt dient, wird ein Individualkontext
gespeichert. Mit \verb+multiline+ erzeugte Formelbeschriftungen gehen dabei
in den Kontext mit ein, soda"s Sie bei nach unten f"uhrenden
Pfeilen wie gezeigt den korrekten Anschlu"spunkt erhalten.

Da der \verb+multiline+"=Block als Ganzes betrachtet wird, ergeben sich
Positionierungsprobleme, wenn au"serhalb des Block eine  Formel ohne Beschriftung folgen
soll. Deren Mittellinie l"age mittig zum gesamten vorangegangegen Block samt Beschriftung:
\begin{fullpage}\begin{minipage}{.55\fullwidth}
\begin{chemistry}
multiline(1)
{ formula(L,R,"Kaffees""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L);
          2: bond(r) atom("HO",R);
          1: bond(r) atom("HO",R); }
 }
 arrow(,12){}
;}
formula(L,R)
{ ring(,,H5=)
 { vertex(,1,1){ 4: bond(r) atom("HO",R);
                 5: bond(r) atom("HO",R); };
   3: atom("O");
   4: bond(r,=C) atom("O"); }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{.45\fullwidth}
\begin{prog}
multiline(1)
{ formula(L,R,"Kaffees""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L);
          2: bond(r) atom("HO",R);
          1: bond(r) atom("HO",R); }
         }
         arrow(,12){}
       ;}
       formula(L,R)
{ ring(,,H5=)
 { vertex(,1,1){ 4: bond(r) atom("HO",R);
                 5: bond(r) atom("HO",R); };
   3: atom("O");
   4: bond(r,=C) atom("O"); }
}
\end{prog}
\end{minipage}\end{fullpage}

Die L"osung besteht wiederum darin, den Kontext der letzten Formel zu speichern
und nach Abschlu"s des \verb+multiline+"=Blockes zu setzen:
\begin{fullpage}\begin{minipage}{.55\fullwidth}
\begin{chemistry}
multiline(1)
{ formula(L,R,"Kaffees""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L);
          2: bond(r) atom("HO",R);
          1: bond(r) atom("HO",R); }
 }
 savecontext(#1)
;}
setcontext(#1,R)
arrow(,12){}
formula(L,R)
{ ring(,,H5=)
 { vertex(,1,1){ 4: bond(r) atom("HO",R);
                 5: bond(r) atom("HO",R); };
   3: atom("O");
   4: bond(r,=C) atom("O"); }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{.45\fullwidth}
\begin{prog}
multiline(1)
{ formula(L,R,"Kaffees""aure")
 { ring(){5: bond(r;r/,=;r) atom("COOH",L);
          2: bond(r) atom("HO",R);
          1: bond(r) atom("HO",R); }
         }
         savecontext(#1)
       ;}
       setcontext(#1,R)
arrow(,12){}
formula(L,R)
{ ring(,,H5=)
 { vertex(,1,1){ 4: bond(r) atom("HO",R);
                 5: bond(r) atom("HO",R); };
   3: atom("O");
   4: bond(r,=C) atom("O"); }
}
\end{prog}
\end{minipage}\end{fullpage}



\subsection{Zusammenf"uhrung mehrerer Zweige}
Reaktionsketten k"onnen in mehrere Teilzweige aufgespalten werden, aber auch das
Gegenteil, die Zusammenf"uhrung mehrerer Zweige zu einem einzigen, etwa im
Zuge einer konvergenten Synthese, ist oft erforderlich. Je nachdem, ob die
"Aste horizontal oder vertikal zusammenlaufen sollen, k"onnen Sie zwischen den
Befehlen \verb+joinh+ und \verb+joinv+ w"ahlen.

Als Beispiel f"ur ein horizontal ausgerichtetes Schema dient die Synthese
eines Kronenethers.
\begin{prog}
\begin{chemistry}[joinh1]
joinh(2,L)
{ % line1
 formula(L,R,"Bis-chlorethylether")
 { atom("Cl") bond(45; 0; -45)
   atom("O") bond(45; 0; -45) atom("Cl")
 }
 arrow(){}
 formula(L,R)
 { ring()
   { 5: bond(r) atom("OH",L);
     4: bond(30) atom("O") bond(90; 30; -30)
        atom("O")
        bond(30; -30; -90) atom("O")
        bond(-30)
        ring(,2){ 1: bond(r) atom("HO",R); }; }
 };

 % line 2
 formula(L,R,"2,6-Bishydroxymethyl-pyridin")
 { ring()
   { 0: atom("N");
     1: bond(r; r+) atom("O",C,L) atom("H",R);
     5: bond(r; r-) atom("O",C,R) atom("H",L); }
 }
 arrow(){}
 formula(L,R)
 { ring()
   { 0: atom("N");
     1: bond(r; r+) atom("Br");
     5: bond(r; r-) atom("Br"); }
 };
}

arrow(){}

formula(L,R,"Dibenzopyridino[18]krone-6",HR,24)
{ ring()
 { 5: bond(-30) atom("O")
      bond(-90; -30; 30) atom("O")
      bond(-30; 30; 90) atom("O") bond(30);
   4: bond(30) atom("O") bond(90; 30)
      ring(,1)
      { 5: bond(-30; -90) atom("O") bond(-30)
           ring(,2) {};
        0: atom("N");
      };
 }
}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[joinh1]
joinh(2,L)
{ % line1
 formula(L,R,"Bis-chlorethylether")
 { atom("Cl") bond(45; 0; -45)
   atom("O") bond(45; 0; -45) atom("Cl")
 }
 arrow(){}
 formula(L,R)
 { ring()
   { 5: bond(r) atom("OH",L);
     4: bond(30) atom("O") bond(90; 30; -30)
        atom("O")
        bond(30; -30; -90) atom("O")
        bond(-30)
        ring(,2)
        { 1: bond(r) atom("HO",R); };
   }
 };

 % line 2
 formula(L,R,"2,6-Bishydroxymethyl-pyridin")
 { ring()
   { 0: atom("N");
     1: bond(r; r+) atom("O",C,L) atom("H",R);
     5: bond(r; r-) atom("O",C,R) atom("H",L);
   }
 }
 arrow(){}
 formula(L,R)
 { ring()
   { 0: atom("N");
     1: bond(r; r+) atom("Br");
     5: bond(r; r-) atom("Br");
   }
 };
}

arrow(){}

formula(L,R,"Dibenzopyridino[18]krone-6",HR,24)
{ ring()
 { 5: bond(-30) atom("O")
      bond(-90; -30; 30) atom("O")
      bond(-30; 30; 90) atom("O") bond(30);
   4: bond(30) atom("O") bond(90; 30)
      ring(,1)
      { 5: bond(-30; -90) atom("O") bond(-30)
           ring(,2) {};
        0: atom("N");
      };
 }
}
\end{chemistry}
\caption{Die Synthese eines Kronenethers als Beispiel f"ur die Zusammenf"uhrung
zweier horizontaler Ketten mit \texttt{joinh}.\label{fig:joinha}}
\end{fullpage}
\end{schema}

Auch mehrfache horizontale Zusammenf"uhrungen sind m"oglich, wenn Sie
in einen oder mehrere der Zweige weitere \verb+joinh+"=Befehle schreiben
(Schemata~\ref{fig:joinhh}):
\begin{prog}
\begin{chemistry}[joinhh]
joinh(2,R)
{ joinh(2,R)
 { formula(L,R,"Anilin")
   { ring(){ 4: bond(r) atom("N",C,R) atom("H$_2$",L);} }
   ;
   formula(L,R,"Salpetrige S""aure")
   { atom("HNO$_2$") }
   ;
 }
 arrow(){}
 formula(L,R,"Diazoniumion")
 { ring(){ 4: bond(r) atom("N",C,R) atom("$_2^+$",L);} }
 ;
 formula(L,R,"Anilin")
 { ring(){ 5: bond(r) atom("N",C,R) atom("H$_2$",L);} }
 ;
}
arrow(){}
formula(L,R,"p-Amino-diazobenzen",HR,24)
{ ring(){ 4: bond(r) atom("N=N",L,R) bond(r/)
            ring(,0,,,,r)
            { 3: bond(r) atom("N",C,R) atom("H$_2$",L);};
       }
}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[joinhh]
joinh(2,R)
{ joinh(2,R)
 { formula(L,R,"Anilin")
   { ring(){ 4: bond(r) atom("N",C,R) atom("H$_2$",L);} }
   ;
   formula(L,R,"Salpetrige S""aure")
   { atom("HNO$_2$") }
   ;
 }
 arrow(){}
 formula(L,R,"Diazoniumion")
 { ring(){ 4: bond(r) atom("N",C,R) atom("$_2^+$",L);} }
 ;
 formula(L,R,"Anilin")
 { ring(){ 5: bond(r) atom("N",C,R) atom("H$_2$",L);} }
 ;
}
arrow(){}
formula(L,R,"p-Amino-diazobenzen",HR,24)
{ ring(){ 4: bond(r) atom("N=N",L,R) bond(r/)
            ring(,0,,,,r)
            { 3: bond(r) atom("N",C,R) atom("H$_2$",L);};
       }
}
\end{chemistry}
\caption{Homogene geschachtelte Zusammenf"uhrungen mehrerer Reaktionszweige.\label{fig:joinhh}}
\end{fullpage}
\end{schema}


Analog k"onnen Sie auch vertikale Schemata zusammenf"uhren. Das Schema~\ref{fig:joinva}
zeigt dies mit zwei ineinandergeschachtelten \verb+joinv+"=Einheiten:
\begin{prog}
\begin{chemistry}[joinv1]
set("rArrowExtend",18)
joinv(2,B)
{ joinv(2,B)
 { formula(T,B)
   { bond(30,=; -30; 30)
     branch { bond(150);  bond(30) atom("OH",L); } bond(-30)
   }
   arrow(-90){ text(T,L){formula(C,C){atom("HBr")}}}
   formula(T,B)
   { atom("Br") bond(30; -30; 30,=)
     branch { bond(90); } bond(-30)
   };

   formula(T,B,"Tosylchlorid",V,24)
   { ring(){ 2: bond(r); 5: bond(r) atom("SO$_2$Cl",L); }
   }
   arrow(-90)
   {  text(T,L){formula(C,C){atom("NaOH")}}
      text(B,L){formula(C,C){atom("Zn")}}
   }
   formula(T,B)
   { ring(){ 2: bond(r); 5: bond(r) atom("SO$_2$Na",L); }
   };
 }
 arrow(-90){} % 80%

 formula(T,B)
 { ring(){ 2: bond(r);
           5: bond(r) atom("SO$_2$",L,R) bond(30; -30; 30,=)
              branch{bond(90);} bond(-30); }
 };

 formula(T,B,"3-Methylbutens""aure",V,24)
 { bond(30) branch{ bond(90); } bond(-30,=; 30) atom("COOH",L)
 }
 arrow(-90){ text(T,L){formula(C,C){atom("CH$_3$OH")}}}
 formula(T,B)
 { bond(30) branch{ bond(90); } bond(-30,=; 30) atom("CO$_2$CH$_3$",L)
 };
}

arrow(-90){ text(T,L){formula(C,C){atom("NaOCH$_3$")}}}

formula(T,B)
{ ring()
 { 3: bond(r);
   0: bond(r) atom("S")
      branch { bond(180,=C) atom("O");
               bond(0,=C) atom("O"); }
      bond(-90)
      saveXY(#1)
      bond(-150) bond(150,=)
        branch { bond(-150); bond(90); }
      restoreXY(#1)
      bond(-30) branch { bond(-150);
                         bond(-30); }
      bond(30)
      branch{ bond(90,s,S) atom("$\ominus$"); }
      bond(-30) atom("CO$_2$CH$_3$",L);
 }
}
bracket()

arrow(-90,10){}
arrow(-90,10){ text(T,L){formula(C,C){atom("KOH")}}}

formula(T,B,"\textit{trans}-Chrysanthemums""aure",V,24)
{ ring(,,H,,3,90)
 { 1: bond(r,<.) atom("COOH",L);
   2: bond(150,<<) bond(-150,=) branch{ bond(-90); bond(150); };
   0: bond(t);
   0: bond(b);
 }
}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[joinv1]
set("rArrowExtend",18)
joinv(2,B)
{ joinv(2,B)
 { formula(T,B)
   { bond(30,=; -30; 30)
     branch { bond(150);  bond(30) atom("OH",L); } bond(-30)
   }
   arrow(-90){ text(T,L){formula(C,C){atom("HBr")}}}
   formula(T,B)
   { atom("Br") bond(30; -30; 30,=)
     branch { bond(90); } bond(-30)
   };

   formula(T,B,"Tosylchlorid",V,24)
   { ring(){ 2: bond(r); 5: bond(r) atom("SO$_2$Cl",L); }
   }
   arrow(-90)
   {  text(T,L){formula(C,C){atom("NaOH")}}
      text(B,L){formula(C,C){atom("Zn")}}
   }
   formula(T,B)
   { ring(){ 2: bond(r); 5: bond(r) atom("SO$_2$Na",L); }
   };
 }
 arrow(-90){} % 80%

 formula(T,B)
 { ring(){ 2: bond(r);
           5: bond(r) atom("SO$_2$",L,R) bond(30; -30; 30,=)
              branch{bond(90);} bond(-30); }
 };

 formula(T,B,"3-Methylbutens""aure",V,24)
 { bond(30) branch{ bond(90); } bond(-30,=; 30) atom("COOH",L)
 }
 arrow(-90){ text(T,L){formula(C,C){atom("CH$_3$OH")}}}
 formula(T,B)
 { bond(30) branch{ bond(90); } bond(-30,=; 30) atom("CO$_2$CH$_3$",L)
 };
}

arrow(-90){ text(T,L){formula(C,C){atom("NaOCH$_3$")}}}

formula(T,B)
{ ring()
 { 3: bond(r);
   0: bond(r) atom("S")
      branch { bond(180,=C) atom("O");
               bond(0,=C) atom("O"); }
      bond(-90)
      saveXY(#1)
      bond(-150) bond(150,=)
        branch { bond(-150); bond(90); }
      restoreXY(#1)
      bond(-30) branch { bond(-150);
                         bond(-30); }
      bond(30)
      branch{ bond(90,s,S) atom("$\ominus$"); }
      bond(-30) atom("CO$_2$CH$_3$",L);
 }
}
bracket()

arrow(-90,10){}
arrow(-90,10){ text(T,L){formula(C,C){atom("KOH")}}}

formula(T,B,"\textit{trans}-Chrysanthemums""aure",V,24)
{ ring(,,H,,3,90)
 { 1: bond(r,<.) atom("COOH",L);
   2: bond(150,<<) bond(-150,=) branch{ bond(-90); bond(150); };
   0: bond(t);
   0: bond(b);
 }
}
\end{chemistry}
\caption{Synthese der Chrysanthemums"aure, gesetzt mit \texttt{joinv}.
\label{fig:joinva}}
\end{schema}

Bei Bedarf k"onnen Sie auch mehrfach geschachtelte gemischte Zusammenf"uhrungen
formulieren, zum Beispiel als horizontales Schema, das ein vertikales Teilschema
enth"alt (Schema~\ref{fig:joinhva}):
\begin{prog}
joinh(2,R)
{ joinv(2,B)
 { formula(T,B,"Anilin",V,24)
   { ring(){ 4: bond(r) atom("N",C,R) atom("H$_2$",L);} }
   ;
   formula(T,B,"Salpetrige S""aure",V,24)
   { atom("HNO$_2$") }
   ;
 }
 arrow(-90,12,-){} nospace arrow(){}
 formula(L,R,"Diazoniumion")
 { ring(){ 4: bond(r) atom("N",C,R) atom("$_2^+$",L);} }
 ;
 formula(L,R)
 { ring(){ 5: bond(r) atom("N",C,R) atom("H$_2$",L);} }
 ;
}
arrow(){}
formula(L,R,"p-Amino-diazobenzen",HR,24)
{ ring(){ 4: bond(r) atom("N=N",L,R) bond(r/)
            ring(,0,,,,r)
            { 3: bond(r) atom("N",C,R) atom("H$_2$",L);};
       }
}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[joinhv]
joinh(2,R)
{ joinv(2,B)
 { formula(T,B,"Anilin",V,24)
   { ring(){ 4: bond(r) atom("N",C,R) atom("H$_2$",L);} }
   ;
   formula(T,B,"Salpetrige S""aure",V,24)
   { atom("HNO$_2$") }
   ;
 }
 arrow(-90,12,-){} nospace arrow(){}
 formula(L,R,"Diazoniumion")
 { ring(){ 4: bond(r) atom("N",C,R) atom("$_2^+$",L);} }
 ;
 formula(L,R)
 { ring(){ 5: bond(r) atom("N",C,R) atom("H$_2$",L);} }
 ;
}
arrow(){}
formula(L,R,"p-Amino-diazobenzen",HR,24)
{ ring(){ 4: bond(r) atom("N=N",L,R) bond(r/)
            ring(,0,,,,r)
            { 3: bond(r) atom("N",C,R) atom("H$_2$",L);};
       }
}
\end{chemistry}
\caption{Synthese einer Diazoverbindung. Horizontale und vertikale Zusammenf"ugung
gemischt.\label{fig:joinhva}}
\end{fullpage}
\end{schema}

Das Pendant mit vertauschten Rollen ist ein vertikales Schema mit horizontalem Anteil
(Schema~\ref{fig:joinvha}):
\begin{prog}
\begin{chemistry}[joinvh]
joinv(2,T)
{ joinh(2,L)
 { formula(L,R,"Anilin")
   { ring(){ 4: bond(r) atom("N",C,R) atom("H$_2$",L);} }
   ;
   formula(L,R,"Salpetrige S""aure")
   { atom("HNO$_2$") }
   ;
 }
 arrow(,12,-){} nospace arrow(-90){}
 formula(T,B,"Diazoniumion",V,24)
 { ring(){ 4: bond(r) atom("N",C,R) atom("$_2^+$",L);} }
 ;
 formula(T,B,"Anilin",V,24)
 { ring(){ 5: bond(r) atom("N",C,R) atom("H$_2$",L);} }
 ;
}
arrow(-90){}
formula(T,B,"p-Amino-diazobenzen",V,24)
{ ring(){ 4: bond(r) atom("N=N",L,R) bond(r/)
            ring(,0,,,,r)
            { 3: bond(r) atom("N",C,R) atom("H$_2$",L);};
       }
}
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[joinvh]
joinv(2,T)
{ joinh(2,L)
 { formula(L,R,"Anilin")
   { ring(){ 4: bond(r) atom("N",C,R) atom("H$_2$",L);} }
   ;
   formula(L,R,"Salpetrige S""aure")
   { atom("HNO$_2$") }
   ;
 }
 arrow(,12,-){} nospace arrow(-90){}
 formula(T,B,"Diazoniumion",V,24)
 { ring(){ 4: bond(r) atom("N",C,R) atom("$_2^+$",L);} }
 ;
 formula(T,B,"Anilin",V,24)
 { ring(){ 5: bond(r) atom("N",C,R) atom("H$_2$",L);} }
 ;
}
arrow(-90){}
formula(T,B,"p-Amino-diazobenzen",V,24)
{ ring(){ 4: bond(r) atom("N=N",L,R) bond(r/)
            ring(,0,,,,r)
            { 3: bond(r) atom("N",C,R) atom("H$_2$",L);};
       }
}
\end{chemistry}
\caption{Gemischte \texttt{joinv}/\texttt{joinh}-Befehle.\label{fig:joinvha}}
\end{schema}


\subsection{Mischung der Grundelemente}
Es ist m"oglich, die bislang vorgestellten M"oglichkeiten zum Satz komplexer Formeleinheiten
(mehrzeilige Bl"ocke und Zusammenf"uhrungen) miteinander zu mischen. Die homogene
Mischung der Zusammenf"uhrung wurde bereits vorgestellt, hier soll gezeigt werden, wie
eine Zusammenf"uhrung zu Beginn eines einzeiligen \verb+multiline+"=Rumpfes
eingebettet wird (Schema~\ref{fig:joinhml}):
\begin{prog}
\begin{chemistry}[joinhml]
multiline(1)
{ joinh(2,L)
 { formula(L,R,"Anilin")
   { ring(){ 4: bond(r) atom("N",C,R) atom("H$_2$",L);} }
   ;
   formula(L,R,"Salpetrige S""aure")
   { atom("HNO$_2$") }
   ;
 }
 arrow(){}
 formula(L,R,"Diazoniumion")
 { ring(){ 4: bond(r) atom("N",C,R) atom("$_2^+$",L);} }

 arrow()
 { text(T,L){formula(L,R)
   { ring(){ 5: bond(r) atom("N",C,R) atom("H$_2$",L);} } } }

 formula(L,R,"\shortstack{p-Amino-\\ diazobenzen}")
 { ring(){ 4: bond(r) atom("N=N",L,R) bond(r/)
              ring(,0,,,,r)
              { 3: bond(r) atom("N",C,R) atom("H$_2$",L);};
         }
 }
;
}
\end{chemistry}
\end{prog}
Weitere Zeilen k"onnen bei Bedarf der \verb+multiline+"=Umgebung hinzugef"ugt werden.

\begin{schema}
\begin{fullpage}
\begin{chemistry}[joinhml]
multiline(1)
{ joinh(2,L)
 { formula(L,R,"Anilin")
   { ring(){ 4: bond(r) atom("N",C,R) atom("H$_2$",L);} }
   ;
   formula(L,R,"Salpetrige S""aure")
   { atom("HNO$_2$") }
   ;
 }
 arrow(){}
 formula(L,R,"Diazoniumion")
 { ring(){ 4: bond(r) atom("N",C,R) atom("$_2^+$",L);} }

 arrow()
 { text(T,L){formula(L,R)
   { ring(){ 5: bond(r) atom("N",C,R) atom("H$_2$",L);} } } }

 formula(L,R,"\shortstack{p-Amino-\\ diazobenzen}")
 { ring(){ 4: bond(r) atom("N=N",L,R) bond(r/)
              ring(,0,,,,r)
              { 3: bond(r) atom("N",C,R) atom("H$_2$",L);};
         }
 }
;
}
\end{chemistry}
\caption{Zusammenf"uhrung horizontaler Reaktionsketten und \texttt{multiline} gemischt.
\label{fig:joinhml}}
\end{fullpage}
\end{schema}

%
%
\section{Zyklohexan und Saccharide}\label{sec:zucker}
\index{Ringe}\index{Zucker}\index{Saccharide}\index{Kohlenhydrate}
In der Literatur sind verschiedene Darstellungen von Sacchariden "ublich.
Textformeln
%IK 19.1.2000 begin
in der Darstellung nach \textsc{Fischer}
%IK 19.1.2000 end
k"onnen mit \verb+atom+ gesetzt werden, die Verzweigungen nach
links und rechts sind mit \verb+branch+ nachzubilden:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"D-Arabinose",HR,24)
 {  branch { atom("C",C,R) atom("HO",L); } bond(-90)
    branch { bond(180) atom("HO",R); bond(0) atom("H",L); }
    atom("C",C,C) bond(-90)
    branch { bond(180) atom("H",R); bond(0) atom("OH",L); }
    atom("C",C,C) bond(-90)
    branch { bond(180) atom("H",R); bond(0) atom("OH",L); }
    atom("C",C,C) bond(-90)
    atom("C",C,R) atom("H$_2$OH",L)
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"D-Arabinose",HR,24)
 {  branch { atom("C",C,R) atom("HO",L); } bond(-90)
    branch { bond(180) atom("HO",R); bond(0) atom("H",L); }
    atom("C",C,C) bond(-90)
    branch { bond(180) atom("H",R); bond(0) atom("OH",L); }
    atom("C",C,C) bond(-90)
    branch { bond(180) atom("H",R); bond(0) atom("OH",L); }
    atom("C",C,C) bond(-90)
    atom("C",C,R) atom("H$_2$OH",L)
 }
\end{prog}
\end{minipage}
\end{fullpage}
Bei h"aufigem Einsatz solcher Formeln ist ein Makro empfehlenswert, zum Beispiel:
\begin{prog}
\begin{chemspecial}
define(`TOP_', `branch { atom("C",C,R) atom("$1",L); } bond(-90)')
define(`MID_', `branch { bond(180) atom("$1",R);
                        bond(0) atom("$2",L); }
               atom("C",C,C) bond(-90) ')
define(`BOTTOM_', `atom("C",C,R) atom("$1",L); }')
\end{chemspecial}
\begin{chemistry}
 formula(L,R,"D-Arabinose",HR,24)
 {  TOP_(`HO')
    MID_(`HO', `H')
    MID_(`H', `OH')
    MID_(`H', `OH')
    BOTTOM(`H$_2$OH')
 }
\end{chemistry}
\end{prog}

%IK 19.1.2000 begin
Eine schematische r"aumliche Darstellung (Formel nach \textsc{Hayworth}) \index{Hayworth-Wiedergabe}
\index{Furanosen}\index{F""unfringe}
von Furanosen kann mit dem Ringtyp \verb+furanose+ erreicht werden, eventuell mit Angabe einer
Bindungsliste zur Verst"arkung der perspektivischen Bindungen:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"$\beta$-D-Xylose",HR,24)
 { ring("furanose",0,,L)
   { 0: atom("O");
     1: bond(90) atom("O",C,R) atom("H",L);
     2: bond(-90) atom("O",C,R) atom("H",L);
     3: bond(90) atom("O",C,R) atom("H",L);
     4: bond(90;180) atom("O",C,L) atom("H",R);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"$\beta$-D-Xylose",HR,24)
 { ring("furanose",0,,L)
   { 0: atom("O");
     1: bond(90) atom("O",C,R) atom("H",L);
     2: bond(-90) atom("O",C,R) atom("H",L);
     3: bond(90) atom("O",C,R) atom("H",L);
     4: bond(90;180) atom("O",C,L) atom("H",R);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"$\beta$-D-Xylose",HR,24)
 { ring("furanose",0,1<<2b3>>,L)
   { 0: atom("O");
     1: bond(90) atom("O",C,R) atom("H",L);
     2: bond(-90) atom("O",C,R) atom("H",L);
     3: bond(90) atom("O",C,R) atom("H",L);
     4: bond(90;180) atom("O",C,L) atom("H",R);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"$\beta$-D-Xylose",HR,24)
 { ring("furanose",0,1<<2b3>>,L)
   { 0: atom("O");
     1: bond(90) atom("O",C,R) atom("H",L);
     2: bond(-90) atom("O",C,R) atom("H",L);
     3: bond(90) atom("O",C,R) atom("H",L);
     4: bond(90;180) atom("O",C,L) atom("H",R);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

Innerhalb des Ringes kann die Darstellung von \textit{vic-}Hydroxylgruppen in
\textit{cis}-Stellung aus Platzgr"unden problematisch sein. Sie k"onnen jedoch das
Wasserstoffsymbol mit \TeX-Befehlen n"aher an das Sauerstoffsymbol r"ucken. Damit Teile
des "`O"' nicht "uberdeckt werden, mu"s beim Setzen des "`H"' das L"oschen des
Hintergrundes abgeschaltet werden:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"$\beta$-D-Lyxose",HR,24)
 { ring("furanose",0,,L)
   { 0: atom("O");
     1: bond(90) atom("O",C,R) atom("H",L);
     2: bond(90) atom("O",C,L) atom("H\kern-.2em",R,,0);
     3: bond(90) atom("O",C,R) atom("\kern-.2emH",L,,0);
     4: bond(90;180) atom("O",C,L) atom("H",R);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"$\beta$-D-Lyxose",HR,24)
 { ring("furanose",0,,L)
   { 0: atom("O");
     1: bond(90) atom("O",C,R) atom("H",L);
     2: bond(90) atom("O",C,L) atom("H\kern-.2em",R,,0);
     3: bond(90) atom("O",C,R) atom("\kern-.2emH",L,,0);
     4: bond(90;180) atom("O",C,L) atom("H",R);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}


Furanoseringe k"onnen wie normale Ringe kombiniert werden, um Oligosaccharide aufzubauen.
Im folgenden Beispiel wird der Bindungstyp \verb+~+ verwendet, um ein Anomer zu kennzeichnen:
\index{Bindung!anomere}\index{Anomer}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"D-Xylofuranosyl-(1$\to$4)-$\alpha$-D-arabinose",HR,24)
 { ring("furanose",0,1<<2b3>>,L)
   { 0: atom("O");
     1: bond(0,~) atom("O",C,C) bond(0;-90)
     ring("furanose",4,1<<2b3>>,L)
     { 0: atom("O");
       1: bond(-90) atom("O",C,R) atom("H",L);
       2: bond(90) atom("O",C,L) atom("H",R);
       3: bond(-90) atom("O",C,R) atom("H",L);
     }
     ;
     2: bond(-90) atom("O",C,R) atom("H",L);
     3: bond(90) atom("O",C,R) atom("H",L);
     4: bond(90;180) atom("O",C,L) atom("H",R);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,
 "D-Xylofuranosyl-(1$\to$4)-$\alpha$-D-arabinose",HR,24)
 { ring("furanose",0,1<<2b3>>,L)
   { 0: atom("O");
     1: bond(0,~) atom("O",C,C) bond(0;-90)
     ring("furanose",4,1<<2b3>>,L)
     { 0: atom("O");
       1: bond(-90) atom("O",C,R) atom("H",L);
       2: bond(90) atom("O",C,L) atom("H",R);
       3: bond(-90) atom("O",C,R) atom("H",L);
     }
     ;
     2: bond(-90) atom("O",C,R) atom("H",L);
     3: bond(90) atom("O",C,R) atom("H",L);
     4: bond(90;180) atom("O",C,L) atom("H",R);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

Auch Pyranosen k"onnen in der \textsc{Hayworth}"=Darstellung wiedergegeben werden. Hierzu ist kein
spezieller Ringtyp erforderlich, es kann ein normaler gro"ser Sechsring verwendet werden, eventuell
mit Angabe einer Bindungsliste zur Erh"ohung des r"aumlichen Eindrucks:\index{Pyranosen}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R,"$\alpha$-D-Glucopyranose",HR,24)
{ ring(,,H,L,,0)
 { 5: atom("O");
   0: bond(-90) atom("O",C,R) atom("H",L);
   1: bond(-90) atom("O",C,R) atom("H",L);
   2: bond(90) atom("O",C,R) atom("H",L);
   3: bond(-90) atom("O",C,L) atom("H",R);
   4: bond(90) atom("C",C,R) atom("H$_2$OH",L);
 }
}
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(L,R,"$\alpha$-D-Glucopyranose",HR,24)
{ ring(,,H,L,,0)
 { 5: atom("O");
   0: bond(-90) atom("O",C,R) atom("H",L);
   1: bond(-90) atom("O",C,R) atom("H",L);
   2: bond(90) atom("O",C,R) atom("H",L);
   3: bond(-90) atom("O",C,L) atom("H",R);
   4: bond(90) atom("C",C,R) atom("H$_2$OH",L);
 }
}
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R,"$\alpha$-D-Glucopyranose",HR,24)
{ ring(,,H0<<1b2>>,L,,0)
 { 5: atom("O");
   0: bond(-90) atom("O",C,R) atom("H",L);
   1: bond(-90) atom("O",C,R) atom("H",L);
   2: bond(90) atom("O",C,R) atom("H",L);
   3: bond(-90) atom("O",C,L) atom("H",R);
   4: bond(90) atom("C",C,R) atom("H$_2$OH",L);
 }
}
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(L,R,"$\alpha$-D-Glucopyranose",HR,24)
{ ring(,,H0<<1b2>>,L,,0)
 { 5: atom("O");
   0: bond(-90) atom("O",C,R) atom("H",L);
   1: bond(-90) atom("O",C,R) atom("H",L);
   2: bond(90) atom("O",C,R) atom("H",L);
   3: bond(-90) atom("O",C,L) atom("H",R);
   4: bond(90) atom("C",C,R) atom("H$_2$OH",L);
 }
}
\end{prog}
\end{minipage}\end{fullpage}
%IK 19.1.2000 end

%IK 24.1.2000 begin
Mit Hilfe von wilden Linien k"onnen Derivate der Saccaride gesetzt werden, wie die
1,2-3,4-Di-O-\textit{sec}-butyliden-$\beta$-D-\textit{arabino}-pentopyranose zeigt:

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R)
{ ring(,,H0t1t2t,L,,0)
 { 5: atom("O");
   1: bond(90) atom("O") saveXY(#1);
   0: bond(90) atom("O") bond(20,,L)
        branch{bond(-30); bond(90);} bond(#1);
   2: bond(-90) atom("O") saveXY(#2);
   3: bond(-90) atom("O") bond(-120,,L)
        branch{bond(150); bond(-90);} bond(#2);
 }
}
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(L,R)
{ ring(,,H0t1t2t,L,,0)
 { 5: atom("O");
   1: bond(90) atom("O") saveXY(#1);
   0: bond(90) atom("O") bond(20,,L)
        branch{bond(-30); bond(90);} bond(#1);
   2: bond(-90) atom("O") saveXY(#2);
   3: bond(-90) atom("O") bond(-120,,L)
        branch{bond(150); bond(-90);} bond(#2);
 }
}
\end{prog}
\end{minipage}\end{fullpage}
%IK 24.1.2000 end

F"ur die genauere Darstellung der sterischen Verh"altnisse der Pyranosen kann der
Ringtyp \verb+chair+ genutzt werden, der einen Zyklohexanring in
Stereodarstellung ("`Sesselform"') zeigt.
Hilfreich sind hierbei die symbolischen Winkelangaben \verb+t+ und \verb+b+
f"ur axiale und "aquatoriale  Substituenten. Aus Platzgr"unden mu"s die
Hydroxylgruppe an Position 5 um 20\textdegree{} aus ihrer normalen \verb+t+-Position
gedreht werden:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring("chair",,,L,-1)
   { 0: bond(b) atom("O",C,L) atom("H",R);
     5: bond(20+t) atom("O",C,L) atom("H",R);
     4: bond(b) atom("O",C,R) atom("H",L);
     3: bond(b) atom("O",C,R) atom("H",L);
     2: atom("O");
     1: bond(t; t-) atom("OH",L);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring("chair",,,L,-1)
   { 0: bond(b) atom("O",C,L) atom("H",R);
     5: bond(20+t) atom("O",C,L) atom("H",R);
     4: bond(b) atom("O",C,R) atom("H",L);
     3: bond(b) atom("O",C,R) atom("H",L);
     2: atom("O");
     1: bond(t; t-) atom("OH",L);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring("chair",,,L)
   { 0: bond(b) atom("HO",R);
     5: bond(t) atom("HO",R);
     4: bond(b) atom("O",C,L) atom("H",R);
     3: bond(b) atom("O",C,R) atom("H",L);
     2: atom("O");
     1: bond(t; t-) atom("OH",L);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring("chair",,,L)
   { 0: bond(b) atom("HO",R);
     5: bond(t) atom("HO",R);
     4: bond(b) atom("O",C,L) atom("H",R);
     3: bond(b) atom("O",C,R) atom("H",L);
     2: atom("O");
     1: bond(t; t-) atom("OH",L);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

Das Zyklohexanger"ust wurde so konstruiert, da"s die 1$\to$6-glykosidische
Bindung von Di- und Polysacchariden mit mit einem \verb+bond+"=Befehl
doppelt-normaler L"ange (\verb+NN+) oder --~mit Ethersauerstoff~--
zwei aufeinanderfolgenden Bindungen normaler L"ange erzeugt werden kann.
Der zweite Ring liegt dann auf der gleichen H"ohe wie der erste,
soda"s Oligosaccharide horizontal verlaufen:
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring("chair",,,L)
   { 2: atom("O");
     3: bond(t,,L) atom("O") bond(t,,L)
        ring("chair",,,L){ 2: atom("O"); };
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring("chair",,,L)
   { 2: atom("O");
     3: bond(t,,L) atom("O") bond(t,,L)
        ring("chair",,,L){ 2: atom("O"); };
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

Durch die Symmetrie des \verb+chair+"=Ger"ustes k"onnen mehrere Ringe aneinander
gesetzt werden, um zum Beispiel ein Steroidger"ust r"aumlich zu
veranschaulichen. F"ur den f"unfgliedrigen D-Ring
m"ussen Sie eine "`wilde"' Verbindungslinie ziehen:
\index{Steroide}\index{Zyklopentan}\index{Stereodarstellung!Zyklopentan}
\index{Zyklopentan!Stereodarstellung}
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"3-$\alpha$-Hydroxysteran",HR,24)
 { ring("chair",,,L,-1)
   { 0: bond(b)
        atom("O",C,L) atom("H",R);
     vertex("chair",3,0,3-4-5-,-1)
     { vertex("chair",2,5,3-4-5-,-1)
       { 3: bond(b,,L) saveXY(#1);
         4: bond(t,,L; -t|,,L; #1);};
     };
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"3-$\alpha$-Hydroxysteran",HR,24)
 { ring("chair",,,L,-1)
   { 0: bond(b)
        atom("O",C,L) atom("H",R);
        vertex("chair",3,0,3-4-5-,-1)
        { vertex("chair",2,5,3-4-5-,-1)
          { 3: bond(b,,L) saveXY(#1);
            4: bond(t,,L; -t|,,L; #1);
          };
        };
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"3-$\beta$-Hydroxysteran",HR,24)
 { ring("chair",,,L,-1)
   { 0: bond(t)
        atom("O",C,L) atom("H",R);
     vertex("chair",3,0,3-4-5-,-1)
     { vertex("chair",2,5,3-4-5-,-1)
       { 3: bond(b,,L) saveXY(#1);
         4: bond(t,,L; -t|,,L; #1);};
     };
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"3-$\beta$-Hydroxysteran",HR,24)
 { ring("chair",,,L,-1)
   { 0: bond(t)
        atom("O",C,L) atom("H",R);
        vertex("chair",3,0,3-4-5-,-1)
        { vertex("chair",2,5,3-4-5-,-1)
          { 3: bond(b,,L) saveXY(#1);
            4: bond(t,,L; -t|,,L; #1);
          };
        };
   }
 }
\end{prog}
\end{minipage}\end{fullpage}


Im Falle des Valerans ergibt sich durch das Verschmelzen zweier Ringkanten mit normalerweise
unterschiedlicher L"ange eine kleine Unsch"onheit, da der eine Ring entsprechend
vergr"o"sert werden mu"s, um die Ringkanten anzugleichen:\index{Valeran}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,4,H){}
   ring(,2,H){ 1: bond(t,o);
               2: bond(b,o);
               5: bond(r,t) branch { bond(r+); bond(r-); };
             }
 }
 formula(L,R,"Valeran",HR,24)
 { ring("chair",,,,-1)
   { 3: bond(b);
     vertex("chair",3,0,5p)
     { 4: bond(0) branch{bond(0++); bond(0+-);};
     };
     4: bond(-90);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,4,H){}
   ring(,2,H){ 1: bond(t,o);
               2: bond(b,o);
               5: bond(r,t) branch { bond(r+); bond(r-); }; }
 }

 formula(L,R,"Valeran",HR,24)
 { ring("chair",,,,-1)
   { 3: bond(b);
     vertex("chair",3,0,5p)
     { 4: bond(0) branch{bond(0++); bond(0+-);}; };
     4: bond(-90); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Sie k"onnen das Formelbild durch manuelle Bearbeitung etwas verbessern:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Valeran",HR,24)
 { ring("chair",,,,-1)
   { 3: bond(b);
     4: saveXY(#1);
     3: bond(t;30;-120)
        saveXY(#2) bond(-90,p; #1)
        restoreXY(#2) bond(0) branch{bond(0++); bond(0+-);};
     4: bond(-90);
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Valeran",HR,24)
 { ring("chair",,,,-1)
   { 3: bond(b);
     4: saveXY(#1);
     3: bond(t; 30; -120)
        saveXY(#2) bond(-90,p; #1)
        restoreXY(#2) bond(0) branch{bond(0++); bond(0+-);};
     4: bond(-90); }
 }
\end{prog}
\end{minipage}
\end{fullpage}

Der variable Parameter des Zyklohexanger"ustes erlaubt es, zwischen den
beiden denkbaren Hauptkonformeren auszuw"ahlen. Schema~\ref{fig:conf} kann
damit den Verlauf einer Eliminierungsreaktion erkl"aren:
\begin{prog}
\begin{chemistry}[conf]
 formula(L,R,"3-Menthyltosylat",HA,36)
 { ring("chair",,,L,-1)
   { 0: bond(t) branch{ bond(t-); bond(t+);} ;
     0: bond(b) atom("H");
     5: bond(130,,L) atom("O",C,R) atom("Tos",L);
     5: bond(b) atom("H");
     4: bond(t) atom("H",L);
     3: bond(b); }
 }

 arrow(,,<=>){}

 formula(L,BR)
 { ring("chair",,,L)
   { 0: bond(t) branch{ bond(t+); bond(t-);} ;
     0: bond(b) atom("H");
     2: bond(t) atom("H");
     3: bond(b);
     5: bond(b) atom("O",C,R) atom("Tos",L);
     5: bond(t) atom("H"); }
 }
 savecontext(#1)

 arrow(-45,,-|>){}
 formula(TL,C,"p-Menth-3-en",HA,54)
 { ring(,,H5=){ 0: bond(r) branch { bond(r-); bond(r+); };
                3: bond(r,<.); }
 }

 setcontext(#1,BL)
 arrow(-135,,->){ text(T,L){ formula(C,C){atom("E$_2$") } } }
 formula(TR,C,"p-Menth-2-en",HA,54)
 { ring(,,H4=){ 0: bond(r) branch { bond(r-); bond(r+); };
                3: bond(r,<.); }
 }
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[conf]
 formula(L,R,"3-Menthyltosylat",HA,36)
 { ring("chair",,,L,-1)
   { 0: bond(t) branch{ bond(t-); bond(t+);} ;
     0: bond(b) atom("H");
     5: bond(130,,L) atom("O",C,R) atom("Tos",L);
     5: bond(b) atom("H");
     4: bond(t) atom("H",L);
     3: bond(b);
   }
 }

 arrow(,,<=>){}

 formula(L,BR)
 { ring("chair",,,L)
   { 0: bond(t) branch{ bond(t+); bond(t-);} ;
     0: bond(b) atom("H");
     2: bond(t) atom("H");
     3: bond(b);
     5: bond(b) atom("O",C,R) atom("Tos",L);   %// 20-01-2000 IK
     5: bond(t) atom("H");
   }
 }
 savecontext(#1)

 arrow(-45,,-|>){}
 formula(TL,C,"p-Menth-3-en",HA,54)
 { ring(,,H5=){ 0: bond(r) branch { bond(r-); bond(r+); };
                3: bond(r,<.);
              }
 }

 setcontext(#1,BL)
 arrow(-135,,->){ text(T,L){ formula(C,C){atom("E$_2$") } } }
 formula(TR,C,"p-Menth-2-en",HA,54)
 { ring(,,H4=){ 0: bond(r) branch { bond(r-); bond(r+); };
                3: bond(r,<.);
              }
 }
\end{chemistry}
\caption{Das Gleichgewicht zwischen den beiden Hauptkonformeren des
Zyklohexans nutzt die verschiedenen Konformeren des Zyklohexans.\label{fig:conf}}
\end{schema}


%
%
\section{"Anderung von Parametern}\label{sec:param}
Als Beispiel soll im Schema~\ref{fig:parama} der Hauptreaktionsweg durch
verst"arkte Linien hervorgehoben werden. Die L"osung besteht darin, den
Programmcode f"ur diesen Weg in ein \verb+save+/\verb+restore+"=Befehlspaar
einzuschachteln und innerhalb dieser Klammer den Parameter \verb+$rLW+ f"ur
die Linienst"arke zu "andern. Der seitlich abzweigende Nebenweg darf nicht
innerhalb dieser Klammerung notiert werden:
\begin{prog}
\begin{chemistry}[param1]
 save(#1)
 set("rLW", 1.5)
 formula(L,BR)
 { ring(){ 3: bond(r) atom("O",C,R) atom("H",L); } }
 savecontext(#1)
 arrow(-45){}
 formula(L,R)
 { ring(){ 3: bond(r) atom("O",C,R) atom("H",L);
           0: bond(r) atom("N=N",L,R) bond(0)
              ring(,3,,,,r){}; }
 }

 restore(#1)

 setcontext(#1,BL)
 arrow(-135){}
 formula(R,R)
 { ring(){ 3: bond(r) atom("O",C,R) atom("H",L);
           4: bond(r) atom("N",C,R) atom("=N",L,R) bond(0)
              ring(,3,,,,r){}; }
 }
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[param1]
 save(#1)
 set("rLW", 1.5)
 formula(L,BR)
 { ring(){ 3: bond(r) atom("O",C,R) atom("H",L);
         }
 }
 savecontext(#1)
 arrow(-45){}
 formula(L,R)
 { ring(){ 3: bond(r) atom("O",C,R) atom("H",L);
           0: bond(r) atom("N",C,R) atom("=N",L,R) bond(0) %// 20-01-2000 IK
              ring(,3,,,,r){};
         }
 }

 restore(#1)

 setcontext(#1,BL)
 arrow(-135){}
 formula(R,R)
 { ring(){ 3: bond(r) atom("O",C,R) atom("H",L);
           4: bond(r) atom("N=N",L,R) bond(0)
              ring(,3,,,,r){};
         }
 }
\end{chemistry}
\caption{Hauptreaktionen k"onnen durch h"ohere Linienbreite von Nebenwegen
abgehoben werden. Die Linienbreite wird mit \texttt{set} eingestellt.
\label{fig:parama}}
\end{schema}

Wollen Sie alle Parameter mit einem gleichen Faktor multiplizieren,
k"onnen Sie anstelle mehrerer \verb+set+"=Befehle auch $\to$\verb+scale+
einsetzen.


%
%
\section{Elektronendarstellungen}\label{sec:emove}
%IK 1.2.2000 begin
Ein wesentlicher Bestandteil vor allem mechanistischer Formeldarstellungen ist
die Wiedergabe der Elektronenkonfigurationen und der Verschiebungen von Elektronen.

\subsection{Elektronenkonfiguration}\index{Elektronen!Konfiguration}
Die Wiedergabe der Elektronenkonfiguration an einem Atom ist zwar nicht unmittelbarer
Bestandteil von OCHEM, sie l"a"st sich jedoch mit dem \LaTeX-Paket \texttt{echem.sty},
das in der OCHEM-Distribution enthalten ist, erreichen.
Es enth"alt die beiden Makros \verb+\vd{<Atom>}+ und \verb+\vdd{<Atom>}+, um neben
dem genannten Atom ein resp. zwei Elektronen vertikal "ubereinanderzustellen. Die
Elektronen werden durch Punkte symbolisiert. Das Atomsymbol dient nur zur Festlegung
des Raumes, um den die Elektronen herum angeordnet werden sollen, es wird selber nicht
dargestellt und mu"s, wie die Beispiele zeigen, nach dem Makro folgen. Je nach der
Reihenfolge des Atoms und der Makros erhalten Sie die Elektronen vor oder nach dem
Atomsymbol:

\begin{minipage}{.5\textwidth}
\vd{Li}Li,
Li\vd{Li},
\vdd{Be}Be,
Be\vdd{Be},
\vdd{B}B\vd{B}
\end{minipage}\hfil\begin{minipage}{.5\textwidth}
\begin{prog}
\vd{Li}Li,
Li\vd{Li},
\vdd{Be}Be,
Be\vdd{Be},
\vdd{B}B\vd{B}
\end{prog}
\end{minipage}

F"ur eine horizontale Anordnung stehen vier Makros zur Verf"ugung: f"ur Elektronen oberhalb
des Atomsymbols die Makros \verb+\hdu{<Atom>}+ und \verb+\hddu{<Atom>}+, f"ur
Elektronen unterhalb des Atomsymbols die Makros \verb+\hdl{<Atom>}+ und \verb+\hddl{<Atom>}+:

\begin{minipage}{.5\textwidth}
\hdu{Li}Li,
\hdl{Li}Li,
\hddu{C}\hddl{C}C
\end{minipage}\hfil\begin{minipage}{.5\textwidth}
\begin{prog}
\hdu{Li}Li,
\hdl{Li}Li,
\hddu{C}\hddl{C}C
\end{prog}
\end{minipage}

F"ur die Einbettung in eine OCHEM-Formel mu"s das Paket in einer \verb+package+"=Anweisung
innerhalb einer \verb+chemspecial+"=Umgebung sowie im Dokument selber geladen werden:
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}[elekt]
formula(L,R)
{
  bond(30;-30;30)
  branch { bond(90,=C)
           atom("\vdd{O}O\vdd{O}");
         }
  bond(-30;30;-30)
  atom("\hdl[\echhbar]{O}\hdu[\echhbar]{O}O",L,R)
  bond(30;-30)
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{.5\textwidth}
\begin{prog}
\usepackage{ochem,echem}
\begin{chemspecial}
package("echem")
\end{chemspecial}
..
\begin{chemistry}[elekt]
formula(L,R)
{
  bond(30;-30;30)
  branch { bond(90,=C)
           atom("\vdd{O}O\vdd{O}");
         }
  bond(-30;30;-30)
  atom("\hdl[\echhbar]{O}\hdu[\echhbar]{O}O",L,R)
  bond(30;-30)
}
\end{chemistry}
\end{prog}
\end{minipage}\end{fullpage}
%IK 1.2.2000 end

\subsection{Elektronenverschiebungen}\index{Elektronen!Verschiebung}
Als wichtiges Detail bei mechanistischen Betrachtungen treten kleine Pfeile
innerhalb von Formeln oder -schemata auf, die die Wanderung von Elektronen
veranschaulichen. Zwar ist dies fast ein Anwendungsfall f"ur chemische
CAD-Programme, ich habe jedoch versucht, einen sinnvollen Befehl f"ur genau
diese Elektronenverschiebungen zu implementieren. Da Start- und Zielpunkt
nicht einfach durch eine Gerade verbunden werden k"onnen, sind einige Parameter
zur genauen Beschreibung des Bogens erforderlich. Grundlage des Verschiebungspfeils
ist ein kubischer Spline, der neben Start- und Zielpunkt durch die Winkel,
die die Tangenten an diesen beiden Punkten bilden, sowie zwei Kontrollpunkte
beschrieben wird. Da die Aus- und Einfallswinkel meist feststehen, sind es
vor allem die Kontrollpunkte (beziehungsweise deren Entfernung von den
Zielpunkten), mit denen der Kurvenverlauf gesteuert werden kann. Hier ist jedoch
Erfahrung und Gef"uhl n"otig, um nicht zu verzweifeln, weil die Kurve immer
falsch geknickt ist :-)

Da die Zielpunkte der Verschiebungsbewegung meist in der Mitte von Bindungen
liegt, die Bindungen selber aber in ganzer L"ange dargestellt werden sollen,
kann zum Speichern dieser mittleren Position, vom Startpunkt der Bindung ausgehend,
\verb+saveXY+ in seiner erweiterten Syntax mit Winkel und L"angenangabe eingesetzt
werden. Diese Syntax gestattet es, die Koordinaten des Punktes zu speichern,
der erreicht w"urde, z"oge man vom aktuellen Punkt eine Bindung mit dem angegebenen
Winkel und der L"ange. Da der aktuelle Punkt dabei nicht verschoben wird,
kann sofort nach \verb+saveXY+ ein \verb+bond+"=Kommando folgen.
Bei \verb+saveXY+ kommen entsprechend der Mittelposition h"aufig die
Kleinbuchstaben als L"angenangaben (\verb+n+) in Betracht. Das Beispiel zeigt,
wie Sie eine Mittelposition samt Bindung speichern und zeichnen:
\begin{prog}
saveXY(#1,30,n)  % Winkel 30 Grad, halbe Normallaenge
bond(30)        % Winkel 30 Grad, volle Normallaenge
\end{prog}
Die Nummern, unter der die Punkte gesichert werden, sind
Eingabeparameter f"ur \verb+emove+. Start- und Zielpunkt k"onnen innerhalb einer
Formel liegen, m"ussen aber nicht, entscheidend ist in jedem Falle der aktuell
unter der betreffenden Nummer gespeicherte Punkt (hei"st also, da"s Sie Ihre
\verb+saveXY+"=Kommandos konsequent fortlaufend numerieren sollten).

Betrachten Sie als Beispiel den kettenverl"angernden Schritt der
Isoprenoid-Biosynthese in Schema~\ref{fig:emovetut}. Es werden vier Punkte
gespeichert entsprechend einer intramolekularen Verschiebung und einer
intermolekularen Elektronenbewegung:
\begin{prog}
 formula(L,R)
 { bond(30) branch { bond(90); } bond(-30,=; 30)
   saveXY(#2,-30,n) bond(-30)
   atom("O",L,R) saveXY(#4,0,n) bond(0) atom("PO(OH)$_2$",L)
 }
 emove(#2,-150,20,#4,-90,20)
 space(R)
 formula(L,R)
 { saveXY(#3,30,n)
   bond(30,=) branch { bond(90);} bond(-30; 30; -30)
   atom("OPO(OH)$_2$",L)
 }
 emove(#3,150,20,#2,30,20)

 arrow(){}

 formula(L,R)
 { bond(30) branch { bond(90); } bond(-30,=; 30; -30; 30)
   branch { bond(90); }
   bond(-30,=; 30; -30) atom("OPO(OH)$_2$",L)
 }
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}
 formula(L,R)
 { bond(30) branch { bond(90); } bond(-30,=; 30)
   saveXY(#2,-30,n) bond(-30)
   atom("O",L,R) saveXY(#4,0,n) bond(0) atom("PO(OH)$_2$",L)
 }
 emove(#2,-150,20,#4,-90,20)
 space(R)
 formula(L,R)
 { saveXY(#3,30,n)
   bond(30,=) branch { bond(90);} bond(-30; 30; -30)
   atom("OPO(OH)$_2$",L)
 }
 emove(#3,150,20,#2,30,20)

 arrow(){}

 formula(L,R)
 { bond(30) branch { bond(90); } bond(-30,=; 30; -30; 30)
   branch { bond(90); }
   bond(-30,=; 30; -30) atom("OPO(OH)$_2$",L)
 }
\end{chemistry}
\caption{Der kettenverl"angernde Schritt der Biosynthese der Isoprenoide wird
durch Elektronenverschiebungen verdeutlicht.\label{fig:emovetut}}
\end{fullpage}
\end{schema}

Ein weiteres Beispiel, die Friedel-Crafts-Acylierung, ist in Schema~\ref{fig:emovetutb}
dargestellt. Auch hier werden intra- und intermolekulare Verschiebungen
illustriert. Die \verb+shiftXY+"=Befehle dienen dazu, die drei Reaktanden in der
richtigen relativen Lage zu positionieren. Durch die Einschachtelung in den Rumpf
von \verb+multiline+ kann der anschlie"sende Reaktionspfeil auf dieses
Formeltriplet als Einheit bezogen werden:
\begin{prog}
 multiline(1)
 { formula(C,C)
   { ring(,,H1=3=5=){ 3: saveXY(#1,-30,n); }
   }
   shiftXY(50,30)
   formula(C,C)
   { bond(30) saveXY(#2)
     branch { bond(90,=C) atom("O"); }
     saveXY(#3,-30,n) bond(-30) atom("Cl");
   }
   shiftXY(0,-30)
   formula(C,C)
   { saveXY(#4) atom("Al")
     branch{ bond(-45,,L) atom("Cl");
             bond(-90,,L) atom("Cl");
             bond(-135,,L) atom("Cl"); }
   }
   emove(#1,80,10,#2,150,15)
   emove(#3,-120,10,#4,90,10)
   ;
 }

 arrow(){}

 formula(L,R)
 { ring(,,H1=5=)
   { 1: saveXY(#5,90,n);
     3: saveXY(#6) bond(90,s,n) atom("$\oplus$");
     4: bond(r) branch{ bond(r+,=C) atom("O"); }
        bond(r-);
     4: bond(t) atom("H");
   }
 }
 emove(#5,0,10,#6,-90,10)
 bracket([)

 arrow(0,10,<->){}
\end{prog}

\begin{schema}
\begin{chemistry}
 multiline(1)
 { formula(C,C)
   { ring(,,H1=3=5=){ 3: saveXY(#1,-30,n); }
   }
   shiftXY(50,30)
   formula(C,C)
   { bond(30) saveXY(#2)
     branch { bond(90,=C) atom("O");        }
       saveXY(#3,-30,n) bond(-30) atom("Cl")
   }
   shiftXY(0,-30)
   formula(C,C)
   { saveXY(#4) atom("Al")
     branch{ bond(-45,,L) atom("Cl");
             bond(-90,,L) atom("Cl");
             bond(-135,,L) atom("Cl"); }
   }
   emove(#1,80,10,#2,150,15)
   emove(#3,-120,10,#4,90,10)
   ;
 }

 arrow(){}

 formula(L,R)
 { ring(,,H1=5=)
   { 1: saveXY(#5,90,n);
     3: saveXY(#6) bond(90,s,n) atom("$\oplus$");
     4: bond(r) branch{ bond(r+,=C) atom("O");}
        bond(r-);
     4: bond(t) atom("H");
   }
 }
 emove(#5,0,10,#6,-90,10)
 bracket([)

 arrow(0,10,<->){}
\end{chemistry}
\caption{Die Elektronenverschiebung zeigt deutlich den Verlauf der
Friedel"=Crafts"=Acylierung eines Aromaten.\label{fig:emovetutb}}
\end{schema}

%
%
\section{Beispiele}
Sie haben nun alle Elemente, die in Formeln verwendet werden k"onnen, kennengelernt.
Zum Abschlu"s des Tutorials werden sie kombiniert, um zwei komplexe
Reaktionsschemata zu programmieren.

\subsection{Nylonsynthese}
Schema~\ref{fig:nylon} zeigt die Darstellung der Ausgangsprodukte f"ur die
Nylon/Perlonsynthese.
Die Idee dahinter ist, eine m"oglichst lange Folge von Formeln und Pfeilen zu
finden, die einfach beschrieben werden kann und die Zahl der ben"otigten Verzweigunsstellen
minimiert. Hiermit kann die "Ubersicht gewahrt werden. Ein anderer Ansatz
k"onnte sein, die zusammenh"angenden Reaktionsstr"ange nach chemischen
Gesichtspunkten zusammenzufassen, was im vorliegenden Falle jedoch unm"oglich
ist, da \textit{zwei} Startpunkte existieren: einer beim Benzen und ein
anderer beim Butadien. Es w"are nicht m"oglich, die beiden Str"ange in
der gezeigten Anordnung zu einer gemeinsamen Formel zu f"uhren. (Eine
solche Zusammenfassung kann von \verb+joinh+ oder \verb+joinv+ geleistet
werden, erfordert aber eine komplette Umgestaltung des ganzen Schemas.)

Der Hauptstrang beginnt beim Benzen und endet beim Butadien --~aber halt,
erfolgen die letzten Schritte nicht "`gegen die Fahrtrichtung"'? Nicht
aus der Sicht des Compilers, f"ur den das Erscheinungsbild eines Pfeiles
unerheblich ist. Reaktionen "`gegen den Strich"' werden eben nicht mit
dem \verb+->+-Pfeil, sondern mit dem \verb+<-+-Pfeil formuliert.

Den Richtungs"anderungen, die im Verlaufe des Hauptstranges auftreten,
wird durch eine entsprechende Positionsparametrisierung der Formeln
und der Pfeilwinkel Rechnung getragen.

Die Chlorierung des Butadiens liefert ein Gemisch zweier Dichlorbutene,
die mit Hilfe eines einzeiligen \verb+multiline+"=Blockes zur Achse der
vertikalen Reaktionsfolge zentriert werden k"onnen. Das Pluszeichen ist
eine verkappte "`Formel"', die lediglich den Text "`+"' wiedergibt.
Der Name, der unter beiden Formeln zentriert stehen soll, wird durch eine
leere Formel erzeugt, die nur die Beschriftung enth"alt.

Der Hauptstrang pr"asentiert sich als Programm wie folgt:
\begin{prog}
\begin{chemistry}[nylon]
 formula(L,R,"Benzen",HR,24){ ring(){} }

 arrow()
 { text(T,C){ formula(C,C){ atom("H$_2$/Pt, Al$_2$O$_3$") } }
   text(B,C){ formula(C,C){ atom("36 bar") } }
 }

 formula(L,R){ ring(,,H){} }
 savecontext(#1)

 arrow(,36)
 { text(T,C){ formula(C,C){ atom("O$_2$") } }
   text(B,C){ formula(C,C){ atom("Co(OAc)$_3$") } }
 }

 formula(L,B)
 { atom("HOOC",L,R) bond(30;-30;30;-30;30;-30)
   atom("COOH", L)
 }
 fbox

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("$\Delta$") } }
   text(B,C){ formula(C,C){ atom("NH$_3$") } }
 }

 formula(T,B)
 { atom("H$_2$NCO",L,R) bond(30;-30;30;-30;30;-30) atom("CONH$_2$", L) }

 arrow(-90){}

 formula(T,B)
 { atom("NC",L,R) bond(30;-30;30;-30;30;-30) atom("CN", L) }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("H$_2$/Ni") } }
   text(B,C){ formula(C,C){ atom("130 $^o$C, 240 bar") } }
 }

 formula(T,L)
 { atom("H$_2$N",L,R) bond(30;-30;30;-30;30;-30) atom("NH$_2$", L) }
 fbox savecontext(#2)

 arrow(180,,<-){} nospace
 arrow(-90,,-)
 { text(T,C){ formula(C,C){ atom("NH$_3$") } }
   text(B,C){ formula(C,C){ atom("H$_2$/Kat") } }
 }

 formula(T,B)
 { atom("NC",L,R) bond(30;-30;30,=;-30;30;-30) atom("CN", L) }

 arrow(-90,,<-)
 { text(T,C){ formula(C,C){ atom("CuCN") } }
   text(B,C){ formula(C,C){ atom("CN$^\ominus$") } }
 }

 multiline(1,C,T,B)
 { formula(L,R)
   { atom("Cl") bond(30;-30;30,=;-30;30) atom("Cl")
   }
   formula(L,R){atom("+") }
   formula(L,R)
   { bond(30,=;-30) branch { bond(-90) atom("Cl"); }
     bond(30;-30) atom("Cl")
   };
 }
 formula(T,B,"Chlorbuten",V,12){}

 arrow(-90,,<-)
 { text(T,C){ formula(C,C){ atom("Cl$_2$") } }  }

 formula(T,B,"Butadien",V,24)
 { bond(30,=; -30; 30,=)   }
\end{prog}


Durch die Verwendung eines Hauptstranges verbleiben insgesamt zwei
Verzweigungen, die zu den Endprodukten f"uhren und keine Besonderheiten
aufweisen:
\begin{prog}
 setcontext(#1,B)
 arrow(-90)
 { text(T,C){ formula(C,C){ atom("NOCl") } }
   text(B,C){ formula(C,C){ atom("HCl") } }
 }

 formula(T,B, "Zyklohexanonoxim",V,24)
 { ring(,,H){ 4: bond(r,=C) atom("NOH",L); }  }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("H$_2$SO$_4$") } }  }

 formula(T,B,"$\epsilon$-Caprolactam",V,24)
 { ring(,,H,,7,90)
   { 0: atom("N") bond(r) atom("H");
     1: bond(r,=C) atom("O"); }
 }
 fbox

 arrow(-90){}

 formula(T,B){ atom("Nylon 6")  }

 setcontext(#2,B)
 arrow(-90)
 { text(T,C){ formula(C,C){ atom("270$^o$C") } }
   text(B,C){ formula(C,C){ atom("10 bar") } }
 }

 formula(T,B){ atom("Polyamid 66")  }
\end{chemistry}
\end{prog}

\begin{schema}
\begin{fullpage}
\begin{chemistry}[nylon]
 formula(L,R,"Benzen",HR,24)
 { ring(){}   }

 arrow()
 { text(T,C){ formula(C,C){ atom("H$_2$/Pt, Al$_2$O$_3$") } }
   text(B,C){ formula(C,C){ atom("36 bar") } }
 }

 formula(L,R)
 { ring(,,H){}   }
 savecontext(#1)

 arrow(,36)
 { text(T,C){ formula(C,C){ atom("O$_2$") } }
   text(B,C){ formula(C,C){ atom("Co(OAc)$_3$") } }
 }

 formula(L,B)
 { atom("HOOC",L,R) bond(30;-30;30;-30;30;-30)
   atom("COOH", L)
 }
 fbox

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("$\Delta$") } }
   text(B,C){ formula(C,C){ atom("NH$_3$") } }
 }

 formula(T,B)
 { atom("H$_2$NCO",L,R) bond(30;-30;30;-30;30;-30)
   atom("CONH$_2$", L)
 }

 arrow(-90){}

 formula(T,B)
 { atom("NC",L,R) bond(30;-30;30;-30;30;-30)
   atom("CN", L)
 }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("H$_2$/Ni") } }
   text(B,C){ formula(C,C){ atom("130 $^o$C, 240 bar") } }
 }

 formula(T,L)
 { atom("H$_2$N",L,R) bond(30;-30;30;-30;30;-30)
   atom("NH$_2$", L)
 }
 fbox
 savecontext(#2)

 arrow(180,,<-){} nospace
 arrow(-90,,-)
 { text(T,C){ formula(C,C){ atom("NH$_3$") } }
   text(B,C){ formula(C,C){ atom("H$_2$/Kat") } }
 }

 formula(T,B)
 { atom("NC",L,R) bond(30;-30;30,=;-30;30;-30)
   atom("CN", L)
 }

 arrow(-90,,<-)
 { text(T,C){ formula(C,C){ atom("CuCN") } }
   text(B,C){ formula(C,C){ atom("CN$^\ominus$") } }
 }

 multiline(1,C,T,B)
 { formula(L,R)
   { atom("Cl") bond(30;-30;30,=;-30;30) atom("Cl")
   }
   formula(L,R){atom("+") }
   formula(L,R)
   { bond(30,=;-30) branch { bond(-90) atom("Cl");}
     bond(30;-30) atom("Cl")
   };
 }
 formula(T,B,"Chlorbuten",V,12){}

 arrow(-90,,<-)
 { text(T,C){ formula(C,C){ atom("Cl$_2$") } }  }

 formula(T,B,"Butadien",V,24)
 { bond(30,=) bond(-30) bond(30,=)   }

 setcontext(#1,B)
 arrow(-90)
 { text(T,C){ formula(C,C){ atom("NOCl") } }
   text(B,C){ formula(C,C){ atom("HCl") } }
 }

 formula(T,B, "Zyklohexanonoxim",V,24)
 { ring(,,H){ 4: bond(r,=C) atom("NOH",L); }  }

 arrow(-90)
 { text(T,C){ formula(C,C){ atom("H$_2$SO$_4$") } }  }

 formula(T,B,"$\epsilon$-Caprolactam",V,24)
 { ring(,,H,,7,90)
   { 0: atom("N") bond(r) atom("H");
     1: bond(r,=C) atom("O");
   }
 }
 fbox

 arrow(-90){}

 formula(T,B)
 { atom("Nylon 6")  }

 setcontext(#2,B)
 arrow(-90)
 { text(T,C){ formula(C,C){ atom("270$^o$C") } }
   text(B,C){ formula(C,C){ atom("10 bar") } }
 }

 formula(T,B)
 { atom("Polyamid 66")  }
\end{chemistry}
\caption{Die Nylonsynthese als Beispiel f"ur ein komplexes Schema.
\label{fig:nylon}}
\end{fullpage}
\end{schema}



\subsection{Terpen-Biosynthese}
Die Biosynthese der Hauptvertreter bizyklischer Monoterpene ist als weiteres
komplexes Beispiel vorgesehen und in Schema~\ref{fig:terpen} dargestellt.
Es enth"alt Verzweigungen, verschiedene Ringger"uste sowie fett gedruckte
Formeln.
\begin{prog}
 save(#1)       % save parameter
 formula(L,R)
 { bond(30) saveXY(#1) bond(90,=; 150)
   bond(90; 30) saveXY(#2) bond(-30,=)
   bond(-90; -45,s,n) atom("$\oplus$")
   restoreXY(#1) bond(-30)  restoreXY(#2) bond(90)
 }

 arrow(){}

 formula(L,R)
 { ring(,,H3=)
   { 0: bond(r) saveXY(#1) bond(r-)
        restoreXY(#1) bond(r+)
        restoreXY(#1) bond(r,s,n) atom("$\oplus$");
     3: bond(r); }
 }
 savecontext(#1)

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"Terpineol",HR,24)
 { ring(,,H3=)
   { 0: bond(r)
        branch{ bond(r-); bond(r+); }
        bond(r) atom("O",C,R) atom("H",L);
     3: bond(r); }
 }
 restore(#1)

 % to thujene
 setcontext(#1,B) arrow(-90,60){}
 formula(T,R)
 { ring(,,H3=)
   { 0: bond(r) branch { bond(r-); bond(r+); };
     0: bond(r,s) atom("$\oplus$");
     3: bond(r); }
 }

 arrow(){}
 formula(L,R)
 { ring(,,H)
   { 0: bond(r) branch { bond(r-); bond(r+); };
     3: bond(r);
     3: bond(45,s) atom("$\oplus$");
     4: saveXY(#2);
     0: bond(#2); }
 }

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"3-Thujen",HR,24)
 { ring(,,H2=)
   { 0: bond(r) branch { bond(r-); bond(r+); };
     3: bond(r);
     4: saveXY(#2);
     0: bond(#2); }
 }
 restore(#1)

 % to pinene
 setcontext(#1,TR) arrow(60,36){}

 formula(L,R)
 { ring(,,H)
   { 3: bond(r);
     3: bond(45,s) atom("$\oplus$");
     0: bond(90) branch { bond(30); bond(90,,n);
                          bond(-150,,n);};
   }
 }

 formula(L,R)
 { ring("bc311h")
   { 0: bond(t); 0: bond(b);
     1: bond(r); }
 }

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"$\beta$-Pinen",HR,24)
 { ring(,,H)
   { 3: bond(r,=C);
     0: bond(90) branch { bond(30); bond(90,,n);
                          bond(-150,,n);};
   }
 }
 restore(#1)

 % to camphene
 setcontext(#1,T)
 arrow(90,60){}

 formula(B,R)
 { ring("bc221h")
   { 4: bond(r);
     3: bond(r,s,n) atom("$\oplus$");
     6: bond(t); 6: bond(b); }
 }

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"Campher",HR,24)
 { ring("bc221h")
   { 4: bond(r);
     3: bond(r,=C) atom("O");
     6: bond(t); 6: bond(b); }
 }
 restore(#1)

 % to carene
 setcontext(#1,BR) arrow(-60,36){}

 formula(L,R)
 { ring(,,H)
   { 3: bond(r);
     0: bond(t) saveXY(#1) bond(90; 45,s) atom("$\oplus$")
        restoreXY(#1) bond(-90) restoreXY(#1) bond(30);
   }
 }

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"3-Caren",HR,24)
 { ring(,,H2=)
   { 3: bond(r);
     0: bond(t) saveXY(#1) bond(90)
        restoreXY(#1) bond(-90) restoreXY(#1) bond(30);
   }
 }
 restore(#1)
\end{prog}


\begin{schema}[terpen]
\begin{chemistry}
 save(#1)       % save parameter
 formula(L,R)
 { bond(30) saveXY(#1) bond(90,=; 150)
   bond(90; 30) saveXY(#2) bond(-30,=)
   bond(-90; -45,s,n) atom("$\oplus$")
   restoreXY(#1) bond(-30)  restoreXY(#2) bond(90)
 }

 arrow(){}

 formula(L,R)
 { ring(,,H3=)
   { 0: bond(r) saveXY(#1) bond(r-)
        restoreXY(#1) bond(r+)
        restoreXY(#1) bond(r,s,n) atom("$\oplus$");
     3: bond(r);
   }
 }
 savecontext(#1)

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"Terpineol",HR,24)
 { ring(,,H3=)
   { 0: bond(r)
        branch{ bond(r-); bond(r+); }
        bond(r) atom("O",C,R) atom("H",L);
     3: bond(r); }
 }
 restore(#1)

 % to thujene
 setcontext(#1,B)
 arrow(-90,60){}
 formula(T,R)
 { ring(,,H3=)
   { 0: bond(r) branch { bond(r-); bond(r+); };
     0: bond(r,s) atom("$\oplus$");
     3: bond(r); }
 }

 arrow(){}
 formula(L,R)
 { ring(,,H)
   { 0: bond(r) branch { bond(r-); bond(r+); };
     3: bond(r);
     3: bond(45,s) atom("$\oplus$");
     4: saveXY(#2);
     0: bond(#2);
   }
 }

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"3-Thujen",HR,24)
 { ring(,,H2=)
   { 0: bond(r) branch { bond(r-); bond(r+); };
     3: bond(r);
     4: saveXY(#2);
     0: bond(#2);
   }
 }
 restore(#1)

 % to pinene
 setcontext(#1,TR)
 arrow(60,36){}

 formula(L,R)
 { ring(,,H)
   { 3: bond(r);
     3: bond(45,s) atom("$\oplus$");
     0: bond(90) branch
                 { bond(30); bond(90,,n);
                   bond(-150,,n);};
   }
 }

 formula(L,R)
 { ring("bc311h")
   { 0: bond(t); 0: bond(b);
     1: bond(r);
   }
 }

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"$\beta$-Pinen",HR,24)
 { ring(,,H)
   { 3: bond(r,=C);
     0: bond(90) branch
                 { bond(30); bond(90,,n);
                   bond(-150,,n);};
   }
 }
 restore(#1)

 % to camphene
 setcontext(#1,T)
 arrow(90,60){}

 formula(B,R)
 { ring("bc221h")
   { 4: bond(r);
     3: bond(r,s,n) atom("$\oplus$");
     6: bond(t); 6: bond(b);
   }
 }

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"Campher",HR,24)
 { ring("bc221h")
   { 4: bond(r);
     3: bond(r,=C) atom("O");
     6: bond(t); 6: bond(b);
   }
 }
 restore(#1)

 % to carene
 setcontext(#1,BR) arrow(-60,36){}

 formula(L,R)
 { ring(,,H)
   { 3: bond(r);
     0: bond(t) saveXY(#1)
        bond(90; 45,s) atom("$\oplus$")
        restoreXY(#1) bond(-90) restoreXY(#1) bond(30);
   }
 }

 arrow(){}
 set("rLW",1.5)
 formula(L,R,"3-Caren",HR,24)
 { ring(,,H2=)
   { 3: bond(r);
     0: bond(t) saveXY(#1)
        bond(90)
        restoreXY(#1) bond(-90) restoreXY(#1) bond(30);
   }
 }
 restore(#1)
\end{chemistry}
\caption{Die Biosynthese der bizyklischen Monoterpene aus der geradkettigen
Vorstufe Farnesol.\label{fig:terpen}}
\end{schema}


%
%
\section{Weitere Verbindungsklassen}
Viele Verbindungsklassen wurden in diesem Tutorial nicht behandelt. Die meisten
von ihnen k"onnen aber mit den besprochenen Mitteln erzeugt werden und bed"urfen
daher keiner Diskussion. Die Arbeit mit immer gleichen oder sehr "ahnlichen
Formeln kann jedoch erheblich erleichtert werden, wenn man sich einen Satz von
Makros schreibt, die auf diesen "Ahnlichkeiten basieren. Anregungen f"ur solche
Makros erhalten Sie im Abschnitt~\ref{sec:natur}. Dort werden folgende Klassen
von Stoffen n"aher angesprochen:
\begin{itemize}
\item Steroide
\item Isoprene
\item Aminos"auren und Oligopeptide
\end{itemize}

%
%
\section{Entwicklung eigener Ringstrukturen}\label{sec:eigeneringe}
\index{Bibliothek!entwickeln}\index{Ringe!eigene Strukturen}
\index{Strukturen!entwickeln}
Um den Compiler nicht mit einer Vielzahl von denkbaren Ringstrukturen, die nur
selten ben"otigt werden, zu belasten, wurden nur die unter \verb+ring+
aufgelisteten Grundstrukturen in das Core aufgenommen. Es ist jedoch m"oglich,
in einem Perlmodul eigene Ringstrukturen zu definieren und dieses mit Hilfe
von \verb+require+ in dem Dokument, das diese Strukturen ben"otigt, nachzuladen.

Sie finden als Beispiel f"ur den Aufbau eines solchen Moduls die beiden
Dateien \verb+mncyclib.pm+ und \verb+bicyclib.pm+,
die "uber den Grundwortschatz hinaus mono- und bizyklische Ger"uste bereitstellen.
Sie k"onnen diese Dateien, deren Listings in den Abschnitten~\ref{sec:mncyc}
und \ref{sec:bicyc} abgedruckt sind, als Templates benutzen; was Sie
im wesentlichen in einer Strukturdefinition bereitstellen m"ussen, sind
\begin{itemize}
\item die Koordinaten der einzelnen Atome im Array \verb+@$XYa+,
\item die Bindungstypen (einfache, doppelte, projektive) im Array \verb+@$BT+,
\item eine Liste von Atomen, die als Startpunkt f"ur Bindungen dienen, im Array
\verb+@$BLa+,
\item eine Liste mit den Winkeln der Bindungen im Array \verb+@$rThetaa+,
\item eine Liste mit den Bindungsl"angen im Array \verb+@$rLena+,
\item die Anzahl der Atome im Ger"ust in \verb+$$iAnz+,
\item die Ringgr"o"se, im allgemeinen die L"ange einer typischen Ringkante in
\verb+$$rLen+,
\item Information, ob ein Aromatenring gezeichnet werden soll, in \verb+$$bAromat+
sowie sein Radius in \verb+$$rRadius+,
\item gegebenenfalls Werte f"ur die beiden freien Parameter.
\end{itemize}

F"ur jedes Ger"ust m"ussen Sie zwei Funktionen bereitstellen:
\begin{description}
\item[\textless type\textgreater\_default\_] Diese Funktion gibt die Defaultwerte vor, die der
Befehl \verb+ring+ nach au"sen bereitstellt. Hierzu z"ahlen vor allem die
Anzahl der Atome und die Liste mit den Bindungstypen, da diese von einer
eventuell folgenden Bindungsliste "uberschrieben werden k"onnen sollen.
\item[\textless type\textgreater\_] Diese Funktion enth"alt die eigentliche Definition des Ger"ustes.
Alle Parameter, auch die beiden variablen Parameter \verb+<p1>+ und \verb+<p2>+
sind bekannt und k"onnen benutzt werden.
\end{description}

Das Array \verb+@$XYa+ enth"alt die Koordinaten der Atome in Punkt (pt), die
das Ger"ust aufbauen. Sie k"onnen diese auf einen beliebigen Nullpunkt
beziehen und entweder frei angeben oder --~f"ur geometrische Ger"uste~--
berechnen lassen. Versuchen Sie dabei nach M"oglichkeit, den L"angenparameter
in die Koordinaten einflie"sen zu lassen, damit Ihre Struktur in der Gr"o"se
skalierbar ist! In den Grundger"usten bezeichnet er die L"ange einer Kante und
bestimmt damit die Gesamtgr"o"se.

Die Liste \verb+@$BLa+ enth"alt eine Folge von Nummern der Atome, von denen
Bindungen ausgehen. Die i-te Bindung ist mit der i-ten Atomnummer in dieser
Liste verkn"upft und wird durch die Daten beschrieben, die jeweils an i-ter
Stelle in den einzelnen Eigenschaftenlisten stehen. Monozyklische Systeme
werden durch eine einfache Liste \verb+@$BLa+ beschrieben, die aus den Zahlen
von Null bis (Anzahl Atome$-1$) besteht, analog enthalten die Eigenschaftenlisten
soviele Eintr"age wie Atome und damit Bindungen zwischen ihnen vorhanden sind.
Die Liste \verb+@$BT+ ist einfach aufzubauen und enth"alt einfach die den
Bindungstypen entsprechenden Nummern (k"onnen in \verb+streambuf.pm+
bei der Funktion \verb+GetBond+ nachgelesen werden). Die anderen beiden Listen
k"onnen unter Umst"anden Schwierigkeiten bei der erforderlichen Berechnung
der Winkel und L"angen bereiten. Sie k"onnen jedoch die Funktionen
\begin{prog}
getangle(<p1>, <p2>)
getlength(<p1>, <p2>)
\end{prog}
benutzen, um Winkel und L"ange einer Bindung zwischen den Atomen mit den
Koordinaten \verb+<p1>+ und \verb+<p2>+ zu bestimmen, wobei der Startpunkt der
Bindung am Atom \verb+<p1>+ liegt.
\begin{prog}
getpos(<p1>, <angle>, <len>)
\end{prog}
kann dagegen den Endpunkt einer Bindung vom Punkt \verb+<p1>+ liefern, die
eine gegebene Richtung und L"ange hat.
Je nachdem, ob Sie die Koordinaten der Ger"ustatome kennen oder es anhand
bekannten Bindungswinkel und -l"angen aufbauen, kommen Sie mit einem der beiden
Funktionens"atze rasch zu den fehlenden Daten.







%
% -------------------------------------------
%
\chapter{Alphabetische Befehlsreferenz}\label{ref}
Dieses Kapitel enth"alt die komplette Beschreibung aller Befehle und ihrer
Syntax. F"ur die einzusetzenden Werte gilt:
\begin{itemize}
\item Angaben wie Bindungstypen oder -l"angen werden durch
Symbole festgelegt, deren Aussehen der sp"ateren Erscheinung
m"oglichst "ahnlich ist.
\item Alle Winkel werden in Altgraden gemessen. Drehsinn ist der
mathematisch negative (Uhrzeigersinn), Bezugsachse die positive x-Achse.
\item Absolut angebbare L"angen werden in Punkt (pt) \textit{ohne} Einheit notiert.
\end{itemize}

Die meisten Parameter der Befehle sind optional und werden bei Auslassung mit
einem Defaultwert belegt, der dem h"aufigsten Anwendungsfalle entspricht und
die Schreibarbeit betr"achtlich erleichern kann. Nach dem letzten konkret angegebenen
Parameter kann bereits die schlie"sende Klammer gesetzt werden, Notation der
restlichen Parameter oder der trennenden Kommata ist unn"otig. Soll ein
sp"ater in der Liste auftretender Parameter angegeben werden, ist es zur
Kenntlichmachung seiner Position erforderlich, alle vorhergehenden Argumente
ebenfalls zu notieren. M"ochten Sie keine Werte einsetzen, ist die Angabe der
Kommata ausreichend.

Es bedeuten in der Syntaxbeschreibung:
\begin{prog}
<fliste> := atom | bond | branch | orbital | saveXY | ring |
           save | restore | set

<sliste> := arrow | formula |
           savecontext | setcontext | gotoXY | shiftXY |
           emove |
           save | restore | set | scale
           bracket | fbox
\end{prog}

%
%
\section{Benutzerbefehle}
Der folgende Abschnitt listet alle Befehl auf, die innerhalb der
\verb+chemistry+"=Umgebung (Einsatz im \LaTeX-Dokument) beziehungsweise des
\verb+schema+"=Befehls (manuelle Erstellung des Programmfiles) auftreten k"onnen.

\newpage\subsection{arrow}
\begin{prog}
arrow([ [<phi>] [, [<len>] [, [<type]]]])
{ [ text(T, <Tpos>){ <fliste> } ]
 [ text(B, <Tpos>){ <fliste> } ]
}
[ nospace ]

<Tpos> := L | C | R

Defaults: <phi>  = 0
         <len>  = rArrowExtend
         <type> = 1
\end{prog}
Mit diesem Kommando erzeugen Sie Reaktionspfeile, mit denen die einzelnen
Formeln zu Reaktionsketten verbunden werden. Die Gestalt des Pfeils wird
von den Parametern \verb+<phi>+, \verb+<len>+ und \verb+<type>+ bestimmt.
Die Richtung des Pfeils wird mit den Winkel \verb+<phi>+ in Altgrad und im
mathematisch positiven Sinne gegen"uber der positiven x-Achse gemessen.

\verb+<type>+ legt die Art des Pfeils fest (Gleichgewichtspfeil, "`f"uhrt
zu"'-Pfeil, durchgestrichener Pfeil) und wird durch ein Symbol gem"a"s der
folgenden Aufstellung spezifiziert:

{\centering\begin{chemistry}
 gotoXY(0,0)arrow(,,-){} formula(L,R){atom("-")}
 gotoXY(0,20)arrow(,,->){} formula(L,R){atom("\texttt{->}")}
 gotoXY(200,20)arrow(,,-|>){} formula(L,R){atom("\texttt{-|>}")}
 gotoXY(0,40)arrow(,,<-){} formula(L,R){atom("\texttt{<-}")}
 gotoXY(200,40)arrow(,,<|-){} formula(L,R){atom("\texttt{<|-}")}
 gotoXY(0,60)arrow(,,<=>){} formula(L,R){atom("\texttt{<=>}")}
 gotoXY(200,60)arrow(,,<->){} formula(L,R){atom("\texttt{<->}")}
\end{chemistry}
}

Der Parameter \verb+<len>+ modifiziert die L"ange des Pfeils und gibt die
Strecke an, die nach dem Start und vor der Spitze auf jeden Fall existieren
mu"s. Die Mindestl"ange eines Pfeils betr"agt somit 2\verb+<len>+. Die
Angabe dieser Strecke "uber die halbe L"ange wird verst"andlich, wenn man die
M"oglichkeit, den Pfeil zu beschriften, ber"ucksichtigt. Die Gesamtl"ange
eines Pfeiles bestimmt sich n"amlich aus dem Anteil \verb+<len>+ vor der
Beschriftung, der L"ange der Beschriftung selbst und einem folgenden Anteil
\verb+<len>+.

Die Beschriftung kann sowohl oberhalb wie auch unterhalb des Pfeils auftreten.
Dem wird durch die Positionierungsparameter \verb+T+ und \verb+B+ im Befehl
\verb+text+ Rechnung getragen. Da als Beschriftung sowohl Texte wie auch
Formeln m"oglich sind, wird anstelle von \verb+<fliste>+ eine
\verb+formula+"=Beschreibung oder eine Reaktionssequenz erwartet.
Normale Texte m"ussen daher mit dem
Befehl \verb+atom+ innerhalb einer Formeln gesetzt werden. Einige einfache
Beispiele m"ogen dies verdeutlichen:


Der Parameter \verb+<Tpos>+ wird bedeutsam, wenn Sie Formeln oder Texte sowohl
"uber als auch unter den Pfeil setzen wollen. In diesem Falle k"onnen Sie mit
den Werten \verb+L+, \verb+C+ und \verb+R+ beide Beschriftungen linksb"undig
zueinander, zentriert oder rechtsb"undig ausrichten, wie dies im Schema~\ref{fig:arrowd}
zu sehen ist.

\begin{schema}
\begin{chemistry}
arrow(){ text(T,L){formula(C,C){atom("linksb""undig")}}
                     text(B,L){formula(C,C){atom("kurz")}}}
arrow(){ text(T,C){formula(C,C){atom("zentriert")}}
                     text(B,C){formula(C,C){atom("kurz")}}}
arrow(){ text(T,R){formula(C,C){atom("rechtsb""undig")}}
                     text(B,R){formula(C,C){atom("kurz")}}}
\end{chemistry}
\caption{Anordnung der oberen und unteren Beschriftung mit verschiedener
Ausrichtung.\label{fig:arrowd}}
\end{schema}

Im Schema~\ref{fig:arrowc} sehen Sie, wie die Beschriftung bei verschiedenen
Winkeln des Pfeils positioniert wird.

\begin{schema}
\begin{chemistry}
 gotoXY(0,0)arrow(,12){ text(T,L){formula(C,C){atom("oben")}}
                     text(B,L){formula(C,C){atom("unten")}}}
 gotoXY(160,0)arrow(45,50){ text(T,L){formula(C,C){atom("oben")}}
                     text(B,L){formula(C,C){atom("unten")}}}
 gotoXY(0,0)arrow(90,40){ text(T,L){formula(C,C){atom("oben")}}
                     text(B,L){formula(C,C){atom("unten")}}}
 gotoXY(160,0)arrow(135,50){ text(T,L){formula(C,C){atom("oben")}}
                     text(B,L){formula(C,C){atom("unten")}}}
 gotoXY(0,0)arrow(180,12){ text(T,L){formula(C,C){atom("oben")}}
                     text(B,L){formula(C,C){atom("unten")}}}
 gotoXY(160,0)arrow(-135,50){ text(T,L){formula(C,C){atom("oben")}}
                     text(B,L){formula(C,C){atom("unten")}}}
 gotoXY(0,0)arrow(-90,40){ text(T,L){formula(C,C){atom("oben")}}
                     text(B,L){formula(C,C){atom("unten")}}}
 gotoXY(160,0)arrow(-45,50){ text(T,L){formula(C,C){atom("oben")}}
                     text(B,L){formula(C,C){atom("unten")}}}
\end{chemistry}
\caption{Die Anordnung der oberen und unteren Beschriftung bei verschiedenen
Winkeln des Pfeils.\label{fig:arrowc}}
\end{schema}

Wie bereits angesprochen, k"onnen anstelle einfacher Texte auch Reaktionsschemata
auf einem Pfeil aufgesetzt werden, wie das Beispiel des Schemas~\ref{fig:arrowb}
zeigt, in dem neben der Hauptreaktion auch die Darstellung des Reagenzes
skizziert ist:
\begin{prog}
\begin{chemistry}[arrow2]
 formula(L,R)
 { ring(){} }

 arrow()
 { text(T,L)
   { formula(T,B){ bond(30; -30)atom("COOH",L) }
     arrow(-90)
     { text(T,L) { formula(C,C){ atom("SOCl$_2$") } } }
     formula(T,B){ bond(30; -30)atom("COCl",L) }
   }
 }

 formula(L,R)
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O"); }
        bond(r-; r); }
 }
\end{chemistry}
\end{prog}

\begin{schema}
\begin{chemistry}[arrow2]
 formula(L,R)
 { ring(){} }

 arrow()
 { text(T,L)
   { formula(T,B){ bond(30; -30)atom("COOH",L) }
     arrow(-90)
     { text(T,L) { formula(C,C){ atom("SOCl$_2$") } } }
     formula(T,B){ bond(30; -30)atom("COCl",L) }
   }
 }

 formula(L,R)
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O");}
        bond(r-; r);
   }
 }
\end{chemistry}
\caption{Komplette Reaktionsketten k"onnen als "`Beschriftung"' auf Pfeile
aufgesetzt werden.\label{fig:arrowb}}
\end{schema}

Normalerweise wird nach einem Pfeil in der Richtung des Fortsetzungspunktes
ein kleiner Zwischenraum gesetzt, um das Aneinanderpicken der einzelnen
Elemente zu vermeiden. Ist dies aber beabsichtigt, k"onnen Sie unmittelbar
nach \verb+arrow+ den Befehl \verb+nospace+ einf"ugen.
\index{Befehle!nospace}\index{nospace}

%
%
\newpage\subsection{atom}\index{atom}\index{Befehle!atom}
\begin{prog}
atom("<Text>" [, [<pos>] [, [<Cpos>]]])

<pos> := C | L | R | T | B | TL | TR | BL | BR
<Cpos> := C | L | R | T | B | TL | TR | BL | BR

Defaults: <pos>  = C
         <Cpos> = C
\end{prog}
Mit diesem Befehl k"onnen Sie an der aktuellen Position einen beliebigen
\TeX-Text einf"ugen, der gem"a"s der Positionierungsvorgabe \verb+<pos>+
zum aktuellen Punkt ausgerichtet wird. Der aktuelle Punkt kann durch die
Dimension der Textbox beeinflu"st werden, die Positionierung des Fortsetzungspunkte
wird durch den Parameter \verb+<Cpos>+ bestimmt.

Nachfolgend sind einige Formeln dargestellt, in denen die
verschiedenen M"oglichkeiten, Atomsymbole zu verwenden, illustriert sind.
Im einfachsten Falle, einem terminalen Atom, k"onnen Sie die Positionierungen
\verb+C+ verwenden, um das Symbol zentriert zum Endpunkt der Bindung zu setzen.
Bei l"angeren Texten wie COOH ist es empfehlenswerter, je nach Richtung der
Bindung eine links- oder rechtsb"undige Anordnung vorzunehmen. Da in beiden
F"allen keine Fortsetzung von diesem Atom ausgeht, ist die Angabe \verb+<Cpos>+
unerheblich und kann fortgelassen werden. Erst wenn von diesem Atomsymbol aus
weitere Bindungen abzweigen, gewinnt dieser Parameter seine Bedeutung, wie Sie
an der Methylengruppe sehen, die von rechts erreicht wird (\verb+<pos>+ ist
\verb+R+) und von der aus eine Bindung nach links weiterf"uhrt (\verb+<pos>+ ist
\verb+L+):
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H)
   { 3: bond(r,=C) atom("O");
     4: bond(r) atom("O") bond(r-; r)
        atom("O") bond(r-);
     5: bond(r) atom("Cl");
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H)
   { 3: bond(r,=C) atom("O");
     4: bond(r) atom("O") bond(r-; r)
        atom("O") bond(r-);
     5: bond(r) atom("Cl");
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 0: bond(r) atom("COOH", L);
     1: bond(r) atom("HOOC", R);
     2: bond(r) atom("HOOC", BR);
     3: bond(r) atom("HOOC", R);
     4: bond(r) atom("COOH", L);
     5: bond(r) atom("COOH", TL);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 0: bond(r) atom("COOH", L);
     1: bond(r) atom("HOOC", R);
     2: bond(r) atom("HOOC", BR);
     3: bond(r) atom("HOOC", R);
     4: bond(r) atom("COOH", L);
     5: bond(r) atom("COOH", TL);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}
%IK 20.1.2000 begin
Sie sehen, da"s lange Textst"ucke wie "`COOH"' unsch"on plaziert werden, im
Tutorial auf Seite~\pageref{textbsp} k"onnen Sie erfahren, wie Sie in solchen
F"allen besser vorgehen.
%IK 20.1.2000 end

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 2: bond(r) atom("CH$_2$CH$_2$", R, L)
        bond(-150) ring(,4){};
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 2: bond(r) atom("CH$_2$CH$_2$", R, L)
        bond(-150) ring(,4){};
   }
 }
\end{prog}
\end{minipage}\end{fullpage}


Da die Texte und Atomsymbole durch \TeX{} gesetzt werden, sind Sie nicht auf
Buchstaben beschr"ankt, sondern k"onnen auch mathematische Formatierungshilfsmittel
einsetzen, um Indizes, die Symbole $\oplus$ und $\ominus$ sowie griechische
Zeichen zu erhalten.
%IK 20.1.2000 begin
Auch benutzerdefinierte Befehle k"onnen als Text auftreten,
in diesem Fall m"ussen die Definitionen allerdings in einer Paketdatei gesammelt
werden. Das Vorgehen ist in Abschnitt~\ref{packagecmd} beschrieben.
%IK 20.1.2000 end


%
%
\newpage\subsection{bond}\index{bond}\index{Befehle!bond}
%IK 19.1.2000 begin
\begin{prog}
bond(<phi> [, [<btype>] [, [<len>]]])
bond([<phi>] [+|-] r|t|b|l|v [+|-] [, [<btype>] [, [<len>]]])
bond(#<n> [, [<btype>] ]])

bond(<args1...>; <args2...>; ... )
<btype> := - -> <- <-> <. << 3 t s >> >. p b ~
<len> := S | N | L | s | n | l [...]

Defaults: <btype> = 0
         <len>   = N
\end{prog}
%IK 19.1.2000 end
Dieses Kommando erzeugt das grundlegende graphische Primitiv "`Bindung"'. Die
Syntaxvarianten decken verschiedene Anwendungsf"alle ab.

\subsection*{Normalform}
Sie k"onnen dabei mit dem Parameter \verb+<phi>+ den Winkel der Bindung
gegen"uber der positiven x-Achse vorgeben, mit Hilfe von \verb+<btype>+
zwischen mehreren Bindungsformen w"ahlen sowie mit \verb+<len>+ die L"ange
der Bindung festlegen. Die Bindung beginnt am aktuellen Startpunkt und
verschiebt den aktuellen Endpunkt, der zum folgenden Startpunkt wird, um ihre
eigene L"ange und Richtung, soda"s Sie mehrere \verb+bond+-Befehle aneinanderh"angen
k"onnen, um Atomketten zu bilden oder einfach --~in der komprimierten Syntax~--
mehrere Beschreibungen mit Semikola verketten k"onnen.

\subsubsection*{Bindungstypen}
In allen Syntaxvarianten werden die verschiedenen Typen von Bindungen gem"a"s
der folgenden Aufstellung mit Hilfe von Symbolen f"ur \verb+<btype>+ ausgew"ahlt
(alle Bindungen sind mit einem Winkel von 90\textdegree{} gezeichnet):

%IK 19.1.2000 begin
\begin{chemistry}
 gotoXY(0,0)formula(C,C,"\texttt{-}", HA,24)            { bond(90,-) }
 gotoXY(20,0)formula(C,C,"\texttt{t}", HA,24)           { bond(90,t) }
 gotoXY(40,0)formula(C,C,"\texttt{p}", HA,24)           { bond(90,p) }
 gotoXY(60,0)formula(C,C,"\texttt{b}", HA,24)           { bond(90,b) }
 gotoXY(80,0)formula(C,C,"\texttt{s}", HA,24)           { bond(90,s) }

 gotoXY(100,0)formula(C,C,"\texttt{<<}", HA,24)          { bond(90,<<) }
 gotoXY(120,0)formula(C,C,"\texttt{<.}", HA,24)         { bond(90,<.) }
 gotoXY(140,0)formula(C,C,"\texttt{>>}", HA,24)          { bond(90,>>) }
 gotoXY(160,0)formula(C,C,"\texttt{>.}", HA,24)         { bond(90,>.) }
 gotoXY(180,0)formula(C,C,"\texttt{o}", HA,24)          { bond(90,o) }

 gotoXY(200,0)formula(C,C,"\texttt{=C}", HA,24)         { bond(90,=C) }
 gotoXY(220,0)formula(C,C,"\texttt{=U}", HA,24)         { bond(90,=U) }
 gotoXY(240,0)formula(C,C,"\texttt{=}", HA,24)          { bond(90,=) }
 gotoXY(260,0)formula(C,C,"\texttt{3}", HA,24)          { bond(90,3) }

 gotoXY(280,0)formula(C,C,"\texttt{->}", HA,24)         { bond(90,->) }
 gotoXY(300,0)formula(C,C,"\texttt{<-}", HA,24)         { bond(90,<-) }
 gotoXY(320,0)formula(C,C,"\texttt{\textasciitilde}", HA,24)         { bond(90,~) }
\end{chemistry}
%IK 19.1.2000 end

\begin{description}
\item[-] Diese Bindungsform  entspricht der normalen Bindung, die meisten in den
Formeln verwendet wird.
\item[=, =C, =U] Doppelbindungen k"onnen mit drei verschiedenen Typen gesetzt
werden, die sich in der Lage der einzelnen Bindungen unterscheiden. Die normale
Form ist \verb+=+ und wird eingesetzt, wenn die zweite Bindung im Uhrzeigersinn rechts
von der Hauptbindung liegen soll. Innerhalb von (Benzen-) Ringen ist dies die
Form, die ein ausgewogenes Aussehen aufweist, da die kleineren zweiten Bindungen innerhalb
des Ringes liegen.
\verb+=U+ erzeugt eine zweite Bindung links der Hauptbindung und wird innerhalb von
Ringen benutzt, die gegen den Uhrzeigersinn gezeichnet werden, damit die Bindung
wiederum im Inneren des Ringes liegt. \verb+=C+ schlie"slich zeichnet zwei gleichwertige
Bindungen, die zentriert zu einer gedachten Mittellinie liegen. Sie eignet sich
nicht f"ur Ringbindungen, wird aber benutzt, wenn eine Doppelbindung zu einem
terminalen Atomsymbol f"uhrt. Die Unterschiede der einzelnen Formeln werden in den
folgenden Formeln sichtbar:

\begin{minipage}{5cm}
\begin{chemistry}
gotoXY(0,0) formula(C,C){ ring(,,H0=2=4=){} }
gotoXY(50,0) formula(C,C){ ring(,,H0=U2=U4=U){} }
gotoXY(100,0) formula(C,C){ ring(,,H0=C2=C4=C){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
gotoXY(0,0)
 formula(C,C){ ring(,,H0=2=4=){} }
gotoXY(50,0)
 formula(C,C){ ring(,,H0=U2=U4=U){} }
gotoXY(100,0)
 formula(C,C){ ring(,,H0=C2=C4=C){} }
\end{prog}
\end{minipage}

\item[3] Diese Form entspricht einer Dreifachbindunng.
\item[t, p, \textless\textless] Hiermit wird eine dickere Bindung (\verb+t+),
eine dickere Bindung mit wei"sem Rand (\verb+p+) oder eine sich verbreiternde Bindung
(\verb+<<+) gezeichnet. Die Formen \verb+t+ und \verb+<<+ eignen sich gleicherma"sen
zur Darstellung von Bindungen aus der Papierebene heraus, wie das Beispiel zum
n"achsten Stichwort zeigt. Bindungen mit \verb+t+ sind dar"uberhinaus in
polyzyklischen Systemen geeignet zur Darstellung der r"aumlich aus dem Papier
ragenden Verbr"uckungen. Zur Erh"ohung dieses perspektivischen Eindrucks zeichnet
\verb+p+ noch einen wei"sen Rand um die breitere Bindung. An der folgenden
Verbindung ist dies dargestellt, wobei \verb+p+ nur bei den Bindungen eine
Wirkung zeigt, die andere Bindungen schneiden:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,4,H){}
   ring(,2,H){}
   ring(,0,H)
   { 1: bond(180,t,S; -90,t; -30,t; 0,t,S); }
 }
 formula(L,R)
 { ring(,4,H){}
   ring(,2,H){}
   ring(,0,H)
   { 1: bond(180,t,S; -90,p; -30,t; 0,t,S); }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,4,H){}
   ring(,2,H){}
   ring(,0,H)
   { 1: bond(180,t,S; -90,t; -30,t; 0,t,S); }
 }
 formula(L,R)
 { ring(,4,H){}
   ring(,2,H){}
   ring(,0,H)
   { 1: bond(180,t,S; -90,p; -30,t; 0,t,S); }
 }
\end{prog}
\end{minipage}

Wenn Sie diesen Trick anwenden, m"ussen Sie beachten, da"s die \textit{Reihenfolge}
der Bindungen entscheidend ist, Bindungen mit Aussparungen (Typ \verb+p+) m"ussen
immer \textit{zuletzt} gezeichnet werden! Im obigen Beispiel darf die
Reihenfolge, in der die Ringe gezeichnet werden, nicht ge"andert werden, wenn die
perspektivische Wirkung erhalten bleiben soll.

\item[\textless., o] Diese Bindungsformen entsprechen einer gestrichelten, sich verbreiternden
Bindung beziehungsweise einer gestrichelten Bindungen und eignen sich alle zur Darstellung
von Bindungen in die Papierebene hinein:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C)
 { bond(30)
   branch { bond(120,<<); bond(60,<.); }
   bond(-30)
   branch { bond(-120,t); bond(-60,o); }
   bond(30)
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C)
 { bond(30)
   branch { bond(120,<<); bond(60,<.); }
   bond(-30)
   branch { bond(-120,t); bond(-60,o); }
   bond(30)
 }
\end{prog}
\end{minipage}

Die fein gepunkteten Linie \verb+o+ eignet sich auch dazu, Bindungen in statu
nascendi oder Wasserstoffbr"uckenbindungen anzudeuten:

\begin{minipage}{5cm}
\begin{chemistry}
formula()
{ ring(,,H0=2=4=U3o5o)
 { 4: bond(r);
   5: bond(r);
 }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
formula()
{ ring(,,H0=2=4=U3o5o)
 { 4: bond(r);
   5: bond(r); }
}
\end{prog}
\end{minipage}

%IK 19.1.2000 begin
\item[\textgreater\textgreater, \textgreater., b] Diese Bindungsformen entsprechen sich verj"ungenden
ausgef"ullten, sich verj"ungenden gestrichelten oder breiten Bindungen und eignen sich zur Darstellung
von Bindungen eines Atom "uber der Papierebene in diese hinein. Die Breite der Bindung vom Typ
\texttt{b} (einstellbar mit dem Parameter \texttt{rBW})
entspricht der Maximalbreite der sich verbreiternden oder verj"ungenden Bindungen, soda"s
alle drei Formen leicht kombiniert werden k"onnen, ein Beispiel ist die
r"aumliche Wiedergabe nach \textsc{Hayworth}:\index{Hayworth-Wiedergabe}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C)
 { ring("furanose",0,1<<2b3>>,L)
   { 0: atom("O");
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C)
 { ring("furanose",0,1<<2b3>>,L)
   { 0: atom("O");
   }
 }
\end{prog}
\end{minipage}

\item[\textasciitilde] Diese Bindungsformen wird benutzt, wenn die Stereochemie
an einem Atom nicht weiter spezifiziert werden soll oder ein Anomerengemisch
vorliegt, wie ein Beispiel aus der Zuckerchemie zeigt:\index{Hayworth-Wiedergabe}
\index{Anomerenbindung}\index{Bindung!Anomeren-}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C)
 { ring("furanose",,,L)
   { 0: atom("O");
     1: bond(0,~) atom("OH",L);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C)
 { ring("furanose",,,L)
   { 0: atom("O");
     1: bond(0,~) atom("OH",L);
   }
 }
\end{prog}
\end{minipage}
%IK 19.1.2000 end

\item[s] Diese unsichtbare Bindung kann benutzt werden, um Punkte in der Umgebung
eines Atoms zu erreichen. Ein Beispiel w"are die Numerierung eines Atomger"ustes:
\begin{minipage}{5cm}
\begin{chemistry}
formula(C,C)
{ ring(,,H)
 { 0: atom("O");
   0: bond(r,s) atom("1");
   1: bond(r,s) atom("2");
   3: bond(r,s) atom("4");
 }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(C,C)
{ ring(,,H)
 { 0: atom("O");
   0: bond(r,s) atom("1");
   1: bond(r,s) atom("2");
   3: bond(r,s) atom("4"); }
}
\end{prog}
\end{minipage}

Weiterhin k"onnen in einem Ringger"ust einige Bindungen ausgespart werden, wie
etwa das Zyklodekan zeigt:

\begin{minipage}{5cm}
\begin{chemistry}
formula(C,C)
{ ring(,4,H4s)
 { }
 ring(,2,H1s)
 { }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(C,C)
{ ring(,4,H4s)
 { }
 ring(,2,H1s)
 { }
}
\end{prog}
\end{minipage}

\item[-\textgreater, \textless-] Diese Bindungsform eignet sich zur Darstellung von Komplexbindungen
mit Angabe des Atoms, das das Elektronenpaar bereitstellt:

\begin{minipage}{5cm}
\begin{chemistry}
formula(C,C)
{ ring(,,H0<-4->,,5,0)
 { 0: atom("Cu", L);
 }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(C,C)
{ ring(,,H0<-4->,,5,0)
 { 0: atom("Cu", L); }
}
\end{prog}
\end{minipage}

\end{description}

%IK 19.1.2000 begin
\subsubsection*{Bindungsl"angen}
Die L"ange der Bindung wird durch die Buchstaben \verb+S+ (short), \verb+N+
(normal) und \verb+L+ (long) kodiert. Ein Kleinbuchstabe
kodiert eine L"ange, die halb so gro"s wie die des entsprechenden Gro"sbuchstabens ist.
Jeder h"ohere Buchstabe bedeutet eine um 50\% erh"ohte L"ange.
Das mehrfache Erscheinen eines Buchstabens bedeutet, da"s die Bindung um ein
entsprechendes Vielfaches der L"ange dieses Buchstabens verl"angert wird, beispielsweise
bedeutet \verb+NN+ die doppelte Normall"ange. Als Folge hiervon k"onnen einige L"angen auf
mehrere Arten dargestellt werden: \verb+nn+ ist dasselbe wie \verb+N+, \verb+NNN+ dasselbe
wie \verb+LL+.
%IK 19.1.2000 end
Die tats"achliche L"ange der einzelnen
Bindungen ist in den Variablen \verb+rLenS+, \verb+rLenN+ und \verb+rLenL+
gespeichert ($\to$\verb+set+). Die besondere L"angenangabe \verb+0+ erzeugt
eine Bindung der L"ange Null, was sinnvoll sein kann, wenn Sie ein allgemeines
Makro geschrieben haben und eine der Bindungen nicht immer vorhanden sein soll.


\subsection*{r/t/b/l/v-Form}
\index{Symbolische Winkel}\index{Winkel!symbolische}\index{bond!Winkel}%
Diese Syntax ist mit der Normalform in allen
Punkten identisch, lediglich die Winkelangabe ist abweichend. Die Syntax gibt
vor allem eine Hilfestellung beim Ansatz von Seitenketten an Ringsysteme und ist
demzufolge innerhalb eines \verb+ring+- oder \verb+vertex+"=Befehls am
sinnvollsten einsetzbar.
Die Buchstaben stellen dann eine symbolische Winkelangabe dar, deren konkreter
Wert vom Ringsystem  abh"angig ist.
\begin{description}
\item[\texttt{r}] Eine radiale Bindung, also eine Bindung,
deren Richtung durch die Gerade Zentrum-Ringatom bestimmt ist.

\item[\texttt{t}, \texttt{b}] Winkel f"ur Bindungen ober- und unterhalb der
Papierebene (top und bottom). Besonders beim Ringtyp \verb+chair+ und verschiedenen
Konformerenger"usten ist diese Bedeutung offensichtlich, bei rein planaren
Formeln (ebene Ringe) werden f"ur diese Bindungen h"aufig die Verl"angerungen
der an das Ringatom ansto"senden beiden Kanten verwendet.
Welche Winkel f"ur diese Variante tats"achlich benutzt werden, wird in Form
von schematischen Formeln bei der Besprechung der einzelnen Ringe (Befehl
\verb+ring+ und Vorstellung der Bibliotheken) gezeigt.

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,,5,90)
   { 0: bond(r);
     2: bond(t,t);
     2: bond(b,o);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,5,90)
   { 0: bond(r);
     2: bond(t,t);
     2: bond(b,o); }
 }
\end{prog}
\end{minipage}

\item[\texttt{v(<n>)}] Winkel, unter dem die Bindung vom Ringatom mit der
Nummer \verb+<n>+ zum n"achsten Ringatom gezeichnet wird, entspricht also
dem Winkel der Ringkante \verb+<n>+.

\item[\texttt{l}] Entspricht dem Winkel, unter dem die letzte Bindung gezeichnet
wurde.
\end{description}

Diese Grundwinkel k"onnen durch verschiedene Symbole modifiziert werden, die in
dieser Reihenfolge auftreten und kombiniert werden k"onnen:
\begin{description}
\item[\texttt{/}] Diese Angabe verwandelt den Winkel eines \verb+r+-, \verb+t+-
oder \verb+b+-Winkels in seinen Komplement"arwinkel. Dies ist der Winkel, der
dazu f"uhrt, da"s eine Kette mit der Winkelfolge \verb+r r/ r r/ r+ in Zickzackform
verl"auft und sich dabei an der horizontalen respektive vertikalen Koordinatenachse
orientiert. Der Innenwinkel der Knickstellen entspricht dann stets 60\textdegree.

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 1: bond(r; r/; r; r/);
     2: bond(r; r/; r; r/);
     3: bond(r; r/; r; r/);
     4: bond(r; r/; r; r/);
     5: bond(r; r/; r; r/);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 1: bond(r; r/; r; r/);
     2: bond(r; r/; r; r/);
     3: bond(r; r/; r; r/);
     4: bond(r; r/; r; r/);
     5: bond(r; r/; r; r/); }
 }
\end{prog}
\end{minipage}

\item[\texttt{t}] Hiermit erzeugen Sie einen Winkel, der dem \verb+/+-Winkel
gerade entgegengesetzt ist und so eine Verzweigungsbindung hervorbringt. Dieser
Winkel tritt somit "ublicherweise innerhalb von \verb+branch+ auf. In der
Kombination \verb+/t+ erhalten Sie den Abzweigwinkel zur "`anderen"' Seite der
Zickzackkette:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 1: bond(r) branch{ bond(rt); }
        bond(r/)  branch{ bond(r/t); }
        bond(r);
     3: bond(r) branch{ bond(rt); }
        bond(r/)  branch{ bond(r/t); }
        bond(r);
     4: bond(r) branch{ bond(rt); }
        bond(r/)  branch{ bond(r/t); }
        bond(r);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 1: bond(r) branch{ bond(rt); }
        bond(r/)  branch{ bond(r/t); }
        bond(r);
     3: bond(r) branch{ bond(rt); }
        bond(r/)  branch{ bond(r/t); }
        bond(r);
     4: bond(r) branch{ bond(rt); }
        bond(r/)  branch{ bond(r/t); }
        bond(r); }
 }
\end{prog}
\end{minipage}

\item[\texttt{+}, \texttt{-}] Diese Zeichen k"onnen mehrfach auftreten und
erh"ohen beziehungsweise vermindern den Zeichenwinkel um jeweils 60\textdegree.
Dies ist der "ubliche Winkel von Alkanen in Zickzackform oder der Hauptwinkel
bei Sechsringen. Die Wirkung entspricht einer Drehung aus der augenblicklichen
Richtung nach links beziehungsweise nach rechts. Sie erzeugen damit "Anderungen
in der Kettenrichtung oder Isopropylverzweigungen:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 2: bond(r) branch { bond(r+); bond(r-); };
     3: bond(r) branch { bond(r+); bond(r-); };
     5: bond(r) branch { bond(r+); bond(r-); };
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 2: bond(r) branch { bond(r+); bond(r-); };
     3: bond(r) branch { bond(r+); bond(r-); };
     5: bond(r) branch { bond(r+); bond(r-); };
   }
 }
\end{prog}
\end{minipage}

F"ur l"angere Ketten mit Methylverzweigung ist die Bestimmung des
Abzweigwinkels mit \verb+rt+ oder \verb+r/t+ besser geeignet.

\item[\texttt{|}] Dieses Zeichen spiegelt die Bindung an der vertikalen
Achse. Sie k"onnen so einfach symmetrisch gebaute Molek"ule erzeugen:

\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R)
{ ring()
 { 4: bond(r; r+; r|)
      ring(,0,,,,r){ 3: bond(r); };

 }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(L,R)
{ ring()
 { 4: bond(r; r+; r|)
      ring(,0,,,,r)
      { 3: bond(r); };
 }
}
\end{prog}
\end{minipage}
\end{description}

Es ist m"oglich, eine Summe aus einem konkreten Winkel \verb+<phi>+ und dem
durch die aufgef"uhrten symbolischen Angaben erhaltenen Winkel zu bilden, um
zum Beispiel um 10\textdegree{} von einer radialen Bindung abzuweichen. Der
Operator \verb-+- bildet die gew"ohnliche Summe der Winkel, \verb+-+ dagegen
liefert die Summe aus dem konkreten Winkel und der dem symbolischen Winkel
\textit{entgegengesetzten} Richtung.

\verb+-+ kann auch ohne konkrete Zahlangabe
benutzt werden, um Bindungen entgegen einer Richtung zu zeichnen:

\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R)
{ ring()
 { 5: bond(r) atom("N=N",L,R) bond(-r|)
      ring(,0,,,,r){ 3: bond(r) atom("N",C,R) atom("H$_2$",L); };

 }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(L,R)
{ ring()
 { 5: bond(r) atom("N=N",L,R) bond(-r|)
      ring(,0,,,,r)
      { 3: bond(r) atom("N",C,R)
                   atom("H$_2$",L); };
 }
}
\end{prog}
\end{minipage}

Eine ausf"uhrliche Besprechung der einzelnen Varianten sowie zahlreiche
Beispiele sind im Tutorial, Abschnitt~\ref{symbolwinkel} gegeben. Es folgt
hier eine kurze Zusammenfassung einiger Richtungen, die durch Kombination
verschiedener Winkelsymbole erhalten werden k"onnen.

\begin{chemistry}
formula(L,R)
{ ring(,,H,,5,90)
 { 1: bond(r,s,NN)
      branch { bond(r,->) atom("\texttt{r}",L);
               bond(-r,->) atom("\texttt{-r}",R);
               bond(r|,->) atom("\texttt{r|}",R);
               bond(-r|,->) atom("\texttt{-r|}",L);};
   2: bond(r,s,NN)
      branch { bond(r,->) atom("\texttt{r}",TL);
               bond(r+,->) atom("\texttt{r+}",L);
               bond(-r+,->) atom("\texttt{-r+}",R);
               bond(r-,->) atom("\texttt{r-}",TR);
               bond(-r-,->) atom("\texttt{-r-}",BL);};
   3: bond(r,s,NN)
      branch { bond(r,->) atom("\texttt{r}",TR);
               bond(r/,->) atom("\texttt{r/}",TL);
               bond(r\,->) atom("\texttt{r\textbackslash}",BR);
               bond(-r\,->) atom("\texttt{-r\textbackslash}",BL);
               bond(-r/,->) atom("\texttt{-r/}",BR);};
 }
}
space(R) space(R) space(R) formula(L,R)
{ ring(,,H,,,90)
 { 4: bond(r,s,NN)
      branch { bond(r,->) atom("\texttt{r}",TR);
               bond(-r,->) atom("\texttt{-r}",BL);
               bond(r|,->) atom("\texttt{r|}",TL);
               bond(-r|,->) atom("\texttt{-r|}",BR);};
   5: bond(r,s,NN)
      branch { bond(r,->) atom("\texttt{r}",BR);
               bond(r+,->) atom("\texttt{r+}",TR);
               bond(-r+,->) atom("\texttt{-r+}",BL);
               bond(r-,->) atom("\texttt{r-}",BL);
               bond(-r-,->) atom("\texttt{-r-}",TL);};
   2: bond(r,s,NN)
      branch { bond(r,->) atom("\texttt{r}",TL);
               bond(r/,->) atom("\texttt{r/}",BL);
               bond(r\,->) atom("\texttt{r\textbackslash}",TL);
               bond(-r\,->) atom("\texttt{-r\textbackslash}",BL);
               bond(-r/,->) atom("\texttt{-r/}",TR);};
 }
}
\end{chemistry}

Zu Beginn einer Formel werden diese symbolischen Angaben mit Defaultwinkeln
assoziiert, und zwar 30\textdegree{} f"ur \verb+r+, 90\textdegree{} f"ur
\verb+t+ und -90\textdegree{} f"ur \verb+b+. Sie k"onnen diese Angaben somit
auch au"serhalb eines Ringsystems verwenden:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { bond(t; r; r/; r,=; r/; b) }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { bond(t; r; r/; r,=; r/; b) }
\end{prog}
\end{minipage}

Um die Startwinkel zu ver"andern, k"onnen Sie $\to$\verb+set+ einsetzen:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { set("iAngleR",30)
   set("iAngleT",60)
   set("iAngleB",-60)
   bond(t; r; r/; r,=; r/; b)
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { set("iAngleR",30)
   set("iAngleT",60)
   set("iAngleB",-60)
   bond(t; r; r/; r,=; r/; b)
 }
\end{prog}
\end{minipage}


\subsection*{\texttt{\#}-Form}
Die Form mit \verb+#<n>+ (auch als \verb+#+-Syntax bezeichnet)
dient zur Erzeugung einer Bindung, deren Richtung und
L"ange nicht spezifiziert wird, sondern die zu einem zuvor mit \verb+saveXY+
gespeicherten Atom f"uhrt. Sie k"onnen damit das aktuelle Atom mit dem Atom
\verb+<n>+ verbinden. Beispiele sind bei $\to$\verb+saveXY+ und
$\to$\verb+restoreXY+ zu finden. \index{Verbindungslinie}


\subsection*{Verkettete Bindungslisten}
Die Bindungsbeschreibungen mehrerer \verb+bond+"=Befehle k"onnen, durch
Semikola getrennt, in einem einzigen \verb+bond+"=Kommando zusammengefa"st
werden und dadurch viel Schreibarbeit sparen. Es sind dabei alle Syntaxvarianten
sowie Kombinationen m"oglich. Einige "Aquivalenzen:
\begin{prog}
bond(30) bond(0,=,L) bond(-30) bond(30)
== bond(30; 0,=,L; -30; 30)

bond(r) bond(r/) bond(r)
== bond(r;r/;r)
\end{prog}

%
%
\newpage\subsection{bracket}\index{bracket}\index{Befehle!bracket}
\begin{prog}
{formula | multiline} bracket() | bracket([) | bracket(])
\end{prog}
Mit Hilfe dieses Befehls f"ugen Sie eckige Klammern um die letzte mit
\verb+formula+ erzeugte Formel oder mit \verb+multiline+ erzeugten Formelblock.
Wird dieser Befehl nach einem anderen als den angegebenen Kommandos ausgef"uhrt,
k"onnen die Ergebnisse von den Erwartungen abweichen!
Sie k"onnen angeben, ob eine linke oder rechte Klammer gew"unscht wird oder
ob --~mit einer leeren Parameterliste~-- beide Klammern erscheinen sollen.
Die Klammern dienen vor allem zum Zusammenfassen mesomerer Grenzstrukturen
oder eines Zwischenproduktes (-gemisches).

Um N"aheres "uber die Klammersetzung in komplexen Zusammenh"angen zu erfahren,
lesen Sie bitte Abschnitt~\ref{sec:multiline} des Tutorials.


%
%
\newpage\subsection{branch}\index{branch}\index{Befehle!branch}\index{Verzweigung!in Formel}
\begin{prog}
branch{ <aliste_1>;
       <aliste_2>;
       ...
     }
\end{prog}
Mit diesem Befehl k"onnen Sie ausgehend von der aktuellen Position,
Verzweigungen aufbauen. Jede Formelkette \verb+<aliste>+ beginnt aufs
Neue am Verzweigungspunkt. Als Beispiel m"ogen folgende Formeln dienen, in denen
vom zentralen Kohlenstoffatom je drei Ketten abzweigen. Da der Befehl nach seinem
Abschlu"s den Startpunkt unver"andert l"a"st, m"ussen nur zwei Ketten im Rumpf
von \verb+branch+ formuliert werden:
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { atom("Cl") bond(30,,L)
   branch { bond(90,,L) atom("H");
            bond(-20,<<,L) atom("D");
          }
   bond(-70,<.,L) atom("Br")
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { atom("Cl") bond(30,,L)
   branch { bond(90,,L) atom("H");
            bond(-20,<<,L) atom("D");
          }
   bond(-70,<.,L) atom("Br")
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { atom("Cl") bond(30,,L)
   branch { bond(90,,L) atom("H");
            bond(-20,<<,L) atom("Br");
          }
   bond(-70,<.,L) atom("D")
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { atom("Cl") bond(30,,L)
   branch { bond(90,,L) atom("H");
            bond(-20,<<,L) atom("Br");
          }
   bond(-70,<.,L) atom("D")
 }
\end{prog}
\end{minipage}\end{fullpage}

Dieser Befehl eignet sich durch seine hierarchisch-rekursive Arbeitsweise
hervorragend f"ur strukturiert denkende Mitmenschen; geh"oren Sie dagegen zu
den Freigeistern, wird Ihnen die M"oglichkeit, mit $\to$\verb+saveXY+ Punkte
zu speichern und sp"ater darauf zur"uckzukommen ($\to$\verb+restoreXY+,
$\to$\verb+bond+), sehr willkommen sein, da so Verzweigungen ohne zus"atzliche
Schachtelungsebenen, daf"ur mit hintereinander auftretenden linearen Abschnitten,
simuliert werden.


%
%
\newpage\subsection{joinh}\index{joinh}\index{Befehle!joinh}
\begin{prog}
joinh(<n>, <pos>)
{ <rliste_1>;
 ...
 <rliste_n>;
}

<pos> := L | C | R
\end{prog}
Der Befehl dient zum Zusammenf"uhren von \verb+<n>+ horizontal laufenden
Reaktionsketten. Die einzelnen Ketten werden so angeordnet, da"s sie in einem
gleichen Abstand "ubereinander verlaufen. Der Parameter \verb+<pos>+
legt fest, ob sie dabei linksb"undig, zentriert oder rechtsb"undig zueinander
stehen. Eventuell auftretende Formelbeschriftungen werden dabei mit einem
konstanten Abstand von der Mittellinie gesetzt, soda"s der vertikale Mindestabstand
dem Wert des Parameters \verb+rTextSep+ entspricht. Aus diesem Grunde d"urfen
beschriftete Formeln \textit{keine} Abstandsparameter besitzen! Formeln, die
keine Beschriftung aufweisen, beeinflu"sen durch ihre Gr"o"se den Textabstand nicht.

Der Anschlu"spunkt f"ur weiterf"uhrende Reaktionspfeile liegt auf der
rechten Seite in der Mitte des Formelblockes. Das nachfolgende Schema zeigt
als Beispiel eine Synthese, bei der zwei getrennte Reaktionsketten zum
Addukt zusammengef"uhrt werden. Typischerweise folgt nach \verb+joinh+ ein
\verb+arrow+-Befehl, da \verb+joinh+ keine Pfeilspitzen zeichnet (die beim
Ineinanderschachteln mehrerer \verb+joinh+"=Befehle hinderlich w"are). Durch
die Positionierung \verb+L+ beginnen alle Teilketten linksb"undig:
\begin{prog}
 joinh(2,L)
 { % upper line
   formula(L,R,"Propions""aure"){ bond(30;-30;30) atom("COOH",L) }
   arrow(,12){}
   formula(L,R){ bond(30;-30;30) atom("COCl",L) }
   ;
   % lower line
   formula(L,R,"Benzen"){ ring(){} }
   ;
 }
 arrow(,12){}
 formula(L,R,"Propionylbenzen",HR,24)
 { ring()
   { 4: bond(r) branch{ bond(rt,=C) atom("O"); }
        bond(r/;r); }
 }
\end{prog}
\enlargethispage{3\baselineskip}

\begin{chemistry}[dh]
 joinh(2,L)
 { % upper line
   formula(L,R,"Propions""aure")
   { bond(30;-30;30) atom("COOH",L) }  %// 20-01-2000 IK
   arrow(,12){}
   formula(L,R)
   { bond(30;-30;30) atom("COCl",L) }  %// 20-01-2000 IK
   ;
   % lower line
   formula(L,R,"Benzen")
   { ring(){} }
   ;
 }
 arrow(,12){}
 formula(L,R,"Propionylbenzen",HR,24)
 { ring()
   { 4: bond(r) branch{ bond(rt,=C) atom("O"); }       %// 20-01-2000 IK
        bond(r/;r); }
 }
\end{chemistry}


%
%
\newpage\subsection{joinv}\index{joinv}\index{Befehle!joinv}
\begin{prog}
joinv(<n>, <pos>)
{ <rliste_1>;
 ...
 <rliste_n>;
}

<pos> := T | C | B
\end{prog}

"Ahnlich $\to$\verb+joinh+ f"ur horizontale Ketten, f"uhrt dieser Befehl \verb+<n>+
vertikal von oben nach unten laufende unabh"angige Reaktionsketten an einem
Punkt in der Mitte der Unterkante des gesamten Blockes zusammen, von dem aus
ein Reaktionspfeil nach unten angesetzt werden kann. Die einzelnen Ketten
werden gem"a"s dem Parameter \verb+<pos>+ mit ihren Oberkanten, Mitten oder
Unterkanten zueinander ausgerichtet. Die einfache Anwendung des Befehls
erfolgt analog zu $\to$\verb+joinh+, das dortige Beispiel pr"asentiert sich
in der vertikalen Form verm"oge \verb+T+ b"undig zur oberen Kante:

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}[dv]
 joinv(2,T)
 { % left line
   formula(T,B,"Propions""aure",V,24)
   { bond(30;-30;30) atom("COOH",L) }
   arrow(-90,12){}
   formula(T,B,"Propionylchlorid",V,24)
   { bond(30;-30;30) atom("COCl",L) }
   ;

   % right line
   formula(T,B,"Benzen",V,24)
   { ring(){} }
   ;
 }

 arrow(-90){}

 formula(T,B,"Propionylbenzen",V,24)
 { ring()
   { 4: bond(r) branch{ bond(rt,=C) atom("O"); }
        bond(r/;r); }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 joinv(2,T)
 { % left line
   formula(T,B,"Propions""aure",V,24)
   { bond(30;-30;30) atom("COOH",L) }
   arrow(-90,12){}
   formula(T,B,"Propionylchlorid",V,24)
   { bond(30;-30;30) atom("COCl",L) }
   ;

   % right line
   formula(T,B,"Benzen",V,24)
   { ring(){} }
   ;
 }

 arrow(-90){}

 formula(T,B,"Propionylbenzen",V,24)
 { ring()
   { 4: bond(r) branch{ bond(rt,=C) atom("O"); }
        bond(r/;r); }
 }
\end{prog}
\end{minipage}\end{fullpage}



%
%
\newpage\subsection{emove}\index{emove}\index{Befehle!emove}
\begin{prog}
emove(#<i>, <iAngle>, <iCtrl>, #<j>, <jAngle>, <jCtrl>)
\end{prog}
(Nur mit PostScript-Ausgabe verf"ugbar!)
Der Befehl erzeugt kleine gerade oder gebogene Pfeile, mit denen Wanderungsbewegungen
von Elektronen dargestellt werden. Pfeile k"onnen innerhalb einer Formel
verlaufen oder Punkte in verschiedenen Formeln miteinander verbinden.
Der Befehl \verb+emove+ selbst mu"s wie \verb+formula+ oder \verb+arrow+
au"serhalb eines Formelrumpfes stehen.

Der Start- und Endpunkt der Pfeile wird von Punkten gebildet, die mit Hilfe
zweier \verb+saveXY+"=Befehle gespeichert wurden, die zugeordnete Nummer tritt
hier als Parameter \verb+<i>+ beziehungsweise \verb+<j>+ in Erscheinung.
Es wird ein Abstand der Gr"o"se \verb+rEmove+ zwischen Pfeil und spezifiziertem
Punkt eingef"ugt, damit der Pfeil nicht direkt an der Bindung klebt.
Die genaue Gestalt der Pfeile wird durch die beiden Winkelangaben \verb+<iAngle>+
und \verb+<jAngle>+ sowie zwei reelle Zahlen \verb+<iCtrl>+ und \verb+<jCtrl+
bestimmt. Die Winkel geben an, unter welchem Winkel Pfeilende und -spitze die
spezifizierten Punkten verlassen beziehungsweise erreichen. Diese Winkel sind
den Angaben bei \verb+bond+ analog. Die Linien, die in Verl"angerung die
Start- und Endpunkte unter den gegebenen Winkeln verlassen, k"onnen als Tangenten
an den Pfeilbogen angesehen werden. Auf ihnen liegen, in den Abst"anden
\verb+<iCtrl>+ beziehungsweise \verb+<jCtrl>+, zwei Kontrollpunkte.

Die Menge der Start-, End- sowie der beiden Kontrollpunkte steuert dann den
genauen Verlauf eines PostScript-Splines (kubischer Spline), an dessen Ende eine
kleine Pfeilspitze aufgesetzt ist.

Will man eine konkrete Elektronenbewegung zeichnen, ist die Wahl der Winkel
meist kein Problem, da sie durch die geplanten Aus- und Einfallwinkel bestimmt
werden. Fingerspitzengef"uhl und Erfahrung erfordert dagegen die Wahl der
Kontrollparameter, da sehr leicht zu krumme oder zu gerade oder falsch gebogene
B"ogen zustandekommen.

Einige Beispiele sollen den Einflu"s der Kontrollparameter zeigen:
\begin{prog}
 formula(L,R)
 { saveXY(#1,30,n) bond(30,=)
   saveXY(#3,-30,n) bond(-30)
   saveXY(#2,30,n) bond(30,=)
 }
 emove(#1,90,1,#2,120,1)
 emove(#1,-60,1,#3,-120,1)

 emove(#1,90,5,#2,120,5)
 emove(#1,-60,5,#3,-120,5)

 emove(#1,90,10,#2,120,10)
 emove(#1,-60,10,#3,-120,10)

 emove(#1,90,20,#2,120,10)
 emove(#1,-60,20,#3,-120,20)
\end{prog}

\begin{chemistry}
 formula(L,R)
 { saveXY(#1,30,n) bond(30,=)
   saveXY(#3,-30,n) bond(-30)
   saveXY(#2,30,n) bond(30,=)
 }
 emove(#1,90,1,#2,120,1)
 emove(#1,-60,1,#3,-120,1)

 formula(L,R)
 { saveXY(#1,30,n) bond(30,=)
   saveXY(#3,-30,n) bond(-30)
   saveXY(#2,30,n) bond(30,=)
 }
 emove(#1,90,5,#2,120,5)
 emove(#1,-60,5,#3,-120,5)

 formula(L,R)
 { saveXY(#1,30,n) bond(30,=)
   saveXY(#3,-30,n) bond(-30)
   saveXY(#2,30,n) bond(30,=)
 }
 emove(#1,90,10,#2,120,10)
 emove(#1,-60,10,#3,-120,10)

 formula(L,R)
 { saveXY(#1,30,n) bond(30,=)
   saveXY(#3,-30,n) bond(-30)
   saveXY(#2,30,n) bond(30,=)
 }
 emove(#1,90,20,#2,120,10)
 emove(#1,-60,20,#3,-120,20)
\end{chemistry}

Sie erkennen an den Beispielen zweierlei: a) der Einflu"s der Kontrollparameter
auf die Kurvenkr"ummung ist umso st"arker, je gr"o"ser diese sind, das hei"st
je weiter entfernt die Kontrollpunkte sind. Die vier Steuerungspunkt bilden ein
Viereck, innerhalb dessen die Splinekurve vollst"andig liegt, wobei jeder
Kontrollpunkt die Kurve gleichsam an sich ziehen m"ochte. Je weiter er entfernt
ist, desto mehr wird auch die Kurve in seine Richtung gebogen. Am vierten Beispiel
k"onnen Sie sehen, da"s auf diese Weise sogar Verschlingungen entstehen k"onnen.
b) Die meisten
Startpunkte von Elektronensplines liegen in der Mitte von Bindungen. Hier
vereinfacht der Einsatz der erweiterten \verb+saveXY+"=Syntax die Formelbeschreibung
erheblich, da mit nur zwei Befehlen der Bindungsmittelpunkt gesichert und die
Bindung selbst gezeichnet werden kann. Zur Angabe der halben Bindungsl"ange
wird die L"angenangabe \verb+n+ statt \verb+N+ bei normalen Bindungen eingesetzt.
Im Tutorial, Abschnitt~\ref{sec:emove}, werden konkrete Anwendungsf"alle
beschrieben.

%
%
\newpage\subsection{fbox}\index{fbox}\index{Befehle!fbox}
\begin{prog}
{formula | multiline} fbox
\end{prog}

Mit diesem Befehl erzeugen Sie einen Rahmen um die zuletzt mit \verb+formula+
gezeichnete Formel oder mit \verb+multiline+ erzeugten Formelblock.

N"aheres "uber die Rahmung komplexer Zusammenh"ange ist in
Abschnitt~\ref{sec:multiline} des Tutorials zu erfahren.

%
%
\newpage\subsection{formula}\index{formula}\index{Befehle!formula}
\begin{prog}
formula(<pos>, <Cpos>, ["<Text>", HA|HR|V, <dy>])
{ <fliste> }
[ nospace ]

<pos> := C | L | R | T | B | TL | TR | BL | BR
<Cpos> := C | L | R | T | B | TL | TR | BL | BR

Defaults: <pos>  = L
         <Cpos> = R
\end{prog}
Dies ist der zentrale Befehl des Chemiepaketes. Mit ihm bilden Sie anhand
grundlegender Elemente Formeln, die mit diesem Befehl zu einer festen Einheit
verwandelt werden, die automatisch bez"uglich weiterer Formeln plaziert
wird und in Zusammenhang mit Pfeilen zu Reaktionsschemata f"uhrt. Auch weitere
abstraktere Plazierungsbefehle wie $\to$\verb+multiline+ oder $\to$\verb+joinh+
erfordern Formeln als Basis.

Die Formel selbst wird im Rumpf des Befehls \verb+<fliste>+ durch eine Folge
von Grundelementen ($\to$\verb+atom+, $\to$\verb+bond+, $\to$\verb+ring+,
$\to$\verb+branch+) gebildet. Diese Einheit wird so plaziert, da"s sie in
der Relation \verb+<pos>+ zum Startpunkt steht. Der Anschlu"spunkt f"ur die
folgenden Formeln wird durch den Parameter \verb+<Cpos>+ bestimmt. Die
Bedeutung der Parameter wird im Tutorial detailliert gezeigt.

Normalerweise wird nach einer Formel in der Richtung des Anschlu"spunktes
ein Zwischenraum gesetzt, damit die einzelnen Elemente nicht direkt
aneinanderh"angen. Ist ebendies beabsichtigt, f"ugen Sie unmittelbar
nach \verb+formula+ den Befehl \verb+nospace+ ein.
\index{Befehle!nospace}\index{nospace}


%
%
\newpage\subsection{gotoXY}\index{gotoXY}\index{Befehle!gotoXY}
\begin{prog}
gotoXY([<x>] [, [<y>]])

Defaults: aktuelle x- und y-Werte
\end{prog}
Mit diesem Befehl kann der aktuelle Punkt auf einen bestimmten
absoluten Punkt gesetzt werden. Dies widerspricht zun"achst der Forderung
nach einer selbst"andigen Ausrichtung aller Elemente eines Schemas, kann
aber sinnvoll sein, wenn Sie Formeln an festen Stellen erscheinen lassen
wollen, unabh"angig vom Zufall der jeweiligen Gr"o"se, etwa in einer
tabellarischen Anordnung:

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}[gotoxy1]
 gotoXY(0,0)
 formula(C,C,"Pyrrol",HA,36)
 { ring("cpentane",,1=3=)
   { 0: atom("N") bond(r) atom("H");
   }
 }
 gotoXY(50,0)
 formula(C,C,"Pyrrolin",HA,36)
 { ring("cpentane",,1=)
   { 0: atom("N") bond(r) atom("H");
   }
 }

 gotoXY(0,100)
 formula(C,C,"Imidazol",HA,36)
 { ring("cpentane",,1=3=)
   { 0: atom("N") bond(r) atom("H");
     2: atom("N");
   }
 }
 gotoXY(50,100)
 formula(C,C,"Imidazolin",HA,36)
 { ring("cpentane",,3=)
   { 0: atom("N") bond(r) atom("H");
     2: atom("N") bond(r) atom("H");
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{.5\textwidth}
\begin{prog}
\begin{chemistry}[gotoxy1]
 gotoXY(0,0)
 formula(C,C,"Pyrrol",HA,36)
 { ring("cpentane",,1=3=)
   { 0: atom("N") bond(r) atom("H"); }
 }
 gotoXY(50,0)
 formula(C,C,"Pyrrolin",HA,36)
 { ring("cpentane",,1=)
   { 0: atom("N") bond(r) atom("H"); }
 }
 gotoXY(0,100)
 formula(C,C,"Imidazol",HA,36)
 { ring("cpentane",,1=3=)
   { 0: atom("N") bond(r) atom("H");
     2: atom("N"); }
 }
 gotoXY(50,100)
 formula(C,C,"Imidazolin",HA,36)
 { ring("cpentane",,3=)
   { 0: atom("N") bond(r) atom("H");
     2: atom("N") bond(r) atom("H"); }
 }
\end{chemistry}
\end{prog}
\end{minipage}\end{fullpage}

Eine relative Anordnung wird durch den Einsatz des Befehls $\to$\verb+shiftXY+
erm"oglicht.


%
%
\newpage\subsection{multiline}\index{multiline}\index{Befehle!multiline}
\begin{prog}
multiline(<n> [, [<iPos>] [, [<pos>] [, [<cPos>]]]] )
{ <rliste_1>;
 ...
 <rliste_n>;
}

<iPos> := L | C | R
<pos> := C | L | R | T | B | TL | TR | BL | BR
<Cpos> := C | L | R | T | B | TL | TR | BL | BR

Defaults: <iPos> = L
         <pos>  = L
         <cPos> = R
\end{prog}
Der Befehl dient dazu, \verb+<n>+ Zeilen mit Formeln oder Reaktionsketten
"ubereinander zu setzen, wobei zwischen den einzelnen Zeilen ein konstanter
Abstand verbleibt. Die einzelnen Zeilen werden gem"a"s \verb+<iPos>+ linksb"undig,
mittig oder rechtsb"undig zueinander ausgerichtet. Der \verb+<n>+-zeilige
Block als Ganzes wird gem"a"s \verb+<pos>+ auf den aktuellen Punkt ausgerichtet,
der Anschlu"spunkt f"ur folgende Formeln gem"a"s \verb+<cPos>+ bestimmt
("ahnlich dem Positionierungsverfahren f"ur \verb+formula+).
Beschriftungen von Formeln werden in einem selbst"andig berechneten, konstanten
Abstand gesetzt, soda"s alle Texte einer Zeile in gleicher H"ohe aufscheinen.
Sie d"urfen innerhalb der beschrifteten \verb+formula+"=Befehle keine
Abstandsangaben f"ur den Textparameter vorgeben!

Im einfachsten Falle wird der Befehl benutzt, um l"angere Reaktionsschemata
auf mehrere Zeilen aufzuteilen oder mehrere kurze Ketten "ubereinanderzusetzen:

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 multiline(3,L)
 { formula(L,R){ bond(30; -30,=;30) }
   arrow(){}
   formula(L,R){ bond(30; -30;30) }
   ;
   formula(L,R){ ring(){} }
   arrow(){}
   formula(L,R){ ring(,,H0=2=){} }
   ;
   formula(L,R){ bond(0; 0,3; 0) }
   arrow(){}
   formula(L,R){ bond(30;0,=;-30) }
   ;
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{.5\textwidth}
\begin{prog}
\begin{chemistry}
 multiline(3,L)
 { formula(L,R){ bond(30; -30,=;30) }
   arrow(){}
   formula(L,R){ bond(30; -30;30) }
   ;
   formula(L,R){ ring(){} }
   arrow(){}
   formula(L,R){ ring(,,H0=2=){} }
   ;
   formula(L,R){ bond(0; 0,3; 0) }
   arrow(){}
   formula(L,R){ bond(30;0,=;-30) }
   ;
 }
\end{chemistry}
\end{prog}
\end{minipage}\end{fullpage}

Der Spezialfall \verb+<n>+ gleich Eins kann jedoch eingesetzt werden, um mehrere
Formeln als Einheit zu betrachten und zu plazieren, einzurahmen oder als
Verzweigung dienen zu lassen. Lesen Sie hierzu Abschnitt~\ref{sec:multiline}
des Tutorials.



%
%
\newpage\subsection{orbital}\index{orbital}\index{Befehle!orbital}
\begin{prog}
orbital([<iAngle>] [, [<rWeight>]])

Default:
        <rWeight> = 1
\end{prog}
(Derzeit nur mit einem PostScript-Ausgabeformat!)
Mit Hilfe dieses Befehls k"onnen Orbitallappen oder -keulen dargestellt werden,
wie Sie gelegentlich zur Illustration der Vorg"ange bei Zykloadditionen
verwendet werden. Der Parameter \verb+<iAngle>+ ist der Winkel, den die L"angsachse
der Keule und die positive x-Achse einschlie"sen, \verb+<rWeight>+ ist ein
Skalierungsfaktor, der die Gr"o"se des Orbitals angibt. Die obere und die untere
H"alfte des Orbitals unterscheiden sich durch ihren Grauwert.
Einige Beispiele:

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { orbital(90,2) bond(30)
   orbital(-90,1) bond(-30)
   orbital(90,0.5) bond(30)
   orbital(-90,1) bond(-30)
   orbital(90,2)
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { orbital(90,2) bond(30)
   orbital(-90,1) bond(-30)
   orbital(90,0.5) bond(30)
   orbital(-90,1) bond(-30)
   orbital(90,2)
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 multiline(1)
 { formula(L,R)
   { orbital(90,1) bond(135,=)
     orbital(-90,1) bond(45)
     orbital(-90,1) bond(0,=) orbital(90,1)
   }
   shiftXY(12,0)
   formula(L,R)
   { orbital(90,1) bond(45,=C)
     orbital(90,1)
   };
 }
 arrow(){}
 formula(L,R)
 { ring(,,H1=)
   { 1: orbital(-110,1);
     2: orbital(-110,1);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 multiline(1)
 { formula(L,R)
   { orbital(90,1) bond(135,=)
     orbital(-90,1) bond(45)
     orbital(-90,1) bond(0,=) orbital(90,1)
   }
   shiftXY(12,0)
   formula(L,R)
   { orbital(90,1) bond(45,=C) orbital(90,1) }
 ;}
 arrow(){}
 formula(L,R)
 { ring(,,H1=)
   { 1: orbital(-110,1);
     2: orbital(-110,1);  }
 }
\end{prog}
\end{minipage}\end{fullpage}




%
%
\newpage\subsection{restore}\index{restore}\index{Befehle!restore}
\begin{prog}
restore(#<n>)
\end{prog}

Mit diesem Befehl wird der unter der ganzen Zahl \verb+<n>+
gespeicherte Parametersatz reaktiviert ($\to$\verb+save+).


%
%
\newpage\subsection{restoreXY}\index{restoreXY}\index{Befehle!restoreXY}
\index{Naturstoffe}\index{Ringe!irregul""ar}\index{Polyzyklen}\index{Stereodarstellung}
\begin{prog}
restoreXY(#<n>)
\end{prog}
Mit diesem Befehl wird der aktuelle Punkt auf die zuvor mit $\to$\verb+saveXY+
unter der ganzen Zahl \verb+<n>+ gespeicherte Position gesetzt. Sie k"onnen so
Verzweigungen in einer Struktur erreichen, ohne wie bei $\to$\verb+branch+
rekursiv denken zu m"ussen (sozusagen "`wilde"' Verzweigungen:-) ). Beispiele:
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"Dimethyl-zyklopentan",HA,36)
 { saveXY(#1) bond(170; -160; -10,t; 60,t,L)
   saveXY(#2) bond(#1)
   restoreXY(#2) bond(30) restoreXY(#2) bond(150)
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"Dimethyl-zyklopentan",HA,36)
 { saveXY(#1) bond(170; -160; -10,t; 60,t,L)
   saveXY(#2) bond(#1)
   restoreXY(#2) bond(30) restoreXY(#2) bond(150)
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"Bizyklo[2.2.2]oktan",HA,36)
 { bond(30,t,L) saveXY(#1) bond(-30,t,L; 60; 150,,L)
   saveXY(#2) bond(-150,,L; -120)
   restoreXY(#1) bond(90,t,L; 60) bond(#2)
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"Bizyklo[2.2.2]oktan",HA,36)
 { bond(30,t,L) saveXY(#1) bond(-30,t,L; 60; 150,,L)
   saveXY(#2) bond(-150,,L; -120)
   restoreXY(#1) bond(90,t,L; 60) bond(#2)
 }
\end{prog}
\end{minipage}\end{fullpage}


Die Beispiele des \verb+branch+"=Befehls k"onnen mit \verb+saveXY+ und
\verb+restoreXY+ folgenderma"sen formuliert werden:
\begin{prog}
\begin{chemistry}
 formula(L,R)
 { atom("Cl") bond(30,,L)
   saveXY(#1)
   bond(90,,L) atom("H")
   restoreXY(#1) bond(-20,<<,L) atom("D")
   restoreXY(#1) bond(-70,<.,L) atom("Br")
 }

 formula(L,R)
 { atom("Cl") bond(30,,L)
   saveXY(#1)
   bond(90,,L) atom("H")
   restoreXY(#1) bond(-20,<<,L) atom("Br")
   restoreXY(#1) bond(-70,<.,L) atom("D")
 }
\end{chemistry}
\end{prog}

Es sei noch erw"ahnt, da"s das Bizyklo[2.2.2]oktan als Grundger"ust in \verb+bicyclib.pm+
vorhanden ist. Verschiedene Zyklopentankonformeren sind in \verb+mncyclib.pm+
enthalten.

%
%
\newpage\subsection{ring}\index{ring}\index{Befehle!ring}
\begin{prog}
ring([ <typ> [, [<start>] [, [<bliste>]
    [, [[#]<len>] [, [<p1>] [, [<p2>]]]]]]])
{ [ <aliste_1>;
   <aliste_2>;
   ... ]

 % nur bei <typ> = "ring", "cpentane", "chair":
 [ vertex([<kante_1>] [, [<kante_2>]
          [, [<bliste_1>] [, [<p1>] ]]]])
   { [<aliste_11>;
      <aliste_12>;
      ... ]
   }
   ... ]
}

<start> := 0..<n-1>
<bliste> := [H|O] [ 0|1|...|<b><btype> <bliste>]
<aliste_i> := C|0|1|...|<n-1> : <fliste>

Defaults: <typ>    = "ring"
         <start>  = 0
         <bliste> = O
         <len>    = N
         <p1>     = 6
         <p2>     = -90
\end{prog}
Der Befehl dient zur Erzeugung vorgefertigter Ringstrukturen. Die erweiterte
Syntax mit \verb+vertex+ ist nur bei den angegebenen Ringtypen m"oglich.

\subsection*{Fixe Parameter}
Der Parameter \verb+typ+ bestimmt gem"a"s nachfolgender Kodierung,
welches Grundger"ust gezeichnet wird:

{\centering\begin{chemistry}
 formula(L,R,"ring",HA,48)
 { ring(,,,L){}}

 formula(L,R,"cpentane",HA,48)
 { ring("cpentane",,,L){}}

 formula(L,R,"chair",HA,48)
 { ring("chair",,,L){}}

 formula(L,R,"newman",HA,48)
 { ring("newman",,,L){}}
\end{chemistry}
}

Obige Liste enth"alt die im Compilercore definierten Ringstrukturen; mit Hilfe
des Befehls $\to$\verb+require+ k"onnen Sie jedoch eine Bibliothek aus extern
definierten Ringstrukturen aufbauen und bei Bedarf hinzuladen. M"oglichkeiten,
f"unfgliedrige Ringe in Stereodarstellung "ahnlich \verb+chair+ zu erzeugen,
sind bei den Steroiden in Abschnitt~\ref{sec:zucker} des Tutorials sowie der
Befehlsreferenz zu \verb+restoreXY+ gezeigt worden.
\index{Stereodarstellung!Zyklohexan}\index{Zyklohexan}\index{Zyklohexan!Stereodarstellung}

Die Anordnung der Bindungen bei den Richtungstypen \verb+r+, \verb+t+ und
\verb+b+ des Befehls \verb+bond+ wird in den nachfolgenden Formeln gezeigt.
\verb+t+-Bindungen werden durch dicke, \verb+b+-Bindungen durch gestrichelte
Linien symbolisiert.

\begin{chemistry}
 formula(L,R,"radial",HR,24)
 { ring(,,H,L){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring(,,H,L){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o);}
 }

 formula(L,R,"radial",HR,24)
 { ring("newman",,,L,30){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("newman",,,L,30){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o);}
 }

 formula(L,R,"radial",HR,24)
 { ring("cpentane",,H,L,,0){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("cpentane",,H,L,,0){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o);}
 }
\end{chemistry}

\begin{chemistry}
 goto XY(0,150)
 formula(C,C,"radial, p=1",HR,24)
 { ring("chair",,H,L,1){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r);}
 }
 goto XY(100,150)
 formula(C,C,"top/bottom, p=1",HR,24)
 { ring("chair",,H,L,1){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o);}
 }

 goto XY(0,75)
 formula(C,C,"radial, p=0",HR,24)
 { ring("chair",,H,L,0){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r);}
 }
 goto XY(100,75)
 formula(C,C,"top/bottom, p=0",HR,24)
 { ring("chair",,H,L,0){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o);}
 }

 goto XY(0,0)
 formula(C,C,"radial, p=-1",HR,24)
 { ring("chair",,H,L,-1){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r);}
 }
 goto XY(100,0)
 formula(C,C,"top/bottom, p=-1",HR,24)
 { ring("chair",,H,L,-1){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o);}
 }
\end{chemistry}


Einige der Parameter besitzen eine feststehende Bedeutung, bei anderen variiert
diese je nach dem zugrundeliegenden Ger"ust. Fixe Bedeutung kommt den Parametern
\verb+<start>+ und \verb+<bliste>+ zu. Mit dem ersten Wert, der zwischen Null
und der Anzahl der Atome im Ger"ust minus Eins variieren kann, legen Sie die
relative Lage des Ger"ustes zum aktuellen Startpunkt fest, das hei"st, welches
Atom am augenblicklichen Zeichenpunkt liegt. Ist die Ringstruktur das erste
Element der Formel, ist dieser Parameter ohne Bedeutung, da der Ring das Basiselement
der Formel wird. Haben Sie jedoch bereits Bindungen erzeugt, geben Sie hiermit
das Zielatom der letzten Bindung an. Die Numerierung der einzelnen Ger"uste
ist im folgenden gezeigt:

{\centering\begin{chemistry}
 gotoXY(0,0)
 formula(C,C)
 { ring(,,H,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");      5: atom("5");
   }
 }

 gotoXY(70,0)
 formula(C,C)
 { ring("cpentane",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");
   }
 }

 gotoXY(140,0)
 formula(C,C)
 { ring("chair",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");      5: atom("5");
   }
 }

 gotoXY(210,0)
 formula(C,C)
 { ring("newman",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");      5: atom("5");
   }
 }
\end{chemistry}
}

Als Grundregel f"ur einfache n-gliedrige Ringe und die meisten anderen
Grundger"uste gilt: die Nummern werden im Uhrzeigersinne gr"o"ser, das Atom mit
der Nummer Null liegt auf der positiven x-Achse oder ist um einen Winkel, der
typspezifisch ist (-90\textdegree{} f"ur den Typ \verb+ring+), im Uhrzeigersinne
gedreht. Bei einigen Grundger"usten kann die Reihenfolge der Nummern abweichen.

Beachten Sie bei den folgenden Anwendungsm"oglichkeiten,
da"s \verb+ring+ den aktuellen Startpunkt nicht ver"andert, was in der
letzten Formel ausgiebig verwandt wird, um die drei Ringe zu zeichnen, ohne
einige von ihnen als Substituenten der anderen betrachten zu m"ussen:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C)
 { bond(150;-150) ring(,4){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C)
 { bond(150; -150) ring(,4){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C)
 { bond(-150; -90) ring(,3){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C)
 { bond(-150; -90) ring(,3){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C)
 { bond(30,=C) ring("cpentane",1){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C)
 { bond(30,=C) ring("cpentane",1){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C)
 { ring(,4,H){} ring(,2,H){} ring(,0,H){}
   atom("N")
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C)
 { ring(,4,H){} ring(,2,H){} ring(,0,H){}
   atom("N")
 }
\end{prog}
\end{minipage}

Die Numerierung dient auch zur Kenntlichmachung, welcher Substituent
an welchem Ringatom beginnt (Nummern in \verb+<aliste>+).


Mit der \textit{Bindungsliste} \verb+<bliste>+ variieren Sie die Bindungsarten,
die beim Aufbau des Ger"ustes eingesetzt werden. Sie besteht aus einer Folge
von Paaren aus Bindungsnummer und Bindungstyp. Die Bindungsnummer beginnt bei
Null und kann bis zu Eins kleiner als die Anzahl der Bindungen im Ring
"uberhaupt sein. Die Zuordnung der Bindungsnummer zu den einzelnen Bindungen
ist folgende:

\begin{chemistry}
 gotoXY(0,0)
 formula(C,C)
 { ring(,,,L)
   { 0: bond(v(0),s,S) atom("0");      1: bond(v(1),s,S) atom("1");
     2: bond(v(2),s,S) atom("2");      3: bond(v(3),s,S) atom("3");
     4: bond(v(4),s,S) atom("4");      5: bond(v(5),s,S) atom("5");
   }
 }

 gotoXY(70,0)
 formula(C,C)
 { ring("cpentane",,,L)
   { 0: bond(v(0),s,S) atom("0");      1: bond(v(1),s,S) atom("1");
     2: bond(v(2),s,S) atom("2");      3: bond(v(3),s,S) atom("3");
     4: bond(v(4),s,S) atom("4");
   }
 }

 gotoXY(140,0)
 formula(C,C)
 { ring("chair",,,L)
   { 0: bond(v(0),s,S) atom("0");      1: bond(v(1),s,S) atom("1");
     2: bond(v(2),s,S) atom("2");      3: bond(v(3),s,S) atom("3");
     4: bond(v(4),s,S) atom("4");      5: bond(v(5),s,S) atom("5");
   }
 }

 gotoXY(210,0)
 formula(C,C)
 { ring("newman",,,L)
   { 0: bond(v(0),s,S) atom("0");      1: bond(v(1),s,S) atom("1");
     2: bond(v(2),s,S) atom("2");      3: bond(v(3),s,S) atom("3");
     4: bond(v(4),s,S) atom("4");      5: bond(v(5),s,S) atom("5");
   }
 }
\end{chemistry}

Die Angabe des Bindungstyps kennen Sie bereits vom Befehl \verb+bond+ her.
Da die Angabe eines oder mehrerer Bindungstypen nicht automatisch das
Zeichnen eines Aromatenringes unterbindet, m"ussen Sie dies gegebenenfalls
zus"atzlich anweisen.
F"ur diesen Zweck stehen die zus"atzlichen Typen \verb+H+ f"ur
ges"attigte (Ring wird nicht gezeichnet) und \verb+O+ f"ur
aromatische Kerne (Ring wird gezeichnet) zur Verf"ugung. Diese Angaben m"ussen vor
einer eventuellen Bindungsliste stehen!
Einige Beispiele m"ogen die Bindungsliste verdeutlichen:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C){ ring(,,H){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C){ ring(,,H){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C){ ring(,,H0=2=4=){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C){ ring(,,H0=2=4=){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C){ ring("cpentane",,0=){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C){ ring("cpentane",,0=){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C){ ring(,,H1=4s){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C){ ring(,,H1=4s){} }
\end{prog}
\end{minipage}


Der Parameter \verb+<len>+ kodiert die Gr"o"se des Ringes. Die Defaulteinstellung
\verb+N+ entspricht bei Polygonen dem Radius des zugrundeliegenden Kreises, bei
anderen Ger"usten der L"ange der Hauptbindungen. Ist es geometrisch m"oglich,
erhalten alle Bindungen diese L"ange, ansonst die gr"o"stm"ogliche Anzahl.
Bei Polygonen folgt aus der Festlegung des Radius als Grundlage, da"s die
Kantenl"ange bei Dreiecken erheblich gr"o"ser ist als bei Neunecken. W"unschen
Sie die \textit{Kantenl"ange} festzulegen, m"ussen Sie die Gr"o"senvariante
mit \verb+#+ verwenden, siehe unten.

Eine Abweichung vom Normalwert der Ringgr"o"se ist besonders bei komplizierten
Ger"usten wie dem Zyklohexan sinnvoll:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring("chair",,,S){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring("chair",,,S){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring("chair",,,N){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring("chair",,,N){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring("chair",,,L){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring("chair",,,L){} }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring("chair",,,NN){} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring("chair",,,NN){} }
\end{prog}
\end{minipage}

Die Variante mit einem \verb+#+ vor der Bindungsl"ange ist nur bei Ger"usten
des Typs \verb+ring+ erlaubt und legt fest, da"s \verb+<len>+ nicht dem Radius
des Kreises, sondern der Kantenl"ange des Polygons entspricht. Polygone
unterschiedlicher Eckenzahl weisen dann die festgelegte, gleiche Kantenl"ange
auf. Sinnvoll ist dies, wenn kondensierte Ringe unterschiedliche Gliederzahl
aufweisen, wie der Vergleich zeigt:

\begin{minipage}{5cm}
\begin{chemistry}
 gotoXY(0,0)
 formula(C,C) { ring(,5){}
                ring(,2,,,5,0){}
              }

 gotoXY(60,0)
 formula(C,C) { ring(,5,,#N){}
                ring(,2,,#N,5,0){}
              }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 gotoXY(0,0)
 formula(C,C) { ring(,5){}
                ring(,2,,,5,0){}
              }

 gotoXY(60,0)
 formula(C,C) { ring(,5,,#N){}
                ring(,2,,#N,5,0){}
              }
\end{prog}
\end{minipage}

In der Grundform sind die Kantenl"angen eines Sechsringes etwas k"urzer als
die eines F"unfringes, was beim Kondensieren der Systeme deutlich auff"allt
(noch extremer bei Dreiringen). In einem solchen Falle mu"s deswegen jeder
der beteiligten Ringe eine konstante Kantenl"ange aufweisen, mit \verb+#N+
angezeigt.


\subsection*{Variable Parameter}
Die Angaben \verb+<p1>+ und \verb+<p2>+ haben je nach dem Ger"usttyp
unterschiedliche Bedeutung.
\begin{description}
\item[ring] Bei diesem Grundger"ust haben sie die Bedeutung der Anzahl
der Ecken des
Ringes (Default ist 6 f"ur einen Benzenring) und eines Winkels in Altgraden,
um den der Ring gedreht ist. Bezugsachse ist hierbei die positive x-Achse,
der Drehsinn mathematisch negativ (Uhrzeigersinn).
Der Defaultwert von -90\textdegree{} sorgt daf"ur,
da"s der Benzenring auf der Ecke mit der Nummer 0 steht. Die wichtigsten
alizyklischen Grundk"orper k"onnen wie folgt gesetzt werden:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring(,,H,,3,90){ 0: atom("0"); } }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring(,,H,,3,90)
                { 0: atom("0"); } }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring(,,H,,4,-45){ 0: atom("0"); } }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring(,,H,,4,-45)
                { 0: atom("0"); } }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring(,,H,,5,-90){ 0: atom("0"); } }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring(,,H,,5,-90)
                { 0: atom("0"); } }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring(,,H,,6,-90){ 0: atom("0"); } }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring(,,H,,6,-90)
                { 0: atom("0"); } }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C) { ring(,,H,,7,90){ 0: atom("0"); } }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C) { ring(,,H,,7,90)
                { 0: atom("0"); } }
\end{prog}
\end{minipage}

Einige wichtige Winkel im Zusammenhang mit diesen grundlegenden Polygonen
sind in den folgenden Formeln angegeben. Die Winkel gelten f"ur die Bindung
in Pfeilrichtung vom n"achsten Ringatom aus. Sind die Ringe gedreht, so ist der
Drehwinkel zu den angegebenen Werten zu addieren.

\begin{fullpage}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,,5,0)
   { 0: bond(0,->) atom("0$^o$");       1: bond(-72,->) atom("-72$^o$");
     2: bond(-144,->) atom("-144$^o$"); 3: bond(144,->) atom("144$^o$");
     4: bond(72,->) atom("72$^o$");
   }
 }
 formula(L,R)
 { ring(,,H,,5,0)
   { 0: bond(54,->) atom("54$^o$");    1: bond(-18,->) atom("-18$^o$");
     2: bond(-90,->) atom("-90$^o$");  3: bond(-162,->) atom("-162$^o$");
     4: bond(126,->) atom("126$^o$");
   }
 }
 formula(L,R)
 { ring(,,H,,5,0)
   { 0: bond(-54,->) atom("-54$^o$");  1: bond(-126,->) atom("-126$^o$");
     2: bond(162,->) atom("162$^o$");  3: bond(90,->) atom("90$^o$");
     4: bond(18,->) atom("18$^o$");
   }
 }

 formula(L,R)
 { ring(,,H,,6,0)
   { 0: bond(0,->) atom("0$^o$");       1: bond(-60,->) atom("-60$^o$");
     2: bond(-120,->) atom("-120$^o$"); 3: bond(180,->) atom("180$^o$");
     4: bond(120,->) atom("120$^o$");   5: bond(60,->) atom("60$^o$");
   }
 }
 formula(L,R)
 { ring(,,H,,6,0)
   { 0: bond(60,->) atom("60$^o$");    1: bond(0,->) atom("0$^o$");
     2: bond(-60,->) atom("-60$^o$");  3: bond(-120,->) atom("-120$^o$");
     4: bond(180,->) atom("180$^o$");  5: bond(120,->) atom("120$^o$");
   }
 }
 formula(L,R)
 { ring(,,H,,6,0)
   { 0: bond(-60,->) atom("-60$^o$");  1: bond(-120,->) atom("-120$^o$");
     2: bond(180,->) atom("180$^o$");  3: bond(120,->) atom("120$^o$");
     4: bond(60,->) atom("60$^o$");    5: bond(0,->) atom("0$^o$");
   }
 }

 formula(L,R)
 { ring(,,H,,7,0)
   { 0: bond(0,->) atom("0$^o$");       1: bond(-51,->) atom("-51$^o$");
     2: bond(-103,->) atom("-103$^o$"); 3: bond(-154,->) atom("-154$^o$");
     4: bond(154,->) atom("154$^o$");   5: bond(103,->) atom("103$^o$");
     6: bond(51,->) atom("51$^o$");
   }
 }
\end{chemistry}
\end{fullpage}


\item[cpentane] Der Parameter \verb+<p1>+ ist ohne Bedeutung, \verb+<p2>+
stellt wie beim Grundger"ust \verb+ring+ den Drehwinkel des gesamten
Ringes dar.

\item[chair] \verb+<p2>+ stellt wie beim Grundger"ust \verb+ring+ den Drehwinkel
des gesamten Ringes dar. \verb+<p1>+ kodiert mit den drei
m"oglichen Werten $1$, $0$ und $-1$ die beiden Sessel- und twist-Konformeren:

\begin{chemistry}[chair]
 formula(L,R,"$p_1=1$",HA,24)
 { ring("chair"){} }

 formula(L,R,"$p_1=0$",HA,24)
 { ring("chair",,,,0){} }

 formula(L,R,"$p_1= -1$",HA,24)
 { ring("chair",,,,-1){} }
\end{chemistry}

\item[newman] Dieses Ger"ust entspricht dem axialen Blick auf eine Einfachbindung
(Darstellung in der Newman-Projektion).
Vom vorderen Atom ausgehende Bindungen zweigen unter den festen Winkeln
90\textdegree, 210\textdegree{} und 330\textdegree{} ab. Die Bindungen des hinteren
Atoms werden um den Winkel \verb+p1+ verdreht dargestellt:

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"syn",HA,36)
 { ring("newman",,,L,-20){ 0: atom("Br");
                           3: atom("Br");} }

 formula(L,R, "anti",HA,36)
 { ring("newman",,,L,180){ 0: atom("Br");
                           3: atom("Br");} }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"syn",HA,36)
 { ring("newman",,,L,-20){ 0: atom("Br");
                           3: atom("Br");} }

 formula(L,R, "anti",HA,36)
 { ring("newman",,,L,180){ 0: atom("Br");
                           3: atom("Br");} }
\end{prog}
\end{minipage}

\end{description}

\subsection*{Substituenten}
Mit den einzelnen \verb+<aliste_i>+"=Komponenten im Rumpf des Befehls spezifizieren
Sie Substituenten, die ihren Ursprung im i-ten Ringatom haben. Die Numerierung
der Ringatome wurde bereits im Zusammenhang mit \verb+<start>+ vorgestellt.
Die Substituenten k"onnen einzelne Bindungen, weitere Ringe oder Kombinationen
aus allen Formelelementen sein. Beispiele:

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring()
   { 1: bond(r) atom("H$_2$N",R);
     4: bond(r) atom("N=N",L,R) bond(r-) ring(,2){};
     3: bond(r) atom("O",C,R) atom("H",L);     %// 20-01-2000 IK
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring()
   { 1: bond(r) atom("H$_2$N",R);
     4: bond(r) atom("N=N",L,R) bond(r-) ring(,2){};
     3: bond(r) atom("O",C,R) atom("H",L);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring("cpentane",,2=4=)
   { 0: atom("N");
     1: atom("N") bond(r) atom("H");
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring("cpentane",,2=4=)
   { 0: atom("N");
     1: atom("N") bond(r) atom("H");
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,,5,0)
   { 2: bond(r,<<) atom("Br");
     3: bond(r,<.) atom("Br");
   }
 }
 formula(L,R)
 { bond(150)
   ring("newman",3)
   { 0: atom("Br");
     1: bond(30,t);
     4: atom("Br");
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,5,0)
   { 2: bond(r,<<) atom("Br");
     3: bond(r,<.) atom("Br");
   }
 }
 formula(L,R)
 { bond(150)
   ring("newman",3)
   { 0: atom("Br");
     1: bond(30,t);
     4: atom("Br");
   }
 }
\end{prog}
\end{minipage}\end{fullpage}


\subsection*{Der \texttt{vertex}-Befehl}
Bei den Ringtypen, die einen Drehwinkel unterst"utzen, ist eine erweiterte
Syntax mit \verb+vertex+"=Befehlen
m"oglich. Diese dienen dazu, weitere Ringe "uber eine Kante mit dem aktuellen
Ring zu verkn"upfen. \verb+<kante_1>+ und \verb+<kante_2>+ kodieren die
betroffenen Kanten des Basisringes (des aktuellen Ringes) und des zweiten
Ringes in Form der Zahlen, die auch zum Aufbau der Bindungsliste benutzt
werden. \verb+<bliste_1>+ ist die Bindungsliste f"ur den neuen Ring, der
ebenfalls nur vom Typ \verb+ring+ sein darf. \verb+<p1>+ schlie"slich ist die
Ringgr"o"se des neuen Ringes.

Der Rumpf des \verb+vertex+-Befehls ist identisch zum Rumpf von \verb+ring+,
das hei"st es k"onnen, durch Positionszahlen spezifiziert, Substituenten oder
auch weitere \verb+vertex+"=Befehle eingesetzt werden. Einige Beispiele
sollen den Einsatz verdeutlichen.

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Triphenylen",HR,24)
 { ring(){ vertex(,0){};
           vertex(,2){};
           vertex(,4){}; }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Triphenylen",HR,24)
 { ring(){ vertex(,0){};
           vertex(,2){};
           vertex(,4){}; }
 }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring(,,H,,5,90)
   {
     vertex(,1,3,H0=,5){ 0: bond(r); };
     vertex(,3,1,H0=,6){};
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring(,,H,,5,90)
   {
     vertex(,1,3,H0=,5){ 0: bond(r); };
     vertex(,3,1,H0=,6){};
   }
 }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring("cpentane",,,L)
   { vertex("cpentane",3,1,H3=){3: bond(r); vertex(,4,0,H){};};
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring("cpentane",,,L)
   { vertex("cpentane",3,1,H3=)
     {3: bond(r); vertex(,4,0,H){};};
   }
 }
\end{prog}
\end{minipage}

\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { ring("cpentane",,,,,0)
   { vertex("cpentane",2,2,H0=){3: bond(b); vertex(,4,0,H,5){};};
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { ring("cpentane",,,,,0)
   { vertex("cpentane",2,2,H0=)
     {3: bond(b); vertex(,4,0,H,5){};};
   }
 }
\end{prog}
\end{minipage}


\subsection*{Symbolische Drehwinkel}
Bei den Ringtypen \verb+ring+ und \verb+cpentane+ sind anstelle ganzer Zahlen auch
die symbolischen Angaben \verb+r+, \verb+t+ und \verb+b+ f"ur den Drehwinkel
\verb+<p2>+ m"oglich. "Ahnlich den analogen Angaben des \verb+bond+"=Befehls, werden
auch an dieser Stelle die Winkel der radialen beziehungsweise tangentialen Bindungen
kodiert: der Drehwinkel des Ringes wird so bestimmt, da"s die letzte gezeichnete
Bindung, die zum spezifizierten Startatom f"uhrt, in der symbolischen Relation
zum Ring steht:
\index{Substituent!Phenyl}\index{Phenylsubstituent}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Tetraphenylarsol",HR,24)
 { ring(,,H1=3=,,5,90)
   { 0: atom("As");
     1: bond(r) ring(,,,,,r){};
     2: bond(r) ring(,,,,,r){};
     3: bond(r) ring(,,,,,r){};
     4: bond(r) ring(,,,,,r){};
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Tetraphenylarsol",HR,24)
 { ring(,,H1=3=,,5,90)
   { 0: atom("As");
     1: bond(r) ring(,,,,,r){};
     2: bond(r) ring(,,,,,r){};
     3: bond(r) ring(,,,,,r){};
     4: bond(r) ring(,,,,,r){}; }
 }
\end{prog}
\end{minipage}\end{fullpage}

Weitere Beispiele f"ur symbolische Drehwinkel sind im Tutorial zu finden.


%
%
\newpage\subsection{save}\index{save}\index{Befehle!save}
\begin{prog}
save(#<n>)
\end{prog}

Dieser Befehl sichert die beim Formelsatz benutzten graphischen Parameter
unter der ganzen Zahl \verb+<n>+. Sie verwenden den Befehl, wenn Sie
mit $\to$\verb+set+ lokale "Anderungen am  Parametersatz vornehmen wollen
und die Originalwerte  wieder ben"otigen ($\to$\verb+restore+).
Beispiele zu diesem Befehl finden Sie im Tutorial, Abschnitt~\ref{sec:param}.


%
%
\subsection{savecontext}\index{savecontext}\index{Befehle!savecontext}
\begin{prog}
savecontext(#<n>)
\end{prog}
Mit diesem Befehl wird der Kontext, der durch die zuletzt dargestellte Formel
festgelegt wird, unter einer Nummer \verb+<n>+ gespeichert. Sie k"onnen so
sp"ater auf diesen Formelkontext zur"uckgreifen ($\to$\verb+setcontext+),
um zum Beispiel Abzweigungen im Schema zu erzeugen, auch wenn bereits andere
Formeln gezeichnet wurden.


%
%
\newpage\subsection{saveXY}\index{saveXY}\index{Befehle!saveXY}
\index{Naturstoffe}\index{Atropin}\index{Ringe!irregul""ar}\index{Polyzyklen}
\begin{prog}
saveXY(#<n>)
saveXY(#<n>, <iAngle>, <Len>)
\end{prog}
Der Befehl speichert in der oberen Syntaxvariante die aktuellen Koordinaten
unter der Nummer \verb+<n>+. Die erweiterte, untere Syntax speichert die Koordinaten
eines Punktes, der vom aktuellen Punkt um die L"ange \verb+<Len>+ in Richtung
des Winkels \verb+<iAngle>+ verschoben ist. Beide Angaben entsprechen denen
des \verb+bond+"=Befehls. Der aktuelle Punkt wird dabei \textit{nicht}
verschoben.

\subsubsection*{Einfache Syntax}
Sie benutzen den gespeicherten Punkt, um sp"ater mit \verb+bond(#<n>)+ eine
Bindung von einem anderen Atom zu diesem Punkt zu zeichnen, ohne die
Richtung und L"ange der Bindung angeben zu m"ussen. Sie k"onnen
so auf einfache Weise polyzyklische und irregul"are Ger"uste, wie sie f"ur
Naturstoffe typisch sind, generieren. Das  Tropin und Nor-Pinan sind als
Grundger"uste in \verb+bicyclib.pm+ vorhanden, hier soll
jedoch gezeigt werden, wie Sie sich behelfen k"onnen, falls ein Ger"ust nicht
in einer Bibliothek zu finden ist:\index{Thujan}
\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"Desoxy-Tropin",HA,36)
 { ring("chair",,,L)
   { 0: atom("N") bond(150) atom("H");
     1: bond(-100) saveXY(#1);
     5: bond(-100,t; #1,t);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"Desoxy-Tropin",HA,36)
 { ring("chair",,,L)
   { 0: atom("N") bond(150) atom("H");
     1: bond(-100) saveXY(#1);
     5: bond(-100,t; #1,t); }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Nor-Pinan",HA,36)
 { ring(,,H)
   { 2: saveXY(#1);
     0: bond(90; #1);
   }
 }

 space(R)
 formula(L,R)
 { ring("chair",,,L,-1)
   { 2: saveXY(#1);
     4: bond(-60,t; #1);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Nor-Pinan",HA,36)
 { ring(,,H)
   { 2: saveXY(#1);
     0: bond(90; #1); }
 }
 space(R)
 formula(L,R)
 { ring("chair",,,L,-1)
   { 2: saveXY(#1);
     4: bond(-60,t; #1); }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"7,8,9-Trinor-thujan",HR,24)
 { ring(,,H)
   { 3: bond(r);
     4: saveXY(#1);
     0: bond(#1);
   }
 }
 space(R)
 formula(L,R,"Thujan",HR,24)
 { ring(,,H0t1t,,5,0)
   { 4: bond(90);
     1: saveXY(#1);
     0: bond(90; #1,p; -60)
        branch { bond(30); bond(-90); };
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"7,8,9-Trinor-thujan",HR,24)
 { ring(,,H)
   { 3: bond(r);
     4: saveXY(#1);
     0: bond(#1); }
 }
 space(R)
 formula(L,R,"Thujan",HR,24)
 { ring(,,H0t1t,,5,0)
   { 4: bond(90);
     1: saveXY(#1);
     0: bond(90; #1,p; -60)
        branch { bond(30); bond(-90); };
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"Nor-Caran",HA,36)
 { ring(,,H)
   { 1: saveXY(#1);
     0: bond(-150; #1);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"Nor-Caran",HA,36)
 { ring(,,H)
   { 1: saveXY(#1);
     0: bond(-150; #1);  }
 }
\end{prog}
\end{minipage}\end{fullpage}

Da die Thujan- und Caranger"uste in planarer Darstellung regul"are
Bindungswinkel und -l"angen aufweisen, k"onnen sie einfach wie folgt
formuliert werden:
\begin{prog}
\begin{chemistry}[savexy2]
 formula(L,R,"Nor-Pinan",HA,36)
 { ring(,,H){ 0: bond(90; 150); } }

 formula(L,R,"Nor-Caran",HA,36)
 { ring(,,H){ 0: bond(-150; 90); } }
\end{chemistry}
\end{prog}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"(-)-(1S,5R)-Frontalin",HA,36)
 { ring("chair",,,L)
   { 3: bond(t);
     3: bond(b,t) atom("O") saveXY(#1);
     4: atom("O");
     5: bond(t);
     5: bond(b,t; #1,t);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"(-)-(1S,5R)-Frontalin",HA,36)
 { ring("chair",,,L)
   { 3: bond(t);
     3: bond(b,t) atom("O") saveXY(#1);
     4: atom("O");
     5: bond(t);
     5: bond(b,t; #1,t); }
 }
\end{prog}
\end{minipage}\end{fullpage}

Die Zusammenarbeit mit dem Befehl $\to$\verb+restoreXY+ erweitert die
M"oglichkeiten, irregul"are Naturstoffger"uste aufzubauen, erheblich;
siehe Befehlsbeschreibung zu \verb+restoreXY+.
Beachten Sie, da"s der G"ultigkeitsbereich der gespeicherten Punkte mit
der aktuellen Formel nicht automatisch endet, soda"s eine sp"atere irrt"umliche
Verwendung dieses Punktes ohne erneute Zuweisung auf eine dann falsche Formel
verweist! Sie k"onnen sich dies nat"urlich zunutze machen, wenn Sie zwei
Formeln miteinander verkn"upfen wollen, zum Beispiel den Elektronen"ubergang
darstellen oder etwas besonders Trickreiches planen.

\subsubsection*{Erweitere Syntax}
Diese Befehlsvariante ist vor allem bei der Darstellung von
Elektronenverschiebungen von Interesse, entsprechende Beispiele sind bei
\verb+emove+ sowie im Tutorial, Abschnitt~\ref{sec:emove} zu finden. In einem
anderem Zusammenhang ist diese Variante brauchbar, wenn Sie unkompliziert Punkte
neben der Hauptlinie der Formel markieren m"ussen, ein Beispiel w"aren
Ladungssymbole neben einer Alkankette:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { bond(-30) saveXY(#1,-90,n)
   bond(30; -30,=; 30)
   bond(90) saveXY(#2,45,N)
   atom("O")
   restoreXY(#1) atom("$\oplus$")
   restoreXY(#2) atom("$\ominus$")
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{.5\textwidth}
\begin{prog}
 formula(L,R)
 { bond(-30) saveXY(#1,-90,n)
   bond(30; -30,=; 30)
   bond(90) saveXY(#2,45,N)
   atom("O")
   restoreXY(#1) atom("$\oplus$")
   restoreXY(#2) atom("$\ominus$")
 }
\end{prog}
\end{minipage}
\end{fullpage}


%
%
\newpage\subsection{scale}\index{scale}\index{Befehle!scale}
\begin{prog}
scale(<p>)
\end{prog}

Der Befehl skaliert alle internen graphischen Parameter mit dem Faktor \verb+<p>+.
\verb+<p>+ ist eine Angabe des Bruchteils; um die Formeln auf 70\% zu
verkleinern, schreiben Sie daher
\begin{prog}
scale(0.7)
\end{prog}

Zahlen gr"o"ser als 1 f"uhren zu einer Vergr"o"serung, Zahlen unter 1 zu einer
Verkleinerung der folgenden Zeichnung.

Der Befehl wird im allgemeinen innerhalb eines $\to$\verb+save+/\verb+restore+"=Paares
angewandt, um die Originalwerte wieder reaktivieren zu k"onnen. Als Beispiel
soll eine Hilfsreaktion auf einem Reaktionspfeil verkleinert dargestellt werden:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}[scale]
 formula(L,R)
 { ring(){} }

 arrow()
 { text(T,L)
   { save(#1)
     scale(0.8)
     formula(T,B){ bond(30; -30)atom("COOH",L) }
     arrow(-90)
     { text(T,L) { formula(C,C){ atom("SOCl$_2$") } } }
     formula(T,B){ bond(30; -30)atom("COCl",L) }
     restore(#1)
   }
 }

 formula(L,R)
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O"); }
        bond(r-; r);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{.5\textwidth}
\begin{prog}
\begin{chemistry}[scale]
 formula(L,R)
 { ring(){} }

 arrow()
 { text(T,L)
   { save(#1)
     scale(0.8)
     formula(T,B){ bond(30; -30)atom("COOH",L) }
     arrow(-90)
     { text(T,L) { formula(C,C){ atom("SOCl$_2$") } } }
     formula(T,B){ bond(30; -30)atom("COCl",L) }
     restore(#1)
   }
 }

 formula(L,R)
 { ring()
   { 4: bond(r) branch { bond(r+,=C) atom("O"); }
        bond(r-; r); }
 }
\end{chemistry}
\end{prog}
\end{minipage}
\end{fullpage}



%
%
\newpage\subsection{shiftXY}\index{shiftXY}\index{Befehle!shiftXY}
\begin{prog}
shiftXY([<dx>] [, [<dy>]])

Default: <dx> = 0
        <dy> = 0
\end{prog}
Der Befehl erlaubt es, au"serhalb von Formeln den aktuellen Punkt um die Gr"o"se
\verb+<dx>+ auf der x-Achse, um \verb+<dy>+ auf der y-Achse zu verschieben.
Lassen Sie Angaben fort, findet auf der entsprechenden Achse keine Verschiebung
statt.

Hauptnutzen des Befehls ist es, mehrere Reaktanden, die nicht streng nacheinander
aufgef"adelt erscheinen sollen, sondern eher eine Art "`Wolke"'  bilden,
richtig gegeneinander anzuordnen. Im Gegensatz zu $\to$\verb+gotoXY+ werden jedoch
keine festen Punkte angegeben, sondern nur Relationen. Verschiebungen des
Bezugspunktes (aktueller Punkt) betreffen gleichartig alle relativen
Positionierungen. Es ist zweckm"a"sig, aber nicht notwendig, die Formeln mit den
Positionierungsparametern \verb+C,C+ zu setzen.
Ein Beispiel ist im Tutorial, Abschnitt~\ref{sec:emove},
gegeben. Dort sind drei Reaktanden so zu setzen, da"s zwischen ihnen die
Elektronen"uberg"ange darstellbar sind. Die Zusammenfassung aller "`wild
verteilten"' Reaktanden zu einer Einheit gelingt wieder einmal mit einem
einzeiligen \verb+multiline+"=Kommando.



%
%
\newpage\subsection{set}\index{set}\index{Befehle!set}
\begin{prog}
set(<cPar>, <iVal>)
\end{prog}

Mit diesem Befehl k"onnen Sie jeweils einen der in Tabelle~\ref{tab:param}
aufgelisteten Parameter \verb+<cPar>+, die das Layout des Formelsatzes steuern,
"andern und ihn auf den Wert \verb+<iVal>+ setzen.
Die Wirkung bezieht
sich teilweise auf Satzparameter wie Abst"ande von Formelzeilen zueinander,
teilweise auf Druckparameter wie Linienbreite und Pfeilst"arke. "Anderungen
an Parametern der letztgenannten Gruppe werden in die Ausgabedatei geschrieben.

Mit diesem Befehl vorgenommene "Anderungen sind permament, es ist gegebenenfalls
erforderlich, sie lokal durchzuf"uhren, indem der Parametersatz vor dem
Abschnitt des Programmes, f"ur den sie G"ultigkeit besitzen sollen, unter
einer bestimmten Nummer gespeichert und nach Ende des G"ultigkeitsbereichs unter
dieser Nummer wieder aktiviert wird (Befehle \verb+save+ und \verb+restore+):
\begin{prog}
..
save(#1)
set("rLW", 2)  % erhoehe Linienstaerke
formula...
..
restore(#1)    % hole alte Werte
..            % wieder normale Linienbreite
\end{prog}

Ein Beispiel f"ur eine Anwendung ist im Tutorial, Abschnitt~\ref{sec:param}
gegeben.
\enlargethispage{3\baselineskip}

\begin{table}
\caption{Interne Satzparameter, die mit \texttt{set} ge"andert werden k"onnen.}
\label{tab:param}
\begin{tabularx}{\linewidth}{>{\ttfamily}lX}
\toprule
Parameter & Bedeutung\\\midrule
rLW & Liniendicke f"ur alle Linien wie Bindungen, Kreise, Pfeile und
 sonstige Linien.\\
rBW & Maximale Dicke bei projektiven Bindungsformen.\\
rAW & Dicke der Spitze von Reaktionspfeilen.\\
rBD & Strichelungsmuster f"ur projektive Bindungen.\\
rXS & Horizontaler Abstand von Formeln und Pfeilen zueinander.\\
rXY & Vertikaler Abstand von Formeln und Pfeilen zueinander.\\
rArrowExtend & Zus"atzlicher Abstand, um den ein Reaktionspfeil auf beiden
 Seiten "uber die Beschriftung hinausreicht.\\
rArrowSkip & Abstand der Pfeilbeschriftung vom Pfeil selbst. \\
rChainSep & Abstand von Reaktionsketten zueinander bei den Befehlen
\verb+joinh+ und \verb+joinv+.\\
rMultilineSep & Abstand von Reaktionsketten zueinander beim Befehl
\verb+multiline+.\\
fboxsep & Abstand des Rahmens/Klammer von der Formel.\\
rTextSep & Vertikaler Abstand der Formellegenden von der Unterkante der
tiefsten Formel.\\
iAngleR & Winkel f"ur radiale Bindungen, Symbol \texttt{r}.\\
iAngleT & Winkel f"ur radiale Bindungen, Symbol \texttt{t}.\\
iAngleB & Winkel f"ur radiale Bindungen, Symbol \texttt{b}.\\
\bottomrule
\end{tabularx}
\end{table}


%
%
\newpage\subsection{setcontext}\index{setcontext}\index{Befehle!setcontext}
\begin{prog}
setcontext(#<n>, <pos>)
[nospace]

<pos> := C | L | R | T | B | TL | TR | BL | BR
\end{prog}

Der Befehl legt den unter der Nummer \verb+<n>+ zuvor gespeicherten Kontext
als aktuellen Kontext ab und ermittelt einen Fortsetzungspunkt, der sich
aus der Kontext"=Bounding~Box und dem Positionierungsparameter \verb+<pos>+
ergibt. Haupteinsatzgebiet des Befehls ist das Bilden von Verzweigungen in
Reaktionsketten: in Schema~\ref{fig:conta} wird, vom Azlakton ausgehend,
eine Reaktionskette "`normal"' notiert in der Folge (L,R) -- (L,R) -- (L,TR).
Damit vom Azlakton noch ein zweiter Kettenstrang abzweigen kann, mu"s zun"achst
nach Satz der Laktonformel deren Kontext gespeichert ($\to$\verb+savecontext+)
und nach Ende der ersten Kette wieder aktiviert werden. Da die zweite Kette
nach rechts unten verlaufen soll, wird als Positionierung dabei \verb+BR+
angegeben:
\begin{prog}
\begin{chemistry}[cont1]
multiline(1)
{ formula(L,R, "Hippurs""aure")
 { ring(,,H3s4=C,,5)
   { 0: bond(r) ring(,3){};
     1: atom("N") bond(r) atom("H");
     3: atom("COOH",L,C);
     4: atom("O"); }
 }

 arrow()
 { text(T,L) { formula(C,C){ atom("- H$_2$O") } } }

 formula(L,R, "Azlacton")
 { ring(,,H0=,,5)
   { 0: bond(r) ring(,3){};
     1: atom("N");
     3: bond(r,=C) atom("O");
     4: atom("O"); }
 }
 savecontext(#1);
}

setcontext(#1,R)
arrow(){ text(T,L) { formula(C,C){ atom("R-CHO") } } }

formula(L,TR)
{ ring("cpentane",,0=)
 { 0: bond(r) ring(,3){};
   1: atom("N");
   2: bond(r,=U) bond(-150) atom("R");
   3: bond(r,=C) atom("O");
   4: atom("O");
 }
}
savecontext(#2)

arrow(45)
{ text(T,L){ formula(C,C){ atom("3 H$_2$O") } }
}

formula(L,R,"$\alpha$-Aminos""aure", HR, 24)
{ atom("H$_2$",C,R) atom("N",L,C) bond(90)
 branch
 { bond(150; -150) atom("R");
   bond(30) atom("COOH",L,R);
 }
}

setcontext(#2,BR)
arrow(-45)
{ text(T,L){ formula(C,C){ atom("1. H$_2$") } }
 text(B,L){ formula(C,C){ atom("2. H$_2$O") } }
}

formula(L,R,"2-Oxos""aure", HR, 24)
{ atom("O") bond(90,=C)
 branch
 { bond(150; -150) atom("R");
   bond(30) atom("COOH",L,R);
 }
}
\end{chemistry}
\end{prog}

Sie k"onnen durch Speichern mehrerer Kontexte und durch Verwendung mehrerer
\verb+setcontext+"=Befehle verschiedene Kettenverzweigungen formulieren sowie
von einer Formel mehrere Ketten abzweigen lassen, was im Tutorial,
Abschnitt~\ref{sec:branch}, ausf"uhrlich erl"autert wird.


\begin{schema}
\begin{fullpage}
\begin{chemistry}[cont1]
multiline(1){
formula(L,R, "Hippurs""aure")
{ ring(,,H3s4=C,,5)
 { 0: bond(r) ring(,3){};
   1: atom("N") bond(r) atom("H");
   3: atom("COOH",L,C);
   4: atom("O");
 }
}

arrow()
{ text(T,L) { formula(C,C){ atom("- H$_2$O") } }
}

formula(L,R, "Azlacton")
{ ring(,,H0=,,5)
 { 0: bond(r) ring(,3){};
   1: atom("N");
   3: bond(r,=C) atom("O");
   4: atom("O");
 }
}
savecontext(#1)
;}

setcontext(#1,R)
arrow()
{ text(T,L) { formula(C,C){ atom("R-CHO") } } }
formula(L,TR)
{ ring("cpentane",,0=)
 { 0: bond(r) ring(,3){};
   1: atom("N");
   2: bond(r,=U) bond(-150) atom("R");
   3: bond(r,=C) atom("O");
   4: atom("O");
 }
}
savecontext(#2)

arrow(45)
{ text(T,L){ formula(C,C){ atom("3 H$_2$O") } }
}

formula(L,R,"$\alpha$-Aminos""aure", HR, 24)
{ atom("H$_2$",C,R) atom("N",L,C) bond(90)
 branch
 { bond(150; -150) atom("R");
   bond(30) atom("COOH",L,R);
 }
}

setcontext(#2,BR)
arrow(-45)
{ text(T,L){ formula(C,C){ atom("1. H$_2$") } }
 text(B,L){ formula(C,C){ atom("2. H$_2$O") } }
}

formula(L,R,"2-Oxos""aure", HR, 24)
{ atom("O") bond(90,=C)
 branch
 { bond(150; -150) atom("R");
   bond(30) atom("COOH",L,R);
 }
}
\end{chemistry}
\caption{Mehrere Reaktionsketten zweigen von derselben Formel ab. Der Kontext
dieser Formel mu"s daf"ur gespeichert werden.\label{fig:conta}}
\end{fullpage}
\end{schema}

%
%
\newpage\subsection{space}\index{space}\index{Befehle!space}\index{Abstand}
\begin{prog}
space(<pos>)

<pos> := C | L | R | T | B | TL | TR | BL | BR
\end{prog}
Mit diesem Befehl k"onnen Sie zus"atzlichen Zwischenraum in der durch
\verb+<pos>+ spezifizierten Richtung einf"ugen --~oder in Form eines
gezielten R"uckschrittes wieder entfernen. (Nach einem Pfeil oder einer Formel
ist dies in der Fortsetzungsrichtung mit \verb+nospace+ m"oglich.)



%
%
\newpage\section{Sonderbefehle}\label{sec:cmd}
%IK 19.1.2000 begin
Die in diesem Abschnitt enthaltenen Kommandos d"urfen keinesfalls innerhalb
einer \verb+chemistry+"=Umgebung in \LaTeX-Dokumenten auftreten. Einige von ihnen sind
Bestandteil des eigentlichen Sourcefiles, das w"ahrend der Bearbeitung von
\LaTeX{} erzeugt oder von Ihnen per Hand geschrieben werden kann. Ihnen entsprechen
gem"a"s dem folgenden Schema \LaTeX-Befehle, soda"s keine Notwendigkeit besteht, die
grundlegenden Befehle einzusetzen:

\begin{center}
\begin{tabular}{l@{$\leftrightarrow$}l}
\verb+\begin{chemistry}{...}+ & \verb+schema("...")+ \\
\verb+\end{chemistry}+ & \verb+endschema+ \\
\verb+\chemfontname+ & \verb+font+ \\
\end{tabular}
\end{center}

Es gibt jedoch auch einige Sonderbefehle, die w"ahrend der Initialisierung von OCHEM
ben"otigt werden, nicht jedoch innerhalb jeder einzelnen \verb+chemistry+"=Umgebung. Diese
k"onnen innerhalb der \verb+chemspecial+"=Umgebung eingef"ugt werden. Diese Umgebung "ubernimmt
den eingeschlossenen Text ohne "Anderung in das eigentliche Sourcefile und steht in der Regel
zu Beginn des Dokumentes.
Zu den Befehlen, die sinnvoll in einem \LaTeX"=Dokument chemischen Inhalts eingesetzt werden
k"onnen, z"ahlen \verb+require+ und \verb+package+.
%IK 19.1.2000 end

Wenn Sie sich das nach einem \LaTeX-Lauf erstellte \verb+.chm+-File anschauen,
k"onnen Sie sehen, wie Ihr Dokument in das Sourcefile "ubertragen wurde.

%
%
\newpage\subsection{font}\index{font}\index{Befehle!font}
\begin{prog}
font("<name>")
\end{prog}
Dieses Kommando enth"alt die \LaTeX-Befehle, die den f"ur chemische Textsymbole
des \verb+atom+"=Befehls zu verwendenden Font einstellen. Diese Form des Befehls dient
nur internen Zwecken,  da f"ur den \LaTeX"=Anwender der Befehl \verb+\chemfontname+ bereitsteht.

%
%
%IK 19.1.2000 begin
\newpage\subsection{package}\label{packagecmd}\index{package}\index{Befehle!package}
\begin{prog}
package("<Paket>")
package("[<Optionen>]<Paket>")
\end{prog}
L"adt das angegebene Paket, ggf. mit Optionen, w"ahrend der \LaTeX"=Bearbeitung der
Textst"ucke der Formeln. Der Befehl kann mehrfach auftreten, mu"s jedoch vor der ersten
Formel stehen.

Die Berechnung der Gr"o"se, die ein Text, z.\,B. ein Atomsymbol, einnimmt, wird f"ur ein
\LaTeX"=Ausgabeformat dem \LaTeX-Compiler "ubertragen. Dieser wird mit einer tempor"aren
Datei aufgerufen, die alle im Reaktionsschema benutzten Textst"ucke enth"alt. Falls in diesen
Texten Makros verwendet werden, m"ussen diese auch f"ur die \LaTeX"=Bearbeitung der tempor"aren
Datei bekannt sein. OCHEM verwendet daher folgendes Verfahren: alle Makros, die Sie innerhalb
von Textpositionen in Formeln verwenden, m"ussen Sie in einem (oder mehreren) separaten
Paketen, z.\,B. \verb+biochem.sty+, sammeln. Die Namen dieser Pakete werden "uber den
\verb+package+"=Befehl von der tempor"aren Datei geladen und somit verf"ugbar. Auch Paketoptionen
k"onnen "ubergeben werden:
\begin{prog}
\begin{chemspecial}
package("biochem")
package("[biochem]chemmacros")
\end{chemspecial}
\end{prog}

Ein Beispiel w"are ein P in einem Kreis, das in der Biochemie h"aufig als Symbol f"ur
aktiviertes Phosphat benutzt wird. Sie k"onnen das Symbol mit Hilfe eines \LaTeX-Makros
erzeugen. Die Makrodefinition schreiben Sie in eine Datei \verb+biochem.sty+:
\index{Phosphat!aktives}\index{Aktives Phosphat}
\begin{prog}
% biochem.sty

\newcommand{\Phosphat}
{{\setlength{unitlength}{1pt}
\begin{picture}(20,20)
  \put(10,10){\makebox(0,0){P}\circle{20}}
\end{picture}
}}
\end{prog}
Das Makro k"onnen Sie dann in Formeln wie folgt verwenden:

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"Xylose-4-diphosphat",HR,24)
 { ring("furanose",,,L)
   { 0: atom("O");
     1: bond(90) atom("O",C,R) atom("H",L);
     2: bond(-90) atom("O",C,R) atom("H",L);
     3: bond(90) atom("O",C,R) atom("H",L);
     4: bond(90;180) atom("O") bond(180)
                     atom("\Phosphat",R,L) bond(180)
                     atom("\Phosphat",R,L) bond(180) atom("H",R);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
\usepackage{biochem}

\begin{chemspecial}
package("biochem")
\end{chemspecial}

..

\begin{chemistry}
formula(C,C,"Xylose-4-diphosphat",HR,24)
{ ring("furanose",,,L)
 { 0: atom("O");
   1: bond(90) atom("O",C,R) atom("H",L);
   2: bond(-90) atom("O",C,R) atom("H",L);
   3: bond(90) atom("O",C,R) atom("H",L);
   4: bond(90;180) atom("O") bond(180)
        atom("\Phosphat",R,L) bond(180)
        atom("\Phosphat",R,L) bond(180)
        atom("H",R);
 }
}
\end{chemistry}
\end{prog}
\end{minipage}\end{fullpage}

Wie das Beispiel zeigt, mu"s das Paket mit den eigenen Makros auch im \LaTeX"=Dokument
geladen werden, da dieses den Text in der endg"ultigen, vom Chemiecompiler errechneten
Positionierung setzen mu"s und daher ebenfalls auf die Makrodefinitionen zugreift.
%IK 19.1.2000 end


%
%
\newpage\subsection{require}\index{require}\index{Befehle!require}
\index{Ringe!eigene}\index{Neue Ringstrukturen}
\begin{prog}
require(<File>)
\end{prog}
Dieser Befehl l"adt das Perl-Modul \verb+<File>.pm+. Er mu"s vor dem ersten
\verb+schema+-Befehl stehen, kann jedoch mehrfach auftreten. Sein prim"arer
Zweck ist nicht, "`echte"' Perl-Module zu laden (wiewohl dies m"oglich w"are),
sondern eigene Ringstrukturen, die als Perl-Code vorliegen m"ussen, verf"ugbar
zu machen. Sie k"onnen so eine Vielzahl an seltener gebrauchten Strukturen
bereitstellen, ohne jede einzelne im Compilercode verankern zu m"ussen und ihn
so zu "uberfrachten. Auch ist es so m"oglich, Strukturen zu entwickeln, ohne
automatisch eine eigene Version des Compilers zu erzeugen, Sie bleiben somit
kompatibel und k"onnen den Compiler jederzeit gegen die neuste Version austauschen,
ohne Ihrer Definitionen verlustig zu gehen.

Der Aufbau von Ger"uststrukturen wird im Tutorial, Abschnitt~\ref{sec:eigeneringe},
geschildert, einige wie \verb+bicyclib.pm+, sind in der OCHEM"=Distribution
standardm"a"sig enthalten. M"ochten Sie dieses Modul laden, um das Ger"ust \verb+tropin+
(Abschnitt~\ref{bicyclibsec}) zu laden, schreiben Sie
%IK 19.1.2000 begin
\begin{prog}
\begin{chemspecial}
 require("bicyclib")
\end{chemspecial}

\begin{chemistry}
 formula(C,C)
 { ring("tropin",,,L)
   { ... }
 }
\end{chemistry}
\end{prog}
%IK 19.1.2000 end


%
%
\newpage\subsection{schema}\index{schema}\index{Befehle!schema}
\begin{prog}
schema("<name")
<sliste>
endschema
\end{prog}
Dieses Kommando kennzeichnet Anfang und Ende einer Formel oder eines ganzen
Reaktionsschemas. \verb+<sliste>+ wird als Einheit "ubersetzt und unter dem
Dateinamen \verb+<name>+ im Ausgabeformat gespeichert. Der Befehl stellt die
logische Grundeinheit des Chemiepaketes dar und korrespondiert zur
\verb+chemistry+"=Umgebung auf \LaTeX-Benutzerebene.



%
%
\newpage\section{Die Bibliothek \texttt{mncyclib.pm}}\label{mncyclibsec}
\index{Bibliothek!mncyclib.pm}\index{mncyclib.pm}\index{Monozyklen}
\index{Stereodarstellung}
In diesem Abschnitt werden die Ringstrukturen erl"autert, die durch das
Bibliotheksmodul \verb+mncyclib.pm+ verf"ugbar gemacht werden. Es wird
durch die Zeilen
\begin{prog}
\begin{chemspecial}
 require("mncyclib")
\end{chemspecial}
\end{prog}
im Vorspann eines \LaTeX-Dokumentes verf"ugbar gemacht. Die folgenden
Erkl"arungen folgen dem Schema, das bereits
bei $\to$\verb+ring+ angewandt wurde, f"ur n"ahere Erkl"arungen siehe die
Beschreibung des Befehls.

Die Bibliothek enth"alt die folgenden monozyklischen Strukturen und ihre
Kodierung \verb+<type>+:\index{Zyklobutan}\index{Zyklopentan}
\index{Zyklobutan!Stereodarstellung}\index{Zyklopentan!Stereodarstellung}
\index{Stereodarstellung!Zyklobutan}\index{Stereodarstellung!Zyklpentan}

%IK 19.1.2000 begin
\begin{chemistry}
 formula(L,R,"cb",HA,48)
 { ring("cb",,,L){}}
 formula(L,R,"cp",HA,48)
 { ring("cp",,,L){}}
 formula(L,R,"furanose",HA,48)
 { ring("furanose",,,L){}}
\end{chemistry}
%IK 19.1.2000 end

Sie k"onnen mit den Ger"usten dieser Bibliothek monozyklische Strukturen in
schematisierter Stereodarstellung erzeugen.

Die Numerierung der Atome ist durch die folgenden Formeln beschrieben:

%IK 19.1.2000 begin
\begin{chemistry}
 gotoXY(0,0)
 formula(C,C)
 { ring("cb",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
   }
 }

 gotoXY(50,0)
 formula(C,C)
 { ring("cp",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");
   }
 }

 gotoXY(120,0)
 formula(C,C)
 { ring("furanose",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");
   }
 }
\end{chemistry}
%IK 19.1.2000 end

Die Numerierung der Bindungen erfolgt nach den folgenden Schemata

%IK 19.1.2000 begin
\begin{chemistry}
 gotoXY(0,0)
 formula(C,C)
 { ring("cb",,,NN)
   { 0: bond(v(0),s,N) atom("0");      1: bond(v(1),s,N) atom("1");
     2: bond(v(2),s,N) atom("2");      3: bond(v(3),s,N) atom("3");
   }
 }
 gotoXY(50,0)
 formula(C,C)
 { ring("cp",,,NN)
   { 0: bond(v(0),s,N) atom("0");      1: bond(v(1),s,N) atom("1");
     2: bond(v(2),s,N) atom("2");      3: bond(v(3),s,N) atom("3");
     4: bond(v(4),s,N) atom("4");
   }
 }
 gotoXY(120,0)
 formula(C,C)
 { ring("furanose",,,NN)
   { 0: bond(v(0),s,N) atom("0");      1: bond(v(1),s,N) atom("1");
     2: bond(v(2),s,N) atom("2");      3: bond(v(3),s,N) atom("3");
     4: bond(v(4),s,N) atom("4");
   }
 }
\end{chemistry}
%IK 19.1.2000 end

Die Bedeutung der beiden variablen Parameter \verb+<p1>+ und \verb+<p2>+ ist folgende:
\begin{description}
\item[cb] (Zyklobutan-Ger"ust) Der Parameter \verb+<p1>+ entf"allt, \verb+<p2>+
stellt den Drehwinkel des gesamten Ger"ustes dar.

Die Anordnung der Bindungen bei den Richtungstypen \verb+r+, \verb+t+ und
\verb+b+ wird in den nachfolgenden Formeln gezeigt. \verb+t+-Bindungen werden
durch dicke, \verb+b+-Bindungen durch gestrichelte Linien symbolisiert.

\begin{chemistry}
 formula(L,R,"radial",HR,24)
 { ring("cb",,H,L){ 0: bond(r,t); 1: bond(r,t); 2: bond(r,t);
              3: bond(r,t);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("cb",,H,L){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o);}
 }
\end{chemistry}

\item[cp] (Zyklopentan-Ger"ust) Der Parameter \verb+<p2>+ stellt wiederum den
Ger"ustdrehwinkel dar. \verb+<p1>+ erm"oglicht die Auswahl zwischen den folgenden
Konformeren:\index{Zyklopentan!Stereodarstellung}

\begin{chemistry}
 formula(L,R,"p1=0",HA,24)
 { ring("cp",,,,0){} }
 formula(L,R,"p1=0",HA,24)
 { ring("cp",,,,1){} }
 formula(L,R,"p1=0",HA,24)
 { ring("cp",,,,2){} }
 formula(L,R,"p1=0",HA,24)
 { ring("cp",,,,3){} }
\end{chemistry}

Die Anordnung der Bindungen bei den Richtungstypen \verb+r+, \verb+t+ und
\verb+b+ wird in den nachfolgenden Formeln gezeigt. \verb+t+-Bindungen werden
durch dicke, \verb+b+-Bindungen durch gestrichelte Linien symbolisiert.

\begin{chemistry}
 gotoXY(0,100)
 formula(L,R,"radial",HR,24)
 { ring("cp",,H,L,0){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("cp",,H,L,0){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o);}
 }
 formula(L,R,"radial",HR,24)
 { ring("cp",,H,L,1){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("cp",,H,L,1){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o);}
 }
 gotoXY(0,0)
 formula(L,R,"radial",HR,24)
 { ring("cp",,H,L,2){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("cp",,H,L,2){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o);}
 }
 formula(L,R,"radial",HR,24)
 { ring("cp",,H,L,3){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("cp",,H,L,3){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o);}
 }
\end{chemistry}

%IK 19.1.2000 begin
\item[furanose] (Furanose-Ger"ust) Die Parameter sind hier bedeutungslos.

Die Anordnung der Bindungen bei den Richtungstypen \verb+r+, \verb+t+ und
\verb+b+ wird in den nachfolgenden Formeln gezeigt. \verb+t+-Bindungen werden
durch dicke, \verb+b+-Bindungen durch gestrichelte Linien symbolisiert.

\begin{chemistry}
 formula(L,R,"radial",HR,24)
 { ring("furanose",,H,L){ 0: bond(r,t); 1: bond(r,t); 2: bond(r,t);
              3: bond(r,t);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("furanose",,H,L){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o);}
 }
\end{chemistry}
%IK 19.1.2000 end
\end{description}


%
%
\newpage\section{Die Bibliothek \texttt{bicyclib.pm}}\label{bicyclibsec}
\index{Bibliothek!bicyclib.pm}\index{bicyclib.pm}\index{Naturstoffe}
In diesem Abschnitt werden die Ringstrukturen erl"autert, die durch das
Bibliotheksmodul \verb+bicyclib.pm+ verf"ugbar gemacht werden. In einem
\LaTeX-Dokument laden Sie es mit den Zeilen
\begin{prog}
\begin{chemspecial}
 require("bicyclib")
\end{chemspecial}
\end{prog}
im Vorspann. Die folgenden Erkl"arungen folgen dem Schema, das bereits
bei $\to$\verb+ring+ angewandt wurde, f"ur n"ahere Erkl"arungen siehe die
Beschreibung des Befehls.

Die Bibliothek enth"alt die folgenden bizyklischen Strukturen und ihre
Kodierung \verb+<type>+:

\begin{chemistry}
 formula(L,R,"bc221h",HA,48)
 { ring("bc221h",,,L){}}
 formula(L,R,"bc311h",HA,48)
 { ring("bc311h",,,L){}}
 formula(L,R,"bc222o",HA,48)
 { ring("bc222o",,,L){}}
 formula(L,R,"bc321o",HA,48)
 { ring("bc321o",,,L){}}
\end{chemistry}

Die Kodierung stellt dabei eine Abk"urzung f"ur
\textbf{B}i\textbf{c}yclo[\textbf{n}.\textbf{m}.\textbf{o}]\textbf{h}eptan und
\textbf{B}i\textbf{c}yclo[\textbf{n}.\textbf{m}.\textbf{o}]\textbf{o}ktan dar.
Sie erfassen mit den Strukturen die Ger"uste von Tropin, Norpinan und Norbornan.

Die Numerierung der Atome ist durch die folgenden Formeln beschrieben:

\begin{chemistry}
 gotoXY(0,0)
 formula(C,C)
 { ring("bc221h",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");      5: atom("5");
     6: atom("6");
   }
 }
 gotoXY(50,0)
 formula(C,C)
 { ring("bc311h",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");      5: atom("5");
     6: atom("6");
   }
 }
 gotoXY(100,0)
 formula(C,C)
 { ring("bc222o",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");      5: atom("5");
     6: atom("6");      7: atom("7");
   }
 }
 gotoXY(150,0)
 formula(C,C)
 { ring("bc321o",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");      5: atom("5");
     6: atom("6");      7: atom("7");
   }
 }
\end{chemistry}

Die Numerierung der Bindungen erfolgt nach den folgenden Schemata.

\begin{chemistry}
 gotoXY(0,0)
 formula(C,C)
 { ring("bc221h",,,L)
   { 0: bond(v(0),s,l) atom("0");      1: bond(v(1),s,l) atom("1");
     2: bond(v(2),s,l) atom("2");      3: bond(v(3),s,l) atom("3");
     4: bond(v(4),s,l) atom("4");      5: bond(v(5),s,l) atom("5");
     1: bond(v(6),s,l) atom("6");      4: bond(v(7),s,l) atom("7");
   }
 }
 gotoXY(100,0)
 formula(C,C)
 { ring("bc311h",,,L)
   { 0: bond(v(0),s,l) atom("0");      1: bond(v(1),s,l) atom("1");
     2: bond(v(2),s,l) atom("2");      3: bond(v(3),s,l) atom("3");
     4: bond(v(4),s,l) atom("4");      5: bond(v(5),s,l) atom("5");
     1: bond(v(6),s,l) atom("6");      5: bond(v(7),s,l) atom("7");
   }
 }
 gotoXY(150,0)
 formula(C,C)
 { ring("bc222o",,,L)
   { 0: bond(v(0),s,l) atom("0");      1: bond(v(1),s,l) atom("1");
     2: bond(v(2),s,l) atom("2");      3: bond(v(3),s,l) atom("3");
     4: bond(v(4),s,l) atom("4");      5: bond(v(5),s,l) atom("5");
     1: bond(v(6),s,l) atom("6");      6: bond(v(7),s,l) atom("7");
     4: bond(v(8),s,l) atom("8");
   }
 }
 gotoXY(200,0)
 formula(C,C)
 { ring("bc321o",,,L)
   { 0: bond(v(0),s,l) atom("0");      1: bond(v(1),s,l) atom("1");
     2: bond(v(2),s,l) atom("2");      3: bond(v(3),s,l) atom("3");
     4: bond(v(4),s,l) atom("4");      5: bond(v(5),s,l) atom("5");
     5: bond(v(6),s,l) atom("6");      6: bond(v(7),s,l) atom("7");
     1: bond(v(8),s,l) atom("8");
   }
 }
\end{chemistry}

Die Anordnung der Bindungen bei den Richtungstypen \verb+r+, \verb+t+ und
\verb+b+ wird in den nachfolgenden Formeln gezeigt. \verb+t+-Bindungen werden
durch dicke, \verb+b+-Bindungen durch gestrichelte Linien symbolisiert.

\begin{chemistry}
 gotoXY(0,100)
 formula(L,R,"radial",HR,24)
 { ring("bc221h",,H,L){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r); 6: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("bc221h",,H,L){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t); 6: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o); 6: bond(b,o);}
 }
 formula(L,R,"radial",HR,24)
 { ring("bc311h",,H,L){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r); 6: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("bc311h",,H,L){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t); 6: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o); 6: bond(b,o);}
 }
 gotoXY(0,0)
 formula(L,R,"radial",HR,24)
 { ring("bc222o",,H,L){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r); 6: bond(r);
              7: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("bc222o",,H,L){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t); 6: bond(t,t);
              7: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o); 6: bond(b,o);
              7: bond(b,o); }
 }
 formula(L,R,"radial",HR,24)
 { ring("bc321o",,H,L){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); 4: bond(r); 5: bond(r); 6: bond(r);
              7: bond(r);}
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("bc321o",,H,L){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t); 4: bond(t,t); 5: bond(t,t); 6: bond(t,t);
              7: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o); 4: bond(b,o); 5: bond(b,o); 6: bond(b,o);
              7: bond(b,o); }
 }
\end{chemistry}

Die Bedeutung der beiden variablen Parameter \verb+<p1>+ und \verb+<p2>+ ist folgende:
\begin{description}
\item[bc221h] (Norbornan-Ger"ust) Beide Parameter entfallen ersatzlos. (Nach neuen IUPAC-Regeln
mu"s dieses Ger"ust als 8,9,10-Trinorbornan bezeichnet werden.)
\index{Norbornan}\index{Bornan}\index{Kampher}\index{Campher}

\item[bc311h] (Norpinan-Ger"ust) Beide Parameter entfallen ersatzlos.
\index{Norpinan}\index{Pinan}

\item[bc321o] (Tropin-Ger"ust) Beide Parameter entfallen ersatzlos.
\index{Tropin}\index{Atropin}

\end{description}

Nachfolgend sind einige bizyklische Naturstoffe aus den
Ger"usten der Bibliothek aufgebaut worden.
\index{Kampher}\index{Campher}\index{Tropin}\index{Cineol}\index{Bizyklen}
\index{Kokain}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}[cineol]
 formula(C,C,"Cineol",HA,48)
 { ring("bc222o",,,L)
   { 2: bond(t);  2: bond(b);
     3: atom("O");
     4: bond(r);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"Cineol",HA,48)
 { ring("bc222o",,,L)
   { 2: bond(t);  2: bond(b);
     3: atom("O");
     4: bond(r);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"Campher",HA,48)
 { ring("bc221h",,,L)
   { 3: bond(r,=C) atom("O");
     4: bond(r);
     6: bond(t);  6: bond(b);
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"Campher",HA,48)
 { ring("bc221h",,,L)
   { 3: bond(r,=C) atom("O");
     4: bond(r);
     6: bond(t);  6: bond(b);
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
 formula(C,C,"Kokain",HA,48)
 { ring("bc321o",,,L)
   { 2: bond(t) atom("C",C,R) atom("OOCH$_3$",L);
     3: bond(b) atom("O",C,R) atom("COC$_6$H$_5$",L);
     0: atom("N") bond(r) atom("H");
   }
 }
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(C,C,"Kokain",HA,48)
 { ring("bc321o",,,L)
   { 2: bond(t) atom("C",C,R) atom("OOCH$_3$",L);
     3: bond(b) atom("O",C,R) atom("COC$_6$H$_5$",L);
     0: atom("N") bond(r) atom("H");
   }
 }
\end{prog}
\end{minipage}\end{fullpage}

%IK 20.3.2001 begin
%
%
\newpage\section{Die Bibliothek \texttt{polycyclib.pm}}\label{polycyclibsec}
\index{Bibliothek!polycyclib.pm}\index{polycyclib.pm}\index{Naturstoffe}
\index{Polyzyklen}
In diesem Abschnitt werden die polyzyklischen Ringstrukturen erl"autert, die durch das
Bibliotheksmodul \verb+polycyclib.pm+ verf"ugbar gemacht werden. In einem
\LaTeX-Dokument laden Sie es mit den Zeilen
\begin{prog}
\begin{chemspecial}
 require("polycyclib")
\end{chemspecial}
\end{prog}
im Vorspann. Die folgenden Erkl"arungen folgen dem Schema, das bereits
bei $\to$\verb+ring+ angewandt wurde, f"ur n"ahere Erkl"arungen siehe die
Beschreibung des Befehls.

Die Bibliothek enth"alt die folgenden polyzyklischen Strukturen und ihre
Kodierung \verb+<type>+:

{\centering\begin{chemistry}
 formula(L,R,"tetrahedrane",HA,48)
 { ring("tetrahedrane",,,L){}}
 formula(L,R,"cubane",HA,48)
 { ring("cubane",,,L){}}
%  formula(L,R,"pring",HA,48)
%  { ring("pring",,,L){}}
\end{chemistry}
}

Sie erfassen mit den Strukturen die Ger"uste von Tetrahedran und Kuban.

Die Numerierung der Atome ist durch die folgenden Formeln beschrieben:

{\centering\begin{chemistry}
 gotoXY(0,0)
 formula(C,C)
 { ring("tetrahedrane",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
   }
 }
 gotoXY(50,0)
 formula(C,C)
 { ring("cubane",,,L)
   { 0: atom("0");      1: atom("1");
     2: atom("2");      3: atom("3");
     4: atom("4");      5: atom("5");
     6: atom("6");      7: atom("7");
   }
 }
\end{chemistry}
}

Die Numerierung der Bindungen erfolgt nach den folgenden Schemata.

{\centering\begin{chemistry}
 gotoXY(0,0)
 formula(C,C)
 { ring("tetrahedrane",,,LL)
   { 0: bond(v(0),s,L) atom("0");      0: bond(v(1),s,L) atom("1");
     0: bond(v(2),s,L) atom("2");      3: bond(v(3),s,L) atom("3");
     1: bond(v(4),s,L) atom("4");      2: bond(v(5),s,L) atom("5");
   }
 }
 gotoXY(100,0)
 formula(C,C)
 { ring("cubane",,,LL)
   { 0: bond(v(0),s,L) atom("0");      1: bond(v(1),s,L) atom("1");
     2: bond(v(2),s,L) atom("2");      3: bond(v(3),s,L) atom("3");
     0: bond(v(4),s,L) atom("4");      1: bond(v(5),s,L) atom("5");
     2: bond(v(6),s,L) atom("6");      3: bond(v(7),s,L) atom("7");
     4: bond(v(8),s,L) atom("8");      5: bond(v(9),s,L) atom("9");
     6: bond(v(10),s,L) atom("10");    7: bond(v(11),s,L) atom("11");
   }
 }
\end{chemistry}
}

Die Anordnung der Bindungen bei den Richtungstypen \verb+r+, \verb+t+ und
\verb+b+ wird in den nachfolgenden Formeln gezeigt. \verb+t+-Bindungen werden
durch dicke, \verb+b+-Bindungen durch gestrichelte Linien symbolisiert.

{\centering\begin{chemistry}
 formula(L,R,"radial",HR,24)
 { ring("tetrahedrane",,H,L){ 0: bond(r); 1: bond(r); 2: bond(r);
              3: bond(r); }
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("tetrahedrane",,H,L){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t);
              3: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o);
              3: bond(b,o);}
 }

 formula(L,R,"radial",HR,24)
 { ring("cubane",,,L,30){ 0: bond(r); 1: bond(r); 2: bond(r); 3: bond(r);
     4: bond(r); 5: bond(r); 6: bond(r); 7: bond(r);
   }
 }
 formula(L,R,"top/bottom",HR,24)
 { ring("cubane",,,L,30){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t); 3: bond(t,t);
              4: bond(t,t); 5: bond(t,t); 6: bond(t,t); 7: bond(t,t);
              0: bond(b,o); 1: bond(b,o); 2: bond(b,o); 3: bond(b,o);
              4: bond(b,o); 5: bond(b,o); 6: bond(b,o); 7: bond(b,o); }
 }

%  formula(L,R,"radial",HR,24)
%  { ring("pring",,,L,30){ 0: bond(r); 1: bond(r); 2: bond(r); 3: bond(r);
%      4: bond(r); 5: bond(r);
%    }
%  }
%  formula(L,R,"top/bottom",HR,24)
%  { ring("pring",,,L,30){ 0: bond(t,t); 1: bond(t,t); 2: bond(t,t); 3: bond(t,t);
%               4: bond(t,t); 5: bond(t,t);
%               0: bond(b,o); 1: bond(b,o); 2: bond(b,o); 3: bond(b,o);
%               4: bond(b,o); 5: bond(b,o); }
%  }
\end{chemistry}
}

Die Bedeutung der beiden variablen Parameter \verb+<p1>+ und \verb+<p2>+ ist folgende:
\begin{description}
\item[tetrahedrane] Der Parameter \verb+<p1>+ ist bedeutungslos, wohingegen
\verb+<p2>+ den Drehwinkel des gesamten Ger"ustes darstellt.
\index{Tetrahedran}

\item[cubane] Der Parameter \verb+<p1>+ ist bedeutungslos, wohingegen
\verb+<p2>+ den Drehwinkel des gesamten Ger"ustes darstellt.
\index{Kuban}

\end{description}

Als Beispiel folgt die Formel des 2-\textit{tert}-Butylcubylcubans.

\begin{fullpage}\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R)
{
   ring("cubane",,,L){
     1: bond(r,,L)
        ring("cubane",7,,L,,0){
            0: bond(r) atom("(H$_3$C)$_3$C",R);
        };
   }
}
\end{chemistry}
\end{minipage}\hfil\begin{minipage}{0.5\textwidth}
\begin{prog}
\begin{chemistry}
   ring("cubane",,,L){
     1: bond(r,,L)
        ring("cubane",7,,L,,0){
            0: bond(r) atom("(H$_3$C)$_3$C",R);
        };
   }
\end{prog}
\end{minipage}\end{fullpage}

Als umfangreicheres Beispiel folgt die Synthese des Kubans:\index{Kuban!Synthese}\index{Synthese!Kuban}

\begin{chemistry}
multiline(3,L)
{ % upper line
 formula(L,R,"Zyklopenten-5-on"){
   ring(,,H3=,,5,-90){
     0: bond(r,=C) atom("O");
   }
 }
 arrow(){
   text(T,C){ formula(C,C){ atom("1. NBS, 2. Br$_2$") }}
   text(B,C){ formula(C,C){ atom("3. N(C$_2$H$_5$)$_3$") }}
 }
 space(R)
 formula(L,R){
   ring(,,H1=3=,,5,-90){
     0: bond(r,=C) atom("O");
     4: bond(r) atom("Br",L);
   }
 }
 bracket()
 space(R)
 arrow(){}
 formula(L,R){
   ring("bc221h",,0=,L){
     6: bond(r,=C) atom("O");
     4: bond(r) atom("Br",L);
     3: bond(-30;-90,=) branch { bond(-45) atom("Br",L); } bond(-170)
        saveXY(#1) bond(-120,=) atom("O");
     2: bond(#1);
   }
 }
 ;

 % middle line
 arrow(){
   text(T,C){ formula(C,C){ atom("h$\nu$") }}
 }
 formula(L,R){
   ring("cubane",,1-2-3s5s6-7-9-10-11-,NN){
     3: saveXY(#1); 0: bond(150) branch { bond(135,=C) atom("O"); } bond(#1);
     3: bond(r) atom("Br", R);
     5: saveXY(#2); 1: bond(-60) branch { bond(0,=C) atom("O"); } bond(#2);
     5: bond(r) atom("Br", L);
   }
 }
 arrow(,5){
   text(T,C){ formula(C,C){ atom("1. KOH/H$_2$O") }}
   text(B,C){ formula(C,C){ atom("2. H$_3$O$^\oplus$") }}
 }
 formula(L,R){
   ring("cubane",,1-2-3-6-7-9-10-11-,NN){
     3: bond(r) atom("HOOC", R);
     5: bond(r) atom("COOH", L);
   }
 }
 ;

 % lower line
 arrow(,5){
   text(T,C){ formula(C,C){ atom("1. SOCl$_2$") }}
   text(B,C){ formula(C,C){ atom("2. HO-C(CH$_3$)$_3$, 3. $\Delta$") }}
 }
 formula(L,R,"Kuban"){
   ring("cubane",,,NN){}
 }
 ;
}
\end{chemistry}
\begin{prog}
multiline(3,L)
{ % upper line
 formula(L,R,"Zyklopenten-5-on"){
   ring(,,H3=,,5,-90){
     0: bond(r,=C) atom("O");
   }
 }
 arrow(){
   text(T,C){ formula(C,C){ atom("1. NBS, 2. Br$_2$") }}
   text(B,C){ formula(C,C){ atom("3. N(C$_2$H$_5$)$_3$") }}
 }
 space(R)
 formula(L,R){
   ring(,,H1=3=,,5,-90){
     0: bond(r,=C) atom("O");
     4: bond(r) atom("Br",L);
   }
 }
 bracket()
 space(R)
 arrow(){}
 formula(L,R){
   ring("bc221h",,0=,L){
     6: bond(r,=C) atom("O");
     4: bond(r) atom("Br",L);
     3: bond(-30;-90,=) branch { bond(-45) atom("Br",L); } bond(-170)
        saveXY(#1) bond(-120,=) atom("O");
     2: bond(#1);
   }
 }
 ;

 % middle line
 arrow(){
   text(T,C){ formula(C,C){ atom("h$\nu$") }}
 }
 formula(L,R){
   ring("cubane",,1-2-3s5s6-7-9-10-11-,NN){
     3: saveXY(#1); 0: bond(150) branch { bond(135,=C) atom("O"); } bond(#1);
     3: bond(r) atom("Br", R);
     5: saveXY(#2); 1: bond(-60) branch { bond(0,=C) atom("O"); } bond(#2);
     5: bond(r) atom("Br", L);
   }
 }
 arrow(,5){
   text(T,C){ formula(C,C){ atom("1. KOH/H$_2$O") }}
   text(B,C){ formula(C,C){ atom("2. H$_3$O$^\oplus$") }}
 }
 formula(L,R){
   ring("cubane",,1-2-3-6-7-9-10-11-,NN){
     3: bond(r) atom("HOOC", R);
     5: bond(r) atom("COOH", L);
   }
 }
 ;

 % lower line
 arrow(,5){
   text(T,C){ formula(C,C){ atom("1. SOCl$_2$") }}
   text(B,C){ formula(C,C){ atom("2. HO-C(CH$_3$)$_3$, 3. $\Delta$") }}
 }
 formula(L,R,"Kuban"){
   ring("cubane",,,NN){}
 }
 ;
}
\end{prog}
%IK 20.3.2001 end

\newpage\section{Das Includefile \texttt{natur.inc}}\label{sec:natur}
Dem Chemiepaket liegt eine kleine Includedatei \verb+natur.inc+ bei (Listing
in Abschnitt~\ref{naturinc}), in der eine gewi"se (gr"o"ser werdende) Anzahl an
Makros zusammengefa"st ist, die die Arbeit mit bestimmten Verbindungsklassen,
vor allem Naturstoffen, erleichtern sollen.
Sie wird wie folgt in ein \LaTeX-Dokument eingebunden:
\begin{prog}
\begin{chemspecial}
include(`natur.inc')
\end{chemspecial}
\end{prog}
Es ist wahrscheinlich, da"s Sie die Makros in der vorliegenden Form noch nicht
besonders n"utzlich finden; da es aber schwer ist, Makros f"ur alle denkbaren
Anwendungsf"alle zu schreiben, ohne die Makros mit 50 Parametern zu versehen,
schlage ich vor, sie als Fundus zu betrachten und f"ur die eigenen
Bed"urfnisse Anpassungen vorzunehmen. Wie immer, sind auch in dieser Beziehung
Anregungen sehr willkommen, um f"ur nachfolgende Distributionen eine
eventuell sinnvollere Datei zu liefern:-)

Die einzelnen Makros werden im folgenden besprochen. Sie erzeugen jeweils ein
typisches Ger"ust f"ur eine bestimmte Verbindungsklasse. Wichtige Schl"usselpositionen
werden dabei abgespeichert und k"onnen f"ur Modifikationen mittels \verb+restoreXY+
angesprungen werden; die Nummern der betreffenden Punkte wird jeweils im folgenden
Text mitgeteilt. Einige Makros erwarten Parameter, die das Grundger"ust ebenfalls
modifizieren, zum Beispiel \verb+androstane+ oder \verb+cholane+ f"ur das
Steroidmakro, um Androstan- oder Cholanger"uste zu erzeugen. Weitere Modifikationen
sind m"oglich, indem Bindungslisten f"ur Ringe als Parameter "ubergeben werden.
Schlie"slich k"onnen kleine Formelbeschreibungen als Parameter auftreten.
Anhand der Beispiele sollten Sie jedoch die Anwendung der Makros verstehen k"onnen.

Beachten Sie, da"s diese Makros nicht beliebig verallgemeinert sind, es werden
daher immer Strukturen auftreten, die nicht unmittelbar mit diesen Makros zu
setzen sind; in diesen F"allen k"onnen Sie das Makro kopieren und modifizieren
oder --~in komplizierten F"allen~-- die ganze Struktur ohne Makro beschreiben,
was unter Umst"anden einfacher sein kann.

\subsection*{TERPEN}\index{Terpene}\index{Makros!Terpene}
Dieses Makro erzeugt ein Menthanger"ust, das als Grundlage f"ur einige monozyklische
Monoterpene dienen kann. Die allgemeine Form lautet
\begin{prog}
TERPEN_(<bliste>, <C2-Subs>)
\end{prog}
\verb+<bliste>+ ist dabei die Bindungsliste f"ur den Ring, \verb+<C2-Subs>+ ist
die Beschreibung eines Substituenten an C$^2$. Ist kein Substituent vorhanden,
schreiben Sie einfach \verb+`'+ als leere Liste. Die Positionen von C$^1$, C$^8$ und
C$^3$ werden in den Koordinaten Eins bis Drei gespeichert.
Die folgende Formel zeigt Grundger"ust und Lage der gelieferten Punkte:

\begin{chemistry}
 formula(C,C,"T{}ERPEN\_",HR,24)
 { TERPEN_(H) restoreXY(#1) atom("1") restoreXY(#2) atom("2") restoreXY(#3) atom("3")  }
\end{chemistry}

Einige Beispiele zeigen die Anwendung der Bindungsliste, des Substituenten
sowie der gespeicherten Punkte:

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"1-p-Menthen",HR,24)
 { TERPEN_(H3=) restoreXY(#1) bond(90) }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"1-p-Menthen",HR,24)
 { TERPEN_(H3=) restoreXY(#1) bond(90) }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Nerol",HR,24)
 { TERPEN_(H3=5s)
   restoreXY(#1) bond(90)
   restoreXY(#3) bond(-30) atom("O",C,R) atom("H",L)
   restoreXY(#2) bond(90,=)
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Nerol",HR,24)
 { TERPEN_(H3=5s)
   restoreXY(#1) bond(90)
   restoreXY(#3) bond(-30) atom("O",C,R) atom("H",L)
   restoreXY(#2) bond(90,=)
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Carvenon",HR,24)
 { TERPEN_(H5=,bond(30) atom("O"))
   restoreXY(#1) bond(90)
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Carvenon",HR,24)
 { TERPEN_(H5=,bond(30) atom("O"))
   restoreXY(#1) bond(90)
 }
\end{prog}
\end{minipage}
\end{fullpage}

%
%
\subsection*{STEROID}\index{Steroide}\index{Makros!Steroide}
Dieses Makro hat den Aufbau
\begin{prog}
STEROID_(<bliste>, <type>)
\end{prog}
und erzeugt Steroidstrukturen gem"a"s \verb+<type>+. Die m"oglichen Typen entsprechen
den wichtigsten Grundkohlenwasserstoffen und sind in der folgenden Aufstellung enthalten.
Die Ziffern an manchen Atomen entsprechen der Nummer des betreffenden gespeicherten
Koordinatenpaares:

\begin{fullpage}
\begin{chemistry}
 gotoXY(0,0)
 formula(C,C,"S{}TEROID\_",HR,24)
 { STEROID_(H)
   restoreXY(#1) atom("1") restoreXY(#2) atom("2")
   restoreXY(#3) atom("3") restoreXY(#4) atom("4")
   restoreXY(#5) atom("5") restoreXY(#6) atom("6")
   restoreXY(#7) atom("7")
 }
 gotoXY(100,0)
 formula(C,C,"estrane",HR,24)
 { STEROID_(H, estrane)  }
 gotoXY(200,0)
 formula(C,C,"androstane",HR,24)
 { STEROID_(H, androstane)  }
 gotoXY(300,0)
 formula(C,C,"cholane",HR,24)
 { STEROID_(H, cholane)  }
 gotoXY(0,100)
 formula(L,C,"cholestane",HR,24)
 { STEROID_(H, cholestane)  }
 gotoXY(150,100)
 formula(L,C,"ergostane",HR,24)
 { STEROID_(H, ergostane)  }
\end{chemistry}
\end{fullpage}

\verb+<bliste>+ ist eine Bindungsliste, die zum Ring A geh"ort. Mit ihrer Hilfe
kann der Ring aromatisiert oder mit Doppelbindungen versehen werden.
Zur weiteren Modifikation k"onnen die folgenden Koordinaten benutzt werden, die
auch in der "Ubersicht oben durch Ziffern wiedergegeben wurden:

\begin{tabular}{llll}\toprule
Nummer & Atom & Nummer & Atom\\\midrule
1 & C$^{3}$ & 2 & C$^{10}$ \\
3 & C$^{13}$ & 4 & C$^{5}$ \\
5 & C$^{14}$ & 6 & C$^{17}$ \\
7 & C$^{11}$ &   &  \\
\bottomrule
\end{tabular}

Einige Beispiele sollen die Anwendung zeigen.

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"{}""Ostradiol",HR,24)
 { STEROID_(O)
   restoreXY(#2) bond(90,<<)
   restoreXY(#1) bond(-150) atom("OH",R)       %// 20-01-2000 IK
   restoreXY(#6) bond(30) atom("OH",L)         %// 20-01-2000 IK
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"{}""Ostradiol",HR,24)
 { STEROID_(O)
   restoreXY(#2) bond(90,<<)
   restoreXY(#1) bond(-150) atom("OH",R)
   restoreXY(#6) bond(30) atom("OH",L)
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Testosteron",HR,24)
 { STEROID_(H5=, androstane)
   restoreXY(#1) bond(-150,=C) atom("O")
   restoreXY(#6) bond(30) atom("CHO",L)        %// 20-01-2000 IK
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Testosteron",HR,24)
 { STEROID_(H5=, androstane)
   restoreXY(#1) bond(-150,=C) atom("O")
   restoreXY(#6) bond(30) atom("CHO",L)
 }
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R,"Cortison",HR,24)
 { STEROID_(H5=, androstane)
   restoreXY(#1) bond(-150,=C) atom("O")
   restoreXY(#7) bond(150,=C) atom("O")
   restoreXY(#6) bond(30) branch{ bond(90,=C) atom("O"); }
                 bond(-30; 30) atom("OH",L)
   restoreXY(#6) bond(90) atom("O",C,L) atom("H",R)
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R,"Cortison",HR,24)
 { STEROID_(H5=, androstane)
   restoreXY(#1) bond(-150,=C) atom("O")
   restoreXY(#7) bond(150,=C) atom("O")
   restoreXY(#6) bond(30) branch{ bond(90,=C) atom("O"); }
                 bond(-30; 30) atom("OH",L)
   restoreXY(#6) bond(90) atom("O",C,L) atom("H",R)
 }
\end{prog}
\end{minipage}
\end{fullpage}


\subsection*{ISOPREN}\index{Isoprene}\index{Makros!Isoprene}
Dieses Makro erzeugt eine Isopreneinheit in zwei verschiedenen Formen. Sie
dient zum Aufbau von Polyprenketten
Die allgemeine Form lautet
\begin{prog}
ISOPREN_(<bond_len>)
ISOPREN1_(<bond_len>, <bond_type>)
\end{prog}
\verb+<bond_len>+ ist die Bindungsl"ange einer Bindung, die zum Startpunkt
der eigentlichen Einheit f"uhrt. Sie mu"s mit der Angabe \verb+`0'+ auf Null
gesetzt werden f"ur eine isolierte Einheit und kann mit \verb+`'+ leer gelassen
oder ignoriert werden f"ur den Fall aneinanderh"angender Einheit f"ur Polyprene.
Mit \verb+<bond_type>+ k"onnen Sie die Bindungsform f"ur eine der Doppelbindungen
angeben (Verwendung bei der terminalen $\psi$-Einheit des Carotens).
Die folgenden Formeln zeigen die Grundger"uste mit \verb+<bond_len>+ gleich
Null:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R,"I{}SOPREN\_",HR,24)
{ ISOPREN_(0) }
formula(L,R,"I{}SOPREN1\_",HR,24)
{ ISOPREN1_(0) }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(L,R,"I{}SOPREN\_",HR,24)
{ ISOPREN_(0) }
formula(L,R,"I{}SOPREN1\_",HR,24)
{ ISOPREN1_(0) }
\end{prog}
\end{minipage}
\end{fullpage}

Einige Beispiele zeigen die Anwendung der Einheiten zum Aufbau von
Carotenen:\index{Caroten}
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
formula(T,B,"$\beta,\beta$-Caroten",HR,24)
{ ring(,,H4=)
 { 3: bond(t); 3: bond(b);
   5: bond(r);
   4: ISOPREN_
      ISOPREN_ bond(r; r/,=; r)
      ISOPREN1_
      ISOPREN1_ ring(,0,H0=,,,r)
                { 1: bond(r);
                  5: bond(t); 5: bond(b);
                };
 }
}
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.3\textwidth}
\begin{prog}
formula(T,B,"$\beta,\beta$-Caroten",HR,24)
{ ring(,,H4=)
 { 3: bond(t); 3: bond(b);
   5: bond(r);
   4: ISOPREN_
      ISOPREN_ bond(r; r/,=; r)
      ISOPREN1_
      ISOPREN1_ ring(,0,H0=,,,r)
                { 1: bond(r);
                  5: bond(t); 5: bond(b);
                };
 }
}
\end{prog}
\end{minipage}
\end{fullpage}

\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
formula(T,B,"$\beta,\psi$-Caroten",HR,24)
{ ring(,,H4=)
 { 3: bond(t); 3: bond(b);
   5: bond(r);
   4: ISOPREN_
      ISOPREN_ bond(r; r/,=; r)
      ISOPREN1_
      ISOPREN1_
      ISOPREN1_(,`-')
      bond(r/,=) branch { bond(r/t); } bond(r);
 }
}
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.3\textwidth}
\begin{prog}
formula(T,B,"$\beta,\psi$-Caroten",HR,24)
{ ring(,,H4=)
 { 3: bond(t); 3: bond(b);
               5: bond(r);
               4: ISOPREN_
               ISOPREN_ bond(r; r/,=; r)
               ISOPREN1_
      ISOPREN1_
      ISOPREN1_(,`-')
      bond(r/,=) branch { bond(r/t); } bond(r);
 }
}
\end{prog}
\end{minipage}
\end{fullpage}


\subsection*{AA}\index{AA}\index{Makro!AA}\index{Aminos""aure}
Dieser Baustein erleichtert die Darstellung von Aminos"auren in einer textuellen
Art und Weise ohne Ber"ucksichtigung der Stereostruktur. Die allgemeine Syntax
\begin{prog}
AA_(<N-Terminus>, <C-Terminus>, <Seitenkette>)
\end{prog}
sieht zwei Parameter vor, die den N- beziehungsweise C-Terminus beschreiben. Die
Angaben \verb+H+ beziehungsweise \verb+OH+ erzeugen die terminalen Sequenzen
H$_2$N- und -COOH. Diese Positionen k"onnen frei bleiben und erlauben auf diese
Weise die Darstellung von Oligopeptiden. Sie k"onnen aber auch beliebige
Formelsequenzen enthalten, um ungew"ohnliche Endgruppen zu zeichnen. Der dritte
Parameter erzeugt die Seitenkette der Aminos"aure.

\begin{chemistry}
formula(L,R,"A{}A\_",HR,24)
{ AA_(atom("\texttt{<N-Terminus>}",L,R),
     atom("\texttt{<C-Terminus>}",L), atom("\texttt{<Seitenkette>}", TL)) }
\end{chemistry}

Die folgenden Beispiele zeigen den Einsatz des Makros. Zur besseren "Ubersicht
wird dabei die Includedatei \verb+utils.inc+, die im Abschnitt~\ref{sec:utils}
beschrieben wird, eingesetzt.

Die Grundform einer Aminos"aure wird durch die Termini H und OH erreicht:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R,"Glycin",HR,24)
{ AA_(H,OH,atom("H")) }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(L,R,"Glycin",HR,24)
{ AA_(H,OH,atom("H")) }
\end{prog}
\end{minipage}
\end{fullpage}

F"ur ein einfaches Dipeptid darf die erste Aminos"aure keinen C-Terminus, die
zweite keinen N-Terminus erhalten:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
formula(L,R,"H-Gly-Val-OH",HR,24)
{ AA_(H,,atom("H"))
 bond(0)
 AA_(,OH,branch{atom("C",C,R) atom("H$_2$",L);} iPr_(-90)) }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
formula(L,R,"H-Gly-Val-OH",HR,24)
{ AA_(H,,atom("H"))
 bond(0)
 AA_(,OH,branch{atom("C",C,R) atom("H$_2$",L);} iPr_(-90))
}
\end{prog}
\end{minipage}
\end{fullpage}

Um eine ungew"ohnliche Abs"attigung der terminalen Atome anzuzeigen, k"onnen
auch vollkommen andere Formelelemente spezifiziert werden:
\begin{fullpage}
\begin{minipage}{.5\fullwidth}
\begin{chemistry}
formula(L,R,"Ph-Gly-Val-OiPr",HR,24)
{ AA_(ring(,0,,,,0){} bond(0),,atom("H"))
 bond(0)
 AA_(,bond(0) OEt_,
     branch{atom("C",C,R) atom("H$_2$",L);} iPr_(-90)) }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\fullwidth}
\begin{prog}
          formula(L,R,"Ph-Gly-Val-OiPr",HR,24)
          { AA_(ring(,0,,,,0){} bond(0),,atom("H"))
            bond(0)
            AA_(,bond(0) OEt_,
              branch{atom("C",C,R) atom("H$_2$",L);}
              iPr_(-90))
          }
\end{prog}
\end{minipage}
\end{fullpage}


\newpage\section{Das Includefile \texttt{utils.inc}}\label{sec:utils}
Eine weitere Includedatei ist \verb+utils.inc+ bei (Listing
in Abschnitt~\ref{utilsinc}), in der sehr kleine Makros zu finden sind, die
immer wiederkehrende Schreibarbeiten abk"urzen helfen.
Sie wird wie folgt in ein \LaTeX-Dokument eingebunden:
\begin{prog}
\begin{chemspecial}
include(`utils.inc')
\end{chemspecial}
\end{prog}

Sie enth"alt die folgenden Makros.
\begin{prog}
Me_             % erzeugt -CH3
eM_             % dto H3C-
Et_             % erzeugt -CH2CH3
tE_             % dto H3CH2C-
iPr_(<dir>)     % dto -CH(CH3)2

OH_               % erzeugt -OH
HO_               % dto HO-
NH2_              % erzeugt -NH2
H2N_              % dto H2N-
NH2p_             % erzeugt -N(+)H2
pH2N_             % dto H2N(+)-
NMe2_             % erzeugt -N(CH3)2
Me2N_             % dto (H3C)2N-
NMe2p_            % erzeugt -N(+)(CH3)2
pMe2N_            % dto (H3C)2N(+)-
OMe_              % dto -OCH3
MeO_              % dto H3CO-
OEt_              % dto -OCH2CH3
EtO_              % dto H3CH2CO-

COOH_             % dto -COOH
HOOC_             % dto HOOC-
COOMe_            % dto -COOCH3
MeOOC_            % dto H3COOC-
COOEt_            % dto -COOCH2CH3
EtOOC_            % dto H3CH2COOC-

SO3H_             % dto -SO3H
HO3S_             % dto HO3S-
SO3m_             % dto -SO3(-)
mO3S_             % dto (-)O3S-

Ph_{...}          % Phenyl
Ph_(<angle>){...} % Phenyl
\end{prog}
%IK 19.1.2000 begin
Der Rumpf von \verb+Ph_+ entspricht dem Rumpf eines normalen \verb+ring+"=Befehls
und kann alle dort erlaubten Operationen enthalten oder leer bleiben. \verb+iPr_+
erzeugt einen abzweigenden Isopropylrest, dessen Richtung mit dem Argument
festgelegt werden mu"s. Dieses besteht aus einer Winkelangabe.

Einige Beispiele zeigen die Anwendungsm"oglichkeiten. Das Makro zur Erzeugung des
Phenylringes weist einen optionalen Parameter zur Angabe des Drehwinkels des Ringes
auf, der zur Darstellung von Benzen als Grundk"orper der Struktur verwendet wird, in den
Beispielen 90\textdegree. Der Defaultwinkel \verb+r+ f"ur diesen Parameter f"uhrt zur
Darstellung von Phenylsubstituenten:
\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
 formula(L,R)
 { Ph_(90)
   { 0: iPr_(r);
     1: bond(r) COOH_;
     4: bond(r) iPr_(rt) bond(r/) HOOC_; }
 }
 formula(L,R)
 { Ph_(90)
   { 1: bond(r) OH_;
     4: bond(r) Ph_{};
     2: bond(r) Ph_{ 5: bond(r) MeO_; };
   }
 }
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
 formula(L,R)
 { Ph_(90)
   { 0: iPr_(r);
     1: bond(r) COOH_;
     4: bond(r) iPr_(rt) bond(r/) HOOC_; }
 }
 formula(L,R)
 { Ph_(90)
   { 1: bond(r) OH_;
     4: bond(r) Ph_{};
     2: bond(r) Ph_{ 5: bond(r) MeO_; };
   }
 }
\end{prog}
\end{minipage}
\end{fullpage}
%IK 19.1.2000 end


%IK 9.5.2000 end
\newpage\section{Includefiles f"ur Strukturen nach \textsc{Kekule}:
\texttt{condensed.inc} und \texttt{cyclohexanes.inc}}\label{sec:kekule}
Diese Includedateien wurden freundlicherweise von Herrn Dr.\,Kenvard Vaughan
bereitgestellt und sind im Unterverzeichnis \verb+kv+ zu finden. Sie werden
wie die anderen Includedateien auch eingebunden und enthalten Makros,
die den Satz von Strukturformeln nach \textsc{Kekule} bedeutend
vereinfachen. Beispiele aus der Dokumentation:\index{Strukturformel!nach Kekule}
\index{Kekule-Strukturformel}
\begin{prog}
\begin{chemspecial}
define(`bndlen_', `N')
include(`condensed.inc')
include(`cyclohexanes.inc')
\end{chemspecial}

\begin{chemistry}
 formula(L,R){_h(0) hk_(_h) co_ hk_(_h, bond(l,,L) vk_(_h) _h) hk_(_h) _h}
 space(R) space(R)
 formula(L,R){_ch3(,0) ch2_ ch_(,90, _ch2ch3(-), -45) _ch2ch3 }
 space(R) space(R)
 formula(L,R){_cho(-,-30) _kPh(_cho,_br,_och3,,_cooch2ch3(-)) }
\end{chemistry}
\end{prog}
\begin{chemistry}
 formula(L,R){_h(0) hk_(_h) co_ hk_(_h, bond(l,,L) vk_(_h) _h) hk_(_h) _h}
 space(R) space(R)
 formula(L,R){_ch3(,0) ch2_ ch_(,90, _ch2ch3(-), -45) _ch2ch3 }
 space(R) space(R)
 formula(L,R){_cho(-,-30) _kPh(_cho,_br,_och3,,_cooch2ch3(-)) }
\end{chemistry}

Beispiele f"ur Zyklohexane:
\begin{prog}
\begin{chemistry}
 defaulz
 formula(L,R){ chex_(C)
    c1_(_h,_h)
    c2_(_h,_h)
    c3_(_h,_h)
    c4_(_h,_h)
    c5_(_h,_h)
    c6_(_h,_h)
 }
 space(R) space(R) space(R) space(R)
 formula(L,R){ chex_(C)
    c1_(_o)
    c2_(,_oh)
    c3_(,_br)
    c4_(o_(r) _ch3)
 }
\end{chemistry}
\end{prog}
\begin{chemistry}
 defaulz
 formula(L,R){ chex_(C)
    c1_(_h,_h)
    c2_(_h,_h)
    c3_(_h,_h)
    c4_(_h,_h)
    c5_(_h,_h)
    c6_(_h,_h)
 }
 space(R) space(R) space(R) space(R)
 formula(L,R){ chex_(C)
    c1_(_o)
    c2_(,_oh)
    c3_(,_br)
    c4_(o_(r) _ch3)
 }
\end{chemistry}

Zu den beiden Includedateien existieren die ausf"uhrlichen Dokumentationen
\verb+condensed_doc.ps+ und \verb+cyclohexanes_doc.ps+.
%IK 9.5.2000 end


%
%
% -------------------------------------------
% -------------------------------------------
% -------------------------------------------
%
%
\begin{appendix}
%IK 19.1.2000 begin
\chapter{Das Programm}
\section{History}
\begin{description}
\item[20-OCT-1999]
 (\verb+chemie.pl+ version 1.0a 1999-10-20, \verb+be.pm+)\\
 Setting of \verb+\unitlength+ enclosed in a group.
\item[09-JAN-2000]
 (\verb+ochem.sty+ version 3-0b 2000-01-09, \verb+streambuf.pm+)\\
 Additional bond types \verb+>>+, \verb+>.+ and \verb+b+.
\item[17-JAN-2000]
 (\verb+mncyclib.pm+ version 1.1)\\
 \verb+furanose+ ring type for saccarid chemistry.
\item[19-JAN-2000]
 (\verb+ochem.sty+ version 3-0c 2000-01-19, \verb+streambuf.pm+, \verb+chemie.pl+)\\
 Additional bond type \verb+~+. The length of a bond can now be marked by
 a various number of markers N,n,L,l,S and s, representing additive terms.
 Command \verb+package+ allows to pass packages to the intermediate
 \LaTeX{} file, supporting macros in text position of \verb+atom+.
%IK 19.4.2000 begin
\item[19-APR-2000]
 Some undesired spaces are eliminated thanks to S.\,Seckinge, Freiburg
 (\verb+ochem.sty+ version 3-0d 2000-04-19, \verb+be.pm+).
%IK 19.4.2000 end
\item[10-APR-2001]
 Creation of EPS, JPG and PNG supplied. Minor changes in the perl code.
\end{description}
%IK 19.1.2000 end

\section{Danke sch"on!}
Einigen Benutzer (Herr Dr.\,Kenward Vaughan sowie Herrn Oliver B"urschaper)
verdanke ich wichtige Anregungen (fehlende Bindungstypen, Furanoseringe, die
M"oglichkeit, Makros in \verb+atom+"=Befehlen einzusetzen) und Meldungen von
Fehlern.

Herrn Dr.\,Kenward Vaughan danke ich fernerhin f"ur seinen Einsatz bei der
Entwicklung der Makros zur Darstellung von Formeln in der Kekule"=Darstellung,
die im Unterverzeichnis \verb+kv+ enthalten sind.

\iffalse
\chapter{Listings}
{\textwidth=\fullwidth
In diesem Kapitel sind die Listings wichtiger Hilfsdateien enthalten. Diese
k"onnen w"ahrend des Lesens der Beschreibungen die Umsetzung in ein Programm oder
Makro zeigen.

\section{Listing \texttt{mncyclib.pm}}\label{sec:mncyc}
{\small
\listinginput{1}{mncyclib.pm}
}

\section{Listing \texttt{bicyclib.pm}}\label{sec:bicyc}
{\small
\listinginput{1}{bicyclib.pm}
}

\section{Listing \texttt{polycyclib.pm}}\label{sec:polycyc}
{\small
\listinginput{1}{polycyclib.pm}
}

\section{Listing \texttt{natur.inc}}\label{sec:naturinc}
{\small
\listinginput{1}{natur.inc}
}

\section{Listing \texttt{utils.inc}}\label{sec:utilsinc}
{\small
\listinginput{1}{utils.inc}
}
} % end of textwidth=totalwidth
\fi

\chapter{Mehr Stoff f"ur Chemies"uchtige}
Wer Formeln zeichnet, mu"s sie m"oglicherweise auch benennen, was unter
Umst"anden beliebig diffizil werden kann. Auf den Internetseiten der Firma
\verb+acdlabs+ ist jedoch eine online-Version des IUPAC-Reglements
zu finden:
\begin{prog}
http://www.acdlabs.com/iupac/nomenclature/
\end{prog}
Eine sch"one Einf"uhrung in die korrekte Nomenklatur organischer Verbindungen
ist  D.~Hellwinkel, \textit{Die systematische Nomenklatur
organischer Verbindungen}, Springer-Verlag Heidelberg.

Als WYSIWYG-Konkurrenzprodukt zum vorliegenden \LaTeX-Paket ist das
chemische Zeichenprogramm ChemSketch der oben genannten Firma als Freeware-Version
f"ur Dosenrechner verf"ugbar:
\begin{prog}
http://www.acdlabs.com/download
\end{prog}
Es kann allerdings nicht nur Formeln zeichnen (sehr sch"on sogar), sondern
auch verschiedene Berechnungen durchf"uhren und dreidimensionale Stab-
oder Kugerl- (Kalotten)modelle zeichnen. Au"serdem besitzt es einen umfangreichen
Katalog mit Substanzen, Eigenschaften \dots.

\end{appendix}



\backmatter

\end{document}



\begin{fullpage}
\begin{minipage}{5cm}
\begin{chemistry}
\end{chemistry}
\end{minipage}
\hfil
\begin{minipage}{0.5\textwidth}
\begin{prog}
\end{prog}
\end{minipage}
\end{fullpage}