如何才能将墓碑放置在带有标签的环境中?

如何才能将墓碑放置在带有标签的环境中?

我知道,如果一个定理的证明以诸如align*或 之类的显示的数学环境结束align,那么,为了将 QED 墓碑放置在该环境的最后一行(而不是放置在其自身的下一行),\qedhere必须将其放置在该环境中。

但是,如果该环境至少包含一个标签,墓碑就会被放置得太靠左了。我怎样才能让墓碑与右侧齐平?(添加&\hfill无效。)MWE:

\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{amsthm} % for \proof & \qedhere
\newtheorem{thm}{Theorem}
\begin{document}
\begin{thm} Theorem-statement.
\begin{proof}
\begin{align*}
a&=b\tag{by some earlier result}\\
&=c\\
&=d\qedhere
\end{align*}
\end{proof}
\end{thm}
\end{document}

答案1

在编号或标记环境中发出的命令\qedhere实际上不起作用(我认为这与其他缺陷有关,\qedhere例如align* 环境中的 \qedhere 导致 QED 符号位置错误)。

这是一个 hack:

\documentclass[12pt,a4paper]{article}

\usepackage{amsmath}
\usepackage{amsthm} % for \proof & \qedhere

\usepackage{showframe} % just for showing the bounding box

\newtheorem{thm}{Theorem}

\makeatletter
\newcommand{\altqedhere}{%
  \ifmeasuring@\else\sbox0{\popQED}\fi
  \tag*{\qedsymbol}%
}
\makeatother

\begin{document}

\begin{thm}
Theorem-statement.
\end{thm}

\begin{proof}
\begin{align*}
a&=b\tag{by some earlier result}\\
&=c\\
&=d\qedhere
\end{align*}
\end{proof}

\begin{proof}
\begin{align*}
a&=b\tag{by some earlier result}\\
&=c\\
&=d\altqedhere
\end{align*}
\end{proof}

\end{document}

注意proof应该是外部环境thm

在此处输入图片描述

由于\popQED里面有一个未使用的盒子,我们amsthm以为墓碑已经被使用过了。

相关内容