使用 Siunitx \num 宏保留整数中的前导零

使用 Siunitx \num 宏保留整数中的前导零

我希望能够在siunitx包中保留前导零。这是使用\num{012345}产品,12 345但我希望有012 345

在此处输入图片描述

参考:

代码:

\documentclass{article}
\usepackage{siunitx}

\begin{document}

Default Output: $012345 = \num{012345}$

Desired Output: $012345 = 012\,345$

\end{document}

答案1

(修改了答案以允许设置包group-minimum-digits的参数的等效项siunitx

这是一个基于 LuaLaTeX 的解决方案。它定义了一个名为 的用户级 LaTeX 宏\Lnum,它充当名为 的 Lua 函数的前端group_string。这个 Lua 函数几乎完成了所有工作。

group-minimum-digits包的参数的等价物siunitx——通常是5或者4——可以在宏的可选参数中设置\Lnum

在此处输入图片描述

% !TEX TS-program = lualatex

\documentclass{article}
\usepackage{luacode}

%% Lua-side code: define a Lua function called 'group_string' 
\begin{luacode}
function group_string ( s , n )
   -- s: Input string -- usually, an integer.
   -- n: Minimum number of digits before grouping 
   --    is performed. This should be either 4 or 5.
   -- If s contains n or fewer characters, do nothing, 
   --    i.e., return the string s without modifications.
   -- Otherwise, insert thinspace into input string at 
   --    every third character, starting from the right. 
   -- Note: Leading zeros are preserved automatically.

   if string.len ( s ) < n then
       return s -- don't modify input string
   else 
       t = ""   -- initialize output string
       while string.len ( s ) > 3 do
           t =   "\\," .. string.sub ( s, -3 ) .. t
           s = string.sub ( s , 1, -4 ) -- drop last 3 chars
       end
       return s .. t
   end
end
\end{luacode}

%% LaTeX-side code: A user macro called "\Lnum".
%% Default value of optional argument of \Lnum 
%%   should be either 4 or 5.
\newcommand\Lnum[2][4]{\directlua{% 
    tex.sprint ( group_string ( "#2" , #1 ) )}}


\begin{document}
\begin{tabular}{rr}
input   & output         \\[1ex]
12345   & \Lnum{12345}   \\
012345  & \Lnum{012345}  \\
0000000 & \Lnum{0000000} \\
0123    & \Lnum{0123}    \\
0123    & \Lnum[5]{0123} \\ % set equivalent of 'group-minimum-digits' to 5
\end{tabular}
\end{document} 

相关内容