在具有复杂标题行的表格中以指数格式对齐数字

在具有复杂标题行的表格中以指数格式对齐数字

我有一张包含大量数字的表格。我一直在定义新的列类型,以便指定列宽并允许\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}

相关内容