Re: NumberSigns and Number Formatting
- To: mathgroup at smc.vnet.net
- Subject: [mg92802] Re: NumberSigns and Number Formatting
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Mon, 13 Oct 2008 07:06:05 -0400 (EDT)
- References: <gckmtj$ni8$1@smc.vnet.net> <gcn4bv$76e$1@smc.vnet.net> <gcq040$bu0$1@smc.vnet.net>
Hi, > I believe that NumberForm was originally designed for monospace fonts. This > was generally good enough. The Help for NumberForm says that it controls how > the number 'prints' and not that it's purpose is to convert the number to a > string. Sorry, I didn't even look up the help for NumberForm, which obviously was a mistake: Of course saying it is for converting to string strictly speaking was nonsense, since it actually doesn't even do that. What I probably should have said is that I think its purpose is to create a sequence of characters to be shown. > In any case, now that we have much easier dynamics, and constructs > like Panel with its proportional font (which I like), there will be much > more formatting of numbers within lines of text. NumberForm no longer works > properly for this purpose. correct > We can end up getting a lot of 'jitter'. If > somehow we could pad with blank characters that had the same widths as "-" > and "0" in the font then that would be the simplest solution. Hm, I'm not an expert for proportional fonts, but naive as I am I would believe this probably isn't possible in general, are there any (technical) rules that for a proportial font all digits have to be the same size (and height)? Is a blank character with the correct size something that WRI can provide for any font that you can install and use within a mathematica document? I don't know. If not, even without padding a jitter wouldn't be to avoid... > If that solution could be implemented within NumberForm (and maybe it is impossible) > the average user would find it relatively easy to use. The solution you give > is slightly heavy lifting for most users. Just because a solution is > possible doesn't mean that it will be readily available to most users. They > are going to spend a lot of time looking at NumberPadding and NumberSigns > because that is the obvious indicated path. That's correct, it could be made easier and be explained better in the documentation. If there would be a NumberFormPane as the one you suggest and that would be mentioned in the "See Also" section that would be probably the best solution. I think for WRI it pobably would even be possible to automatically determine the correct Pane-Size with more internal knowledge about the font-properties, so that the Pane-Size would only need to change when the font would be changed, but not when only the content changes. But I'm not sure and unfortunatly I can't provide that :-). Actually it would be interesting to know if and how other systems / programming languages / GUI toolkits handle this. Finally I have another workaround, more along the lines you originally suggested that should work for most cases. It just makes strings from NumberForm, and then replaces the string with a row where invisible padding characters are written using Style[_,Opacity[0]]: Module[{x = 0., numformat}, numformat[x_] := Row[ List @@ StringReplace[ ToString[ NumberForm[N[x], {6, 3}, NumberPadding -> {"@", "0"}, NumberSigns -> {"-", "$"}, SignPadding -> False]], { "@" -> Style["0", Opacity[0]], "$" -> Style["-", Opacity[0]] } ]]; 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}]] cheers, albert