Re: Q: How do I format text within a cell of GridBox[]?
- To: mathgroup at smc.vnet.net
- Subject: [mg64694] Re: Q: How do I format text within a cell of GridBox[]?
- From: bghiggins at ucdavis.edu
- Date: Tue, 28 Feb 2006 01:49:25 -0500 (EST)
- References: <dtrvfb$ltl$1@smc.vnet.net><dtu2ln$eur$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Terry,
Here is a modification of David's suggestion that allows the user to
determine the size of the heading fragment on each line. It makes use
of RegularExpressions( need Version 5.1 or later )
We need two auxillary functions. The first function called myNewLineLoc
places a new line locator (\n) in front of any word after the first in
a heading that has n or more word characters(digits,letters,or _)
myNewLineLoc[str_String,
n_Integer] := StringReplace[str, RegularExpression["((?!^)\\b\\w{"
<> \
ToString[n] <> "})"] :> "\n" <> "$1"]
The second function called setColumnWidths determines the size of the
largest heading fragment using the same rule as above for splitting up
the header
SetColumnWidths[str_String, n_Integer] := Max[Map[StringLength[#] &, \
StringSplit[StringReplace[str, RegularExpression["((?!^)\\b\\w{" <>
ToString[n] <> "})"] :> "\n" <> "$1"], "\n"]]]
Finally we call this functions in a PrintHeading function
PrintHeading[{str__String}, {colWidths__}] := \
Print[DisplayForm[GridBox[{Map[Cell[myNewLineLoc[#[[1]], #[[2]]], \
TextAlignment -> Center] &, Transpose[{{str}, {colWidths}}]]},
ColumnSpacings -> 0.8, ColumnWidths ->
Map[SetColumnWidths[#[[1]], #[[
2]]] &, Transpose[{{str}, {colWidths}}]]]]]
The following shows how the options work:
PrintHeading[{"Time", "Number of Times Parameters Changes Directions",
"Error"}, {4, 6, 5}]
PrintHeading[{"Time", "Number of Times Parameters Changes Directions",
"Error"}, {4, 8, 5}]
The one limitation is that the size of the columnwidth is based on the
number of characters in the largest heading fragment, which does not
map one-to-one on how Mathematica defines a width of a column.
Hope this helps,
Cheers
Brian