--- /dev/null
+#+TITLE: Mes
+#+TITLE: \\\smaller[2]{Maxwell Equations of Software}
+#+DATE:2017-02-05
+#+EMAIL: janneke@gnu.org
+#+AUTHOR: janneke@gnu.org
+#+LATEX_HEADER:\institute{FOSDEM'17}
+#+LATEX_HEADER:\def\ahref#1#2{\htmladdnormallink{#2}{#1}}
+#+OPTIONS: H:2
+#+LATEX_CLASS: beamer
+#+LATEX_CLASS_OPTIONS: [presentation]
+#+LATEX_HEADER: \usepackage{relsize}
+#+LATEX_HEADER: \usepackage{hyperref}
+#+LATEX_HEADER: \usepackage{html}
+#+latex_header: \mode<beamer>{\usetheme{X}}
+#+BEAMER_THEME: X
+#+BEAMER_FRAME_LEVEL: 2
+#+COLUMNS: %45ITEM %10BEAMER_ENV(Env) %10BEAMER_ACT(Act) %4BEAMER_COL(Col) %8BEAMER_OPT(Opt)
+
+* Mes, WHAT?
+
+# ** TEST
+# - @@beamer:<1->@@ Item 1
+# - @@beamer:<2->@@ Item 2
+
+# GNU LilyPond, Verum
+# Depression: France, Netherlands, US: about 20%; 10x more than 50 years ago
+
+** Mes: Full Source Bootstrapping
+
+*** Bootstrapping :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_COL: 0.6
+ :BEAMER_ENV: block
+ :END:
+ * Where do compilers come from?
+ * Who compiled the compiler?
+ * Chicken and Egg
+*** . :B_block:BMCOL:
+#+LATEX:\includegraphics[width=0.4\textwidth]{mes.png}
+ :PROPERTIES:
+ :BEAMER_COL: 0.3
+ :xBEAMER_ACT: <2->
+ :xBEAMER_ENV: block
+ :END:
+
+
+*** mes: A tiny Scheme interpreter in Hex [or simple C?]
+ :PROPERTIES:
+ :BEAMER_ACT: <2->
+ :END:
+
+*** mescc: A C compiler in Scheme, executed by Mes
+ * Mes + CC =
+#+xATTR_LATEX: :=\linewidth
+#+xLATEX:\includegraphics[width=0.25\textwidth]{fsb-logo.png}
+#+LATEX:\rightskip=-3cm\includegraphics[width=0.2\textwidth]{fsb-logo-guile-guix-mes.png}
+ :PROPERTIES:
+ :BEAMER_ACT: <3->
+ :END:
+
+* Mes, what NOT?
+ :PROPERTIES:
+ :xBEAMER_ENV: note
+ :END:
+
+** Mes is a strategy
+ * NOT a goal in itself -- only a means or proof of concept
+ * NOT a general purpose Scheme -- close to R6RS
+ * NOT an alternative for Guile -- reuse Guile modules
+
+* Mes, WHY?
+
+** Inspiration: what do you want?
+
+*** Meaning, Autonomy, Co-Creation, Self-Realization
+ * Discovering, Hacking, Motivating, Playing
+ :PROPERTIES:
+ :BEAMER_ACT: <2->
+ :END:
+
+*** A planet of enlightened beings
+# * Awakening of consciousness
+ * Look inward
+ * Be happy
+ * Be helpful
+ :PROPERTIES:
+ :BEAMER_ACT: <3->
+ :END:
+*** A world where all software is free
+ * Support \ahref{https://gnu.org}{GNU}
+ * Create free software
+# * Be patient, be wise
+ :PROPERTIES:
+ :BEAMER_ACT: <4->
+ :END:
+
+** Inspiration: when do you want it?
+
+*** NOW!!!
+ :PROPERTIES:
+ :BEAMER_ACT: <2->
+ :END:
+
+** Inspiration
+
+*** To finally run GNU
+ * GuixSD: GNU in the flesh
+ :PROPERTIES:
+ :BEAMER_ACT: <1->
+ :END:
+
+# * Michael Nielsen: \ahref{http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software}{Lisp as the Maxwell's Equations of Software}
+
+# *** recap the 4 freedoms
+# :PROPERTIES:
+# :BEAMER_ACT: <3->
+# :END:
+
+** 1941: The \ahref{https://en.wikipedia.org/wiki/Four_Freedoms}{Four Freedoms}
+ :PROPERTIES:
+ :BEAMER_ENV: note
+ :END:
+*** for all people on our planet
+
+ * Freedom of speech
+ * Freedom of worship
+ * Freedom from want
+ * Freedom from fear
+
+-- Franklin D. Roosevelt
+
+** 1984 Four Software Freedoms: GNU GPL
+ :PROPERTIES:
+ :xBEAMER_ENV: note
+ :END:
+*** The freedom to
+
+ * 0 run the program as you wish, for any purpose
+ * 1 study how the program works, and change it if you wish
+ * 2 redistribute copies so you can help your neighbor
+ * 3 share copies of your modified versions with others
+
+-- Richard M. Stallman
+
+# 1: Access to the source code is a precondition for this.
+
+# 3: By doing this you can give the whole community a chance to benefit
+# from your changes. Access to the source code is a precondition for
+# this.
+
+** 2013 Debian's \ahref{https://reproducible-builds.org}{reproducible-builds.org}
+
+*** Verifiable path: source -> binary
+Reproducible builds are a set of software development practices that
+create a verifiable path from human readable source code to the binary
+code used by computers.
+
+*** Does this binary come from the given source?
+ * Always different binary...dunno?
+ * Same binary
+ * Always good, always bad?
+
+** 2015 GuixSD \ahref{https://www.gnu.org/software/guix/news/reproducible-builds-a-means-to-an-end.html}{Reproducible builds: a means to an end}
+
+# GNU Guix is committed to improving the freedom and autonomy of
+# computer users. This obviously manifests in the fact that GuixSD is a
+# fully free distro, and this is what GNU stands for. All the packages
+# in Guix are built from source, including things like firmware where
+# there is an unfortunate tendency to use pre-built binaries; that way,
+# users can know what software they run. On the technical side, Guix
+# also tries hard to empower users by making the whole system as
+# hackable as possible, in a uniform way—making Freedom #1 practical, à
+# la Emacs.
+
+*** A technical means to an end
+ * guarantee user autonomy and safety
+ * GNU+GuixSD: fully free distro
+ * NixOS: fully isolated build environment
+ * NixOS: full list of dependencies
+ * reproducible builds: bit-for-bit identical binaries
+
+-- Ludovic Courtès
+
+** 2016 From GuixSD to Mes: The bootstrap binaries
+
+*** GuixSD ... source
+ * source/binary transparency
+ * all is built from source
+ * *EVERYTHING*
+ * starting from the ... *bootstrap binaries*
+
+
+ The distribution is fully “bootstrapped” and “self-contained”: each
+package is built based solely on other packages in the distribution.
+
+The root of this dependency graph is a small set of “bootstrap
+binaries”, provided by the ‘(gnu packages bootstrap)’ module. For more
+information on bootstrapping, *note Bootstrapping::.
+
+
+[2010]: Eelco Dolstra, Andres Löh, and Nicolas Pierron described
+sources of non-determinism in their 2010 JFP paper about NixOS
+
+
+** GuixSD bootstrap graph
+
+#+LATEX:\includegraphics[width=0.8\textwidth]{bootstrap-graph.png}
+
+
+** GuixSD bootstrap tarballs
+#+BEGIN_SRC bash
+$ du -schx $(readlink $(guix build bootstrap-tarballs)/*)
+2.1M /gnu/store/mzk1bc3pfrrf4qnfs3zkj5ch83srnvpx-binutils-static-stripped-tarball-2.27/binutils-static-stripped-2.27-x86_64-linux.tar.xz
+16M /gnu/store/jddviycivycfhaqahqff6n18y9w46gpz-gcc-stripped-tarball-4.9.4/gcc-stripped-4.9.4-x86_64-linux.tar.xz
+1.7M /gnu/store/x5zrmh820yc054w00cy00iixwghmly2y-glibc-stripped-tarball-2.24/glibc-stripped-2.24-x86_64-linux.tar.xz
+3.1M /gnu/store/znsf5d7xbqkp4rrjgzsklmwmms8m5i3m-guile-static-stripped-tarball-2.0.12/guile-static-stripped-2.0.12-x86_64-linux.tar.xz
+5.7M /gnu/store/myfikfgx74dzlm3lc217kchxnckri5qq-static-binaries-tarball-0/static-binaries-0-x86_64-linux.tar.xz
+28M total
+$ for i in $(readlink $(guix build bootstrap-tarballs)/*);\
+ do sudo tar xf $i; done
+$ du -schx *
+125M bin
+13M include
+18M lib
+43M libexec
+4.3M share
+202M total
+#+END_SRC
+
+
+** Inspiration
+
+*** To finally run GNU
+ * GuixSD: GNU in the flesh
+ :PROPERTIES:
+ :BEAMER_ACT: <1->
+ :END:
+*** Bootstrap binaries: source all the way down?
+ * OriansJ: \ahref{https://github.com/oriansj/stage0}{self-hosting hex assembler}
+ :PROPERTIES:
+ :BEAMER_ACT: <1->
+ :END:
+*** The computer revolution hasn't happened yet
+ * Alan Kay
+ :PROPERTIES:
+ :BEAMER_ACT: <2->
+ :END:
+The computer revolution is very new, and all of the good ideas have
+not been universally implemented
+
+** Bootstrapping: Chicken and Egg
+
+#+LATEX:\includegraphics[width=0.3\textwidth]{egg.png}
+
+** Inspiration
+
+*** To finally run GNU
+ * GuixSD: GNU in the flesh
+ :PROPERTIES:
+ :BEAMER_ACT: <1->
+ :END:
+*** Bootstrap binaries: source all the way down?
+ * OriansJ: \ahref{https://github.com/oriansj/stage0}{self-hosting hex assembler}
+ :PROPERTIES:
+ :BEAMER_ACT: <1->
+ :END:
+*** The computer revolution hasn't happened yet
+ * Alan Kay
+ :PROPERTIES:
+ :BEAMER_ACT: <1->
+ :END:
+The computer revolution is very new, and all of the good ideas have
+not been universally implemented
+*** \ahref{http://queue.acm.org/detail.cfm?id=1039523}{LISP as the Maxwell's Equations of Software}
+ :PROPERTIES:
+ :BEAMER_ACT: <1->
+ :END:
+That was the big revelation to me when I [..] finally understood that
+the half page of code on the bottom of page 13 of the Lisp 1.5 manual
+was Lisp in itself. These were “Maxwell’s Equations of Software!”
+
+ * \ahref{http://www.softwarepreservation.org/projects/LISP/book/LISP\%25201.5\%2520Programmers\%2520Manual.pdf}{LISP-1.5}: page 13
+
+
+** Chicken and Egg
+
+ * the shortest path from hex to gcc
+ * using Maxwell's Equations of Software
+
+** Bootstrapping: Chicken and Egg
+
+#+LATEX:\includegraphics[width=0.3\textwidth]{mes.png}
+
+
+* Mes: HOW?
+
+** LISP-1.5 John McCarthy: page 13
+
+# convert -density 150 -quality 100 -flatten -sharpen 0x1.0 LISP-1.5-page-13.pdf LISP-1.5-page-13.png
+#+BEGIN_COMMENT
+[[file:LISP-1-5-page-13-bottom.png][LISP-1.5 page 13 bottom]]
+#+END_COMMENT
+
+#+ATTR_LATEX: :width=\linewidth
+#+LATEX:\includegraphics[width=\textwidth]{LISP-1-5-page-13-bottom.png}
+
+** Eval/Apply
+ * core
+ * apply
+ * eval
+ * helpers
+ * assoc
+ * pairlis
+ * evcon
+ * evlis
+ * primitives
+ * atom
+ * car
+ * cdr
+ * cons
+ * eq
+
+** LISP-1.5 in Guile Scheme: APPLY
+
+#+BEGIN_SRC scheme
+(define (apply fn x a)
+ (cond
+ ((atom fn)
+ (cond
+ ((eq fn CAR) (caar x))
+ ((eq fn CDR) (cdar x))
+ ((eq fn CONS) (cons (car x) (cadr x)))
+ ((eq fn ATOM) (atom (car x)))
+ ((eq fn EQ) (eq (car x) (cadr x)))
+ (#t (apply (eval fn a) x a))))
+ ((eq (car fn) LAMBDA)
+ (eval (caddr fn) (pairlis (cadr fn) x a)))
+ ((eq (car fn) LABEL)
+ (apply (caddr fn) x (cons (cons (cadr fn)
+ (caddr fn))
+ a)))))
+#+END_SRC
+
+** LISP-1.5 in Guile Scheme: EVAL
+
+#+BEGIN_SRC scheme
+(define (eval e a)
+ (cond
+ ((atom e) (cdr (assoc e a)))
+ ((atom (car e))
+ (cond ((eq (car e) QUOTE) (cadr e))
+ ((eq (car e) COND) (evcon (cdr e) a))
+ (#t (apply (car e)
+ (evlis (cdr e) a) a))))
+ (#t (apply (car e) (evlis (cdr e) a) a))))
+#+END_SRC
+
+** LISP-1.5 in Scheme: ASSOC, PAIRLIS, EVCON, EVLIS
+
+#+BEGIN_SRC scheme
+(define (assoc x a)
+ (cond ((eq (caar a) x) (car a))
+ (#t (assoc x (cdr a)))))
+
+(define (pairlis x y a)
+ (cond ((null x) a)
+ (#t (cons (cons (car x) (car y))
+ (pairlis (cdr x) (cdr y) a)))))
+
+(define (evcon c a)
+ (cond ((eval (caar c) a) (eval (cadar c) a))
+ (#t (evcon (cdr c) a))))
+
+(define (evlis m a)
+ (cond ((null m) NIL)
+ (#t (cons (eval (car m) a) (evlis (cdr m) a)))))
+#+END_SRC
+
+
+** LISP-1.5 in C
+
+ * closures
+ * symbols
+ * specials? =()= =#t= =#f= =*unspecified*= =*undefined*=
+ * macros
+ * syntax-rules
+ * records
+ * modules/importing
+
+** Garbage/Jam Collector
+
+*** Abelson & Sussman
+With a real computer we will eventually run out of free
+space in which to construct new pairs.(1)
+
+*** footnote(1)
+
+This may not be true eventually, because memories may get large
+enough so that it would be impossible to run out of free memory in the
+lifetime of the computer. For example, there are about {3\cdot10^{13}}
+microseconds in a year, so if we were to ‘cons’ once per microsecond we
+would need about 10^{15} cells of memory to build a machine that could
+operate for 30 years without running out of memory.
+
+
+** C parser: roll your own LALR
+
+*** Lalr
+ * minimal ANSI-C parser
+
+ =int main (){puts ("Hello, world!");return 0;}=
+
+** C parser: Nyacc
+*** Pros
+ * full C99 parser
+ * ...including C pre-processor
+ * perspective of building complete C compiler in Guile
+ * tsunami of enthusiasm and contributors!
+
+** C parser: Nyacc
+
+*** Cons: more TODO for Mes
+ * keywords
+ * =define*=, =lambda*=
+ * optargs
+ * exeptions, =catch=, =throw=
+ * =call/cc=
+ * fluids, =with-fluid=
+ * =syntax-case=
+ * André van Tonder's 2006-2007 streak in 14 "commits"
+ * psyntax: another bootstrap loop?!
+ * R7RS's Ellipsis
+ * Guile-1.8
+ * =#;=-comments
+ * =#||#=-comments
+
+** C parser: Nyacc
+
+*** Cons: more TODO for Mes
+
+ * Cond supports ==>=
+ * Bugfixes
+ * Cond now evaluates its test clauses only once
+ * Append can also handle one argument
+ * For-each now supports 2 list arguments
+ * Map now supports 3 list arguments
+ * Backslash in string is supported
+ * Closure is not a pair
+ * All standard characters are supported
+
+ * 36 new functions
+#+BEGIN_SRC scheme
+ 1+, 1-, abs, and=>, append-reverse, ash, char<\=?, char<?,
+ char>=?, char>?, even?, filter, delete, delq, vector-copy,
+ fold, fold-right, getenv, iota, keyword->symbol list-head,
+ list-tail, negative?, odd?, positive?, remove!, remove,
+ string->number, string-copy, string-prefix?, string=,
+ string=?, symbol->keyword symbol-append, symbol-prefix?,
+ unless, write, zero?
+#+END_SRC
+
+* Mes: WHERE?
+
+
+** Timeline
+
+*** June 19: \ahref{https://lists.gnu.org/archive/html/guile-user/2016-06/msg00061.html}{on bootstrapping: introducing Mes}
+# https://gnunet.org/bot/log/guile/2016-05-19
+ * LISP-1.5 in Scheme and in C
+*** September 25: \ahref{https://lists.gnu.org/archive/html/guile-user/2016-09/msg00061.html}{on bootstrapping: 2nd status report on Mes}
+# https://gnunet.org/bot/log/guile/2016-09-25
+ * Scheme primitives in C, closures, macros, 97 tests, LALR
+ * Produce ELF binary from
+#+BEGIN_SRC C
+int main ()
+{
+ int i;
+ puts ("Hi Mes!\n");
+ for (i = 0; i < 4; ++i)
+ puts (" Hello, world!\n");
+ return 1;
+}
+#+END_SRC
+ * in 1'20"
+
+** Timeline
+
+*** October 23: 0.1 [not announced]
+ * =let-syntax=, =match=
+ * compile main.c in 2s (was 1'20")
+ * add REPL
+
+*** November 21: 0.2 [not announced]
+ * psyntax integration, =syntax-case=, =load=
+
+*** December 12: \ahref{https://lists.gnu.org/archive/html/guile-user/2016-12/msg00008.html}{on bootstrapping: first Mes 0.3 released}
+# https://gnunet.org/bot/log/guile/2016-12-12
+ * Garbage Collector/Jam Scraper
+
+*** December 25: \ahref{https://lists.gnu.org/archive/html/guile-user/2016-12/msg00041.html}{Mes 0.4 released}
+# https://gnunet.org/bot/log/guile/2016-12-25
+ * run Nyacc, PEG, reduced core
+
+** Status
+
+*** core C prototype: 1150 lines
+*** non-essential C sources:
+#+BEGIN_SRC bash
+ 210 lib.c
+ 157 math.c
+ 126 posix.c
+ 134 reader.c
+ 627 total
+#+END_SRC
+
+** Status
+*** tiny-mes.c: 270 lines
+ * compiles with mescc
+ * i386-lib: =i386:exit=, =i3886:open=, =i386:read=, =i386:write=
+ * tiny-libc: =getchar=, =putchar=, =puts=, =strcmp=, =strlen=
+ * runs
+#+BEGIN_SRC bash
+Hello tiny-mes!
+reading: module/mes/hack-32.mo
+MES *GOT MES*
+(#\A(#\B))
+#+END_SRC
+
+** Status
+
+*** mini-mes.c: 800 lines
+ * 12kB binary
+ * 2500 lines assembly
+ * runs with gcc
+#+BEGIN_SRC bash
+Hello mini-mes!
+reading: module/mes/hack-32.mo
+MES *GOT MES*
+cells read: 19
+symbols: 1
+program[10]: (cons(0(1)))
+(0 . 1)
+#+END_SRC
+ * compiles with mescc
+ * 83 statements skipped
+
+** Status
+
+***
+
+#+BEGIN_SRC bash
+01:16:51 janneke@dundal:~/src/mes
+$ guix package -f guix.scm
+The following package will be upgraded:
+ mes 0.4.f84e97fc -> 0.4.f84e97fc /gnu/store/2fsy1cd24pnwkv7a1zd0anzk3zz8ysdn-mes-0.4.f84e97fc
+
+#+END_SRC
+
+
+
+** Misc
+ :PROPERTIES:
+ :BEAMER_ENV: note
+ :END:
+
+civodul
+
+Impressive!
+
+ Is it a goal to try interpret a language as close as possible to that of
+ Guile, and have the same libraries? I guess that could help in the
+ future: we could use (system base lalr), nyacc, etc.
+
+ Also, currently there’s approximately 2K lines of C. How do you plan to
+ make sure that it doesn’t grow over time, or even that it shrinks? :-)
+
+ This all sounds very promising, thanks a lot!
+
+arnebab
+
+This is really cool! Thank you for your work!
+
+ > How do you compile the interpreter?
+
+paroneayea/cwebber
+First, I'm really excited you're making progress on Mes!
+
+ > Second, Scheme48 did something similar to this, called "Pre-Scheme",
+ which is how they bootstrapped Scheme48 iirc. Have you heard of it or
+ looked at it?
+
+ https://en.wikipedia.org/wiki/PreScheme
+
+ * PreScheme in Scheme48
+ * \ahref{http://canonical.org/~kragen/sw/urscheme/}{Ur-Scheme}
+R5RS to x86 Assembly
+
+** What's next?
+
+ * psyntax
+ * source or binary?
+ * alternative syntax-case?
+ * rewrite Nyacc without syntax-case, R7RS-ellipsis?
+ * call/cc vs eval/apply/evlis?
+ * merge with Guile?
+ * compile Guile or compile Gcc?
+ * prototype? in C
+ * move from C to Hex?
+ * move from C to [Pre]Scheme
+
+** Thanks
+*** Thanks :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_COL: 0.48
+ :BEAMER_ENV: block
+ :END:
+ * John McCarthy
+ * Richard Stallman
+ * Eelco Dolstra
+ * Ludovic Courtès
+ * Rutger van Beusekom
+ * Christopher A. Webber
+*** Thanks everyone else :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_COL: 0.48
+ :xBEAMER_ACT: <2->
+ :BEAMER_ENV: block
+ :END:
+ * LISP-1.5
+ * GNU
+ * NixOS
+ * Debian reproducible builds
+ * GuixSD
+ * FOSDEM
+*** Connect
+ * irc freenode.net [[irc://guix@freenode.net][#guix]] [[irc://guile@freenode.net][#guile]]
+ * mail [[mailto://guile-user@gnu.org][guile-user@gnu.org]]
+ * git [[https://gitlab.com/janneke/mes][git@gitlab.com:janneke/mes.git]]
+
+# * Copying
+# :PROPERTIES:
+# :COPYING: t
+# :END:
+
+# Copyright \copy 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+
+# C-c C-e l b (org-beamer-export-to-latex)
+# C-c C-e l P (org-beamer-export-to-pdf)
--- /dev/null
+%
+% $Id: html.sty,v 1.39 2001/10/01 22:47:06 RRM Exp $
+% LaTeX2HTML Version 2K.1 : html.sty
+%
+% This file contains definitions of LaTeX commands which are
+% processed in a special way by the translator.
+% For example, there are commands for embedding external hypertext links,
+% for cross-references between documents or for including raw HTML.
+% This file includes the comments.sty file v2.0 by Victor Eijkhout
+% In most cases these commands do nothing when processed by LaTeX.
+%
+% Place this file in a directory accessible to LaTeX (i.e., somewhere
+% in the TEXINPUTS path.)
+%
+% NOTE: This file works with LaTeX 2.09 or (the newer) LaTeX2e.
+% If you only have LaTeX 2.09, some complex LaTeX2HTML features
+% like support for segmented documents are not available.
+
+% Changes:
+% See the change log at end of file.
+
+
+% Exit if the style file is already loaded
+% (suggested by Lee Shombert <las@potomac.wash.inmet.com>
+\ifx \htmlstyloaded\relax \endinput\else\let\htmlstyloaded\relax\fi
+\makeatletter
+
+% allow for the hyperref package to be cleanly loaded
+% either before or after this package,
+% and ensure it is already loaded, when using pdf-TeX
+
+\ifx\undefined\hyperref
+ \ifx\pdfoutput\undefined \let\pdfunknown\relax
+ \let\html@new=\newcommand
+ \else
+ \ifx\pdfoutput\relax \let\pdfunknown\relax
+ \RequirePackage{hyperref}\let\html@new=\renewcommand
+ \else
+ \ifcase\pdfoutput
+ \let\pdfunknown\relax \let\html@new=\newcommand
+ \else
+ \RequirePackage[pdftex]{hyperref}\let\html@new=\newcommand
+ \fi
+
+ \fi
+ \fi
+\else
+ \let\html@new=\renewcommand
+\fi
+
+\providecommand{\latextohtml}{\LaTeX2\texttt{HTML}}
+
+%%% LINKS TO EXTERNAL DOCUMENTS
+%
+% This can be used to provide links to arbitrary documents.
+% The first argumment should be the text that is going to be
+% highlighted and the second argument a URL.
+% The hyperlink will appear as a hyperlink in the HTML
+% document and as a footnote in the dvi or ps files.
+%
+\ifx\pdfunknown\relax
+ \html@new{\htmladdnormallinkfoot}[2]{#1\footnote{#2}}
+\else
+ \def\htmladdnormallinkfoot#1#2{\footnote{\href{#2}{#1}}}
+\fi
+
+% This is an alternative definition of the command above which
+% will ignore the URL in the dvi or ps files.
+\ifx\pdfunknown\relax
+ \html@new{\htmladdnormallink}[2]{#1}
+\else
+ \def\htmladdnormallink#1#2{\href{#2}{#1}}
+\fi
+
+% This command takes as argument a URL pointing to an image.
+% The image will be embedded in the HTML document but will
+% be ignored in the dvi and ps files.
+%
+\ifx\pdfunknown\relax
+ \html@new{\htmladdimg}[1]{}
+\else
+ \def\htmladdimg#1{\hyperimage{#1}}
+\fi
+
+
+%%% CROSS-REFERENCES BETWEEN (LOCAL OR REMOTE) DOCUMENTS
+%
+% This can be used to refer to symbolic labels in other Latex
+% documents that have already been processed by the translator.
+% The arguments should be:
+% #1 : the URL to the directory containing the external document
+% #2 : the path to the labels.pl file of the external document.
+% If the external document lives on a remote machine then labels.pl
+% must be copied on the local machine.
+%
+%e.g. \externallabels{http://cbl.leeds.ac.uk/nikos/WWW/doc/tex2html/latex2html}
+% {/usr/cblelca/nikos/tmp/labels.pl}
+% The arguments are ignored in the dvi and ps files.
+%
+\newcommand{\externallabels}[2]{}
+
+
+% This complements the \externallabels command above. The argument
+% should be a label defined in another latex document and will be
+% ignored in the dvi and ps files.
+%
+\newcommand{\externalref}[1]{}
+
+
+% Suggested by Uffe Engberg (http://www.brics.dk/~engberg/)
+% This allows the same effect for citations in external bibliographies.
+% An \externallabels command must be given, locating a labels.pl file
+% which defines the location and keys used in the external .html file.
+%
+\newcommand{\externalcite}{\nocite}
+
+% This allows a section-heading in the TOC or mini-TOC to be just
+% a hyperlink to an external document.
+%
+% \htmladdTOClink[<path_to_labels>]{<section-level>}{<title>}{<URL>}
+% where <section-level> is 'chapter' , 'section' , 'subsection' etc.
+% and <path_to_labels> is the path to find a labels.pl file,
+% so that external cross-referencing may work, as with \externallabels
+%
+%\ifx\pdfunknown\relax
+ \newcommand{\htmladdTOClink}[4][]{}
+%
+% can do something here, using the \pdfoutline primitive
+%\else
+% \def\htmladdTOClink#1#2#3#4{\pdfoutline user {/S /URI /URI #4}
+% name{#2} count{#1}{#3}}
+%\fi
+
+
+%%% HTMLRULE
+% This command adds a horizontal rule and is valid even within
+% a figure caption.
+% Here we introduce a stub for compatibility.
+\newcommand{\htmlrule}{\protect\HTMLrule}
+\newcommand{\HTMLrule}{\@ifstar\htmlrulestar\htmlrulestar}
+\newcommand{\htmlrulestar}[1]{}
+
+%%% HTMLCLEAR
+% This command puts in a <BR> tag, with CLEAR="ALL"
+\newcommand{\htmlclear}{}
+
+% This command adds information within the <BODY> ... </BODY> tag
+%
+\newcommand{\bodytext}[1]{}
+\newcommand{\htmlbody}{}
+
+
+%%% HYPERREF
+% Suggested by Eric M. Carol <eric@ca.utoronto.utcc.enfm>
+% Similar to \ref but accepts conditional text.
+% The first argument is HTML text which will become ``hyperized''
+% (underlined).
+% The second and third arguments are text which will appear only in the paper
+% version (DVI file), enclosing the fourth argument which is a reference to a label.
+%
+%e.g. \hyperref{using the tracer}{using the tracer (see Section}{)}{trace}
+% where there is a corresponding \label{trace}
+%
+% avoid possible confict with hyperref package
+\ifx\undefined\hyperref
+ \newcommand{\hyperrefhyper}[4]{#4}%
+ \def\next{\newcommand}%
+\else
+ \let\hyperrefhyper\hyperref
+ \def\next{\renewcommand}%
+\fi
+\next{\hyperref}{\hyperrefi[]}\let\next=\relax
+
+\def\hyperrefi[#1]{{\def\next{#1}\def\tmp{}%
+ \ifx\next\tmp\aftergroup\hyperrefdef
+ \else\def\tmp{ref}\ifx\next\tmp\aftergroup\hyperrefref
+ \else\def\tmp{pageref}\ifx\next\tmp\aftergroup\hyperrefpageref
+ \else\def\tmp{page}\ifx\next\tmp\aftergroup\hyperrefpage
+ \else\def\tmp{noref}\ifx\next\tmp\aftergroup\hyperrefnoref
+ \else\def\tmp{no}\ifx\next\tmp\aftergroup\hyperrefno
+ \else\def\tmp{hyper}\ifx\next\tmp\aftergroup\hyperrefhyper
+ \else\def\tmp{html}\ifx\next\tmp\aftergroup\hyperrefhtml
+ \else\typeout{*** unknown option \next\space to hyperref ***}%
+ \fi\fi\fi\fi\fi\fi\fi\fi}}
+\newcommand{\hyperrefdef}[4]{#2\ref{#4}#3}
+\newcommand{\hyperrefpageref}[4]{#2\pageref{#4}#3}
+\newcommand{\hyperrefnoref}[3]{#2}
+\let\hyperrefref=\hyperrefdef
+\let\hyperrefpage=\hyperrefpageref
+\let\hyperrefno=\hyperrefnoref
+\ifx\undefined\hyperrefhyper\newcommand{\hyperrefhyper}[4]{#4}\fi
+\let\hyperrefhtml=\hyperrefdef
+
+%%% HYPERCITE --- added by RRM
+% Suggested by Stephen Simpson <simpson@math.psu.edu>
+% effects the same ideas as in \hyperref, but for citations.
+% It does not allow an optional argument to the \cite, in LaTeX.
+%
+% \hypercite{<html-text>}{<LaTeX-text>}{<opt-text>}{<key>}
+%
+% uses the pre/post-texts in LaTeX, with a \cite{<key>}
+%
+% \hypercite[ext]{<html-text>}{<LaTeX-text>}{<key>}
+% \hypercite[ext]{<html-text>}{<LaTeX-text>}[<prefix>]{<key>}
+%
+% uses the pre/post-texts in LaTeX, with a \nocite{<key>}
+% the actual reference comes from an \externallabels file.
+%
+\newcommand{\hypercite}{\hypercitei[]}
+\def\hypercitei[#1]{{\def\next{#1}\def\tmp{}%
+ \ifx\next\tmp\aftergroup\hypercitedef
+ \else\def\tmp{int}\ifx\next\tmp\aftergroup\hyperciteint
+ \else\def\tmp{cite}\ifx\next\tmp\aftergroup\hypercitecite
+ \else\def\tmp{ext}\ifx\next\tmp\aftergroup\hyperciteext
+ \else\def\tmp{nocite}\ifx\next\tmp\aftergroup\hypercitenocite
+ \else\def\tmp{no}\ifx\next\tmp\aftergroup\hyperciteno
+ \else\typeout{*** unknown option \next\space to hypercite ***}%
+ \fi\fi\fi\fi\fi\fi}}
+\newcommand{\hypercitedef}[4]{#2{\def\tmp{#3}\def\emptyopt{}%
+ \ifx\tmp\emptyopt\cite{#4}\else\cite[#3]{#4}\fi}}
+\newcommand{\hypercitenocite}[2]{#2\hypercitenocitex[]}
+\def\hypercitenocitex[#1]#2{\nocite{#2}}
+\let\hypercitecite=\hypercitedef
+\let\hyperciteint=\hypercitedef
+\let\hyperciteext=\hypercitenocite
+\let\hyperciteno=\hypercitenocite
+
+%%% HTMLREF
+% Reference in HTML version only.
+% Mix between \htmladdnormallink and \hyperref.
+% First arg is text for in both versions, second is label for use in HTML
+% version.
+\ifx\pdfunknown\relax
+ \html@new{\htmlref}[2]{#1}
+\else
+ \def\htmlref#1#2{\hyperefhyper[#2]{#1}}
+\fi
+
+%%% HTMLCITE
+% Reference in HTML version only.
+% Mix between \htmladdnormallink and \hypercite.
+% First arg is text for both versions, second is citation for use in HTML
+% version.
+\newcommand{\htmlcite}[2]{#1}
+
+
+%%% HTMLIMAGE
+% This command can be used inside any environment that is converted
+% into an inlined image (eg a "figure" environment) in order to change
+% the way the image will be translated. The argument of \htmlimage
+% is really a string of options separated by commas ie
+% [scale=<scale factor>],[external],[thumbnail=<reduction factor>
+% The scale option allows control over the size of the final image.
+% The ``external'' option will cause the image not to be inlined
+% (images are inlined by default). External images will be accessible
+% via a hypertext link.
+% The ``thumbnail'' option will cause a small inlined image to be
+% placed in the caption. The size of the thumbnail depends on the
+% reduction factor. The use of the ``thumbnail'' option implies
+% the ``external'' option.
+%
+% Example:
+% \htmlimage{scale=1.5,external,thumbnail=0.2}
+% will cause a small thumbnail image 1/5th of the original size to be
+% placed in the final document, pointing to an external image 1.5
+% times bigger than the original.
+%
+\newcommand{\htmlimage}[1]{}
+
+
+% \htmlborder causes a border to be placed around an image or table
+% when the image is placed within a <TABLE> cell.
+\newcommand{\htmlborder}[1]{}
+
+% Put \begin{makeimage}, \end{makeimage} around LaTeX to ensure its
+% translation into an image.
+% This shields sensitive text from being translated.
+\newenvironment{makeimage}{}{}
+
+
+% A dummy environment that can be useful to alter the order
+% in which commands are processed, in LaTeX2HTML
+\newenvironment{tex2html_deferred}{}{}
+
+
+%%% HTMLADDTONAVIGATION
+% This command appends its argument to the buttons in the navigation
+% panel. It is ignored by LaTeX.
+%
+% Example:
+% \htmladdtonavigation{\htmladdnormallink
+% {\htmladdimg{http://server/path/to/gif}}
+% {http://server/path}}
+\newcommand{\htmladdtonavigation}[1]{}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% based upon Eijkhout's comment.sty v2.0
+% with modifications to avoid conflicts with later versions
+% of this package, should a user be requiring it.
+% Ross Moore, 10 March 1999
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Comment.sty version 2.0, 19 June 1992
+% selectively in/exclude pieces of text: the user can define new
+% comment versions, and each is controlled separately.
+% This style can be used with plain TeX or LaTeX, and probably
+% most other packages too.
+%
+% Examples of use in LaTeX and TeX follow \endinput
+%
+% Author
+% Victor Eijkhout
+% Department of Computer Science
+% University Tennessee at Knoxville
+% 104 Ayres Hall
+% Knoxville, TN 37996
+% USA
+%
+% eijkhout@cs.utk.edu
+%
+% Usage: all text included in between
+% \comment ... \endcomment
+% or \begin{comment} ... \end{comment}
+% is discarded. The closing command should appear on a line
+% of its own. No starting spaces, nothing after it.
+% This environment should work with arbitrary amounts
+% of comment.
+%
+% Other 'comment' environments are defined by
+% and are selected/deselected with
+% \includecomment{versiona}
+% \excludecoment{versionb}
+%
+% These environments are used as
+% \versiona ... \endversiona
+% or \begin{versiona} ... \end{versiona}
+% with the closing command again on a line of its own.
+%
+% Basic approach:
+% to comment something out, scoop up every line in verbatim mode
+% as macro argument, then throw it away.
+% For inclusions, both the opening and closing comands
+% are defined as noop
+%
+% Changed \next to \html@next to prevent clashes with other sty files
+% (mike@emn.fr)
+% Changed \html@next to \htmlnext so the \makeatletter and
+% \makeatother commands could be removed (they were causing other
+% style files - changebar.sty - to crash) (nikos@cbl.leeds.ac.uk)
+% Changed \htmlnext back to \html@next...
+
+\def\makeinnocent#1{\catcode`#1=12 }
+\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
+
+\def\ThrowAwayComment#1{\begingroup
+ \def\CurrentComment{#1}%
+ \let\do\makeinnocent \dospecials
+ \makeinnocent\^^L% and whatever other special cases
+%%RRM
+%% use \xhtmlComment for \xComment
+%% use \html@next for \next
+ \endlinechar`\^^M \catcode`\^^M=12 \xhtmlComment}
+{\catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\xhtmlComment#1^^M{\def\test{#1}\edef\test{\meaning\test}
+ \csarg\ifx{PlainEnd\CurrentComment Test}\test
+ \let\html@next\endgroup
+ \else \csarg\ifx{LaLaEnd\CurrentComment Test}\test
+ \edef\html@next{\endgroup\noexpand\end{\CurrentComment}}
+ \else \csarg\ifx{LaInnEnd\CurrentComment Test}\test
+ \edef\html@next{\endgroup\noexpand\end{\CurrentComment}}
+ \else \let\html@next\xhtmlComment
+ \fi \fi \fi \html@next}
+}
+
+%%\def\includecomment %%RRM
+\def\htmlincludecomment
+ #1{\expandafter\def\csname#1\endcsname{}%
+ \expandafter\def\csname end#1\endcsname{}}
+%%\def\excludecomment %%RRM
+\def\htmlexcludecomment
+ #1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}%
+ {\escapechar=-1\relax
+ \edef\tmp{\string\\end#1}%
+ \csarg\xdef{PlainEnd#1Test}{\meaning\tmp}%
+ \edef\tmp{\string\\end\string\{#1\string\}}%
+ \csarg\xdef{LaLaEnd#1Test}{\meaning\tmp}%
+ \edef\tmp{\string\\end \string\{#1\string\}}%
+ \csarg\xdef{LaInnEnd#1Test}{\meaning\tmp}%
+ }}
+
+%%\excludecomment{comment} %%RRM
+\htmlexcludecomment{comment}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% end Comment.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\let\includecomment=\htmlincludecomment
+\let\excludecomment=\htmlexcludecomment
+
+%
+% Alternative code by Robin Fairbairns, 22 September 1997
+% revised to cope with % and unnested { }, by Ross Moore, 4 July 1998
+% further revised to cope with & and # in tables, 10 March 1999
+%
+\def\raw@catcodes{\catcode`\%=12 \catcode`\{=12 \catcode`\}=12
+ \catcode`\&=12 \catcode`\#=12 }
+\newcommand\@gobbleenv{\bgroup\raw@catcodes
+ \let\reserved@a\@currenvir\@gobble@nv}
+\bgroup
+ \def\expansionhead{\gdef\@gobble@nv@i##1}
+ \def\expansiontail{{\def\reserved@b{##1}\@gobble@nv@ii}}
+ \def\expansionheadii{\long\gdef\@gobble@nv##1\end}
+ \def\expansiontailii{{\@gobble@nv@i}}
+ \def\expansionmidii{##2}
+ \raw@catcodes\relax
+ \expandafter\expansionhead\expandafter}\expansiontail
+\egroup
+\long\gdef\@gobble@nv#1\end#2{\@gobble@nv@i}
+%\long\def\@gobble@nv#1\end#2{\def\reserved@b{#2}%
+\def\@gobble@nv@ii{%
+ \ifx\reserved@a\reserved@b
+ \edef\reserved@a{\egroup\noexpand\end{\reserved@a}}%
+ \expandafter\reserved@a
+ \else
+ \expandafter\@gobble@nv
+ \fi}
+
+\renewcommand{\htmlexcludecomment}[1]{%
+ \csname newenvironment\endcsname{#1}{\@gobbleenv}{}}
+\newcommand{\htmlreexcludecomment}[1]{%
+ \csname renewenvironment\endcsname{#1}{\@gobbleenv}{}}
+
+%%% RAW HTML
+%
+% Enclose raw HTML between a \begin{rawhtml} and \end{rawhtml}.
+% The html environment ignores its body
+%
+\htmlexcludecomment{rawhtml}
+
+
+%%% HTML ONLY
+%
+% Enclose LaTeX constructs which will only appear in the
+% HTML output and will be ignored by LaTeX with
+% \begin{htmlonly} and \end{htmlonly}
+%
+\htmlexcludecomment{htmlonly}
+% Shorter version
+\newcommand{\html}[1]{}
+
+% for images.tex only
+\htmlexcludecomment{imagesonly}
+
+%%% LaTeX ONLY
+% Enclose LaTeX constructs which will only appear in the
+% DVI output and will be ignored by latex2html with
+%\begin{latexonly} and \end{latexonly}
+%
+\newenvironment{latexonly}{}{}
+% Shorter version
+\newcommand{\latex}[1]{#1}
+
+
+%%% LaTeX or HTML
+% Combination of \latex and \html.
+% Say \latexhtml{this should be latex text}{this html text}
+%
+%\newcommand{\latexhtml}[2]{#1}
+\long\def\latexhtml#1#2{#1}
+
+
+%%% tracing the HTML conversions
+% This alters the tracing-level within the processing
+% performed by latex2html by adjusting $VERBOSITY
+% (see latex2html.config for the appropriate values)
+%
+\newcommand{\htmltracing}[1]{}
+\newcommand{\htmltracenv}[1]{}
+
+
+%%% \strikeout for HTML only
+% uses <STRIKE>...</STRIKE> tags on the argument
+% LaTeX just gobbles it up.
+\newcommand{\strikeout}[1]{}
+
+%%% \htmlurl and \url
+% implement \url as the simplest thing, if not already defined
+% let \htmlurl#1 be equivalent to it
+%
+\def\htmlurlx#1{\begin{small}\texttt{#1}\end{small}}%
+\expandafter\ifx\csname url\endcsname\relax
+ \let\htmlurl=\htmlurlx \else \let\htmlurl=\url \fi
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% JCL - stop input here if LaTeX2e is not present
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifx\if@compatibility\undefined
+ %LaTeX209
+ \makeatother\relax\expandafter\endinput
+\fi
+\if@compatibility
+ %LaTeX2e in LaTeX209 compatibility mode
+ \makeatother\relax\expandafter\endinput
+\fi
+
+%\let\real@TeXlogo = \TeX
+%\DeclareRobustCommand{\TeX}{\relax\real@TeXlogo}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Start providing LaTeX2e extension:
+% This is currently:
+% - additional optional argument for \htmladdimg
+% - support for segmented documents
+%
+
+\ProvidesPackage{html}
+ [1999/07/19 v1.38 hypertext commands for latex2html (nd, hws, rrm)]
+
+%
+% Ensure that \includecomment and \excludecomment are bound
+% to the version defined here.
+%
+\AtBeginDocument{%
+ \let\includecomment=\htmlincludecomment
+ \let\excludecomment=\htmlexcludecomment
+ \htmlreexcludecomment{comment}}
+
+%%% bind \htmlurl to \url if that is later loaded
+%
+\expandafter\ifx\csname url\endcsname\relax
+ \AtBeginDocument{\@ifundefined{url}{}{\let\htmlurl=\url}}\fi
+
+%%%%MG
+
+% This command takes as argument a URL pointing to an image.
+% The image will be embedded in the HTML document but will
+% be ignored in the dvi and ps files. The optional argument
+% denotes additional HTML tags.
+%
+% Example: \htmladdimg[ALT="portrait" ALIGN=CENTER]{portrait.gif}
+%
+\ifx\pdfunknown\relax
+ \renewcommand{\htmladdimg}[2][]{}
+\else
+ \renewcommand{\htmladdimg}[2][]{\hyperimage{#2}}
+\fi
+
+%%% HTMLRULE for LaTeX2e
+% This command adds a horizontal rule and is valid even within
+% a figure caption.
+%
+% This command is best used with LaTeX2e and HTML 3.2 support.
+% It is like \hrule, but allows for options via key--value pairs
+% as follows: \htmlrule[key1=value1, key2=value2, ...] .
+% Use \htmlrule* to suppress the <BR> tag.
+% Eg. \htmlrule[left, 15, 5pt, "none", NOSHADE] produces
+% <BR CLEAR="left"><HR NOSHADE SIZE="15">.
+% Renew the necessary part.
+\renewcommand{\htmlrulestar}[1][all]{}
+
+%%% HTMLCLEAR for LaTeX2e
+% This command puts in a <BR> tag, with optional CLEAR="<attrib>"
+%
+\renewcommand{\htmlclear}[1][all]{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% renew some definitions to allow optional arguments
+%
+% The description of the options is missing, as yet.
+%
+\renewcommand{\latextohtml}{\textup{\LaTeX2\texttt{HTML}}}
+\ifx\pdfunknown\relax
+ \renewcommand{\htmladdnormallinkfoot}[3][]{#2\footnote{#3}}
+ \renewcommand{\htmladdnormallink}[3][]{#2}
+\else
+ \renewcommand{\htmladdnormallinkfoot}[1][]{\def\next{#1}%
+ \ifx\next\@empty\def\next{\htmladdnonamedlinkfoot}%
+ \else\def\next{\htmladdnamedlinkfoot{#1}}\fi \next}
+ \newcommand{\htmladdnonamedlinkfoot}[2]{%
+ #1\footnote{\href{#2}{#2}}}
+ \newcommand{\htmladdnamedlinkfoot}[3]{%
+ \hypertarget{#1}{#2}\footnote{\href{#3}{#3}}}
+ \renewcommand{\htmladdnormallink}[1][]{\def\next{#1}%
+ \ifx\next\@empty\def\next{\htmladdnonamedlink}%
+ \else\def\next{\htmladdnamedlink{#1}}\fi \next}
+ \newcommand{\htmladdnonamedlink}[2]{\href{#2}{#1}}
+ \newcommand{\htmladdnamedlink}[3]{%
+ \hypertarget{#1}{\hskip2bp}\href{#3}{#2}}
+\fi
+
+\renewcommand{\htmlbody}[1][]{}
+\renewcommand{\htmlborder}[2][]{}
+\renewcommand{\externallabels}[3][]{}
+\renewcommand{\externalref}[2][]{}
+\renewcommand{\externalcite}[1][]{\nocite}
+\renewcommand{\hyperref}[1][]{\hyperrefi[#1]}
+\renewcommand{\hypercite}[1][]{\hypercitei[#1]}
+\renewcommand{\hypercitenocite}[2]{#2\hypercitenocitex}
+\renewcommand{\hypercitenocitex}[2][]{\nocite{#2}}
+\let\hyperciteno=\hypercitenocite
+\let\hyperciteext=\hypercitenocite
+
+\ifx\pdfunknown\relax
+ \renewcommand{\htmlimage}[2][]{}
+ \renewcommand{\htmlref}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty
+ \aftergroup\htmlrefdef\else\aftergroup\htmlrefext\fi}}
+ \newcommand{\htmlrefdef}[1]{}
+ \newcommand{\htmlrefext}[2][]{}
+ \renewcommand{\htmlcite}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty
+ \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}}
+ \newcommand{\htmlciteext}[2][]{}
+\else
+ \renewcommand{\htmlimage}[2][]{\hyperimage{#2}}
+ \renewcommand{\htmlref}[1][]{\def\htmp@{#1}\ifx\htmp@\@empty
+ \def\htmp@{\htmlrefdef}\else\def\htmp@{\htmlrefext{#1}}\fi\htmp@}
+ \newcommand{\htmlrefdef}[2]{\hyperref[hyper][#2]{#1}}
+ \newcommand{\htmlrefext}[3]{%
+ \hypertarget{#1}{\hskip2bp}\hyperref[hyper][#3]{#2}}
+ \renewcommand{\htmlcite}[2][]{#2{\def\htmp@{#1}\ifx\htmp@\@empty
+ \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}}
+ \newcommand{\htmlciteext}[1][]{\cite}
+\fi
+\newcommand{\htmlcitedef}[1]{ \nocite{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% HTML HTMLset HTMLsetenv
+%
+% These commands do nothing in LaTeX, but can be used to place
+% HTML tags or set Perl variables during the LaTeX2HTML processing;
+% They are intended for expert use only.
+
+\newcommand{\HTMLcode}[2][]{}
+\ifx\undefined\HTML\newcommand{\HTML}[2][]{}\else
+\typeout{*** Warning: \string\HTML\space had an incompatible definition ***}%
+\typeout{*** instead use \string\HTMLcode\space for raw HTML code ***}%
+\fi
+\newcommand{\HTMLset}[3][]{}
+\newcommand{\HTMLsetenv}[3][]{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The following commands pertain to document segmentation, and
+% were added by Herbert Swan <dprhws@edp.Arco.com> (with help from
+% Michel Goossens <goossens@cern.ch>):
+%
+%
+% This command inputs internal latex2html tables so that large
+% documents can to partitioned into smaller (more manageable)
+% segments.
+%
+\newcommand{\internal}[2][internals]{}
+
+%
+% Define a dummy stub \htmlhead{}. This command causes latex2html
+% to define the title of the start of a new segment. It is not
+% normally placed in the user's document. Rather, it is passed to
+% latex2html via a .ptr file written by \segment.
+%
+\newcommand{\htmlhead}[3][]{}
+
+% In the LaTeX2HTML version this will eliminate the title line
+% generated by a \segment command, but retains the title string
+% for use in other places.
+%
+\newcommand{\htmlnohead}{}
+
+
+% In the LaTeX2HTML version this put a URL into a <BASE> tag
+% within the <HEAD>...</HEAD> portion of a document.
+%
+\ifx\pdfunknown\relax
+ \newcommand{\htmlbase}[1]{}
+\else
+ \let\htmlbase=\hyperbaseurl
+\fi
+
+
+% Include style information into the stylesheet; e.g. CSS
+%
+\newcommand{\htmlsetstyle}[3][]{}
+\newcommand{\htmladdtostyle}[3][]{}
+
+% Define a style-class for information in a particular language
+%
+\newcommand{\htmllanguagestyle}[2][]{}
+
+
+%
+% The dummy command \endpreamble is needed by latex2html to
+% mark the end of the preamble in document segments that do
+% not contain a \begin{document}
+%
+\newcommand{\startdocument}{}
+
+
+% \tableofchildlinks, \htmlinfo
+% by Ross Moore --- extensions dated 27 September 1997
+%
+% These do nothing in LaTeX but for LaTeX2HTML they mark
+% where the table of child-links and info-page should be placed,
+% when the user wants other than the default.
+% \tableofchildlinks % put mini-TOC at this location
+% \tableofchildlinks[off] % not on current page
+% \tableofchildlinks[none] % not on current and subsequent pages
+% \tableofchildlinks[on] % selectively on current page
+% \tableofchildlinks[all] % on current and all subsequent pages
+% \htmlinfo % put info-page at this location
+% \htmlinfo[off] % no info-page in current document
+% \htmlinfo[none] % no info-page in current document
+% *-versions omit the preceding <BR> tag.
+%
+\newcommand{\tableofchildlinks}{%
+ \@ifstar\tableofchildlinksstar\tableofchildlinksstar}
+\newcommand{\tableofchildlinksstar}[1][]{}
+
+\newcommand{\htmlinfo}{\@ifstar\htmlinfostar\htmlinfostar}
+\newcommand{\htmlinfostar}[1][]{}
+
+
+% This redefines \begin to allow for an optional argument
+% which is used by LaTeX2HTML to specify `style-sheet' information
+
+\let\realLaTeX@begin=\begin
+\renewcommand{\begin}[1][]{\realLaTeX@begin}
+
+
+%
+% Allocate a new set of section counters, which will get incremented
+% for "*" forms of sectioning commands, and for a few miscellaneous
+% commands.
+%
+
+\@ifundefined{c@part}{\newcounter{part}}{}%
+\newcounter{lpart}
+\newcounter{lchapter}[part]
+\@ifundefined{c@chapter}%
+ {\let\Hchapter\relax \newcounter{chapter}\let\thechapter\relax
+ \newcounter{lsection}[part]}%
+ {\let\Hchapter=\chapter \newcounter{lsection}[chapter]}
+\newcounter{lsubsection}[section]
+\newcounter{lsubsubsection}[subsection]
+\newcounter{lparagraph}[subsubsection]
+\newcounter{lsubparagraph}[lparagraph]
+%\newcounter{lequation}
+
+%
+% Redefine "*" forms of sectioning commands to increment their
+% respective counters.
+%
+\let\Hpart=\part
+%\let\Hchapter=\chapter
+\let\Hsection=\section
+\let\Hsubsection=\subsection
+\let\Hsubsubsection=\subsubsection
+\let\Hparagraph=\paragraph
+\let\Hsubparagraph=\subparagraph
+\let\Hsubsubparagraph=\subsubparagraph
+
+\ifx\c@subparagraph\undefined
+ \newcounter{lsubsubparagraph}[lsubparagraph]
+\else
+ \newcounter{lsubsubparagraph}[subparagraph]
+\fi
+
+%
+% The following definitions are specific to LaTeX2e:
+% (They must be commented out for LaTeX 2.09)
+%
+\expandafter\ifx\csname part\endcsname\relax\else
+\renewcommand{\part}{\@ifstar{\stepcounter{lpart}%
+ \bgroup\def\tmp{*}\H@part}{\bgroup\def\tmp{}\H@part}}\fi
+\newcommand{\H@part}[1][]{\def\tmp@a{#1}\check@align
+ \expandafter\egroup\expandafter\Hpart\tmp}
+
+\ifx\Hchapter\relax\else
+ \def\chapter{\resetsections \@ifstar{\stepcounter{lchapter}%
+ \bgroup\def\tmp{*}\H@chapter}{\bgroup\def\tmp{}\H@chapter}}\fi
+\newcommand{\H@chapter}[1][]{\def\tmp@a{#1}\check@align
+ \expandafter\egroup\expandafter\Hchapter\tmp}
+
+\renewcommand{\section}{\resetsubsections
+ \@ifstar{\stepcounter{lsection}\bgroup\def\tmp{*}%
+ \H@section}{\bgroup\def\tmp{}\H@section}}
+\newcommand{\H@section}[1][]{\def\tmp@a{#1}\check@align
+ \expandafter\egroup\expandafter\Hsection\tmp}
+
+\renewcommand{\subsection}{\resetsubsubsections
+ \@ifstar{\stepcounter{lsubsection}\bgroup\def\tmp{*}%
+ \H@subsection}{\bgroup\def\tmp{}\H@subsection}}
+\newcommand{\H@subsection}[1][]{\def\tmp@a{#1}\check@align
+ \expandafter\egroup\expandafter\Hsubsection\tmp}
+
+\renewcommand{\subsubsection}{\resetparagraphs
+ \@ifstar{\stepcounter{lsubsubsection}\bgroup\def\tmp{*}%
+ \H@subsubsection}{\bgroup\def\tmp{}\H@subsubsection}}
+\newcommand{\H@subsubsection}[1][]{\def\tmp@a{#1}\check@align
+ \expandafter\egroup\expandafter\Hsubsubsection\tmp}
+
+%% \renewcommand{\paragraph}{\resetsubparagraphs
+\newcommand{\paragraph}{\resetsubparagraphs
+ \@ifstar{\stepcounter{lparagraph}\bgroup\def\tmp{*}%
+ \H@paragraph}{\bgroup\def\tmp{}\H@paragraph}}
+\newcommand\H@paragraph[1][]{\def\tmp@a{#1}\check@align
+ \expandafter\egroup\expandafter\Hparagraph\tmp}
+
+\ifx\Hsubparagraph\relax\else\@ifundefined{subparagraph}{}{%
+\renewcommand{\subparagraph}{\resetsubsubparagraphs
+ \@ifstar{\stepcounter{lsubparagraph}\bgroup\def\tmp{*}%
+ \H@subparagraph}{\bgroup\def\tmp{}\H@subparagraph}}}\fi
+\newcommand\H@subparagraph[1][]{\def\tmp@a{#1}\check@align
+ \expandafter\egroup\expandafter\Hsubparagraph\tmp}
+
+\ifx\Hsubsubparagraph\relax\else\@ifundefined{subsubparagraph}{}{%
+\def\subsubparagraph{%
+ \@ifstar{\stepcounter{lsubsubparagraph}\bgroup\def\tmp{*}%
+ \H@subsubparagraph}{\bgroup\def\tmp{}\H@subsubparagraph}}}\fi
+\newcommand\H@subsubparagraph[1][]{\def\tmp@a{#1}\check@align
+ \expandafter\egroup\expandafter\Hsubsubparagraph\tmp}
+
+\def\check@align{\def\empty{}\ifx\tmp@a\empty
+ \else\def\tmp@b{center}\ifx\tmp@a\tmp@b\let\tmp@a\empty
+ \else\def\tmp@b{left}\ifx\tmp@a\tmp@b\let\tmp@a\empty
+ \else\def\tmp@b{right}\ifx\tmp@a\tmp@b\let\tmp@a\empty
+ \else\expandafter\def\expandafter\tmp@a\expandafter{\expandafter[\tmp@a]}%
+ \fi\fi\fi \def\empty{}\ifx\tmp\empty\let\tmp=\tmp@a \else
+ \expandafter\def\expandafter\tmp\expandafter{\expandafter*\tmp@a}%
+ \fi\fi}
+%
+\def\resetsections{\setcounter{section}{0}\setcounter{lsection}{0}%
+ \reset@dependents{section}\resetsubsections }
+\def\resetsubsections{\setcounter{subsection}{0}\setcounter{lsubsection}{0}%
+ \reset@dependents{subsection}\resetsubsubsections }
+\def\resetsubsubsections{\setcounter{subsubsection}{0}\setcounter{lsubsubsection}{0}%
+ \reset@dependents{subsubsection}\resetparagraphs }
+%
+\def\resetparagraphs{\setcounter{lparagraph}{0}\setcounter{lparagraph}{0}%
+ \reset@dependents{paragraph}\resetsubparagraphs }
+\def\resetsubparagraphs{\ifx\c@subparagraph\undefined\else
+ \setcounter{subparagraph}{0}\fi \setcounter{lsubparagraph}{0}%
+ \reset@dependents{subparagraph}\resetsubsubparagraphs }
+\def\resetsubsubparagraphs{\ifx\c@subsubparagraph\undefined\else
+ \setcounter{subsubparagraph}{0}\fi \setcounter{lsubsubparagraph}{0}}
+%
+\def\reset@dependents#1{\begingroup\let \@elt \@stpelt
+ \csname cl@#1\endcsname\endgroup}
+
+% ignore optional *-version of \tableofcontents
+\let\ltx@tableofcontents\tableofcontents
+\renewcommand{\tableofcontents}{%
+ \@ifstar\ltx@tableofcontents\ltx@tableofcontents}
+%
+%
+% Define a helper macro to dump a single \secounter command to a file.
+%
+\newcommand{\DumpPtr}[2]{%
+\count255=\csname c@#1\endcsname\relax\def\dummy{dummy}\def\tmp{#2}%
+\ifx\tmp\dummy\def\ctr{#1}\else
+ \def\ctr{#2}\advance\count255 by \csname c@#2\endcsname\relax\fi
+\immediate\write\ptrfile{%
+\noexpand\setcounter{\ctr}{\number\count255}}}
+%\expandafter\noexpand\expandafter\setcounter\expandafter{\ctr}{\number\count255}}}
+
+%
+% Define a helper macro to dump all counters to the file.
+% The value for each counter will be the sum of the l-counter
+% actual LaTeX section counter.
+% Also dump an \htmlhead{section-command}{section title} command
+% to the file.
+%
+\newwrite\ptrfile
+\def\DumpCounters#1#2#3#4{%
+\begingroup\let\protect=\noexpand
+\immediate\openout\ptrfile = #1.ptr
+\DumpPtr{part}{lpart}%
+\ifx\Hchapter\relax\else\DumpPtr{chapter}{lchapter}\fi
+\DumpPtr{section}{lsection}%
+\DumpPtr{subsection}{lsubsection}%
+\DumpPtr{subsubsection}{lsubsubsection}%
+\DumpPtr{paragraph}{lparagraph}%
+\DumpPtr{subparagraph}{lsubparagraph}%
+\DumpPtr{equation}{dummy}%
+\DumpPtr{footnote}{dummy}%
+\def\tmp{#4}\ifx\tmp\@empty
+\immediate\write\ptrfile{\noexpand\htmlhead{#2}{#3}}\else
+\immediate\write\ptrfile{\noexpand\htmlhead[#4]{#2}{#3}}\fi
+\dumpcitestatus \dumpcurrentcolor
+\immediate\closeout\ptrfile
+\endgroup }
+
+
+%% interface to natbib.sty
+
+\def\dumpcitestatus{}
+\def\loadcitestatus{\def\dumpcitestatus{%
+ \ifciteindex\immediate\write\ptrfile{\noexpand\citeindextrue}%
+ \else\immediate\write\ptrfile{\noexpand\citeindexfalse}\fi }%
+}
+\@ifpackageloaded{natbib}{\loadcitestatus}{%
+ \AtBeginDocument{\@ifpackageloaded{natbib}{\loadcitestatus}{}}}
+
+
+%% interface to color.sty
+
+\def\dumpcurrentcolor{}
+\def\loadsegmentcolors{%
+ \let\real@pagecolor=\pagecolor
+ \let\pagecolor\segmentpagecolor
+ \let\segmentcolor\color
+ \ifx\current@page@color\undefined \def\current@page@color{{}}\fi
+ \def\dumpcurrentcolor{\bgroup\def\@empty@{{}}%
+ \expandafter\def\expandafter\tmp\space####1@{\def\thiscol{####1}}%
+ \ifx\current@color\@empty@\def\thiscol{}\else
+ \expandafter\tmp\current@color @\fi
+ \immediate\write\ptrfile{\noexpand\segmentcolor{\thiscol}}%
+ \ifx\current@page@color\@empty@\def\thiscol{}\else
+ \expandafter\tmp\current@page@color @\fi
+ \immediate\write\ptrfile{\noexpand\segmentpagecolor{\thiscol}}%
+ \egroup}%
+ \global\let\loadsegmentcolors=\relax
+}
+
+% These macros are needed within images.tex since this inputs
+% the <segment>.ptr files for a segment, so that counters are
+% colors are synchronised.
+%
+\newcommand{\segmentpagecolor}[1][]{%
+ \@ifpackageloaded{color}{\loadsegmentcolors\bgroup
+ \def\tmp{#1}\ifx\@empty\tmp\def\next{[]}\else\def\next{[#1]}\fi
+ \expandafter\segmentpagecolor@\next}%
+ {\@gobble}}
+\def\segmentpagecolor@[#1]#2{\def\tmp{#1}\def\tmpB{#2}%
+ \ifx\tmpB\@empty\let\next=\egroup
+ \else
+ \let\realendgroup=\endgroup
+ \def\endgroup{\edef\next{\noexpand\realendgroup
+ \def\noexpand\current@page@color{\current@color}}\next}%
+ \ifx\tmp\@empty\real@pagecolor{#2}\def\model{}%
+ \else\real@pagecolor[#1]{#2}\def\model{[#1]}%
+ \fi
+ \edef\next{\egroup\def\noexpand\current@page@color{\current@page@color}%
+ \noexpand\real@pagecolor\model{#2}}%
+ \fi\next}
+%
+\newcommand{\segmentcolor}[2][named]{\@ifpackageloaded{color}%
+ {\loadsegmentcolors\segmentcolor[#1]{#2}}{}}
+
+\@ifpackageloaded{color}{\loadsegmentcolors}{\let\real@pagecolor=\@gobble
+ \AtBeginDocument{\@ifpackageloaded{color}{\loadsegmentcolors}{}}}
+
+
+% Define the \segment[align]{file}{section-command}{section-title} command,
+% and its helper macros. This command does four things:
+% 1) Begins a new LaTeX section;
+% 2) Writes a list of section counters to file.ptr, each
+% of which represents the sum of the LaTeX section
+% counters, and the l-counters, defined above;
+% 3) Write an \htmlhead{section-title} command to file.ptr;
+% 4) Inputs file.tex.
+
+\newcommand{\segment}{\@ifstar{\@@htmls}{\@@html}}
+%\tracingall
+\newcommand{\@endsegment}[1][]{}
+\let\endsegment\@endsegment
+\newcommand{\@@htmls}[1][]{\@@htmlsx{#1}}
+\newcommand{\@@html}[1][]{\@@htmlx{#1}}
+\def\@@htmlsx#1#2#3#4{\csname #3\endcsname* {#4}%
+ \DumpCounters{#2}{#3*}{#4}{#1}\input{#2}}
+\def\@@htmlx#1#2#3#4{\csname #3\endcsname {#4}%
+ \DumpCounters{#2}{#3}{#4}{#1}\input{#2}}
+
+\makeatother
+\endinput
+
+
+% Modifications:
+%
+% (The listing of Initiales see Changes)
+
+% $Log: html.sty,v $
+% Revision 1.39 2001/10/01 22:47:06 RRM
+% -- somehow revision 1.39 was not committed earlier
+% -- it allows a * version of \tableofcontents (used with frames) to be
+% treated as un-starred by LaTeX
+%
+% Revision 1.39 2000/09/10 12:23:20 RRM
+% -- added *-argument for \tableofcontents in frames.perl
+% LaTeX should just ignore it
+%
+% Revision 1.38 1999/07/19 13:23:20 RRM
+% -- compatibility with pdflatex and hyperref.sty
+% citations are not complete yet, I think
+% -- ensure that \thechapter remains undefined; some packages use it
+% as a test for the type of documentclass being used.
+%
+% Revision 1.37 1999/03/12 07:02:38 RRM
+% -- change macro name from \addTOCsection to \htmladdTOClink
+% -- it has 3 + 1 optional argument, to allow a local path to a labels.pl
+% file for the external document, for cross-references
+%
+% Revision 1.36 1999/03/10 05:46:00 RRM
+% -- extended the code for compatibilty with comment.sty
+% -- allow excluded environments to work within tables,
+% with the excluded material spanning headers and several cells
+% thanks Avinash Chopde for recognising the need for this.
+% -- added LaTeX support (ignores it) for \htmladdTOCsection
+% thanks to Steffen Klupsch and Uli Wortmann for this idea.
+%
+% Revision 1.35 1999/03/08 11:16:16 RRM
+% html.sty for LaTeX2HTML V99.1
+%
+% -- ensure that html.sty can be loaded *after* hyperref.sty
+% -- support new command \htmlclear for <BR> in HTML, ignored by LaTeX
+% -- ensure {part} and {chapter} counters are defined, even if not used
+%
+% Revision 1.34 1998/09/19 10:37:29 RRM
+% -- fixed typo with \next{\hyperref}{....}
+%
+% Revision 1.33 1998/09/08 12:47:51 RRM
+% -- changed macro-names for the \hyperref and \hypercite options
+% allows easier compatibility with other packages
+%
+% Revision 1.32 1998/08/24 12:15:14 RRM
+% -- new command \htmllanguagestyle to associate a style class
+% with text declared as a particular language
+%
+% Revision 1.31 1998/07/07 14:15:41 RRM
+% -- new commands \htmlsetstyle and \htmladdtostyle
+%
+% Revision 1.30 1998/07/04 02:42:22 RRM
+% -- cope with catcodes of % { } in rawhtml/comment/htmlonly environments
+%
+% Revision 1.29 1998/06/23 13:33:23 RRM
+% -- use \begin{small} with the default for URLs
+%
+% Revision 1.28 1998/06/21 09:38:39 RRM
+% -- implement \htmlurl to agree with \url if already defined
+% or loaded subsequently (LaTeX-2e only)
+% -- get LaTeX to print the revision number when loading
+%
+% Revision 1.27 1998/06/20 15:13:10 RRM
+% -- \TeX is already protected in recent versions of LaTeX
+% so \DeclareRobust doesn't work --- causes looping
+% -- \part and \subparagraph need not be defined in some styles
+%
+% Revision 1.26 1998/06/01 08:36:49 latex2html
+% -- implement optional argument for \endsegment
+% -- made the counter value output from \DumpPtr more robust
+%
+% Revision 1.25 1998/05/09 05:43:35 latex2html
+% -- conditionals for avoiding undefined counters
+%
+% Revision 1.23 1998/02/26 10:32:24 latex2html
+% -- use \providecommand for \latextohtml
+% -- implemented \HTMLcode to do what \HTML did previously
+% \HTML still works, unless already defined by another package
+% -- fixed problems remaining with undefined \chapter
+% -- defined \endsegment
+%
+% Revision 1.22 1997/12/05 11:38:18 RRM
+% -- implemented an optional argument to \begin for style-sheet info.
+% -- modified use of an optional argument with sectioning-commands
+%
+% Revision 1.21 1997/11/05 10:28:56 RRM
+% -- replaced redefinition of \@htmlrule with \htmlrulestar
+%
+% Revision 1.20 1997/10/28 02:15:58 RRM
+% -- altered the way some special html-macros are defined, so that
+% star-variants are explicitly defined for LaTeX
+% -- it is possible for these to occur within images.tex
+% e.g. \htmlinfostar \htmlrulestar \tableofchildlinksstar
+%
+% Revision 1.19 1997/10/11 05:47:48 RRM
+% -- allow the dummy {tex2html_nowrap} environment in LaTeX
+% use it to make its contents be evaluated in environment order
+%
+% Revision 1.18 1997/10/04 06:56:50 RRM
+% -- uses Robin Fairbairns' code for ignored environments,
+% replacing the previous comment.sty stuff.
+% -- extensions to the \tableofchildlinks command
+% -- extensions to the \htmlinfo command
+%
+% Revision 1.17 1997/07/08 11:23:39 RRM
+% include value of footnote counter in .ptr files for segments
+%
+% Revision 1.16 1997/07/03 08:56:34 RRM
+% use \textup within the \latextohtml macro
+%
+% Revision 1.15 1997/06/15 10:24:58 RRM
+% new command \htmltracenv as environment-ordered \htmltracing
+%
+% Revision 1.14 1997/06/06 10:30:37 RRM
+% - new command: \htmlborder puts environment into a <TABLE> cell
+% with a border of specified width, + other attributes.
+% - new commands: \HTML for setting arbitrary HTML tags, with attributes
+% \HTMLset for setting Perl variables, while processing
+% \HTMLsetenv same as \HTMLset , but it gets processed
+% as if it were an environment.
+% - new command: \latextohtml --- to set the LaTeX2HTML name/logo
+% - fixed some remaining problems with \segmentcolor & \segmentpagecolor
+%
+% Revision 1.13 1997/05/19 13:55:46 RRM
+% alterations and extra options to \hypercite
+%
+% Revision 1.12 1997/05/09 12:28:39 RRM
+% - Added the optional argument to \htmlhead, also in \DumpCounters
+% - Implemented \HTMLset as a no-op in LaTeX.
+% - Fixed a bug in accessing the page@color settings.
+%
+% Revision 1.11 1997/03/26 09:32:40 RRM
+% - Implements LaTeX versions of \externalcite and \hypercite commands.
+% Thanks to Uffe Engberg and Stephen Simpson for the suggestions.
+%
+% Revision 1.10 1997/03/06 07:37:58 RRM
+% Added the \htmltracing command, for altering $VERBOSITY .
+%
+% Revision 1.9 1997/02/17 02:26:26 RRM
+% - changes to counter handling (RRM)
+% - shuffled around some definitions
+% - changed \htmlrule of 209 mode
+%
+% Revision 1.8 1997/01/26 09:04:12 RRM
+% RRM: added optional argument to sectioning commands
+% \htmlbase sets the <BASE HREF=...> tag
+% \htmlinfo and \htmlinfo* allow the document info to be positioned
+%
+% Revision 1.7 1997/01/03 12:15:44 L2HADMIN
+% % - fixes to the color and natbib interfaces
+% % - extended usage of \hyperref, via an optional argument.
+% % - extended use comment environments to allow shifting expansions
+% % e.g. within \multicolumn (`bug' reported by Luc De Coninck).
+% % - allow optional argument to: \htmlimage, \htmlhead,
+% % \htmladdimg, \htmladdnormallink, \htmladdnormallinkfoot
+% % - added new commands: \htmlbody, \htmlnohead
+% % - added new command: \tableofchildlinks
+%
+% Revision 1.6 1996/12/25 03:04:54 JCL
+% added patches to segment feature from Martin Wilck
+%
+% Revision 1.5 1996/12/23 01:48:06 JCL
+% o introduced the environment makeimage, which may be used to force
+% LaTeX2HTML to generate an image from the contents.
+% There's no magic, all what we have now is a defined empty environment
+% which LaTeX2HTML will not recognize and thus pass it to images.tex.
+% o provided \protect to the \htmlrule commands to allow for usage
+% within captions.
+%
+% Revision 1.4 1996/12/21 19:59:22 JCL
+% - shuffled some entries
+% - added \latexhtml command
+%
+% Revision 1.3 1996/12/21 12:22:59 JCL
+% removed duplicate \htmlrule, changed \htmlrule back not to create a \hrule
+% to allow occurrence in caption
+%
+% Revision 1.2 1996/12/20 04:03:41 JCL
+% changed occurrence of \makeatletter, \makeatother
+% added new \htmlrule command both for the LaTeX2.09 and LaTeX2e
+% sections
+%
+%
+% jcl 30-SEP-96
+% - Stuck the commands commonly used by both LaTeX versions to the top,
+% added a check which stops input or reads further if the document
+% makes use of LaTeX2e.
+% - Introduced rrm's \dumpcurrentcolor and \bodytext
+% hws 31-JAN-96 - Added support for document segmentation
+% hws 10-OCT-95 - Added \htmlrule command
+% jz 22-APR-94 - Added support for htmlref
+% nd - Created