我正在尝试为我的编程语言课程编写问题集,我想为某种风格的证明创建一个环境。这种风格的证明将有两列,左侧有编号(从 1 开始),如下所示:
\begin{tabular}{rc|l}
(1) & Prop A & Justification \\
(2) & Prop B & Justification \\
(3) & Prop C & From (1) and (2)
\end{tabular}
我希望编号能够自动进行,而无需添加列(就像 eqnarray 那样,在右侧编号),并且在理想情况下,我希望能够使用参考和标签来引用结论,这样如果我插入步骤或移动它们,我就不必重新编号所有内容。用法希望看起来像这样:
\begin{twoproof}
Prop A & Justification \label{A} \\
Prop B & Justification \label{B} \\
Prop C & From \ref{A} and \ref{B}
\end{twoproof}
我的第一次尝试非常简单,如下:
\newcounter{proofc}
\newenvironment{twoproof}{
\tabular{@{\stepcounter{proof} \arabic{proofc}}c|l}
}{
\endtabular
}
但这不仅不允许我使用\ref
(我认为),而且每当我尝试使用这个环境时都会出现此错误:
! Missing \endcsname inserted.
<to be read again>
\csname\endcsname
l.79 \begin{twoproof}
我尝试运行\show\eqnarray
看看是否可以将其用作模板,但完全不明白输出,而且我不知道在哪里寻找启发。
我将不胜感激任何人能提供的帮助或指导!
编辑2::我解决了这个问题。我尝试变得聪明,将我的twoproof
环境包装在\begin{displaymath}
和中\end{displaymath}
,我猜这个环境与 amstex 配合得不好,因为当我改变定义方式twoproof
并摆脱时displaymath
,一切都重新开始工作。
编辑:虽然 Willie Wong 的回答(幸运的是)解决了我缺少的问题endcsname
,但当我尝试运行此示例时:
\begin{twoproof}
\label{step1} Prop A & Justification \\
\label{step2} Prop B & Justification \\
Prop C & Because \ref{step1} and \ref{step2}
\end{twoproof}
我遇到了这个错误:
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.56 \label
{step2} Prop B & Justification \\
如果有人知道是什么原因造成这种情况,我们将非常感激任何帮助。
另外,在我编辑问题时,有人知道如何右对齐表格中的编号吗?这不是什么大问题,但我认为这样看起来可能会好看一点。我曾短暂地考虑过设置自定义\halign
,但我认为这不值得付出努力。但是,如果有(相对)简单的解决方案,我很乐意听听。
再次感谢!
答案1
某物fragile
再次罢工!尝试以下操作:
\newcounter{proofc}
\renewcommand\theproofc{(\arabic{proofc})}
\DeclareRobustCommand\stepproofc{\refstepcounter{proofc}\theproofc}
\newenvironment{twoproof}{\tabular{@{\stepproofc}c|l}}{\endtabular}
不过,这里面有一个小错误:你必须把它\label
作为行中的第一个元素才能工作。如果你把它放在最后,它就不会工作。所以
\begin{twoproof}
\label{step1} Prop A & Justification \\ \label{step2} Prop B & Justification \\ Prop C & Because \ref{step1} and \ref{step2}
\end{twoproof}
答案2
有一些现有的软件包可能适合您的需求,例如惠誉式扣除方案之一或者这是 Kalish-Montague 风格的。我经常使用它们。
答案3
你也可以适应listliketab
。