You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LaTeX中用renewenvironment重定义proof环境后实心方块不显示问题

解决LaTeX proof环境重定义后实心方块变空心的问题

核心原因

你用renewenvironment重定义proof环境时,大概率是直接替换了环境的开头/结尾逻辑,丢弃了原amsthm包proof环境内置的QED符号管理机制——原环境通过\pushQED{\qed}和\popQED命令,在证明末尾自动输出实心方块;如果重定义时没保留这部分逻辑,就会 fallback 到LaTeX默认的空心QED符号。

两种可行解决方案

方案一:直接修改标题格式(推荐)

不用完全重定义环境,只通过\AtBeginEnvironment修改proof的标题样式,保留原环境所有内置逻辑:

\documentclass{article}
\usepackage{amsthm}

% 在proof环境开始时,将标题改为粗体
\AtBeginEnvironment{proof}{\renewcommand{\proofname}{\textbf{Proof.}}}

\begin{document}
\begin{proof}
这是一段测试证明内容。
\end{proof}
\end{document}

方案二:正确重定义整个环境

如果必须重定义完整环境,要严格保留原环境的QED管理和排版逻辑,只修改标题部分:

\documentclass{article}
\usepackage{amsthm}

% 重定义proof环境,保留原有的QED符号处理
\renewenvironment{proof}[1][\proofname]{\par
  \pushQED{\qed}% 保存当前QED符号为实心方块
  \normalfont \topsep6\p@\@plus6\p@\relax
  \trivlist
  \item[\hskip\labelsep\textbf{#1}]\ignorespaces % 标题改为粗体
}{%
  \popQED\endtrivlist\@endpefalse % 输出实心方块并恢复排版
}

\begin{document}
\begin{proof}
这是一段测试证明内容。
\end{proof}
\end{document}

覆盖机制解释

amsthm包的proof环境默认定义包含三个关键部分:

  1. \pushQED{\qed}:将当前QED符号设置为实心方块(\qed),同时保存之前的符号配置,避免影响其他环境。
  2. 标题排版:原环境用\bfseries设置标题加粗,你可以直接替换为\textbf{#1}实现相同效果(更直观)。
  3. \popQED:在环境结束时,恢复之前的QED符号配置,并输出当前设置的实心方块。

如果你的重定义代码(比如\renewenvironment{proof}{\textbf{Proof.}}{\endproof})没有包含pushQED和popQED,就会完全覆盖原环境的逻辑,导致末尾无法输出正确的实心方块,转而使用LaTeX默认的空心符号。

内容的提问来源于stack exchange,提问作者Dan317

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:42:37