\documentclass[11pt]{article}

\topmargin=0in
\oddsidemargin=0.25in
\evensidemargin=0.25in
\textwidth=6in
\textheight=8in

\setlength{\vfuzz}{4pt} % to ignore trivial vertical overfull boxes
\sloppy

\usepackage[noBBpl]{mathpazo}
\usepackage{enumerate}

 \begin{document}

 \title{DE-MACRO}

 \author{Copyright 2005-2007 P\'eter G\'acs\\
Licensed under the Academic Free Licence version 2.1}

\maketitle

Version 1.4	 - Luca Citi made it python2.7 and python3 compatible.
			   Peter Gacs improved the parsing of \verb`\input{<filename>}`,
			   and made @ a letter in the style files.

Version 1.3 - this version is much more conservative about deleting
              comments and inserting or deleting blank space: tries to
              leave in all comments, adds space only when necessary, and
              tries not to delete space in the main text.
              The motivating comments came from Daniel Webb.

Version 1.2 - a syntactical bug corrected, thanks Brian de Alwis!
 
 \section*{Purpose}

This program can eliminate most private macros from a LaTeX file.
Applications:
 \begin{enumerate}[--]
  \item your publisher has difficulty dealing with many private macros
  \item you cooperate with colleagues who do not understand your macros
  \item preprocessing before a system like latex2html, which is somewhat
    unpredictable with private macros.
 \end{enumerate}
 
 \section*{Platform}

This is a Python program, which I only have tried to run under Unix.  
But the Unix dependence is minimal (for example all the directory path
references are platform-independent).  
It should be easy to adapt the
program to Windows, and also to avoid command-line arguments.

In case your Python is not in \verb`/usr/bin`, you should change the
top line (the "shebang" line) of the program accordingly.
This top line uses the \verb`-O` option for python (stands for ``optimize'').
Without it, the program may run too slowly.  
If you do not care for speed,
a number of other complications (the database, the checking for newer
versions) could be eliminated.

 \section*{Usage}

Command line:
 \begin{verbatim}
 de-macro [--defs <defs-db>] <tex-file-1>[.tex] [<tex-file-2>[.tex] ...]
 \end{verbatim}
{\bfseries Simplest example:}  \verb`de-macro testament`\\[0pt]
(As you see, the \verb`<>` is used only in the notation of this
documentation, you should not type it.)

If \verb`<tex-file-i>` contains a command 
\verb`\usepackage{<defs-file>-private}`
then the file \verb`<defs-file>-private.sty` 
will be read, and its macros will be
replaced  in \verb`<tex-file-i>` with their definitions.
The result is in \verb`<tex-file-i>-clean.tex`.

Only \verb`newcommand`, \verb`renewcommand`, 
\verb`newenvironment` and \verb`renewenvironment` are
understood (it does not matter, whether you write \verb`new` or
\verb`renew`). 
These can be nested but do not be too clever, since I do not
guarantee the same expansion order as in TeX.

 \section*{Files}

 \begin{verbatim}
<tex-file-1>.db
<tex-file>-clean.tex
<defs-file>-private.sty
 \end{verbatim}
For speed, a macro database file called \verb`<defs-file>.db` is created.
If such a file exists already then it is used.
If \verb`<defs-file>-private.sty` is older than \verb`<tex-file-1>.db` 
then it will not be used.

It is possible to specify another database filename via \verb`--defs <defs-db>`.
Then \verb`<defs-db>.db` will be used.

(Warning: with some Python versions and/or Unix platforms, the database
file name conventions may be different from what is said here.)

For each \verb`<tex-file-i>`, a file \verb`<tex-file-i>-clean.tex`
will be produced.
If \verb`<tex-file-i>-clean.tex` is newer than \verb`<tex-file-i>.tex` 
then it stays.

 \section*{Input command}

If a tex file contains a command \verb`\input{<tex-file-j>}` or 
\verb`\input <tex-file-j>`
then \verb`<tex-file-j>.tex` is processed recursively, and 
\verb`<tex-file-j>-clean.tex` will be inserted into the final output.
For speed, if \verb`<tex-file-j>-clean.tex` is newer than
\verb`<tex-file-j>.tex` then \verb`<tex-file-j>.tex` will not be
reprocessed. 

The dependency checking is not sophisticated, so if you rewrite some macros
then remove all \verb`*-clean.tex` files!

 \end{document}
