我有一张包含大量数字的表格。我一直在定义新的列类型,以便指定列宽并允许\newline
在单元格内显示。我的一些数字列采用指数格式。我以前将它们作为文本,如“0.496E+07”,但为了与文档的其余部分保持一致,我刚刚将它们转换为\num{0.496e7}
使用siunitx
。问题是现在数字没有对齐。
我不确定如何使用S
列类型,因为我不知道如何像例如一样用宽度重新定义R{width}
它r
。
我尝试使用\tablenum
,但所有内容都从表格列的 RHS 中滑出,而且我不知道是否可以使用来解决这个问题table-format
。
\documentclass[12pt, a4paper, oneside, fleqn]{report}
% Page geometry etc
%----------------------------
\usepackage{setspace} % allow different line spacing
\renewcommand{\topfraction}{0.85}
\renewcommand{\textfraction}{0.1}
\usepackage[showframe,top=2.5cm, left=3.5cm, bottom=2.5cm, right=2.5cm, includehead]{geometry}
\geometry{headheight=28pt, headsep=18pt}
% Maths stuff
%------------
\usepackage{siunitx}
\usepackage{multirow}
\usepackage{array}
\renewcommand{\arraystretch}{1.5}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcommand{\head}[1]{\centering\textbf{#1}}
\setlength{\tabcolsep}{0.11cm}
\begin{document}
\onehalfspacing
\begin{table}
\centering
\footnotesize
\begin{tabular}{|L{3.2cm} || r | R{2.0cm} | r| R{1.1cm} || r | R{2.0cm}| r | R{1.1cm} | }
\hline
\multirow{2}{*}{ } & \multicolumn{4}{ c ||}{\textbf{Full Selection}} & \multicolumn{4}{ c |}{\textbf{Max Condition Number $\mathbf{10^6}$}}\tabularnewline \cline{2-9}
\head{Method and Details} & \head{NCh} & \head{Condition Number} & \head{DFS} & \head{DFS\newline per chan} & \head{NCh} & \head{Condition Number} & \head{DFS} & \head{DFS\newline per chan} \tabularnewline [0.5ex]
\hline
\textbf{1:} & 210 & \num{0.496E+07} & 84.3 & 0.40 & 153 & \num{0.8126E+06} & 69.3 & 0.45 \\
\textbf{2:} 8 Clear 1.3 WVE & 183 & \num{0.130E+11} & 207.1 & 1.13 & 76 & \num{0.9469E+06} & 91.5 & 1.20 \\ [1ex]
% [1ex] adds vertical space
\hline
\end{tabular}
\caption{caption }
\end{table}
\end{document}
输出如下所示,请注意第 3 列缺乏对齐:
答案1
和平常一样,任何使用过的表都\multirow
可以通过移除它来立即得到改进。
使用 中的功能siunitx
,它们的作用远远超出\num
。如您所见,您只需进行一次测量:没有 的本地设置的表格\tabcolsep
超出了 9.52791pt,因此我只需进行简单的除法即可截断必要的空间。确切的结果是 .595494375pt,但 0.6 也一样好。
请避免使用单垂直规则并厌恶使用双垂直规则。
\documentclass[12pt, a4paper, oneside, fleqn]{report}
\usepackage{geometry}
\geometry{
top=2.5cm,
left=3.5cm,
bottom=2.5cm,
right=2.5cm,
includehead,
headheight=28pt,
headsep=18pt,
showframe,
}
\usepackage{siunitx}
\usepackage{array,booktabs}
\newcommand{\head}[1]{%
\bfseries
\begin{tabular}{@{}c@{}}
\strut#1\strut
\end{tabular}%
}
\begin{document}
\begin{table}
\centering
\footnotesize
%%% Without the following, the overfull is 9.52791pt;
%%% since there are nine columns and so 16 intercolumn
%%% spaces, do 9.52791/16=0.6
\addtolength{\tabcolsep}{-0.6pt}
\begin{tabular}{
@{}
l
S[table-format=3.0]
S[table-format=1.3e2]
S[table-format=3.1]
S[table-format=1.2]
S[table-format=3.0]
S[table-format=1.4e2]
S[table-format=3.1]
S[table-format=1.2]
@{}
}
\toprule
& \multicolumn{4}{c}{\bfseries Full Selection} &
\multicolumn{4}{c}{\bfseries\boldmath Max Condition Number $10^6$} \\
\cmidrule(lr){2-5} \cmidrule(l){6-9} % no "r" here because it's the last column
\multicolumn{1}{c}{\head{Method and \\ Details}} &
\head{NCh} & \head{Condition \\ Number} & \head{DFS} & \head{DFS \\ per \\ chan} &
\head{NCh} & \head{Condition \\ Number} & \head{DFS} & \head{DFS \\ per \\ chan} \\
\midrule
\textbf{1:} & 210 & 0.496E+07 & 84.3 & 0.40 & 153 & 0.8126E+06 & 69.3 & 0.45 \\
\textbf{2:} 8 Clear 1.3 WVE & 183 & 0.130E+11 & 207.1 & 1.13 & 76 & 0.9469E+06 & 91.5 & 1.20 \\
\bottomrule
\end{tabular}
\caption{caption}
\end{table}
\end{document}
答案2
可以使用两种不同的列类型同时地对于表格列,例如,两个S
列(具有适当设置的选项,见下文)都用于以科学/指数格式排版数字条目和就像是
\multicolumn{1}{R{2.0cm}|}{...}
在两个相应的标题单元格中排版信息。请注意,您应该\num
从相关数字中删除包装器。我还会删除双垂直线。
\documentclass[12pt, a4paper, oneside, fleqn]{report}
% Page geometry etc
\usepackage{setspace} % allow different line spacing
\renewcommand{\topfraction}{0.85}
\renewcommand{\textfraction}{0.1}
\usepackage[showframe,top=2.5cm, left=3.5cm, bottom=2.5cm, right=2.5cm, includehead]{geometry}
\geometry{headheight=28pt, headsep=18pt}
\usepackage{siunitx}
%%\usepackage{multirow} % not needed
%%\usepackage{array} % not needed
% tabular stuff
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcommand{\head}[1]{\centering\textbf{#1}}
\setlength{\tabcolsep}{0.11cm}
\renewcommand{\arraystretch}{1.5}
\begin{document}
\onehalfspacing
\begin{table}
\sisetup{table-number-alignment=left,
tight-spacing = true}
\centering
\footnotesize
\begin{tabular}{|L{3.2cm} |
r | S[table-format = +1.3e+2] | r | R{1.1cm} |
r | S[table-format = +1.4e+2] | r | R{1.1cm} | }
\hline
& \multicolumn{4}{ c |}{\head{Full Selection}}
& \multicolumn{4}{ c |}{\head{Max Condition Number $\mathbf{10^6}$}} \tabularnewline
\cline{2-9}
\head{Method and Details} &
\head{NCh} & \multicolumn{1}{R{2.0cm}|}{\head{Condition Number}} & \head{DFS} & \head{DFS\newline per chan} &
\head{NCh} & \multicolumn{1}{R{2.0cm}|}{\head{Condition Number}} & \head{DFS} & \head{DFS\newline per chan} \tabularnewline [0.5ex]
\hline
\textbf{1:} & 210 & 0.496e07 & 84.3 & 0.40 & 153 & 0.8126E+06 & 69.3 & 0.45 \\
\textbf{2:} 8 Clear 1.3 WVE & 183 & 0.130E11 & 207.1 & 1.13 & 76 & 0.9469E6 & 91.5 & 1.20 \\ [1ex]
% [1ex] adds vertical space
\hline
\end{tabular}
\caption{caption }
\end{table}
\end{document}