在表格中,当我使用 \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
。大多数文档类将默认值设置为\tabcolsep
;6pt
8*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}
在某些地方可以是一种选择),现在视觉分组使得提供商、功能和用途之间的关联更容易辨别。
\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}
确实,其他方法可以改进!有许多可用的工具,我的假设不在所问的问题范围内。