还有其他类似的问题,答案各不相同,但我找不到一个能满足我要求的。下表中数字之间的间距太大。我该如何缩小一点?
\newcommand{\testmode}[2] {
\begin{tabular}{c}
\textbf{#1} \\ \textbf{d=#2}
\end{tabular}
}
\begin{table}[ht]
\begin{tabular}{l | c c c | c c c |}
\cline{2-7}
& \multicolumn{3}{c|}{\textbf{Single}} & \multicolumn{3}{c|}{\textbf{Double}} \\
\cline{2-7}
& \testmode{Scalar}{1} & \testmode{SSE-4}{4} & \testmode{AVX-2}{8} & \testmode{Scalar}{1} & \testmode{SSE-4}{2} & \testmode{AVX-2}{4} \\
\hline
\multicolumn{1}{|c|}{\textbf{Eytzinger} } & 209.86 & 370.18 & 411.25 & 180.85 & 245.37 & 262.61 \\
\multicolumn{1}{|c|}{\textbf{Classic Offset} } & 213.28 & 363.35 & 476.10 & 209.04 & 247.02 & 208.63 \\
\hline
\end{tabular}
\caption{Throughput in millions of searches per second with vector $X$ of size 15}
\label{tab:results0}
\end{table}
答案1
tabular
在您的示例中,您使用a 内的a 将列间距加倍tabular
。注意:LaTeX\tabcolsep
在每列前后添加距离。在您的例子中,内部表格的列前后距离为\testmode
,外部表格的列前后距离为。为避免这种情况,您应该在@{}
内部表格的第一列之前和内部表格的最后一列之后添加:
\documentclass{article}
\begin{document}
\newcommand{\testmode}[2] {%
\begin{tabular}{@{}c@{}}% Avoid doubling \tabcolsep
\textbf{#1} \\ \textbf{d=#2}
\end{tabular}%
}
\begin{table}[ht]
\begin{tabular}{l | c c c | c c c |}
\cline{2-7}
& \multicolumn{3}{c|}{\textbf{Single}} & \multicolumn{3}{c|}{\textbf{Double}} \\
\cline{2-7}
& \testmode{Scalar}{1} & \testmode{SSE-4}{4} & \testmode{AVX-2}{8} & \testmode{Scalar}{1} & \testmode{SSE-4}{2} & \testmode{AVX-2}{4} \\
\hline
\multicolumn{1}{|c|}{\textbf{Eytzinger} } & 209.86 & 370.18 & 411.25 & 180.85 & 245.37 & 262.61 \\
\multicolumn{1}{|c|}{\textbf{Classic Offset} } & 213.28 & 363.35 & 476.10 & 209.04 & 247.02 & 208.63 \\
\hline
\end{tabular}
\caption{Throughput in millions of searches per second with vector $X$ of size 15}
\label{tab:results0}
\end{table}
\end{document}
进一步解释一下:默认情况下,LaTeX 会\hskip\tabcolsep
在开始一列之前和结束一列之后添加。因此,您有\tabcolsep
第一列之前和最后一列之后以及2\tabcolsep
两列之间的距离。如果您使用@{…}
参数的代码,@
则会添加而不是距离。所以@{}
只是消除了距离。
补充说明:我建议避免在表格中使用垂直规则(请参阅包裹booktabs
)并使用包裹siunitx
用于数字列。我不会将第一行表格的元素居中,而是左对齐。由于d=…
表格头部类似于数学,因此您应该将其设置为数学模式。在这种情况下,我也不会将其设为粗体(例如使用\boldmath
),因为数学中的字体属性大多具有语义(例如,粗体通常用于向量或集合)。
答案2
我不记得在哪里找到这个(欢迎参考编辑),但在语句之前直接添加以下内容\begin{tabular}
可以让您根据给定值调整列间距:
\addtolength{\tabcolsep}{-0.4em}
您可以在这里使用任何单位,但在上面的示例中,我使用了em
,它是相对于当前字体大小的。
答案3
五年后……
现在可以使用表格包tabularray
来定义列分隔定义colsep
选项。与“经典”表格相比,其代码更短,单元格中的文本垂直间距更好:
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{table}[ht]
\begin{tblr}{hline{4,Z} = {0.8pt}, vline{1} = {4-Z}{solid},
colsep = {4pt}, % <--- reduce tabcolsep from 6pt to 4pt
colspec = {Q[l, font=\bfseries] | *{3}{X[c]} | *{3}{X[c]} |},
row{1-3} = {font=\bfseries}
}
\cline[0.8pt]{2-Z}
& \SetCell[c=3]{c} Single
& & & \SetCell[c=3]{c} Double
& & \\
\cline{2-7}
& Scalar & SSE-4 & AVX-2 & Scalar & SSE-4 & AVX \\
& D=1 & D=4 & D=8 & D=1 & D=4 & D=8 \\
Eytzinger
&209.86 &370.18 &411.25 & 180.85 & 245.37 & 262.61 \\
Classic Offset
&213.28 &363.35 &476.10 & 209.04 & 247.02 & 208.63 \\
\end{tblr}
\caption{Throughput in millions of searches per second with vector $X$ of size 15}
\label{tab:results0}
\end{table}
\end{document}
答案4
{NiceTabular}
下面显示了如何使用 制作表格nicematrix
。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\begin{table}[ht]
\setlength{\tabcolsep}{4pt}
\renewcommand{\arraystretch}{1.4}
\begin{NiceTabular}{>{\bfseries}l*{6}{X[c]}}[hvlines,corners=NW]
\RowStyle[bold,nb-rows=3]{}
& \Block{1-3}{Single}
& & & \Block{1-3}{Double} \\
& Scalar & SSE-4 & AVX-2 & Scalar & SSE-4 & AVX \\
& D=1 & D=4 & D=8 & D=1 & D=4 & D=8 \\
Eytzinger
&209.86 &370.18 &411.25 & 180.85 & 245.37 & 262.61 \\
Classic Offset
&213.28 &363.35 &476.10 & 209.04 & 247.02 & 208.63 \\
\end{NiceTabular}
\caption{Throughput in millions of searches per second with vector $X$ of size 15}
\label{tab:results0}
\end{table}
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。