Re: PageWidth mystery
- To: mathgroup at smc.vnet.net
- Subject: [mg26116] Re: PageWidth mystery
- From: Timo Felbinger <timof at uranos.quantum.physik.uni-potsdam.de>
- Date: Tue, 28 Nov 2000 01:56:02 -0500 (EST)
- Organization: University of Potsdam
- References: <8v7kk9$b1t@smc.vnet.net> <8vfr9p$jj9@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 22 Nov 2000, Jens-Peer Kuska wrote: > > remember how a typical Mathematica function look like. > > At the *end* of the formating it finds your PageWidth option, but the > actual page width must be evaluated before any of the expressions > is formated. The formating goes top down and look for the > PageWidth. Something like > > MakeTheOutput[expr_,opts___]:= > Module[{pw}, > ... > pw=PageWidth /. {opts} /. Options[$Output]; > ... > Format[expr] > ] This is about what I feared is happening. I had hoped that it would more run along MakeOutput[expr_]:=Module[{formatted,outstring}, formatted=Format[expr]; (* formatted is still an expression in tree-form, so we *) (* can still find good line breaks while converting it *) (* into a string: *) outstring=ToStringWithProperNewlines[formatted]; SendToFrontEnd[outstring]; ] > Narrow /: MakeBoxes[Narrow[expr_], fmt_:StandardForm] := > > Module[{theboxes}, > Print["hu"]; > theboxes = MakeBoxes @@ {expr}; > theboxes /. RowBox[bb_] /; Length[bb] > 16 :> RowBox[Flatten[ > Append[#, "\[" <> "NewLine" <> "]"] & /@ > Partition[bb, 16, 16, {1, 1}, {}]]]] > Thanks for this suggestion; it does something but not quite what I wanted: Running #!/bin/sh { cat <<EOF narrow /: MakeBoxes[narrow[expr___], fmt_:StandardForm] := ( Module[{theboxes}, Print["hu"]; theboxes = MakeBoxes @@ {expr}; theboxes /. RowBox[bb_] /; Length[bb] > 32 :> RowBox[ Flatten[ Append[#, "\[" <> "NewLine" <> "]"] & /@ Partition[bb, 32 ] ] ] ] ) narrow[ Range[40] ] MakeBoxes[ narrow[ Range[40] ] ] EOF } | math gives (some empty lines deleted for readability): Mathematica 3.0 for Linux Copyright 1988-97 Wolfram Research, Inc. -- Motif graphics initialized -- In[1]:= In[2]:= Out[2]= narrow[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, > 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, > 36, 37, 38, 39, 40}] In[3]:= hu Out[3]= RowBox[{{, RowBox[{1, ,, 2, ,, 3, ,, 4, ,, 5, ,, 6, ,, 7, ,, 8, ,, 9, > ,, 10, ,, 11, ,, 12, ,, 13, ,, 14, ,, 15, ,, 16, ,, \[NewLine], 17, > ,, 18, ,, 19, ,, 20, ,, 21, ,, 22, ,, 23, ,, 24, ,, 25, ,, 26, ,, 27, > ,, 28, ,, 29, ,, 30, ,, 31, ,, 32, ,, \[NewLine]}], }}] IE, MakeBoxes works only as an explicit wrapper, it is not called automatically like Format[], and I still cannot see how I could cause it to actually break lines, instead of just inserting \[NewLine] where a line break should be. Replacing "\[NewLine]" by "\00n" gives a different, funny but still wrong result. With the above script I could of course use sed, but in an interactive front end? Regards, Timo Felbinger -- Timo Felbinger <Timo.Felbinger at quantum.physik.uni-potsdam.de> Quantum Physics Group http://www.quantum.physik.uni-potsdam.de Institut fuer Physik Tel: +49 331 977 1793 Fax: -1767 Universitaet Potsdam, Germany