Re: How write output to another notebook?[another way again]
- To: mathgroup at smc.vnet.net
- Subject: [mg27871] Re: How write output to another notebook?[another way again]
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Thu, 22 Mar 2001 04:30:10 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
I found that the previous codes could not handle multiple input lines being
entered.
I have corrected this and added a way of turning the facility off.
$Pre=.;
WriteOutput::usage="WriteOutput[nb1,nb2] sets the value of $Pre so that the
\
cells generated by evaluation in nb1 are written in nb2 (not in nb1)."
OffWriteOutput::usage="OffWriteOutput leaves $Pre undefined (the default \
situation) and deletes the auxiliary invisinotebook used"
WriteOutput[nb1_,nb2_]:=
Module[{offtag},
With[{cpb= NotebookCreate[Visible\[Rule]False]},
$Pre=
Function[x,
If[EvaluationNotebook[]=== nb1,
NotebookWrite[cpb,Cell[BoxData[ MakeBoxes/@
Unevaluated[
{x,
SelectionMove[cpb,All, GeneratedCell];
$Line--;
NotebookWrite[nb2, NotebookRead[cpb]];
SelectionMove[cpb,All, GeneratedCell];
NotebookDelete[cpb];
SelectionMove[cpb,Before,Notebook];
SelectionMove[cpb,Next,Cell];
NotebookDelete[cpb];
NotebookFind[cpb, ToString[offtag], Next,CellTags];
SelectionEvaluateCreateCell[cpb]
}]], "Input"],
All];
SelectionEvaluateCreateCell[cpb];
$Line--;
,
x
],
HoldAll
];
OffWriteOutput :=
If[EvaluationNotebook[]=== nb1,
CellPrint[
Cell[
BoxData[MakeBoxes[Unset[$Pre];
NotebookClose[cpb,Interactive\[Rule]False]
]],
"Input",
GeneratedCell\[Rule]False,
CellTags \[Rule] {offtag}
]
],
Unset[$Pre];
NotebookClose[cpb,Interactive\[Rule]False]
]
]
]
Tests
Get the notebook objects of the current notebook and of two created
notebooks.
nb1= InputNotebook[];
nb2 = NotebookCreate[WindowTitle -> "nb2"];
nb3 = NotebookCreate[WindowTitle ->"nb3"];
WriteOutput[nb1,nb2];
Put the first four of the following expressions into one input cell, in
separate lines; put the remainder into a second input cell, in separate
lines.
Select both cells and enter them together.
Print[123]
Plot[x,{x,0,1}]
1/0
aa := bb
aa
StylePrint["cell text"]
?Plot
XXXXX;
Change to writing from bn2 to bn3
WriteOutput[nb2,nb3];
Try entering some input in nb2 - check that the generated cells are written
to nb3
YYYYYY(*in nb2*)
Turn the facility off
OffWriteOutput
Check:
Evaluate the following in each of nb1, nb2, nb3
2+3
5
Turn the facility back on and check that it is working
WriteOutput[nb1,nb2];
xxxx
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"Allan Hayes" <hay at haystack.demon.co.uk> wrote in message news:...
> Murray,
>
> Here is another way to get generated cells produced by evaluating cells in
> notebook nb1 into notebook nb2, instead of nb1.
> This way uses an temporary intermediate invisible notebook, nb3 that is
> created and deleted with each transfer.
> If this seems unacceptable then it could be left, emptied each time and
> deleted at the end of the session.
>
> nb1= InputNotebook[];
> nb2 = NotebookCreate[];
>
> WriteOutput[nb1_,nb2_]:=
> With[{nb1aa=nb1,nb2aa=nb2},
> $Pre=Module[{nb3},
> Function[x,
> If[EvaluationNotebook[]=== nb1aa,
> nb3= NotebookCreate[Visible\[Rule]False];
> NotebookWrite[nb3,Cell[BoxData[ MakeBoxes/@Unevaluated[
> {x,
> SelectionMove[nb3,All, GeneratedCell];
> NotebookWrite[nb2aa, NotebookRead[nb3]];
> NotebookClose[nb3]
> }]], "Input"],
> All];
> SelectionEvaluateCreateCell[nb3];
> $Line--;
> ,
> x
> ], HoldAll]
> ]
> ];
>
> WriteOutput[nb1,nb2];
>
> Test
>
> {a^b+2 +3, Print[123], 1/0,Plot[x,{x,0,1}],
> StylePrint["cell text"]}
>
>
> --
> Allan
> ---------------------
> Allan Hayes
> Mathematica Training and Consulting
> Leicester UK
> www.haystack.demon.co.uk
> hay at haystack.demon.co.uk
> Voice: +44 (0)116 271 4198
> Fax: +44 (0)870 164 0565
>
>
>