当展示一个基于先前介绍的定理或方程的冗长的数学推导时,很好的做法是逐行写下推导行(例如使用环境align
),然后在应用特定步骤的左边或右边距添加所使用的定理或方程的编号。
是否有一个软件包或一个好的、干净的方法来实现这一点?我觉得我目前使用的方法alignat{2}
有点笨拙。
\begin{alignat}{2}
& & foo &= bar \\
\text{Lemma \ref{lem:Bla} &\quad & foo &= boo
\end{alignat}
答案1
您可以\tag
在任何amsmath
显示环境中使用宏来为方程式的一行添加标签,例如您想要引用的定理。如果您还想要一个真正的行号,您必须进行一些编程,否则将重新定义将打印的\tag
“数字”\ref
为您选择的任何标签(可能不是您想要的行号)。这是一个粗略的尝试:
\documentclass{article}
\usepackage{amsmath}
\newtheorem{lem}{Lemma}
\let\mylabel=\label
\newcommand*{\referto}[2]{
\refstepcounter{equation}%
\mylabel{#2}
\tag*{by Lemma \ref{#1} \quad (\theequation)}%
}
\begin{document}
\begin{lem}
\label{lem:one}
We have foo equal to bar.
\end{lem}
\begin{lem}
\label{lem:two}
We have foo equal to boo.
\end{lem}
That is, we have
\begin{align}
\text{foo} &= \text{bar} \referto{lem:one}{line:one} \\
\text{foo} &= \text{boo} \referto{lem:two}{line:two} \\
\text{boo} &= \text{bar} \label{line:three}
\end{align}
whence the theorem (see lines \ref{line:one}, \ref{line:two}, \ref{line:three}).
\end{document}
唯一完全不透明的部分是\mylabel
命令。事实证明,amsmath
重新定义\label
为使用\tag
,但我们不想要这个,所以我们只保存原始版本供自己使用。