使用 ifthenelse 创建新环境

使用 ifthenelse 创建新环境

我想使用 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 时,校样会被排版,但内容将被丢弃。

相关内容