多列长表或枚举

多列长表或枚举

我想生成一个多列表格,该列表格包含在文档的列内,并跨页面拆分。这里有几个类似的问题

如何创建两列布局的非常长的表格?

双列长表或表格

但它们似乎都未能真正解决问题。

标准:

表格/列表将通过循环生成,行数任意。它应该分页。它应该可以在多列环境中使用。

最接近的解决方案似乎是使用列表而不是表格,但当列表被包装在多列环境中时,这存在对齐顶行的问题。以下是示例文档:

\documentclass[12pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{xcolor,array}
\usepackage{multicol}
\usepackage{ifthen,enumitem}
\def\stnum{30} % number of items
\newcolumntype{C}{>{\centering}p{.5in}}

\setlist{nolistsep}
\pagestyle{empty}
\begin{document}

\enlargethispage{3\baselineskip}
\begin{multicols*}{2}
\begin{enumerate}[label={\bfseries\arabic*.\qquad},leftmargin=1.3in]
\item[Item \#]
\whiledo{\value{enumi}<\stnum}{
\item \begin{tabular}{CC}T & F\end{tabular}
\item[]{\color{black!20}\rule{1.5in}{3ex}}
}
\end{enumerate}
\end{multicols*}
\end{document}

主要问题是如何正确排列行(就好像这是一个表格一样)。次要问题是当列换行时,会出现相当于重复的列标题。

以下是上述文档输出的部分图片:

代码输出

答案1

可以通过重新定义为第一列和第二列来欺骗supertabular在环境中工作。我还需要在第一列的底部粘贴高度 0、宽度规则。没有它,就会发生奇怪的事情。multicols\newpage\columnbreak\newpage\linewidth

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{xcolor,supertabular,multicol}
\newcount\n
\n=0
\def\tablebody{}
\makeatletter
\loop\ifnum\n<300
        \advance\n by1
        \protected@edef\tablebody{\tablebody
                \textbf{\number\n.}&
                \hfill T\hfill\hfill F\hfill\hskip0pt\endgraf
                \vskip.5\baselineskip
                \color@begingroup
                \color{black!20}
                \hrule height3ex
                \color@endgroup
                \tabularnewline
        }
\repeat
\makeatother
\pagestyle{empty}
\begin{document}
\begin{multicols*}{2}
\let\mcnewpage=\newpage
\makeatletter
\renewcommand\newpage{%
        \if@firstcolumn
                \hrule width\linewidth height0pt
                \columnbreak
        \else
                \mcnewpage
        \fi
}
\makeatother
\tablehead{Item \#&\\}
\begin{supertabular}{lp{1.5in}}
\tablebody
\end{supertabular}
\end{multicols*}
\end{document}

我实际上并不确定这是生成身体的最佳方式,但它确实有效。 在此处输入图片描述

答案2

以下是针对您的主要问题(正确排列行)的一个非常粗略的解决方案:使用环境tabbing。如果我没记错的话,没有简单的方法可以将制表符“单元格”的内容居中,但tabbing允许在环境内进行列/分页。诀窍是使用\\*以禁止在某些行之后进行分页。

\documentclass[12pt]{article}

\usepackage[margin=1in]{geometry}

\usepackage{multicol,xcolor}

\usepackage{ifthen}
\def\stnum{30} % number of items

\newcounter{mytabbing}

\begin{document}

\begin{multicols*}{2}
\setcounter{mytabbing}{0}
\begin{tabbing}
\rule{0.7in}{1pt} \= \rule{0.7in}{1pt} \= \rule{0.7in}{1pt} \kill
\whiledo{\value{mytabbing}<\stnum}{%
  \stepcounter{mytabbing}%
  \themytabbing  \> T \> F \\* % "\\" would produce an incorrect column break
  \> {\color{black!20}\rule{1.4in}{2.8ex}} \\
}
\end{tabbing}
\end{multicols*}

\end{document}

相关内容