我使用 booktabs 包编写了一个列出 40 名学生成绩的表格。如何midrule
每 5 行自动写入命令?
\documentclass{article}
\usepackage{booktabs}
\begin{document}
\begin{table}[h]
\centering
\begin{tabular}{rclc}
\toprule
Number & Student Id & Name & Score \\
\midrule % adding automatically
1 & 14-001 & Andy & 75 \\
2 & & & \\
3 & & & \\
4 & & & \\
5 & & & \\
\midrule % adding automatically
6 & & & \\
7 & & & \\
8 & & & \\
9 & & & \\
10 & & & \\
\midrule % adding automatically
11 & & & \\
\bottomrule
\end{tabular}
\caption{A List of Student Scores}
\label{}
\end{table}
\end{document}
答案1
这是一个使用pgfplotstable
包裹。
这个想法是将数据读入宏(edytable
下面调用),然后使用命令进行排版
\pgfplotstabletypeset[
columns/Student Id/.style={string type},
columns/Name/.style={string type},
every head row/.style={
before row={%
\toprule
},
after row=\midrule},
every last row/.style={after row=\bottomrule},
every nth row={5}{before row=\midrule},
]{\edytable}
与您的问题特别相关的部分是
every nth row={5}{before row=\midrule},
它指示在每一行pgfplotstable
插入一个。\midrule
5th
% arara: pdflatex
% !arara: indent: {overwrite: yes}
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\begin{document}
\pgfplotstableread[col sep = &, row sep = \\]{%
Number & Student Id & Name & Score \\
1 & 14-001 & Andy & 75 \\
2 & & & \\
3 & & & \\
4 & & & \\
5 & & & \\
6 & & & \\
7 & & & \\
8 & & & \\
9 & & & \\
10 & & & \\
11 & & & \\
}\edytable
\pgfplotstabletypeset[
columns/Student Id/.style={string type},
columns/Name/.style={string type},
every head row/.style={
before row={%
\toprule
},
after row=\midrule},
every last row/.style={after row=\bottomrule},
every nth row={5}{before row=\midrule},
]{\edytable}
\end{document}
有很多不同的方法可以读入数据edytable
- 我使用它们col sep = &, row sep =\\
只是因为它使用了可用的代码。
答案2
以下宏每五行\midruleV
设置一个。计数器用于对五行块内的行进行计数。因此,计数器在表之前和表头之后重置,因为表头不计数。\midrule
midruleV
更大的问题是找到一个地方放置\midruleV
。该示例通过两次退出当前组将其放在最后一个单元格之后。因此,行不应该通过省略单元格而提前结束。
在最后一行结束之前\vadjust{\resetmidruleV}
阻止规则插入到五行的倍数之后并且表格以\midrule
和 \bottomrule
。
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\newcounter{midruleV}
\newcommand*{\midruleV}{%
\aftergroup\aftergroup\aftergroup\midruleVaux
}
\newif\ifmidruleV
\makeatletter
\newcommand*{\midruleVaux}{%
\noalign{%
\stepcounter{midruleV}%
\ifnum\value{midruleV}=5 %
\global\midruleVtrue
\setcounter{midruleV}{0}%
\else
\global\midruleVfalse
\fi
}
\ifmidruleV\midrule\fi
}
\newcommand*{\resetmidruleV}{\setcounter{midruleV}{0}}
\makeatother
\begin{document}
\begin{table}[h]
\centering
\resetmidruleV
\begin{tabular}{rclc<{\midruleV}}
\toprule
Number & Student Id & Name & Score \\
\noalign{\resetmidruleV}%
\midrule % adding automatically
1 & 14-001 & Andy & 75 \\
2 & & & \\
3 & & & \\
4 & & & \\
5 & & & \\
6 & & & \\
7 & & & \\
%8 & & & \\
9 & & & \\
10 & & & \\
11 & & & \vadjust{\resetmidruleV}\\
\bottomrule
\end{tabular}
\caption{A List of Student Scores}
\label{}
\end{table}
\end{document}