%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ------------------------------------------------------------------------------------- %
% - myChemistry - mychemistry.sty ----------------------------------------------------- %
% - Creating reaction schemes with LaTeX and ChemFig ---------------------------------- %
% ------------------------------------------------------------------------------------- %
% - Clemens Niederberger -------------------------------------------------------------- %
% - 2011/03/27 ------------------------------------------------------------------------ %
% ------------------------------------------------------------------------------------- %
% - http://www.niederberger-berlin.net/2011/02/latex-mychemistry/ --------------------- %
% - kontakt@niederberger-berlin.net --------------------------------------------------- %
% ------------------------------------------------------------------------------------- %
% - If you have any ideas, questions, suggestions or bugs to report, please feel free - %
% - to contact me. -------------------------------------------------------------------- %
% ------------------------------------------------------------------------------------- %
% - Copyright 2011 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 mychemistry.sty, mychemistry_de.tex and           - %
% - mychemistry_en.tex                                                                - %
% ------------------------------------------------------------------------------------- %
% - 2011/02/24 version 1.0                                                            - %
% ------------------------------------------------------------------------------------- %
% - 2011/03/01 version 1.1                                                            - %
% -   package option `english' added                                                  - %
% -   package key `placement' added                                                   - %
% -   rxnscheme key `placement' added                                                 - %
% -   package key `shade=boolean' changed into package option `shade'                 - %
% -   package option `nochemexec' added, will prevent mC from loading chemexec        - %
% - 2011/03/20 version 1.2                                                            - %
% -   license changed into LPPL 1.3 or later                                          - %
% -   package option `nocompounds' added, will prevent mC from loading chemcompounds  - %
% -   package option `chemstyle' added, will load chemstyle                           - %
% -   package option `nomhchem' added, will prevent mC from loading mhchem            - %
% -     if chemexec isn't loaded either                                               - %
% -   package option `nopackages' added, will prevent mC from loading any             - %
% -     chemistry package except chemfig                                              - %
% -   some small issues resolved                                                      - %
% -   bug in arrow type <=> resolved                                                  - %
% -   arrow argument placement rewritten; two new keys for arrow: `aboveshift'        - %
% -     and `belowshift' (causing new problems with alignment, though)                - %
% -   wrong arrow alignment (due to last change) mainly resolved (NEEDS pgf v2.10!)   - %
% -     => solved wrong branch alignment as well                                      - %
% -   `inner sep' set to 0, arrow, transition & mesomeric adjusted                    - %
% -   bug in arrow type -|> resolved                                                  - %
% -   commands \makevisible / \makeinvisible added                                    - %
% -   arrow key `both' added                                                          - %
% -   rxn has now keys instead of an option                                           - %
% -   commands \setrcndist, \setrxnalign, \setschemealign added                       - %
% -   rxn-, rxnscheme-key align added                                                 - %
% - 2011/03/26 version 1.2.1                                                          - %
% -   rewriting commands, so they accept second argument without first:               - %
% -     \reactand, \mesomeric, \transition, \branch, \makevisible, \makeinvisible     - %
% -     rewritten                                                                     - %
% - 2011/03/28 version 1.2.2                                                          - %
% -   bugfix with transition resolved                                                 - %
% -   atomsize, arrowlength, bondlength and bondshape renamed into set<name>          - %
% -     and code slightly rewritten                                                   - %
% -   \mCsetup added                                                                  - %
% - 2011/04/01 version 1.2.3                                                          - %
% -   bug in \branch resolved                                                         - %
% -   \chemand added                                                                  - %
% - 2011/04/02 version 1.2.4                                                          - %
% -   bugs in \makevisible, \makeinvisible resolved                                   - %
% -   input bondwidth.tex if ChemFig v0.4                                             - %
% - 2011/04/04 version 1.3                                                            - %
% -   commands \reactand, \mesomeric, \branch, \transition, \chemand (\makeinvisible  - %
% -     \makeinvisible) rewritten: more flexible with opt. arguments                  - %
% ------------------------------------------------------------------------------------- %
% - TODO                                                                              - %
% -   make the arrow type {-|>} look nicer                                            - %
% -   work on how chemistry-packages are automatically loaded;                        - %
% -     add ui for easy handling this issue? (via \mCsetup ?)                         - %
% -   add rotate=<winkel> for diagonal arrows?                                        - %
% -   option for baseline-alignment of reactands et.al.?                              - %
% -   option for shifting arrows?                                                     - %
% ------------------------------------------------------------------------------------- %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\mC@def#1{%
  \ifdefined#1%
    \errmessage{myChemistry Package Error: the macro \string#1\space is already defined. Please let the author know.}%
  \fi
  \def#1%
}
\mC@def\mC@version{v1.3}
\mC@def\mC@date@de{04. April 2011}
\mC@def\mC@date@en{April 4th 2011}
\mC@def\mC@Date{2011/04/04}
\mC@def\mC@name{myChemistry}
\ProvidesPackage{mychemistry}[\mC@Date\space v\mC@version]
\typeout{}
\typeout{\mC@name\space \mC@version}
\typeout{\mC@Date\space Clemens Niederberger}
\typeout{}
\RequirePackage{ifthen,calc,float}
\RequirePackage{xkeyval}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Optionen, z.T. auch an chemexec weitergeben
\newcommand{\mC@exec@color}{black}
\newcommand{\mC@exec@shade}{false}
\newif\if@usecolor\@usecolorfalse
% wenn key color, dann Farbe und Option shade=true an chemexec weitergeben
\define@key[MC]{mychemistry.sty}%
  {color}{
    \@usecolortrue
    \renewcommand{\mC@exec@color}{#1}
    \renewcommand{\mC@exec@shade}{true}
  }
% sonst nicht:
\DeclareOptionX[MC]{nocolor}{
  \@usecolortrue
  \renewcommand{\mC@exec@color}{black}
  \renewcommand{\mC@exec@shade}{false}
}
% shade separat (de-)aktivieren
\DeclareOptionX[MC]{shade}{%
  \renewcommand{\mC@exec@shade}{true}
}
% chemexec abschalten
\newcommand{\mC@exec@true}{true}
\DeclareOptionX[MC]{nochemexec}{%
  \renewcommand{\mC@exec@true}{false}
}
% mhchem abschalten
\newcommand{\mC@mhchem@true}{true}
\DeclareOptionX[MC]{nomhchem}{%
  \renewcommand{\mC@mhchem@true}{false}
}
% chemcompounds abschalten
\newcommand{\mC@compound@true}{true}
\DeclareOptionX[MC]{nocompounds}{%
  \renewcommand{\mC@compound@true}{false}
}
% chemstyle einschalten
\newcommand{\mC@chemstyle@true}{false}
\DeclareOptionX[MC]{chemstyle}{%
  \renewcommand{\mC@chemstyle@true}{true}
}
% nur `chemfig' laden
\DeclareOptionX[MC]{nopackages}{%
  \renewcommand{\mC@exec@true}{false}
  \renewcommand{\mC@mhchem@true}{false}
  \renewcommand{\mC@compound@true}{false}
  \renewcommand{\mC@chemstyle@true}{false}
}
% englische Version von chemexec, englische Variante von myChemistry
\newcommand{\mC@exec@english}{}
\newcommand{\mC@rs@name}{Reaktionsschema}
\DeclareOptionX[MC]{english}{
  \renewcommand{\mC@exec@english}{,english}
  \renewcommand{\mC@rs@name}{Reaction scheme}
}
\newcommand{\mC@rs@placement}{H}
\newcommand{\mC@rs@currentplacement}{\mC@rs@placement}
\define@key[MC]{mychemistry.sty}{placement}{
  \renewcommand{\mC@rs@placement}{#1}
}
\ProcessOptionsX[MC]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% chemstyle laden, falls verfügbar und Option aktiv
\IfFileExists{chemstyle.sty}{%
  \ifthenelse{\equal{\mC@chemstyle@true}{true}}{
    \@ifpackageloaded{chemstyle}{}{
      \RequirePackage[varioref=false,floats=float]{chemstyle}
      \PackageInfo{mychemistry}{You loaded `chemstyle' with options `varioref=false' and `floats=float'. Please be aware, that you might need to restyle the float `table'. Take a look at the `chemstyle' documentation for further information.}
    }
  }{}
}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% chemcompounds laden, falls verfügbar
\IfFileExists{chemcompounds.sty}{%
  \ifthenelse{\equal{\mC@compound@true}{true}}{
    \@ifpackageloaded{chemcompounds}{}{
      \RequirePackage{chemcompounds}
    }
  }{}
}{
  \PackageWarning{myChemistry: `chemcompounds' is not installed. You shoul use the `nocompounds' option.}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% chemfig laden, falls verfügbar
\IfFileExists{chemfig.sty}{%
  \@ifpackageloaded{chemfig}{}{
    \RequirePackage{chemfig}
  }
  \usetikzlibrary{arrows,positioning,decorations.pathmorphing,shapes,calc,matrix,chains,scopes}
}{% sonst Fehlermeldung
  \PackageError{mychemistry}{`ChemFig' is not installed! `mychemistry' can't work without it!}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% chemexec laden, falls verfügbar, falls nicht, dann wenigstens mhchem laden
\IfFileExists{chemexec.sty}{% mit den Default-Optionen color=black, shade=false,exercise,exersize=large
  \ifthenelse{\equal{\mC@exec@true}{true}}{
    \ifthenelse{\equal{\mC@mhchem@true}{true}}{}{
      \PackageWarning{mychemistry}{You used the option `nomhchem' but not `nochemexec'. Please be aware that `mhchem' is loaded by `chemexec' anyway.}
    }
    \@ifpackageloaded{chemexec}{}{
      \RequirePackage[color=\mC@exec@color,shade=\mC@exec@shade,exercise,exersize=large\mC@exec@english]{chemexec}
    }
  }{}
}{
  \PackageWarning{myChemistry: `chemexec' ist not installed. You should use the `nochemexec' option.}
  \IfFileExists{mhchem.sty}{
    \ifthenelse{\equal{\mC@mhchem@true}{true}}{
      \@ifpackageloaded{mhchem}{}{
        \RequirePackage[version=3]{mhchem}
      }
    }{}
  }{
    \PackageWarning{myChemistry: `mhchem' ist not installed. You should use the `nomhchem' option.}
  }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% NEUE BEFEHLE:                                                                         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% myChemistry Informationen ----------------------------------------------------------- %
\mC@def\mCversion{\mC@version}
\mC@def\mCdate#1{\csname mC@date@#1\endcsname}
% additional für ChemFig v0.4 --------------------------------------------------------- %
\mC@def\mC@CFversion@test{0.4}%
\IfFileExists{bondwidth.tex}{%
  \ifx\CF@ver\mC@CFversion@test\input{bondwidth}\fi
}{}%
% Optional Argument Analysis ---------------------------------------------------------- %
% Prüfen ob #2 in #1 enthalten ist
\mC@def\mC@if@instr#1#2{%
	\def\mC@if@instr@i##1#2##2\@nil{\ifx\@empty##2\@empty\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}%
	\mC@if@instr@i#1\@@nil#2\@nil
}
% Am ersten , splitten, #1 in #3 speichern, #2 in \mC@remainargs
\mC@def\mC@splitfirst#1,#2\@nil#3{%
	\def#3{#1}\def\mC@remainargs{#2}%
}
% ein durch , in 3 Teile getrenntes Argument splitten
\mC@def\mC@splitarg#1{
  \mC@if@instr{#1}{,}{\expandafter\mC@splitfirst#1\@nil\mC@firstarg}{\def\mC@firstarg{#1}}
  \expandafter\mC@if@instr\expandafter{\mC@remainargs}{,}{\expandafter\mC@splitfirst\mC@remainargs\@nil\mC@secondarg}{\expandafter\def\expandafter\mC@secondarg\expandafter{\mC@remainargs}}
  \ifx\mC@remainargs\mC@secondarg\let\mC@thirdarg\@empty\else\expandafter\def\expandafter\mC@thirdarg\expandafter{\mC@remainargs}\fi
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PFEILE ------------------------------------------------------------------------------ %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% interne Befehle, Voreinstellungen --------------------------------------------------- %
\newcommand{\mC@arrow@above}{above}              % oben
\newcommand{\mC@arrow@currentabove}{\mC@arrow@above} %
\newcommand{\mC@arrow@below}{below}              % unten
\newcommand{\mC@arrow@currentbelow}{\mC@arrow@below} %
\newcommand{\mC@arrow@direction}{right}          % Richtung
\newcommand{\mC@arrow@currentdirection}{\mC@arrow@direction}
\newcommand{\mC@arrow@currentlength}{\mC@arrow@length}
\newlength{\mC@arrow@length@actual}
\newcommand{\mC@arrow@rotate}{}
\newcommand{\mC@arrow@argument@angle}{}
\newcommand{\mC@arrow@argument@shift}{2pt}
\newcommand{\mC@arrow@argument@anchor}{}
\newcommand{\mC@arrow@argument@both}{}
\newcommand{\mC@arrow@above@anchor}{}
\newcommand{\mC@arrow@below@anchor}{}
\newcommand{\mC@arrow@type}{->}                  % Pfeiltyp
\newcommand{\mC@arrow@currenttype}{\mC@arrow@type} %
\newcommand{\mC@arrow@start@up}{0,0.05}          % Verschiebung für Glgw-Pfeil
\newcommand{\mC@arrow@start@down}{0,-0.05}       %
\newcommand{\mC@arrow@placement}{on chain=going \mC@arrow@currentdirection} % wohin?
\newcommand{\mC@arrow@currentplacement}{\mC@arrow@placement}
\newcommand{\mC@arrow@cross@base@x}{}            % Befehle für durchgestrichenen Pfeil
\newcommand{\mC@arrow@cross@base@y}{}            %
\newcommand{\mC@arrow@cross@angle}{}             %
\newcommand{\mC@arrow@cross@length}{}            %
\newcommand{\mC@arrow@cross@draw}{}              %

% Laengenfaktor ----------------------------------------------------------------------- %
\newcommand{\mC@arrow@length}{1.0}               % Längenfaktor
\newcommand{\mC@arrow@length@factor}{1.0}        % Default-Faktor
\newcommand{\mC@arrow@end}{\mC@arrow@length@actual,0} % Pfeilende
\define@key{arrow}{length}[\mC@arrow@length]{%   %
  \renewcommand{\mC@arrow@currentlength}{#1}}%   %
\newlength{\mC@arrow@length@default}             %
\setlength{\mC@arrow@length@default}{5em}        % Default-Laenge
\mC@def\setarrowlength#1{
 \ifx\@empty#1\@empty
  \setlength{\mC@arrow@length@default}{5em}
 \else
  \setlength{\mC@arrow@length@default}{#1}
 \fi
}
\let\arrowlength\setarrowlength

% Beschriftungen ---------------------------------------------------------------------- %
\newlength{\mC@arrow@argument@aboveshift}        % Verschieben der Beschriftung
\newlength{\mC@arrow@argument@belowshift}        % Verschieben der Beschriftung
\define@key{arrow}{aboveshift}[2pt]{%
  \setlength{\mC@arrow@argument@aboveshift}{#1}}
\define@key{arrow}{belowshift}[2pt]{%
  \setlength{\mC@arrow@argument@belowshift}{#1}}
\define@key{arrow}{both}[]{
  \renewcommand{\mC@arrow@argument@both}{true}
}

% Anker ------------------------------------------------------------------------------- %
\newcommand{\mC@arrow@name}{}                    % Anker
\newcommand{\mC@arrow@currentname}{\mC@arrow@name} %
\define@key{arrow}{name}[\mC@arrow@name]{%       %
  \renewcommand{\mC@arrow@currentname}{#1}}%     %

% Richtung ---------------------------------------------------------------------------- %
\define@key{arrow}{direction}[\mC@arrow@direction]{%
    \renewcommand{\mC@arrow@currentdirection}{#1} %
    \ifthenelse{\equal{#1}{right}}{% nach rechts, Einstellungen:
     \renewcommand{\mC@arrow@end}{\mC@arrow@length@actual,0}
     \renewcommand{\mC@arrow@currentabove}{above}
     \renewcommand{\mC@arrow@currentbelow}{below}
     \renewcommand{\mC@arrow@above@anchor}{south}
     \renewcommand{\mC@arrow@below@anchor}{north}
     \renewcommand{\mC@arrow@argument@anchor}{
       \node(@arrow@center) at ($(\tikzchainprevious.east)+(.5\mC@arrow@length@actual+\mC@rxn@node@distance,0)$) {};
     }
     \renewcommand{\mC@arrow@argument@angle}{0}
     \renewcommand{\mC@arrow@rotate}{0}
     \renewcommand{\mC@arrow@start@up}{0,0.03}
     \renewcommand{\mC@arrow@start@down}{0,-0.03}
     \renewcommand{\mC@arrow@cross@base@x}{.15em}
     \renewcommand{\mC@arrow@cross@base@y}{0}
     \renewcommand{\mC@arrow@cross@angle}{60}
     \renewcommand{\mC@arrow@cross@length}{.5em}
    }{
     \ifthenelse{\equal{#1}{above right}}{% nach oben rechts, Einstellungen:
      \renewcommand{\mC@arrow@end}{\mC@arrow@length@actual,\mC@arrow@length@actual}
      \renewcommand{\mC@arrow@currentabove}{above left}
      \renewcommand{\mC@arrow@currentbelow}{below right}
      \renewcommand{\mC@arrow@above@anchor}{south}
      \renewcommand{\mC@arrow@below@anchor}{north}
      \renewcommand{\mC@arrow@argument@anchor}{
        \node(@arrow@center) at ($(\tikzchainprevious.north east)+(.5\mC@arrow@length@actual+.707\mC@rxn@node@distance,.5\mC@arrow@length@actual+.707\mC@rxn@node@distance)$) {};
      }
      \renewcommand{\mC@arrow@argument@angle}{45}
      \renewcommand{\mC@arrow@rotate}{45}
      \renewcommand{\mC@arrow@start@up}{-0.02,0.02}
      \renewcommand{\mC@arrow@start@down}{0.02,-0.02}
      \renewcommand{\mC@arrow@cross@base@x}{.1em}
      \renewcommand{\mC@arrow@cross@base@y}{.1em}
      \renewcommand{\mC@arrow@cross@angle}{-15}
      \renewcommand{\mC@arrow@cross@length}{.7em}
     }{
     \ifthenelse{\equal{#1}{above}}{% nach oben, Einstellungen:
      \renewcommand{\mC@arrow@end}{0,\mC@arrow@length@actual}
      \renewcommand{\mC@arrow@currentabove}{left}
      \renewcommand{\mC@arrow@currentbelow}{right}
      \renewcommand{\mC@arrow@above@anchor}{east}
      \renewcommand{\mC@arrow@below@anchor}{west}
      \renewcommand{\mC@arrow@argument@anchor}{
       \node(@arrow@center) at ($(\tikzchainprevious.north)+(0,.5\mC@arrow@length@actual+\mC@rxn@node@distance)$) {};
      }
      \renewcommand{\mC@arrow@argument@angle}{90}
      \renewcommand{\mC@arrow@rotate}{0}
      \renewcommand{\mC@arrow@start@up}{-0.03,0}
      \renewcommand{\mC@arrow@start@down}{0.03,0}
      \renewcommand{\mC@arrow@cross@base@x}{0}
      \renewcommand{\mC@arrow@cross@base@y}{.15em}
      \renewcommand{\mC@arrow@cross@angle}{30}
      \renewcommand{\mC@arrow@cross@length}{.5em}
      }{
       \ifthenelse{\equal{#1}{above left}}{% nach oben links, Einstellungen:
        \renewcommand{\mC@arrow@end}{-\mC@arrow@length@actual,\mC@arrow@length@actual}
        \renewcommand{\mC@arrow@currentabove}{above right}
        \renewcommand{\mC@arrow@currentbelow}{below left}
        \renewcommand{\mC@arrow@above@anchor}{south}
        \renewcommand{\mC@arrow@below@anchor}{north}
        \renewcommand{\mC@arrow@argument@anchor}{
          \node(@arrow@center) at ($(\tikzchainprevious.north west)+(-.5\mC@arrow@length@actual-.707\mC@rxn@node@distance,.5\mC@arrow@length@actual+.707\mC@rxn@node@distance)$) {};
        }
        \renewcommand{\mC@arrow@argument@angle}{-45}
        \renewcommand{\mC@arrow@rotate}{-45}
        \renewcommand{\mC@arrow@start@up}{-0.02,-0.02}
        \renewcommand{\mC@arrow@start@down}{0.02,0.02}
        \renewcommand{\mC@arrow@cross@base@x}{-.1em}
        \renewcommand{\mC@arrow@cross@base@y}{.1em}
        \renewcommand{\mC@arrow@cross@angle}{15}
        \renewcommand{\mC@arrow@cross@length}{.7em}
       }{
       \ifthenelse{\equal{#1}{left}}{% nach links, Einstellungen:
        \renewcommand{\mC@arrow@end}{-\mC@arrow@length@actual,0}
        \renewcommand{\mC@arrow@currentabove}{above}
        \renewcommand{\mC@arrow@currentbelow}{below}
        \renewcommand{\mC@arrow@above@anchor}{south}
        \renewcommand{\mC@arrow@below@anchor}{north}
        \renewcommand{\mC@arrow@argument@anchor}{
          \node(@arrow@center) at ($(\tikzchainprevious.west)+(-.5\mC@arrow@length@actual-\mC@rxn@node@distance,0)$) {};
        }
        \renewcommand{\mC@arrow@argument@angle}{0}
        \renewcommand{\mC@arrow@rotate}{0}
        \renewcommand{\mC@arrow@start@up}{0,-0.03}
        \renewcommand{\mC@arrow@start@down}{0,0.03}
        \renewcommand{\mC@arrow@cross@base@x}{.15em}
        \renewcommand{\mC@arrow@cross@base@y}{0}
        \renewcommand{\mC@arrow@cross@angle}{60}
        \renewcommand{\mC@arrow@cross@length}{.5em}
       }{
        \ifthenelse{\equal{#1}{below left}}{% nach unten links, Einstellungen:
         \renewcommand{\mC@arrow@end}{-\mC@arrow@length@actual,-\mC@arrow@length@actual}
         \renewcommand{\mC@arrow@currentabove}{above left}
         \renewcommand{\mC@arrow@currentbelow}{below right}
         \renewcommand{\mC@arrow@above@anchor}{south}
         \renewcommand{\mC@arrow@below@anchor}{north}
         \renewcommand{\mC@arrow@argument@anchor}{
           \node(@arrow@center) at ($(\tikzchainprevious.south west)+(-.5\mC@arrow@length@actual-.707\mC@rxn@node@distance,-.5\mC@arrow@length@actual-.707\mC@rxn@node@distance)$) {};
         }
         \renewcommand{\mC@arrow@argument@angle}{45}
         \renewcommand{\mC@arrow@rotate}{45}
         \renewcommand{\mC@arrow@start@up}{0.02,-0.02}
         \renewcommand{\mC@arrow@start@down}{-0.02,0.02}
         \renewcommand{\mC@arrow@cross@base@x}{.1em}
         \renewcommand{\mC@arrow@cross@base@y}{.1em}
         \renewcommand{\mC@arrow@cross@angle}{-15}
         \renewcommand{\mC@arrow@cross@length}{.7em}
        }{
         \ifthenelse{\equal{#1}{below}}{% nach unten, Einstellungen:
          \renewcommand{\mC@arrow@end}{0,-\mC@arrow@length@actual}
          \renewcommand{\mC@arrow@currentabove}{left}
          \renewcommand{\mC@arrow@currentbelow}{right}
          \renewcommand{\mC@arrow@above@anchor}{east}
          \renewcommand{\mC@arrow@below@anchor}{west}
          \renewcommand{\mC@arrow@argument@anchor}{
            \node(@arrow@center) at ($(\tikzchainprevious.south)+(0,-.5\mC@arrow@length@actual-\mC@rxn@node@distance)$) {};
          }
          \renewcommand{\mC@arrow@argument@angle}{90}
          \renewcommand{\mC@arrow@rotate}{0}
          \renewcommand{\mC@arrow@start@up}{0.03,0}
          \renewcommand{\mC@arrow@start@down}{-0.03,0}
          \renewcommand{\mC@arrow@cross@base@x}{0}
          \renewcommand{\mC@arrow@cross@base@y}{.15em}
          \renewcommand{\mC@arrow@cross@angle}{30}
          \renewcommand{\mC@arrow@cross@length}{.5em}
         }{
          \ifthenelse{\equal{#1}{below right}}{% nach unten rechts, Einstellungen:
           \renewcommand{\mC@arrow@end}{\mC@arrow@length@actual,-\mC@arrow@length@actual}
           \renewcommand{\mC@arrow@currentabove}{above right}
           \renewcommand{\mC@arrow@currentbelow}{below left}
           \renewcommand{\mC@arrow@above@anchor}{south}
           \renewcommand{\mC@arrow@below@anchor}{north}
           \renewcommand{\mC@arrow@argument@anchor}{
             \node(@arrow@center) at ($(\tikzchainprevious.south east)+(.5\mC@arrow@length@actual+.707\mC@rxn@node@distance,-.5\mC@arrow@length@actual-.707\mC@rxn@node@distance)$) {};
           }
           \renewcommand{\mC@arrow@argument@angle}{-45}
           \renewcommand{\mC@arrow@rotate}{-45}
           \renewcommand{\mC@arrow@start@up}{0.02,0.02}
           \renewcommand{\mC@arrow@start@down}{-0.02,-0.02}
           \renewcommand{\mC@arrow@cross@base@x}{-.1em}
           \renewcommand{\mC@arrow@cross@base@y}{.1em}
           \renewcommand{\mC@arrow@cross@angle}{15}
           \renewcommand{\mC@arrow@cross@length}{.7em}
          }{
           \PackageError{mychemistry}{Unknown arrow direction}% oder Fehler
          }
         }
        }
       }
      }
     }
    }
   }
}

% Pfeiltyp ---------------------------------------------------------------------------- %
\newcommand{\mC@arrow@drawing}{}
\define@key{arrow}{type}[\mC@arrow@type]{%
  \renewcommand{\mC@arrow@currenttype}{#1}
  \ifthenelse{\equal{#1}{->}}{
  \renewcommand{\mC@arrow@drawing}{\draw[->,thick,text height=0] (0,0) -- node[pos=.5](@arrow@center){} ++(\mC@arrow@end);}
  }{
    \ifthenelse{\equal{#1}{<->}}{
    \renewcommand{\mC@arrow@drawing}{\draw[<->,thick,text height=0] (0,0) -- node[pos=.5](@arrow@center){} ++(\mC@arrow@end);}
    }{
      \ifthenelse{\equal{#1}{<-}}{
      \renewcommand{\mC@arrow@drawing}{\draw[<-,thick,text height=0] (0,0) -- node[pos=.5](@arrow@center){} ++(\mC@arrow@end);}
      }{
        \ifthenelse{\equal{#1}{<=>}}{
        \renewcommand{\mC@arrow@drawing}{\draw[-left to,thick,text height=0] (\mC@arrow@start@up) -- ++(\mC@arrow@end);\draw[left to-,thick,text height=0] (\mC@arrow@start@down) -- ++(\mC@arrow@end);\draw[draw=none] (0,0) -- node[pos=.5](@arrow@center){} ++(\mC@arrow@end);}
        }{
          \ifthenelse{\equal{#1}{-|>}}{
           \setlength{\mC@arrow@argument@aboveshift}{.75em}
           \setlength{\mC@arrow@argument@belowshift}{.75em}
           \renewcommand{\mC@arrow@cross@draw}{\draw[thick] ($(@arrow@center.base) + (\mC@arrow@cross@base@x,\mC@arrow@cross@base@y) + (\mC@arrow@cross@angle:\mC@arrow@cross@length)$) -- ($(@arrow@center.base) + (\mC@arrow@cross@base@x,\mC@arrow@cross@base@y) + (\mC@arrow@cross@angle-180:\mC@arrow@cross@length)$);\draw[thick] ($(@arrow@center.base) + (-\mC@arrow@cross@base@x,-\mC@arrow@cross@base@y) + (\mC@arrow@cross@angle:\mC@arrow@cross@length)$) -- ($(@arrow@center.base) + (-\mC@arrow@cross@base@x,-\mC@arrow@cross@base@y) + (\mC@arrow@cross@angle-180:\mC@arrow@cross@length)$);}
           \renewcommand{\mC@arrow@drawing}{\draw[->,thick,text height=0] (0,0) -- node[pos=.5](@arrow@center){} ++(\mC@arrow@end);\mC@arrow@cross@draw}
          }{
           \PackageError{mychemistry}{Unknown arrow type}% oder Fehler
          }
        }
      }
    }
  }
}%
% ------------------------------------------------------------------------------------- %
% Maße der Nodes der Pfeilargumente bestimmen, größere später an Pfeil weitergeben
\newlength{\mC@height@A}
\newlength{\mC@height@B}
\newlength{\mC@arrow@argument@height}
\newlength{\mC@width@A}
\newlength{\mC@width@B}
\newlength{\mC@arrow@argument@width}
\newcommand{\mC@savenode}{%
    \global\let\mC@minx=\pgfpositionnodelaterminx%
    \global\let\mC@maxx=\pgfpositionnodelatermaxx%
    \global\let\mC@miny=\pgfpositionnodelaterminy%
    \global\let\mC@maxy=\pgfpositionnodelatermaxy%
}%
% der nächste Befehl benötigt pgf v2.10!
\newcommand{\mC@largernode}[2]{
  \@ifundefined{pgfpositionnodelater}{
    \PackageError{mychemistry}{The command \string\pgfpositionnodelater is undefined. Make sure, you have installed the latest version of pgf.}
  }{}
  {\pgfpositionnodelater{\mC@savenode}
  \node{#1};
  \setlength{\mC@width@A}{\mC@maxx}%
  \addtolength{\mC@width@A}{-\mC@minx}
  \setlength{\mC@height@A}{\mC@maxy}%
  \addtolength{\mC@height@A}{-\mC@miny}
  \node{#2};
  \setlength{\mC@width@B}{\mC@maxx}%
  \addtolength{\mC@width@B}{-\mC@minx}
  \setlength{\mC@height@B}{\mC@maxy}%
  \addtolength{\mC@height@B}{-\mC@miny}
  \pgfmathsetlength{\mC@arrow@argument@width}{max(\mC@width@A,\mC@width@B)}
  \pgfmathsetlength{\mC@arrow@argument@height}{max(\mC@height@A,\mC@height@B)}
  \global\mC@arrow@argument@width=\mC@arrow@argument@width
  \global\mC@arrow@argument@height=\mC@arrow@argument@height
  }
}

% Pfeil zeichnen ---------------------------------------------------------------------- %
\newcommand{\mC@arrow}[3][]{
 \renewcommand{\mC@arrow@length@factor}{\mC@arrow@currentlength}
 \setlength{\mC@arrow@length@actual}{\mC@arrow@currentlength\mC@arrow@length@default}
 \ifthenelse{\equal{\mC@arrow@argument@both}{true}}{
   \mC@largernode{#2}{#3}
 }{
   \setlength{\mC@arrow@argument@width}{0pt}
   \setlength{\mC@arrow@argument@height}{0pt}
 }
 \draw node[on chain=going \mC@arrow@currentdirection](\mC@arrow@currentname) {\tikz{
   \mC@arrow@drawing
   }
 };
 \mC@arrow@argument@anchor
 \draw node[anchor=\mC@arrow@above@anchor,rotate=\mC@arrow@rotate,minimum width=\mC@arrow@argument@width, minimum height=\mC@arrow@argument@height]
  at ($(@arrow@center.base)+(90+\mC@arrow@argument@angle:\mC@arrow@argument@aboveshift)$) {#2};
 \draw node[anchor=\mC@arrow@below@anchor,rotate=\mC@arrow@rotate,minimum width=\mC@arrow@argument@width, minimum height=\mC@arrow@argument@height]
  at ($(@arrow@center.base)+(-90+\mC@arrow@argument@angle:\mC@arrow@argument@belowshift)$) {#3};
 \setlength{\mC@arrow@argument@aboveshift}{2pt}
 \setlength{\mC@arrow@argument@belowshift}{2pt}
}

% Voreinstellungen:
\presetkeys%
  {arrow}
  {direction=\mC@arrow@direction,length=\mC@arrow@length,type=\mC@arrow@type,aboveshift=\mC@arrow@argument@shift,belowshift=\mC@arrow@argument@shift}
  {}

% Eigentlicher Befehl:
\providecommand{\arrow}[3][]{
 \setkeys{arrow}{#1}
 \mC@arrow{#2}{#3}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MERGE ------------------------------------------------------------------------------- %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\mC@merge@direction}{below}
\newcommand{\mC@merge@to}{}
\newcommand{\mC@merge@from@one}{}
\newcommand{\mC@merge@from@two}{}
\newcommand{\mC@merge}[3]{
  \renewcommand{\mC@merge@to}{#1}
  \renewcommand{\mC@merge@from@one}{#2}
  \renewcommand{\mC@merge@from@two}{#3}
}
% Basisbefehle ------------------------------------------------------------------------ %
\newcommand{\mC@merge@right}{
 \draw[stealth-,thick] ($(\mC@merge@to.west)+(-1em,0)$) -- ($(\mC@merge@to.west)+(-4em,0)$) node(crossing) {};
 \draw[thick] ($(\mC@merge@from@one.east)+(1em,0)$) -| (crossing.base);
 \draw[thick] ($(\mC@merge@from@two.east)+(1em,0)$) -| (crossing.base);
}
\newcommand{\mC@merge@above}{
 \draw[stealth-,thick] ($(\mC@merge@to.south)+(0,-1em)$) -- ($(\mC@merge@to.south)+(0,-4em)$) node(crossing) {};
 \draw[thick] (crossing.base) -| ($(\mC@merge@from@one.north)+(0,1em)$);
 \draw[thick] (crossing.base) -| ($(\mC@merge@from@two.north)+(0,1em)$);
}
\newcommand{\mC@merge@left}{
 \draw[stealth-,thick] ($(\mC@merge@to.east)+(1em,0)$) -- ($(\mC@merge@to.east)+(4em,0)$) node(crossing) {};
 \draw[thick] ($(\mC@merge@from@one.west)+(-1em,0)$) -| (crossing.base);
 \draw[thick] ($(\mC@merge@from@two.west)+(-1em,0)$) -| (crossing.base);;
}
\newcommand{\mC@merge@below}[3]{
 \draw[stealth-,thick] ($(\mC@merge@to.north)+(0,1em)$) -- ($(\mC@merge@to.north)+(0,4em)$) node(crossing) {};
 \draw[thick] (crossing.base) -| ($(\mC@merge@from@one.south)+(0,-1em)$);
 \draw[thick] (crossing.base) -| ($(\mC@merge@from@two.south)+(0,-1em)$);
}
% key zur Auswahl --------------------------------------------------------------------- %
\define@choicekey{merge}{direction}[\val\nr]{right,above,left,below}[below]{
  \ifcase\nr\relax
    \mC@merge@right
  \or
    \mC@merge@above
  \or
    \mC@merge@left
  \or
    \mC@merge@below
  \fi
}
% Voreinstellung ---------------------------------------------------------------------- %
\presetkeys%
  {merge}
  {direction=below}
  {}
% eigentlicher Befehl ----------------------------------------------------------------- %
\newcommand{\merge}[4][]{
  \mC@merge{#2}{#3}{#4}
  \setkeys{merge}{#1}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% REAKTIONSSCHEMA --------------------------------------------------------------------- %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\mC@rxn@node@distance}
\setlength{\mC@rxn@node@distance}{1em}
\mC@def\setrcndist#1{%
  \ifx\@empty#1\@empty%
    \setlength{\mC@rxn@node@distance}{1em}%
  \else%
    \setlength{\mC@rxn@node@distance}{#1}%
  \fi%
}
% ------------------------------------------------------------------------------------- %
% Schema ------------------------------------------------------------------------------ %
% ------------------------------------------------------------------------------------- %
\newcommand{\mC@rs@scale}{1.0}                   % Default-Skalierung
\newcommand{\mC@rs@currentscale}{\mC@rs@scale}   %
\providecommand{\setschemename}[1]{\renewcommand{\mC@rs@name}{#1}}
\newcommand{\mC@rs@caption}{}                    % Beschriftung
\newcommand{\mC@rs@label}{}                      % Label
\newcommand{\mC@rs@currentlabel}{\mC@rs@label}   %
\define@key{rxnscheme}{label}{%                  %
  \ifthenelse{\equal{#1}{}}{}{                   %
    \renewcommand{\mC@rs@currentlabel}{#1}       %
  }                                              %
}                                                %
\define@key{rxnscheme}{scale}[1.0]{              % Skalierung
  \renewcommand{\mC@rs@currentscale}{#1}         %
}                                                %
\define@key{rxnscheme}{name}{                    % Name
  \renewcommand{\mC@rs@name}{#1}                 %
}                                                %
\define@key{rxnscheme}{placement}{               % Float-Platzierung
  \renewcommand{\mC@rs@currentplacement}{#1}     %
}                                                %
\newcommand{\mC@rs@align}{center}                %
\newcommand{\mC@rs@right}{right}                 %
\newcommand{\mC@rs@center}{center}               %
\newcommand{\mC@rs@left}{left}                   %
\mC@def\setschemealign#1{%                       %
  \ifx\@empty#1\@empty                           %
    \renewcommand{\mC@rs@align}{center}          %
  \else                                          %
    \renewcommand{\mC@rs@align}{#1}              %
  \fi                                            %
}                                                %
\define@key{rxnscheme}{align}{                   % Alignment
  \renewcommand{\mC@rs@align}{#1}
}
% Gleitumgebung
\floatstyle{ruled}
\newfloat{rxnfloat}{\mC@rs@currentplacement}{rxnscheme}
\floatname{rxnfloat}{\mC@rs@name}                % Name ändern
% eigentliche Umgebung:
\newenvironment{rxnscheme}[2][]{%
  \setkeys{rxnscheme}{#1}
  \renewcommand\mC@rs@caption{#2}
  \begin{rxnfloat}
  %\centering
  \ifx\mC@rs@align\mC@rs@center \centering \fi
  \ifx\mC@rs@align\mC@rs@left \raggedright \fi
  \ifx\mC@rs@align\mC@rs@right \raggedleft \fi
  \mC@atomsize\mC@bondlength\mC@bondshape
  \begin{tikzpicture}[every picture/.style={scale=\mC@rs@currentscale},start chain,node distance=\mC@rxn@node@distance,inner sep=0pt,outer sep=0pt]
}{%
  \end{tikzpicture}%
  \caption{\mC@rs@caption}
  \ifthenelse{\equal{\mC@rs@currentlabel}{}}{}{\label{\mC@rs@currentlabel}}
  \end{rxnfloat}
}

% ------------------------------------------------------------------------------------- %
% einfache Reaktion ------------------------------------------------------------------- %
% ------------------------------------------------------------------------------------- %
\newcommand{\mC@reaction@scale}{1.0}
\newcommand{\mC@reaction@align}{center}
\mC@def\setrxnalign#1{
  \ifx\@empty#1\@empty
    \renewcommand{\mC@reaction@align}{center}
  \else
    \renewcommand{\mC@reaction@align}{#1}
  \fi
}
\newcommand{\mC@reaction@right}{right}
\newcommand{\mC@reaction@center}{center}
\newcommand{\mC@reaction@left}{left}
\define@key{rxn}{scale}{
  \renewcommand{\mC@reaction@scale}{#1}}
\define@key{rxn}{align}{
  \renewcommand{\mC@reaction@align}{#1}}
\newenvironment{rxn}[1][]{%
  \setkeys{rxn}{#1}
  \ifx\mC@reaction@align\mC@reaction@center
  \begin{center}
  \fi
  \ifx\mC@reaction@align\mC@reaction@left
  \begin{flushleft}
  \fi
  \ifx\mC@reaction@align\mC@reaction@right
  \begin{flushright}
  \fi
  \mC@bondlength\mC@bondshape\mC@atomsize
  \begin{tikzpicture}[every picture/.style={scale=\mC@reaction@scale},start chain,node distance=\mC@rxn@node@distance,inner sep=0pt,outer sep=0pt]
}{%
  \end{tikzpicture}%
  \ifx\mC@reaction@align\mC@reaction@center
  \end{center}
  \fi
  \ifx\mC@reaction@align\mC@reaction@left
  \end{flushleft}
  \fi
  \ifx\mC@reaction@align\mC@reaction@right
  \end{flushright}
  \fi
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% REAKTANDEN -------------------------------------------------------------------------- %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Standardreaktand -------------------------------------------------------------------- %
\mC@def\mC@reactand{\@ifnextchar[{\mC@reactand@ii}{\mC@reactand@i}}
\mC@def\mC@reactand@i#1{\def\mC@firstarg{on chain=going right}\let\mC@secondarg\@empty\let\mC@thirdarg\@empty\mC@reactand@iii{#1}}
\mC@def\mC@reactand@ii[#1]#2{
  \let\mC@remainargs\@empty\mC@splitarg{#1}
  \ifx\mC@firstarg\@empty\def\mC@reactand@alignment{right}\else\let\mC@reactand@alignment\mC@firstarg\fi
  \def\mC@firstarg{on chain=going \mC@reactand@alignment}
  \mC@reactand@iii{#2}}
\mC@def\mC@reactand@iii#1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg](\mC@secondarg){#1};}
\mC@def\reactand{\mC@reactand}

% Mesomerie --------------------------------------------------------------------------- %
\mC@def\mC@mesomeric{\@ifnextchar[{\mC@mesomeric@ii}{\mC@mesomeric@i}}
\mC@def\mC@mesomeric@i#1{\def\mC@firstarg{on chain=going right}\let\mC@secondarg\@empty\let\mC@thirdarg\@empty\mC@mesomeric@iii{#1}}
\mC@def\mC@mesomeric@ii[#1]#2{
  \let\mC@remainargs\@empty\mC@splitarg{#1}
  \ifx\mC@firstarg\@empty\def\mC@mesomeric@alignment{right}\else\let\mC@mesomeric@alignment\mC@firstarg\fi
  \def\mC@firstarg{on chain=going \mC@mesomeric@alignment}
  \mC@mesomeric@iii{#2}}
\mC@def\mC@mesomeric@iii#1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg,inner sep=1pt,left delimiter={[},right delimiter={]}](\mC@secondarg){\tikzpicture[start branch]#1\endtikzpicture};}
\mC@def\mesomeric{\mC@mesomeric}

\providecommand{\marrow}[1][right]{\arrow[type=<->,length=.5,direction=#1]{}{}}
% Dummy ------------------------------------------------------------------------------- %
\providecommand{\dummy}[1][]{\draw node[on chain,xshift=-\mC@rxn@node@distance](#1) {};}

% Uebergangszustand ------------------------------------------------------------------- %
\mC@def\mC@transition@name{x}
\mC@def\mC@transition{\@ifnextchar[{\mC@transition@ii}{\mC@transition@i}}
\mC@def\mC@transition@i#1{\def\mC@firstarg{on chain=going right}\let\mC@secondarg\mC@transition@name\let\mC@thirdarg\@empty\mC@transition@iii{#1}}
\mC@def\mC@transition@ii[#1]#2{
  \let\mC@remainargs\@empty\mC@splitarg{#1}
  \ifx\mC@firstarg\@empty\def\mC@transition@alignment{right}\else\let\mC@transition@alignment\mC@firstarg\fi
  \def\mC@firstarg{on chain=going \mC@transition@alignment}
  \ifx\mC@secondarg\@empty\let\mC@secondarg\mC@transition@name\fi
  \mC@transition@iii{#2}}
\mC@def\mC@transition@iii#1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg,inner sep=1pt,left delimiter={[},right delimiter={]}](\mC@secondarg){#1} node at ($(\mC@secondarg.north east)+(.25,0)$) {$\ddagger$};}
\mC@def\transition{\mC@transition}

% Abzweigung -------------------------------------------------------------------------- %
\mC@def\mC@branch{\@ifnextchar[{\mC@branch@ii}{\mC@branch@i}}
\mC@def\mC@branch@i#1{\def\mC@firstarg{on chain=going right}\let\mC@secondarg\@empty\let\mC@thirdarg\@empty\mC@branch@iii{#1}}
\mC@def\mC@branch@ii[#1]#2{\let\mC@remainargs\@empty\mC@splitarg{#1}\ifx\mC@firstarg\@empty\def\mC@firstarg{on chain=going right}\fi\mC@branch@iii{#2}}
\mC@def\mC@branch@iii#1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg](\mC@secondarg){\tikzpicture[start branch]#1\endtikzpicture};}
\mC@def\branch{\mC@branch}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Sonstiges --------------------------------------------------------------------------- %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Elektronenverschiebungspfeile ------------------------------------------------------- %
\providecommand{\elmove}[5][->,red,shorten <=3pt,shorten >=1pt]{\chemmove{\draw[#1](#2).. controls +(#3) and +(#5)..(#4);}}
% Bindungslänge ----------------------------------------------------------------------- %
\newcommand{\mC@bondlength}{\setatomsep{1.8em}}
\mC@def\setbondlength#1{
 \ifx\@empty#1\@empty
  \renewcommand{\mC@bondlength}{\setatomsep{1.8em}}
 \else
  \renewcommand{\mC@bondlength}{\setatomsep{#1}}
 \fi
}
\let\bondlength\setbondlength
% Keilbindungen ----------------------------------------------------------------------- %
\mC@def\mC@bondshape@one{3pt}
\mC@def\mC@bondshape@two{.5pt}
\mC@def\mC@bondshape@three{1pt}
\mC@def\setbondshape#1#2#3{
 \ifx\@empty#1\@empty
  \renewcommand{\mC@bondshape@one}{3pt}
 \else
  \renewcommand{\mC@bondshape@one}{#1}
 \fi
 \ifx\@empty#2\@empty
  \renewcommand{\mC@bondshape@two}{.5pt}
 \else
  \renewcommand{\mC@bondshape@two}{#2}
 \fi
 \ifx\@empty#3\@empty
  \renewcommand{\mC@bondshape@three}{1pt}
 \else
  \renewcommand{\mC@bondshape@three}{#3}
 \fi
}
\let\bondshape\setbondshape
\mC@def\mC@bondshape{\setcrambond{\mC@bondshape@one}{\mC@bondshape@two}{\mC@bondshape@three}}
% Atomgröße --------------------------------------------------------------------------- %
\mC@def\mC@atomsize{\small}
\mC@def\setatomsize#1{
 \ifx\@empty#1\@empty
  \renewcommand{\mC@atomsize}{\small}
 \else
  \renewcommand{\mC@atomsize}{#1}
 \fi
}
\let\atomsize\setatomsize
% Plus -------------------------------------------------------------------------------- %
\mC@def\mC@chemand{\@ifnextchar[{\mC@chemand@ii}{\mC@chemand@i}}
\mC@def\mC@chemand@i{\def\mC@firstarg{on chain=going right}\let\mC@secondarg\@empty\let\mC@thirdarg\@empty\mC@chemand@iii}
\mC@def\mC@chemand@ii[#1]{
  \let\mC@remainargs\@empty\mC@splitarg{#1}
  \ifx\mC@firstarg\@empty\def\mC@chemand@alignment{right}\else\let\mC@chemand@alignment\mC@firstarg\fi
  \def\mC@firstarg{on chain=going \mC@chemand@alignment}
  \mC@chemand@iii}
\mC@def\mC@chemand@iii{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg](\mC@secondarg){\chemsign[0pt]{+}};}
\mC@def\chemand{\mC@chemand}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Setup myChemistry ------------------------------------------------------------------- %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\mC@def\mCsetup#1{\setkeys{setup}{#1}}
\define@key{setup}{arrowlength}[5em]{%
  \setarrowlength{#1}}
\define@key{setup}{atomsize}[\small]{%
  \setatomsize{#1}}
\define@key{setup}{bondlength}[1.8em]{%
  \setbondlength{#1}}
\define@key{setup}{rcndist}[1em]{%
  \setrcndist{#1}}
\define@key{setup}{rxnalign}[center]{%
  \setrxnalign{#1}}
\define@key{setup}{schemealign}[center]{%
  \setschemealign{#1}}
\define@key{setup}{align}[center]{%
  \setrxnalign{#1}
  \setschemealign{#1}}
\define@key{setup}{reset}[]{%
  \setarrowlength{}
  \setatomsize{}
  \setbondlength{}
  \setbondshape{}{}{}
  \setrcndist{}
  \setrxnalign{}
  \setschemealign{}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% NODES SICHTBAR/UNSICHTBAR MACHEN ---------------------------------------------------- %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand\makevisible{
  \def\mC@reactand@iii##1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg,draw=red!60,solid](\mC@secondarg){##1};}
  \def\mC@branch@iii##1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg,draw=purple,dotted](\mC@secondarg){\tikzpicture[start branch]##1\endtikzpicture};}
  \def\mC@transition@iii##1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg,inner sep=1pt,left delimiter={[},right delimiter={]},draw=red!60,solid](\mC@secondarg){##1} node at ($(\mC@secondarg.north east)+(.25,0)$) {$\ddagger$};}
  \renewcommand{\mC@arrow}[3][]{
   \renewcommand{\mC@arrow@length@factor}{\mC@arrow@currentlength}
   \setlength{\mC@arrow@length@actual}{\mC@arrow@currentlength\mC@arrow@length@default}
   \ifthenelse{\equal{\mC@arrow@argument@both}{true}}{
     \mC@largernode{##2}{##3}
   }{
     \setlength{\mC@arrow@argument@width}{0pt}
     \setlength{\mC@arrow@argument@height}{0pt}
   }
   \draw node[solid,on chain=going \mC@arrow@currentdirection](\mC@arrow@currentname) {\tikz{
     \mC@arrow@drawing
     }
   };
   \mC@arrow@argument@anchor
   \draw node[draw=green!60,solid,anchor=\mC@arrow@above@anchor,rotate=\mC@arrow@rotate,minimum width=\mC@arrow@argument@width, minimum height=\mC@arrow@argument@height]
    at ($(@arrow@center.base)+(90+\mC@arrow@argument@angle:\mC@arrow@argument@aboveshift)$) {##2};
   \draw node[draw=blue!60,solid,anchor=\mC@arrow@below@anchor,rotate=\mC@arrow@rotate,minimum width=\mC@arrow@argument@width, minimum height=\mC@arrow@argument@height]
    at ($(@arrow@center.base)+(-90+\mC@arrow@argument@angle:\mC@arrow@argument@belowshift)$) {##3};
   \setlength{\mC@arrow@argument@aboveshift}{2pt}
   \setlength{\mC@arrow@argument@belowshift}{2pt}
  }
}

\newcommand\makeinvisible{
  \def\mC@reactand@iii##1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg](\mC@secondarg){##1};}
  \def\mC@branch@iii##1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg](\mC@secondarg){\tikzpicture[start branch]##1\endtikzpicture};}
  \def\mC@transition@iii##1{\expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[\expandafter\mC@firstarg\expandafter,\mC@thirdarg,inner sep=1pt,left delimiter={[},right delimiter={]}](\mC@secondarg){##1} node at ($(\mC@secondarg.north east)+(.25,0)$) {$\ddagger$};}
  \renewcommand{\mC@arrow}[3][]{
   \renewcommand{\mC@arrow@length@factor}{\mC@arrow@currentlength}
   \setlength{\mC@arrow@length@actual}{\mC@arrow@currentlength\mC@arrow@length@default}
   \ifthenelse{\equal{\mC@arrow@argument@both}{true}}{
     \mC@largernode{##2}{##3}
   }{
     \setlength{\mC@arrow@argument@width}{0pt}
     \setlength{\mC@arrow@argument@height}{0pt}
   }
   \draw node[on chain=going \mC@arrow@currentdirection](\mC@arrow@currentname) {\tikz{
     \mC@arrow@drawing
     }
   };
   \mC@arrow@argument@anchor
   \draw node[anchor=\mC@arrow@above@anchor,rotate=\mC@arrow@rotate,minimum width=\mC@arrow@argument@width, minimum height=\mC@arrow@argument@height]
    at ($(@arrow@center.base)+(90+\mC@arrow@argument@angle:\mC@arrow@argument@aboveshift)$) {##2};
   \draw node[anchor=\mC@arrow@below@anchor,rotate=\mC@arrow@rotate,minimum width=\mC@arrow@argument@width, minimum height=\mC@arrow@argument@height]
    at ($(@arrow@center.base)+(-90+\mC@arrow@argument@angle:\mC@arrow@argument@belowshift)$) {##3};
   \setlength{\mC@arrow@argument@aboveshift}{2pt}
   \setlength{\mC@arrow@argument@belowshift}{2pt}
  }
}
% ------------------------------------------------------------------------------------- %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%