我可以proof
使用comment
包来隐藏环境:
\documentclass{article}
\usepackage{comment,amsthm}
\excludecomment{proof}
\begin{document}
This is always printed.
\begin{proof}[Answer]
Hide this.
\end{proof}
\end{document}
当我尝试使用添加的newenvironment
命令执行相同操作时,即
\documentclass{article}
\usepackage{comment,amsthm}
\newenvironment{answer}{\begin{proof}[Answer]}{\end{proof}}
\excludecomment{answer}
\begin{document}
This is always printed.
\begin{answer}
Hide this.
\end{answer}
\end{document}
我收到错误:
\begin{answer} 以 \end{proof} 结束。 \end{answer} \begin{document} 以 \end{answer} 结束。 \end{answer} 额外 \endgroup。 \end{answer}
知道原因吗?
答案1
原因是,指定的注释环境<env>
不会将构造\begin{<env>}
...\end{<env>}
作为常规组进行处理(来自文档):
注意:对于包含的注释,
\begin
和\end
行表现得好像它们不存在一样。特别是,它们不表示分组,因此赋值和c不是本地的。
更详细的解释: 的扩展\begin{answer}
确实会导致\begin{proof}[Answer]
,但在搜索 之前,该组会立即关闭\end{answer}
。在内部,LaTeX 会在每次调用 时跟踪您处于哪个组。负责保存有关ent onment\begin
的信息的宏是which,具体取决于您的定义curr
envir
\@currenvir
\newenvironment{answer}
{\begin{proof}[Answer]}
{\end{proof}}
保持proof
而不是answer
扩展后保持\begin{answer}
。最终comment
包裹的搜索找到了\end{answer}
,但是这未能通过匹配环境的 LaTeX 测试\begin
,从而导致发布的错误。
简而言之,它的处理方式与预期不同。
解决此问题的方法是使用命令形式设置嵌套环境:
\documentclass{article}
\usepackage{comment,amsthm}
\newenvironment{answer}{\proof[Answer]}{\endproof}
\excludecomment{answer}
\begin{document}
This is always printed.
\begin{answer}
Hide this.
\end{answer}
\end{document}
请注意,注释\end{<env>}
应<env>
独占一行且不带空格:
开始和结束命令应单独成行。起始命令和结束命令之间不应有任何空格,后面也不应有任何内容。