我想使用 ifthen 包使我的文档中的所有证明都是有条件的。到目前为止,我已经
\usepackage{ifthen}
\newboolean{proofs}
\setboolean{proofs}{true}
...
\ifthenelse{\boolean{proofs}}{\begin{proof}
...any proof...
\end{proof}}{ }
但当然,每次创建证明时,我都必须继续放置 ifthenelse 语句。我希望将其封装在一个环境中,比如说fproof
。我该怎么做呢,因为该ifthenelse
语句被纳入证明环境的开始和结束?
例如,我希望任何证明都像以下一样简单:
\begin{fproof}
...any proof...
\end{fproof}
然后切换proofs
只会隐藏所有fproof
。有什么想法吗?
更新:尝试使用multiaudience
包:
\newenvironment{fproof}
{\begin{shownto}{showProofs}\begin{proof}}{\end{proof}\end{shownto}}
匹配开始和结束时遇到错误。
答案1
所有应该抓取其内容而不进行处理(例如将其丢弃)的环境都需要找到不扩展命令的环境的结尾,因此它必须在源代码中明确说明。
有许多用于此类条件文本的软件包,请参阅https://ctan.org/topic/cond-comp获取列表。
使用当前的 LaTeX,您可以使用内置参数+b
来\NewDocumentEnvironment
获取内容。有关更多信息,请参阅 xparse 文档。
\documentclass[12pt]{article}
\usepackage{etoolbox}
\usepackage{amsmath, amsthm}
\newbool{proofs}
\NewDocumentEnvironment{myproofs}{+b}
{\ifbool{proofs}{\begin{proof}#1\end{proof}}{--proof left out--}}{}
\begin{document}
\begin{myproofs}
Here I put the proof that $1+1=2$.
\end{myproofs}
\booltrue{proofs}
\begin{myproofs}
Here I put the proof that $2+2=4$.
\end{myproofs}
\end{document}
答案2
我不想解决您的问题,而是建议您使用该包multiaudience
。
假设我是一名老师,我只想向我自己展示证明,而不向我的学生展示。
我定义了两类受众,teachers
并且students
:
\SetNewAudience{teachers}
\SetNewAudience{students}
我认为该文件的某些部分应该只向教师展示:
\begin{shownto}{teachers}
...
\end{shownto}
如果我设置
\DefCurrentAudience{teachers}
这部分将显示。
如果我设置
\DefCurrentAudience{students}
不会。您也可以在文档本身之外设置此参数,编译时请参见包装文档。
例如,以下代码:
\documentclass{article}
\usepackage{multiaudience}
\usepackage{amsmath, amsthm}
\SetNewAudience{teachers}
\SetNewAudience{students}
\begin{document}
\DefCurrentAudience{teachers}
Here I say that $1+1=2$.
\begin{shownto}{teachers}
\begin{proof}
Here I put the proof that $1+1=2$.
\end{proof}
\end{shownto}
\end{document}
产生以下输出:
而此代码:
\documentclass{article}
\usepackage{multiaudience}
\usepackage{amsmath, amsthm}
\SetNewAudience{teachers}
\SetNewAudience{students}
\begin{document}
\DefCurrentAudience{students}
Here I say that $1+1=2$.
\begin{shownto}{teachers}
\begin{proof}
Here I put the proof that $1+1=2$.
\end{proof}
\end{shownto}
\end{document}
产生以下输出:
如您所见,第二种情况并未显示证明。
答案3
使用最近发布的 LaTeX 版本,您可以使用钩子。
\documentclass{article}
\usepackage{amsthm} % for proof environment
\usepackage{etoolbox}
\newtoggle{showproofs}
\newsavebox{\hideproof}
\AddToHook{env/proof/before}{%
\iftoggle{showproofs}{}{\par\setbox\hideproofs=\vbox\bgroup}%
}
\AddToHook{env/proof/after}{%
\iftoggle{showproofs}{}{\egroup}%
}
\begin{document}
This proof is not shown.
\begin{proof}
The proof is obvious.
\end{proof}
\toggletrue{showproofs}
This proof will be shown.
\begin{proof}
The proof is obvious.
\end{proof}
\end{document}
当切换设置为 false 时,校样会被排版,但内容将被丢弃。