我想要一个水平表,如下所示:
但是,当使用通常的方法创建表时,预先定义列数很快就会变得很麻烦(特别是因为我想使用数据工具生成它们):
\begin{tabular}{ | l | l | l | l | l | l | l | l | l | l | l | l | l | l | }
我也希望它是多行的。 有更好的方法吗?
答案1
如果你指定的列数多于你使用的列数,并不会发生太糟糕的事情,所以如果你使用
{|*{50}{l|}}
并且没有一行超过 3 个条目,LaTeX 不使用额外的 col 规范,只是创建一个 3 列表格。
答案2
(La)TeXtabular
不需要预定义行数。但是,对于列,这在常规设置中是必需的。您可以使用规范来组合类似的列规范*{<num>}{<col spec>}
。这将重复<col spec>
多次<num>
。因此,定义
\begin{tabular}{ | *{14}{l|} }
相当于
\begin{tabular}{ | l | l | l | l | l | l | l | l | l | l | l | l | l | l | }
并且在代码可读性方面要好得多。
答案3
我不知道我是否完全理解你所说的“必须预先定义行数”的意思(你的意思是写列?)。例如,只要您知道表格应该包含左对齐的标题列,并且n居中数据列 - 所有列都由垂直线分隔,根据您给出的示例 - 以下操作无需太多设置成本即可工作(我假设n = 10
):
\begin{table}
\caption{An easily defined tabular environment} \label{tab:easy}
\begin{tabular}{|l*{10}{|c}|}
...
\end{tabular}
\end{table}
附录:假设表格(第一行或标题行除外)将用数据工具填充,并且您事先不知道确切的数据列数。但是,只要您知道最大可能数字——比如说,15——您可以使用该信息设置环境tabular
。即,您将设置\begin{tabular}{|l*{15}{|c}|}
。如果实际表格最终只包含 [!] 12 个数据列,则指定过多的居中列数不会造成任何损害。
答案4
一个简单的解决方案与tblr
环境tabularray
包:它不需要预定义的列数。
\documentclass{article}
\usepackage[margin=1cm]{geometry}
\usepackage{tabularray}
\begin{document}
\begin{center}
\begin{tblr}{hlines, vlines}
A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D \\
A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D \\
\end{tblr}
\end{center}
\bigskip
\begin{center}
\begin{tblr}{hlines, vlines, columns={5mm}} % all columns have fixed widths
A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D \\
A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D \\
\end{tblr}
\end{center}
\bigskip
\begin{center}
\begin{tblr}{hlines, vlines, columns={co=1}} % all columns are X columns
A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D \\
A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D & A & B & C & D \\
\end{tblr}
\end{center}
\end{document}