如何存取父環境定義中的巢狀環境的內容?

如何存取父環境定義中的巢狀環境的內容?

我想要一個包含三個子環境的環境,如下圖:

\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}

這個想法是分別捕捉巨集、和中的InnerAInnerB和環境的內容。然後,在結束時(作為 的一部分),您可以格式化和/或變更對應內部環境主體的顯示順序。InnerC\InnerABody\InnerBBody\InnerCBodyOuter\end{Outer}

相關內容