# Versioning Theorem numbers with amsthm

I would like to have different versions of the same theorem or definition. So version 0 of definition 1 would be called "Definition 1.0" and version 1 would be called "Definition 1.1". The file below returns the error TeX capacity exceeded, sorry [input stack size=5000]. on compilation. What am I doing wrong?

I copied the relevant code from here and changed some of the details:

\documentclass[12pt]{article}

\usepackage{amsthm}
\usepackage{amsmath}

\newcounter{dfn}[section]

\newcounter{dfnv}

\makeatletter
\@namedef{thedfnv}{\@nameuse{thedfn}.\arabic{dfnv}}
\makeatother

\newtheorem{dfn}[dfnv]{Definition}

\begin{document}

\section{First section}

\begin{dfn}% Should display as Definition 1.0
Version 0 of the definition of foo.
\end{dfn}

\begin{dfn}% Should display as Definition 1.1
Version 1 of the definition of foo.
\end{dfn}
\stepcounter{dfn}

\begin{dfn}% Should display as Definition 2.0
Version 0 of the definition of bar.
\end{dfn}

\begin{dfn}% Should display as Definition 2.1
Version 1 of the definition of bar.
\end{dfn}
\stepcounter{dfn}

\end{document}

• I fixed it, I just apparently can't use the same name, dfn, for the theorem type and the counter. I'm not putting this as an answer because I don't know why it's a problem. – Joshua Meyers May 26 '17 at 5:11
• Circular definition, probably – daleif May 26 '17 at 5:38

You of course cannot intermix versioned definitions. I suggest two environments: dfn will step the main number, whereas dfn* only steps the version number.

\documentclass[12pt]{article}

\usepackage{amsmath}
\usepackage{amsthm}

\newcounter{dfnmain}[section]
\newtheorem{dfninner}{Definition}[dfnmain]
\makeatletter
\renewcommand{\thedfninner}{%
\arabic{dfnmain}.\@arabic{\numexpr\value{dfninner}-1\relax}%
}
\makeatother
\newenvironment{dfn}
{\stepcounter{dfnmain}\dfninner}
{\enddfninner}
\newenvironment{dfn*}
{\dfninner}
{\enddfninner}

\begin{document}

\section{First section}

\begin{dfn}
Version 0 of the definition of foo.
\end{dfn}

\begin{dfn*}
Version 1 of the definition of foo.
\end{dfn*}

\begin{dfn}
Version 0 of the definition of bar.
\end{dfn}

\begin{dfn*}
Version 1 of the definition of bar.
\end{dfn*}

\section{Second section}

\begin{dfn}
Version 0 of the definition of foo.
\end{dfn}

\begin{dfn*}
Version 1 of the definition of foo.
\end{dfn*}

\begin{dfn}
Version 0 of the definition of bar.
\end{dfn}

\begin{dfn*}
Version 1 of the definition of bar.
\end{dfn*}

\end{document}


If you want the numbers to also refer to the section number, add \arabic{section}. in the definition of \thedfninner.