![如何在版本包中屏蔽 \begin 和 \end?](https://linux22.com/image/475478/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%89%88%E6%9C%AC%E5%8C%85%E4%B8%AD%E5%B1%8F%E8%94%BD%20%5Cbegin%20%E5%92%8C%20%5Cend%EF%BC%9F.png)
随着版本包,foo
可以创建一个版本开关来打开/关闭在环境中写入的文本foo
。我的目标是创建新命令\mybegin
和,以屏蔽对和的\myend
调用。\begin{foo}
\end{foo}
梅威瑟:
\documentclass{article}
\usepackage{versions}
\newcommand{\mybegin}{\begin{foo}}
\newcommand{\myend}{\end{foo}}
\excludeversion{foo}
\begin{document}
Nothing to see here.
\mybegin
Surprise!
\myend
\end{document}
但是,此操作失败并出现错误
! Incomplete \iffalse; all text was ignored after line 16. <inserted text>\fi<>
原因似乎是,以in\excludeversion
开头并重新定义以生成。现在我假设宏扩展在扩展 时会导致没有。但是,我不知道如何防止这种情况发生。\iffalse
\foo
\end{foo}
\fi
\iffalse
\fi
\mybegin
上下文:最后,我尝试模仿 的行为,如果未定义版本(即不存在或) \processifversion
,则生成原始文本。在我的用例中,我不能使用,因为这不允许在参数中列出。我的最终目标是生成类似以下内容的内容:foo
\includeversion
\excludeversion
\processifversion
\makeatletter
\newcommand{\mybegin}{
\@ifundefined{foo}{\relax}{\begin{foo}}
}
\newcommand{\myend}{
\@ifundefined{foo}{\relax}{\end{foo}}
}
\makeatother