这个问题是
通过 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
在右括号后添加。