通过插入细空格进行视觉分组,使大数字更易于阅读

通过插入细空格进行视觉分组,使大数字更易于阅读

我更喜欢将大数字以三位数分组显示。例如,1234567显示为1 234 567

有没有办法使这个自动化,LaTeX以便无论我插入什么1234567,它都会自动显示为1 234 567输出?

答案1

这是一个基于 LuaLaTeX 的解决方案,它会自动在包含 5 到 12 位数字的数字的整数部分添加细空格。

一些评论:

  • 正好有四位数字不是在第一个(最左边的)数字后插入一个细空格,与@egreg 发布的评论保持一致。如果你想要一个四位数字的细空格分隔符,请将最后一条string.gsub指令行从

                text = string.gsub ( text , "(%d?%d%d)(%d%d%d)", "%1\\,%2" )
    

                text = string.gsub ( text , "(%d?%d?%d)(%d%d%d)", "%1\\,%2" )
    
  • 没有插入薄空间小数部分任何长数字;仅处理整数部分。

  • 代码会跟踪我们是否处于verbatimVerbatim环境中。如果我们处于这样的环境中,则处理会暂停。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}

\usepackage{luacode}
\begin{luacode}
ok_to_process = true
function ez_read ( line )
  if string.find ( line , "\\begin{[vV]erbatim}" ) then
     ok_to_process = false
     return line
  elseif string.find ( line , "\\end{[vV]erbatim}" ) then
     ok_to_process = true
     return line
  else
    if ok_to_process then
      x = line:gsub ( "([%.]-)(%d+)", function ( back, text )
        if back ~= "" then
          return back..text
        end
        text = string.gsub ( text , "(%d?%d?%d)(%d%d%d)(%d%d%d)(%d%d%d)",
                                    "%1\\,%2\\,%3\\,%4" )
        text = string.gsub ( text , "(%d?%d?%d)(%d%d%d)(%d%d%d)",
                                    "%1\\,%2\\,%3" )
        text = string.gsub ( text , "(%d?%d%d)(%d%d%d)", "%1\\,%2" )
        return text
      end)
      return x
    end
  end
end
luatexbase.add_to_callback( "process_input_buffer", ez_read, "ez_read")
\end{luacode}

\begin{document}    
123456789012, 123456789, 123456, 12345

But: 1234 --- no thinspace after ``1''

123456.123456789, 0.12345, 123456
\end{document}

答案2

这些包numprint可以siunitx做到这一点(我在这里展示numprint

\documentclass{article}

\usepackage{numprint}

\begin{document}
\numprint{1234567}

\numprint{123456789}
\end{document}

在此处输入图片描述

答案3

siunitx\num为此类工作提供宏。

\documentclass{article}
\usepackage{siunitx}
\begin{document}
  \num{1234567}
\end{document}

在此处输入图片描述

相关内容