%%
%% This is file `autonum.ins',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% autonum.dtx  (with options: `install')
%% ----------------------------------------------------------------
%% autonum --- Automatic number referenced equations
%% E-mail: pat_h@web.de
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ----------------------------------------------------------------
%% 
\input docstrip.tex
\keepsilent
\askforoverwritefalse
\preamble
----------------------------------------------------------------
autonum --- Automatic number referenced equations
E-mail: pat_h@web.de
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
----------------------------------------------------------------

\endpreamble
\postamble

Copyright (C) 2012 by Patrick Häcker <pat_h@web.de>

This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
version 1.3c of this license or (at your option) any later
version.  The latest version of this license is in the file:

http://www.latex-project.org/lppl.txt

This work is "maintained" (as per LPPL maintenance status) by
Patrick Häcker.

This work consists of the file  autonum.dtx
and the derived files           autonum.ins,
                                autonum.pdf and
                                autonum.sty.

\endpostamble
\usedir{tex/latex/autonum}
\generate{
  \file{autonum.sty}{\from{autonum.dtx}{package}}
}
\endbatchfile

\def\csxdefaux#1#2{%
\protected@write\@mainaux{}{%
\csxdef{\detokenize{#1}}{#2}%
}%
}

\def\csxdefall#1#2{%
\csxdefaux{#1}{#2}%
\csxdef{#1}{#2}%
}

\def\ifcsedef#1#2#3{%
\edef\autonum@ifcsedefTemp{#1}%
\expandafter\ifcsdef\expandafter{\autonum@ifcsedefTemp}{#2}{#3}%
\undef{\autonum@ifcsedefTemp}%
}

\AtBeginDocument{%
\forcsvlist{\autonum@patchParametrizedFullEnvironment}{alignat}%
\forcsvlist{\autonum@patchFullEnvironment}{equation,gather,multline,flalign,align}%
\def\[#1\]{%
\begin{equation}#1\end{equation}%
}%
\autonum@generatePatchedReference{ref}%
\ifdef{\cref}{%
\autonum@generatePatchedReferenceCSL{cref}%
}{}%
}

\def\autonum@patchFullEnvironment#1{%
\autonum@saveEnvironmentSubcommands{#1}{center}{}%
\autonum@patchEnvironmentHelper{#1}{0}%
}
\def\autonum@patchParametrizedFullEnvironment#1{%
\autonum@saveEnvironmentSubcommands{#1}{center}{1}%
\autonum@patchEnvironmentHelper{#1}{1}%
}
\def\autonum@patchBlockEnvironment#1{%
\autonum@saveEnvironmentSubcommands{#1}{equation*}{}%
\autonum@patchEnvironmentHelper{#1}{0}%
}
\def\autonum@patchEnvironmentHelper#1#2{%
\autonum@renameEnvironment{#1}{#2}%
\autonum@changeEnvironment{#1}{#2}%
\autonum@generatePatchedLabel{#1}%
\autonum@generatePatchedNewline{#1}%
}

\def\autonum@saveEnvironmentSubcommands#1#2#3{%
\begin{textblock}{1}[1,1](0,0)%
\begin{#2}%
\begin{#1}#3%
\global\cslet{autonum@newline#1}\\%
\notag%
\ifboolexpr{not test {\ifstrequal{#1}{multline}} or test {\ifcsundef{autonum@label#1}}}{%
\global\cslet{autonum@label#1}{\label}%
}%
\notag%
\end{#1}%
\end{#2}%
\end{textblock}%
}

\def\autonum@renameEnvironment#1#2{%
\csletcs{autonum@#1Old}{#1}%
\csletcs{autonum@end#1Old}{end#1}%
\newenvironment{#1+}[#2]{%
\csuse{autonum@#1Old}%
}{%
\csuse{autonum@end#1Old}%
}%
}

\def\autonum@changeEnvironment#1#2{%
\ifnum #2=0%
\renewenvironment{#1}{%
\autonum@startChangeEnvironment{#1}{}%
}{%
\autonum@endChangeEnvironment{#1}%
}
\else
\renewenvironment{#1}[1]{%
\autonum@startChangeEnvironment{#1}{##1}%
}{%
\autonum@endChangeEnvironment{#1}%
}%
\fi%
\global\csundef{#1*}%
\global\csundef{end#1*}%
}

\def\autonum@startChangeEnvironment#1#2{%
\autonum@saveSubcommands
\csuse{autonum@#1Old}#2%
\autonum@patchSubcommands{#1}%
}

\def\autonum@endChangeEnvironment#1{%
\autonum@possiblyHideNumber
\csuse{autonum@end#1Old}%
\autonum@restoreSubcommands
}

\def\autonum@saveSubcommands{%
\let\autonum@labelNormal\label%
\let\autonum@newlineNormal\\%
}

\def\autonum@patchSubcommands#1{%
\global\letcs{\label}{autonum@patched#1Label}%
\ifstrequal{#1}{multline}{%
}{%
  \global\letcs{\\}{autonum@patched#1Newline}%
}%
}

\def\autonum@restoreSubcommands{%
\global\let\label\autonum@labelNormal%
\global\let\\\autonum@newlineNormal%
}

\def\autonum@generatePatchedLabel#1{%
\csdef{autonum@patched#1Label}##1{%
\ifdef{\autonum@currentLabel}{%
\PackageError{autonum}{Two succeeding \string\label's detected}{Did you forget a \string\\?}%
}{%
\def\autonum@currentLabel{##1}%
}%
\ifcsedef{autonum@##1Referenced}{%
\let\df@label\@empty%
\csuse{autonum@label#1}{##1}%
}{}
}%
}

\def\autonum@generatePatchedNewline#1{%
\csdef{autonum@patched#1Newline}{%
\autonum@possiblyHideNumber
\csuse{autonum@newline#1}%
}
}

\def\autonum@possiblyHideNumber{
\ifdef{\autonum@currentLabel}{%
\ifcsedef{autonum@\csuse{autonum@currentLabel}Referenced}{%
}{%
\notag%
}
}{%
\notag%
}%
}

\def\autonum@generatePatchedReference#1{%
\autonum@generatePatchedReferenceGeneral{#1}{autonum@use}%
}

\def\autonum@generatePatchedReferenceCSL#1{%
\autonum@generatePatchedReferenceGeneral{#1}{forcsvlist}%
}

\def\autonum@generatePatchedReferenceGeneral#1#2{%
\csletcs{autonum@reference#1Old}{#1}%
\csdef{#1}##1{%
\csuse{#2}{\autonum@markLabelAsReferenced}{##1}
\csuse{autonum@reference#1Old}{##1}%
}%
}

\def\autonum@markLabelAsReferenced#1{%
\csxdefall{autonum@#1Referenced}{}%
}

\def\autonum@use#1#2{%
#1{#2}%
}

\newcounter{autonum@counter}
\def\autonum@patchShortcutEnvironment{%
\def\[##1\]{%
\ifcsedef{autonum@\Roman{autonum@counter}HasExactlyOneLine}{%
\autonum@useWithMultipleLineDetection{equation}{##1}%
}{%
\autonum@useWithMultipleLineDetection{align}{##1}%
}%
\stepcounter{autonum@counter}%
}%
}

\def\autonum@useWithMultipleLineDetection#1#2{%
\begin{#1}%
\autonum@patchParentheses
\global\let\autonum@patchedNewline\\%
\ifstrequal{#1}{align}{%
\gdef\\{%
\autonum@patchedNewline
\gdef\autonum@multipleLines{}%
}%
}{%
\gdef\\{%
\gdef\autonum@multipleLines{}%
}%
}
#2%
\global\let\\\autonum@patchedNewline%
\ifdef{\autonum@multipleLines}{%
\global\undef{\autonum@multipleLines}%
}{%
\csxdefaux{autonum@\Roman{autonum@counter}HasExactlyOneLine}{\Roman{autonum@counter}}%
}%
\autonum@restoreParentheses
\end{#1}%
}

\global\def\autonum@patchParentheses{%
\autonum@patchParenthesis{(}{Left}{}%
\autonum@patchParenthesis{)}{Right}{end}%
}

\global\def\autonum@patchParenthesis#1#2#3{%
\ifcsdef{#1}{%
\global\csletcs{autonum@old#2Parenthesis}{#1}%
}{}%
\global\csletcs{#1}{#3split}%
}

\global\def\autonum@restoreParentheses{%
\autonum@restoreParenthesis{(}{Left}%
\autonum@restoreParenthesis{)}{Right}%
}

\global\def\autonum@restoreParenthesis#1#2{%
\ifcsdef{autonum@old#2Parenthesis}{%
\global\csletcs{#1}{autonum@old#2Parenthesis}%
\global\csundef{autonum@old#2Parenthesis}%
}{}%
}

%% 
%% Copyright (C) 2012 by Patrick Häcker <pat_h@web.de>
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License (LPPL), either
%% version 1.3c of this license or (at your option) any later
%% version.  The latest version of this license is in the file:
%% 
%% http://www.latex-project.org/lppl.txt
%% 
%% This work is "maintained" (as per LPPL maintenance status) by
%% Patrick Häcker.
%% 
%% This work consists of the file  autonum.dtx
%% and the derived files           autonum.ins,
%%                                 autonum.pdf and
%%                                 autonum.sty.
%% 
%%
%% End of file `autonum.ins'.
