
次のように、3 つのサブ環境を含む環境を作成したいと思います。
\begin{Outer}
\begin{InnerA}
Content A.
\end{InnerA}
\begin{InnerB}
Content B.
\end{InnerB}
\begin{InnerC}
Content C.
\end{InnerC}
\end{Outer}
外部環境の定義で内部環境のコンテンツにアクセスするにはどうすればよいでしょうか。たとえば、外部環境で内部環境のコンテンツを特定の順序で、異なる書式で表示したいとします。
答え1
以下は、あなたが求めているものの基本的な実装です。
\documentclass{article}
\usepackage{xcolor}
\NewDocumentEnvironment{Outer}{ }{%
% Ensure that inner body macros are defined.
\def\InnerABody{}%
\def\InnerBBody{}%
\def\InnerCBody{}%
}{%
% Format/re-order inner bodies.
{\color{red}\bfseries\InnerABody\par}%
{\color{blue}\large\InnerCBody\par}%
{\color{green}\ttfamily\InnerBBody\par}%
}
\NewDocumentEnvironment{InnerA}{ b }{}{%
\gdef\InnerABody{#1}}
\NewDocumentEnvironment{InnerB}{ b }{}{%
\gdef\InnerBBody{#1}}
\NewDocumentEnvironment{InnerC}{ b }{}{%
\gdef\InnerCBody{#1}}
\begin{document}
\begin{Outer}
\begin{InnerA}
Content A.
\end{InnerA}
\begin{InnerB}
Content B.
\end{InnerB}
\begin{InnerC}
Content C.
\end{InnerC}
\end{Outer}
\end{document}
アイデアはInnerA
、 、InnerB
、InnerC
環境の内容をそれぞれマクロ\InnerABody
、\InnerBBody
、に取り込むことです\InnerCBody
。次に、 を閉じるときにOuter
( の一部として\end{Outer}
)、それぞれの内部環境本体の表示順序をフォーマットしたり変更したりできます。