这是我上一个问题的后续问题:
基本上,我正在尝试定义以下环境:
\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,但会出现错误)。那么我该怎么做
label
在 tabular 中工作,甚至包含array
包(最好),或者- 在数学模式下排版我的列,不使用
>{$}
和<{$}
,它们来自数组包。
任何帮助将不胜感激!
编辑:不幸的是,如果您尝试将整个环境包装在\begin{displaymath}
和中\end{displaymath}
,并更改tabular
为array
(并摆脱列修饰符),则会收到此错误:
! 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}