
Me gustaría tener un entorno que contenga tres subambientes, así:
\begin{Outer}
\begin{InnerA}
Content A.
\end{InnerA}
\begin{InnerB}
Content B.
\end{InnerB}
\begin{InnerC}
Content C.
\end{InnerC}
\end{Outer}
¿Cómo puedo acceder al contenido de los entornos internos en la definición del entorno externo? Por ejemplo, es posible que desee que el entorno exterior muestre el contenido de los entornos internos en un orden particular, con un formato distinto.
Respuesta1
La siguiente es una implementación elemental de lo que podría estar buscando:
\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}
La idea es capturar el contenido de InnerA
y InnerB
los InnerC
entornos en macros \InnerABody
y \InnerBBody
respectivamente \InnerCBody
. Luego, al cerrar Outer
(como parte de \end{Outer}
), puede formatear y/o cambiar el orden en el que se muestran los respectivos cuerpos del entorno interno.