如何将 \NewEnviron 解决方案推广到 \RenewEnviron(错误:\env@proof@save@env 未定义)

如何将 \NewEnviron 解决方案推广到 \RenewEnviron(错误:\env@proof@save@env 未定义)

这个问题是 通过 true/false 开关解决环境问题 Ian 帮助我定义了一个可以隐藏的解决方案环境。我也尝试过将其用于证明环境,但proof已经定义好了。我尝试使用\RenewEnviron并遵循 如何忽略文档环境中的所有内容? 克服第一个错误,但现在我得到了LaTeX Error: \env@proof@save@env undefined。我正在寻找一个解决方案(而不是建议坚持使用已经定义的环境或使用不同的名称)。

\documentclass{scrartcl}

\usepackage[american]{babel}
\usepackage{environ}
\usepackage{amsthm}
\usepackage{amsmath}

\newif\ifshowproof
\showprooftrue

% proof environment
\makeatletter
\providecommand{\env@document@save@env}{}%
\providecommand{\env@document@process}{}%
\RenewEnviron{proof}[1][showproof]{%
  \csname if#1\endcsname
    \trivlist
    \item\relax{\sffamily\bfseries Proof}\par\noindent
    \BODY
    \endtrivlist
  \fi
}
\makeatother

\begin{document}
Proof with hide feature:
\begin{proof}[false]
  This should not appear
\end{proof}

Proof without hide feature:
\begin{proof}
  This should appear
\end{proof}
\end{document}

答案1

根据我的经验,\RenewEnviron它从来没有起作用。我知道让它起作用的唯一方法是取消定义前面的命令并使用\NewEnviron

\documentclass{scrartcl}

\usepackage[american]{babel}
\usepackage{environ}
\usepackage{amsthm}
\usepackage{amsmath}

\newif\ifshowproof
\showprooftrue

% proof environment
% remove the meaning of \proof and \endproof
\let\proof\relax
\let\endproof\relax
% now we can redefine proof
\NewEnviron{proof}[1][showproof]{%
  \csname if#1\endcsname
    \trivlist
    \item\relax{\sffamily\bfseries Proof}\par\noindent
    \BODY
    \endtrivlist
  \fi
}

\begin{document}
Proof with hide feature:
\begin{proof}[false]
  This should not appear
\end{proof}

Proof without hide feature:
\begin{proof}
  This should appear
\end{proof}
\end{document}

但是,我会保留原始proof环境,以便 QED 机制仍然存在。

\documentclass{scrartcl}

\usepackage[american]{babel}
\usepackage{environ,letltxmacro}
\usepackage{amsthm}
\usepackage{amsmath}

\newif\ifshowproof
\showprooftrue

% proof environment
\makeatletter
\LetLtxMacro\amsthmproof\proof
\LetLtxMacro\amsthmendproof\endproof
\let\proof\relax
\let\endproof\relax
\NewEnviron{proof}[1][showproof]{%
  \csname if#1\endcsname
    \amsthmproof[\normalfont\bfseries Proof\spacefactor3000 ]
    \BODY
    \amsthmendproof
  \fi
}
\makeatother

\begin{document}
Proof with hide feature:
\begin{proof}[false]
  This should not appear
\end{proof}

Proof without hide feature:
\begin{proof}
  This should appear
\end{proof}
\end{document}

删除该\spacefactor3000位(否则不要忘记空格),如果你想在后面加句号证明

如果你真的想要换行符证明(但你不应该),\mbox{}\par\noindent在右括号后添加。

在此处输入图片描述

相关内容