如何正确地将枚举放入定义的环境中?

如何正确地将枚举放入定义的环境中?

我正在使用环境来处理表单类型的信息,我正在尝试使用枚举进行自动编号。这是我当前的输出:

在此处输入图片描述

这是我的代码,

  \begin{document}
  \begin{tabforms}
    \tabform{a.}{Course name}{:}{History of Art}
    \tabform{b.}{Credits}{:}{4 (four)}
    \tabform{c.}{Lecturer}{:}{Raisa Andriana}
    \tabform{d.}{Room}{:}{Main hall Apolo, building A}
 \end{tabforms}
 \end{document}

如您所见,我正在手动定义字母编号。它完全按照我想要的方式工作,但是信息会大量增加,有时我会忘记字母,不得不从头开始重新排序,这就是我尝试使用枚举的原因。这是我的环境:

\newenvironment{tabforms}{%
  \begin{longtable}{
        >{\raggedright\arraybackslash}p{0.1cm}
        >{\raggedright\arraybackslash}p{4.5cm}
        >{\raggedright\arraybackslash}p{0.1cm}
        >{\raggedright\arraybackslash}p{12cm}  %%% \\ 
        }}{ \end{longtable} \vspace{-1mm}
}
\newcommand\tabform[4]{%
#1 & #2 & #3 & #4  \\ }

我正在尝试使用以下命令在我的代码上实现枚举:

\begin{enumerate}[label=\alph*.]
\item 
\item 
\end{enumerate}

在环境之外,它运行得很好。我尝试在我的环境中实现它,但没有成功,这是我尝试过的(手动编号仍然存在,因为我只是想知道它是否有效):

\begin{document}
\begin{tabforms}
\begin{enumerate}[label=\alph*.]
        \item \tabform{a.}{Course name}{:}{History of Art}
        \item \tabform{b.}{Credits}{:}{4 (four)}
        \item \tabform{c.}{Lecturer}{:}{Raisa Andriana}
        \item \tabform{d.}{Room}{:}{Main hall Apolo, building A}
\end{enumerate}
\end{tabforms}
\end{document}

它不起作用,我在每个项目行中都遇到这些错误:

Extra }, or forgotten \endgroup
Missing \endgroup inserted
Missing } inserted
Overfull ...

在这种情况下,可以实现枚举吗?我该如何正确地表达呢?

答案1

不要尝试使用itemize。相反,您要做的就是创建自己的计数器。我们假设您不会有嵌套tabforms环境(如果不是这种情况,那将更加复杂)。

您需要为您的\tabform命令创建一个新的计数器,我们称之为tabform

\newcounter{tabform}

接下来,我们希望能够在环境中使用它。我们希望它以小写字母打印,格式由\thetabform我们可以重新定义为的命令决定

\renewcommand{\thetabform}{\alph{tabform}}

(您还可以使用命令\arabic\Alph和。)\roman\Roman

现在我们要打印数字的一部分,\tabform如下所示:

\newcommand\tabform[3]{%
  \refstepcounter{tabform}\thetabform. & #1 & #2 & #3   \\ }

我们所做的是将长表中的第一个参数替换为在增加计数器值后打印计数器的命令。使用\refstepcounter允许我们使用\label\ref进行交叉引用。

最后,我们要确保如果tabforms文档中有多个环境,则每个环境都以“a”开头。我们通过将计数器设置tabform为 0 作为环境定义的一部分来实现这一点\begin

\newenvironment{tabforms}{%
  \setcounter{tabform}{0}%
  \begin{longtable}{
        >{\raggedright\arraybackslash}p{0.1cm}
        >{\raggedright\arraybackslash}p{4.5cm}
        >{\raggedright\arraybackslash}p{0.1cm}
        >{\raggedright\arraybackslash}p{12cm}  %%% \\ 
        }}{ \end{longtable} \vspace{-1mm}
}

答案2

考虑到您已经定义的命令,我认为使用enumerate环境并不是实现自动编号的最简单方法。相反,您可以定义一个新的计数器,并在每次调用时增加它以\tabform对相应行进行编号。

这是我根据您的示例构建的示例。我添加了一个新的tabcount计数器,该计数器在环境开始时重置tabforms。我进行了修改\tabform以使第一个参数成为可选参数。如果给出了该参数,它将像您的第一个示例一样放置在表中,但如果未给出该参数,tabcount则将递增并用于自动对行进行编号。

\documentclass{article}
\usepackage{array}
\usepackage{longtable}

\newcounter{tabcount}
\renewcommand{\thetabcount}{\alph{tabcount}.}

\newenvironment{tabforms}{%
    \setcounter{tabcount}{0}
    \begin{longtable}{
        >{\raggedright\arraybackslash}p{0.1cm}
        >{\raggedright\arraybackslash}p{4.5cm}
        >{\raggedright\arraybackslash}p{0.1cm}
        >{\raggedright\arraybackslash}p{12cm}
        }}{ \end{longtable} \vspace{-1mm}
}
\newcommand\tabform[4][]{%
    \def\temp{#1}%
    \ifx\temp\empty
        \refstepcounter{tabcount}%
        \thetabcount%
    \else
        \temp%
    \fi%
    & #2 & #3 & #4 \\ %
}
\begin{document}
\begin{tabforms}
    \tabform{Course name}{:}{History of Art}
    \tabform{Credits}{:}{4 (four)}
    \tabform{Lecturer}{:}{Raisa Andriana}
    \tabform{Room}{:}{Main hall Apolo, building A}
 \end{tabforms}
 \end{document}

上面的例子产生了预期的输出:

相关内容