消息中的数字格式很好

Ale*_*kov 5 wolfram-mathematica

StyleBox默认情况下打印字符串时,我们在字符串中获得格式良好的数字:

StyleBox["some text 1000000"] // DisplayForm
Run Code Online (Sandbox Code Playgroud)

我的意思是数字看起来好像会有额外的小空格:"1 000 000".

但是在Message所有数字中都显示没有格式化:

f::NoMoreMemory = 
  "There are less than `1` bytes of free physical memory (`2` bytes \
is free). $Failed is returned.";
Message[f::NoMoreMemory, 1000000, 98000000]
Run Code Online (Sandbox Code Playgroud)

有没有办法让Messages 里面的数字格式化?

Bre*_*ion 6

我使用Style来应用AutoNumberFormatting选项:

您可以使用它来定位特定消息:

f::NoMoreMemory = 
 "There are less than `1` bytes of free physical memory (`2` bytes is free). $Failed is returned.";

Message[f::NoMoreMemory, 
 Style[1000000, AutoNumberFormatting -> True], 
 Style[98000000, AutoNumberFormatting -> True]]
Run Code Online (Sandbox Code Playgroud)

或者您可以将它与$ MessagePrePrint一起使用以将其应用于所有消息:

$MessagePrePrint = Style[#, AutoNumberFormatting -> True] &;

Message[f::NoMoreMemory, 1000000, 98000000]
Run Code Online (Sandbox Code Playgroud)


Mr.*_*ard 5

我想你想要的 $MessagePrePrint

$MessagePrePrint = 
   NumberForm[#, DigitBlock -> 3, NumberSeparator -> " "] &;
Run Code Online (Sandbox Code Playgroud)

或者,结合Sjoerd的建议:

With[
  {opts =
    AbsoluteOptions[EvaluationNotebook[],
     {DigitBlock, NumberSeparator}]},
  $MessagePrePrint = NumberForm[#, Sequence @@ opts] &];
Run Code Online (Sandbox Code Playgroud)

适应Brett Champion的方法,我相信这可以按照您的要求进行复制和粘贴:

$MessagePrePrint = StyleForm[#, AutoNumberFormatting -> True] &;
Run Code Online (Sandbox Code Playgroud)