上下文
我想创建一个表格,其中每行的第一列显示行号。我找到了一些方法,但都不符合我的需求
方法 1
根据接受的答案这个问题.我可以用这个最小的工作示例完成这个任务
\documentclass{article}
\usepackage{array}
\newcounter{rowcount}
\setcounter{rowcount}{0}
\begin{document}
\begin{tabular}{@{\stepcounter{rowcount}\therowcount.)\hspace*{\tabcolsep}}ll}
\hline my row 1 & 1
\\ \hline my row 2 & 2
\\ \hline my row 3 & 3
\\ \hline my row 4 & 4
\\ \hline my row 5 & 5
\\ \hline my row 6 & 6
\\ \hline my row 7 & 7
\\ \hline my row 8 & 8
\\ \hline my row 9 & 9
\\ \hline my row 10 & 10
\\ \hline
\end{tabular}
\end{document}
我不满意这种方法的原因是第一列显示的宽度不同。也就是说,如果我的表格有超过 99 行,那么行号为三位数的第一列的宽度将大于行号为两位数的列的宽度。
方法 2
根据接受的答案这个问题.我可以用这个最小的工作示例完成这个任务
\documentclass{article}
\usepackage{array,etoolbox}
\preto\tabular{\setcounter{magicrownumbers}{0}}
\newcounter{magicrownumbers}
\newcommand\rownumber{\stepcounter{magicrownumbers}\arabic{magicrownumbers}}
\begin{document}
\begin{tabular}{|@{\makebox[1em][r]{\rownumber\space}}|c|c|}
\hline my row 1 & 1
\\ \hline my row 2 & 2
\\ \hline my row 3 & 3
\\ \hline my row 4 & 4
\\ \hline my row 5 & 5
\\ \hline my row 6 & 6
\\ \hline my row 7 & 7
\\ \hline my row 8 & 8
\\ \hline my row 9 & 9
\\ \hline my row 10 & 10
\\ \hline
\end{tabular}
\end{document}
我对这种方法不满意的原因是,我需要对第一列的宽度进行硬编码,以便行号显示在单元格内,这在处理超过 999 行的表格时可能会产生不良结果,因为第一列会有一位数、两位数、三位数和四位数字。
我知道我可以通过确保所有行号都完全显示在其相应的单元格内来计算该宽度,但这是一项重复性任务,可以由计算机更好地执行。
问题
如何创建一个表格,其第一列显示行编号,同时考虑以下条件
- 行号可以是任意位数的数字。也就是说,不要假设它是一个一位数或两位数。
- 显示行号的列的所有单元格的宽度必须相同。
- (这不是必需的,但对我真的很有帮助)用户只需设置该列相应的内置列类型
l
,就可以更改显示行编号的列的对齐方式。r
c
答案1
您可以将编号放入列中,而不是@
-expression,然后自动宽度是标准的,您可以使用任何表格列对齐方式。它还有一个好处,您可以\label
在第一列中使用它来标记一行,以便与\ref
\documentclass{article}
\usepackage{array}
\newcounter{rowcount}
\begin{document}
\begin{tabular}{>{\refstepcounter{rowcount}\therowcount.)}rll}
\hline
& my row 1 & 1\\ \hline
& my row 2 & 2\\ \hline
& my row 3 & 3\\ \hline
& my row 4 & 4\\ \hline
& my row 5 & 5\\ \hline
& my row 6 & 6\\ \hline
& my row 7 & 7\\ \hline
& my row 8 & 8\\ \hline
& my row 9 & 9\\ \hline
& my row 10 & 10\\ \hline
\end{tabular}
\end{document}
答案2
您还可以使用以下方法实现此目的blkarray
:
\documentclass{article}
\usepackage{blkarray}
\begin{document}
\begin{blockarray}{|@{\hskip -1.3\tabcolsep}\BAenum!{)\hskip\labelsep\vrule\hskip\tabcolsep}l|c|}%
\hline
my row 1 & 1 \\
\hline
my row 2 & 2 \\
\hline
my row 3 & 3 \\
\hline
my row 4 & 4 \\
\hline
my row 5 & 5 \\
\hline
my row 6 & 6 \\
\hline
my row 7 & 7 \\
\hline
my row 8 & 8 \\
\hline
my row 9 & 9 \\
\hline
my row 10 & 10
\\ \hline
\end{blockarray}
\end{document}