\hline 和 \cline 周围的文本变得非常拥挤!

\hline 和 \cline 周围的文本变得非常拥挤!

在表格中,当我使用 \hline 和 \cline 时,行会非常靠近文本,看起来很拥挤。例如,在下面的例子中,G 几乎触及它上面的行。这看起来非常拥挤。使用 \toprule 和 \midrule 不会发生这种情况。如何使用 \hline 和 \cline 提供一些空间?

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

\begin{document}

\begin{table}[ht!]
    \begin{tabular}{
            >{\raggedright}p{0.2\textwidth}
            >{\raggedright}p{0.2\textwidth}
            >{\raggedright}p{0.2\textwidth}
            >{\raggedright}p{0.4\textwidth}
        }
        \toprule
        \textbf{Layer} & \textbf{Provider} & \textbf{Functionality} & \textbf{Uses}\tabularnewline
        \midrule
        A       &   B       &   C   &   D       \tabularnewline
                &           &       &   E       \tabularnewline
                &           &       &   F       \tabularnewline
        \hline
        G       &   H       &   I   &   J       \tabularnewline
                &           &       &   K       \tabularnewline
                \cline{2-4}
                &   L       &       &   M       \tabularnewline
                &           &       &           \tabularnewline
        \cline{2-4}
                &   N       &   O   &   P       \tabularnewline
        \cline{2-4}
                &   Q       &       &           \tabularnewline
        \hline
        R       &   S       &   T   &   U       \tabularnewline
        \cline{2-4}
                &   V       &   W   &   X       \tabularnewline
        \cline{2-4}
                &   Y       &   Z   &   1       \tabularnewline
        \hline
        2       &   3       &   4   &   5       \tabularnewline
        \hline      
    \end{tabular}
    \caption{India Stack APIs}
    \label{table:india_stack_1}
\end{table}     

\end{document}

在此处输入图片描述

答案1

您可能希望分别用\hline和替换和。\cline\midrule\cmidrule

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

\begin{document}

\begin{table}[ht!]
    \begin{tabular}{
            >{\raggedright}p{0.2\textwidth}
            >{\raggedright}p{0.2\textwidth}
            >{\raggedright}p{0.2\textwidth}
            >{\raggedright}p{0.4\textwidth}
        }
        \toprule
        \textbf{Layer} & \textbf{Provider} & \textbf{Functionality} & \textbf{Uses}\tabularnewline
        \midrule
        A       &   B       &   C   &   D       \tabularnewline
                &           &       &   E       \tabularnewline
                &           &       &   F       \tabularnewline
        \midrule
        G       &   H       &   I   &   J       \tabularnewline
                &           &       &   K       \tabularnewline
                \cmidrule{2-4}
                &   L       &       &   M       \tabularnewline
                &           &       &           \tabularnewline
        \cmidrule{2-4}
                &   N       &   O   &   P       \tabularnewline
        \cmidrule{2-4}
                &   Q       &       &           \tabularnewline
        \midrule
        R       &   S       &   T   &   U       \tabularnewline
        \cmidrule{2-4}
                &   V       &   W   &   X       \tabularnewline
        \cmidrule{2-4}
                &   Y       &   Z   &   1       \tabularnewline
        \midrule
        2       &   3       &   4   &   5       \tabularnewline
        \midrule      
    \end{tabular}
    \caption{India Stack APIs}
    \label{table:india_stack_1}
\end{table}     
\end{document}

在此处输入图片描述

答案2

我认为您的表格的主要问题不是某些水平线周围的间距(缺乏足够的间距)。相反,表格的宽度目前超出了\textwidth相当多:由于 LaTeX\tabcolsep在列的两边插入了空白填充,因此表格的宽度为\textwidth+8\tabcolsep。大多数文档类将默认值设置为\tabcolsep6pt8*6pt = 48pt = 约 2/3 英寸,或约 17 毫米。很明显,不是吗?

而不是降低可用的手动调整列宽(例如,按2\tabcolsep)以使表格适合文本块,您可以使用包tabularx并使用同名tabularx环境及其列类型来排版表格材料。下面的代码显示了如何在使用基于 的设置X时保持第 4 列和其他 3 列之间所需的 2:1 相对宽度比。tabularx

接下来,既然你booktabs无论如何都要加载包,一定要将剩余的\hline\cline指令替换为\midrule\bottomrule\cmidrule指令。实际上,如果这是我的表格,我会使用\addlinespace而不是\cmidrule——空格在提供视觉突出性方面与(直线)一样有效。

