当我使用版本包有条件地排除这样的内容:
\documentclass{article}
\usepackage{color}% just as example
\usepackage[tracing]{versions}
\excludeversion{vers}% opposite to \includeversion{vers}
\newenvironment{test}{%
START%
\vers%
\color{red}%
}{%
\endvers%
END% is excluded but should not be excluded
}
\begin{document}
before
\begin{test}
% content is excluded for \excludeversion{vers}
% and included for \includeversion{vers} above
inside
\end{test}
after
\end{document}
我可以排除环境内容vers
,正如使用versions
包所期望的那样。但同时也END
被排除(在之后\endvers
),这与我的意图相反。\includeversion{vers}
同时也END
被包括在内(如预期的那样)。我做错了什么,我该如何解决?
可以定义
\newcommand{\afterendvers}{%
END% and all other stuff I want to have executed here
}
\end{test}
并在\end{test}\afterendvers
整个文档中替换,但更“技术化”的解决方案会更好。
相关问题:虽然用\includeversion{vers}
END
红色印刷,
环境处理起来就像
\begin{<version>}
不\end{<version>}
存在一样,然而它们形成了像\begin{relax} <code> \end{relax}
或\begingroup <code> \endgroup
(来自版本手册),但是
\vers%
\bgroup%
\color{red}%
}{%
\egroup%
\endvers%
END%
导致END
显示为黑色,正如预期的那样。即:在本例中\vers
和\endvers
似乎不像\begingroup
和那样起作用。\endgroup
答案1
出现问题的原因是,当 excluded\vers
包含\let\end\fi
and时\iffalse
,会忽略所有内容,直到下一个\end{<current environment>}
,其中当前环境由最后一个 设定\begin
,即test
此处。我认为这\end
并没有展开,因此其中的\endvers%
andEND
永远不会出现。
我试图通过查看软件包的源代码来找出解决方法versions
,但这只是证实了它不支持这种用法。为此需要对该软件包进行更大规模的重写。
答案2
我不确定您的实际用例是什么,但似乎您的 MWE 应该根据版本有条件地为某些文本着色。这对我来说有效:
\documentclass{article}
\usepackage{color}% just as example
\usepackage[tracing]{versions}
\excludeversion{vers}
\def\colorbyversion{\normalcolor}
\begin{vers}
\gdef\colorbyversion{\color{red}}
\end{vers}
\newenvironment{test}{
START
\bgroup\colorbyversion}{%
\egroup
END% should not be excluded
}
\begin{document}
before
\begin{test}
inside
\end{test}
after
\end{document}
和\includeversion{vers}
:
和\excludeversion{vers}
:
需要\gdef
来使 重新定义为\colorbyversion
全局的。否则,环境内的定义vers
将在 处失效\end{vers}
。