修改默认表格行为

修改默认表格行为

我基本上以同样的方式制作所有的表格:

在此处输入图片描述

是否可以让表格自动化\toprule\midrule\bottomrules \hdashline


\documentclass{article}
\usepackage{booktabs,array,arydshln}

\setlength\dashlinedash{0.2pt}
\setlength\dashlinegap{1.5pt}
\setlength\arrayrulewidth{0.3pt}

\begin{document}

  \begin{table}[htp]
    \begin{center}
      \makebox[\textwidth][c]{
        \begin{tabular}{ccc}

          \toprule
          First & Second & Third \\
          \midrule
          AAAAA & BBBBB  & CCCCC \\ \hdashline
          DDDDD & EEEEE  & FFFFF \\ \hdashline
          GGGGG & HHHHH  & IIIII \\ \hdashline
          JJJJJ & KKKKK  & LLLLL \\ %hdashline
          \bottomrule

        \end{tabular}}
      %makebox
    \end{center}
  \end{table}

\end{document}

答案1

这更像是一个评论。你可以用 Ti 来实现这种效果Z 矩阵,使用未记录的execute at end matrix密钥。这是因为 TiZ 矩阵“知道”它有多少行和列。下面是一个非常基本的版本,说明了这一点。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{tjt263 tabular/.style={matrix of nodes,nodes in empty cells,
execute at end matrix={
\draw[very thick] (\tikzmatrixname.north west) -- (\tikzmatrixname.north east)
(\tikzmatrixname.south west) -- (\tikzmatrixname.south east);
\foreach \YY in {2,...,\the\pgfmatrixcurrentrow} 
{\path (\tikzmatrixname-\the\numexpr\YY-1\relax-1) -- (\tikzmatrixname-\YY-1) 
coordinate[midway] (aux-\YY);
\ifnum\YY=2
\draw (\tikzmatrixname.west|-aux-\YY) -- (\tikzmatrixname.east|-aux-\YY);
\else
\draw[dotted] (\tikzmatrixname.west|-aux-\YY) -- (\tikzmatrixname.east|-aux-\YY);
\fi}
}}}
\begin{document}
\begin{tikzpicture}
\matrix[tjt263 tabular]{
 First & Second & Third \\
 AAAAA & BBBBB  & CCCCC \\ 
 DDDDD & EEEEE  & FFFFF \\ 
 GGGGG & HHHHH  & IIIII \\ 
 JJJJJ & KKKKK  & LLLLL \\ 
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

这适用于您的 MWE 示例,但可能不适用于更复杂的示例。有些东西可以非常轻松地添加,例如扩展到单元格内容具有不同高度的矩阵。更难实现(据我所知尚未实现)的是支持lr类型列。这可能可以通过一些eqparbox-type 技巧来实现,但据我所知,这还没有被阐明。

答案2

您可以使用 的强大方法来做到这一点expl3

主体在 处被分割\\,然后标题行被分离出来;我们只需要关心尾随的\\,它会产生一个空行,因此我们检查它(参见代码中的注释)。

环境tjttabular有一个可选参数,默认为 3;如果您输入\begin{tjttabular}[4],您将得到一个四列表。

\documentclass{article}
\usepackage{booktabs,array,arydshln,xparse}

\ExplSyntaxOn

\NewDocumentEnvironment{tjttabular}{O{3} +b}
 {
  \tjt_tabular:nn { #1 } { #2 }
 }
 {}

\seq_new:N \l__tjt_tabular_body_seq
\tl_new:N \l__tjt_tabular_first_tl
\tl_new:N \l__tjt_tabular_last_tl

\cs_new_protected:Nn \tjt_tabular:nn
 {
  % split the body at \\
  \seq_set_split:Nnn \l__tjt_tabular_body_seq { \\ } { #2 }
  % pop the first item (the headers)
  \seq_pop_left:NN \l__tjt_tabular_body_seq \l__tjt_tabular_first_tl
  % pop the last item (possibly empty, if \\ is used in the last line)
  \seq_pop_right:NN \l__tjt_tabular_body_seq \l__tjt_tabular_last_tl
  % if the last item is not empty, put it back
  \tl_if_empty:NF \l__tjt_tabular_last_tl
   {
    \seq_put_right:NV \l__tjt_tabular_body_seq \l__tjt_tabular_last_tl
   }
  % now typeset the table, separate items by \\\hdashline
  \begin{tabular}{*{#1}{c}}
  \toprule
  \l__tjt_tabular_first_tl \\
  \midrule
  \seq_use:Nn \l__tjt_tabular_body_seq { \\ \hdashline } \\
  \bottomrule
  \end{tabular}
 }

\ExplSyntaxOff

\setlength\dashlinedash{0.2pt}
\setlength\dashlinegap{1.5pt}

\begin{document}

\begin{table}[htp]
\centering

\begin{tjttabular}
  First & Second & Third \\

  AAAAA & BBBBB  & CCCCC \\
  DDDDD & EEEEE  & FFFFF \\
  GGGGG & HHHHH  & IIIII \\
  JJJJJ & KKKKK  & LLLLL \\
\end{tjttabular}

\end{table}

\end{document}

在此处输入图片描述

请注意,\begin{center}不应在里面使用table,因为它会增加不必要的空间;\centering是正确的命令。

也不\makebox[\textwidth][c]{...}做任何事,因为\centering已经处理了定心业务。

相关内容