自定义环境中的多列环境

自定义环境中的多列环境

我想multicol在我自己的环境中使用 -package 通过使用计数器,它看起来像

\newenvironment{Test}{\ifnum\theCnt=1%
    \begin{multicols}{1}
\else
    \begin{multicols}{2}
\fi}{\end{multicols}}

理论上这绝对是可能的,但我现在想扩展它,因为我的Test环境中还有更多环境。它看起来像

\begin{Test}
\begin{A}
\end{A}
\begin{B}
\end{B}
\begin{A}
\end{A}
\begin{B}
\end{B}
\end{Test}

现在有趣的部分是环境AB正在修改计数器,即第一次出现的环境AB应该设置为单列环境,但每个进一步的环境都应该设置为双列环境,因此不可能简单地修改环境定义。
另一个问题是我想将后两个环境作为单列,即对于输入 \begin{Test} \begin{A} \end{A} \begin{B} \end{B} \begin{A} \end{A} \begin{B} \end{B} \begin{A} \end{A} \begin{B} \end{B} \end{Test} ,结果应该是这样的

  A
  B
A   A
B   B

如果我这样写,也可以达到同样的效果

\begin{Test1}
\begin{A}
\end{A}
\begin{B}
\end{B}
\end{Test1}
\begin{Test2}
\begin{A}
\end{A}
\begin{B}
\end{B}
\begin{A}
\end{A}
\begin{B}
\end{B}
\end{Test2}

定义Test1单列环境和Test2多列环境。但我想将所有内容放在一个名为的环境中Test
这可能吗?如果可以,怎么做?

答案1

这是一个解决方案。使用来自电子工具箱

\documentclass{article}
\usepackage{multicol}

\newif\iffirst
\newenvironment{Test}{\section{AB}}{[stuff]}
\newenvironment{A}{\section{A}}{\hrulefill}
\newenvironment{B}{\section{B}}{\dotfill}

\usepackage{etoolbox}
\AtBeginEnvironment{Test}{\firsttrue}
\AfterEndEnvironment{B}{\iffirst\firstfalse\begin{multicols}{2}\fi}
\AtEndEnvironment{Test}{\iffirst\else\end{multicols}\fi}

\begin{document}
bla bla
\begin{Test}
\begin{A}
AAAA
\end{A}

\begin{B}
BBBBB
\end{B}

\begin{A}
AAAA
\end{A}

\begin{B}
BBBBB
\end{B}

\begin{A}
AAAA
\end{A}

\begin{B}
BBBBB
\end{B}
\end{Test}

\begin{Test}
\begin{A}
AAAA
\end{A}

\begin{B}
BBBBB
\end{B}

\end{Test}

\end{document}

在此处输入图片描述

相关内容