答案1
使用proof
的标准。用适当的标准来代替它并不困难。amsthm
trivlist
list
\leftmargin
\documentclass{article}
\usepackage{amsthm}
\usepackage{lipsum}
\makeatletter
\renewenvironment{proof}[1][\proofname]
{%
\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@\relax
\list{}{\leftmargin=3\parindent\labelwidth=\leftmargin}
\item[\hskip\labelsep\itshape #1\@addpunct{.}\hfill]\ignorespaces
}
{%
\popQED\endlist\@endpefalse
}
\makeatother
\begin{document}
\noindent\rule{3\parindent}{1pt}% just to show the width of the indentation
\begin{proof}
\lipsum*[1][1-5]
\end{proof}
\begin{proof}
\lipsum*[1][1]
\begin{enumerate}
\item aaa
\item bbb\qedhere
\end{enumerate}
\end{proof}
\end{document}
如您所见,QED 标记位于正确的位置(并且您可以\qedhere
像往常一样在自动放置不起作用的情况下使用它)。
另一个优点是,当您意识到只是在浪费空间时,您可以简单地删除代码。
答案2
latexdef -p amsthm proof
并
latexdef -p amsthm endproof
证明amsthm
其证明环境定义如下:
\proof:
\long macro:[#1]->\par \pushQED {\qed }\normalfont \topsep 6\p@ \@plus 6\p@ \relax \trivlist \item [\hskip \labelsep \itshape #1\@addpunct {.}]\ignorespaces
\endproof:
\long macro:->\popQED \endtrivlist \@endpefalse
我们可以用 来模仿“证明”部分\makebox
,并使用小页面来存放证明的内容。
\NewCommandCopy\amsproof\proof
\NewCommandCopy\amsendproof\endproof
\makeatletter
\RenewDocumentEnvironment{proof}{+b}
{%
\par\noindent\makebox[3\parindent][l]{\itshape\proofname\@addpunct{.}\ignorespaces}\hfill%
\begin{minipage}[t]{\dimexpr\linewidth - 3\parindent\relax}
\pushQED{\qed} #1
\end{minipage}
}
{\popQED\@endpefalse}
\makeatother
两个问题:
- 证明的内容不会跨越不同的页面,因为它们都在一个小页面中。
- QED 符号放在不同的行上。