如何调整表格的水平间距,使对象、值 A 和值 B 的列分布均匀或更好?到目前为止,我总是使用列X
类型来tabularx
获得好看的结果,但这次我需要借助siunitx
S
列类型对齐一些数字,水平对齐看起来很糟糕,如您所见。我不介意对象、值 A 和值 B 的列之间有一些空白。例如,值 A“内部”的列应该更靠近,就像下面最小工作示例一样。
\documentclass[
12pt,
DIV=12,
paper=A4,
parskip=half,
]{scrreprt}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage[locale = DE]{siunitx}
\begin{document}
\begin{table}
\centering
\caption{Some Values}
\begin{tabularx}{\textwidth}{XSXSSXS}
\toprule
\textbf{Object} &\multicolumn{3}{c}{Values A} &\multicolumn{3}{c}{Values B}\\
\midrule
Lorem & 70,50 & bis & 60,50 & 60,50 & bis & 50,50 \\
Ipsum & 60,50 & bis & 50,50 & 50,50 & bis & 40,50 \\
Lorem & 50,50 & bis & 40,50 & 40,50 & bis & 30,50 \\
Ipsum & 40,50 & bis & 30,50 & 30,50 & bis & 20,50 \\
Lorem & 30,50 & bis & 20,50 & 20,50 & bis & 10,50 \\
Ipsum & 20,50 & bis & 10,50 & 10,50 & bis & 00,50 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
如果将X
列类型更改为l
并使用,@{\extracolsep{\fill}
您可以获得以下结果,它看起来已经更好了。
\begin{table}
\centering
\caption{Some Values}
\begin{tabularx}{\textwidth}{l@{\extracolsep{\fill}}SlSSlS}
\toprule
\textbf{Object} &\multicolumn{3}{c}{Values A} &\multicolumn{3}{c}{Values B}\\
\midrule
Lorem & 70,50 & bis & 60,50 & 60,50 & bis & 50,50 \\
Ipsum & 60,50 & bis & 50,50 & 50,50 & bis & 40,50 \\
Lorem & 50,50 & bis & 40,50 & 40,50 & bis & 30,50 \\
Ipsum & 40,50 & bis & 30,50 & 30,50 & bis & 20,50 \\
Lorem & 30,50 & bis & 20,50 & 20,50 & bis & 10,50 \\
Ipsum & 20,50 & bis & 10,50 & 10,50 & bis & 00,50 \\
\bottomrule
\end{tabularx}
\end{table}
答案1
这是一个不带 的选项tabularx
。但我不明白为什么要用这么多空格,因此不建议这么做。
\documentclass{article}
\usepackage{booktabs}
\usepackage[locale = DE]{siunitx}
\begin{document}
\begin{table}
\centering
\caption{Some Values}
\begin{tabular*}{\textwidth}{ r *{2}{@{\extracolsep{\fill}} S @{\extracolsep{0pt}~bis~} S} }
\toprule
\textbf{Object} &\multicolumn{2}{c}{Values A} &\multicolumn{2}{c}{Values B}\\
\midrule
Lorem & 70,50 & 60,50 & 60,50 & 50,50 \\
Ipsum & 60,50 & 50,50 & 50,50 & 40,50 \\
Lorem & 50,50 & 40,50 & 40,50 & 30,50 \\
Ipsum & 40,50 & 30,50 & 30,50 & 20,50 \\
Lorem & 30,50 & 20,50 & 20,50 & 10,50 \\
Ipsum & 20,50 & 10,50 & 10,50 & 00,50 \\
\bottomrule
\end{tabular*}
\end{table}
\end{document}
答案2
这里有两种解决方案,它们使用基本tabular
环境并自动在数字对之间创建短破折号。
这两个表之间唯一重要的区别是,第一个l
表对第一列使用列类型,而第二个表使用p{5cm}
列类型。如果第一列单元格的内容很长,则第二种解决方案可能更可取。(您的实际表格不会出现“Lorem”和“Ipsum”字样,对吧?)无论哪种方式,我都看不出使用tabularx
目标宽度为 的环境有什么好理由\textwidth
。
\documentclass[12pt,DIV=12,paper=A4,parskip=half]{scrreprt}
\usepackage{booktabs}
\usepackage[locale = DE]{siunitx}
\newcolumntype{T}{S[table-format=2.2]}
\usepackage{tabularx}
\begin{document}
\begin{table}
\centering
\caption{Some Values}
\begin{tabular}{@{} l
T @{\,--\,} T
T @{\,--\,} T @{}}
\toprule
Object & \multicolumn{2}{c}{Values A} & \multicolumn{2}{c@{}}{Values B} \\
\midrule
Lorem & 70,50 & 60,50 & 60,50 & 50,50 \\
Ipsum & 60,50 & 50,50 & 50,50 & 40,50 \\
Lorem & 50,50 & 40,50 & 40,50 & 30,50 \\
Ipsum & 40,50 & 30,50 & 30,50 & 20,50 \\
Lorem & 30,50 & 20,50 & 20,50 & 10,50 \\
Ipsum & 20,50 & 10,50 & 10,50 & 00,50 \\
\bottomrule
\end{tabular}
\bigskip
\begin{tabular}{@{} p{5cm}
T @{\,--\,} T
T @{\,--\,} T @{}}
\toprule
Object & \multicolumn{2}{c}{Values A} & \multicolumn{2}{c@{}}{Values B} \\
\midrule
Lorem & 70,50 & 60,50 & 60,50 & 50,50 \\
Ipsum & 60,50 & 50,50 & 50,50 & 40,50 \\
Lorem & 50,50 & 40,50 & 40,50 & 30,50 \\
Ipsum & 40,50 & 30,50 & 30,50 & 20,50 \\
Lorem & 30,50 & 20,50 & 20,50 & 10,50 \\
Ipsum & 20,50 & 10,50 & 10,50 & 00,50 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
附录回答 OP 的后续问题:如果我正确理解了你的附加格式目标,我认为有必要更改当前设置,即,
\begin{tabular}{@{}
l
T
@{\,--\,}
T
T
@{\,--\,}
T
@{}}
\toprule
...
\bottomrule
\end{tabular}
到
\begin{tabular*}{0.7\textwidth}{@{} % set a suitable target width
l
@{\extracolsep{\fill}}
T
@{\,--\,\extracolsep{0pt}}
T
@{\extracolsep{\fill}}
T
@{\,--\,\extracolsep{0pt}}
T @{}}
\toprule
...
\bottomrule
\end{tabular*}
简而言之,虽然原则上是可行的,但在实践中我不建议这样做。