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

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

我正在尝试为我的编程语言课程编写问题集,我想为某种风格的证明创建一个环境。这种风格的证明将有两列,左侧有编号(从 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

相关内容