# [Tex/LaTex] array package breaks references in a tabular environment

environmentstables

This is a follow-up question to my last question:

Defining a new LaTeX environment for numbered two-column proofs

Basically, I'm trying to define the following environment:

\newcounter{proofc}
\DeclareRobustCommand\stepproofc{\refstepcounter{proofc}(\arabic{proofc})}
\newenvironment{twoproof}{%
\setcounter{proofc}{0}
\begin{tabular}{@{\stepproofc \hspace{4pt}}>{$}c<{$}|>{$}l<{$}}
}{
\end{tabular}
}


and I used \refstepcounter specifically so that I could refer to some entries inside other entries, like this:

\begin{twoproof}
\label{step1} Prop A & Justification \\
\label{step2} Prop B & Justification \\
Prop C & Because \ref{step1} and \ref{step2}
\end{twoproof}


Sadly, if you include the array package, this doesn't come out the way I'd hoped, because the \ref macros don't turn into the right number. I'm like 99% sure that this is because the \label macro is catching the wrong number (if you put a theorem environment before a twoproof environment, the \ref macros transform into the number of the theorem).

If I don't include the array package, this works the way it should. But then I can't use the >{$} and <{$} column modifiers to put my columns into math mode (I've tried using @-espressions instead and that gives an error). So how do I

1. get label to work inside tabular, even with the array package included (preferable), or
2. Typeset my columns in math mode without using >{$} and <{$}, which come from the array package.

Any help will be greatly appreciated!

Edit: Unfortunately, if you try to wrap the whole environment in \begin{displaymath} and \end{displaymath}, and change tabular to array (and get rid of the column modifiers), you get this error:

! Package amsmath Error: Multiple \label's: label 'step1' will be lost.

See the amsmath package documentation for explanation.
Type  H <return>  for immediate help.
...

l.30     \label
{step2} Prop B & Justification \\
?


So it seems like displaymath doesn't play nicely with labels either.

Edit 2:
As requested, here is a complete example illustrating the problem:

\documentclass[oneside]{article}
\usepackage{amsmath,amsthm}
\usepackage{array}

\newcounter{proofc}
\DeclareRobustCommand\stepproofc{\refstepcounter{proofc}(\arabic{proofc})}
\newenvironment{twoproof}{%
\setcounter{proofc}{0}
\begin{tabular}{@{\stepproofc \hspace{4pt}}>{$}c<{$}|>{$}l<{$}}
}{
\end{tabular}
}

\theoremstyle{definition}
\newtheorem{thm}{Theorem}[section]

\begin{document}

\begin{thm} This theorem exists to highlight the problem. \\
If you remove it or take the proof out of the theorem, the ref numbers simply disappear in the proof below

\begin{center}
\begin{twoproof}
\label{step1} E \vdash \alpha &  \pi_1 \\
\label{step2} E \vdash \beta & \pi_2 \\
E \vdash \gamma & \ref{step1} \mbox{ and } \ref{step2}
\end{twoproof}
\end{center}

\end{thm}

\end{document}


Note that if you replace lines 7-12 with:

\newenvironment{twoproof}{%
\setcounter{proofc}{0}
\begin{displaymath}
\begin{array}{@{\mbox{\stepproofc \hspace{4pt}}}c|l}
}{
\end{array}
\end{displaymath}
}


You get the error described above.

use the inline mode:

\documentclass[oneside]{article}
\usepackage{amsmath,amsthm,array}
\newcounter{proofc}
\DeclareRobustCommand\stepproofc{\refstepcounter{proofc}(\arabic{proofc})}

\newenvironment{twoproof}
{\setcounter{proofc}{0} \begin{center}$\array{ >{\global\stepproofc\label{step\theproofc} \hspace{4pt}}c | l }} { \endarray$ \end{center}}

\theoremstyle{definition}
\newtheorem{thm}{Theorem}[section]
\begin{document}

\begin{thm} This theorem exists to highlight the problem. \\
If you remove it or take the proof out of the theorem, the ref numbers simply disappear in the proof below

\begin{twoproof}
E \vdash \alpha & \pi_1   \\
E \vdash \beta  & \pi_2 \\
E \vdash \gamma & \ref{step1} \mbox{ and } \ref{step2}
\end{twoproof}

\end{thm}

\end{document}