我试图简化我的 LaTeX 文档以使用 LaTeX 编写数学评估,但当我创建新环境时,出现了无法解决的错误。你能解释一下我的定义有什么问题吗?来源如下:
\documentclass{article}
\usepackage{tabu}
\usepackage{longtable}
% ASSESSMENT TEXT
\newenvironment{assessment}
{\tabulinesep=1.5mm
\begin{longtabu} to \linewidth{|X[13 l]|X[c]|}
\hline
& \scriptsize DO NOT WRITE IN THIS MARGIN \cr}
{\end{longtabu}}
% Pattern \begin{AssExer}{mark}{space}
\newcounter{exercise}
\newenvironment{AssExerc}[2]
{\hline
\begin{minipage}[t]{\linewidth}
\refstepcounter{exercise}\textbf{\theexercise.}~}
{\end{minipage}\vspace{#2} & \textbf{#1}\cr
\hline}
\begin{document}
\begin{assessment}
\begin{AssExerc}{1}{2cm}
Solve the following equation $2x-1 = 0$.
\end{AssExerc}
\end{assessment}
\end{document}
评估环境可以工作,但 AssExerc 不行。感谢您的帮助。
答案1
您的代码存在一些问题。首先,您不能在代码中使用环境参数\end{environment}
。我们可以通过将参数放入临时全局变量中来解决这个问题\gdef\temppoints{#1}\gdef\tempvskip{#2}
。
第二个更麻烦的问题是环境启动了一个组,而在该组内,您无法向表中添加元素,例如&
或\cr
或\hline
。为了解决这个问题,我们可以使用在环境组结束后添加代码并在包\AfterEndEnvironment
中定义etoolbox
。我们需要进入& \textbf{#1}\cr\hline
。\AfterEndEnvironment
我没有类似的解决方法,但幸运的是,这是不必要的。\hline
\begin{AssExer}
\hline
\documentclass{article}
\usepackage{tabu}
\usepackage{longtable}
\usepackage{etoolbox}
% ASSESSMENT TEXT
\newenvironment{assessment}
{\tabulinesep=1.5mm
\begin{longtabu} to \linewidth{|X[13 l]|X[c]|}
\hline
& \scriptsize DO NOT WRITE IN THIS MARGIN \cr\hline}
{\end{longtabu}}
% Pattern \begin{AssExer}{mark}{space}
\newcounter{exercise}
\newenvironment{AssExer}[2]{
\begin{minipage}[t]{\linewidth}
\refstepcounter{exercise}\textbf{\theexercise.}~
\gdef\temppoints{#1}\gdef\tempvspace{#2}
}{
\end{minipage}\vspace{\tempvspace}
}
\AfterEndEnvironment{AssExer}{& \textbf{\temppoints}\cr\hline}
\begin{document}
\begin{assessment}
\begin{AssExer}{1}{2cm}
Solve the following equation $2x-1 = 0$.
\end{AssExer}
\end{assessment}
\end{document}