Please imagine a simple loop:
For[i=1,i<=100,i++,
Print[i];
];
We can ask Print[] to output $(1,2,3,4,...)$ to a different notebook (in the context of the same kernel)?
Please imagine a simple loop:
For[i=1,i<=100,i++,
Print[i];
];
We can ask Print[] to output $(1,2,3,4,...)$ to a different notebook (in the context of the same kernel)?
As Yves already mentioned, you can easily create and edit notebooks through Mathematica commands. A start would be this tutorial, which you can find in the Documentation Center under tutorial/ManipulatingNotebooksFromTheKernel
Here is a short example printing the i values into a new notebook:
nb = CreateDocument[];
For[i = 1, i <= 10, i++,
SelectionMove[nb, Next, Cell];
NotebookWrite[nb,
Cell[BoxData@RowBox[{"i is now ", ToString[i]}], "Output"]];
]
If you want to know how to construct cell expressions, you could just go over any cell in a notebook and hit Ctrl+Shift+E to see the underlying structure.
Here's what I have been using.
Any improvements / comments are welcome.
(* this opens a notebook file and if notebook exists it CLEARS the contents as well *)
OpenNB[fname_] := Module[{dir, fns, nb},
dir = NotebookDirectory[];
fns = FileNames[FileNameJoin[{dir, fname}]];
If[fns === {}, (
nb = CreateNotebook[];
NotebookSave[nb, FileNameJoin[{dir, fname}]];
), (
nb = NotebookOpen[fns[[1]]];
SelectionMove[nb, All, Notebook];
NotebookDelete[nb];
)
];
Return[nb];
];
PrintNB[style_String: "Print", nb_NotebookObject: EvaluationNotebook[], args__] := NotebookWrite[nb, Cell[BoxData@ToBoxes[SequenceForm[args]], style]];
Here is example usage
logNB = OpenNB["log.nb"];
PrintNB[logNB, "Execution Log for: ", NotebookFileName[]];
PrintNB[logNB, "Started at: ", DateString[]];
f[r] = r^\[Gamma]*Exp[-\[Kappa] r];
PrintNB[logNB, "f(r) = ", f[r]];
PrintNB["PageBreak", logNB, " "];
PrintNB[logNB, "Hello"];
Here is the output
NotebookWrite write out "Output" cells...? If you allow your code to pass the style of cell to print (defaulting to "Output") you also won't need to fake the "Subsection" or whatever style with PrintHeader...
– b3m2a1
May 30 '19 at 19:58
Print you should use "Print" as the cell style instead of `"Output".
– b3m2a1
May 30 '19 at 20:14
"Print". Would you be able to give an exact replace for the two lines:
`boxes = ToBoxes /@ List[args];`
`NotebookWrite[nb, Cell[BoxData[ RowBox[boxes]], "Print"]];`
– RFS
May 30 '19 at 20:18
Print does this: Cell[BoxData@ToBoxes[SequenceForm[args]], "Print", CellLabel -> "During evaluation of In["<>ToString[$Line]<>"]:="]
– b3m2a1
May 30 '19 at 20:21
Although the question has been answered, no reason for this question was given. One possible motivation is to be able to discard a lot of diagnostic output, e.g. from an iterative process, by trashing the newly created notebook.
In such a case an alternative could be Dynamic[.], e.g.
ClearAll[iter];
Dynamic[iter]
For[i = 1, i <= 10, i++,
Pause[1.0];
iter = "i is now " <> ToString[i]
]
NotebookWrite. – Yves Klett Sep 23 '13 at 09:27Printas well. – Yves Klett Sep 23 '13 at 09:29MessagesNotebook[]to your desired notebook. – rm -rf Sep 23 '13 at 13:58