
我想要一個包含三個子環境的環境,如下圖:
\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}