Re: Re: Version 6 "Mathematica Book" - updated
- To: mathgroup at smc.vnet.net
- Subject: [mg80125] Re: [mg79983] Re: [mg79937] Version 6 "Mathematica Book" - updated
- From: Murray Eisenberg <murray at math.umass.edu>
- Date: Mon, 13 Aug 2007 04:32:47 -0400 (EDT)
- Organization: Mathematics & Statistics, Univ. of Mass./Amherst
- References: <200708090918.FAA21022@smc.vnet.net> <200708100544.BAA10635@smc.vnet.net>
- Reply-to: murray at math.umass.edu
We can really appreciate the efforts of all, the latest being Fred, to construct a virtual table of contents for the the non-existent "The Mathematica Book 5th Edition". This message compares Fred's contribution with thomas' earlier contribution. Fred's code is much shorter because of the different method he used, but the part that does all the actual writing is one huge Do expression that begs to be modularized. In Fred's code, several of the global names seem better ("overviews" instead of "fn", "mmabook" instead of "nb"). The two codes give somewhat different results. It's easy to hack thomas' code to fix up the couple of things in the results that I disliked there, especially the several "New" section titles. It would be nice, though, if we could somehow use, overall Fred's method, which seems simpler (but with modularizing that big Do loop). COMPREHENSIVENESS: * thomas includes parts Getting Started, Reference Guide, Further Tutorials, and Packages that Fred does not. ORGANIZATION: * In the Principles of Mathematica part, for the sections on "System Administration for Network Licenses" and "System Administration for Single User Licenses" both codes seem to get it a bit wrong. Thomas' code gets the hierarchy better than does Fred's code. However, thomas' code results in an unnecessary leading text cell being included directly in the Virtual Book notebook. * In the Advanced Mathematics in Mathematica part, Fred's code seems to get the hierarchy wrong in the section "Differential Equation Solving with DSolve". NAMING: * thomas' code includes the unnecessary "New: " at the start of certain section titles. OK, I can live with that. However, Fred's code gives better titles, I think, for three of these: thomas: New: DSolve Fred: Differential Equation Solving with DSolve thomas: New: NDSolve Fred: Advanced Numerical Differential Equation Solving in Mathematica thomas: New: NIntegrate Fred: Advanced Numerical Integration in Mathematica Aside from the "New:", the differences here seem to be a result of the underlying methods used for determining section titles. BEAUTY: * thomas' alignment of left margins of subsection headings is better nicer than Fred's * thomas includes the nice "spikey" with the title, Fred doesn't * thomas uses a pleasant blue color for all the actual hyperlinks, i.e., all sections, subsections,..., below the subtitle-style parts * both codes fail properly to italicize "Mathematica" when it is the last word in a heading. * both codes fail to italicize "Mathematica" in the title and in the explanatory text of the cell that follows. (Easily fixed after the fact or in the code -- use a StyleBox in the code that does that.) * Even though the paragraph at the top, beginning "A collection of links to the tutorials...", is not itself a hyperlink, it looks better to my eye in the results of Fred's code, where it appears blue because he uses the Author style for that cell. Fred Simons 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 > > -- Murray Eisenberg murray at math.umass.edu Mathematics & Statistics Dept. Lederle Graduate Research Tower phone 413 549-1020 (H) University of Massachusetts 413 545-2859 (W) 710 North Pleasant Street fax 413 545-1801 Amherst, MA 01003-9305
- References:
- Version 6 "Mathematica Book" - updated and expanded
- From: thomas <thomas.muench@gmail.com>
- Re: Version 6 "Mathematica Book" - updated and expanded
- From: Fred Simons <f.h.simons@tue.nl>
- Version 6 "Mathematica Book" - updated and expanded