嗯,正如你查询下面的评论中提到的那样,\cline即使使用和\hline,也可以使表格看起来更好,.,通过在需要的地方插入排版支柱。但是,对于手头的表格,尤其是考虑到你正在使用该booktabs包,我实在看不出有什么理由通过插入排版支柱来解决间距问题。

在此处输入图片描述

\documentclass{article}

\usepackage{tabularx} % tabularx loads array automatically
\usepackage{ragged2e} % for '\RaggedRight' directive
\newcolumntype{L}[1]{>{\RaggedRight\hspace{0pt}\hsize=#1\hsize}X} % permit hyphenation

\usepackage{booktabs}

\begin{document}

\begin{table}[ht!]
    \begin{tabularx}{\textwidth}{@{} *{3}{L{0.8}} L{1.6} @{} } % 3*0.8+1.6 = 4 = # of cols.
        \toprule
        \textbf{Layer} & \textbf{Provider} & \textbf{Functionality} & \textbf{Uses}\\
        \midrule
        A       &   B       &   C   &   D       \\
                &           &       &   E       \\
                &           &       &   F       \\
        \midrule
        G       &   H       &   I   &   J       \\
                &           &       &   K       \\
        \addlinespace  % \cmidrule(l){2-4}
                &   L       &       &   M       \\
                %%% &           &       &           \\  % why this all-blank line?
        \addlinespace  % \cmidrule(l){2-4}
                &   N       &   O   &   P       \\
        \addlinespace  % \cmidrule(l){2-4}
                &   Q       &       &           \\
        \midrule
        R       &   S       &   T   &   U       \\
        \addlinespace  % \cmidrule(l){2-4}
                &   V       &   W   &   X       \\
        \addlinespace  % \cmidrule(l){2-4}
                &   Y       &   Z   &   1       \\
        \midrule
        2       &   3       &   4   &   5       \\
        \bottomrule      
    \end{tabularx}
    \caption{India Stack APIs} \label{table:india_stack_1}
\end{table}     

\end{document}

答案3

看着这个问题,我认为虽然 OP 提供的 MWE 适合问题的主题(文本和水平线之间的空间),但实际上表格将包含有用的信息,而不仅仅是字母表,因为已经为列的内容分配了水平空间。

我想知道提供的答案在使用真实数据时会如何。所以我做了一个模拟,假设字段 Provider 将包含一些名称和联系方式(3 行),Functionality 将是一个更大的描述,Uses 也是如此。

现在,该表要求我们以提供商、功能和用途的各种组合来显示信息。

我假设多个提供商可能会提供相同的功能,而一个功能可能会有多种用途。从问题中看不出这一点,但我认为这是合理的现实假设,值得测试。

如果情况确实如此,那么第一层将是 1-1-3,第二层将是 1-1-2 和 3-1-2,最后两层将是简单的 1-1-1。

我定义了几个\newcommand\A、、\B\C来保存虚拟文本(取自的英文单词kantlipsum)来替换 A、B、C......以便使用表格作为模板。

第一个测试使用了 Mico 的答案。以下是结果,显示了前两层。使用

\documentclass[10pt]{article}
\usepackage[left=1.5cm, right=1.5cm, top=2cm]{geometry}

米科

在第一层中,由于功能长度的原因,用途 1 和用途 2 之间存在不理想的差距。第二层以及第三层和第四层供应商中也存在同样的情况。

为了解决这些不便,我准备了一个基于nicematrix提供命令的解决方案\Block。它是设计表格所需的唯一包。

该块允许在内部使用 \\,因此可以选择在哪里断线(例如在提供商的名称和电子邮件之间)。

可以看出,即使不使用更多水平线(尽管\cline{2-4}在某些地方可以是一种选择),现在视觉分组使得提供商、功能和用途之间的关联更容易辨别。 好3

\documentclass[10pt]{article}

\usepackage[left=1.5cm, right=1.5cm, top=2cm]{geometry}

\usepackage{nicematrix}

\newcolumntype{P}[1]{>{\raggedright\arraybackslash}m{#1\textwidth}}

\newcommand{\A}{Logic} %L1
\newcommand{\B}{1. The Ideal of \\ practical  reason  is a\\ representation} % P1
\newcommand{\C}{The manifold, it teaches us\\ nothing whatsoever regarding  the \\content of hypothetical principles} %F1
\newcommand{\D}{1. As is shown in the writings of Aristotle, the things in themselves are a representation of time} %U1

\newcommand{\E}{2. Natural causes  constitute the whole content for the paralogisms.} %U1
\newcommand{\F}{3. Our  experience is just as necessary as  philosophy} %U1
\newcommand{\G}{Philosophy} %L2
\newcommand{\Hi}{1. This expounds the\\ contradictory rules\\ of metaphysics} % P2

\newcommand{\I}{The never-ending regress in the\\ series of empirical conditions has\\ lying before it the  paralogisms\\ of human reason; with the sole \\exception of the architectonic of \\pure reason } %F2
\newcommand{\J}{1. The transcendental unity of apperception constitutes the whole content for the noumena}  %U2
\newcommand{\K}{2. The  transcendental aesthetic can not take account of the objects in space and time}  %U2
\newcommand{\Li}{2. Knowledge of the \\  Categories is a \\ posteriori} % P2

\newcommand{\M}{1. To explain that our ideas are \\ the clue to  the discovery of   our\\ understanding}  %U2
\newcommand{\N}{3. Our understanding stands in need of our judgements} % P2
\newcommand{\Oi}{To avoid all misapprehension,\\ it is necessary to explain\\ that the pure employment of the\\ architectonic of practical reason} %F2
\newcommand{\Pii}{2. It remains amystery why the\\ discipline of natural reason is a \\body of demonstrated science}  %U2

\newcommand{\Q}{4. The practical employment of the objects in space } % P2
\newcommand{\R}{Knowledge} %L3
\newcommand{\Si}{1. Antinomies exclude the possibility of natural causes} % P3
\newcommand{\T}{The reader should be careful to observe that the objects in space and time  are the mere results of the power of time} %F3

\newcommand{\U}{1. Irrespective of all empirical conditions, our concepts   are what first give rise to our experience} %U3
\newcommand{\V}{2. Because of our   necessary ignorance of the conditions}  % P3
\newcommand{\W}{The architectonic of natural reason is the key to understanding} %F3
\newcommand{\X}{1. Metaphysics excludes the possibility of the manifold}   %U3

\newcommand{\Y}{3. It is necessary to explain that our ideas}  % P3
\newcommand{\Z}{A representation of the never-ending regress in the series of empirical conditions} %F3

\newcommand{\Ai}{1. The paralogisms constitute a body of demonstrated doctrine} %U3
\newcommand{\Aii}{Science} %L4
\newcommand{\Aiii}{1. The Ideal proves the validity of the objects in space and time.} %P4
\newcommand{\Aiv}{Is it true that metaphysics can not take  account of the paralogisms of human reason} %F4
\newcommand{\Av}{1. The power of pure logic, a blind but indispensable function of the soul} %U4

\begin{document}

\begin{table}[ht!]
        
\begin{NiceTabular}{>{\bfseries}l P{0.2}  P{0.3}  P{0.3}}[% 
                cell-space-top-limit = 5pt,
                cell-space-bottom-limit = 6pt
                ]   
    \hline
    Layer               & \bfseries Provider & \bfseries Functionality & \centering\bfseries\arraybackslash Uses \\
    \hline
    \Block{3-1}{\A}     & \Block[l]{3-1}{\B} & \Block[l]{3-1}{\C}       &  \D   \\
                        &                    &                          &  \E   \\
                        &                    &                          &  \F   \\ 
    \hline
    \Block{5-1}{\G}     & \Block[l]{2-1}{\Hi}&  \Block[l]{2-1}{\I}      &  \J   \\
                        &                    &                          &  \K   \\[4em] % add vertical separation
                        & \Block[l]{}{\Li}   & \Block[l]{3-1}{\Oi}      &  \Block[l]{3-1}{\M \\ \\ \Pii}  \\ 
    %%%                 &                    &                          &   \\    
                        & \N                 &                          &       \\
                        & \Q                 &                          &       \\  
    \hline
    \Block{3-1}{\R}     & \Si                & \T                       & \U    \\
                        & \V                 & \W                       & \X    \\
                        & \Y                 & \Z                       & \Ai   \\
    \hline
                \Aii    &  \Aiii             & \Aiv                     & \Av   \\
    \hline
\end{NiceTabular}
\caption{India Stack APIs}
\label{table:india_stack_2}
\end{table} 

\end{document}

确实,其他方法可以改进!有许多可用的工具,我的假设不在所问的问题范围内。

相关内容