每 5 行自动添加 \midrule

每 5 行自动添加 \midrule

我使用 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插入一个。\midrule5th

截屏

% 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设置一个。计数器用于对五行块内的行进行计数。因此,计数器在表之前和表头之后重置,因为表头不计数。\midrulemidruleV

更大的问题是找到一个地方放置\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}

结果

相关内容