如何防止这个 4 位数字的 siunitx 表过满?

如何防止这个 4 位数字的 siunitx 表过满?

我想要一个包含四位数字(如 1234)的 siunitx 表,因此我使用它,S[table-format=3.0]但它给出了以下代码的溢出 hbox

\documentclass{article}    
\usepackage{siunitx}
\begin{document}

\begin{table}
\begin{tabular}{|l|*{9}{S[table-format=3.0]|}} % http://tex.stackexchange.com/a/340832/13173
\hline
$B_{ij}$ & $B_{11}$ & $B_{22}$ & $B_{33}$ & $B_{44}$
& $B_{21}$ & $B_{31}$ & $B_{32}$
& $B_{123}$ & $n$ \\ \hline
\textit{Arr./AHB}        & 47 & 94 & 0 & 2
                & 0 & 0 & 2066
                & 0 & 47 \\ \hline
\end{tabular}
\end{table}

\end{document}

输出

(/usr/local/texlive/2016/texmf-dist/tex/latex/siunitx/siunitx-abbreviations.cfg
)
Overfull \hbox (5.00002pt too wide) detected at line 16

[1{/home/masi/.texlive2016/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./test.tables.aux) )

Heiko 的\begin{tabular}{|l|*{9}{S[table-format=4.0]|}}提议

(/usr/local/texlive/2016/texmf-dist/tex/latex/siunitx/siunitx-abbreviations.cfg
)
Overfull \hbox (6.16374pt too wide) in paragraph at lines 10--19
[][] 
[1{/home/masi/.texlive2016/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./test.tables.aux) )

更好的数据更清楚地说明问题

% egrep
% fix for avoiding the overfull
\addtolength{\tabcolsep}{-\dimexpr 6.16374pt/20}

\begin{table}
\begin{tabular}{|l|*{9}{S[table-format=4.0]|}} % http://tex.stackexchange.com/a/340832/13173
\hline
{$B_{ij}$} & {$B_{11}$} & {$B_{22}$} & {$B_{33}$} & {$B_{44}$}
& {$B_{21}$} & {$B_{31}$} & {$B_{32}$}
& {$B_{123}$} & {$n$} \\ \hline % Heiko
\textit{Masit}           & 18 & 0 & 0 & 0
                & 0 & 0 & 306
                & 0 & 18 \\ \hline
\textit{Arr./AHB}        & 47 & 94 & 0 & 2
                & 0 & 0 & 2066
                & 0 & 47 \\ \hline
\textit{Tiramisuta arr.}    & 24 & 0 & 0 & 2
                & 0 & 0 & 546 & 0 & 24 \\ \hline
\textit{Coca-colaPepsi arr.} & 5 & 0 & 0 & 0
                & 0 & 0 & 20
                & 0 & 5 \\ \hline
\end{tabular}
\end{table}

输出

(/usr/local/texlive/2016/texmf-dist/tex/latex/siunitx/siunitx-abbreviations.cfg
)
Overfull \hbox (38.51854pt too wide) in paragraph at lines 12--29
[][] 

TeXLive:2016年
操作系统:Debian 8.5

答案1

您需要table-format=4.0,因为一列有四位数字。

接下来,查看日志文件中的过度填充量,即 6.16374pt;因为有十列,所以将多余的部分分配到 20 个列间距中。

\documentclass{article}
\usepackage{siunitx}
\begin{document}

\begin{table}

% fix for avoiding the overfull
\addtolength{\tabcolsep}{-\dimexpr 6.16374pt/20}

\begin{tabular}{|l|*{9}{S[table-format=4.0]|}} % http://tex.stackexchange.com/a/340832/13173
\hline
$B_{ij}$ & $B_{11}$ & $B_{22}$ & $B_{33}$ & $B_{44}$
& $B_{21}$ & $B_{31}$ & $B_{32}$
& $B_{123}$ & $n$ \\ \hline
\textit{Arr./AHB}        & 47 & 94 & 0 & 2
                & 0 & 0 & 2066
                & 0 & 47 \\ \hline
\end{tabular}

\end{table}

\end{document}

仅在表格处于最终形式时才执行此操作。例如,当内容为

\begin{tabular}{|l|*{9}{S[table-format=4.0]|}} % http://tex.stackexchange.com/a/340832/13173
\hline
$B_{ij}$ & $B_{11}$ & $B_{22}$ & $B_{33}$ & $B_{44}$
& $B_{21}$ & $B_{31}$ & $B_{32}$
& $B_{123}$ & $n$ \\ \hline
\textit{Arr./AHB}        & 47 & 94 & 0 & 2
                & 0 & 0 & 2066
                & 0 & 47 \\ \hline
\textit{Masit}           & 18 & 0 & 0 & 0
                & 0 & 0 & 306
                & 0 & 18 \\ \hline
\textit{Arr./AHB}        & 47 & 94 & 0 & 2
                & 0 & 0 & 2066
                & 0 & 47 \\ \hline
\textit{Tiramisuta arr.}    & 24 & 0 & 0 & 2
                & 0 & 0 & 546 & 0 & 24 \\ \hline
\textit{Coca-colaPepsi arr.} & 5 & 0 & 0 & 0
                & 0 & 0 & 20
                & 0 & 5 \\ \hline
\end{tabular}

我得到了 44.68217pt 的溢出,因此修复方法应该是

% fix for avoiding the overfull
\addtolength{\tabcolsep}{-\dimexpr 44.68217pt/20}

在此处输入图片描述

何时停止?如果过度填充量超过 60pt,则列间距将减少到 3pt(其默认值为 6pt),这仍然可以接受。我不会低于 2pt(这相当于过度填充 80pt)。

在这种情况下,您应该考虑在之前使用\small或。\footnotesize\begin{tabular}

答案2

1234被覆盖S[table-format=4]。但是表格变得太宽,因为所有列共享相同的设置。然后,列标题不再居中。

以下示例使用单独的设置。它还使用包booktabs来获得更好的水平规则。它还避免使用垂直线来制作更好看的表格。

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}

\begin{document}

\begin{table}
  \begin{tabular}{
    l
    *{2}{S[table-format=2]}
    *{4}{S[table-format=1]}
    S[table-format=4]
    S[table-format=1]
    S[table-format=2]
  }
    \toprule
    $B_{ij}$ & $B_{11}$ & $B_{22}$ & $B_{33}$ & $B_{44}$
    & $B_{21}$ & $B_{31}$ & $B_{32}$
    & $B_{123}$ & $n$ \\
    \midrule
    \textit{Arr./AHB}
    & 47 & 94 & 0 & 2 & 0 & 0 & 2066 & 0 & 47 \\
    \bottomrule
  \end{tabular}
\end{table}
\end{document}

结果

相关内容