This Tcl Book system allows you to create a simple annotatable book out of plain text files. A little hypertext index allows you to select the text you want to read. Then as you read if you see something interesting in the book that stimulated some thought, you just highlight it in yellow, right click, and jot down some notes in the Notes Taking Dialog about the passage, and store it away in a notes file:
Later on, you can review the notes via the Notes Review Dialog. You select the title of one of your notes and the notes appear along with the text in the book that it refers to in the book highlighted in yellow:
This system is designed to be VERY SIMPLE and customizable. I use it as a sort of scripting language idiom, to create little English language lessons or to read online books from Project Gutenberg, a project to make the world's literature available free over the internet. This system solves one problem with Project Gutenberg texts, namely remembering where you are in them, bookmarking them, but it goes one step further and allows you take notes on any passage. It's also useful for doing translation, since you can also set-up two parallel windows with the text in either language and use the little hypertext index to synchronize passages in the two texts.
The system is an extension of the emacs bookmarks idea. I found emacs bookmarks useful for reading Project Gutenberg texts. By plain text file, I mean really plain. The only real requirement is that paragraphs be separated by a blank line (i.e. \n\n, or \s*\n)
Format of note records in notes file: note {title} {keywords} {notes} {paragraph_tag} {selection} {context} How the fields of the note records are derived: The first three are derived from the dialog (title, keywords, notes), filled in by the user. The third three (paragraph_tag,selection,context) derived from the insert mark and selection (sel) in the Tcl/Tk text widget. Like the context included in emacs bookmarks, context is used with the paragraph_tag to locate a selection in a file using regular expressions. if selection exists non-empty selection use paragraph tag of selection paragraph save the first line that the selection occurs in as the context else empty selection find line and char of insert mark (cursor) use the paragraph_tag of insert mark save the line that the insert mark is located in as the context