我有一份以下形式的文件
\begin{document}
some text
\begin{myenv}
....
\end{myenv}
some other stuff
\end\document
我想\newif\if@test
在标题中设置一个布尔值来控制输出,这样如果我设置\@testtrue
,文档就会在之后结束\end{myenv}
并且不会显示其他一些东西。我的尝试是
\if@test \enddocument
在 声明的末尾myenv
。但是这不起作用,LaTeX 会抱怨以 ...begin{myenv}
结尾。\enddocument
我怎能这样做?
答案1
一个简单的解决方案是用来\stop
停止进一步的编译。
\documentclass{article}
\newenvironment{myenv}{}{\stop}
\begin{document}
some text
\begin{myenv}
Some other text
\end{myenv}
some other stuff
\end{document}
这是在 LaTeX 中重新定义的 TeX 命令ltmiscen.dtx
。
答案2
要评论文档的某些短语,我推荐包评论。
另一方面,我推荐etoolbox
带挂钩的包装\AfterEndEnvironment
。
下面是一个例子:
\documentclass{article}%
\usepackage{etoolbox}
\newbool{myenv:enddocument}
\booltrue{myenv:enddocument}
\AfterEndEnvironment{myenv}{%
\ifbool{myenv:enddocument}%
{\def\tempa{\end{document}}}%
{\let\tempa\relax}%
\tempa%
}
\newenvironment{myenv}%
{\par\noindent}%
{\par}
\begin{document}
some text
\begin{myenv}
....
\end{myenv}
some other stuff
\end{document}
答案3
由于您的环境内的最小分组,以下操作有效:
\documentclass{article}
\newenvironment{myenv}{Start}{Finish}% \begin{myenv}...\end{myenv}
\makeatletter
\newif\if@test% New condition \@test<true><false>
\@testtrue% \@testfalse
\g@addto@macro{\myenv}
{\if@test\g@addto@macro{\endmyenv}{\aftergroup\enddocument}\fi}
\makeatother
\begin{document}
some text
\begin{myenv}
...
\end{myenv}
some other stuff
\end{document}
\g@addto@macro
类似于etoolbox
的\appto
命令。\aftergroup
等待当前组完成后再执行\enddocument
。