%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % --------------------------------------------------------------------------- % % - MOdiagram - modiagram_doc_en.tex - % % - easy creation of molecular orbital diagrams - % % --------------------------------------------------------------------------- % % - Clemens NIEDERBERGER - % % - 2012/01/23 - % % --------------------------------------------------------------------------- % % - http://www.mychemistry.eu/ - % % - contact@mychemistry.eu - % % --------------------------------------------------------------------------- % % - If you have any ideas, questions, suggestions or bugs to report, please - % % - feel free to contact me. - % % --------------------------------------------------------------------------- % % - Copyright 2011-2012 Clemens Niederberger - % % - - % % - This work may be distributed and/or modified under the - % % - conditions of the LaTeX Project Public License, either version 1.3 - % % - of this license or (at your option) any later version. - % % - The latest version of this license is in - % % - http://www.latex-project.org/lppl.txt - % % - and version 1.3 or later is part of all distributions of LaTeX - % % - version 2005/12/01 or later. - % % - - % % - This work has the LPPL maintenance status `maintained'. - % % - - % % - The Current Maintainer of this work is Clemens Niederberger. - % % - - % % - This work consists of the files modiagram.sty, modiagram_doc_de.tex, - % % - modiagram_doc_de.tex, README - % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass{scrartcl} \usepackage{fontspec,xltxtra} \usepackage{polyglossia} \setmainlanguage{english} \defaultfontfeatures{Scale=MatchLowercase} \setmainfont[SmallCapsFont=Linux Libertine Capitals O,SlantedFont=Linux Libertine Slanted O]{Linux Libertine O} \setsansfont[SmallCapsFont=Linux Biolinum Capitals O,SlantedFont=Linux Biolinum Slanted O]{Linux Biolinum O} \setmonofont{Inconsolata} \usepackage[dvipsnames]{xcolor} \colorlet{code}{RawSienna} \usepackage{modiagram,xspace,siunitx,framed,chemfig,booktabs} \usepackage[version=3]{mhchem} \usepackage{showexpl} \lstset{ explpreset={ language = [LaTeX]TeX, basicstyle = {\ttfamily\small}, breaklines = true, commentstyle = {\color[named]{Gray}}, backgroundcolor = \color{yellow!20}, numbers = left, numberstyle = \tiny, numberblanklines = true, numbersep = .3em, xleftmargin = 1em, gobble = 1, keywordstyle = \color{code}, morekeywords = { AO, atom, ce, connect, draw, EnergyAxis, lewis, Lewis, molecule, MOsetup, node, textcolor, textSigma } }, language = [LaTeX]TeX, basicstyle = {\ttfamily}, breaklines = true, commentstyle = {\color[named]{Gray}}, backgroundcolor = \color{yellow!20}, numbers = left, numberstyle = \tiny, numberblanklines = true, numbersep = .3em, xleftmargin = 1em, gobble = 1, moredelim = [is][\color{black}]{|}{|}, keywordstyle = \color{code}, morekeywords = { AO, atom, connect, draw, EnergyAxis, molecule, MOsetup, usepackage } } \usepackage{hyperref} \hypersetup { colorlinks = true, urlcolor = blue!80, linkcolor = blue!80, plainpages = false, bookmarksopen = true, bookmarksopenlevel = 2, bookmarksnumbered = true, pdfauthor = {Clemens Niederberger}, pdftitle = {MOdiagram - Manual}, pdfsubject = {Create MO diagrams with LaTeX}, pdfkeywords = {MOdiagram}, pdfcreator = {LaTeX} } \newcommand*\MOname{\textsf{MOdiagram}\xspace} \newcommand*\MOversion{0.2a\xspace} \newcommand*\MOdate{2012/01/23} \newcommand*\paket[1]{\textsf{#1}\footnote{\url{http://www.ctan.org/pkg/#1}}} \newcommand*\TikZ{\mbox{Ti\textbf{\textit{k}}Z}\xspace} \newcommand*\etc{\mbox{etc.}\xspace} \newcommand*\ie{\mbox{i.e.}\xspace} \newlength\marginnotewidth \NewDocumentCommand\marginnote { sm } {% \settowidth\marginnotewidth{\small\color{red}#2} \addtolength\marginnotewidth{20pt} \noindent\makebox[0cm]{\hskip-\marginnotewidth\small\color{red}#2}% \IfBooleanF{#1}{\hspace{\parindent}}% } \NewDocumentCommand \AOinline { o m } { \begingroup \IfNoValueTF{#1} {\MOsetup{ style=square,AO-width=8pt }}% {\MOsetup{ style=square,AO-width=8pt , #1 }}% \begin{MOdiagram} \AO{s}{0;#2} \end{MOdiagram}% \endgroup } \begin{document} \begin{titlepage} \centering \Huge MOdiagram v\MOversion \vskip.5cm \Large\MOdate \vskip.5cm \large Clemens \textsc{Niederberger} \vskip.25cm \normalsize\url{http://www.mychemistry.eu/}\\ \href{mailto:contact@mychemistry.eu}{contact@mychemistry.eu} \vskip2cm \begin{abstract} \MOname provides an environment and commands for the creation of molecular orbital diagrams. \end{abstract} \begin{MOdiagram}[style=fancy,distance=7cm,AO-width=15pt,labels,names] \atom[N]{left}{ 2p = {0;up,up,up} } \atom[O]{right}{ 2p = {2;pair,up,up} } \molecule[NO]{ 2pMO = {1.8,.4;pair,pair,pair,up}, color = { 2piy*=red } } \end{MOdiagram} \end{titlepage} \tableofcontents \newpage \section{Licence, Requirements} \MOname v\MOversion underlies the \LaTeX\ Project Public License version 1.3 or later.\newline(\url{http://www.latex-project.org/lppl.txt}) \MOname needs the packages \paket{expl3}, \paket{xparse}, \paket{l3keys2e}, \textsf{tikz}\footnote{\url{http://www.ctan.org/pkg/pgf}} and \paket{textgreek}. Additionally the \TikZ libraries \textsf{calc} and \textsf{arrows} are loaded. Knowledge of \textsf{pgf} or \textsf{tikz} would be useful. \section{Motivation} This package has been written as a reaction to a question on \url{http://tex.stackexchange.com/}. To be more precise: as a reaction to the question \href{http://tex.stackexchange.com/questions/13863/molecular-orbital-diagrams-in-latex}{Molecular orbital diagrams in LaTeX}. There it says \begin{quote}\small\sffamily I'm wondering if anyone has seen a package for drawing (qualitative) molecular orbital splitting diagrams in \LaTeX? Or if there exist any packages that can be easily re-purposed to this task? Otherwise, I think I'll have a go at it in \TikZ. \end{quote} The problem was solved using \TikZ, since no package existed for that purpose. For one thing \MOname is intended to fill this gap. I also found it very tedious, to make all this copying and pasting when I needed a second, third, \ldots\ diagram. \MOname took care of that. \section{Main Commands} All molecular orbital (MO) diagrams are created using the environment \lstinline=MOdiagram=. When the commands are described in the following sections, arguments are marked with (o) or (m) meaning \emph{optional} or \emph{mandatory} argument. \subsection{The \texttt{\textbackslash atom} Command} \begin{framed} \lstinline=\atom[]{}{<|AO|-spec>}= \begin{itemize}\small \item\lstinline== (o) caption of the atom \item\lstinline== (m) on the left or the right in the diagram \item\lstinline=<|AO|-spec>= (m) specifications of the atomic orbitals (AO) \end{itemize} \end{framed} Let's take a look at an example: \begin{LTXexample} \begin{MOdiagram} \atom{right}{ 1s = { 0; pair} , 2s = { 1; pair} , 2p = {1.5; up, down } } \end{MOdiagram} \end{LTXexample} As you can see, the argument \lstinline=<|AO|-spec>= is essential to create the actual orbitals and the electrons within. You can use these key/value pairs to specify what you need: \begin{framed} \begin{itemize} \item\lstinline+1s={; }+ \item\lstinline+2s={; }+ \item\lstinline+2p={; , , }+ \end{itemize} \end{framed} \lstinline== can have the values \lstinline=pair=, \lstinline=up= and \lstinline=down= or can be left empty. \lstinline== actually is the $y$ coordinate and shifts the AO vertically by \lstinline== \si{\centi\metre}. The argument \lstinline== is important, when p orbitals are used. For instance compare the following example to the one before: \begin{LTXexample} \begin{MOdiagram} \atom{left}{ 1s = { 0; pair} , 2s = { 1; pair} , 2p = {1.5; up, down } } \end{MOdiagram} \end{LTXexample} When both variants are used one can also see, that the right atom is shifted to the right (hence the naming). The right atom is shifted by \SI{4}{\centi\metre} per default and canbe adjusted individually, see page \pageref{option:distance}. \begin{LTXexample}[pos=b] \begin{MOdiagram} \atom{left}{ 1s = { 0; pair} , 2s = { 1; pair} , 2p = {1.5; up, down } } \atom{right}{ 1s = { 0; pair} , 2s = { 1; pair} , 2p = {1.5; up, down } } \end{MOdiagram} \end{LTXexample} With the command \lstinline=\molecule= (section \ref{ssec:molecule}) the reason for the shift becomes clear. \marginnote{NEW}Any of the arguments for the AO can be left empty or be omitted. \begin{LTXexample}[pos=b] Without argument: default height, full: \begin{MOdiagram} \atom{left}{1s, 2s, 2p} \end{MOdiagram} \end{LTXexample} \begin{LTXexample}[pos=b] empty argument: default height, empty: \begin{MOdiagram} \atom{left}{1s=, 2s=, 2p=} \end{MOdiagram} \end{LTXexample} \begin{LTXexample}[pos=b] using some values:\\ \begin{MOdiagram} \atom{left}{1s, 2s=1, 2p={;,up} } \end{MOdiagram} \end{LTXexample} \subsection{The \texttt{\textbackslash molecule} Command}\label{ssec:molecule} \begin{framed} \lstinline=\molecule[]{}= \begin{itemize}\small \item\lstinline== (o) caption of the molecule \item\lstinline== (m) specifications of the molecular orbitals (MO) \end{itemize} \end{framed} An example first: \begin{LTXexample} \begin{MOdiagram} \atom{left} { 1s = { 0; up } } \atom{right}{ 1s = { 0; up } } \molecule { 1sMO = {.75; pair } } \end{MOdiagram} \end{LTXexample} The command \lstinline=\molecule= connects the AO with the bonding and anti-bondung MO. \lstinline=\molecule= can only be used \emph{after} one has set \emph{both} atoms, since the orbitals, that should be connected, must be known. The argument \lstinline== accepts a comma separated list of key/value pairs: \begin{framed} \begin{itemize} \item\lstinline+1sMO={/; , }+ (connects the AO specified by \lstinline=1s=) \item\lstinline+2sMO={/; , }+ (connects the AO specified by \lstinline=2s=) \item\lstinline+2pMO={/,

