使用 LaTeX 设置新环境

使用 LaTeX 设置新环境

我试图简化我的 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} 

相关内容