使用 collect 包定义环境

使用 collect 包定义环境

我想定义一个aufgabe使用包collect*中的环境的环境collect。如果我构建了这样的文件(没有自定义环境),一切都很好:

\documentclass{article}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{collect}

\theoremstyle{definition}
\definecollection{aufg}

\newcommand{\aufgabenblatt}{\newpage {\bf \Large Aufgabenblatt} \\[3ex] \includecollection{aufg}}
\newtheorem{aufgabe}{Aufgabe}

\begin{document}

\begin{aufgabe}%
\begin{collect*}{aufg}{}{}{{\bf\arabic{aufgabe}.%
            Aufgabe:}}{}
    Hund
\end{collect*} %
\end{aufgabe}


\aufgabenblatt
\end{document}

带有 的 aufgabecollect*被收集并由命令显示\aufgabenblatt。但如果尝试构建我自己的命令,它不起作用:

\documentclass{article}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{collect}

\theoremstyle{definition}
\definecollection{aufg}

\newcommand{\aufgabenblatt}{\newpage {\bf \Large Aufgabenblatt} \\[3ex] \includecollection{aufg}}

\newtheorem{aufgabe}{Aufgabe}

\makeatletter
\newenvironment{aufcollect}{\begin{aufgabe}%
    \@nameuse{collect*}{aufg}{}{}{{\bf\arabic{aufgabe}.%
            Aufgabe:}}{}}{\@nameuse{endcollect*} %
\end{aufgabe}}  
\makeatother

\begin{document}

\begin{aufcollect}
   Katze
\end{aufcollect}
\aufgabenblatt
\end{document}

\@nameuse软件包文档鼓励使用。错误是"File ended while scanning use of \@tempa."知道我做错了什么吗?

答案1

在我看来,中间environment并没有真正划定界限,aufgabe环境应该被用作\aufgabe\endaufgabe,环绕着集合。

\documentclass{article}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}

\usepackage{collect}

\theoremstyle{definition}
\definecollection{aufg}

\newcommand{\aufgabenblatt}{\clearpage {\bfseries \Large Aufgabenblatt} \\[3ex] \includecollection{aufg}}

\newtheorem{aufgabe}{Aufgabe}

\makeatletter
\newenvironment{aufcollect}{%
  \aufgabe
  \@nameuse{collect*}{aufg}{}{}{\bfseries \arabic{aufgabe}.Aufgabe:}{}%
}{%
  \@nameuse{endcollect*} %
  \endaufgabe
}
\makeatother

\begin{document}


\begin{aufcollect}
Katze
\end{aufcollect}


\begin{aufcollect}
Hund
\end{aufcollect}

\begin{aufcollect}
Igel
\end{aufcollect}


\aufgabenblatt
\end{document}

更新:

\documentclass{article}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}

\usepackage{collect}
\usepackage{xpatch}

\makeatletter

\xpatchcmd{\collect*}{%
  \def\CE@prefileenv{#4}%
}{%
  \edef\CE@prefileenv{#4}% Preexpand this argument
}{\typeout{Stuff!}}{\typeout{Failed!}}
\makeatother


\theoremstyle{definition}
\definecollection{aufg}

\newcommand{\aufgabenblatt}{\clearpage {\bfseries \Large Aufgabenblatt} \\[3ex] \includecollection{aufg}}

\newtheorem{aufgabe}{Aufgabe}

\makeatletter
\newenvironment{aufcollect}{%
  \aufgabe
  \@nameuse{collect*}{aufg}{}{}{\unexpanded{\bfseries} \arabic{aufgabe}.Aufgabe:}{}%
}{%
  \@nameuse{endcollect*} %
  \endaufgabe
}
\makeatother

\begin{document}


\begin{aufcollect}
Katze
\end{aufcollect}


\begin{aufcollect}
Hund
\end{aufcollect}

\begin{aufcollect}
Igel
\end{aufcollect}


\aufgabenblatt
\end{document}

相关内容