Re: Version 6 "Mathematica Book" - updated and expanded
- To: mathgroup at smc.vnet.net
- Subject: [mg79985] Re: [mg79937] Version 6 "Mathematica Book" - updated and expanded
- From: "Thomas Muench" <thomas.muench at gmail.com>
- Date: Fri, 10 Aug 2007 01:46:01 -0400 (EDT)
- References: <200708090918.FAA21022@smc.vnet.net> <46BB3084.5080202@tue.nl>
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.simons 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