我有一些非常大和非常小的数字以十进制表示法显示(针对非科学观众)。通常情况下,对于小幅度范围,我会用 对齐小数点{r@{.}l}
,但在这种情况下,我必须在同一个表中处理大约 20 个数量级,因此这变得不切实际。我的真实表格有二十多行。
目前所有数字都可以右对齐或集体左对齐。我希望将正幂(整数)右对齐,但将负幂(小数)左对齐。
\begin{tabularx}{\textwidth}{>{\bfseries}clrX}
Name & Sci & Decimal & Notes \\
\hline
foo & $10^{12}$ & 1 000 000 000 000 & Big number \\
bar & $10^{5}$ & 100 000 & Fair size \\
\hline
baz & $10^{-6}$ & 0.000 001 & Left-align these \\
qux & $10^{-8}$ & 0.000 000 01 & numbers, please! \\
\end{tabularx}
我可以\multicolumn{1}{l}{0.000 0001}
对每个小数都这样做(对于整数,反之亦然)——我甚至可以自动化这个过程——但是因为我使用 LaTeX 的时间还不是很长[1],所以我想在开始黑客攻击之前学习最佳实践。
问题重述
1 000 000 Whole numbers align right
10 000
100
0.01
0.000 1
0.000 001 Fractional (decimal) numbers align left
我承认这可能是一个 XY 问题,因此我会接受任何能够产生所需输出的优雅答案。我还会接受对问题的修改,以澄清任何令人困惑的地方。
- 只有大约 20 年。有趣的是,这件事从未发生过。
答案1
您可以利用siunitx
更简单的输入并定义左对齐和右对齐的命令:
\documentclass{article}
\usepackage{tabularx,siunitx}
\NewDocumentCommand\rnum{O{}m}{%
\mbox{}\hspace{0pt plus 1filll}\num[#1]{#2}%
}
\NewDocumentCommand\lnum{O{}m}{%
\num[#1]{#2}\hspace{0pt plus 1filll}\mbox{}%
}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{>{\bfseries}clcX}
Name & Sci & Decimal & Notes \\
\hline
foo & $10^{12}$ & \rnum{1000000000000} & Big number \\
bar & $10^{5}$ & \rnum{100000} & Fair size \\
\hline
baz & $10^{-6}$ & \lnum{0.000001} & Left-align these \\
qux & $10^{-8}$ & \lnum{0.00000001} & numbers, please! \\
\end{tabularx}
\end{document}
答案2
您可以使用 collcell 来收集内容并测试值。(“Decimal” 用括号括起来,以避免也对其进行测试)。
\documentclass{article}
\usepackage{tabularx}
\usepackage{siunitx}
\usepackage{collcell}
\ExplSyntaxOn
\newcolumntype{E}{>{\collectcell \my_is_braced_input:n }c<{\endcollectcell}}
\cs_new:Npn \my_align_numbers:n #1\scan_stop:
{
\fp_compare:nTF { #1 < 1 }
{\num{#1}\hfill\mbox{}}
{\mbox{}\hfill\num{#1}}
}
\cs_new:Nn \my_is_braced_input:n
{
\peek_catcode:NF \c_group_begin_token
{\my_align_numbers:n}
#1\scan_stop:
}
\ExplSyntaxOff
\sisetup{group-digits}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{>{\bfseries}clEX}
Name & Sci & {Decimal} & Notes \\
\hline
foo & $10^{12}$ & 1000000000000 & Big number \\
bar & $10^{5}$ & 100000 & Fair size \\
\hline
baz & $10^{-6}$ & 0.000001 & Left-align these \\
qux & $10^{-8}$ & 0.00000001 & numbers, please! \\
\end{tabularx}
\end{document}