我有一张由脚本生成的大型数字表,我用siunitx
它来很好地格式化输出。我想用粗体突出显示数字的重要部分,即指数,以便它脱颖而出(数字本身并不像数量级那么重要,但科学记数法使指数不那么明显,就像上标一样)。
我正在使用这些设置
\usepackage{siunitx}
\sisetup{
exponent-product = \cdot,
round-mode = figures,
round-precision = 1}
\num{2.12e-14}
但我更喜欢视觉上的
$2\cdot 10^{\mathbf{-14}}$
编辑:有关真实示例,请参阅本附录中的两个大表格pdf 文档
答案1
如果您可以使用 LuaLaTeX 而不是 pdfLaTeX,那么创建一个专用的 Lua 函数并设置一个关联的 TeX“包装器宏”可能比尝试破解包\num
的宏更容易siunitx
。在下面的示例中,包装器宏称为\mynum
,其语法设置为模仿\num
宏的行为。
关于要格式化的数字的唯一假设是它们的指数部分非空,即数字包含子e<nn>
字符串,其中<nn>
是正整数或负整数。在此设置下,诸如的数字是(并且也是)e1234
的有效输入。\mynum
\num
\documentclass{article}
\usepackage{siunitx}
\sisetup{exponent-product = \cdot,
round-mode = places}
%% Lua-side code
\usepackage{luacode}
\begin{luacode}
function formatnum ( prec, num )
if string.find ( num , "[%d%.]+[eE]" ) then
mant = string.format( "%."..prec.."f".."\\cdot", string.match ( num, "[%-%+]?[%d%.]+" ) )
else
mant = ""
end
expo = string.gsub ( num, ".-[eE]([%-%+]?)(%d+)", "10^{%1\\mathbf{%2}}" )
return ( tex.sprint( "$"..mant..expo.."$" ))
end
\end{luacode}
%% TeX-side code
\newcommand\mynum[2]{\directlua{ formatnum ( \luastring{#1}, \luastring{#2})}}
\begin{document}
\def\NumA{2.12e-14}
\def\NumB{12.34e56}
\def\NumC{e1234}
\num[round-precision=0]{\NumA}
\mynum{0}{\NumA}
\medskip
\num[round-precision=2]{\NumB}
\mynum{2}{\NumB}
\medskip
\num[round-precision=4]{\NumC}
\mynum{4}{\NumC}
\end{document}
附录:如果你想用红色突出显示指数,而不是使用大胆的,您需要将\\mathbf{%2}
Lua 代码更改为\\color{red}%2
。当然,需要加载xcolor
或color
包才能访问该\color
宏。
\mynum{0}{2.12e-14}, \mynum{2}{-12.34e56}, \mynum{0}{e1234}
答案2
你可以注射\mathbf
在正确的位置。我仍然建议你不是使用这个,因为如果改变的话注定会失败siunitx
。
\documentclass{article}
\usepackage{siunitx}
\ExplSyntaxOn
\cs_set_protected:Npn \__siunitx_number_format_final_exponent: {
\prop_get:NnN \l__siunitx_number_out_prop { exponent }
\l__siunitx_tmpa_tl
\tl_if_empty:NTF \l__siunitx_output_exponent_tl
{
\tl_set:Nx \l__siunitx_tmpa_tl
%{ ^ { \exp_not:V \l__siunitx_tmpa_tl } }
{ ^ { \exp_not:N \mathbf { \exp_not:V \l__siunitx_tmpa_tl } } }
\tl_put_left:NV \l__siunitx_tmpa_tl \l__siunitx_exponent_base_tl
}
{
\tl_set:Nx \l__siunitx_tmpa_tl
{
\exp_not:V \l__siunitx_output_exponent_tl
\exp_not:N \mathord
\exp_not:V \l__siunitx_tmpa_tl
}
}
\prop_put:NnV \l__siunitx_number_out_prop { exponent-result }
\l__siunitx_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\num{2.12e-14}
\num{12.34e56}
\num{e1234}
\end{document}