NumberSigns and Number Formatting

*To*: mathgroup at smc.vnet.net*Subject*: [mg92647] NumberSigns and Number Formatting*From*: "David Park" <djmpark at comcast.net>*Date*: Thu, 9 Oct 2008 06:37:28 -0400 (EDT)

I would like to write numbers in a dynamic display such that as the numbers are varied the width and positioning of the digits, fill spaces, and signs remained fixed. Now I know that I can do this if I pick a monspace font such as Courier. However, I would like to do this within Panels and in general with proportional fonts. The font that is used within Panels is given by evaluating CurrentValue["PanelFontFamily"] and gives "Segoe UI". It's a nice looking font and I'm happy with it. I don't want a different font for text and numbers in a display. I assume that with proportional fonts the widths of all the digit characters are the same. The problem is that the space character is much thinner than the digits, and + and - are also different widths than the digits. I found that for NumberPadding on the left I could sometimes use \[LetterSpace] to match the width of the digits, but I don't think this works for all fonts or font sizes. Also it leaves a slight trace of its presence, which would be nice to eliminate. Here is a test case to experiment with: Module[ {x = 0., numformat}, numformat[x_] := NumberForm[N[x], {6, 3}, NumberPadding -> {"\[LetterSpace]", "0"}, NumberSigns -> {"-", "\[LetterSpace]"}, SignPadding -> False]; Panel[ Column[ {Row[{-15 <= "x" <= 15, Spacer[5], Slider[Dynamic[x], {-15, 15, .001}], Spacer[5], InputField[Dynamic[x], FieldSize -> {5, 1.2}]}], Row[{"x:", Spacer[5], Dynamic@numformat[x], Spacer[5], "in value."}] }], Style["Number Formatting Problem", 16], BaseStyle -> {FontSize -> 16}] ] For a FontSize of 16 the LetterSpace works well for the NumberPadding but it does not work well enough for the NumberSigns. If the FontSize is changed to 12 then it doesn't work for either. If you vary the slider you will see a fair amount of jumping around. The basic problem here is that NumberPadding and NumberSigns take only single character strings. The ideal solution would be if one could use: NumberPadding -> {Invisible["0"], "0"} NumberSigns -> {"-", Invisible["-"]} but that is not possible. Unless someone can suggest a reasonable solution to this maybe it's time that WRI considered updating NumberFormat. -- David Park djmpark at comcast.net http://home.comcast.net/~djmpark/