Re: Version 6 "Mathematica Book" - updated and expanded
- To: mathgroup at smc.vnet.net
- Subject: [mg80141] Re: Version 6 "Mathematica Book" - updated and expanded
- From: David Reiss <dbreiss at gmail.com>
- Date: Mon, 13 Aug 2007 04:41:04 -0400 (EDT)
- References: <200708090918.FAA21022@smc.vnet.net><46BB3084.5080202@tue.nl>
This is because the CellStyle of a Cell is not an Option, but rather, it is an argument. Here are two ways to do what you want to do. Assume that you have the cell selected in the notebook nb (and that it is editable) and the the new styls is a String called newstyle SelectionMove[nb, All, Cell] cell = NotebookRead[nb] cell = cell /. Cell[x_, style_, y___] :> Cell[x, newstyle, y]; NotebookWrite[nb, cell] Here is another approach using FronEnd functions SelectionMove[nb, All, Cell] FrontEndExecute[{FrontEnd`FrontEndToken[nb, "Style", newstyle]}] --David http://scientificarts.com/worklife A WorkLife FrameWork E x t e n d i n g MATHEMATICA's=AE Reach...=99 On Aug 10, 1:54 am, "Thomas Muench" <thomas.mue... at gmail.com> wrote: > It is interesting that - again - there is a helpful function (HelpLookup) > which is not documented. At least searching for it doesn't turn up any > results in the Documentation Center. > > I have a question: > Considering my code as well as Fred's code, I wonder if there is an easy = way > to change the style of a cell (programmatically). In my code for the > Mathematica Book I use some sort of hack, and Fred's version is rather > complicated as well, although it at least looks like sound programming. > > What I expected to work (but it doesn't) is something like > SetOptions[<cell to change>,CellStyle->"newstyle"]; NotebookWrite[nb,<cell > to change>] > > But that sort of code prints the cell in its old style. If you look at the > InputForm of the newly printed cell, it has CellStyle->"newstyle" as an > option, but that doesn't do anything apparently, since "oldstyle" is still > the second argument of Cell[...]. > > Any ideas? > > Thomas > > On 8/9/07, Fred Simons <f.h.sim... at tue.nl> wrote: > > > > > I was very surprised and amused that almost exactly at the time when I > > wanted to post on this topic to mathgroup, the message of thomas entered > > my mailbox. He did a lot more than I did, but with the same improvements > > of the original version of the book as in my work. So my first idea was > > not to post my version. But there are some differences in the way we > > arrive at these improvements which I think are worth mentioning. Roughly > > speaking, the technique discussed so far is to find in the tutorials > > the complete cells with the links, often in a TOCChapter cell, then copy > > these cells and after some modifications paste them into the Mathematica > > book. > > > My approach uses the new function Documentation`HelpLookup. For example, > > > Documentation`HelpLookup["paclet:tutorial/AlgebraicCalculationsOverview= "] > > > opens the documentation on Algebraic Calculations. > > > Also new in Mathematica 6 is the function Button. The first argument is > > the text on the button, the second argument the action to be done. > > Further, there are a lot of options for the appearance of the button. > > For example: > > > Button["Algebraic Calculations", > > Documentation`HelpLookup[ > > "paclet:tutorial/AlgebraicCalculationsOverview"]] > > > Button["Algebraic Calculations", > > Documentation`HelpLookup[ > > "paclet:tutorial/AlgebraicCalculationsOverview"], > > BaseStyle -> "Section", Appearance -> None] > > > Hence the Mathematica book will consist of cells such as the following > > one. Clicking on the text opens the tutorial. > > > CellPrint[ > > ExpressionCell[ > > Button["Algebraic Calculations", > > Documentation`HelpLookup[ > > "paclet:tutorial/AlgebraicCalculationsOverview"], > > BaseStyle -> {"Section", ShowStringCharacters -> False}, > > Appearance -> None], "Section"]] > > > It would have been very nice if the Mathematica function NotebookWrite > > would be able to write ExpressionCells and TextCells. But as far as I > > can see, this not (yet?) implemented. So before writing such a cell to a > > notebook, we are forced to convert the cell contents to boxes. > > > My implementation for the Mathematica book simply runs through all > > overview tutorials and looks for cells with second argument TOCxxx. The > > first argument of such a cell contains both the text to be displayed on > > the button (no reason for beautifying ugly) and the corresponding > > paclet. For whom is still interested, here is the code. > > > overviews = FileNames["*Overview.nb", > > ToFileName[{$InstallationDirectory, "Documentation", "English", > > "System", "Tutorials"}]]; > > (*Find "Overview.nb" files in the tutorials-directory*) > > > orderOfChapters = {{36, 3, 8, 31, 4, 47, 1, 39, 32, 14, 20, 16, 18, > > 17, 11, 43}, {10, 13, 35, 48, 22, 45, 9, 27, 38, 42, 44, 23, 12, > > 26, 15, 40, 41}, {30, 25, 2, 21, 5, 7, 37, 19, 33, 34, 28, 29, 6, > > 46, 24}}; > > (*The file list is alphabetical-this is the order in which the \ > > chapters should appear*) > > > mainChapters = {"A practical introduction to Mathematica", > > "Principles of Mathematica", > > "Advanced Mathematics in Mathematica"}; > > (*The three main headings*) > > > mmabook = > > CreateDocument[{}, > > StyleDefinitions -> ToFileName["Book", " Textbook.nb"]]; > > NotebookWrite[ > > mmabook, {Cell["The Virtual Mathematica Book (v6)", "Title"], > > Cell["A collection of links to the tutorials present in the \ > > Mathematica 6.0 Documentation Center, arranged in the order of \ > > chapters in \"The Mathematica Book\".", "Author"]}]; > > > Do[ > > NotebookWrite[mmabook, > > Cell[mainChapters[[i]], "Subtitle", > > CellMargins -> {{Inherited, Inherited}, {15, 30}}, > > ShowGroupOpener -> True]]; > > Do[ > > nb = NotebookOpen[file, Visible -> False]; > > While[(SelectionMove[nb, Next, Cell]; > > z = NotebookRead[nb]) =!= {}, > > Which[z[[2]] === "TOCDocumentTitle", > > If[ MatchQ[z[[1]], TextData[_List]], > > z[[1]] = With[{zz = (z[[1]] /. StyleBox[x_, ___] :> x)[[1]]}, > > Fold[#1 <> "" <> #2 &, zz[[1]], Rest[zz]]]]; > > With[{pac = > > "paclet:tutorial/" <> > > StringReplace[ > > file, {DirectoryName[file] -> "", ".nb" -> ""}]}, > > NotebookWrite[mmabook, > > Cell[BoxData[ > > ToBoxes[Button[z[[1]], Documentation`HelpLookup[pac], > > BaseStyle -> {"Subsection", > > ShowStringCharacters -> False}, Appearance -> None]]], > > "Section", ShowGroupOpener -> True]]], > > StringMatchQ[z[[2]], "TOC*"], > > type = > > Pick[{"Subsection", "Subsubsection", > > "Subsubsubsection"}, {"Chapter", "Section", "Subsection"}, > > StringDrop[z[[2]], 3]]; > > If[type == {}, z[[1]] = "", type = type[[1]]]; > > zz = > > Cases[z[[1]], > > ButtonBox[x_, ___, ButtonData -> y_, ___] :> {x, y}, > > Infinity]; > > If[Length[zz] > 1 && Equal @@ zz[[All, 2]], > > zz = {{Fold[ #1 <> "" <> #2 &, First[zz[[All, 1]]], > > Rest[zz[[All, 1]]]], zz[[1, 2]]}}]; > > If[zz != {}, > > With[{pac = zz[[1, 2]]}, > > NotebookWrite[mmabook, > > Cell[BoxData[ > > ToBoxes[Button[zz[[1, 1]], Documentation`HelpLookup[pac], > > BaseStyle -> {type, ShowStringCharacters -> False}, > > Appearance -> None]]], type, > > ShowGroupOpener -> True]]]]]]; > > > NotebookClose[nb], > > {file, overviews[[orderOfChapters[[i]]]]}], > > {i, 1, Length[mainChapters]}]; > > > SelectionMove[mmabook, All, Notebook]; FrontEndExecute[ > > FrontEndToken["SelectionCloseAllGroups"]]; FrontEndExecute[ > > FrontEndToken["OpenCloseGroup"]]; > > SelectionMove[mmabook, Before, Notebook]; > > > Fred Simons > > Eindhoven University of Technology
- References:
- Version 6 "Mathematica Book" - updated and expanded
- From: thomas <thomas.muench@gmail.com>
- Version 6 "Mathematica Book" - updated and expanded