![在定理环境中使用枚举的最佳实践](https://linux22.com/image/242939/%E5%9C%A8%E5%AE%9A%E7%90%86%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%9E%9A%E4%B8%BE%E7%9A%84%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.png)
假设有一个定理/证明,例如:
\begin{theorem}
The following are equivalent:
\begin{enumerate}
\item Statement 1
\item Statement 2
\item Statement 3
\end{enumerate}
\end{theorem}
\begin{proof}
(1) $\implies$ (2): Proof if (1) then (2)
(2) $\implies$ (3): Proof if (2) then (3)
(3) $\implies$ (1): Proof if (3) then (1)
\end{proof}
显然,对项目编号进行硬编码不是一个好主意。我想,可以使用带有自定义项目标签的枚举,但话又说回来,这仍然相当于对项目编号进行硬编码。更好的做法是,至少在某种程度上,将枚举环境与自动项目标签生成结合使用,以生成以下形式的标签
$(m) \implies (n)$
(尽管我不知道该怎么做)。也许更好的做法是在证明中根本不使用枚举环境,而只是使用对证明项目的引用,例如在伪代码中
\makeimplies{\ref{ItemLabel1}, \ref{ItemLabel2}} here is proof for if (1) then (2)
显然,我也不知道该怎么做。
无论如何,处理这种情况的建议做法是什么?
答案1
我将使用以下功能来定义项目enumitem
包裹。这将要求您标记要引用的项目(使用\label
),然后使用 相应地引用它们\ref
。
在下面的最小示例中,等效项列表使用格式化为的标签构造,并(<arabic#>)
带有等效引用输出。这是使用enumerate
环境的可选参数 ( [label=..,ref=..]
) 完成的。该命令\Implies{<ref1>}{<ref2>}
构造$\text{\ref{<ref1>}}\implies\text{\ref{<ref2>}}$
,以保持一致性和易用性。
\documentclass{article}
\usepackage{enumitem}% http://ctan.org/pkg/enumitem
\usepackage{amsthm}% http://ctan.org/pkg/amsthm
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\newtheorem{theorem}{Theorem}
\newcommand{\Implies}[2]{$\text{\ref{#1}}\implies\text{\ref{#2}}$}% X => Y
\begin{document}
\begin{theorem}
The following are equivalent:
\begin{enumerate}[label=(\arabic*),ref=(\arabic*)]
\item Statement 1 \label{statement1}
\item Statement 2 \label{statement2}
\item Statement 3 \label{statement3}
\end{enumerate}
\end{theorem}
\begin{proof}
\Implies{statement1}{statement2}: Proof if~\ref{statement1} then~\ref{statement2}.
\Implies{statement2}{statement3}: Proof if~\ref{statement2} then~\ref{statement3}.
\Implies{statement3}{statement1}: Proof if~\ref{statement3} then~\ref{statement1}.
\end{proof}
\end{document}
这里的主要方法是允许引用列出的项目,这样您就不必担心是否要更改外观,也不必随后修改(硬)编码的证明。此外,您只需要标记要引用的那些条目。在本例中,所有语句都已标记。