是否可以枚举表中的单元格?

是否可以枚举表中的单元格?

我想使用以下方案枚举表中的单元格:

1.     4.     7.
2.     5.     8.
3.     6.     9.

问题是我不知道表中的行数。

当然,如果我写类似的东西:

    \documentclass{article}
    \newcounter{cellnum}
    \newcommand{\itemtab}{\stepcounter{cellnum}\thecellnum.}
    \begin{document}
    \begin{tabular}{lll}
        \itemtab & \itemtab & \itemtab \\
        \itemtab & \itemtab & \itemtab \\
        \itemtab & \itemtab & \itemtab \\
    \end{tabular}
    \end{document}      

我得到了转置的结果,其中第一行第二列的单元格得到了数字2.

那么有没有办法使用列优先方案枚举单元格?或者有没有办法在表格的最开始就获取其行数?

答案1

我们需要在每张表的开头声明行号。我们为此创建了一个包装器环境,它接受两个参数 - 行号和列规范。我们还定义了一些列类型来为我们创建单元格编号 - F 表示第一列,G 表示所有其他列。

\documentclass{article}

\usepackage{calc,array}
\newcounter{rownum}
\newcounter{colnum}
\newcounter{totalrows}
\newcounter{cellnum}

\newcommand{\cell}{\stepcounter{colnum}\setcounter{cellnum}{\thecolnum*\thetotalrows+\therownum+1}\thecellnum. }
\newcommand{\firstcell}{\stepcounter{rownum}\setcounter{colnum}{-1}\cell}

\newcolumntype{F}{>{\firstcell}l}
\newcolumntype{G}{>{\cell}l}

\newenvironment{numberedtabular}[2]{%
\setcounter{totalrows}{#1}%
\setcounter{rownum}{-1}%
\setcounter{colnum}{-1}%
\begin{tabular}{#2}}
%
{\end{tabular}}


\begin{document}

Here comes the first table. 

\begin{numberedtabular}{3}{FGG}
    a & b & c \\
    d & e & f \\
    g & h & i \\
\end{numberedtabular}

Here comes the second table.

\begin{numberedtabular}{2}{FGG}
    a & b & c \\
    d & e & f \\
\end{numberedtabular}

And here comes the third.

\begin{numberedtabular}{4}{FGG}
    a & b & c \\
    d & e & f \\
    g & h & i \\
    j & l & m \\
\end{numberedtabular}

\end{document}

得出:

在此处输入图片描述

答案2

由于您在示例中没有使用表格的任何边框,因此您也可以使用multicolswith enumerate

\documentclass{article}

\usepackage{multicol}

\begin{document}

\begin{multicols}{3}
    \begin{enumerate}
    \item a
    \item b
    \item c
    \item d
    \item e
    \item f
    \item g
    \item h
    \item i
    \end{enumerate}
\end{multicols}

\end{document}

在此处输入图片描述

答案3

这是 Michael Palmer 的第二个(现已删除)答案的版本,使用文件.aux存储每个表的总行数。这样就无需指定每个表的总行数,并且可以处理文档中任意数量的枚举表。我已将大多数命令设为内部命令(包含@),以便使用的计数器不太可能干扰任何用户定义的计数器。

我已经将环境作为标准环境的包装器,但可以通过让其接受一个参数并将其传递给环境内的tabular来重写该环境以将其包含在内。tabular\begin{tabular}

\documentclass{article}

\usepackage{calc,array}
\usepackage{etoolbox}

\makeatletter
\newcounter{row@num}
\newcounter{col@num}
\newcounter{total@rows}
\newcounter{cell@num}
\newcounter{enumtbl@cnt}

\newcommand*{\@resettablcounters}{
\setcounter{row@num}{-1}
\setcounter{cell@num}{-1}
\setcounter{col@num}{-1}
}

\newcommand{\cell}{%
    \stepcounter{col@num}
    \setcounter{cell@num}
        {\value{col@num}*\value{total@rows}+\value{row@num}+1}%
        \thecell@num. }
\newcommand{\firstcell}
    {\stepcounter{row@num}\setcounter{col@num}{-1}\cell}

\newcolumntype{F}{>{\firstcell}l}
\newcolumntype{G}{>{\cell}l}

\newenvironment{enumtabular}
    {\@resettablcounters
     \stepcounter{enumtbl@cnt}
     \xdef\@tabnum{enumtab\roman{enumtbl@cnt}}
     \setcounter{total@rows}{\numexpr\csuse{\@tabnum}+1}    
    }
    {\immediate\write\@auxout{\csgdef{\@tabnum}{\therow@num}}}
\makeatother

\begin{document}
\begin{enumtabular}
\begin{tabular}{FGG}
    a & b & c \\
    d & e & f \\
    g & h & i 
\end{tabular}
\end{enumtabular}
\bigskip

\begin{enumtabular}
\begin{tabular}{FGG}
    a & b & c \\
    d & e & f \\
    g & h & i \\
    j & k & l \\
    m & n & o
\end{tabular}
\end{enumtabular}
\bigskip

\begin{enumtabular}
\begin{tabular}{FGG}
    a & b & c \\
    d & e & f \\
    g & h & i \\
    j & k & l\\
    m & n & o\\
    p & q & r\\
    s & t & u
\end{tabular}
\end{enumtabular}
\end{document}

代码输出

相关内容