
Hay otras preguntas similares, todas con diferentes respuestas, pero no pude encontrar ninguna que consiga lo que quiero. En la siguiente tabla, el espacio entre los números es demasiado amplio. ¿Cómo puedo reducirlo un poco?
\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}
Respuesta1
En su ejemplo, ha duplicado la separación de columnas usando un tabular
interior a tabular
. Nota: LaTeX agrega una distancia \tabcolsep
antes y después de cada columna. En su caso, tiene esa distancia antes y después de la columna del tabular interior \testmode
y antes y después de la columna del tabular exterior. Para evitar esto, debes agregar @{}
antes de la primera columna del tabular interno y después de la última columna del tabular interno:
\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}
Para explicar un poco más: de forma predeterminada, LaTeX agrega \hskip\tabcolsep
antes de comenzar una columna y después de haberla terminado. Entonces tienes la distancia \tabcolsep
antes de la primera y después de la última columna y 2\tabcolsep
entre dos columnas. Si usas @{…}
el código del argumento de @
se agregaen lugar de la distancia. Así que @{}
simplemente elimina la distancia.
Nota adicional: Recomendaría evitar reglas verticales en las tablas (ver el manual depaquetebooktabs
) y utilizarpaquetesiunitx
para columnas numéricas. Y no centraría los elementos de la primera fila de la tabla, sino que los alinearía a la izquierda. Y debido a que d=…
en el encabezado de la tabla hay algo así como matemáticas, debes configurarlo en modo matemático. En este caso tampoco lo pondría en negrita (usando, por ejemplo, \boldmath
), porque los atributos de fuente en matemáticas tienen principalmente una semántica (por ejemplo, la negrita se usa a menudo para vectores o conjuntos).
Respuesta2
No recuerdo dónde encontré esto (las ediciones con una referencia son bienvenidas), pero agregar lo siguiente directamente antes de su \begin{tabular}
declaración puede permitirle ajustar el espacio entre columnas según un valor determinado:
\addtolength{\tabcolsep}{-0.4em}
Puedes usar cualquier unidad aquí, pero en el ejemplo anterior uso em
, que es relativo al tamaño de fuente actual.
Respuesta3
Después de cinco años ...
Ahora está disponible un paquete de tablas tabularray
que define la colsep
opción de separación de columnas. En comparación con el código de la tabla "clásica", es más corto y el texto de las celdas está mejor espaciado verticalmente:
\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}
Respuesta4
Así es como puedes hacer eso tabular con {NiceTabular}
of 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}
Necesita varias compilaciones (porque nicematrix
utiliza nodos PGF/Tikz bajo el capó).