数组包在表格环境中破坏引用

数组包在表格环境中破坏引用

这是我上一个问题的后续问题:

为编号双栏校样定义新的 LaTeX 环境

基本上,我正在尝试定义以下环境:

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

\refstepcounter专门使用它,以便可以引用其他条目中的某些条目,如下所示:

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

遗憾的是,如果你包含了该array包,结果并不像我希望的那样,因为\ref宏没有转换成正确的数字。我 99% 肯定这是因为宏\label捕获了错误的数字(如果你将定理环境放在二证明环境之前,\ref宏会转换成定理的数字)。

如果我不包含该array包,它就会正常工作。但是我不能使用>{$}<{$}列修饰符将我的列置于数学模式(我尝试使用@-espressions,但会出现错误)。那么我该怎么做

  1. label在 tabular 中工作,甚至包含array包(最好),或者
  2. 在数学模式下排版我的列,不使用>{$}<{$},它们来自数组包。

任何帮助将不胜感激!

编辑:不幸的是,如果您尝试将整个环境包装在\begin{displaymath}和中\end{displaymath},并更改tabulararray(并摆脱列修饰符),则会收到此错误:

! 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 \\
?

因此看起来它似乎displaymath也不适合用标签播放。

编辑2:根据要求,这里有一个完整的例子来说明这个问题:

\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}

请注意,如果将第 7-12 行替换为:

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

您会收到上述错误。

再次感谢你的帮助!

答案1

使用内联模式:

\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}

相关内容