summaryrefslogtreecommitdiff
path: root/obsolete/macros/latex/contrib/mychemistry/mychemistry.sty
diff options
context:
space:
mode:
Diffstat (limited to 'obsolete/macros/latex/contrib/mychemistry/mychemistry.sty')
-rw-r--r--obsolete/macros/latex/contrib/mychemistry/mychemistry.sty1557
1 files changed, 1557 insertions, 0 deletions
diff --git a/obsolete/macros/latex/contrib/mychemistry/mychemistry.sty b/obsolete/macros/latex/contrib/mychemistry/mychemistry.sty
new file mode 100644
index 0000000000..089ac37b85
--- /dev/null
+++ b/obsolete/macros/latex/contrib/mychemistry/mychemistry.sty
@@ -0,0 +1,1557 @@
+% --------------------------------------------------------------------------
+% the MYCHEMISTRY package
+%
+% create reaction schemes with LaTeX and chemfig
+%
+% --------------------------------------------------------------------------
+% Clemens Niederberger
+% Web: https://www.bitbucket.org/cgnieder/mychemistry
+% E-Mail: 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 mychemistrysty, mychemistry_en.tex,
+% README and the derived file mychemistry_en.pdf.
+% --------------------------------------------------------------------------
+\ProvidesPackage{mychemistry}[2012/12/19 v1.99b create reaction schemes with LaTeX and chemfig]
+\RequirePackage{etoolbox,float,xkeyval,chemfig,chemmacros}
+\usetikzlibrary{
+ arrows,
+ positioning,
+ decorations.pathmorphing,
+ shapes,
+ calc,
+ matrix,
+ chains,
+ scopes,
+ intersections}
+
+% --------------------------------------------------------------------------
+% Tools
+\newif\ifmCh@strict
+\newif\ifmCh@draft
+\def\mCh@if@strict{%
+ \ifmCh@strict\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+
+\def\mCh@error#1#2{%
+ \mCh@if@strict
+ {\PackageError{mychemistry}{#1}{#2}}
+ {\PackageWarning{mychemistry}{#1}{#2}}}
+
+\def\mCh@strict@error#1#2{%
+ \begingroup
+ \mCh@stricttrue
+ \mCh@error{#1}{#2}%
+ \endgroup}
+
+\def\mCh@def#1{%
+ \ifdef{#1}{%
+ \mCh@strict@error{already defined}{mychemistry tries to define \string#1 but
+ it seems it is already defined. Please contact the author.}%
+ \@gobble
+ }{\def#1}}
+
+% "variablen" definieren
+\mCh@def\mCh@strip@bs{\expandafter\@gobble\string}
+\mCh@def\mCh@ifis@variable#1#2#3{%
+ \ifcsdef{mCh@variable@\mCh@strip@bs#1}
+ {#2}
+ {\mCh@error{variable \string#1 undefined}{}#3}}
+\mCh@def\mCh@new@variable#1{%
+ \ifcsdef{mCh@variable@\mCh@strip@bs#1}
+ {\mCh@error{variable \string#1 already defined. I'm doing nothing!}{}}
+ {\csdef{mCh@variable@\mCh@strip@bs#1}{}\csdef{mCh@\mCh@strip@bs#1}{}}}
+\mCh@def\mCh@set@variable#1#2{%
+ \mCh@ifis@variable{#1}{\csdef{mCh@\mCh@strip@bs#1}{#2}}{\@gobble}}
+\mCh@def\mCh@xset@variable#1#2{%
+ \mCh@ifis@variable{#1}{\csedef{mCh@\mCh@strip@bs#1}{#2}}{\@gobble}}
+\mCh@def\mCh@clear@variable#1{%
+ \mCh@ifis@variable{#1}{\csdef{mCh@\mCh@strip@bs#1}{}}{}}
+\mCh@def\mCh@let@variable#1#2{%
+ \mCh@ifis@variable{#1}{\mCh@ifis@variable{#2}
+ {\csletcs{mCh@\mCh@strip@bs#1}{mCh@\mCh@strip@bs#2}}{}}{}}
+\mCh@def\mCh@empty@variable#1{%
+ \mCh@ifis@variable{#1}{\cslet{mCh@\mCh@strip@bs#1}\@empty}{}}
+\mCh@def\mCh@ifeq@variable#1#2#3#4{%
+ \mCh@ifis@variable{#1}{\mCh@ifis@variable{#2}
+ {\ifcsequal{mCh@\mCh@strip@bs#1}{mCh@\mCh@strip@bs#2}{#3}{#4}}{}}{}}
+\mCh@def\mCh@ifempty@variable#1#2#3{%
+ \ifcsequal{mCh@\mCh@strip@bs#1}{@empty}{#2}{#3}}
+
+\mCh@new@variable\true
+\mCh@new@variable\false
+
+\mCh@set@variable\true{true}
+\mCh@set@variable\false{false}
+
+% Optional Argument Analysis
+% is #2 part of #1? (inspired by \CF@if@instr by Christian Tellechea)
+\mCh@def\mCh@if@instr#1#2{%
+ \def\mCh@if@instr@i##1#2##2\@nil{%
+ \ifstrempty{##2}{\@secondoftwo}{\@firstoftwo}}%
+ \mCh@if@instr@i#1\@@nil#2\@nil
+}
+
+\mCh@new@variable\firstarg
+\mCh@new@variable\secondarg
+\mCh@new@variable\thirdarg
+
+% Am ersten , splitten, #1 in #3 speichern, #2 in \mCh@remainargs
+% (das Makro ist eine Kopie von \CF@analyze@movearg in chemfig.tex von Christian Tellechea)
+\mCh@def\mCh@splitfirst#1,#2\@nil#3{%
+ \def#3{#1}\def\mCh@remainargs{#2}%
+}
+
+% ein durch , in 3 Teile getrenntes Argument splitten
+% (das Makro ist eine Abwandlung von \CF@analyze@movearg in chemfig.tex von Christian Tellechea)
+\mCh@def\mCh@splitarg#1{%
+ \mCh@if@instr{#1}{,}
+ {\expandafter\mCh@splitfirst#1\@nil\mCh@firstarg}
+ {\mCh@set@variable\firstarg{#1}}%
+ \expandafter\mCh@if@instr\expandafter{\mCh@remainargs}{,}
+ {\expandafter\mCh@splitfirst\mCh@remainargs\@nil\mCh@secondarg}{\expandafter\mCh@set@variable\expandafter\secondarg\expandafter{\mCh@remainargs}}%
+ \ifx\mCh@remainargs\mCh@secondarg
+ \mCh@empty@variable\thirdarg
+ \else
+ \expandafter\mCh@set@variable\expandafter\thirdarg\expandafter{\mCh@remainargs}%
+ \fi
+}
+
+% --------------------------------------------------------------------------
+% options
+\define@key[MC]{mychemistry.sty}{strict}{\mCh@stricttrue}
+\DeclareOptionX[MC]{strict}{\mCh@stricttrue}
+
+\define@key[MC]{mychemistry.sty}{draft}{\mCh@stricttrue\mCh@drafttrue}
+\DeclareOptionX[MC]{draft}{\mCh@stricttrue\mCh@drafttrue}
+
+\define@key[MC]{mychemistry.sty}{final}{\mCh@strictfalse\mCh@draftfalse}
+\DeclareOptionX[MC]{final}{\mCh@strictfalse\mCh@draftfalse}
+
+\mCh@new@variable\rs@placement
+\mCh@new@variable\rs@currentplacement
+
+\mCh@set@variable\rs@placement{hpt}
+\mCh@let@variable\rs@currentplacement\rs@placement
+
+\define@key[MC]{mychemistry.sty}{placement}{%
+ \mCh@set@variable\rs@placement{#1}}
+
+\ProcessOptionsX[MC]
+
+% --------------------------------------------------------------------------
+% language settings
+\mCh@new@variable\rs@name
+\mCh@set@variable\rs@name{Reaction scheme}
+
+\RequirePackage{translations}
+\NewTranslation{English} {reaction-scheme-(caption-title)} {Reaction scheme}
+\NewTranslation{French} {reaction-scheme-(caption-title)} {Sch\'{e}ma r\'{e}actionnel}
+\NewTranslation{German} {reaction-scheme-(caption-title)} {Reaktionsschema}
+\NewTranslation{Italian} {reaction-scheme-(caption-title)} {Reazione Scheme}
+\NewTranslation{Spanish} {reaction-scheme-(caption-title)} {Esquema de Reacci\'{o}n}
+\mCh@set@variable\rs@name{\GetTranslation{reaction-scheme-(caption-title)}}
+
+
+% --------------------------------------------------------------------------
+% Direction Analysis
+% Richtungen:
+\mCh@new@variable\r
+\mCh@new@variable\ar
+\mCh@new@variable\a
+\mCh@new@variable\al
+\mCh@new@variable\l
+\mCh@new@variable\br
+\mCh@new@variable\b
+\mCh@new@variable\bl
+
+\mCh@set@variable\r{right}
+\mCh@set@variable\ar{above right}
+\mCh@set@variable\a{above}
+\mCh@set@variable\al{above left}
+\mCh@set@variable\l{left}
+\mCh@set@variable\br{below right}
+\mCh@set@variable\b{below}
+\mCh@set@variable\bl{below left}
+
+\mCh@new@variable\vert@i
+\mCh@new@variable\vert@ii
+\mCh@new@variable\vert@iii
+
+\mCh@set@variable\vert@i{90}
+\mCh@set@variable\vert@ii{-90}
+\mCh@set@variable\vert@iii{270}
+
+% Richtung in Bezug auf node oder nicht?
+\mCh@new@variable\direction
+
+\mCh@def\mCh@split@angle#1.#2\@nil#3{%
+ \def#3{#1}\mCh@set@variable\direction{#2}}
+\mCh@def\mCh@wowo@node#1{%
+ \mCh@if@instr{#1}{.}
+ {\expandafter\mCh@split@angle#1\@nil\mCh@referred@node}
+ {\mCh@set@variable\direction{#1}}}
+
+% Winkel bestimmen:
+\mCh@new@variable\angle
+\mCh@new@variable\referred@node
+
+\mCh@def\mCh@analyze@angle#1{%
+ \mCh@empty@variable\angle
+ \mCh@empty@variable\referred@node
+ \mCh@wowo@node{#1}%
+ \mCh@ifeq@variable\direction\r {\mCh@set@variable\angle{0}}{}%
+ \mCh@ifeq@variable\direction\ar {\mCh@set@variable\angle{45}}{}%
+ \mCh@ifeq@variable\direction\a {\mCh@set@variable\angle{90}}{}%
+ \mCh@ifeq@variable\direction\al {\mCh@set@variable\angle{135}}{}%
+ \mCh@ifeq@variable\direction\l {\mCh@set@variable\angle{180}}{}%
+ \mCh@ifeq@variable\direction\bl {\mCh@set@variable\angle{225}}{}%
+ \mCh@ifeq@variable\direction\b {\mCh@set@variable\angle{270}}{}%
+ \mCh@ifeq@variable\direction\br {\mCh@set@variable\angle{315}}{}%
+ \mCh@ifempty@variable\angle{%
+ \pgfmathparse{\mCh@direction <0 ? int(\mCh@direction+360) : int(\mCh@direction) }%
+ \mCh@xset@variable\angle{\pgfmathresult}%
+ }{}%
+}
+% --------------------------------------------------------------------------
+% PFEILE
+% \arrow[<pos>,<type>,<length factor>,<name>,both,<tikz>]{<above>}{<below>}
+% Pfeiltypen:
+\mCh@new@variable\arrow@type@def
+\mCh@new@variable\arrow@type@eqv
+\mCh@new@variable\arrow@type@back
+\mCh@new@variable\arrow@type@eq
+\mCh@new@variable\arrow@type@eqq
+\mCh@new@variable\arrow@type@eeq
+\mCh@new@variable\arrow@type@not
+\mCh@new@variable\arrow@type@pm
+
+\mCh@set@variable\arrow@type@def{->}
+\mCh@set@variable\arrow@type@eqv{<->}
+\mCh@set@variable\arrow@type@back{<-}
+\mCh@set@variable\arrow@type@eq{<=>}
+\mCh@set@variable\arrow@type@eqq{<=>>}
+\mCh@set@variable\arrow@type@eeq{<<=>}
+\mCh@set@variable\arrow@type@not{-|>}
+\mCh@set@variable\arrow@type@pm{-+>}
+
+% Voreinstellungen
+% Pfeillänge
+\mCh@new@variable\arrow@length@def
+\mCh@new@variable\arrow@length
+\mCh@new@variable\arrow@factor
+
+\mCh@set@variable\arrow@length@def{4em}
+\let\mCh@arrow@length\mCh@arrow@length@def
+\mCh@set@variable\arrow@factor{1}
+
+\newrobustcmd\setarrowlength[1]{%
+ \ifblank{#1}
+ {\mCh@let@variable\arrow@length\arrow@length@def}
+ {\mCh@set@variable\arrow@length{#1}}}
+
+% Label-Abstand
+\mCh@new@variable\arrow@label@dist@def
+\mCh@new@variable\arrow@label@dist
+
+\mCh@set@variable\arrow@label@dist@def{.2em}
+\mCh@let@variable\arrow@label@dist\arrow@label@dist@def
+
+\newrobustcmd\setarrowlabel[1]{%
+ \ifblank{#1}
+ {\mCh@let@variable\arrow@label@dist\arrow@label@dist@def}
+ {\mCh@set@variable\arrow@label@dist{#1}}}
+
+% Pfeildicke
+\mCh@new@variable\arrow@linethickness@default
+\mCh@new@variable\arrow@linethickness
+
+\mCh@set@variable\arrow@linethickness@default{semithick}
+\mCh@let@variable\arrow@linethickness\arrow@linethickness@default
+
+\newrobustcmd\setarrowline[1]{%
+ \ifblank{#1}
+ {\mCh@let@variable\arrow@linethickness\arrow@linethickness@default}
+ {\mCh@set@variable\arrow@linethickness{#1}}}
+
+% Winkel untersuchen, um Label richtig anzubringen
+\mCh@new@variable\beta
+\mCh@new@variable\arrow@label@anchor@up
+\mCh@new@variable\arrow@label@anchor@down
+\mCh@new@variable\arrow@label@anchor@add
+\mCh@new@variable\arrow@label@anchor@sub
+\newcount\mCh@alpha
+
+\mCh@def\mCh@evaluate@angle#1{
+ \mCh@alpha=#1
+ \pgfmathparse{cos(\mCh@alpha) > 0}
+ \ifnum\pgfmathresult=1
+ \mCh@set@variable\beta{#1}%
+ \mCh@set@variable\arrow@label@anchor@up{south}%
+ \mCh@set@variable\arrow@label@anchor@down{north}%
+ \ifnum\mCh@alpha<180
+ \mCh@set@variable\arrow@label@anchor@add{east}%
+ \mCh@set@variable\arrow@label@anchor@sub{south}%
+ \else
+ \mCh@set@variable\arrow@label@anchor@add{south}%
+ \mCh@set@variable\arrow@label@anchor@sub{west}%
+ \fi
+ \else
+ \pgfmathparse{cos(\mCh@alpha) == 0}%
+ \ifnum\pgfmathresult=1
+ \mCh@set@variable\beta{0}%
+ \ifnum\mCh@alpha=90
+ \mCh@set@variable\arrow@label@anchor@up{east}%
+ \mCh@set@variable\arrow@label@anchor@down{west}%
+ \mCh@set@variable\arrow@label@anchor@add{east}%
+ \mCh@set@variable\arrow@label@anchor@sub{east}%
+ \else
+ \mCh@set@variable\arrow@label@anchor@up{west}%
+ \mCh@set@variable\arrow@label@anchor@down{east}%
+ \mCh@set@variable\arrow@label@anchor@add{west}%
+ \mCh@set@variable\arrow@label@anchor@sub{west}%
+ \fi
+ \else
+ \mCh@set@variable\arrow@label@anchor@up{north}%
+ \mCh@set@variable\arrow@label@anchor@down{south}%
+ \ifnum\mCh@alpha=180
+ \mCh@set@variable\beta{180-#1}%
+ \mCh@set@variable\arrow@label@anchor@add{north}%
+ \mCh@set@variable\arrow@label@anchor@sub{north}%
+ \fi
+ \ifnum\mCh@alpha>180
+ \mCh@set@variable\beta{180+#1}%
+ \mCh@set@variable\arrow@label@anchor@add{west}%
+ \mCh@set@variable\arrow@label@anchor@sub{north}%
+ \fi
+ \ifnum\mCh@alpha<180
+ \mCh@set@variable\beta{180+#1}%
+ \mCh@set@variable\arrow@label@anchor@add{north}%
+ \mCh@set@variable\arrow@label@anchor@sub{east}%
+ \fi
+ \fi
+ \fi
+}
+
+% Maße der Nodes der Pfeilargumente bestimmen, größere später an Pfeil weitergeben
+\mCh@new@variable\arrow@both
+\mCh@set@variable\arrow@both{both}
+
+\newlength{\mCh@height@A}
+\newlength{\mCh@height@B}
+\newlength{\mCh@arrow@label@height}
+\newlength{\mCh@width@A}
+\newlength{\mCh@width@B}
+\newlength{\mCh@arrow@label@width}
+
+\mCh@def\mCh@savenode{%
+ \global\let\mCh@minx=\pgfpositionnodelaterminx
+ \global\let\mCh@maxx=\pgfpositionnodelatermaxx
+ \global\let\mCh@miny=\pgfpositionnodelaterminy
+ \global\let\mCh@maxy=\pgfpositionnodelatermaxy
+}
+
+% der nächste Befehl benötigt pgf v2.10!
+\mCh@def\mCh@largernode#1#2{%
+ \ifdef\pgfpositionnodelater{%
+ \pgfpositionnodelater{\mCh@savenode}%
+ \node{#1};
+ \deflength{\mCh@width@A}{\mCh@maxx-\mCh@minx}%
+ \deflength{\mCh@height@A}{\mCh@maxy-\mCh@miny}%
+ \node{#2};
+ \deflength{\mCh@width@B}{\mCh@maxx-\mCh@minx}%
+ \deflength{\mCh@height@B}{\mCh@maxy-\mCh@miny}%
+ \pgfmathsetlength{\mCh@arrow@label@width}{max(\mCh@width@A,\mCh@width@B)}%
+ \pgfmathsetlength{\mCh@arrow@label@height}{max(\mCh@height@A,\mCh@height@B)}%
+ \global\mCh@arrow@label@width=\mCh@arrow@label@width
+ \global\mCh@arrow@label@height=\mCh@arrow@label@height
+ }{%
+ \mCh@error{%
+ The command \string\pgfpositionnodelater\space is undefined. Make sure,
+ you have installed the latest version of pgf}{}%
+ }%
+}
+
+% Pfeil zeichnen:
+\newrobustcmd\mCh@arrow[3][]{%
+ \ifstrempty{#1}
+ {\mCh@arrow@i}{\mCh@arrow@ii[#1]}
+ {#2}{#3}}
+
+\mCh@def\mCh@arrow@i#1#2{%
+ \node[on chain=going {at=(\tikzchainprevious.0)},
+ minimum size=0,
+ inner sep=3pt,
+ outer sep=0,
+ anchor=180,
+ shift=(0:.5*\mCh@rxn@node@distance)] (@mCh@arrow@start){};
+ \node[on chain=going {at=(\tikzchainprevious.0),
+ shift=($(0:.5*\mCh@arrow@factor*\mCh@arrow@length)$)},
+ minimum size=0,
+ inner sep=3pt,
+ outer sep=0] (@mCh@arrow@end){};
+ \draw[-mCtip,\mCh@arrow@linethickness]
+ let \n1={0}, \n2={180}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](mCh@arrow@center){}
+ ++($(0:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=0,
+ anchor=south,
+ inner sep=0]
+ at ($(mCh@arrow@center)!\mCh@arrow@label@dist!90:(@mCh@arrow@end)$){#1};
+ \expandafter\node\expandafter[\mCh@arrow@downlabel@visible,
+ rotate=0,
+ anchor=north,
+ inner sep=0]
+ at ($(mCh@arrow@center)!\mCh@arrow@label@dist!-90:(@mCh@arrow@end)$){#2};
+}
+
+\mCh@new@variable\arrow@plusminus
+\mCh@new@variable\anchor
+\mCh@new@variable\arrow@tikz
+\mCh@new@variable\arrow@type@valid
+\mCh@new@variable\arrow@type
+\mCh@new@variable\arrow@type@actual
+\mCh@new@variable\arrow@name
+
+\mCh@def\mCh@arrow@ii[#1]#2#3{%
+ \mCh@empty@variable\arrow@plusminus
+ \mCh@empty@variable\arrow@type
+ \let\mCh@remainargs\@empty
+ \mCh@splitarg{#1}%
+ \mCh@ifempty@variable\firstarg{% erste Option: Richtung
+ \mCh@set@variable\angle{0}%
+ \mCh@set@variable\beta{0}%
+ \mCh@set@variable\arrow@label@anchor@up{south}%
+ \mCh@set@variable\arrow@label@anchor@down{north}%
+ \mCh@set@variable\arrow@label@anchor@add{south}%
+ \mCh@set@variable\arrow@label@anchor@sub{south}%
+ \mCh@set@variable\anchor{180}%
+ \mCh@empty@variable\referred@node
+ }{%
+ \expandafter\mCh@analyze@angle\expandafter{\mCh@firstarg}%
+ \mCh@set@variable\anchor{180+\mCh@angle}%
+ \mCh@evaluate@angle{\mCh@angle}%
+ }
+ \mCh@ifempty@variable\referred@node{%
+ \mCh@set@variable\referred@node{\tikzchainprevious}%
+ }{}%
+ \mCh@ifempty@variable\secondarg{}{% zweite Option: Typ
+ \mCh@set@variable\arrow@type{true}
+ \mCh@let@variable\arrow@type@actual\secondarg
+ }%
+ \let\mCh@remainargs\@empty%
+ \expandafter\mCh@splitarg\expandafter{\mCh@thirdarg}%
+ \mCh@ifempty@variable\firstarg{% dritte Option: Längenfaktor
+ \mCh@set@variable\arrow@factor{1}%
+ }{%
+ \mCh@xset@variable\arrow@factor{\mCh@firstarg}%
+ }%
+ \mCh@ifempty@variable\secondarg{% vierte Option: Name
+ \mCh@set@variable\arrow@name{mCh@arrow@center}%
+ }{%
+ \mCh@xset@variable\arrow@name{\mCh@secondarg}%
+ }%
+ \let\mCh@remainargs\@empty%
+ \expandafter\mCh@splitarg\expandafter{\mCh@thirdarg}%
+ \mCh@ifeq@variable\arrow@both\firstarg% fünfte Option: both
+ {{\mCh@largernode{#2}{#3}}}%
+ {%
+ \deflength{\mCh@arrow@label@width}{0pt}%
+ \deflength{\mCh@arrow@label@height}{0pt}%
+ }%
+ \mCh@ifempty@variable\secondarg{% sechste Option: tikz
+ \mCh@empty@variable\arrow@tikz
+ }{%
+ \mCh@xset@variable\arrow@tikz{\mCh@secondarg,\mCh@thirdarg}%
+ }%
+ \node[on chain=going {at=(\mCh@referred@node.\mCh@angle)},
+ minimum size=0,
+ inner sep=3pt,
+ outer sep=0,
+ anchor=\mCh@anchor,
+ shift=(\mCh@angle:.5*\mCh@rxn@node@distance)] (@mCh@arrow@start){};
+ \node[on chain=going {at=(\tikzchainprevious.\mCh@angle),
+ shift=($(\mCh@angle:.5*\mCh@arrow@factor*\mCh@arrow@length)$)},
+ minimum size=0,
+ inner sep=3pt,
+ outer sep=0] (@mCh@arrow@end){};
+ \mCh@ifeq@variable\arrow@type\true{%
+ \mCh@let@variable\arrow@type@valid\false
+ \mCh@ifeq@variable\arrow@type@actual\arrow@type@eq{% <=>
+ \mCh@let@variable\arrow@type@valid\true
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ -mChtip,
+ \mCh@arrow@linethickness]
+ let \n1={20+\mCh@angle}, \n2={160+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](mCh@arrow@center@up){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ mChtip-,
+ \mCh@arrow@linethickness]
+ let \n1={-20+\mCh@angle}, \n2={200+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](mCh@arrow@center@down){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \draw[draw=none]
+ let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@up,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0]
+ at ($(mCh@arrow@center@up)!\mCh@arrow@label@dist!90:(@mCh@arrow@end)$){#2};
+ \expandafter\node[\expandafter\mCh@arrow@downlabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@down,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0]
+ at ($(mCh@arrow@center@down)!\mCh@arrow@label@dist!-90:(@mCh@arrow@end)$){#3};
+ }{}%
+ \mCh@ifeq@variable\arrow@type@actual\arrow@type@eqq{% <=>>
+ \mCh@let@variable\arrow@type@valid\true
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ -mChtip,
+ \mCh@arrow@linethickness]
+ let \n1={20+\mCh@angle}, \n2={160+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](mCh@arrow@center@up){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ mChtip-,
+ \mCh@arrow@linethickness]
+ let \n1={-20+\mCh@angle}
+ in ($(@mCh@arrow@start.\n1)+(\mCh@angle:.25*\mCh@arrow@factor*\mCh@arrow@length)$)
+ --node[pos=.5,inner sep=0](mCh@arrow@center@down){}
+ ++($(\mCh@angle:.5*\mCh@arrow@factor*\mCh@arrow@length)$);
+ \draw[draw=none] let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@up,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0]
+ at ($(mCh@arrow@center@up)!\mCh@arrow@label@dist!90:(@mCh@arrow@end)$){#2};
+ \expandafter\node\expandafter[\mCh@arrow@downlabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@down,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0]
+ at ($(mCh@arrow@center@down)!\mCh@arrow@label@dist!-90:(@mCh@arrow@end)$){#3};
+ }{}%
+ \mCh@ifeq@variable\arrow@type@actual\arrow@type@eeq{% <<=>
+ \mCh@let@variable\arrow@type@valid\true
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ -mChtip,
+ \mCh@arrow@linethickness]
+ let \n1={20+\mCh@angle}, \n2={160+\mCh@angle}
+ in ($(@mCh@arrow@start.\n1)+(\mCh@angle:.25*\mCh@arrow@factor*\mCh@arrow@length)$)
+ --node[pos=.5,inner sep=0](mCh@arrow@center@up){}
+ ++($(\mCh@angle:.5*\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ mChtip-,
+ \mCh@arrow@linethickness]
+ let \n1={-20+\mCh@angle}, \n2={200+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](mCh@arrow@center@down){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \draw[draw=none]
+ let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@up,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0]
+ at ($(mCh@arrow@center@up)!\mCh@arrow@label@dist!90:(@mCh@arrow@end)$){#2};
+ \expandafter\node\expandafter[\mCh@arrow@downlabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@down,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0]
+ at ($(mCh@arrow@center@down)!\mCh@arrow@label@dist!-90:(@mCh@arrow@end)$){#3};
+ }{}%
+ \mCh@ifeq@variable\arrow@type@actual\arrow@type@def{% ->
+ \mCh@let@variable\arrow@type@valid\true
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ -mCtip,
+ \mCh@arrow@linethickness,
+ \mCh@arrow@tikz]
+ let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@up,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height]
+ at ($(\mCh@arrow@name)!\mCh@arrow@label@dist!90:(@mCh@arrow@end)$){#2};
+ \expandafter\node\expandafter[\mCh@arrow@downlabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@down,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height]
+ at ($(\mCh@arrow@name)!\mCh@arrow@label@dist!-90:(@mCh@arrow@end)$){#3};
+ }{}%
+ \mCh@ifeq@variable\arrow@type@actual\arrow@type@eqv{% <->
+ \mCh@let@variable\arrow@type@valid\true
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ mCtip-mCtip,
+ \mCh@arrow@linethickness]
+ let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@up,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,inner sep=0]
+ at ($(\mCh@arrow@name)!\mCh@arrow@label@dist!90:(@mCh@arrow@end)$){#2};
+ \expandafter\node\expandafter[\mCh@arrow@downlabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@down,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,inner sep=0]
+ at ($(\mCh@arrow@name)!\mCh@arrow@label@dist!-90:(@mCh@arrow@end)$){#3};
+ }{}%
+ \mCh@ifeq@variable\arrow@type@actual\arrow@type@back{% <-
+ \mCh@let@variable\arrow@type@valid\true
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ mCtip-,
+ \mCh@arrow@linethickness]
+ let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@up,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0] at ($(\mCh@arrow@name)!\mCh@arrow@label@dist!90:(@mCh@arrow@end)$){#2};
+ \expandafter\node\expandafter[\mCh@arrow@downlabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@down,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0]
+ at ($(\mCh@arrow@name)!\mCh@arrow@label@dist!-90:(@mCh@arrow@end)$){#3};
+ }{}%
+ \mCh@ifeq@variable\arrow@type@actual\arrow@type@not{% -|>
+ \mCh@let@variable\arrow@type@valid\true
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ -mCtip,
+ \mCh@arrow@linethickness]
+ let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@up,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,
+ inner sep=0] at ($(\mCh@arrow@name)!.8em!90:(@mCh@arrow@end)$){#2};
+ \expandafter\node\expandafter[\mCh@arrow@downlabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@down,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,inner sep=0]
+ at ($(\mCh@arrow@name)!.8em!-90:(@mCh@arrow@end)$){#3};
+ \draw ($(mCh@arrow@center)!.6em!-110:(@mCh@arrow@end)+(\mCh@angle:.1em)$)
+ --($(mCh@arrow@center)!.6em!70:(@mCh@arrow@end)+(\mCh@angle:.1em)$);
+ \draw ($(mCh@arrow@center)!.6em!-110:(@mCh@arrow@end)+(180+\mCh@angle:.1em)$)
+ --($(mCh@arrow@center)!.6em!70:(@mCh@arrow@end)+(180+\mCh@angle:.1em)$);
+ }{}%
+ \mCh@ifeq@variable\arrow@type@actual\arrow@type@pm{% -+>
+ \mCh@let@variable\arrow@type@valid\true
+ \mCh@let@variable\arrow@plusminus\true
+ \draw[-mCtip,\mCh@arrow@linethickness]
+ let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ }{}%
+ \mCh@ifeq@variable\arrow@type@valid\false
+ {\mCh@error{Unknown arrow type `\mCh@arrow@type@actual'}{}}{}%
+ }{% default: ->
+ \expandafter\draw\expandafter[\mCh@arrow@tikz,
+ -mCtip,
+ \mCh@arrow@linethickness]
+ let \n1={\mCh@angle}, \n2={180+\mCh@angle}
+ in (@mCh@arrow@start.\n1) --node[pos=.5,inner sep=0](\mCh@arrow@name){}
+ ++($(\mCh@angle:\mCh@arrow@factor*\mCh@arrow@length)$);
+ \expandafter\node\expandafter[\mCh@arrow@uplabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@up,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,inner sep=0]
+ at ($(\mCh@arrow@name)!\mCh@arrow@label@dist!90:(@mCh@arrow@end)$){#2};
+ \expandafter\node\expandafter[\mCh@arrow@downlabel@visible,
+ rotate=\mCh@beta,
+ anchor=\mCh@arrow@label@anchor@down,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height,inner sep=0]
+ at ($(\mCh@arrow@name)!\mCh@arrow@label@dist!-90:(@mCh@arrow@end)$){#3};
+ }%
+ \mCh@ifempty@variable\arrow@plusminus{}{%
+ \ifstrempty{#2}{}{%
+ \draw (\mCh@arrow@name.base) edge[bend left]
+ ++(${0.6667}*(146.3+\mCh@angle:.5*\mCh@arrow@factor*\mCh@arrow@length)$);
+ \node[anchor=\mCh@arrow@label@anchor@add,
+ inner sep=\mCh@arrow@label@dist,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height]
+ at ($(\mCh@arrow@name.base)+{0.6667}*(146.3+\mCh@angle:.5*\mCh@arrow@factor*\mCh@arrow@length)$) {#2};
+ }%
+ \ifstrempty{#3}{}{%
+ \draw (\mCh@arrow@name.base) edge[bend right,-mCtip]
+ ++(${0.6667}*(33.7+\mCh@angle:.5*\mCh@arrow@factor*\mCh@arrow@length)$);
+ \node[anchor=\mCh@arrow@label@anchor@sub,
+ inner sep=\mCh@arrow@label@dist,
+ minimum width=\mCh@arrow@label@width,
+ minimum height=\mCh@arrow@label@height]
+ at ($(\mCh@arrow@name.base)+{0.6667}*(33.7+\mCh@angle:.5*\mCh@arrow@factor*\mCh@arrow@length)$) {#3};
+ }%
+ }%
+ \mCh@set@variable\arrow@factor{1}%
+}
+
+% eigene Pfeilspitze ------------------------------------------------------------------ %
+\pgfarrowsdeclare{mCtip}{mCtip}
+ {%
+ \arrowsize=0.2pt
+ \advance\arrowsize by .5\pgflinewidth
+ \pgfarrowsleftextend{-4\arrowsize-.5\pgflinewidth}%
+ \pgfarrowsrightextend{.5\pgflinewidth}%
+ }
+ {%
+ \pgfsetdash{}{0pt}% do not dash
+ \pgfsetroundjoin% fix join
+ \pgfsetroundcap% fix cap
+ \pgfpathmoveto{\pgfpointorigin}%
+ \pgfpathlineto{\pgfpoint{-3pt}{1pt}}%
+ \pgfpathlineto{\pgfpoint{-1.5pt}{0pt}}%
+ \pgfpathlineto{\pgfpoint{-3pt}{-1pt}}%
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}%
+ \pgfusepathqfillstroke
+ }
+
+\pgfarrowsdeclare{mChtip}{mChtip}
+ {%
+ \arrowsize=0.2pt
+ \advance\arrowsize by .5\pgflinewidth
+ \pgfarrowsleftextend{-4\arrowsize-.5\pgflinewidth}%
+ \pgfarrowsrightextend{.5\pgflinewidth}%
+ }
+ {%
+ \pgfsetdash{}{0pt}% do not dash
+ \pgfsetroundjoin% fix join
+ \pgfsetroundcap% fix cap
+ \pgfpathmoveto{\pgfpoint{0pt}{0pt}}%
+ \pgfpathlineto{\pgfpoint{-3pt}{1pt}}%
+ \pgfpathlineto{\pgfpoint{-1.5pt}{0pt}}%
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}%
+ \pgfusepathqfillstroke
+ }
+
+% --------------------------------------------------------------------------
+% MERGE
+% \merge[<label>,<pos>,<length>]{<target>}{<start a>}{<start b>}
+\mCh@new@variable\merge@length
+\mCh@new@variable\merge@length@default
+\mCh@new@variable\merge@length@value
+\mCh@new@variable\merge@arg
+\mCh@new@variable\merge@to
+\mCh@new@variable\merge@from@one
+\mCh@new@variable\merge@from@two
+
+\mCh@set@variable\merge@length@default{3em}
+\mCh@let@variable\merge@length@value\merge@length@default
+
+% Basisbefehle
+\mCh@def\mCh@merge@right{%
+ \draw[mCtip-,\mCh@arrow@linethickness]
+ ($(\mCh@merge@to.west)+(-\mCh@rxn@node@distance,0)$)
+ --node[midway,above,yshift=.1em]{\mCh@merge@arg}
+ ++(-\mCh@merge@length,0) node(crossing) {};
+ \draw[\mCh@arrow@linethickness]
+ ($(\mCh@merge@from@one.east)+(\mCh@rxn@node@distance,0)$) -| (crossing.base);
+ \draw[\mCh@arrow@linethickness]
+ ($(\mCh@merge@from@two.east)+(\mCh@rxn@node@distance,0)$) -| (crossing.base);
+}
+
+\mCh@def\mCh@merge@above{%
+ \draw[mCtip-,\mCh@arrow@linethickness]
+ ($(\mCh@merge@to.south)+(0,-\mCh@rxn@node@distance)$)
+ --node[midway,right,xshift=.1em]{\mCh@merge@arg}
+ ++(0,-\mCh@merge@length) node(crossing) {};
+ \draw[\mCh@arrow@linethickness]
+ (crossing.base) -| ($(\mCh@merge@from@one.north)+(0,\mCh@rxn@node@distance)$);
+ \draw[\mCh@arrow@linethickness]
+ (crossing.base) -| ($(\mCh@merge@from@two.north)+(0,\mCh@rxn@node@distance)$);
+}
+
+\mCh@def\mCh@merge@left{%
+ \draw[mCtip-,\mCh@arrow@linethickness]
+ ($(\mCh@merge@to.east)+(\mCh@rxn@node@distance,0)$)
+ --node[midway,above,yshift=.1em]{\mCh@merge@arg}
+ ++(\mCh@merge@length,0) node(crossing) {};
+ \draw[\mCh@arrow@linethickness]
+ ($(\mCh@merge@from@one.west)+(-\mCh@rxn@node@distance,0)$) -| (crossing.base);
+ \draw[\mCh@arrow@linethickness]
+ ($(\mCh@merge@from@two.west)+(-\mCh@rxn@node@distance,0)$) -| (crossing.base);
+}
+
+\mCh@def\mCh@merge@below{%
+ \draw[mCtip-,\mCh@arrow@linethickness]
+ ($(\mCh@merge@to.north)+(0,\mCh@rxn@node@distance)$)
+ --node[midway,right,xshift=.1em]{\mCh@merge@arg}
+ ++(0,\mCh@merge@length) node(crossing) {};
+ \draw[\mCh@arrow@linethickness]
+ (crossing.base) -| ($(\mCh@merge@from@one.south)+(0,-\mCh@rxn@node@distance)$);
+ \draw[\mCh@arrow@linethickness]
+ (crossing.base) -| ($(\mCh@merge@from@two.south)+(0,-\mCh@rxn@node@distance)$);
+}
+
+% eigentlicher Befehl ----------------------------------------------------------------- %
+\newrobustcmd\mCh@merge[4][]{%
+ \ifblank{#1}
+ {\mCh@merge@i}{\mCh@merge@ii[#1]}
+ {#2}{#3}{#4}}
+
+\mCh@def\mCh@merge@i#1#2#3{%
+ \mCh@let@variable\merge@length\merge@length@value
+ \mCh@empty@variable\merge@arg
+ \mCh@set@variable\merge@to{#1}%
+ \mCh@set@variable\merge@from@one{#2}%
+ \mCh@set@variable\merge@from@two{#3}%
+ \mCh@merge@below
+}
+
+\mCh@def\mCh@merge@ii[#1]#2#3#4{%
+ \let\mCh@remainargs\@empty
+ \mCh@splitarg{#1}%
+ \mCh@ifempty@variable\firstarg
+ {\mCh@empty@variable\merge@arg}
+ {\mCh@let@variable\merge@arg\firstarg}%
+ \mCh@ifempty@variable\thirdarg
+ {\mCh@let@variable\merge@length\merge@length@value}
+ {\mCh@set@variable\merge@length{\mCh@thirdarg}}%
+ \mCh@set@variable\merge@to{#2}%
+ \mCh@set@variable\merge@from@one{#3}%
+ \mCh@set@variable\merge@from@two{#4}%
+ \mCh@ifempty@variable\secondarg
+ {\mCh@merge@below}
+ {\csuse{mCh@merge@\mCh@secondarg}}%
+}
+
+\newrobustcmd\setmergelength[1]{%
+ \ifblank{#1}
+ {\mCh@let@variable\merge@length@value\merge@length@default}
+ {\mCh@set@variable\merge@length@value{#1}}}
+
+% --------------------------------------------------------------------------
+% REAKTIONSSCHEMA
+\newlength\mCh@rxn@node@distance@default
+\newlength\mCh@rxn@node@distance
+
+\deflength\mCh@rxn@node@distance@default{1em}
+\deflength\mCh@rxn@node@distance{\mCh@rxn@node@distance@default}
+
+\newrobustcmd\setrcndist[1]{%
+ \ifblank{#1}
+ {\deflength\mCh@rxn@node@distance{\mCh@rxn@node@distance@default}}
+ {\deflength\mCh@rxn@node@distance{#1}}}
+
+% Schema
+% \begin{rxnscheme}[<label>,<placement>,<align>,<scale factor>,<name>]{<caption>}
+\mCh@new@variable\rs@scale
+\mCh@new@variable\rs@currentscale
+
+\mCh@set@variable\rs@scale{1.0}
+\mCh@set@variable\rs@currentscale{\mCh@rs@scale}
+
+\newrobustcmd\setschemename[1]{%
+ \mCh@set@variable\rs@name{#1}}
+
+\mCh@new@variable\rs@caption
+\mCh@new@variable\rs@label
+\mCh@new@variable\rs@currentlabel
+\mCh@new@variable\rs@align
+\mCh@new@variable\rs@right
+\mCh@new@variable\rs@center
+\mCh@new@variable\rs@left
+
+\mCh@let@variable\rs@currentlabel\rs@label
+\mCh@set@variable\rs@align{center}
+\mCh@set@variable\rs@right{right}
+\mCh@set@variable\rs@center{center}
+\mCh@set@variable\rs@left{left}
+
+\newrobustcmd\setschemealign[1]{%
+ \ifblank{#1}
+ {\mCh@set@variable\rs@align{center}}
+ {\mCh@set@variable\rs@align{#1}}}
+
+% Gleitumgebung
+\floatstyle{ruled}
+\newfloat{rxnfloat}{\mCh@rs@currentplacement}{rxnscheme}
+\floatname{rxnfloat}{\mCh@rs@name}% Name ändern
+
+% eigentliche Umgebung:
+\newrobustcmd\mCh@rxnscheme[2][]{%
+ \ifblank{#1}
+ {\mCh@rxnscheme@i}
+ {\mCh@empty@variable\rs@currentlabel\mCh@rxnscheme@ii[#1]}%
+ {#2}}
+
+\mCh@def\mCh@rxnscheme@ii[#1]#2{% [<label>,<placement>,<align>,<scale>,<name>]
+ \let\mCh@remainargs\@empty
+ \mCh@splitarg{#1}%
+ \mCh@ifempty@variable\firstarg% erste Option
+ {\mCh@empty@variable\rs@currentlabel}
+ {\mCh@let@variable\rs@currentlabel\firstarg}%
+ \mCh@ifempty@variable\secondarg% zweite Option
+ {\mCh@let@variable\rs@currentplacement\rs@placement}
+ {\mCh@let@variable\rs@currentplacement\secondarg}%
+ \let\mCh@remainargs\@empty
+ \expandafter\mCh@splitarg\expandafter{\mCh@thirdarg}%
+ \mCh@ifempty@variable\firstarg% dritte Option
+ {\mCh@set@variable\rs@align{center}}
+ {\mCh@let@variable\rs@align\firstarg}%
+ \mCh@ifempty@variable\secondarg% vierte Option
+ {\mCh@set@variable\rs@currentscale{1}}
+ {\mCh@let@variable\rs@currentscale\secondarg}%
+ \mCh@ifempty@variable\thirdarg{}% fünfte Option
+ {\mCh@let@variable\rs@name\thirdarg}%
+ \mCh@rxnscheme@i{#2}%
+}
+
+\mCh@def\mCh@scheme@enable{%
+ \let\arrow\mCh@arrow
+ \let\reactant\mCh@reactant
+ \let\mesomeric\mCh@mesomeric
+ \let\transition\mCh@transition
+ \let\anywhere\mCh@anywhere
+ \let\dummy\mCh@dummy
+ \let\branch\mCh@branch
+ \let\chemand\mCh@chemand
+ \let\merge\mCh@merge
+% \let\elmove\mCh@elmove
+}
+
+\mCh@def\mCh@scheme@disable{%
+ \let\arrow\relax
+ \let\reactant\relax
+ \let\mesomeric\relax
+ \let\transition\relax
+ \let\anywhere\relax
+ \let\dummy\relax
+ \let\branch\relax
+ \let\chemand\relax
+ \let\merge\relax
+% \let\elmove\relax
+}
+
+\mCh@def\mCh@rxnscheme@i#1{%
+ \mCh@scheme@enable
+ \mCh@set@variable\rs@caption{#1}%
+ \rxnfloat
+ \mCh@ifeq@variable\rs@align\rs@center{\centering}{}%
+ \mCh@ifeq@variable\rs@align\rs@left{\raggedright}{}%
+ \mCh@ifeq@variable\rs@align\rs@right{\raggedleft}{}%
+ \mCh@atomsize\mCh@bondlength\mCh@bondshape
+ \tikzpicture[
+ every picture/.style={scale=\mCh@rs@currentscale},
+ start chain,
+ node distance=\mCh@rxn@node@distance,
+ inner sep=0pt,
+ outer sep=0pt]
+ \mCh@dummy
+}
+
+\newenvironment{rxnscheme}{\mCh@rxnscheme}{%
+ \endtikzpicture
+ \caption{\mCh@rs@caption}%
+ \mCh@ifempty@variable\rs@currentlabel{}
+ {\label{\mCh@rs@currentlabel}}%
+ \endrxnfloat
+ \mCh@scheme@disable
+}
+
+% ----------------------------------------------------------------------------
+% einfache Reaktion
+% \begin{rxn}[<align>,<scalefactor>]
+\mCh@new@variable\reaction@scale
+\mCh@new@variable\reaction@align
+
+\mCh@set@variable\reaction@scale{1.0}
+\mCh@set@variable\reaction@align{center}
+
+\newrobustcmd\setrxnalign[1]{%
+ \ifblank{#1}
+ {\mCh@set@variable\reaction@align{center}}
+ {\mCh@set@variable\reaction@align{#1}}}
+
+\mCh@new@variable\reaction@right
+\mCh@new@variable\reaction@center
+\mCh@new@variable\reaction@left
+
+\mCh@set@variable\reaction@right{right}
+\mCh@set@variable\reaction@center{center}
+\mCh@set@variable\reaction@left{left}
+
+\newrobustcmd\mCh@rxn[1][]{%
+ \ifblank{#1}
+ {\mCh@rxn@i}{\mCh@rxn@ii[#1]}}
+
+\mCh@def\mCh@rxn@ii[#1]{%
+ \let\mCh@remainargs\@empty
+ \mCh@splitarg{#1}%
+ \mCh@ifempty@variable\firstarg
+ {\mCh@let@variable\reaction@align\reaction@center}
+ {\mCh@let@variable\reaction@align\firstarg}%
+ \mCh@ifempty@variable\secondarg
+ {\mCh@set@variable\reaction@scale{1}}
+ {\mCh@let@variable\reaction@scale\secondarg}%
+ \mCh@rxn@i
+}
+
+\mCh@def\mCh@rxn@i{%
+ \mCh@scheme@enable
+ \hspace*{0pt}%
+ \mCh@ifeq@variable\reaction@align\reaction@center{\center}{}%
+ \mCh@ifeq@variable\reaction@align\reaction@left{\flushleft}{}%
+ \mCh@ifeq@variable\reaction@align\reaction@right{\flushright}{}%
+ \mCh@bondlength\mCh@bondshape\mCh@atomsize
+ \begin{tikzpicture}[
+ every picture/.style={scale=\mCh@reaction@scale},
+ start chain,
+ node distance=\mCh@rxn@node@distance,
+ inner sep=0pt,
+ outer sep=0pt]
+ \mCh@dummy
+}
+
+\newenvironment{rxn}{\mCh@rxn}{%
+ \end{tikzpicture}%
+ \mCh@ifeq@variable\reaction@align\reaction@center{\endcenter}{}%
+ \mCh@ifeq@variable\reaction@align\reaction@left{\endflushleft}{}%
+ \mCh@ifeq@variable\reaction@align\reaction@right{\endflushright}{}%
+ \mCh@scheme@disable
+}
+
+% --------------------------------------------------------------------------
+% REAKTANDEN
+% Standardreaktand
+% \reactant[<pos>,<name>,<tikz>]{<something>}
+\def\mCh@argument@safe{\@makeother\#}
+
+\newrobustcmd\mCh@reactant[1][]{%
+ \begingroup
+ \mCh@argument@safe
+ \ifblank{#1}
+ {\mCh@reactant@i}
+ {\mCh@reactant@ii[#1]}%
+}
+
+\mCh@def\mCh@reactant@i#1{%
+ \expandafter\node\expandafter[%
+ \mCh@reactant@visible,
+ on chain=going {at=(\tikzchainprevious.0)},
+ anchor=180,
+ shift=(0:\mCh@rxn@node@distance)]{#1};
+ \endgroup
+}
+
+\mCh@def\mCh@reactant@ii[#1]#2{%
+ \let\mCh@remainargs\@empty\mCh@splitarg{#1}%
+ \mCh@ifempty@variable\firstarg{% erste Option: <pos>, zweite Option: <name>, dritte Option: <tikz>
+ \mCh@set@variable\angle{0}%
+ \mCh@set@variable\anchor{180}%
+ \mCh@empty@variable\referred@node
+ }{%
+ \expandafter\mCh@analyze@angle\expandafter{\mCh@firstarg}%
+ \mCh@set@variable\anchor{180+\mCh@angle}%
+ }%
+ \mCh@ifempty@variable\referred@node
+ {\mCh@set@variable\referred@node{\tikzchainprevious}}{}%
+ \expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[%
+ \expandafter\mCh@thirdarg\expandafter,%
+ \mCh@reactant@visible,
+ on chain=going {at=(\mCh@referred@node.\mCh@angle)},
+ anchor=\mCh@anchor,shift=(\mCh@angle:\mCh@rxn@node@distance)]
+ (\mCh@secondarg){#2};
+ \endgroup
+}
+
+% Mesomerie
+% \mesomeric[<pos>,<name>,<tikz>]{<something>}
+\newrobustcmd\mCh@mesomeric[1][]{%
+ \begingroup
+ \mCh@argument@safe
+ \ifblank{#1}
+ {\mCh@mesomeric@i}
+ {\mCh@mesomeric@ii[#1]}%
+}
+
+\mCh@def\mCh@mesomeric@i#1{%
+ \node[on chain=going {at=(\tikzchainprevious.0),
+ shift=($(0:\mCh@rxn@node@distance)$)},
+ anchor=180,shift=(0:\mCh@rxn@node@distance),
+ inner sep=1pt,
+ left delimiter={[},
+ right delimiter={]}]
+ {\tikzpicture[start branch]#1\endtikzpicture};
+ \endgroup
+}
+
+\mCh@def\mCh@mesomeric@ii[#1]#2{%
+ \let\mCh@remainargs\@empty
+ \mCh@splitarg{#1}%
+ \mCh@ifempty@variable\firstarg{% erste Option: <pos>, zweite Option: <name>, dritte Option: <tikz>
+ \mCh@set@variable\angle{0}%
+ \mCh@set@variable\anchor{180}%
+ \mCh@empty@variable\referred@node
+ }{%
+ \expandafter\mCh@analyze@angle\expandafter{\mCh@firstarg}%
+ \mCh@set@variable\anchor{180+\mCh@angle}%
+ }%
+ \mCh@ifempty@variable\referred@node
+ {\mCh@set@variable\referred@node{\tikzchainprevious}}{}%
+ \expandafter\node\expandafter[\mCh@thirdarg,
+ on chain=going {at=(\mCh@referred@node.\mCh@angle)},
+ anchor=\mCh@anchor,
+ shift=(\mCh@angle:\mCh@rxn@node@distance),
+ inner sep=1pt,
+ left delimiter={[},
+ right delimiter={]}]
+ (\mCh@secondarg){\tikzpicture[start branch]#2\endtikzpicture};
+ \endgroup
+}
+
+% Mesomerie-Pfeil
+% \marrow[<pos>]
+\newrobustcmd\marrow[1][]{\arrow[#1,<->,.5]{}{}}
+
+% Anywhere
+% \anywhere{<pos>,<name>,<tikz>}{<something>}
+\mCh@new@variable\anywhere@positioning
+
+\newrobustcmd\mCh@anywhere[1]{%
+ \begingroup
+ \mCh@argument@safe
+ \let\mCh@remainargs\@empty
+ \mCh@splitarg{#1}% erste Option: <pos>, zweite Option: <name>, dritte Option: <tikz>
+ \mCh@ifempty@variable\firstarg{%
+ \mCh@error{\string\anywhere: positioning missing}{}%
+ }{%
+ \expandafter\mCh@if@instr\expandafter{\mCh@firstarg}{=}{%
+ \mCh@xset@variable\anywhere@positioning{\mCh@firstarg}%
+ }{%
+ \expandafter\mCh@analyze@angle\expandafter{\mCh@firstarg}%
+ \mCh@set@variable\anchor{180+\mCh@angle}%
+ \mCh@ifempty@variable\referred@node{%
+ \mCh@error{You can't use `angle' to position \string\anywhere.
+ You need to use `name.angle'}%
+ }{%
+ \mCh@set@variable\anywhere@positioning{%
+ at=(\mCh@referred@node.\mCh@angle),anchor=\mCh@anchor}%
+ }%
+ }%
+ }%
+ \mCh@anywhere@i
+}
+
+\mCh@def\mCh@anywhere@i#1{%
+ \expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[%
+ \expandafter\mCh@thirdarg\expandafter,%
+ \mCh@anywhere@positioning](\mCh@secondarg){#1};
+ \endgroup
+}
+
+% Dummy
+% \dummy[<name>]
+\newrobustcmd\mCh@dummy[1][]{%
+ \ifblank{#1}
+ {\draw node[on chain,xshift=-\mCh@rxn@node@distance]{};}
+ {\draw node[on chain,xshift=-\mCh@rxn@node@distance](#1){};}}
+
+% Uebergangszustand
+% \transition[<pos>,<name>,<tikz>]{<something>}
+\mCh@new@variable\transition@name
+
+\newrobustcmd\mCh@transition[1][]{%
+ \begingroup
+ \mCh@argument@safe
+ \ifblank{#1}
+ {\mCh@transition@i}
+ {\mCh@transition@ii[#1]}%
+}
+
+\mCh@def\mCh@transition@i#1{%
+ \expandafter\node\expandafter[\mCh@reactant@visible,
+ on chain=going {at=(\tikzchainprevious.0)},
+ anchor=180,
+ shift=(0:\mCh@rxn@node@distance),
+ anchor=180,
+ inner sep=3pt,
+ left delimiter={[},
+ right delimiter={]}]
+ (mCh@transition@name){#1};
+ \node at ($(mCh@transition@name.north east)+(.7em,0)$)
+ {$\transitionstatesymbol$};
+ \endgroup
+}
+
+\mCh@def\mCh@transition@ii[#1]#2{%
+ \let\mCh@remainargs\@empty
+ \mCh@splitarg{#1}%
+ \mCh@ifempty@variable\firstarg{% erste Option: <pos>
+ \mCh@set@variable\angle{0}%
+ \mCh@set@variable\anchor{180}%
+ \mCh@empty@variable\referred@node
+ }{%
+ \expandafter\mCh@analyze@angle\expandafter{\mCh@firstarg}%
+ \mCh@set@variable\anchor{180+\mCh@angle}%
+ }%
+ \mCh@ifempty@variable\secondarg% zweite Option: <name>, dritte Option: <tikz>
+ {\mCh@set@variable\transition@name{mCh@transition@name}}
+ {\mCh@let@variable\transition@name\secondarg}%
+ \mCh@ifempty@variable\referred@node
+ {\mCh@set@variable\referred@node{\tikzchainprevious}}{}%
+ \expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[%
+ \mCh@reactant@visible\expandafter,%
+ \mCh@thirdarg,
+ on chain=going {at=(\mCh@referred@node.\mCh@angle)},
+ anchor=\mCh@anchor,
+ shift=(\mCh@angle:\mCh@rxn@node@distance),
+ inner sep=3pt,
+ left delimiter={[},
+ right delimiter={]}]
+ (\mCh@transition@name){#2};
+ \node at ($(\mCh@transition@name.north east)+(.7em,0)$)
+ {$\transitionstatesymbol$};
+ \endgroup
+}
+
+% Abzweigung
+% \branch[<pos>,<name>,<tikz>]{<formulae>}
+% <pos>: default: on chain=going "right" (0°)
+% on chain=going <somewhere>
+% <somewhere>=of <name>
+% <angle> (sitzt auf der Kette)
+% <name>.<angle> (sitzt nicht auf der Kette)
+\mCh@new@variable\branch@positioning
+
+\newrobustcmd\mCh@branch[1][]{%
+ \begingroup
+ \mCh@argument@safe
+ \ifblank{#1}
+ {\mCh@branch@i}
+ {\mCh@branch@ii[#1]}%
+}
+
+\mCh@def\mCh@branch@i{%
+ \expandafter\mCh@set@variable\expandafter\branch@positioning\expandafter{\mCh@branch@visible,
+ on chain=going {at=(\tikzchainprevious.0)},
+ anchor=180,
+ shift=(0:\mCh@rxn@node@distance)}%
+ \mCh@empty@variable\secondarg
+ \mCh@empty@variable\thirdarg
+ \mCh@branch@iii}
+
+\mCh@def\mCh@branch@ii[#1]{%
+ \let\mCh@remainargs\@empty
+ \mCh@splitarg{#1}% erste Option: <pos>, zweite Option: <name>, dritte Option: <tikz>
+ \mCh@ifempty@variable\firstarg{%
+ \expandafter\mCh@set@variable\expandafter\branch@positioning\expandafter{\mCh@branch@visible,
+ on chain=going {at=(\tikzchainprevious.0)},
+ anchor=180,
+ shift=(0:\mCh@rxn@node@distance)}%
+ }{%
+ \expandafter\mCh@if@instr\expandafter{\mCh@firstarg}{=}{%
+ \mCh@xset@variable\branch@positioning{\mCh@branch@visible,\mCh@firstarg}%
+ }{%
+ \expandafter\mCh@analyze@angle\expandafter{\mCh@firstarg}%
+ \mCh@set@variable\anchor{180+\mCh@angle}%
+ \mCh@ifempty@variable\referred@node{%
+ \expandafter\mCh@set@variable\expandafter\branch@positioning\expandafter{\mCh@branch@visible,
+ on chain=going {at=(\tikzchainprevious.\mCh@angle)},
+ anchor=\mCh@anchor,
+ shift=(\mCh@angle:\mCh@rxn@node@distance)}%
+ }{%
+ \expandafter\mCh@set@variable\expandafter\branch@positioning\expandafter{\mCh@branch@visible,
+ at=(\mCh@referred@node.\mCh@angle),
+ anchor=\mCh@anchor,
+ shift=(\mCh@angle:\mCh@rxn@node@distance)}%
+ }%
+ }%
+ }%
+ \mCh@branch@iii}
+
+\mCh@def\mCh@branch@iii#1{%
+ \expandafter\expandafter\expandafter\node\expandafter\expandafter\expandafter[%
+ \expandafter\mCh@branch@positioning\expandafter,%
+ \mCh@thirdarg]
+ (\mCh@secondarg){\tikzpicture[start branch]#1\endtikzpicture};
+ \endgroup
+}%
+
+
+% --------------------------------------------------------------------------
+% Sonstiges
+% Elektronenverschiebungspfeile
+\mCh@new@variable\elmove@default@tikz
+\mCh@new@variable\elmove@tikz
+
+\tikzset{mCh@elmove/.style={->,red,shorten <=3pt,shorten >=1pt}}
+\mCh@set@variable\elmove@default@tikz{mCh@elmove}
+\mCh@let@variable\elmove@tikz\elmove@default@tikz
+
+\newrobustcmd\elmove[5][]{%
+ \chemmove{
+ \expandafter\draw\expandafter[\mCh@elmove@tikz,#1]
+ (#2).. controls +(#3) and +(#5)..(#4);
+ }}
+
+\newrobustcmd\setelmove[1]{%
+ \ifblank{#1}
+ {\mCh@let@variable\elmove@tikz\elmove@default@tikz}
+ {\mCh@set@variable\elmove@tikz{#1}}}
+
+% Plus
+\newrobustcmd\mCh@chemand[1][]{%
+ \ifblank{#1}
+ {\reactant{\chemsign[0pt]{+}}}
+ {\reactant[#1]{\chemsign[0pt]{+}}}}
+
+% --------------------------------------------------------------------------
+% Setup myChemistry
+% Bindungslänge
+\mCh@new@variable\bondlength@default
+\mCh@new@variable\bondlength
+
+\mCh@set@variable\bondlength@default{1.8em}
+\mCh@set@variable\bondlength{\setatomsep{\mCh@bondlength@default}}
+
+\newrobustcmd\setbondlength[1]{%
+ \ifblank{#1}
+ {\mCh@set@variable\bondlength{\setatomsep{\mCh@bondlength@default}}}
+ {\mCh@set@variable\bondlength{\setatomsep{#1}}}}
+
+% Keilbindungen
+\mCh@new@variable\bondshape@one
+\mCh@new@variable\bondshape@two
+\mCh@new@variable\bondshape@three
+
+\mCh@set@variable\bondshape@one{3pt}
+\mCh@set@variable\bondshape@two{.5pt}
+\mCh@set@variable\bondshape@three{1pt}
+
+\newrobustcmd\setbondshape[3]{%
+ \ifblank{#1}
+ {\mCh@set@variable\bondshape@one{3pt}}
+ {\mCh@set@variable\bondshape@one{#1}}%
+ \ifblank{#2}
+ {\mCh@set@variable\bondshape@two{.5pt}}
+ {\mCh@set@variable\bondshape@two{#2}}%
+ \ifblank{#3}
+ {\mCh@set@variable\bondshape@three{1pt}}
+ {\mCh@set@variable\bondshape@three{#3}}%
+}
+
+\mCh@new@variable\bondshape
+\mCh@set@variable\bondshape{%
+ \setcrambond{\mCh@bondshape@one}{\mCh@bondshape@two}{\mCh@bondshape@three}}
+
+% Atomgröße
+\mCh@new@variable\atomsize@default
+\mCh@new@variable\atomsize
+
+\mCh@set@variable\atomsize@default{\small}
+\mCh@let@variable\atomsize\atomsize@default
+
+\newrobustcmd\setatomsize[1]{%
+ \ifblank{#1}
+ {\mCh@let@variable\atomsize\atomsize@default}
+ {\mCh@set@variable\atomsize{#1}}}
+
+% allg. Setup
+\newrobustcmd\mCsetup[1]{\setkeys{mCh@setup}{#1}}
+
+\define@key{mCh@setup}{arrowlabel}[\mCh@arrow@label@dist@def]{%
+ \setarrowlabel{#1}}
+\define@key{mCh@setup}{arrowlength}[\mCh@arrow@length@def]{%
+ \setarrowlength{#1}}
+\define@key{mCh@setup}{arrowline}[\mCh@arrow@linethickness@default]{%
+ \setarrowline{#1}}
+\define@key{mCh@setup}{atomsize}[\mCh@atomsize@default]{%
+ \setatomsize{#1}}
+\define@key{mCh@setup}{bondlength}[\mCh@bondlength@default]{%
+ \setbondlength{#1}}
+\define@key{mCh@setup}{rcndist}[\mCh@rxn@node@distance@default]{%
+ \setrcndist{#1}}
+\define@key{mCh@setup}{rxnalign}[center]{%
+ \setrxnalign{#1}}
+\define@key{mCh@setup}{schemealign}[center]{%
+ \setschemealign{#1}}
+\define@key{mCh@setup}{align}[center]{%
+ \setrxnalign{#1}
+ \setschemealign{#1}}
+\define@key{mCh@setup}{mergelength}[\mCh@merge@length@default]{%
+ \setmergelength{#1}}
+\define@key{mCh@setup}{elmove}[\mCh@elmove@default@tikz]{%
+ \setelmove{#1}}
+\define@key{mCh@setup}{reset}[]{%
+ \setarrowlabel{}%
+ \setarrowlength{}%
+ \setarrowline{}%
+ \setmergelength{}%
+ \setatomsize{}%
+ \setbondlength{}%
+ \setbondshape{}{}{}%
+ \setrcndist{}%
+ \setrxnalign{}%
+ \setschemealign{}%
+ \setelmove{}%
+}
+
+% --------------------------------------------------------------------------
+% NODES SICHTBAR/UNSICHTBAR MACHEN
+\mCh@new@variable\reactant@visible
+\mCh@new@variable\arrow@uplabel@visible
+\mCh@new@variable\arrow@downlabel@visible
+\mCh@new@variable\branch@visible
+
+\mCh@empty@variable\reactant@visible
+\mCh@empty@variable\arrow@uplabel@visible
+\mCh@empty@variable\arrow@downlabel@visible
+\mCh@empty@variable\branch@visible
+
+\newrobustcmd\makevisible{%
+ \ifmCh@draft
+ \mCh@set@variable\reactant@visible{draw=red!60,solid}%
+ \mCh@set@variable\arrow@uplabel@visible{draw=green!60,solid}%
+ \mCh@set@variable\arrow@downlabel@visible{draw=blue!60,solid}%
+ \mCh@set@variable\branch@visible{draw=cyan,solid}%
+ \fi
+}
+
+\newrobustcmd\makeinvisible{%
+ \mCh@empty@variable\reactant@visible
+ \mCh@empty@variable\arrow@uplabel@visible
+ \mCh@empty@variable\arrow@downlabel@visible
+ \mCh@empty@variable\branch@visible
+}
+
+\endinput
+
+% ----------------------------------------------------------------------------
+HISTORY:
+2011/02/24 version 1.0 - first release to CTAN
+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 - rewritten commands, so they accept second argument
+ without first:
+ \reactand, \mesomeric, \transition, \branch,
+ \makevisible, \makeinvisible
+2011/03/28 version 1.2.2 - bugfix with transition
+ - 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
+2011/04/15 version 1.4 - minor bugfixes
+ - \merge-command rewritten: it now accepts an arrow
+ label and the length is adjustable
+ - \dummy mostly obsolete
+ - bugfix with aligning rxn & rxnscheme
+ - synonym to \reactand=\reactant added
+ - rxn & rxnscheme rewritten
+ - commands \reactant, \mesomeric, \branch & \transition
+ modified: argument is set with \mCh@argument@safe{#1},
+ so the chemfig catcode regime is working properly
+ before () (else possible problem with triple bond ~)
+ - syntax of \arrow changed so it fits to the syntax of
+ all the other commands
+ - command \anywhere added
+ - own arrow tips defined
+ - command \setarrowline added
+ - new arrow type -+> added
+2011/04/23 version 1.5 - major parts of the code rewritten -- the whole
+ positioning part now is different and way more flexible:
+ arbitrary angles can be used for positioning, referencing
+ an object is easier, arrows can be modified using <tikz>,
+ command \anywhere now has similar syntax
+ - arrow types <=>> and <<=> added
+ - arrow type -+> modified: more flexible
+ - bugfixes in error-handling
+2011/04/27 version 1.5.1 - removed bondwidth.tex
+ - \arrow, \reactant, \mesomeric, \transition, \anywhere,
+ \dummy, \branch, and \chemand only defined inside scheme
+ environments
+2012/07/27 version 1.99 - conflict with `pdfpages' resolved, LaTeXified various
+ parts in order to minimize conflicts with other
+ packages; \merge is also only defined inside the scheme
+ environments
+2012/09/20 version 1.99a - small adjustments to \elmove
+2012/12/19 version 1.99b - changed catcode regime (# is read with catcode 12)
+ so that chemfig's bond offset works
+
+% ---------------------------------------------------------------------------- \ No newline at end of file