Wie kann ich den Abstand zwischen Spalten in einer Tabelle verringern?

Wie kann ich den Abstand zwischen Spalten in einer Tabelle verringern?

Es gibt andere ähnliche Fragen, alle mit unterschiedlichen Antworten, aber ich konnte keine finden, die das erreicht, was ich will. In der folgenden Tabelle ist der Abstand zwischen den Zahlen zu groß. Wie kann ich ihn etwas verkleinern?

\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}

Antwort1

In Ihrem Beispiel haben Sie den Spaltenabstand verdoppelt, indem Sie ein tabularinnerhalb eines verwenden tabular. Hinweis: LaTeX fügt \tabcolsepvor und nach jeder Spalte einen Abstand von hinzu. In Ihrem Fall haben Sie einen solchen Abstand vor und nach der Spalte der inneren Tabelle und vor und nach der Spalte der äußeren Tabelle. Um dies zu vermeiden, sollten Sie vor der ersten Spalte der inneren Tabelle und nach der letzten Spalte der inneren Tabelle Folgendes \testmodehinzufügen :@{}

\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}

Bildbeschreibung hier eingeben

Um es noch etwas genauer zu erklären: Standardmäßig fügt LaTeX \hskip\tabcolsepvor dem Beginn einer Spalte und nach dem Ende einer Spalte hinzu. Sie haben also den Abstand \tabcolsepvor der ersten und nach der letzten Spalte und 2\tabcolsepzwischen zwei Spalten. Wenn Sie @{…}den Code des Arguments von verwenden @, wird hinzugefügtstatt der Distanz. @{}Entfernt also einfach die Distanz.

Zusätzlicher Hinweis: Ich würde empfehlen, vertikale Linien in Tabellen zu vermeiden (siehe das Handbuch vonPaketbooktabs) und zu verwendenPaketsiunitxfür Zahlenspalten. Und ich würde die Elemente der ersten Tabellenzeile nicht zentrieren, sondern linksbündig ausrichten. Und weil d=…im Tabellenkopf so etwas wie Mathematik steht, sollte man sie in den Mathematikmodus versetzen. In diesem Fall würde ich sie auch nicht fett machen (mit z. B. \boldmath), weil Schriftattribute in der Mathematik meist eine Semantik haben (z. B. wird Fettdruck oft für Vektoren oder Mengen verwendet).

Antwort2

Ich kann mich nicht erinnern, wo ich dies gefunden habe (Änderungen mit einer Referenz sind willkommen), aber wenn Sie direkt vor Ihrer Anweisung Folgendes hinzufügen, \begin{tabular}können Sie den Spaltenabstand um einen bestimmten Wert anpassen:

\addtolength{\tabcolsep}{-0.4em}

Sie können hier eine beliebige Einheit verwenden, im obigen Beispiel verwende ich jedoch em, was relativ zur aktuellen Schriftgröße ist.

Antwort3

Nach fünf Jahren ...

Jetzt ist ein Tabellenpaket verfügbar tabularray, das Optionen zur Definition der Spaltentrennung definiert colsep. Im Vergleich zum „klassischen“ Tabellencode ist dieser kürzer und der Text in den Zellen ist vertikal besser verteilt:

\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}

Bildbeschreibung hier eingeben

Antwort4

So können Sie das tabellarisch mit {NiceTabular}von tun 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}

Sie benötigen mehrere Kompilierungen (da nicematrixim Hintergrund PGF/Tikz-Knoten verwendet werden).

Ausgabe des obigen Codes

verwandte Informationen