/

; , , , , , }+ (connects the AO specified by \lstinline=2p=) \end{itemize} \end{framed} Obviously the regarding AO must have been set in order to connect them. This for example won't work: \begin{lstlisting}[basicstyle = {\ttfamily\small}] \begin{MOdiagram} \atom{left} { 1s = 0 } \atom{right}{ 1s = 0 } \molecule { 2sMO = .75 } \end{MOdiagram} \end{lstlisting} The value used in \lstinline== determines how many \si{\centi\metre} the bonding MO lies below the lower AO or how many \si{\centi\metre} the anti-bondung MO lies above the higher AO. \begin{LTXexample}[pos=b] same level: \begin{MOdiagram} \atom{left} { 1s = { 0; up } } \atom{right}{ 1s = { 0; up } } \molecule { 1sMO = {.75; pair } } \end{MOdiagram} different levels: \begin{MOdiagram} \atom{left} { 1s = { 0; up } } \atom{right}{ 1s = { 1; up } } \molecule { 1sMO = {.25; pair } } \end{MOdiagram} \end{LTXexample} \marginnote{NEW}If you specify \lstinline==, you can create non-symmetrical splittings. Then, the first value (\lstinline==) is used for the bonding MO and the second value (\lstinline==) is used for the anti-bonding MO. \begin{LTXexample}[pos=b] \begin{MOdiagram} \atom{left} { 1s = { 0; up } } \atom{right}{ 1s = { 0; up } } \molecule { 1sMO = {.75/.25; pair } } \end{MOdiagram} \begin{MOdiagram} \atom{left} { 1s = { 0; up } } \atom{right}{ 1s = { 1; up } } \molecule { 1sMO = {.25/.75; pair } } \end{MOdiagram} \end{LTXexample} Please be aware, that you have to specify \emph{two} such values or pairs with \lstinline=2pMO=: the splitting of the \textsigma\ orbitals and the splitting of the \textpi\ orbitals. \begin{LTXexample} \begin{MOdiagram} \atom{left} { 2p = { 0; up, up } } \atom{right}{ 2p = { 1; up, up } } \molecule { 2pMO = { 1.5, .75; pair, up, up } } \end{MOdiagram} \end{LTXexample} The complete MO diagram for triplett dioxygen now could look something like that: \begin{LTXexample} \begin{MOdiagram} \atom{left}{ 1s, 2s, 2p = {;pair,up,up} } \atom{right}{ 1s, 2s, 2p = {;pair,up,up} } \molecule{ 1sMO, 2sMO, 2pMO = {;pair,pair,pair,up,up} } \end{MOdiagram} \end{LTXexample} \newpage \subsection{The Naming Scheme}\label{Namensgebung} Since one wants to be able to put labels to the orbitals and since they are nodes in a tikzpicture, the internal naming scheme is important. It closely follows the function: \begin{center} \begin{MOdiagram}[distance=6cm,AO-width=20pt,labels-fs=\tt\footnotesize,labels-style={yshift=10pt}] \atom{left}{ 1s=0, 2s=2, 2p=5, label={ 1sleft={1sleft}, 2sleft={2sleft}, 2pxleft={2pxleft}, 2pyleft={2pyleft}, 2pzleft={2pzleft} } } \atom{right}{ 1s=0, 2s=2, 2p=5, label={ 1sright={1sright}, 2sright={2sright}, 2pxright={2pxright}, 2pyright={2pyright}, 2pzright={2pzright} } } \molecule{ 1sMO=.5, 2sMO=.5, 2pMO={1.5,.5}, label={ 1sigma={1sigma}, 1sigma*={1sigma*}, 2sigma={2sigma}, 2sigma*={2sigma*}, 2psigma={2psigma}, 2psigma*={2psigma*}, 2piy={2piy}, 2piy*={2piy*}, 2piz={2piz}, 2piz*={2piz*} } } \end{MOdiagram} \end{center} With these names it is possible to reference the orbitals with the known \TikZ commands: \begin{LTXexample} \begin{MOdiagram} \atom{left} { 1s = 0 } \atom{right}{ 1s = 0 } \molecule { 1sMO = .75 } \draw[<->,red,semithick] (1sigma.center) -- (1sigma*.center) ; \draw[red] (1sigma*) ++ (2cm,.5cm) node {splitting} ; \end{MOdiagram} \end{LTXexample} \begin{LTXexample} \begin{MOdiagram} \atom{left} { 1s = 0 } \atom{right}{ 1s = 0 } \molecule { 1sMO = .75 } \draw[draw=blue,very thick,fill=blue!40,opacity=.5] (1sigma*) circle (8pt); \draw[<-,shorten <=8pt,shorten >=15pt,blue] (1sigma*) --++(2,1) node {anti-bonding MO}; \end{MOdiagram} \end{LTXexample} \subsection{Placing AO and MO Arbitrarily}\label{ssec:AO_MO_irgendwo} The standard orbitals are not always sufficient in order to draw a correct MO diagram. For example in the MO diagram of \ce{XeF2} one would need this part, that illustrates the interaction between the bonding and anti-bonding combination of two p orbitals of Flourine with one p orbital of Xenon: \begin{center} \begin{MOdiagram}[names] \atom[\lewis{0.,F}\hspace*{5mm}\lewis{4.,F}]{left}{1s=.2;up,up-el-pos={1sleft=.5}} \atom[Xe]{right}{1s=1.25;pair} \molecule[\ce{XeF2}]{1sMO={1/.25;pair}} \AO(1cm){s}{0;up} \AO(3cm){s}{0;pair} \connect{ AO1 & AO2 } \node[right,xshift=4mm] at (1sigma) {\footnotesize bonding}; \node[above] at (AO2.90) {\footnotesize non-bonding}; \node[above] at (1sigma*.90) {\footnotesize anti-bonding}; \end{MOdiagram} \end{center} To create diagrams like this there is the following command, which draws a single AO: \begin{framed} \lstinline+\AO[](){}[]{;}+ \begin{itemize}\small \item\lstinline== (o) name of the node; if not specified, \lstinline=|AO|#= is used where \lstinline=#= is a consecutive number. \item\lstinline== (o) vertical position of the orbitals, a \TeX\ dimension. \item\lstinline== (m) \lstinline=s= or \lstinline=p= \item\lstinline++ (o) key/value pairs, with which the AO can be customized, see section \ref{ssec:AO_anpassen}. \item\lstinline=<|AO|-spec>= (m) specification of the AO \end{itemize} \end{framed} \newpage Depending on the \lstinline== one s or three p orbitals are drawn. \begin{LTXexample} \begin{MOdiagram} \AO{s}{0;} \AO(-20pt){p}{1;pair,up,down} \end{MOdiagram} \end{LTXexample} If one wants to place such an AO at the position of an atom, one has to know their \lstinline==. They have predefined values (also see section \ref{orbital-positionen}):\label{xshift} \begin{itemize} \item atom left: \SI{1}{\centi\metre} \item molecule: \SI{3}{\centi\metre} \item atom right: \SI{5}{\centi\metre} \end{itemize} \begin{LTXexample} \begin{MOdiagram} \atom{left} {1s=0} \atom{right}{1s=0} \molecule {1sMO=1} \AO(1cm){s}{2} \AO(3cm){s}{2} \AO(5cm){s}{2} \end{MOdiagram} \end{LTXexample} Within the p orbitals there is an additional shift by \SI{20}{pt} per orbital. This is equivalent to a double shift by the length \lstinline=|AO|-width= (see section \ref{option:AO-width}): \begin{LTXexample} \begin{MOdiagram} \atom{left} {2p=0} \atom{right}{2p=0} % above the left atom: \AO(1cm) {s}{ .5} \AO(1cm-20pt){s}{ 1;up} \AO(1cm-40pt){s}{1,5;down} % above the right atom: \AO(5cm) {s}{ .5} \AO(5cm+20pt){s}{ 1;up} \AO(5cm+40pt){s}{1.5;down} \end{MOdiagram} \end{LTXexample} The AO created with \lstinline=\AO= also can be connected. For this you can use the \TikZ command \lstinline=\draw= , of course. You can use the predefined node names \ldots \begin{LTXexample} \begin{MOdiagram} \AO{s}{0} \AO(2cm){s}{1} \AO{s}{2} \AO(2cm){s}{1.5} \draw[red] (AO1.0) -- (AO2.180) (AO3.0) -- (AO4.180); \end{MOdiagram} \end{LTXexample} \ldots\ or use own node names \begin{LTXexample} \begin{MOdiagram} \AO[a]{s}{0} \AO[b](2cm){s}{1} \AO[c]{s}{2} \AO[d](2cm){s}{1.5} \draw[red] (a.0) -- (b.180) (c.0) -- (d.180); \end{MOdiagram} \end{LTXexample} The predefined names are \lstinline=AO1=, \lstinline=AO2= \etc for the type \lstinline=s= and \lstinline=AO1x=, \lstinline=AO1y=, \lstinline=AO1z=, \lstinline=AO2x= \etc for the type \lstinline=p=. Nodes of the type \lstinline=p= get a \lstinline=x=, \lstinline=y= or a \lstinline=z= if you specify your own name, too. \begin{LTXexample}[pos=b] \begin{MOdiagram} \AO{p}{0} \draw[<-,shorten >=5pt] (AO1y.-90) -- ++ (.5,-1) node {y}; \end{MOdiagram} und \begin{MOdiagram} \AO[A]{p}{0} \draw[<-,shorten >=5pt] (Ay.-90) -- ++ (.5,-1) node {y}; \end{MOdiagram} \end{LTXexample} However, if you want the lines to be drawn in the same style as the ones created by \lstinline=\molecule=\footnote{which can be customized, see page \pageref{option:lines}}, you should use the command \lstinline=\connect=. \begin{framed} \lstinline=\connect{<|AO-connect|>}= \begin{itemize}\small \item\lstinline=<|AO-connect|>= (m) comma separated list of node name pairs connected with \lstinline=&= \end{itemize} \end{framed} This command expects a comma separated list of node name pairs, that are to be connected. The names have to be connected with a \lstinline=&=: \begin{LTXexample} \begin{MOdiagram} \AO{s}{0;} \AO(2cm){s}{1;} \AO{s}{2;} \AO(2cm){s}{1.5;} \connect{ AO1 & AO2, AO3 & AO4 } \end{MOdiagram} \end{LTXexample} Some things still need to be said: \lstinline=\connect= adds the anchor \lstinline=east= to the first name and the anchor \lstinline=west= to the second one. This means a connection only makes sense from the left to the right. However, you can add own anchors using the usual \TikZ way: \begin{LTXexample} \begin{tikzpicture} \draw (0,0) node (a) {a} ++ (1,0) node (b) {b} ++ (0,1) node (c) {c} ++ (-1,0) node (d) {d} ; \connect{ a.90 & d.-90, c.180 & d.0 } \end{tikzpicture} \end{LTXexample} \subsection{The Positioning Scheme}\label{orbital-positionen} The figure below shows the values of the $x$ coordinates of the orbitals, depending in the values of \lstinline== (\lstinline==) and \lstinline=<|AO|-width>= (\lstinline=<|AO|>=). In sections \ref{option:distance} and \ref{option:AO-width} these lengths and how they can be changed are discussed. \begin{center} \begin{MOdiagram}[AO-width=22pt,labels-fs=\tt\scriptsize,labels-style={text width=40pt,align=center,yshift=11pt}] \atom{left}{ 1s=0, 2s=2, 2p=5.5, label={ 1sleft={1cm}, 2sleft={1cm}, 2pxleft={1cm - 4*}, 2pyleft={1cm - 2*}, 2pzleft={1cm} } } \atom{right}{ 1s=0, 2s=2, 2p=5.5, label={ 1sright={1cm + }, 2sright={1cm + }, 2pxright={1cm+ }, 2pyright={1cm + + 2*}, 2pzright={1cm + + 4*} } } \molecule{ 1sMO=.5, 2sMO=.5, 2pMO={2,.75}, label={ 1sigma={.5* + 1cm}, 1sigma*={.5* + 1cm}, 2sigma={.5* + 1cm}, 2sigma*={.5* + 1cm}, 2psigma={.5* + 1cm}, 2psigma*={.5* + 1cm}, 2piy={.5* + 1cm - }, 2piy*={.5* + 1cm - }, 2piz={.5* + 1cm + }, 2piz*={.5* + 1cm + } } } \end{MOdiagram} \end{center} \newpage \subsection{Default Values} \marginnote*{NEW}If you leave the arguments (or better: values) for the specification of the AO or MO empty or omit them, default values are used. The table below shows you, which ones. \begin{center}\small \begin{tabular}{l>{\ttfamily}l>{\ttfamily}l>{\ttfamily}l} \toprule & \normalfont\bfseries AO / MO & \normalfont\bfseries omitted & \normalfont\bfseries empty \\\midrule syntax: & & 1s & 1s= \\\midrule & 1s & \{0;pair\} & \{0;\} \\ & 2s & \{2;pair\} & \{2;\} \\ & 2p & \{5;pair,pair,pair\} & \{5;,,\} \\\midrule & 1sMO & \{.5;pair,pair\} & \{.5;,\} \\ & 2sMO & \{.5;pair,pair\} & \{.5;,\} \\ & 2pMO & \{1.5,.5;pair,pair,pair,pair,pair,pair\} & \{1.5,.5;,,,,,\} \\\bottomrule \end{tabular} \end{center} This is similar for the \lstinline=\AO= command (page \pageref{ssec:AO_MO_irgendwo}); It needs a value for \lstinline==, though. \begin{center}\small \begin{tabular}{>{\ttfamily}l>{\ttfamily}l>{\ttfamily}l} \toprule\bfseries & \bfseries \\\midrule s & pair \\ p & pair,pair,pair \\\bottomrule \end{tabular} \end{center} Compare these examples: \begin{LTXexample} \begin{MOdiagram} \atom{left} { 1s={0;pair} } \atom{right}{ 1s } \end{MOdiagram} \hrulefill \begin{MOdiagram} \atom{left}{ 1s=1 } \atom{right}{ 1s= } \end{MOdiagram} \end{LTXexample} \section{Customization} Th options of the section \ref{ssec:umgebungs_optionen} can be set global as package option, \ie with \lstinline+\usepackage[]{modiagram}+, or via the setup command \lstinline+\MOsetup{}+. \subsection{Environment Options}\label{ssec:umgebungs_optionen} There are some options with which the layout of the MO diagrams can be changed: \begin{itemize} \item\lstinline+style=+ change the style of the orbitals and the connecting lines, section \ref{option:style}. \item\lstinline+distance=+ distance betwen left and right atom, section \ref{option:distance}. \item\lstinline+|AO|-width=+ change the width of orbitals, section \ref{option:AO-width}. \item\lstinline+el-sep=+ distance between the electron pair arrows, section \ref{option:electrons}. \item\lstinline+up-el-pos=+ position of the spin-up arrow, section \ref{option:electrons}. \item\lstinline+down-el-pos=+ position of the spin-down arrow, section \ref{option:electrons}. \item\lstinline+lines=+ change the \TikZ style of the connecting lines, section \ref{option:lines}. \item\lstinline+names=+ add captions to the atoms and the molecule, section \ref{option:names}. \item\lstinline+names-style=+ change the \TikZ style of the captions, section \ref{option:names_style}. \item\lstinline+names-style-add=+ change the \TikZ style of the captions, section \ref{option:names_style}. \item\lstinline+labels=+ add default labels to the orbitals, section \ref{option:labels}. \item\lstinline+labels-fs=+ change the font size of the labels, section \ref{option:labels-fs}. \item\lstinline+labels-style=+ change the \TikZ style of the labels, section \ref{option:labels-style}. \end{itemize} They all are discussed in the following sections. If they're used as options for the environment, they'r set locally and only change that environment. \begin{lstlisting} \begin{MOdiagram}[] ... \end{MOdiagram} \end{lstlisting} \subsubsection{Option \texttt{style}}\label{option:style} There are five different styles, which can be chosen. \begin{itemize} \item\lstinline+style=plain+ \AOinline[style=plain]{pair} (default) \item\lstinline+style=square+ \AOinline[style=square]{pair} \item\lstinline+style=circle+ \AOinline[style=circle]{pair} \item\lstinline+style=round+ \AOinline[style=round]{pair} \item\lstinline+style=fancy+ \AOinline[style=fancy]{pair} \end{itemize} Let's take the MO diagram of \ce{H2} to illustrate the different styles: \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[style=plain]% default \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[style=square] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \marginnote*{NEW}\begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[style=circle] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[style=round] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[style=fancy] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsubsection{Option \texttt{distance}}\label{option:distance} Depending on labels and captions the \SI{4}{\centi\metre} by which the right and left atom are separated can be too small. With \lstinline+distance=+ he length can be adjusted. With this, the position of the right atom is changed to \lstinline=1cm + = and the position of the molecule is changed to \lstinline=0.5*(1cm + )=, also see page \pageref{xshift} and section \ref{orbital-positionen}. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[distance=6cm] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsubsection{Option \texttt{AO-width}}\label{option:AO-width} The length \lstinline=|AO|-width= sets the length of the horizontal line in a orbital displayed with the \lstinline=plain= style. It's default value is \SI{10}{pt}. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[AO-width=15pt] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[style=fancy,AO-width=15pt] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} By changing the value of \lstinline=|AO|-width= the positions of the p and the \textpi\ orbitals also change, see section \ref{orbital-positionen}. \subsubsection{Optionen \texttt{el-sep}, \texttt{up-el-pos} und \texttt{down-el-pos}}\label{option:electrons} \marginnote*{NEW}These three options change the horizontal positions of the arrows representing the electrons in a AO/MO. The option \lstinline+el-sep=+ needs a value between \lstinline=0= and \lstinline=1=. \lstinline=0= means \emph{no} distance between the arrows and \lstinline=1= \emph{full} distance (with respect to the langth \lstinline=|AO|-width=, see section \ref{option:AO-width}). \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[el-sep=.2]% default \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[el-sep=0] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[el-sep=1] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} The options \lstinline+up-el-pos=+ and \lstinline+down-el-pos=+ can be used alternatively to place the spin-up and spin-down electron, respectively. Again they need values between \lstinline=0= and \lstinline=1=. This time \lstinline=0= means \emph{on the left} and \lstinline=1= means \emph{on the right} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[up-el-pos=.4,down-el-pos=.6]% default \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[up-el-pos=.333,down-el-pos=.667] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[up-el-pos=.7,down-el-pos=.3] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsubsection{Option \texttt{lines}}\label{option:lines} The option \lstinline=lines= can be used to modify the \TikZ style of the connecting lines: \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[lines={gray,thin}] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsubsection{Option \texttt{names}}\label{option:names} If you use the option \lstinline=names=, the atoms and the molecule get captions, if you have used the optional \lstinline== argument of \lstinline=\atom= and/or \lstinline=\molecule=. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[names] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsubsection{Optionens \texttt{names-style} and \texttt{names-style-add}}\label{option:names_style} \marginnote*{NEW}These options enable to customize the style of the captions of the atoms and of the molecule. By default this setting is used: \lstinline+\names-style={anchor=base}+\footnote{Please see “\TikZ and PGF \textendash\ Manual for Version 2.10” p.\,183 section 16.4.4 (pgfmanual.pdf) for the meaning}. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[names,names-style={draw=blue}] \atom[p]{left} { 1s = {;up} } \atom[b]{right}{ 1s = {;up} } \molecule[\ce{X2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} With this the default setting is overwritten. As you can see, this destroys the vertical alignment of the nodes. In order to avoid that you can for example specify \lstinline=text height= and \lstinline=text depth= yourself \ldots \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[names,names-style={text height=1.5ex, text depth=.25ex, draw=blue}] \atom[p]{left} { 1s = {;up} } \atom[b]{right}{ 1s = {;up} } \molecule[\ce{X2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \ldots, add the \lstinline=anchor= again \ldots \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[names,names-style={anchor=base, draw=blue}] \atom[p]{left} { 1s = {;up} } \atom[b]{right}{ 1s = {;up} } \molecule[\ce{X2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \ldots\ or use the option \lstinline=names-style-add=. It doesn't overwrite the current setting, but appends the new declaration: \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[names,names-style-add={draw=blue}] \atom[p]{left} { 1s = {;up} } \atom[b]{right}{ 1s = {;up} } \molecule[\ce{X2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \begin{LTXexample}[pos=b] \MOsetup{names,names-style={text height=2.5ex,text depth=.5ex,draw=blue!80,rounded corners}} \begin{MOdiagram} \atom[p]{left} { 1s = {;up} } \atom[b]{right}{ 1s = {;up} } \molecule[\ce{X2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \begin{MOdiagram}[names-style-add={fill=blue!20}] \atom[p]{left} { 1s = {;up} } \atom[b]{right}{ 1s = {;up} } \molecule[\ce{X2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsubsection{Option \texttt{labels}}\label{option:labels} If you use the option \lstinline=labels=, predefined labels are written below the orbitals. These labels can be changed, see section \ref{key:label}. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[labels] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsubsection{Option \texttt{labels-fs}}\label{option:labels-fs} Labels are set with the font size \lstinline=\small=. If you want to change that, you can use the option \lstinline=labels-fs=. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[labels,labels-fs=\footnotesize] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} This also allows you to change the font style or font shape of the labels. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[labels,labels-fs=\sffamily\footnotesize] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsubsection{Option \texttt{labels-style}}\label{option:labels-style} The option \lstinline=labels-style= changes the \TikZ style of the nodes, within which the labels are written. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[labels,labels-style={blue,yshift=4pt}] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} } \end{MOdiagram} \end{LTXexample} \subsection{\texttt{\textbackslash atom} and \texttt{\textbackslash molecule} Specific Customizations} \subsubsection{The \texttt{label} Key}\label{key:label} If you don't want to use the predefined labels, change single labels or use only one or two labels, you can use the key \lstinline=label=. This key is used in the \lstinline=\atom= and \lstinline=\molecule= commands in the \lstinline=<|AO|-spec>= or \lstinline== argument, respectively. The key awaits a comma separated key/value list. The names mentioned in section \ref{Namensgebung} are used as keys to specify the AO, that you want to label. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[labels-fs=\footnotesize] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair}, label = { 1sigma = {bonding MO} } } \end{MOdiagram} \end{LTXexample} \begin{LTXexample} \begin{MOdiagram}[style=square,distance=6cm] \atom{left} { 1s = {;up} } \atom{right}{ 1s = {;up} } \molecule{ 1sMO = {.75;pair} , label = { 1sigma = $\sigma$, 1sigma* = $\sigma^*$ } } \node[right] at (1sigma.-45) {bonding}; \node[right] at (1sigma*.45) {anti-bonding}; \end{MOdiagram} \end{LTXexample} If the key is used together with the \lstinline=labels= option (page \pageref{option:labels}), single labels are overwritten: \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[labels] \atom[H]{left} { 1s = {;up} } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair}, label = { 1sigma = \textcolor{red}{??} } } \end{MOdiagram} \end{LTXexample} \subsubsection{The \texttt{color} Key}\label{key:color} Analogous to the \lstinline=label= key the \lstinline=color= key can be used to display coloured electrons: \begin{LTXexample} % use package `mhchem' \begin{MOdiagram}[labels-fs=\footnotesize] \atom[H]{left}{ 1s, color = { 1sleft = blue } } \atom[H]{right}{ 1s, color = { 1sright = red } } \molecule[\ce{H2}]{ 1sMO, label = { 1sigma = {bonding MO} }, color = { 1sigma = green, 1sigma* = cyan } } \end{MOdiagram} \end{LTXexample} \newpage \subsubsection{The \texttt{up-el-pos} and \texttt{down-el-pos} keys}\label{key:electrons} \marginnote*{NEW}The keys \lstinline=up-el-pos= and \lstinline=down-el-pos= allow it to shift the arrows representing the electrons in a single AO or MO individually. You need to use values between \lstinline=0= and \lstinline=1=, also see section \ref{option:electrons}. \begin{LTXexample} % use package `mhchem' \begin{MOdiagram} \atom[H]{left}{ 1s = {;up}, up-el-pos = { 1sleft=.5 } } \atom[H]{right}{ 1s = {;up} } \molecule[\ce{H2}]{ 1sMO = {.75;pair} , up-el-pos = { 1sigma=.15 } , down-el-pos = { 1sigma=.85 } } \end{MOdiagram} \end{LTXexample} \subsection{\texttt{\textbackslash AO} Specific Customizations}\label{ssec:AO_anpassen} \marginnote*{NEW}These keys enable to customize orbitals created with \lstinline=\AO=. \subsubsection{The \texttt{label} Key}\label{key:AO_label} The key \lstinline=label[x/y/z]= allows you to put a label to the AO/MO. If you use the type \lstinline=p=, you can specify the orbital you want to label in square brackets: \begin{LTXexample} \begin{MOdiagram}[style=square] \AO{s}[label={s orbital}]{0} \AO{p}[label[y]=py,label[z]=pz]{1.5} \end{MOdiagram} \end{LTXexample} \subsubsection{The \texttt{color} Key}\label{key:AO_color} Analogous to the \lstinline=label= key there is the key \lstinline=color[x/y/z]=, which enables you to choose a color for the electrons. If you use the type \lstinline=p=, you can specify the orbital in square brackets: \begin{LTXexample} \begin{MOdiagram}[style=square] \AO{s}[color=red]{0} \AO{p}[color[y]=green,color[z]=cyan]{1.5} \end{MOdiagram} \end{LTXexample} \subsubsection{The \texttt{up-el-pos} and \texttt{down-el-pos} Keys}\label{key:AO_electrons} Then there are the keys \lstinline=up-el-pos[x/y/z]= and \lstinline=down-el-pos[x/y/z]=, with which the electrons can be shifted horizontally. You can use values between \lstinline=0= and \lstinline=1=, also see section \ref{option:electrons}. If you use the type \lstinline=p=, you can specify the orbital in square brackets: \begin{LTXexample} \begin{MOdiagram}[style=square] \AO{s}[up-el-pos=.15]{0} \AO{p}[up-el-pos[y]=.15,down-el-pos[z]=.15]{1.5} \end{MOdiagram} \end{LTXexample} \subsection{Energy Axis} Last but not least one might want to add an energy axis to the diagram. For this there is the command \lstinline=\EnergyAxis= \begin{framed} \lstinline+\EnergyAxis[]+ \begin{itemize}\small \item\lstinline++ (o) ey/value pairs to modify the axis \end{itemize} \end{framed} \begin{LTXexample} \begin{MOdiagram} \atom{left} { 1s = {;up} } \atom{right}{ 1s = {;up} } \molecule{ 1sMO = {.75;pair} } \EnergyAxis \end{MOdiagram} \end{LTXexample} For the time being there are two keys to modify the axis. \begin{framed} \begin{itemize} \item\lstinline+title=+ axis label (default: \lstinline=energy=). \item\lstinline+head=<tikz-arrow-head>+ arrow head; you can use the arrow heads specified in the \TikZ library \paket{arrows} (pgfmanual v2.10 pages 256ff.) (default: \lstinline=>=). \end{itemize} \end{framed} \begin{LTXexample} \begin{MOdiagram} \atom{left} { 1s = {;up} } \atom{right}{ 1s = {;up} } \molecule{ 1sMO = {.75;pair} } \EnergyAxis[title] \end{MOdiagram} \end{LTXexample} \begin{LTXexample} \begin{MOdiagram} \atom{left} { 1s = {;up} } \atom{right}{ 1s = {;up} } \molecule{ 1sMO = {.75;pair} } \EnergyAxis[title=E,head=stealth] \end{MOdiagram} \end{LTXexample} \newpage \section{Examples} The example from the beginning of section \ref{ssec:AO_MO_irgendwo}. \begin{LTXexample} % use packages `mhchem' and `chemfig' \begin{MOdiagram}[names] \atom[\lewis{0.,F}\hspace*{5mm}\lewis{4.,F}]{left}{1s=.2;up,up-el-pos={1sleft=.5}} \atom[Xe]{right}{1s=1.25;pair} \molecule[\ce{XeF2}]{1sMO={1/.25;pair}} \AO(1cm){s}{0;up} \AO(3cm){s}{0;pair} \connect{ AO1 & AO2 } \node[right,xshift=4mm] at (1sigma) {\footnotesize bonding}; \node[above] at (AO2.90) {\footnotesize non-bonding}; \node[above] at (1sigma*.90) {\footnotesize anti-bonding}; \end{MOdiagram} \end{LTXexample} \begin{LTXexample}[pos=b] % use packages `mhchem' (and `textgreek' loaded by `MOdiagram') \begin{figure} \centering \begin{MOdiagram}[style=square,labels,names,AO-width=8pt,labels-fs=\footnotesize] \atom[\ce{O_a}]{left}{ 1s, 2s, 2p = {;pair,up,up} } \atom[\ce{O_b}]{right}{ 1s, 2s, 2p = {;pair,up,up} } \molecule[\ce{O2}]{ 1sMO, 2sMO, 2pMO = {;pair,pair,pair,up,up}, color = { 2piy*=red, 2piz*=red } } \EnergyAxis \end{MOdiagram} \caption{MO diagram of $^3$\textSigma-\ce{O2}.} \end{figure} \end{LTXexample} \begin{LTXexample}[pos=b] % use package `chemfig' \begin{figure} \centering\MOsetup{style = fancy, distance = 7cm, AO-width = 15pt, labels} \begin{MOdiagram} \atom[N]{left}{ 2p = {0;up,up,up} } \atom[O]{right}{ 2p = {2;pair,up,up} } \molecule[NO]{ 2pMO = {1.8,.4;pair,pair,pair,up}, color = { 2piy*=red } } \EnergyAxis \end{MOdiagram} \caption{Part of the MO diagram of \protect\Lewis{4.,NO}.} \end{figure} \end{LTXexample} \end{document}