是否有可能打断一个 LaTeX 环境,比如说OuterEnv
,通过另一个环境,比如说InnerEnv
,后者在环境启动代码中关闭第一个,然后执行“任何操作”,然后恢复外部代码位于最后,就像没有什么以前做过吗?
这不是关于恢复enumerate
等列表的问题。
我知道环境问题可能会引起争论,尤其是环境问题启动代码,更不用说grouping
环境的特征了。
我担心答案是no
:-(
这是一个不起作用的 MWE。LaTeX 抱怨结尾InnerEnv
(OuterEnv
当然 ;-))
\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}