% %! 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\\ kloeckl@vkcmzd.chemie.uni-mainz.de\\ ingo.kloeckl@2k-software.de\\ 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 \end{prog} Die Zeichenfolge \verb+latex+ mu"s zum Beispiel durch \verb+tex386+ ersetzt werden, falls Sie \LaTeX{} wie folgt starten: \begin{prog} tex386 \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} \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("") \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} kloeckl@vkcmzd.chemie.uni-mainz.de ingo.kloeckl@2k-software.de \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++ 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++ und \verb++ 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{}+ und \verb+\vdd{}+, 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{}+ und \verb+\hddu{}+, f"ur Elektronen unterhalb des Atomsymbols die Makros \verb+\hdl{}+ und \verb+\hddl{}+: \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++ und \verb++ 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(, ) getlength(, ) \end{prog} benutzen, um Winkel und L"ange einer Bindung zwischen den Atomen mit den Koordinaten \verb++ und \verb++ zu bestimmen, wobei der Startpunkt der Bindung am Atom \verb++ liegt. \begin{prog} getpos(, , ) \end{prog} kann dagegen den Endpunkt einer Bindung vom Punkt \verb++ 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} := atom | bond | branch | orbital | saveXY | ring | save | restore | set := 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([ [] [, [] [, [){ } ] [ text(B, ){ } ] } [ nospace ] := L | C | R Defaults: = 0 = rArrowExtend = 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++, \verb++ und \verb++ bestimmt. Die Richtung des Pfeils wird mit den Winkel \verb++ in Altgrad und im mathematisch positiven Sinne gegen"uber der positiven x-Achse gemessen. \verb++ 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++ 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++. 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++ vor der Beschriftung, der L"ange der Beschriftung selbst und einem folgenden Anteil \verb++. 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++ 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++ 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("" [, [] [, []]]) := C | L | R | T | B | TL | TR | BL | BR := C | L | R | T | B | TL | TR | BL | BR Defaults: = C = 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++ 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++ 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++ 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++ ist \verb+R+) und von der aus eine Bindung nach links weiterf"uhrt (\verb++ 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( [, [] [, []]]) bond([] [+|-] r|t|b|l|v [+|-] [, [] [, []]]) bond(# [, [] ]]) bond(; ; ... ) := - -> <- <-> <. << 3 t s >> >. p b ~ := S | N | L | s | n | l [...] Defaults: = 0 = 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++ den Winkel der Bindung gegen"uber der positiven x-Achse vorgeben, mit Hilfe von \verb++ zwischen mehreren Bindungsformen w"ahlen sowie mit \verb++ 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++ 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()}] Winkel, unter dem die Bindung vom Ringatom mit der Nummer \verb++ zum n"achsten Ringatom gezeichnet wird, entspricht also dem Winkel der Ringkante \verb++. \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++ 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+#+ (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++ 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{ ; ; ... } \end{prog} Mit diesem Befehl k"onnen Sie ausgehend von der aktuellen Position, Verzweigungen aufbauen. Jede Formelkette \verb++ 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(, ) { ; ... ; } := L | C | R \end{prog} Der Befehl dient zum Zusammenf"uhren von \verb++ horizontal laufenden Reaktionsketten. Die einzelnen Ketten werden so angeordnet, da"s sie in einem gleichen Abstand "ubereinander verlaufen. Der Parameter \verb++ 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(, ) { ; ... ; } := T | C | B \end{prog} "Ahnlich $\to$\verb+joinh+ f"ur horizontale Ketten, f"uhrt dieser Befehl \verb++ 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++ 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(#, , , #, , ) \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++ beziehungsweise \verb++ 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++ und \verb++ sowie zwei reelle Zahlen \verb++ und \verb++ beziehungsweise \verb++, 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(, , ["", HA|HR|V, ]) { } [ nospace ] := C | L | R | T | B | TL | TR | BL | BR := C | L | R | T | B | TL | TR | BL | BR Defaults: = L = 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++ 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++ zum Startpunkt steht. Der Anschlu"spunkt f"ur die folgenden Formeln wird durch den Parameter \verb++ 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([] [, []]) 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( [, [] [, [] [, []]]] ) { ; ... ; } := L | C | R := C | L | R | T | B | TL | TR | BL | BR := C | L | R | T | B | TL | TR | BL | BR Defaults: = L = L = R \end{prog} Der Befehl dient dazu, \verb++ 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++ linksb"undig, mittig oder rechtsb"undig zueinander ausgerichtet. Der \verb++-zeilige Block als Ganzes wird gem"a"s \verb++ auf den aktuellen Punkt ausgerichtet, der Anschlu"spunkt f"ur folgende Formeln gem"a"s \verb++ 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++ 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([] [, []]) Default: = 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++ ist der Winkel, den die L"angsachse der Keule und die positive x-Achse einschlie"sen, \verb++ 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(#) \end{prog} Mit diesem Befehl wird der unter der ganzen Zahl \verb++ 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(#) \end{prog} Mit diesem Befehl wird der aktuelle Punkt auf die zuvor mit $\to$\verb+saveXY+ unter der ganzen Zahl \verb++ 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([ [, [] [, [] [, [[#]] [, [] [, []]]]]]]) { [ ; ; ... ] % nur bei = "ring", "cpentane", "chair": [ vertex([] [, [] [, [] [, [] ]]]]) { [; ; ... ] } ... ] } := 0.. := [H|O] [ 0|1|...| ] := C|0|1|...| : Defaults: = "ring" = 0 = O = N = 6 = -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++ und \verb++ 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++). Mit der \textit{Bindungsliste} \verb++ 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++ 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++ 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++ und \verb++ 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++ ist ohne Bedeutung, \verb++ stellt wie beim Grundger"ust \verb+ring+ den Drehwinkel des gesamten Ringes dar. \item[chair] \verb++ stellt wie beim Grundger"ust \verb+ring+ den Drehwinkel des gesamten Ringes dar. \verb++ 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++"=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++ 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++ und \verb++ 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++ ist die Bindungsliste f"ur den neuen Ring, der ebenfalls nur vom Typ \verb+ring+ sein darf. \verb++ 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++ 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(#) \end{prog} Dieser Befehl sichert die beim Formelsatz benutzten graphischen Parameter unter der ganzen Zahl \verb++. 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(#) \end{prog} Mit diesem Befehl wird der Kontext, der durch die zuletzt dargestellte Formel festgelegt wird, unter einer Nummer \verb++ 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(#) saveXY(#, , ) \end{prog} Der Befehl speichert in der oberen Syntaxvariante die aktuellen Koordinaten unter der Nummer \verb++. Die erweiterte, untere Syntax speichert die Koordinaten eines Punktes, der vom aktuellen Punkt um die L"ange \verb++ in Richtung des Winkels \verb++ 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(#)+ 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(

) \end{prog} Der Befehl skaliert alle internen graphischen Parameter mit dem Faktor \verb+

+. \verb+

+ 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([] [, []]) Default: = 0 = 0 \end{prog} Der Befehl erlaubt es, au"serhalb von Formeln den aktuellen Punkt um die Gr"o"se \verb++ auf der x-Achse, um \verb++ 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(, ) \end{prog} Mit diesem Befehl k"onnen Sie jeweils einen der in Tabelle~\ref{tab:param} aufgelisteten Parameter \verb++, die das Layout des Formelsatzes steuern, "andern und ihn auf den Wert \verb++ 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(#, ) [nospace] := C | L | R | T | B | TL | TR | BL | BR \end{prog} Der Befehl legt den unter der Nummer \verb++ zuvor gespeicherten Kontext als aktuellen Kontext ab und ermittelt einen Fortsetzungspunkt, der sich aus der Kontext"=Bounding~Box und dem Positionierungsparameter \verb++ 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() := C | L | R | T | B | TL | TR | BL | BR \end{prog} Mit diesem Befehl k"onnen Sie zus"atzlichen Zwischenraum in der durch \verb++ 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("") \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("") package("[]") \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() \end{prog} Dieser Befehl l"adt das Perl-Modul \verb+.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(" endschema \end{prog} Dieses Kommando kennzeichnet Anfang und Ende einer Formel oder eines ganzen Reaktionsschemas. \verb++ wird als Einheit "ubersetzt und unter dem Dateinamen \verb++ 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++:\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++ und \verb++ ist folgende: \begin{description} \item[cb] (Zyklobutan-Ger"ust) Der Parameter \verb++ entf"allt, \verb++ 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++ stellt wiederum den Ger"ustdrehwinkel dar. \verb++ 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++: \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++ und \verb++ 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++: {\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++ und \verb++ ist folgende: \begin{description} \item[tetrahedrane] Der Parameter \verb++ ist bedeutungslos, wohingegen \verb++ den Drehwinkel des gesamten Ger"ustes darstellt. \index{Tetrahedran} \item[cubane] Der Parameter \verb++ ist bedeutungslos, wohingegen \verb++ 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_(, ) \end{prog} \verb++ ist dabei die Bindungsliste f"ur den Ring, \verb++ 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_(, ) \end{prog} und erzeugt Steroidstrukturen gem"a"s \verb++. 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++ 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_() ISOPREN1_(, ) \end{prog} \verb++ 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++ 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++ 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_(, , ) \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{}",L,R), atom("\texttt{}",L), atom("\texttt{}", 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_(

) % 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_(){...} % 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}