这是我的最小的不起作用的例子:
\documentclass[a4paper,10pt]{book}
\usepackage{mdframed}
\usepackage{exsheets}
\newenvironment{exerciseWithSpace}[1]{\begin{question}}{\end{question} \mdframed \vspace{#1} \endmdframed }
\begin{document}
\begin{exerciseWithSpace}[3cm]
Bla bla bla.
\end{exercicioWithSpace}
\end{document}
这是我收到的错误:
Illegal parameter number in definition of \endexerciseWithSpace.
加倍#
会#1
导致另一个错误:
LaTeX Error: \begin{question} on input line 10 ended by \end{exe rciseWithSpace}.
这是我尝试创建的新环境,所以我想我仍然不明白如何正确创建它们。
答案1
您的代码中存在一些错误:
- 你不能使用
#1
在环境定义的“结束部分”中使用; - 您将该参数定义为强制参数,但将其用作可选参数;
\begin{question}
并且\end{question}
应该是\question
和\endquestion
,因为这个环境是如何定义的exsheets
。
由于环境是exerciseWithSpace
,该论点似乎是强制性的,因此
\documentclass[a4paper,10pt]{book}
\usepackage{mdframed}
\usepackage{exsheets}
\newlength{\exercisespace}
\newenvironment{exerciseWithSpace}[1]
{\setlength{\exercisespace}{#1}\question}
{\endquestion\mdframed\vspace{\exercisespace}\endmdframed}
\begin{document}
\begin{exerciseWithSpace}{3cm}
Bla bla bla.
\end{exerciseWithSpace}
\end{document}
我们不需要传递明确的参数\vspace
,而是将其保存在寄存器中。
您可能需要一个通用exercise
环境,带有一个可选参数,如果存在,则会触发离开所需的空间。
\documentclass[a4paper,10pt]{book}
\usepackage{mdframed}
\usepackage{exsheets}
\newlength{\exercisespace}
\newenvironment{exercise}[1][0pt]
{\setlength{\exercisespace}{#1}\question}
{\endquestion
\ifdim\exercisespace>0pt
\mdframed\vspace{\exercisespace}\endmdframed
\fi}
\begin{document}
\begin{exercise}[3cm]
Bla bla bla.
\end{exercise}
\end{document}
输出是相同的(但请注意方括号)。使用
\begin{exercise}
Bla bla bla.
\end{exercise}
您不会得到任何盒子。
答案2
我不太熟悉exsheets
,但问题并不真正相关,exsheets
但事实上,#1
在用传统方式定义的环境的最终代码中,不可能\newenvironment
。
可以使用\NewDocumentEnvironment
来自xparse
包(此处显示)或\NewEnviron
。
\documentclass[a4paper,10pt]{book}
\usepackage{mdframed}
\usepackage{exsheets}
\usepackage{xparse}
\NewDocumentEnvironment{exerciseWithSpace}{oD<>{3cm}}{%
\IfValueTF{#1}{%
\question{#1}%
}{%
\question%
}
}{%
\endquestion%
\begin{mdframed}
\vspace{#2}
\end{mdframed}
}
\begin{document}
\begin{exerciseWithSpace}[8]<5cm>
Bla bla bla.
\end{exerciseWithSpace}
\begin{exerciseWithSpace}<3cm>
Bla bla bla.
\end{exerciseWithSpace}
\end{document}