Latex 中的表格--如何制作完美的列线?

Latex 中的表格--如何制作完美的列线?

以下代码与表格相关。但是,列线是不连续的,我需要从上到下的完美线条。该怎么做?

\begin{table*}[t!]
    \caption{Table} 
    \label{tab:tbl2}
    \centering % center the table
    \begin{tabular}{c | c | c c | c} 
    \toprule 
    {} & \multicolumn{2}{c}{a}  & \multicolumn{2}{c}{b}  \\ 
    \cmidrule(lr){2-3} \cmidrule(lr){4-5}
    {c}  & d  & e & f  & g \\
    \hline
    \multirow{2}{*}{h}  
    & \multirow{2}{*}{i}        
    & j
    & \multirow{2}{*}{k}
    \\
    {} & {} & f & {} & h
    \\
    \midrule
    \multirow{4}{*}{l} 
    & \multirow{4}{*}{m}        
    & n
    & 
    &  
    \\
    & {} & b & $ c 
    \\ 
    & {} & d & f 
    \\
    & & f & &
    \\
    \bottomrule
    \end{tabular}
\end{table*} 

答案1

我相信在这个网站上,许多(大多数?)旨在让您的餐桌看起来有吸引力的建议将重点放在不是根本不需要使用垂直线。它们没必要!真的!换句话说,“完美”的表格既不需要垂直线,也不会从中受益。此外,您会发现这里有很多建议,建议使用包的线条绘制宏来booktabs代替\hline\cline

就我个人而言,我当然赞同这些观点。除了遵循上一段给出的建议外,我还将消除第一列左侧和最后一列右侧的空白填充,并且不会对第二列使用右侧修剪\cmidrule。而且,我会将单独的指令替换\hline\midrule

以下截图显示了前后对比。左侧的表格基于您的代码,而右侧的表格则实现了上述建议。(为了让表格看起来不那么抽象,我把所有字母都增加了三倍。)

在此处输入图片描述

\documentclass{article}
\usepackage{booktabs,multirow}

\begin{document}
\begin{table}[ht!]
\centering
\begin{minipage}[t]{0.45\textwidth}
    \centering
    \caption{Before} 
    \label{tab:before}
    \centering
    \begin{tabular}{c | c | c c | c} 
    \toprule 
    {} & \multicolumn{2}{c}{aaa}  & \multicolumn{2}{c}{bbb}  \\ 
    \cmidrule(lr){2-3} \cmidrule(lr){4-5}
    {ccc}  & ddd  & eee & fff  & ggg \\
    \hline
    \multirow{2}{*}{hhh}  
    & \multirow{2}{*}{iii}        
    & jjj
    & \multirow{2}{*}{kkk}
    \\
    {} & {} & fff & {} & hhh
    \\
    \midrule
    \multirow{4}{*}{lll} 
    & \multirow{4}{*}{mmm}        
    & nnn
    & 
    &  
    \\
    & {} & bbb & $ccc$ 
    \\ 
    & {} & ddd & fff 
    \\
    & & fff & &
    \\
    \bottomrule
    \end{tabular}
\end{minipage}
\quad
\begin{minipage}[t]{0.45\textwidth}
    \centering
    \caption{After} 
    \label{tab:after}
    \centering
    \begin{tabular}{@{} *{5}{c} @{}} 
    \toprule 
    & \multicolumn{2}{c}{aaa} & \multicolumn{2}{c@{}}{bbb}  \\ 
    \cmidrule(lr){2-3} \cmidrule(l){4-5}
    {ccc}  & ddd  & eee & fff  & ggg \\
    \midrule% not "\hline"
    \multirow{2}{*}{hhh} & \multirow{2}{*}{iii} & jjj & \multirow{2}{*}{kkk} \\
    & & fff & & hhh \\
    \midrule
    \multirow{4}{*}{lll} & \multirow{4}{*}{mmm} & nnn \\
    & & bbb & $ccc$ \\ 
    & & ddd & fff \\
    & & fff \\
    \bottomrule
    \end{tabular}
\end{minipage}
\end{table} 
\end{document}

答案2

这是你想要的?

MWE:

\documentclass[a4paper,12pt]{article}

\usepackage{float} 
\usepackage{lscape} 
\usepackage{booktabs} 
\usepackage{tabularx} 
\usepackage{multirow}
\usepackage{array}
\usepackage{enumitem}
\begin{table*}[t!]
    \caption{Table} 
    \label{tab:tbl2}
    \centering % center the table
    \begin{tabular}{ccccc} 
    \hline 
    {}      & \multicolumn{2}{c}{a}                 & \multicolumn{2}{c}{b}                 \\ \cmidrule(lr){2-3} \cmidrule(lr){4-5}
    {c}     & d                                     & e                     &   f   & g     \\  \hline
    \multirow{2}{*}{h}                              & \multirow{2}{*}{i}    &   j   & \multirow{2}{*}{k}    \\
    {}      & {}                                    & f                     &   {}  & h     \\  \hline
    \multirow{4}{*}{l}                              & \multirow{4}{*}{m}    &   n   & {}    \\
     {}     & {}                                    & b                     &   \$  & c     \\ 
     {}     & {}                                    & d                     &   f   & {}    \\
     {}     & {}                                    & f                     &   {}  & {}    \\
    \hline
    \end{tabular}
\end{table*}
\end{document}

在此处输入图片描述

答案3

如果你真的想要垂直规则与水平规则兼容booktabs(即使这是一点也不本着 的精神booktabs),您应该{NiceTabular}使用nicematrix

\documentclass{article}
\usepackage{booktabs}
\usepackage{nicematrix}
\usepackage{caption}

\begin{document}
\begin{table}[ht!]
\centering
    \caption{Before} 
    \label{tab:before}
    \centering
    \begin{NiceTabular}{c | c | c c | c} 
    \toprule 
      & \multicolumn{2}{c}{aaa}  & \Block{1-2}{bbb}  \\ 
    \cmidrule(lr){2-3} \cmidrule(lr){4-5}
    ccc  & ddd  & eee & fff  & ggg \\
    \hline
    \Block{2-1}{hhh}  
    & \Block{2-1}{iii}        
    & jjj
    & \Block{2-1}{kkk}
    \\
    & & fff & & hhh
    \\
    \midrule
    \Block{4-1}{lll} 
    & \Block{4-1}{mmm}        
    & nnn
    & 
    &  
    \\
    & & bbb & $ccc$ 
    \\ 
    & & ddd & fff 
    \\
    & & fff & &
    \\
    \bottomrule
    \end{NiceTabular}
\end{table}
\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容