暂停环境并由另一个环境恢复

暂停环境并由另一个环境恢复

是否有可能打断一个 LaTeX 环境,比如说OuterEnv,通过另一个环境,比如说InnerEnv,后者在环境启动代码中关闭第一个,然后执行“任何操作”,然后恢复外部代码位于最后,就像没有什么以前做过吗?

这不是关于恢复enumerate等列表的问题。

我知道环境问题可能会引起争论,尤其是环境问题启动代码,更不用说grouping环境的特征了。

我担心答案是no:-(

这是一个不起作用的 MWE。LaTeX 抱怨结尾InnerEnvOuterEnv当然 ;-))

\documentclass{article}

\usepackage{xcolor}
\usepackage{blindtext}

\newenvironment{OuterEnv}{%
\parindent0pt
  Foo

  \textcolor{red}{\blindtext}%
}{%

Bar\vskip2\baselineskip% Just for debugging
}

\newenvironment{InnerEnv}{%
\end{OuterEnv} % Fails
Closing Outer...

\textcolor{blue}{\blindtext}%
}{%

Resuming Outer\vskip3\baselineskip 
\begin{OuterEnv} %Fails too
}


\begin{document}

\begin{OuterEnv}

\begin{InnerEnv}
\end{InnerEnv}
\end{OuterEnv}

\end{document}

我不会坚持\newenvironment\NewDocumentEnvironment当然xparse也会这样做!

答案1

不要在家里做这个...

\documentclass{article}

\usepackage{xcolor}
\usepackage{blindtext}
\makeatletter
\newenvironment{OuterEnv}{%
\parindent0pt
  Foo

  \textcolor{red}{\blindtext}%
}{%

Bar\vskip2\baselineskip% Just for debugging
}

\newenvironment{InnerEnv}{%
\endgroup
\end{OuterEnv} % Fails
Closing Outer...

\textcolor{blue}{\blindtext}%
}{%

Resuming Outer\vskip3\baselineskip 
\begin{OuterEnv} %Fails too
\begingroup
\def\@currenvir{InnerEnv}%
}

\makeatother
\begin{document}

\begin{OuterEnv}

\begin{InnerEnv}
\end{InnerEnv}
\end{OuterEnv}

\end{document}

相关内容