[Edu-sig] Writing books/manuals containing code

Dethe Elza delza at livingcode.org
Tue Sep 6 18:59:31 CEST 2005

(Sending this to the list because it might be useful to others as well)

On 6-Sep-05, at 7:37 AM, Peter Bowyer wrote:

> Hello Dethe,
> Thanks for your excellent information (which I see you've now sent  
> to the list as well).  I'm nearly convinced by reST now, it's a  
> really nice way to write and I know I can 'bail out' into Docbook/ 
> LaTeX at any stage using the converters.  There's some bits of reST  
> that feel odd (*italics* and **bold**, vs _italics_ and *bold*) but  
> that's because I've been using Textile before.  The more I use reST  
> the smarter it feels.

You're welcome.  I think the *italics* and **bold** come from old  
email conventions (of which there were many %-) and from the fact  
that HTML <em>phasis then maps to one asterisk, while <strong>  
emphasis maps to two.  And that leaves the underline for other  
purposes--it has many roles in reST.

> At 05:10 04/09/2005, you wrote:
>> Finally, to answer your question, you can extend reST in several
>> ways.
>> [...]
>> What kind of customizations do you need?
> Well I was thinking along the lines of suppose I want a section to  
> be collapsing/expanding in the HTML output (using Javascript), but  
> as a fixed box in the PDF.  Some sections I want to tag as advanced  
> material (which will be shown online with a blue background in  
> collapsing boxes, and may be missed out of the printed version),  
> others as important or asides (red and green backgrounds  
> respectively).  I am guessing this will have to go into the  
> structure of the document.
> Another may be a converter to the tbook format, but probably not -  
> I'll go direct to LaTeX and HTML.

For making a section in HTML collapse and expand, you can do that  
pretty easily with CSS classes, simply by switching the class name  
(one class for expanded, one for collapsed).  Bob Ippolito's MochaKit 
[1] gives some nice Javascript tools for manipulating class names  
(since a given element may have more than one class) as well as many  
other useful Javascript methods (making JS mare like Python in some  
important ways).  Depending on what elements you want to expand/ 
collapse, you may be able to walk the DOM in the onload event and add  
the appropriate classes, or you may want to tweak the output of the  
HTML writer in docutils itself.  In any case, attaching the  
javascript should be fairly trivial.  Docutils already has a variety  
of Admonitions (Attention, Caution, Danger, Error, Hint, Important,  
Note, Tip, Warning) and you can make up your own Admonitions, so that  
might be the way to create the boxes you want.  Admonitions can be  
styled differently in different outputs (blue, collapsing in HTML,  
discarded in PDF, for instance).  The implementation (for HTML) puts  
the admonition of your choice as the class name.

>> Judging by the colophons of O'Reilly books over the years, they use a
>> lot of different sytems for writing their books, depending on what
>> the author is comfortable with, as far as I can tell.
> The Pragmatic Programmers summarise their original system at http:// 
> blogs.pragprog.com/cgi-bin/pragdave.cgi/Tech/Random/DocPrep.rdoc,  
> which seems pretty similar.  I like their way of tagging blocks of  
> code with surrounding comments and inserting those chunks into the  
> document - something which shouldn't be hard to implement with a  
> preprocessor.

Docutils is intended to be able to extract documentation from the  
docstrings of Python code, but I'm not sure if that Reader is fully  
implemented yet.  Alternatively, you can include external code into a  
reST document using directives.

> Whichever route I take is going to have to end up with LaTeX for  
> the final output to render the equations.  Have you used reST's  
> equation handling?

Not really.  And I found it's table, while nice to read in text  
format, painful to create.  I ended up writing a simple script to  
massage an even simpler format into reST tables in that case.

> Thinking ahead to when I write the final report: what is  
> bibliography handling like in reST?  I've come across http:// 
> www.pricklysoft.org/software/bibstuff.html which can link reST to  
> bibtex, is this as good as it gets?

Not sure, this is something you should probably ask on the docutils  
mailing list[2].  They're quite friendly.

> The other thing I'm looking for as I write a sample document in  
> reST: is there some way to mark up text so that HTML's <abbr> or  
> <acronym> tags are used?  I'm thinking maybe in conjunction with a  
> glossary (definition list) but from the documentation I cannot see  
> how this could be linked in.

I don't see anything like this in a cursory look of the site and a  
quick google, but it's something so useful that it has almost  
certainly been discussed on the mailing list at some point.  I did  
discover while looking that automatic numbering of lists has finally  
been implemented (in the svn version, not yet in the released  
version) and that they have a table format which may be like what I  
implemented with an external script awhile back (I haven't really  
been keeping up with docutils for the past year or so).  Again, a  
quick question on the mailing list may get you what you need.   
Development appears to still be quite active, so if there is not a  
way to specify <abbr> there could be one soon.

> I think the one question I do have about reST is how sophisticated  
> are its converters?  As far as I can tell, the Docbook one is under  
> development while the LaTeX converter is pretty much complete?

They vary widely.  Once they are reasonably complete they migrate to  
the docutils core.  While still rough works in progress they tend to  
live in the sandbox.

> Thanks so much for your help,
> Peter

My pleasure.  Best wishes with the writing.


[1] http://www.mochikit.com/doc/html/MochiKit/index.html
[2] http://sourceforge.net/mailarchive/forum.php?forum_id=11444

A good engineer is a person who makes a design that works with as few  
original ideas as possible. --Freeman Dyson

More information about the Edu-sig mailing list