如何对齐特定表格内的小数分隔符?

如何对齐特定表格内的小数分隔符?

该表格来自 Philippe Goutet 的精彩回答关于这个问题

\documentclass[a4paper,12pt]{article}      
\usepackage{array,booktabs} % I add booktabs AM
\usepackage[hmargin=2cm]{geometry}
\usepackage{xcolor}

\makeatletter
%http://groups.google.com/group/comp.text.tex/msg/7e812e5d6e67fcc5
\def\convertto#1#2{\strip@pt\dimexpr #2*65536/\number\dimexpr 1#1}
\makeatother

\begin{document}  % 

\begin{center}\begin{tabular}  % Philippe Goutet 
  {>{\def\colunit{pt}}l<{\convertto{\rowunit}{1\colunit}}
   >{\def\colunit{mm}}l<{\convertto{\rowunit}{1\colunit}}
   >{\def\colunit{cm}}l<{\convertto{\rowunit}{1\colunit}}
   >{\def\colunit{ex}}l<{\convertto{\rowunit}{1\colunit}}
   >{\def\colunit{em}}l<{\convertto{\rowunit}{1\colunit}}
   >{\def\colunit{bp}}l<{\convertto{\rowunit}{1\colunit}}
   >{\def\colunit{dd}}l<{\convertto{\rowunit}{1\colunit}}
   >{\def\colunit{pc}}l<{\convertto{\rowunit}{1\colunit}}
   >{\def\colunit{in}}l<{\convertto{\rowunit}{1\colunit}}
   >{\bfseries}l}
\multicolumn{1}{l}{\bfseries 1pt} & \multicolumn{1}{l}{\bfseries 1mm} &         
\multicolumn{1}{l}{\bfseries 1cm} & \multicolumn{1}{l}{\bfseries 1ex} &   
\multicolumn{1}{l}{\bfseries 1em} & \multicolumn{1}{l}{\bfseries 1bp} & 
\multicolumn{1}{l}{\bfseries 1dd} & \multicolumn{1}{l}{\bfseries 1pc} & 
\multicolumn{1}{l}{\bfseries 1in} & \\
\gdef\rowunit{pt} & & & & & & & & & \rowunit\\
\gdef\rowunit{mm} & & & & & & & & & \rowunit\\
\gdef\rowunit{cm} & & & & & & & & & \rowunit\\
\gdef\rowunit{ex} & & & & & & & & & \rowunit\\
\gdef\rowunit{em} & & & & & & & & & \rowunit\\
\gdef\rowunit{bp} & & & & & & & & & \rowunit\\
\gdef\rowunit{dd} & & & & & & & & & \rowunit\\
\gdef\rowunit{pc} & & & & & & & & & \rowunit\\
\gdef\rowunit{in} & & & & & & & & & \rowunit\\
\end{tabular}\end{center}

\end{document}

我想对齐每列的小数分隔符。我尝试使用numprintsiunitx。我知道诀窍,r@{.}l但是这里......我在等着看......

答案1

\usepackage{dcolumn}
\newcolumntype{Z}[1]{D{.}{.}{2.5}<{\convertto{\rowunit}{1#1}}}
% for a comma as decimal separator use the following line
%\newcolumntype{Z}[1]{D{.}{,}{2.5}<{\convertto{\rowunit}{1#1}}}

然后可以将表输入为

\begin{tabular}{Z{pt}Z{mm}Z{cm}Z{ex}Z{em}Z{bp}Z{dd}Z{pc}Z{in}>{\bfseries}l}
\multicolumn{1}{c}{\bfseries 1pt} & \multicolumn{1}{c}{\bfseries 1mm} &
\multicolumn{1}{c}{\bfseries 1cm} & \multicolumn{1}{c}{\bfseries 1ex} &
\multicolumn{1}{c}{\bfseries 1em} & \multicolumn{1}{c}{\bfseries 1bp} &
\multicolumn{1}{c}{\bfseries 1dd} & \multicolumn{1}{c}{\bfseries 1pc} &
\multicolumn{1}{c}{\bfseries 1in} & \\
\gdef\rowunit{pt} & & & & & & & & & \rowunit\\
\gdef\rowunit{mm} & & & & & & & & & \rowunit\\
\gdef\rowunit{cm} & & & & & & & & & \rowunit\\
\gdef\rowunit{ex} & & & & & & & & & \rowunit\\
\gdef\rowunit{em} & & & & & & & & & \rowunit\\
\gdef\rowunit{bp} & & & & & & & & & \rowunit\\
\gdef\rowunit{dd} & & & & & & & & & \rowunit\\
\gdef\rowunit{pc} & & & & & & & & & \rowunit\\
\gdef\rowunit{in} & & & & & & & & & \rowunit\\
\end{tabular}

在此处输入图片描述

为了使用工具来格式化表格,siunitx可以在排版之前构建表格:

\documentclass{article}
\usepackage{array,booktabs} % I add booktabs AM
\usepackage{siunitx}
\makeatletter
%http://groups.google.com/group/comp.text.tex/msg/7e812e5d6e67fcc5
\def\convertto#1#2{\strip@pt\dimexpr #2*65536/\number\dimexpr 1#1\relax\relax}
\makeatother

\begin{document}

\begingroup
\def\arow#1{
  \convertto{#1}{1pt}&
  \convertto{#1}{1mm}&
  \convertto{#1}{1cm}&
  \convertto{#1}{1ex}&
  \convertto{#1}{1em}&
  \convertto{#1}{1bp}&
  \convertto{#1}{1dd}&
  \convertto{#1}{1pc}&
  \convertto{#1}{1in}&
  #1}
\edef\rows{%
  \unexpanded{%
    \begin{tabular}{*{9}{S[table-format=2.5]}>{\bfseries}l}
    \multicolumn{1}{c}{\bfseries 1pt} & \multicolumn{1}{c}{\bfseries 1mm} &         
    \multicolumn{1}{c}{\bfseries 1cm} & \multicolumn{1}{c}{\bfseries 1ex} &
    \multicolumn{1}{c}{\bfseries 1em} & \multicolumn{1}{c}{\bfseries 1bp} &
    \multicolumn{1}{c}{\bfseries 1dd} & \multicolumn{1}{c}{\bfseries 1pc} &
    \multicolumn{1}{c}{\bfseries 1in} & \\
  }
  \arow{pt}\noexpand\\
  \arow{mm}\noexpand\\
  \arow{cm}\noexpand\\
  \arow{ex}\noexpand\\
  \arow{em}\noexpand\\
  \arow{bp}\noexpand\\
  \arow{dd}\noexpand\\
  \arow{pc}\noexpand\\
  \arow{in}
  \noexpand\end{tabular}
}
\rows
\endgroup
\end{document}

在此处输入图片描述

S将所需的所有其他选项添加到列规范中。

相关内容