我想制作一个类似类型的问题库——但是,我只想显示每次的第一个问题。例如:
\begin{bank}
\begin{exercise} 2+2
\end{exercise}
\begin{exercise} 4+3
\end{exercise}
\end{bank}
只会显示练习 2+2。任何帮助都非常好。
注意:这个问题似乎类似于获取环境的第一行
我已经尝试过类似的事情:
\def\getline#1\par{%
\gdef\theline{#1}#1%
}
\newenvironment{bank}{%
\getline%
}{\theline}
但这首先显示银行的内容,然后显示第一个环境。
答案1
以下 MWE 用途environ
定义exercise
环境,然后确定是否设置其内容(\BODY
)。条件在开始时设置为 true bank
,在设置第一个 后设置为 false \BODY
。
\documentclass{article}
\usepackage{environ}% http://ctan.org/pkg/environ
\newif\iffirstexercise% Condition for first exercise
\newenvironment{bank}
{\firstexercisetrue}% Allow first exercise environment to be set
{}
\NewEnviron{exercise}{%
\iffirstexercise
\BODY% Set body of exercise environment
\fi%
\global\firstexercisefalse% No more exercise environments are set
}
\begin{document}
\begin{bank}
\begin{exercise} $2+2$
\end{exercise}
\begin{exercise} $4+3$
\end{exercise}
\end{bank}
\begin{bank}
\begin{exercise} $7-6$
\end{exercise}
\begin{exercise} $4-3$
\end{exercise}
\end{bank}
\end{document}
答案2
因为你的exercise
没有指定,所以代码稍微改变了一下。
\documentclass{article}
\usepackage{exercise}
\begin{document}
\long\def\bbank#1 STOP #2\ebank{#1}
%\begin{bank}
\bbank
%\begin{exercise}
\[
2+2
\]
%\end{exercise}
% No new paragraph
STOP
%\begin{exercise}
\[
4+3
\]
%\end{exercise}
%\end{bank}
\[
4+3
\]
\ebank
\end{document}
所有工作均由 完成\long\def\bbank#1 STOP #2\ebank{#1}
。定义很长,因为您的文本可能比一个段落长。STOP
是代码中从未出现的字符串。请注意,在此定义中STOP
不会开始新的段落,用法示例中对此进行了注释。