如何在环境中使用 \enddocument

如何在环境中使用 \enddocument

我有一份以下形式的文件

\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

相关内容