
Existem outras perguntas semelhantes, todas com respostas diferentes, mas não consegui encontrar nenhuma que atinja o que desejo. Na tabela abaixo, o espaçamento entre os números é muito grande. Como posso encolher um pouco?
\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}
Responder1
No seu exemplo, você dobrou a separação das colunas usando a tabular
dentro de a tabular
. Nota: LaTeX adiciona uma distância \tabcolsep
antes e depois de cada coluna. No seu caso você tem essa distância antes e depois da coluna da tabular interna \testmode
e antes e depois da coluna da tabular externa. Para evitar isso, você deve adicionar @{}
antes da primeira coluna da tabela interna e depois da última coluna da tabela interna:
\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 um pouco mais: Por padrão, o LaTeX adiciona \hskip\tabcolsep
antes de iniciar uma coluna e depois de terminar uma coluna. Então você tem a distância \tabcolsep
antes da primeira e depois da última coluna e 2\tabcolsep
entre duas colunas. Se você usar @{…}
o código do argumento de @
é adicionadoem vez da distância. Então @{}
apenas remove a distância.
Nota adicional: eu recomendaria evitar regras verticais em tabelas (veja o manual dopacotebooktabs
) e para usarpacotesiunitx
para colunas numéricas. E eu não centralizaria os elementos da primeira linha da tabela, mas os alinharia à esquerda. E como d=…
no cabeçalho da tabela há algo parecido com matemática, você deve configurá-la no modo matemático. Neste caso eu também não colocaria em negrito (usando, por exemplo, \boldmath
), porque os atributos de fonte em matemática têm principalmente uma semântica (por exemplo, negrito é frequentemente usado para vetores ou conjuntos).
Responder2
Não me lembro onde encontrei isso (edições com referência são bem-vindas), mas adicionar o seguinte diretamente antes de sua \begin{tabular}
declaração pode permitir que você ajuste o espaçamento das colunas por um determinado valor:
\addtolength{\tabcolsep}{-0.4em}
Você pode usar qualquer unidade aqui, mas no exemplo acima eu uso em
, que é relativo ao tamanho da fonte atual.
Responder3
Depois de cinco anos...
Agora está disponível o pacote de tabelas tabularray
que para definir colsep
a opção de definição de separação de colunas. Em comparação com o código da tabela "clássica" é mais curto e o texto nas células tem melhor espaçamento vertical:
\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}
Responder4
Aqui está como você pode fazer isso tabularmente com {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}
Você precisa de várias compilações (porque nicematrix
usa nós PGF/Tikz nos bastidores).