使用 siunitx,用数组固定列宽

使用 siunitx,用数组固定列宽

我想要一张宽度为的表格\textwidth,因此我创建了一个如下表格:

\documentclass[11pt]{article}

\usepackage{booktabs}       % Tabellenlinien
\usepackage{colortbl}           % farbige Tabellen
\usepackage{array}              % Spaltenformate in Tabllen besser formatieren
\usepackage{dcolumn}            % dots seperation in columns
\usepackage{tabularx}

\usepackage[binary-units=true]{siunitx}     % SI Einheiten
    \sisetup{output-decimal-marker = {,}}

\newcolumntype{C}[1]{>{\centering\arraybackslash\hspace{0pt}}p{#1}} % Centered Columns
\newcolumntype{L}[1]{>{\arraybackslash\hspace{0pt}}p{#1}} % Left Columns
\newcolumntype{R}[1]{>{\raggedleft\hspace{0pt}}p{#1}} % Right Columns

\begin{document}

    \begin{table}[H]
        \centering
            \begin{tabular}
                {C{0.15\textwidth} C{0.2\textwidth} C{0.15\textwidth}C{0.15\textwidth}  C{0.35\textwidth}}
                \toprule
                \textbf{Klasse} & \textbf{Ausfall Prozent}  & \multicolumn{2}{C{0.3\textwidth}}{\textbf{Ausfall Zeit/Monat}}    & \textbf{Ausfall Zeit/Jahr}\\
                \midrule 
                2   &   99,0 \% & \multicolumn{1}{R{0.15\textwidth}}{438} & \multicolumn{1}{l}{\,min}       & 87,7 h (ca. 3,5 Tage) \\
                3   &   99,9 \% & \multicolumn{1}{R{0.15\textwidth}}{43,8} & \multicolumn{1}{l}{\,min}      & 8:45 h \\
                4   &   99,99 \% & \multicolumn{1}{R{0.15\textwidth}}{4,38} & \multicolumn{1}{l}{\,min}     & 52:36 min \\
                5   &   99,999 \% & \multicolumn{1}{R{0.15\textwidth}}{26,3} & \multicolumn{1}{l}{\,s}      & 5:16 min \\
                6   &   99,9999 \% & \multicolumn{1}{R{0.15\textwidth}}{2,63} & \multicolumn{1}{l}{\,s}     & 31,6 s \\
                \bottomrule 
            \end{tabular}
    \end{table}
\end{document}

看起来像这样: enter image description here

但是我不喜欢数字对齐的方式..所以我想将它们对齐到“,”

我尝试使用\siunitx并且它工作正常,但现在我不知道如何像上面那样设置列的宽度,C{0.2\textwidth}而且多列解决方案不是我最喜欢的..所以我尝试\siunitx

\documentclass[11pt]{article}

    \usepackage{booktabs}       % Tabellenlinien
    \usepackage{colortbl}           % farbige Tabellen
    \usepackage{array}              % Spaltenformate in Tabllen besser formatieren
    \usepackage{dcolumn}            % dots seperation in columns
    \usepackage{tabularx}

    \usepackage[binary-units=true]{siunitx}     % SI Einheiten
        \sisetup{output-decimal-marker = {,}}

    \newcolumntype{C}[1]{>{\centering\arraybackslash\hspace{0pt}}p{#1}} % Centered Columns
    \newcolumntype{L}[1]{>{\arraybackslash\hspace{0pt}}p{#1}} % Left Columns
    \newcolumntype{R}[1]{>{\raggedleft\hspace{0pt}}p{#1}} % Right Columns

    \begin{document}

\begin{table}[H]
\centering
    \begin{tabular}
        {C{0.15\textwidth}  S[table-format=2.4]     S[table-format=3.1]     C{0.35\textwidth}}
        \toprule
        \textbf{Klasse} & {\textbf{Ausfall Prozent}}    & {\textbf{Ausfall Zeit/Monat}}         & \textbf{Ausfall Zeit/Jahr}\\
        \midrule 
        2   &   99,0\,\si{\percent}     & 438,0\,\si{\minute}   & 87,7 h (ca. 3,5 Tage) \\
        3   &   99,9\,\si{\percent}     &  43,8\,\si{\minute}   & 8:45 h \\
        4   &   99,99\,\si{\percent}    &   4,4\,\si{\minute}   & 52:36 min \\
        5   &   99,999\,\si{\percent}   &  26,3\,\si{\second}   & 5:16 min \\
        6   &   99,9999\,\si{\percent}  &   2,6\,\si{\second}   & 31,6 s \\
        \bottomrule 
    \end{tabular}
\end{table}
    \end{document}

但是现在第二列overfull如您所见。我想将宽度设置为,C{0.2\textwidth}但我不知道该怎么做。表格也没有完整大小\textwidth enter image description here


编辑:

在……的帮助下拉里法里我编辑了我的 tex 文件。非常感谢!

现在看起来像这样: enter image description here 它是左对齐的,并且没有大小,\textwidth 而且下一行之间没有空格


编辑: 定心工作正在进行中!

整个表格的大小不是\textwidth,但应该是 。如何才能硬性设置列的大小?

诸如此类0.25\textwidth 0.25\textwidth 0.5\textwidth1.0\textwidth 整个区域也应该被桌子“填满”

enter image description here


编辑3: 问题解决了!

\usepackage[left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}@Zarka 我忘了说了,我的序言里有

\begin{table}[H]
\begin{threeparttable}
    \centering
    \caption[Verfügbarkeitsklassen nach IEEE]{Verfügbarkeitsklassen nach IEEE}
    \label{tab:verfuegbarkeitsklassen}
    \begin{tabularx}{\linewidth}{%
        C{0.15\textwidth} 
        S[table-format=2.5]
        S[table-align-text-post = false,group-four-digits,table-format=5.1]
        S[table-align-text-post = false,group-four-digits,table-format=7.1]
        }
        \toprule
\textbf{Klasse} 
    & \mcx{Ausfall in \%} 
                & \mcx{Ausfallzeit/Monat in s} 
                                    & \mcx{Ausfallzeit/Jahr in s} \\
        \midrule
2   &  99,0     & 26280,0\tnote{1}  & 315720,0\tnote{2} \\
3   &  99,9     &  2628,0           &  30420,0\tnote{3} \\
4   &  99,99    &   264,0           &   3141,6          \\
5   &  99,999   &    26,3           &    909,6          \\
6   &  99,9999  &     2,6           &     31,6          \\
        \bottomrule
    \end{tabularx}
    \begin{tablenotes}
        \item[1] entspricht \SI{438}{\minute} oder \SI{7.3}{\hour}
        \item[2] entspricht \SI{87.7}{\hour} bzw.\ etwa \num{3.5} Tagen
        \item[3] entspricht \SI{8.45}{\hour}
    \end{tablenotes}
\end{threeparttable}
\end{table}

enter image description here

答案1

就目前情况而言,您的表格很难阅读。我可以建议:

% arara: pdflatex

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}    
\usepackage{caption} 
\usepackage{threeparttable}
\usepackage{tabularx}
\usepackage{siunitx}
\sisetup{locale=DE}
\usepackage{etoolbox}
\robustify\tnote
\usepackage{blindtext}

\begin{document}
\begin{table}
\centering
\begin{threeparttable}
    \caption[Verfügbarkeitsklassen nach IEEE]{Verfügbarkeitsklassen nach IEEE}
    \label{tab:verfuegbarkeitsklassen2}
    \begin{tabularx}{\textwidth}{%
        >{\centering\arraybackslash$}X<{$} 
        S[table-format=2.5]     
        S[table-align-text-post = false,group-four-digits,table-format=5.1]
        S[table-format=7.1]
        }
        \toprule
        \textbf{Kl.} & {\textbf{Ausfall in \%}} & {\textbf{Ausfallzeit/Monat (s)}} & \textbf{Ausfallzeit/Jahr (s)} \\
        \midrule 
        2 &  99,0    & 26280,0\tnote{1} & 315720.0\tnote{2} \\
        3 &  99,9    &  2628,0          & 30420.0\tnote{3}  \\
        4 &  99,99   &   264,0          & 3141.6            \\
        5 &  99,999  &    26,3          & 909.6             \\
        6 &  99,9999 &     2,6          & 31,6              \\
        \bottomrule
    \end{tabularx}
    \begin{tablenotes}
        \item[1] entspricht \SI{438}{\minute} oder \SI{7.3}{\hour}
        \item[2] entspricht \SI{87.7}{\hour} bzw.\ etwa \num{3.5} Tagen
        \item[3] entspricht \SI{8.45}{\hour}
    \end{tablenotes}
\end{threeparttable}
\end{table}
\blindtext
\end{document}

enter image description here

答案2

作为对 nice 的补充拉里法里答案。我添加/更改了两件事:

  • 添加包装geometry并将边距设置为 25 毫米
  • 添加包tabularx并为表头定义\newcommand哪些列类型使用修改后的X列类型。

这两个测量表的宽度等于文本宽度:

\documentclass[11pt]{article}
\usepackage[showframe,  % <-- to show page layout
            margin=25mm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs, tabularx}
\newcommand\mcx[1]{\multicolumn{1}{>{\centering\arraybackslash}X}{\textbf{#1}}}
\usepackage{caption}
\usepackage{threeparttable}
\usepackage{siunitx}
\sisetup{locale=DE}
\usepackage{etoolbox}
\robustify\tnote

\begin{document}
\begin{threeparttable}
    \centering
    \caption[Verfügbarkeitsklassen nach IEEE]{Verfügbarkeitsklassen nach IEEE}
    \label{tab:verfuegbarkeitsklassen2}
    \begin{tabularx}{\linewidth}{%
        c 
        S[table-format=2.5]
        S[table-align-text-post = false,group-four-digits,table-format=5.1]
        S[table-align-text-post = false,group-four-digits,table-format=7.1]
        }
        \toprule
\textbf{Klasse} 
    & \mcx{Ausfall in \%} 
                & \mcx{Ausfallzeit/Monat in s} 
                                    & \mcx{Ausfallzeit/Jahr in s} \\
        \midrule
2   &  99,0     & 26280,0\tnote{1}  & 315720,0\tnote{2} \\
3   &  99,9     &  2628,0           &  30420,0\tnote{3} \\
4   &  99,99    &   264,0           &   3141,6          \\
5   &  99,999   &    26,3           &    909,6          \\
6   &  99,9999  &     2,6           &     31,6          \\
        \bottomrule
    \end{tabularx}
    \begin{tablenotes}
        \item[1] entspricht \SI{438}{\minute} oder \SI{7.3}{\hour}
        \item[2] entspricht \SI{87.7}{\hour} bzw.\ etwa \num{3.5} Tagen
        \item[3] entspricht \SI{8.45}{\hour}
    \end{tablenotes}
\end{threeparttable}
\end{document}

enter image description here

答案3

要获得宽度为的表格,\textwidth您可以在 parbox 内的标题中插入文本,其中所有框的宽度之和等于\textwidth

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}    
\usepackage{caption} 
\usepackage[showframe]{geometry}
\usepackage{threeparttable}
\usepackage{siunitx}
\sisetup{locale=DE}
\usepackage{etoolbox}
\robustify\tnote

\begin{document}
\begin{threeparttable}
    \centering
    \caption[Verfügbarkeitsklassen nach IEEE]{Verfügbarkeitsklassen nach IEEE}
    \label{tab:verfuegbarkeitsklassen2}
    \begin{tabular}{%
        @{}S[table-format=1.0]  
        @{}S[table-format=2.5]     
        @{}S[table-align-text-post = false,group-four-digits,table-format=5.1]
        @{}S[table-format=7.1]@{}
        }
        \toprule
        \parbox{.15\textwidth}{\centering\bfseries Klasse} &
        \parbox{.2\textwidth} {\centering\bfseries Ausfall in \%} &
        \parbox{.30\textwidth}{\centering\bfseries Ausfallzeit/Monat in s} &
        \parbox{.35\textwidth}{\centering\bfseries Ausfallzeit/Jahr in s} \\
        \midrule 
        2 &  99,0    & 26280,0\tnote{1} & 315720.0\tnote{2} \\
        3 &  99,9    &  2628,0          & 30420.0\tnote{3}  \\
        4 &  99,99   &   264,0          & 3141.6            \\
        5 &  99,999  &    26,3          & 909.6             \\
        6 &  99,9999 &     2,6          & 31,6              \\
        \bottomrule 
    \end{tabular}
    \begin{tablenotes}
        \item[1] entspricht \SI{438}{\minute} oder \SI{7.3}{\hour}
        \item[2] entspricht \SI{87.7}{\hour} bzw.\ etwa \num{3.5} Tagen
        \item[3] entspricht \SI{8.45}{\hour}
    \end{tablenotes}
\end{threeparttable}
\end{document}

答案4

您不需要使用复杂的设置tabularx:使用会更容易tabular*,它可以在列之间添加空间。

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{booktabs}    
\usepackage{caption} 
\usepackage{siunitx}
\sisetup{locale=DE}

\usepackage{lipsum}

\newcommand{\ts}[1]{\textsuperscript{#1}}

\begin{document}

\lipsum[2]

\begin{table}[htp]
\centering

\caption[Verfügbarkeitsklassen nach IEEE]{Verfügbarkeitsklassen nach IEEE}
\label{tab:verfuegbarkeitsklassen2}

\sisetup{
  group-four-digits=true,
  group-digits=integer,
}

\begin{tabular*}{\textwidth}{%
  @{\extracolsep{\fill}\hspace{\tabcolsep}}
  c
  S[table-format=2.4]
  S[table-space-text-post=\ts{1},table-format=5.1]
  S[table-space-text-post=\ts{1},table-format=6.1]
}
\toprule
\textbf{Kl.} &
  {\textbf{Ausfall}} &
  {\textbf{Ausfallzeit/Monat}} &
  {\textbf{Ausfallzeit/Jahr}} \\
& {(\%)} & {(\si{s})} & {(\si{s})} \\
\midrule 
2 &  99,0    & 26280,0\ts{1} & 315720.0\ts{2} \\
3 &  99,9    &  2628,0       & 30420.0\ts{3}  \\
4 &  99,99   &   264,0       & 3141.6         \\
5 &  99,999  &    26,3       & 909.6          \\
6 &  99,9999 &     2,6       & 31,6           \\
\midrule[\heavyrulewidth]
\multicolumn{4}{l}{\ts{1} entspricht \SI{438}{\minute} oder \SI{7.3}{\hour}}\\
\multicolumn{4}{l}{\ts{2} entspricht \SI{87.7}{\hour} bzw.\ etwa \num{3.5} Tagen}\\
\multicolumn{4}{l}{\ts{3} entspricht \SI{8.45}{\hour}}
\end{tabular*}

\end{table}

\lipsum[3]

\end{document}

enter image description here

相关内容