summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/pdcmac
diff options
context:
space:
mode:
Diffstat (limited to 'macros/plain/contrib/pdcmac')
-rw-r--r--macros/plain/contrib/pdcmac/00readme.txt21
l---------macros/plain/contrib/pdcmac/README1
-rw-r--r--macros/plain/contrib/pdcmac/changes.txt239
-rw-r--r--macros/plain/contrib/pdcmac/configure302
-rw-r--r--macros/plain/contrib/pdcmac/contents.txt40
-rw-r--r--macros/plain/contrib/pdcmac/copying.tex373
-rw-r--r--macros/plain/contrib/pdcmac/copying.txt358
-rw-r--r--macros/plain/contrib/pdcmac/dtxtags67
-rw-r--r--macros/plain/contrib/pdcmac/dtxtags.1207
-rw-r--r--macros/plain/contrib/pdcmac/fig2epsf36
-rw-r--r--macros/plain/contrib/pdcmac/fig2epsf.146
-rw-r--r--macros/plain/contrib/pdcmac/install.txt91
-rw-r--r--macros/plain/contrib/pdcmac/maamac.dtx627
-rw-r--r--macros/plain/contrib/pdcmac/magrmac.dtx231
-rw-r--r--macros/plain/contrib/pdcmac/magrman.tex604
-rw-r--r--macros/plain/contrib/pdcmac/makefile.in160
-rw-r--r--macros/plain/contrib/pdcmac/news.txt14
-rw-r--r--macros/plain/contrib/pdcmac/oput01.eps423
-rw-r--r--macros/plain/contrib/pdcmac/oput01.fig323
-rw-r--r--macros/plain/contrib/pdcmac/oput02.eps404
-rw-r--r--macros/plain/contrib/pdcmac/oput02.fig273
-rw-r--r--macros/plain/contrib/pdcmac/pdcadobe.dtx609
-rw-r--r--macros/plain/contrib/pdcmac/pdccode.dtx881
-rw-r--r--macros/plain/contrib/pdcmac/pdccode.tex263
-rw-r--r--macros/plain/contrib/pdcmac/pdccode2.tex292
-rw-r--r--macros/plain/contrib/pdcmac/pdcfmt2.dtx1194
-rw-r--r--macros/plain/contrib/pdcmac/pdcfsel.dtx607
-rw-r--r--macros/plain/contrib/pdcmac/pdcfsel.pdfbin0 -> 84169 bytes
-rw-r--r--macros/plain/contrib/pdcmac/pdcguide.pdfbin0 -> 163536 bytes
-rw-r--r--macros/plain/contrib/pdcmac/pdcguide.tex942
-rw-r--r--macros/plain/contrib/pdcmac/pdcl1maa.dtx248
-rw-r--r--macros/plain/contrib/pdcmac/pdcmacvn.tex1
-rw-r--r--macros/plain/contrib/pdcmac/pdcmisc.dtx555
-rw-r--r--macros/plain/contrib/pdcmac/pdcmondo.tex189
-rw-r--r--macros/plain/contrib/pdcmac/pdcoput5.dtx986
-rw-r--r--macros/plain/contrib/pdcmac/pdcsty.dtx1153
-rw-r--r--macros/plain/contrib/pdcmac/pinstall86
-rw-r--r--macros/plain/contrib/pdcmac/pinstall.1108
-rw-r--r--macros/plain/contrib/pdcmac/pmkdir67
-rw-r--r--macros/plain/contrib/pdcmac/pmkdir.181
-rw-r--r--macros/plain/contrib/pdcmac/version.txt19
41 files changed, 13121 insertions, 0 deletions
diff --git a/macros/plain/contrib/pdcmac/00readme.txt b/macros/plain/contrib/pdcmac/00readme.txt
new file mode 100644
index 0000000000..4fe90bd3fd
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/00readme.txt
@@ -0,0 +1,21 @@
+00readme.txt -*-text-*- Time-stamp: <pdc 1995-03-20>
+
+ PDCMAC, a collection of macros for plain TeX documents.
+ Release 1.0 -- Spring 1995
+
+This is collection of TeX definition files which may be useful for
+setting documents using plain TeX (as opposed to more complex formats
+like LaTeX). See "install.txt" for installation hints.
+
+This software may be used and distributed without fee under certain
+conditions. While I would like it to be useful, I cannot offer any
+guarantee or warranty. See "pdcguide.tex" for more information.
+
+Please send reports of problems, comments and suggestions to the address
+below. If you find pdcmac useful or amusing, please send me a pretty
+postcard.
+
+P. Damian Cugley * * * * * * * * * * * * * * * <damian.cugley@comlab.ox.ac.uk>
+Oxford University Computing Laboratory, Parks Road, Oxford OX1 3QD, UK
+Alleged Literature, c/o Damian Cugley, 255B Banbury Road, Oxford OX2 7HN, UK
+http://boothp1.ecs.ox.ac.uk:5705/people/pdc.html * My other computer is a Linux
diff --git a/macros/plain/contrib/pdcmac/README b/macros/plain/contrib/pdcmac/README
new file mode 120000
index 0000000000..5d84037450
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/README
@@ -0,0 +1 @@
+00readme.txt \ No newline at end of file
diff --git a/macros/plain/contrib/pdcmac/changes.txt b/macros/plain/contrib/pdcmac/changes.txt
new file mode 100644
index 0000000000..165139bdc5
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/changes.txt
@@ -0,0 +1,239 @@
+Thu Apr 6 12:32:28 1995 Damian Cugley <pdc@booth35.ecs>
+
+ * pdcguide.tex: Added dtxtags to file lists and TAGS to Makefile
+ targets. Shortened a couple of table entries by a word each so
+ that the GPL doesn't overflow onto the next page.
+
+ * maamac.dtx (\toksa): Added definition of toksa
+
+ * pdcfmt2.dtx (\alphabetletter): Added missing backslash.
+
+ * pdcoput5.dtx (section{Routines for balanced columns}): Removed
+ spurious space from \makepartialpage
+
+ * dtxtags: New shellscript, generates an etags-format tags file.
+ * makefile.in (mostlyclean): Added support for dtxtags.
+
+
+Thu Mar 30 17:16:01 1995 Damian Cugley <pdc@booth10.ecs>
+
+ * Release 1.1
+
+ * makefile.in (dist): Made version.txt format prettier.
+
+ * Changed all header comments to say doc/plain/pdcmac for the sake
+ of TWG-TDS 0.61.
+
+Tue Mar 28 13:18:47 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdccode.dtx: Recognizes the "locker" field of RCS id.
+ Puts line numbers in headline.
+
+ * pdcfsel.dtx: Tidied documentation. Changed \fsel_... to \FSEL...
+
+Fri Mar 24 17:08:36 1995 Damian Cugley <pdc@boothp1.ecs>
+
+
+ * pinstall: Created a shellscript `pinstall' to replace `install'
+ command on systems without GNU `install'. Trying to keep track of
+ all the stupid variants of `install' is pointlessly difficult.
+ * configure: uses 'pinstall' script if not gnu 'install'.
+ * makefile.in (install): much simplified by assuming either GNU
+ "install" or my "pinstall". Changed "mkdirhier" ro "pmkdir" at
+ the same time. Added manpages for the three shellscripts included
+ with the package.
+
+ * pdcmisc.dtx (section{PDCIMTH}): Added version ID \message.
+
+ * makefile.in: Added new target, version.txt, which is the version
+ IDs of all the DTX files. Checked all the DTX files in to RCS (at
+ long last).
+
+Thu Mar 16 12:52:02 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdccode.dtx: notepars now allow \rightskip to shrink.
+
+ * pdcfmt2.dtx: chased down some overfull hboxes
+
+ * pdcsty.dtx (section{Starting up}): Changed name of pdcmasub to
+ the more sensible pdccmsub.
+
+Tue Mar 14 12:58:09 1995 Damian Cugley <pdc@booth8.ecs>
+
+ * pdcadobe.dtx: Corrected definition or rbrace.
+
+Thu Mar 9 16:42:07 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcmisc.dtx (pdccmsub.dtx): new name for pdcmasub.dtx.
+ \currency, \orda, \ordo, \florin, \brdecimal, \permille.
+
+Wed Mar 8 16:53:36 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcsty.dtx (\abstract): Stop from generating underfull
+ hbox.
+
+ * pdcadobe.dtx (\brdecimal): Removed spurious redefinition.
+
+ * pdcguide.tex: Added list of file suffixes. Added
+ pdcadobe.{dtx,tex} and pdcl1maa.{dtx,tex} to lists of files.
+ Added PostScript title for when POstScript fonts available.
+
+Mon Mar 6 16:54:15 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcl1maa.dtx: New file
+
+ * pdcsty.dtx: Chased down some overful hboxes.
+
+Fri Mar 3 18:12:02 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcfmt2.dtx (verbatim): added \ttminus, so that PostScript fonts
+ used as typewriter fonts can change hyphens to minus signs.
+
+ * pdcsty.dtx: Added use of \asyfam, etc.
+
+ * pdcadobe.dtx: Tested with pdcguide and tested ISO Latin-1
+ support, found several bugs.
+
+Thu Mar 2 18:08:48 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcsty.dtx: Added rudimentary support for PostScript fonts.
+
+ * pdcadobe.dtx: New file!!
+
+Tue Feb 28 10:17:40 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcsty.dtx: Removed attempts to make a Concrete style; there
+ really doesn't seem to be much point. Put more of the common code
+ in pdc{lft,doc}1.tex.
+
+ * pdcguide.tex: reorganized sections, expanded user guide and
+ installation sections.
+
+Mon Feb 27 14:43:43 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcguide.tex: Made it into a "doc" not a "lft"; expanded
+ installation section (unfinished)
+
+ * pdccode.dtx: Added summary to end of file, and some backgorund
+ info at the start.
+ (section{Layout}): CHanged width to 72 \tentt characters not 36
+ \tenrm ems.
+
+Fri Feb 24 18:55:30 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcguide.tex: Removed use of PostScript fonts -- now does a
+ title using the circlew10 font!
+
+Thu Feb 23 16:50:33 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * install.txt: new file
+
+ * configure (INSTALL): sets INSTALL and INSTALL_DATA to "cp
+ -p" and puts package name at end of "$docdir".
+
+ * magrman.tex (\twocolgr): adjusted to use new \rigidbalance syntax
+
+ * pdcoput5.dtx (section{Making a page vbox}): adjust colht by
+
+ (section{Routines for balanced coumns}): \rigidpalane no longer
+ takes an argukent for the width of the completed columns; instead
+ one should enclose \rigidbalance in \hbox to ...{...}. Eliminated
+ some variables (\RGDfirstcol etc.).
+
+ *depth* of topbox and partialpage as well as height.
+
+ * pdccode.dtx: New file, which generates tmp.tex (the Makefile
+ checks it isn't truncated before renaming it to pdccode.tex).
+ (section{Code sections}): added \~ for a tilde in expanded lines.
+
+ Changed text width and suppressed parindent at start of sections.
+ Copied verbatim text from pdcfmt2.dtx. Added \filelocker; this is
+ empty if the file has been checked in.
+
+Wed Feb 22 15:46:06 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcoput5.dtx: Added section headings and brief comments on the
+ rest of the file. Seached out overfull hboxes in the text so
+ far.
+
+ (section{Routines for balanced coumns}): Added
+ \rigidbalancedpartialpage.
+
+Thu Feb 16 18:04:55 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcfmt2.dtx: Adjusted a little so that it now TeXs without hbox
+ warnings.
+
+ * pdccode.tex: Changed to allow ragged-right printing inside
+ footnotes. Added \title and \author commands, and set \everycode
+ and \evercodeline so that some common code at the start of DTX
+ files is factored out.
+
+Wed Feb 15 15:45:30 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcsty.dtx (section{Starting up}): pdcoput->pdcoput5
+
+ * configure (cfgdate): Configuration shellscript, made by cutting
+ down the pdctt configure script.
+
+ * pdcoput5.dtx: Changed name to prevent conflict with old version
+ of pdcoput (since the calling interface is changing).
+
+Tue Feb 14 12:20:41 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcoput.dtx (section{How to make one column}): Change to just
+ use vertical mode material to do illustrations insteasd of
+ separate <dimen> and caption arguments. Added \topillustration
+ and \botillustration commands.
+
+ * pdcsty.dtx (section{Layout}): foomarge->foomg to match pdcoput.dtx
+
+ * config.status.sh: placeholder for configuration script.
+
+Mon Feb 13 14:23:50 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcoput.dtx: New file, made from pdcoput.tex 4.1.7.
+
+Fri Feb 10 13:46:10 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcguide.tex: Added a copy of the GNU GPL to the end.
+
+ * copying.tex: new file -- a formatted copy of copying.txt, which
+ is the GNU General Public License.
+
+ * *.dtx: Updated header comments to include GPL.
+
+Thu Feb 9 10:38:59 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdccode2.tex: a new version of pdccode that allows multiple
+ files to be generated.
+
+ * pdcsty.dtx: replaces ma55doc.dtx, pdccm*.dtx. Uses pdccode2 to
+ generate multiple files. Sectioning commands go in pdcdoc1.tex
+ and pdclft1.tex.
+
+ * pdcguide.tex: new file
+
+Sat Dec 3 16:26:00 1994 P. Damian Cugley (pdc@alleged)
+
+ * pdccode.tex:
+ Set the vertical margins so that files may be printed on American
+ paper without losing any of the print.
+
+ * pdcfsel.dtx:
+ Added a title line on the first page. Removed the dependency of
+ the code file on pdcutil.tex by adding definitions for \expcs and
+ \noexpcs.
+
+Fri Dec 2 00:55:38 1994 P. Damian Cugley (pdc@alleged)
+
+ * pdccode.tex:
+ Changed \rcs...\end to \rcs...\endrcs for consistency with other
+ macros that go \foo...\endfoo.
+
+ * pdcfsel.dtx: Removed spurious definiton of \n. Changed
+ \rcs...\end to \rcs...\endrcs. Changed name of \ldfont to
+ \loadfont. Removed \setmag. Now produces pdcfsel.tex not xx.tex.
+
+ * pdccode.tex: checked in with -k by pdc at 1994/12/02 00:50:24
+
diff --git a/macros/plain/contrib/pdcmac/configure b/macros/plain/contrib/pdcmac/configure
new file mode 100644
index 0000000000..6f6000e251
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/configure
@@ -0,0 +1,302 @@
+#!/bin/sh
+
+# Mini-configure script for PDCMAC for the benefit of UNIX users
+
+version="1.0 Time-stamp: <pdc 1995-03-24>"
+
+# Takes arguments a bit like the GNU autoconf, but only uses them to
+# try to guess the TeX root directory
+
+package=pdcmac
+date=`date +19%y-%m-%d`
+files=makefile
+unique=pdcmisc.dtx
+cmd="$0 $@"
+me=`basename $0`
+
+# The flag used with "test" to see if a directory is writable.
+# For debugging, I sometimes set writable to -d so that
+# the searches will pretend that I have write-access to system
+# directories (so I can simulate running the script as root)
+writable=-w
+
+echo "This is configure for $package $version $cfgdate"
+
+tmp=${TMPDIR-/tmp}/cfg$$
+trap 'rm -f $tmp; exit 1' 1 2 15
+
+while test $# -gt 0; do
+ case $1 in
+ -n*|--n*)
+ nocreate=t ;;
+ -v*|--v*)
+ echo "configure for $package $version <$cfgauthor $cfgdate>" 1>&2
+ exit 0 ;;
+ -h*|--h*)
+ cat 1>&2 <<@EOF
+USAGE: configure [ option ]...
+
+Running this script creates config.status and optionally
+$files.
+
+Options:
+ -h, -help, --help, -v, -version, --version
+ print a message and exit
+
+ -p DIR, -prefix DIR, --prefix=DIR
+ prefix for installed file names, for example /usr/local
+
+ -e DIR, -exec_prefix DIR, --exec_prefix=DIR
+ ignored
+
+ -t DIR, -texmf DIR, --texmf=DIR
+ prefix for all TeX-related installed file names, for
+ example /usr/texmf or /usr/local/lib/tex
+
+ -w tds, -with tds, --with-tds
+ Assume a TDS-like directory tree
+@EOF
+ exit 0 ;;
+ --p*=*)
+ prefix=`expr $1 : '--p.*=\(.*\)'` ;;
+ -p|-prefix|--p*)
+ prefix=$2; shift ;;
+ -p*)
+ prefix=`expr $1 : '-p\(.*\)$'` ;;
+ --s*=*)
+ srcdir=`expr $1 : '--s.*=\(.*\)'` ;;
+ -s|-srcdir|--s*)
+ srcdir=$2; shift ;;
+ -s*)
+ srcdir=`expr $1 : '-s\(.*\)$'` ;;
+ --t*=*)
+ texmf=`expr $1 : '--t.*=\(.*\)'` ;;
+ -t|-texmf|--t*)
+ texmf=$2; shift ;;
+ -t*)
+ texmf=`expr $1 : '-t\(.*\)$'` ;;
+ --f*=*)
+ fonts=`expr $1 : '--f.*=\(.*\)'` ;;
+ -f|-fonts|--f*)
+ fonts=$2; shift ;;
+ -f*)
+ fonts=`expr $1 : '-f\(.*\)$'` ;;
+ --w*-*)
+ with=$with/`expr $1 : '--w.*-\(.*\)'`/ ;;
+ -w|-with|--w*)
+ with=$with/$2/; shift ;;
+ -w*)
+ with=$with/`expr $1 : '-w\(.*\)$'`/ ;;
+ -e*|--e*=*)
+ ;;
+ -e|--e*)
+ shift ;;
+ *)
+ echo $me: ignoring $1 1>&2
+ ;;
+ esac
+ shift
+done
+
+# Check for the "with" keywords we're interested in:
+case $with in */tds/*) tds=t ;; esac
+# case $with in */bigendian/*) bigendian=t ;; esac
+ # endianness doesn't matter because no fonts in this package
+
+
+# Find out how to print a dot with no newline
+n=-n c=
+echo $n x$c > $tmp
+case "`cat $tmp`" in
+ -n*)
+ n= c='\\c' ;;
+esac
+dot="$n .$c"
+
+
+# INSTALL -- oh, I can't be bothered trying to be clever.
+if install --version 2>&1 | grep GNU >/dev/null; then
+ INSTALL="install"
+else
+ INSTALL='$(srcdir)/pinstall'
+fi
+INSTALL_DATA='$(INSTALL) --mode=644'
+echo $me: install files with $INSTALL
+
+
+# find srcdir
+if test -z "$srcdir" ; then
+ echo $n "$me: searching for srcdir (package directory)..$c"
+ for d in . `dirname $0` ..; do
+ echo $dot
+ if test -f $d/$unique; then
+ echo srcdir=$d
+ srcdir=$d
+ break
+ fi
+ done
+fi
+
+if test -z "$srcdir"; then
+ echo ""
+ echo $me: fatal error: could not find sourcdir
+ exit 1
+fi
+
+# User might use --prefix to give the TeX prefix:
+
+if test -z "$texmf"; then
+ case "$prefix" in
+ */texmf|*/tex)
+ texmf=$prefix ;;
+ esac
+fi
+
+# If $texmf is not set, then search for it
+# We look in all sorts of prefixes like /usr/local (with or without extra
+# lib), using all sorts of directiry names like "tex"
+#
+
+if test -z "$texmf"; then
+ prefixes="$prefix
+ `echo $TEXINPUTS:$TEXFONTS | tr : \\\\12 |
+ sed -n -e 's,/[Tt]e[Xx].*,,p' -e 's,/font.*,,p' | uniq`
+ / /usr /usr/local /opts /p /packages /package
+ /pd /usr/pd /usr/local/pd /usr/contrib /usr/TeX
+ $HOME"
+ echo $n $me: searching for \$texmf..$c
+ for d in texmf tex TeX tex3.14 tex3 tex82; do
+ for p in $prefixes; do
+ echo $dot
+ if test -d $p/$d -a $writable $p/$d; then
+ echo texmf=$p/$d
+ texmf=$p/$d
+ break 2
+ fi
+ if test -d $p/lib/$d -a $writable $p/lib/$d; then
+ echo texmf=$p/lib/$d
+ texmf=$p/lib/$d
+ break 2
+ fi
+ done
+ done
+fi
+if test -z "$texmf"; then
+ echo ""
+ echo $me: fatal error: could not guess a texmf directory 1>&2
+ exit 1
+fi
+if test ! -d "$texmf" -o ! -w "$texmf"; then
+ echo $me: warning: $texmf needs to be a writable directory 1>&2
+fi
+
+
+# If --with-tds not set, try to guess whether we have found
+# a TDS directory or not:
+if test -n "$tds" || test -d $texmf/tex/plain; then
+ tds=t
+ echo "$me: using TWG-TDS 0.61 directory structure"
+else
+ echo "$me: using old-style directory structure :-("
+fi
+
+
+# Start making the config.status file
+
+f=config.status
+
+# Special care is taken with the -n option
+# -- -n is not to be included by default when configure is run with
+# "config.status -r", so it must be removed from $cmd
+# -- -n (or other options) may be included on the command line
+# of "config.status -r" and will be passed to configure
+cmd2=`echo $cmd | sed 's/ --*n[a-z-]*//g'`
+cat >$f <<@EOF
+# config.status -- configuration status file
+# creator: configure for $package $version <$cfgauthor $cfgdate>
+# created: $date
+# command: $cmd
+
+case "\$1" in
+ -r*|--r*)
+ shift
+ echo \$0: rerunning $cmd2 1>&2
+ exec sh $cmd2 \$* ;;
+esac
+
+echo This is config.status, generated by configure for $package on $date
+
+srcdir=$srcdir
+date=`date +19%y-%m-%d`
+files="\${*-$files}"
+sedscript='
+ s,@package@,$package,
+ s,@srcdir@,$srcdir,
+ s,@texmf@,$texmf,
+ s,@configure@,$0,
+ s,@INSTALL@,$INSTALL,
+ s,@INSTALL_DATA@,$INSTALL_DATA,
+@EOF
+
+if test -n "$tds"; then
+ echo >>$f " s,@texdir@,\$(texmf)/tex/plain/\$(package),"
+ echo >>$f " s,@docdir@,\$(texmf)/doc/plain/\$(package),"
+else
+ echo $n $me: searching for TeX macro dir..$c; found=
+ for d in inputs macros; do
+ echo $dot
+ if test -d $texmf/$d -a $writable $texmf/$d; then
+ echo $texmf/$d
+ echo >>$f " s,@texdir@,$texmf/$d,"
+ found=t
+ break
+ fi
+ done
+ if test -z "$found"; then
+ echo ""
+ echo $0: fatal error: TeX macro dir NOT FOUND 1>&2
+ exit 1
+ fi
+
+ # now same again for a documentation directory
+ echo $n $me: searching for documentation dir..$c; found=
+ for p in $texmf $fonts $prefixes; do
+ for d in doc doc/tex docs docs/tex ; do
+ echo $dot
+ if test -d $p/$d -a $writable $p/$d; then
+ echo $p/$d/$package
+ echo >>$f " s,@docdir@,$p/$d/\$(package),"
+ found=t
+ break 2
+ fi
+ done
+ done
+ if test -z "$found"; then
+ echo ""
+ echo $0: warning: documentation dir NOT FOUND 1>&2
+ fi
+fi
+
+
+# Finish off the config.status file:
+
+cat >>$f <<'@EOF'
+'
+
+for file in $files; do
+ echo $0: writing $file... 1>&2
+ sed -e 's,Template for configure,Generated from '$file'.in on '$date' by '$0, \
+ -e "$sedscript" $srcdir/$file.in > $file || exit 1
+done
+
+exit 0
+@EOF
+
+echo $me: configuration status written on config.status
+
+if test -z "$nocreate"; then
+ sh config.status
+fi
+
+rm -f $tmp
+exit 0
diff --git a/macros/plain/contrib/pdcmac/contents.txt b/macros/plain/contrib/pdcmac/contents.txt
new file mode 100644
index 0000000000..b32f5df179
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/contents.txt
@@ -0,0 +1,40 @@
+total 498
+-rw-r--r-- 1 pdc mc86 1006 Mar 20 14:23 00readme.txt
+-rw-r--r-- 1 pdc mc86 7984 Apr 6 16:10 changes.txt
+-rwxr-xr-x 1 pdc mc86 6910 Mar 24 18:56 configure
+-rw-r--r-- 1 pdc mc86 0 Apr 6 16:10 contents.txt
+-rw-r--r-- 1 pdc mc86 19466 Mar 8 18:16 copying.tex
+-rw-r--r-- 1 pdc mc86 19038 Feb 10 11:02 copying.txt
+-rwxr-xr-x 1 pdc mc86 1282 Apr 6 14:38 dtxtags
+-rw-r--r-- 1 pdc mc86 4267 Apr 6 12:19 dtxtags.1
+-rwxr-xr-x 1 pdc mc86 787 Mar 24 18:34 fig2epsf
+-rw-r--r-- 1 pdc mc86 1101 Mar 27 16:56 fig2epsf.1
+-rw-r--r-- 1 pdc mc86 3196 Feb 23 18:51 install.txt
+-r--r--r-- 1 pdc mc86 21818 Apr 6 14:34 maamac.dtx
+-r--r--r-- 1 pdc mc86 7785 Mar 29 17:32 magrmac.dtx
+-rw-r--r-- 1 pdc mc86 21216 Feb 23 17:39 magrman.tex
+-rw-r--r-- 1 pdc mc86 4854 Apr 6 12:43 makefile.in
+-rw-r--r-- 1 pdc mc86 387 Apr 6 14:38 news.txt
+-rw-r--r-- 1 pdc mc86 10187 Apr 6 12:42 oput01.eps
+-rw-r--r-- 1 pdc mc86 8784 Feb 13 17:07 oput01.fig
+-rw-r--r-- 1 pdc mc86 12285 Apr 6 12:42 oput02.eps
+-rw-r--r-- 1 pdc mc86 8032 Feb 13 15:34 oput02.fig
+-r--r--r-- 1 pdc mc86 20544 Mar 30 17:07 pdcadobe.dtx
+-r--r--r-- 1 pdc mc86 29428 Mar 30 17:08 pdccode.dtx
+-rw-r--r-- 1 pdc mc86 8194 Apr 6 12:44 pdccode.tex
+-rw-r--r-- 1 pdc mc86 7961 Mar 3 15:41 pdccode2.tex
+-r--r--r-- 1 pdc mc86 38300 Apr 6 12:55 pdcfmt2.dtx
+-r--r--r-- 1 pdc mc86 23174 Mar 28 20:06 pdcfsel.dtx
+-rw-r--r-- 1 pdc mc86 61708 Apr 6 16:04 pdcguide.dvi
+-rw-r--r-- 1 pdc mc86 31674 Apr 6 16:04 pdcguide.tex
+-r--r--r-- 1 pdc mc86 8670 Mar 30 17:10 pdcl1maa.dtx
+-rw-r--r-- 1 pdc mc86 27 Apr 6 12:20 pdcmacvn.tex
+-r--r--r-- 1 pdc mc86 18597 Mar 30 17:13 pdcmisc.dtx
+-rw-r--r-- 1 pdc mc86 5207 Mar 29 15:54 pdcmondo.tex
+-r--r--r-- 1 pdc mc86 32746 Apr 6 12:51 pdcoput5.dtx
+-r--r--r-- 1 pdc mc86 37441 Mar 30 17:12 pdcsty.dtx
+-rwxr-xr-x 1 pdc mc86 1695 Mar 24 19:10 pinstall
+-rw-r--r-- 1 pdc mc86 1744 Mar 27 15:47 pinstall.1
+-rwxr-xr-x 1 pdc mc86 1876 Mar 27 14:22 pmkdir
+-rw-r--r-- 1 pdc mc86 1538 Mar 27 16:49 pmkdir.1
+-rw-r--r-- 1 pdc mc86 789 Apr 6 14:38 version.txt
diff --git a/macros/plain/contrib/pdcmac/copying.tex b/macros/plain/contrib/pdcmac/copying.tex
new file mode 100644
index 0000000000..a08f1d0dee
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/copying.tex
@@ -0,0 +1,373 @@
+\section{GNU General Public License\ifnum\pageno>0 \note{This licence is reproduced
+ verbatim, therefore the American spelling is used.}\fi}
+ Version 2, June 1991
+
+\noindent
+ Copyright \copyright~1989, 1991 Free Software Foundation, Inc.,
+ 675~Mass Ave, Cambridge, MA 02139, USA
+
+ Everyone is permitted to copy and distribute verbatim copies of
+ this license document, but changing it is not allowed.
+
+
+\noindent{\bf Preamble}\quad
+ The licenses for most software are designed to take away your freedom
+to share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users. This General Public
+License applies to most of the Free Software Foundation's software and
+to any other program whose authors commit to using it. (Some other Free
+Software Foundation software is covered by the GNU Library General
+Public License instead.) You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it if
+you want it, that you can change the software or use pieces of it in new
+free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1)~copyright the software, and
+(2)~offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+\bigskip
+\noindent{\bf TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+ MODIFICATION\advance\rightskip0pt plus 1em \par}
+\medskip
+
+ 1. This License applies to any program or other work which contains a
+ notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License. The `Program',
+ below, refers to any such program or work, and a `work based on the
+ Program' means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or
+ translated into another language. (Hereinafter, translation is
+ included without limitation in the term `modification'.) Each
+ licensee is addressed as `you'.
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 2. You may copy and distribute verbatim copies of the Program's source
+ code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any
+ warranty; and give any other recipients of the Program a copy of
+ this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 3. You may modify your copy or copies of the Program or any portion of
+ it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+\numbered
+ \\You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ \\You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program or
+ any part thereof, to be licensed as a whole at no charge to
+ all third parties under the terms of this License.
+
+ \\If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display
+ an announcement including an appropriate copyright notice and
+ a notice that there is no warranty (or else, saying that you
+ provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to
+ view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an
+ announcement, your work based on the Program is not required
+ to print an announcement.)
+\endnumbered
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not apply
+ to those sections when you distribute them as separate works. But
+ when you distribute the same sections as part of a whole which is a
+ work based on the Program, the distribution of the whole must be on
+ the terms of this License, whose permissions for other licensees
+ extend to the entire whole, and thus to each and every part
+ regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on a
+ volume of a storage or distribution medium does not bring the other
+ work under the scope of this License.
+
+ 4. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you also do one of the
+ following:
+
+\numbered
+ \\ Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Sections 1 and 2 above on a medium customarily used for
+ software interchange; or,
+
+ \\ Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange; or,
+
+ \\ Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with
+ such an offer, in accord with Subsection b above.)
+\endnumbered
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete
+ source code means all the source code for all modules it contains,
+ plus any associated interface definition files, plus the scripts
+ used to control compilation and installation of the executable.
+ However, as a special exception, the source code distributed need
+ not include anything that is normally distributed (in either source
+ or binary form) with the major components (compiler, kernel, and so
+ on) of the operating system on which the executable runs, unless
+ that component itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 5. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.
+
+ 6. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Program or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Program (or any work
+ based on the Program), you indicate your acceptance of this License
+ to do so, and all its terms and conditions for copying,
+ distributing or modifying the Program or works based on it.
+
+ 7. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject
+ to these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted
+ herein. You are not responsible for enforcing compliance by third
+ parties to this License.
+
+ 8. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Program at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Program by all those who receive
+ copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely
+ from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of
+ any such claims; this section has the sole purpose of protecting
+ the integrity of the free software distribution system, which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is
+ willing to distribute software through any other system and a
+ licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 9. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Program under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 10. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies to
+ it and `any later version', you have the option of following the
+ terms and conditions either of that version or of any later version
+ published by the Free Software Foundation. If the Program does not
+ specify a version number of this License, you may choose any
+ version ever published by the Free Software Foundation.
+
+ 11. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted by
+ the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision
+ will be guided by the two goals of preserving the free status of
+ all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+
+\medbreak\centerline{\bf NO WARRANTY}\nobreak\smallskip\nobreak
+\begingroup\tolerance=3000 \advance\rightskip 0pt plus 1em
+
+ 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
+ AND/OR OTHER PARTIES PROVIDE THE PROGRAM `AS IS' WITHOUT WARRANTY
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+ DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+ OR CORRECTION.
+
+ 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+\endgroup
+\bigskip \centerline{\bf END OF TERMS AND CONDITIONS}\medbreak
+
+\noindent{\bf How to Apply These Terms to Your New Programs}\quad
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+`copyright' line and a pointer to where the full notice is found.
+
+\quotation
+ {\it one line to give the program's name and a brief idea of what it does}
+
+ Copyright (C) 19{\it yy} {\it name of author}
+\smallskip
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+\smallskip
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+\smallskip
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+\endquotation
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+\quotation
+ Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+\endquotation
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items---whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a `copyright disclaimer' for the program, if
+necessary. Here is a sample; alter the names:
+
+\quotation
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ SIGNATURE OF TY COON, 1 April 1989
+ Ty Coon, President of Vice
+\endquotation
+
+This General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications
+with the library. If this is what you want to do, use the GNU Library
+General Public License instead of this License.
+
+
+%Local Variables:
+%tex-mother-file: "pdcguide.tex"
+%End:
diff --git a/macros/plain/contrib/pdcmac/copying.txt b/macros/plain/contrib/pdcmac/copying.txt
new file mode 100644
index 0000000000..90e4c02453
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/copying.txt
@@ -0,0 +1,358 @@
+ GNU GENERAL PUBLIC LICENSE
+ **************************
+
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+Preamble
+========
+
+ The licenses for most software are designed to take away your freedom
+to share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users. This General Public
+License applies to most of the Free Software Foundation's software and
+to any other program whose authors commit to using it. (Some other Free
+Software Foundation software is covered by the GNU Library General
+Public License instead.) You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it if
+you want it, that you can change the software or use pieces of it in new
+free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 1. This License applies to any program or other work which contains a
+ notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License. The "Program",
+ below, refers to any such program or work, and a "work based on the
+ Program" means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or
+ translated into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".) Each
+ licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 2. You may copy and distribute verbatim copies of the Program's source
+ code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any
+ warranty; and give any other recipients of the Program a copy of
+ this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 3. You may modify your copy or copies of the Program or any portion of
+ it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+ a. You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b. You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program or
+ any part thereof, to be licensed as a whole at no charge to
+ all third parties under the terms of this License.
+
+ c. If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display
+ an announcement including an appropriate copyright notice and
+ a notice that there is no warranty (or else, saying that you
+ provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to
+ view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an
+ announcement, your work based on the Program is not required
+ to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not apply
+ to those sections when you distribute them as separate works. But
+ when you distribute the same sections as part of a whole which is a
+ work based on the Program, the distribution of the whole must be on
+ the terms of this License, whose permissions for other licensees
+ extend to the entire whole, and thus to each and every part
+ regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on a
+ volume of a storage or distribution medium does not bring the other
+ work under the scope of this License.
+
+ 4. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you also do one of the
+ following:
+
+ a. Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Sections 1 and 2 above on a medium customarily used for
+ software interchange; or,
+
+ b. Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange; or,
+
+ c. Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with
+ such an offer, in accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete
+ source code means all the source code for all modules it contains,
+ plus any associated interface definition files, plus the scripts
+ used to control compilation and installation of the executable.
+ However, as a special exception, the source code distributed need
+ not include anything that is normally distributed (in either source
+ or binary form) with the major components (compiler, kernel, and so
+ on) of the operating system on which the executable runs, unless
+ that component itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 5. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.
+
+ 6. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Program or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Program (or any work
+ based on the Program), you indicate your acceptance of this License
+ to do so, and all its terms and conditions for copying,
+ distributing or modifying the Program or works based on it.
+
+ 7. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject
+ to these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted
+ herein. You are not responsible for enforcing compliance by third
+ parties to this License.
+
+ 8. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Program at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Program by all those who receive
+ copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely
+ from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of
+ any such claims; this section has the sole purpose of protecting
+ the integrity of the free software distribution system, which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is
+ willing to distribute software through any other system and a
+ licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 9. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Program under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 10. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies to
+ it and "any later version", you have the option of following the
+ terms and conditions either of that version or of any later version
+ published by the Free Software Foundation. If the Program does not
+ specify a version number of this License, you may choose any
+ version ever published by the Free Software Foundation.
+
+ 11. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted by
+ the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision
+ will be guided by the two goals of preserving the free status of
+ all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+
+ NO WARRANTY
+
+ 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
+ AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+ DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+ OR CORRECTION.
+
+ 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+How to Apply These Terms to Your New Programs
+=============================================
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+ Copyright (C) 19YY NAME OF AUTHOR
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ SIGNATURE OF TY COON, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications
+with the library. If this is what you want to do, use the GNU Library
+General Public License instead of this License.
+
diff --git a/macros/plain/contrib/pdcmac/dtxtags b/macros/plain/contrib/pdcmac/dtxtags
new file mode 100644
index 0000000000..97c5949c6f
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/dtxtags
@@ -0,0 +1,67 @@
+#! /bin/sh
+
+# dtxtags -- getenerate a TAGS file for the DTX files
+version="1.1 Time-stamp: <pdc 1995-04-06>"
+
+# The grep line produces LINE:BYTE:PATTERN
+# the sed converts this to LINE:BYTE:PATTERN:TAG
+
+tmp=${TMP-/tmp}/mktags$$
+trap 'rm -f $tmp*' 0
+
+me=`basename $0`
+outfile=TAGS
+
+touch $tmp
+while test $# -gt 0; do
+ case $1 in
+ --o*=*)
+ outfile=`expr $1 : '.*=\(.*\)$'` ;;
+ -o|--o*)
+ outfile=$2; shift ;;
+ -o*)
+ outfile=`expr $1 : '-.\(.*\)$'` ;;
+ -h|--h*)
+ cat <<@EOF
+$me: construct an etags-style tags file from DTX files.
+
+USAGE:
+ $me [ --output=OUTFILE ] [ INFILE... ]
+ $me --help | --version
+@EOF
+ exit 0 ;;
+ -V|--v*)
+ echo This is $me $version
+ exit 0 ;;
+ -*)
+ echo >&2 $me: $1: not understood, try $me --help
+ exit 2 ;;
+ *)
+ i=$1
+ echo >&2 $1:
+ egrep -nb '^[ ]\|[ ]*\\([a-z]*def|new)' <$1 |
+ sed '
+ s/\([ ]*|\\[a-z]*\\[A-Za-z]*\).*$/\1/
+ t finish
+ s/\([ ]*|\\[a-z]*\\.\).*$/\1/
+ t finish
+ s/\([ ]*|\\[a-z]*[^a-z]\).*$/\1/
+ : finish
+ s/\([0-9]*\):\([0-9]*\):\(.*\)/\3\1,\2/
+ ' > $tmp.a
+ wc $tmp.a
+ echo ' ' >> $tmp
+ echo $1,`wc -c <$tmp.a` >>$tmp
+ cat $tmp.a >> $tmp
+ ;;
+ esac
+ shift
+
+done
+
+mv 2>/dev/null $outfile $outfile.bak &&
+echo >&2 backup written to $outfile.bak
+
+mv $tmp $outfile
+
+exit 0
diff --git a/macros/plain/contrib/pdcmac/dtxtags.1 b/macros/plain/contrib/pdcmac/dtxtags.1
new file mode 100644
index 0000000000..66ec2a8b6a
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/dtxtags.1
@@ -0,0 +1,207 @@
+.TH DTXTAGS 1 "Time-stamp: <pdc 1995-04-06>" "PDCMAC 1.0" "CONTRIBUTED SOFTWARE"
+.SH NAME
+dtxtags \- generate an Emacs tags (etags) file from DTX files
+.SH SYNOPSIS
+.na
+.B dtxtags
+[
+.BI \-\-output= outfile
+] [
+.I infile
+]\|.\|.\|.
+.br
+.B dtxtags
+.B \-\-help
+|
+.B \-\-version
+.SH DESCRIPTION
+.na
+This is a shellscript that looks for definitions in
+.B dtx
+files
+(Documented TeX Macros, as used in the
+.SM PDCMAC
+package), and generates a tags file in
+.IR etags (1)
+format. The tags file will be called
+.SM
+.B TAGS
+by default.
+Any old tags file will be written to
+.BR TAGS.bak .
+.SH OPTIONS
+.TP
+.BI \-\-output= outfile, " \-o " outfile
+Write tags to
+.I outfile
+instead of the default.
+Any existing file with that name will be renamed
+.IB outfile .bak
+first.
+.TP
+.BR \-\-help ", " \-h
+Print a summary of options and exit.
+.TP
+.BR \-\-version ", " \-V
+Print version identification and exit.
+.SH "INPUT SYNTAX"
+This section describes the constructs in the
+.B dtx
+that will be recognized as tags. You should already be acquainted with
+TeX terminology like `control sequence'.
+.PP
+A
+.I keyword
+is (1)\ a TeX control sequence
+.I containing
+.RB ` def ',
+such as
+.B \edef
+or
+.B \edefverbatim
+or
+.BR \emathchardef ,
+or (2)\ a control sequence
+.I starting
+with
+.RB ` \enew ',
+like
+.B \enewif
+and
+.BR \enewcount .
+Keywords define the
+.I tag
+(a control sequence or single character) immediately following.
+.PP
+Keywords are recognized only if immediately following a
+.RB ` | '
+at the start of a line, the code used to introduce macro code in
+.B dtx
+files.
+.PP
+There may be whitespace between the start of the line and the
+vertical bar, and between the vertical bar and the keyword (this means a
+few definitions appearing within definitions are spuriously tagged, but
+this should be harmless).
+.SH "OUTPUT FORMAT"
+This section sumarizes the syntax of the tag file that is generated,
+because the documentation for
+.IR etags (1)
+omits it. Since this syntax description was made by reverse-engineering
+.I etags
+output, it should not be taken as definitive!
+.PP
+A tags file is composed of
+.I sections
+catenated together,
+each section made of a
+.I header
+followed by the
+.IR body .
+All numbers are expressed in ASCII in decimal notation.
+.PP
+The header consists of a form feed, a newline, the name of the file the
+tags are found in, a comma, and the size in bytes of the body and a
+newline.
+.PP
+The body consists of
+.I entries
+which may be in
+old format or new format.
+Old format entries are of the form
+.IP "" 4n
+.I fragment
+.B \e177
+.IB line ,
+.I byte
+.SM NL
+.PP
+where
+.I fragment
+is a fragment from the file containing the tag (where the start of the
+fragment is at the beginning of a line in the file),
+.B \e177
+is a
+.SM DEL
+character (character 127),
+.I line
+is the number of the line in which the fragment appears,
+.I byte
+is the position of the start of the fragment in bytes from the
+start of the file,
+and
+.SM NL
+is a newline (character 10).
+.PP
+New format entries are of the form
+.IP "" 4n
+.I fragment
+.B \e177
+.IB line ,
+.IB byte ,
+.B \e001
+.I tag
+[
+.B \e001
+.I tag
+]\|.\|.\|.
+.SM NL
+.PP
+(two commas) where
+.B \e001
+is a
+.SM SOH
+character (character 1), and
+.I tag
+is the exact tag (necessary for C++, where the entire tag is not
+necessarily found on the definition line). The brackets and ellipsis
+indicate that there may be one or more tags in the entry.
+.PP
+Real tags files may also have references to other tag files, but I don't
+use this feature.
+.SH ENVIRONMENT
+.TP
+.SM TMP
+Name of directory for temporary files.
+Default is
+.BR /tmp .
+.SH FILES
+.TP
+.SB TAGS
+Default output file name.
+.TP
+.B /tmp/mktags\(**
+Temporary files.
+.SH AUTHOR
+P. Damian Cugley
+.RI ( damian.cugley@comlab.ox.ac.uk ).
+.SH "SEE ALSO"
+etags(1), emacs(1)
+.PP
+The file
+.B etc/etags.notes
+in the Emacs distribution.
+.PP
+Richard Stallman,
+.I Emacs Reference Manual
+(or the corresponding Info file).
+.PP
+P. Damian Cugley,
+.I PDCMAC User Guide
+(file
+.B pdcguide.tex
+in the
+.SM PDCMAC
+distribution),
+for information about
+.B dtx
+files.
+.SH BUGS
+This is just a shellscript emulating a subset of
+.IR etags 's
+functionality.
+.PP
+Despite the name, this program does not work with the
+.B dtx
+files used in LaTeX 2e distributions, which have a completely different
+format (and their own indexing scheme).
diff --git a/macros/plain/contrib/pdcmac/fig2epsf b/macros/plain/contrib/pdcmac/fig2epsf
new file mode 100644
index 0000000000..18b7ab5298
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/fig2epsf
@@ -0,0 +1,36 @@
+#! /bin/sh
+
+# Convert Fig files to conformant EPSF-3.0 files
+# Fig's PostScript translation creates EPSF files that cause
+# many laser printers to abort in mid-document.
+# This script attempts to remedy this.
+
+version="1.0 Time-stamp: <pdc 1995-03-24>"
+
+# Usage fig2epsf [ -m MAG ] [ -f FONT ] [ -s FSIZE ] [
+
+case $1 in
+ -V|--version)
+ echo 'This is fig2epsf $version, using fig2dev from'
+ fig2dev -V
+ exit 0
+esac
+
+fig2dev -Lps $* | sed '
+ s/^%!$/%!PS-Adobe-3.0 EPSF-3.0/
+ s/^%!PS-Adobe-2.0 EPSF-2.0/%!PS-Adobe-3.0 EPSF-3.0/
+ s/%%Pages: 0/%%Pages: 1/
+ /\/\$F2psDict/d
+ /\$F2psDict begin/d
+ / end/d
+ /\/\$F2psBegin/d
+ /\/\$F2psEnd/d
+ /\$F2psBegin/d
+ /\/col-1/d
+ s/col-1//g
+ s,\$F2psDict /mtrx matrix put,/mtrx matrix def,
+ s/\$F2psEnd/showpage/
+ /%%EndProlog/a\
+\
+%%Page: 1 1
+'
diff --git a/macros/plain/contrib/pdcmac/fig2epsf.1 b/macros/plain/contrib/pdcmac/fig2epsf.1
new file mode 100644
index 0000000000..6f68076bf4
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/fig2epsf.1
@@ -0,0 +1,46 @@
+.TH FIG2EPSF 1 "Time-stamp: <pdc 1995-03-27>" "PDCMAC 1.0" "CONTRIBUTED SOFTWARE"
+.SH NAME
+fig2epsf \- convert Fig picture files into Encapsulate PostScript format
+.SH SYNOPSIS
+.na
+.B fig2epsf
+[
+.I fig2dev options
+]
+.I figfile
+.B >
+.I epsffile
+.SH DESCRIPTION
+.na
+This is a shellscript that uses the
+.IR fig2dev (1)
+program to convert files in Fig's format
+(see
+.IR fig (1)
+or
+.IR xfig (1))
+into Encapsulated PostScript Format compliant with version 3.0 of the
+.SM EPSF
+guidelines. The
+.SM EPSF
+file is printed on the standard output stream.
+.PP
+This shellscript cleans up some of the redundant PostScript code that
+.I fig2dev
+2.1.4.1 produces, so that the resulting files may be printed on a
+tiny-brained LaserWriter, and corrects the header comments so that it
+may be previewed with
+.IR ghostview (1).
+.SH AUTHOR
+P. Damian Cugley
+.SH "SEE ALSO"
+fig2dev(1)
+.PP
+.I
+PostScript Language Reference Manual
+Second Edition
+(Addison\-Wesley, 1990),
+Appendix E.
+.SH BUGS
+It is possible that later versions of TransFig will produce less buggy
+PostScript files, and that these will break this shellscript.
diff --git a/macros/plain/contrib/pdcmac/install.txt b/macros/plain/contrib/pdcmac/install.txt
new file mode 100644
index 0000000000..5713d2fbde
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/install.txt
@@ -0,0 +1,91 @@
+install.txt -*-text-*- Time-stamp: <pdc 1995-02-23>
+
+ INSTALLING PDCMAC
+
+1. GNERIC INSTALLATION
+
+ The file "contents.txt" gives a list of all the files (except
+ itself) with their sizes in bytes.
+
+ The macro files are packaged with their documentation in "dtx"
+ files (the LaTeX 2e distribution uses files with the same suffix
+ for a similar purpose).
+
+ You do not need Docstrip or LaTeX to unpack these files; all you
+ need is a copy of "pdccode.tex". Just run plain TeX on the
+ "dtx" files to generate the macro files and the printed
+ documentation all at the same time.
+
+ Then put the macro files somewhere where TeX can find them. For
+ systems with the new TeX Directory Structure this directory
+ might be "$texmf/tex/plain/pdcmac/"; for UNIXTeX 6.1 it might be
+ "$texmf/tex/plain/"; for older TeX it might be "$tex/inputs" or
+ "$tex/macros".
+
+ You may want to put the DVI files and the DTX files together in
+ a documentation directory if you have one. On TDS systems this
+ might be "$texmf/doc/pdcmac/".
+
+
+2. UNIX SYSTEMS
+
+ For the benefit of people on UNIX systems I can supply a
+ Makefile template and a configuration script. The conventions
+ for the config scriopt are based on the GNU Coding Standards.
+
+(1) Configuration. Run the command "./configure" (you may need to say
+ "sh configure"); this is a shell script that attempts to guess
+ sensible values for things like "texdir" (the directory to put
+ TeX macro files). It generates a shellscript "config.status"
+ which records the current configuration; running it recreates
+ the "Makefile".
+
+ The "configure" script understands the following options.
+ *You should not need to specify any of these.*
+
+ -n, -nocreate, --nocreate
+ Make "config.status" but don't run it to generate "Makefile".
+
+ -h, -help, --help
+ Print a summary of options.
+
+ -pDIR, -prefix DIR, --prefix=DIR
+ Set the "prefix" for directory names. FOr example, "-p/usr"
+ indcates that TeX files are under "/usr/texmf" or "/usr/tex" or
+ somesuch.
+
+ -sDIR, -srcdir DIR, --srcdir=DIR
+ Tell "configure" where the source files are. This is used when
+ building the package in a different directory. Normally even
+ in this case "configure" can guess the cirrect dierctory by
+ examining $0.
+
+ -tDIR, -texdir DIR, --texdir=DIR
+ Tell "configure" where TeX files are (this makes -p redundant).
+ For example "-t/usr/texmf".
+
+ -wtds, -with tds, --with-tds
+ Tell "configure" you have a new-style TeX Directory Structure.
+ Usually "configure" can guess correctly.
+
+ Other options are ignored.
+
+(2) Run "make". The makefile generated by "configure" is tested with
+ GNU "make". The makefile understands the following conventional
+ targets:
+
+ "make"
+ Generates all the "tex" macro files, and runs TeX on the other
+ documentation files.
+
+ "make install"
+ Copies the macro files into TeX's macros directory, and the DVI
+ files into the $docdir.
+
+ "make uninstall"
+ Deletes the files that would be created by "make install".
+
+ "make mostlyclean|clean|distclean|realclean"
+ Delete files made from source files. "mostlyclean" removes the
+ ones that are generated most often; "realclean" removes even
+ those that are rarely deleted.
diff --git a/macros/plain/contrib/pdcmac/maamac.dtx b/macros/plain/contrib/pdcmac/maamac.dtx
new file mode 100644
index 0000000000..9ddde3ee83
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/maamac.dtx
@@ -0,0 +1,627 @@
+% maamac.dtx -- documentation & source for maamac.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "MAAMAC -- Malvern A Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/maamac.dtx",
+%%% version = "$Revision: 1.5 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/04/06 13:33:44 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file maamac.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ maamac
+%{{{ preamble
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: maamac.dtx,v 1.5 1995/04/06 13:33:44 pdc Exp $\endrcs
+
+\newcount\chcda \newcount\chcdc \newcount\chcdn
+\def\changecodes#1#2#3#4{%
+ \chcda#2\relax \chcdc#3\relax \chcdn#4\relax
+ \loop \ifnum\chcdn>0
+ #1\chcda\chcdc
+ \advance\chcda1 \advance\chcdc1 \advance\chcdn-1
+ \repeat
+}
+\changecodes\mathcode{`a}{"7461}{26}
+
+\codefile{maamac.tex}
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{MAAMAC---Malvern A Macros}
+\advance\seccount-1
+\section{Introduction}
+
+ This document describes |maamac.tex|, a collection of formatting
+ macros for plain \TeX\ documents using fonts with the Malvern~A
+ encoding. For example, it defines commands for making composite
+ letters and special symbols.
+
+\subsec{About this document}
+
+ The definitions file and this printed documentation are both in
+ |maamac.dtx|, a `documented \TeX\ macros' file\footnote*{The
+ \LaTeX~2e distribution uses files with the `|dtx|' suffix for
+ similar purposes.} which, when processed by plain \TeX,
+ generates a fresh copy of |maamac.tex| in the current directory
+ in addition to the |dvi| file. This ensures that the printed
+ documentation and the code it describes are identical. The
+ |dtx| file uses the macros in |pdccode.tex|.
+
+\subsec{What is in MAAMAC?}
+
+ The definitions in |maamac.tex| fall into three sections:
+\smallskip
+\item{\S1} Building {\it composite letters} like `\'e' from {\it
+ marks} like `\'{}' and {\it base letters} like `e'. This gives
+ new definitions for commands like |\'| and |\"|.
+\item{\S2} Symbols and special letters: replacements for existing
+ commands like |\P| (\P) and |\ae| (\ae), and new commands like
+ |\registered| and |\pounds|.
+\item{\S3} Switching between alphabets. The Malvern~A encoding includes
+ separate small capital and medium capital alphabets in addition
+ to the usual capitals and lower case. This section defines
+ commands for transliterating a list of tokens from one alphabet
+ to another.
+
+\smallskip\noindent
+ The first two sections make changes to commands described in
+ {\it\TeX book} Chapter~9 (and a few maths symbols from
+ Chapter~16) and defined in Appendix~B.
+
+%}}} introduction
+%{{{ File identification
+\subsec{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+
+\code
+ \|\% maamac.tex \fileversion~\filedate~-- Malvern A Macros
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/maamac.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Macros for using the Malvern-A font coding
+ |%%% scheme in plain TeX documents.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+
+%}}}
+%{{{ building composite letters
+\section{Building composite letters}
+
+ THis section redefines commands listed at the start of Chapter~9
+ of the {\it\TeX book}: |\'|, |\"|, etc. The main difference is
+ that these now use `medium capitals' and differently-drawn marks
+ to make composite capital letters.
+
+ I~also define \<chardef tokens> called |\acuteglyph|,
+ |\twodotsglyph| which may be used to print these marks in a
+ document: `the acute mark ``\'{}''\dots' might be typeset with
+ `|the acute mark ``\acuteglyph''|\dots'. Also, if you don't
+ like the way my macros look, you can say `|\accent\acuteglyph
+ E|' rather than having to look up its glyph number.
+
+%{{{ utility macros
+
+\subsec{Utility macros}
+
+ First some nicknames for scratch registers.
+\code
+ |\dimendef\dimena0 \dimendef\dimenb2
+ |\toksdef\toksa0
+ |\countdef\counta255
+ |\ifx\countb\UNDEFINED \csname newcount\endcsname\countb \fi
+ |\ifx\countc\UNDEFINED \csname newcount\endcsname\countc \fi
+\endcode
+
+ A macro to find the code in \TeX's internal encoding for a
+ character. The character might be represented by (1)~a
+ character with category code~11 or~12, (2)~a token defined with
+ |\chardef|, or (3)~the token |\char| followed by a \<number>.
+\code
+ |\def\code#1{%
+ | \ifcat#1a%
+ | `#1
+ | \else\ifcat#1+%
+ | `#1
+ | \else\ifx\char#1
+\endcode
+\hbox{\hskip6\fontdimen6\tentt
+ \% If the first token is |\char| the rest is the
+ \<number> we want.}
+\code
+ | \else
+ | #1%
+ | \fi\fi\fi
+ |}
+\endcode
+
+ So as to make conditional macros that can be skipped over if
+ they appear nested inside another conditional, we make include
+ the token |\then| amongst the arguments, making this the `if-'
+ token to match the |\else| and |\fi| following it. This way we
+ write, for example
+$$\hbox{|\ifcap|\<character> |\then| \<true text>
+ |\else| \<false text> |\fi|}$$
+\code
+ |\let\then=\iffalse
+\smallbreak
+ |\def\ifcap#1\then{\expandafter\ifcapnum\code{#1}\then}
+ |\def\ifcapnum#1\then{\ifnum\lccode#1=#1}
+\smallbreak
+ |\def\iflower#1\then{\expandafter\iflowernum\code{#1}\then}
+ |\def\iflowernum#1\then{\ifnum\uccode#1=#1}
+\endcode
+
+ A macro to extract the slant-per-point parameter of a font in
+ toe form of a \TeX\ \<factor>.
+\code
+ |\def\fontslant#1{\expandafter\stripPT\the\fontdimen1#1}
+\smallbreak
+ |\begingroup \uccode`2=`p \uccode`3=`t \uppercase{\toksa{\endgroup
+ | \def\\#123{#1}
+ |}} \the\toksa
+ |\let\stripPT=\\
+\endcode
+%}}} utility macros
+%{{{ macros for placing marks
+
+\subsec{Macros for placing marks}
+
+ This simple macro places the text |#3| at displaced
+ $(\hbox{|#1|},\hbox{|#2|})$ from current position:
+\code
+ |\def\putxy#1#2#3{\leavevmode\rlap{\hskip#1\raise#2\hbox{#3}}}
+\endcode
+
+ Now we have a generic mark-placement macro. It is similar to
+ the |\accent| primitive, but takes two extra parameters:
+$$
+ \hbox{|\putmarkxy|\arg{$xf$}\arg{$dy$}\arg{$mark$}\arg{$base$}}
+$$
+ The horizontal position $xf$ of the optical centre of the base
+ letter (ignoring slant) is expressed as a \<factor> (i.e.,
+ decimal fraction of the width of the base glyph). The vertical
+ displacement $dy$ is expressed as a fragment of \TeX\ code that
+ will calculate $dy$. The code is expanded after setting box~0
+ to contain the base glyph, and must put the result in |\dimena|.
+ For example, we could define
+$$
+ \hbox{|\def\fakeaccent{\putmarkxy{0.5}{\dimena\ht0
+ \advance\dimena-1ex }}|}
+$$
+ This produces an approximation to the primitive |\accent|
+ command.
+
+ Given the $x$-factor $xf$, a base glyph with width $wd$, a font
+ with slant $s$, the horizontal displacement $dx$ is given by
+$$
+ dx = xf \times wd + s \times dy\quad.
+$$
+ In this macro it is stored in |\dimenb|.
+\code
+ |\def\putmarkxy#1#2#3#4{{%
+ | \setbox0=\hbox{#4}#2\relax
+ | \dimenb#1\wd0 \advance\dimenb\fontslant\font\dimena
+ | \leavevmode
+ | \putxy{\dimenb}{\dimena}{\hbox to 0pt{\hss\char#3\hss}}%
+ | \box0
+ |}}
+\smallbreak
+ |\def\putmarky{\putmarkxy{0.5}}
+\endcode
+%}}} macros for placing marks
+%{{{ type I marks
+
+\subsec{Type~I Marks}
+
+ A Type~I mark is one which does not have any scope for being
+ `squashed' to go over capital letters---for example, the
+ two-dots mark `\"{}' and macron `\={}'.
+
+ Here's a macro for placing a Type~I mark given by |#1| (a
+ \<number>) over base glyph |#2| (which is anything that |\code|
+ understands). The difference between this macro and simply
+ using |\accent| is (1)~if presented with a capital letter it
+ will use the corresponding medium capital letter and (2)~the the
+ mark is raised by an amount intended to centre it vertically
+ between the top of the base letter and the top of the
+ body-height---assuming it was original centered between
+ body-height and $x$-height.
+
+ If $H$ is the body height, $h$ the height of the base glyph,
+$$ \mathcode`/="202F
+ \eqalign{dy &= { H + h \over 2 } - { H + 1\,{\rm
+ ex} \over 2}\cr
+ &= \textstyle { 1\over2}h - {1\over2}\,{\rm ex}\cr}
+$$
+\code
+ |\def\typeImark#1#2{{%
+ | \setbox2=\hbox{#2}%
+ | \ifdim \ht2=1ex
+ | \accent#1\relax#2%
+ | \else
+ | \counta\code{#2}%
+ | \ifnum\counta>64 \ifnum\counta<96
+ | \advance\counta 128
+ | \fi \fi
+ | \putmarky{\dimena0.5\ht0 \advance\dimena-0.5ex }
+ | {#1}{\char\counta}%
+ | \fi
+ |}}
+\endcode
+
+ Finally we define the composite-letter-building commands.
+\code
+ |\chardef\dotglyph22 \def\.{\typeImark\dotglyph}
+ |\chardef\twodotsglyph23 \def\"{\typeImark\twodotsglyph}
+ |\chardef\macronglyph150 \def\={\typeImark\macronglyph}
+ |\chardef\longmacronglyph151
+ | \def\longmacronmark{\typeImark\longmacronglyph}
+\endcode
+%}}} type I marks
+%{{{ type II marks
+
+\subsec{Type~II Marks}
+
+ These marks have an alternative glyph for use of capital and
+ medium capital letters. As with |\typeImark|, |#1| is a
+ \<number> and |#2| is anything understood by |\code|.
+\code
+ |\def\typeIImark#1#2{{%
+ | \counta#1\relax \countb\code{#2}%
+ | \ifcap{#2}\then
+ | \ifnum \counta<128 \advance\counta 128 \fi
+ | \ifnum \countb<128 \advance\countb 128 \fi
+ | \fi
+ | \accent\counta \char\countb
+ |}}
+\smallbreak
+ |\chardef\acuteglyph8 \def\'{\typeIImark\acuteglyph}
+ |\chardef\graveglyph9 \def\`{\typeIImark\graveglyph}
+ |\chardef\circumglyph10 \def\^{\typeIImark\circumglyph}
+ |\chardef\tildeglyph11 \def\~{\typeIImark\tildeglyph}
+ |\chardef\ringglyph12 \def\ringmark{\typeIImark\ringglyph}
+ |\chardef\caronglyph13 \def\v{\typeIImark\caronglyph}
+ |\chardef\breveglyph14 \def\u{\typeIImark\breveglyph}
+ |\chardef\hungarglyph15 \def\H{\typeIImark\hungarglyph}
+\endcode
+ I have abbreviated `circumflex' as `circum' (consistent with
+ Adobe's `|asciicircum|'). I~have called the hook `\v{}'
+ `|caron|' because that is its name as used by ISO and Adobe.
+ I~have called the long Hungarian umlaut `\H{}' `|hungar|' for
+ want of a better name (it's shorter than |hungarumlaut|)..
+%}}} type II marks
+%{{{ cedilla ogonek
+
+\subsec{Cedilla and ogonek}
+
+ The cedilla and ogonek each have a variant intended for capital
+ letters (in this case the variant is larger not smaller).
+\code
+ |\def\cedillalike#1#2#3{{%
+ | \setbox0=\hbox{#3}%
+ | \ifdim\ht0>1ex
+ | \ooalign{\hidewidth\char#2\relax\hidewidth\crcr\unhbox0 }%
+ | \else
+ | \accent#1 #3%
+ | \fi
+ |}}
+\smallbreak
+ |\chardef\cedillaglyph6 \chardef\Cedillaglyph134
+ |\def\c{\cedillalike\cedillaglyph\Cedillaglyph}
+\smallbreak
+ |\chardef\ogonekglyph7 \chardef\Ogonekglyph135
+ |\def\k{\cedillalike\ogonekglyph\Ogonekglyph}
+\endcode
+%}}} cedilla ogonek
+%}}}
+%{{{ symbols
+\section{Symbols and special letters}
+%{{{ special letters
+
+\subsec{Special letters}
+
+ The letters defined here that are not included in Chapter~9 of
+ the {\it\TeX book} are the Icelandic thorn (|\TH|, |\th|) and
+ eth\footnote*{Also called `edh'.} (|\DH|, |\dh|), the Polish
+ {\it a} and {\it e} with ogonek (|\A|, |\a|, |\E|, |\e|), and
+ the Sami eng\footnote\dag{Also called `ing' or `ng'.} (|\NG|,
+ |\ng|).
+
+ We also give replacements for {\it d}, {\it t} and {\it l} with
+ hook (which are usually drawn with a apostrophe-like mark), and
+ the Esperanto letter {\it hho} (\^h).
+\code
+ |\chardef\TH"00 \chardef\th"10 \chardef\DH"04 \chardef\dh"14
+ |\chardef\A "01 \chardef\a "11 \chardef\E "05 \chardef\e "15
+ |\chardef\NG"02 \chardef\ng"12 \chardef\L "03 \chardef\l "13
+ |\chardef\AE"5E \chardef\ae"7E \chardef\OE"5F \chardef\oe"7F
+ |\chardef\O "5C \chardef\o "7C
+\smallbreak
+ |\chardef\vd"9C \chardef\vt"9D \chardef\h "9E \chardef\vl"9F
+ |\chardef\ss"18 \chardef\i "19 \chardef\j "1A
+\smallbreak
+ |\def\aa{\ringmark a} \def\AA{\ringmark A}
+\endcode
+
+\code
+\smallbreak
+ |\chardef\orda"98 \chardef\ordo"99 \def\No{N\ordo} \def\no{n\ordo}
+ |\chardef\csuperior"98 \def\Mc{M\csuperior}
+\endcode
+ The command |\Mc| is used for forming names like
+ M\flushtop{\the\scriptfont\fam \b c}Donald.
+%}}} special letters
+%{{{ text syms
+
+\subsec{Other symbols used in text}
+
+ There are several new symbols here. Note that |\trademark| is
+ what you will get if you use the ASCII double quote character
+ `|"|' in your manuscript.
+\code
+ |\chardef\trademark "22
+ |\chardef\copyright "FB \chardef\registered"FD
+ |\chardef\careof "9A \chardef\Box "A0
+ |\chardef\cents "A2 \chardef\pounds "A3
+ |\chardef\currency "A4 \chardef\permille "A5
+ |\chardef\yen "A8 \chardef\florin "A9
+ |\chardef\dag "AA \chardef\ddag "AB
+ |\chardef\gbdecimal "AE \chardef\minus "AF
+ |\chardef\S "BA \chardef\P "BB
+ |\chardef\degrees "C0
+ |\chardef\lguillemet"BC \chardef\rguillemet"BE
+\endcode
+ The |\careof| sign ($\rm ^c\!/\!_o$) is an abbreviation for
+ `care of' in English-language addresses (actually, Australians
+ traditionally write `$\rm ^c\!/\!_-$'). The raised dot
+ |\gbdecimal| is the British decimal point (I~usually do
+ |\mathcode`.=\gbdecimal| and let maths mode do all the work).
+ The |\degrees| sign replaces \TeX's |$^\circ$|.
+
+ The guillemets can also be obtained with the ligatures |<<| and
+ |>>|.
+
+
+%}}} text syms
+%{{{ maths syms
+
+\subsec{Symbols used in maths}
+
+ I have stuck with the plain \TeX\ conventions as much as
+ possible---even though |\bullet| is more often used in text than
+ maths.
+\code
+ |\mathcode`\,"602C \mathcode`\-"20AF
+ |\mathcode`\."002E \mathcode`\/"002F
+\smallbreak
+ |\mathchardef\bullet "2020 \mathchardef\times "20A6
+ |\mathchardef\backslash"005B \mathchardef\setminus "205B
+ |\mathchardef\cdot "20AE \mathchardef\cdotp "60AE
+\smallbreak
+ |\def\langle{\delimiter"40DB30A } \delcode`\<"0DB30A
+ |\def\rangle{\delimiter"50DD30B } \delcode`\>"0DD30B
+ |\def\lbrace{\delimiter"407B308 } \let\{\lbrace \mathcode`\{"407B
+ |\def\rbrace{\delimiter"507D309 } \let\}\rbrace \mathcode`\}"407D
+\endcode
+
+%}}} maths syms
+%}}} symbols
+%{{{ switching alphabets
+\section{Switching between alphabets}
+
+ This is one of the strange ideas that went into the design of
+ the Malvern font---I wanted to have small capitals and medium
+ capitals treated as separate alphabets rather than as a
+ different style, just as I treat old-style and ranging numerals
+ as separate symbols. These extra alphabets are present in all
+ Malvern~A encodings\footnote*{Fonts with the Malvern~A encoding
+ but made from normal PostScript fonts will have medium capitals
+ replaced with full capitals, and old-style numerals replaced
+ with ranging numerals.}
+
+ These extra alphabets are obtained by transliterating a sequence
+ of letters using the |\uppercase| and |\lowercase|
+ commands.\footnote\dag{Alas! this task would be so much easier
+ and more efficient if it were possible to declare new
+ alphabet-switching tables styled after the |\uccode| and
+ |\lccode| tables which make |\uppercase| and |\lowercase| work.
+ Then all this nonsense could happen in \TeX's mouth, which has
+ some advantages. I~can imagine commands |\newchartable| (used
+ to create a token which can be used in the same way as
+ |\uccode|) and |\usechartable| (used to defined macros that work
+ like |\uppercase|). E\TeX\ hackers take note!} For example, to
+ transliterate capitals into small capitals (the |\sc| command),
+ we first make assignments so that, for example, |\lccode`a| is
+ set to the code for small-capital $\scriptstyle A$, then apply
+ |\lowercase| to the token list.
+
+\subsec{Setting upper and lower case codes for special letters}
+
+ These entries in the |\uucode| and |\lccode| tables are used by
+ the composite-letter-building commands rather then the
+ alphabet-switchign commands, but they are included here to be
+ near the other code-hackery.
+
+\code
+ |\uccode\th\TH \lccode\TH\th \uccode\TH\TH \lccode\th\th
+ |\uccode\a \A \lccode\A \a \uccode\A \A \lccode\a \a
+ |\uccode\ng\NG \lccode\NG\ng \uccode\NG\NG \lccode\ng\ng
+ |\uccode\l \L \lccode\L \l \uccode\L \L \lccode\l \l
+ |\uccode\dh\DH \lccode\DH\dh \uccode\DH\DH \lccode\dh\dh
+ |\uccode\e \E \lccode\E \e \uccode\E \E \lccode\e \e
+ |\uccode\o \O \lccode\O \o \uccode\O \O \lccode\o \o
+ |\uccode\ae\AE \lccode\AE\ae \uccode\AE\AE \lccode\ae\ae
+ |\uccode\oe\OE \lccode\OE\oe \uccode\OE\OE \lccode\oe\oe
+\smallbreak
+ |\uccode\i`I \uccode\j`J \lccode\i\i \lccode\j\j
+ |\uccode\csuperior`C
+\endcode
+
+
+\subsec{A macro for changing character codes}
+
+ The |\changecodes| command is used to change those segments of
+ character tables that are contiguous and map onto a contiguous
+ segment in the range. It is invoked as
+$$
+ \hbox{\it |\changecodes| command x y n}
+$$
+ (where $\it command$ is a token like |\uccode| or |\mathcode|
+ and $x$, $y$, and $n$ are \<number>s), and does the equivalent
+ of
+$$
+ {\it command}\;i\mathrel{\hbox{\tt=}}
+ j\qquad \hbox{for all $\cases{x \le i < x + n\cr
+ y \le j < y + n\cr}$}
+$$
+
+\code
+ |\def\changecodes#1#2#3#4{%
+ | \counta#2\relax \countb#3\relax \countc#4\relax
+ | \loop
+ | \ifnum\countc>0
+ | #1\counta\countb
+ | \advance\counta 1
+ | \advance\countb 1
+ | \advance\countc-1
+ | \repeat
+ |}
+\endcode
+
+ We can use this immediately to arrange that lowercasing medium caps
+ makes lower case, and uppercasing small caps makes full caps:
+\code
+ |\changecodes\uccode{"E1}{`A}{26}
+ |\changecodes\uccode{"C1}{"C1}{26}
+ |\changecodes\lccode{"E1}{"E1}{26}
+ |\changecodes\lccode{"C1}{`a}{26}
+\endcode
+
+ We also make old-style numerals behave as lower case for ranging
+ numerals, and also arrange that maths mode uses ranging figures.
+\code
+ |\changecodes\lccode{"B0}{`0}{10}
+ |\changecodes\uccode{`0}{"B0}{10}
+\endcode
+
+ In maths mode (1)~we use text italic for letters, since CM MAth
+ Italic will not match the body text and (2)~we use ranging
+ figures.
+\code
+ |\changecodes\mathcode{`a}{"7461}{26}
+ |\changecodes\mathcode{`A}{"7441}{26}
+ |\changecodes\mathcode{`0}{"70B0}{10}
+\endcode
+
+\subsec{Changing the alphabet for special letters got with commands}
+
+ When applying |\uppercase| or |\lowercase| to a token list,
+ macros will be unaffected (|\ae| will still generate `ae'). To
+ get around this we define macros that redefine these control
+ sequences. They each take as parameters hex digits used to make
+ character codes.
+\code
+ |\def\capspecials#1#2{%
+ | \chardef\TH"#10 \chardef\A "#11 \chardef\NG"#12
+ | \chardef\L "#13 \chardef\DH"#14 \chardef\E "#15
+ | \chardef\O "#2C \chardef\AE"#2E \chardef\OE"#2F
+ |}
+\smallbreak
+ |\def\lcspecials#1#2#3{%
+ | \chardef\th"#10 \chardef\a "#11 \chardef\ng"#12
+ | \chardef\l "#13 \chardef\dh"#14 \chardef\e "#15
+ | \chardef\o "#2C \chardef\ae"#2E \chardef\oe"#2F
+ | \def\ss{\char"#23 \char"#23 }\chardef\i"#39 \chardef\j"#3A
+ |}
+\endcode
+\subsec{Pulling it all together}
+ Now we can define the user macros that do the work. These take
+ one argument, a piece of text to transliterate: |\sc{OX1~3QD}|
+ produces a small-capital `${\rm\scriptstyle OX}{\mit 1\
+ 3}{\rm\scriptstyle QD}$';
+ |\csc{ABCdef}| produces caps and small caps
+ `ABC{\the\scriptfont0 DEF}'.
+\code
+ |\def\sc#1{{%
+ | \changecodes\lccode{`A}{"E1}{26}\capspecials9F\lowercase{#1}%
+ |}}
+\smallbreak
+ |\def\mc#1{{%
+ | \changecodes\lccode{`A}{"C1}{26}\capspecials8D\lowercase{#1}%
+ |}}
+\smallbreak
+ |\def\csc#1{{%
+ | \changecodes\uccode{`a}{"E1}{26}\lcspecials9FE\uppercase{#1}%
+ |}}
+\smallbreak
+ |\def\allcaps#1{{%
+ | \lcspecials054\uppercase{#1}%
+ |}}
+\smallbreak
+ |\def\alllc#1{{%
+ | \capspecials17\lowercase{#1}%
+ |}}
+\endcode
+%}}} switching alphabets
+\endcodefile
+\enddocument
+\bye
+%}}} maamac
+
+
+% Local variables:
+% fold-folded-p: t
+% fill-prefix: "\t"
+% End:
diff --git a/macros/plain/contrib/pdcmac/magrmac.dtx b/macros/plain/contrib/pdcmac/magrmac.dtx
new file mode 100644
index 0000000000..7dc1d017b0
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/magrmac.dtx
@@ -0,0 +1,231 @@
+% magrmac.dtx -- documentation and source for magrmac.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "MAGRMAC.TEX -- Malvern Greek Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/magrmac.dtx",
+%%% version = "$Revision: 1.3 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/29 16:32:24 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file magrmac.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ magrmac.dtx
+%{{{ preamble
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: magrmac.dtx,v 1.3 1995/03/29 16:32:24 pdc Exp $\endrcs
+
+\codefile{magrmac.tex}
+
+%}}} preamble
+%{{{ introduction
+\author{P. Dmaian Cugley}
+\title{MAGRMAC---Malvern Greek Macros}
+
+\section{Introduction}
+
+ This document describes |magrmac.tex|, a small file of macros
+ for setting Greek with Malvern~G fonts. `Malvern~G' is the name
+ of an encoding for typesetting Greek texts. Malvern
+ release~$1{\cdot}2$ has a collection of fonts ({\tt
+ ma$XX$g$YY$}) which use this encoding. The Levy and Dryllerakis
+ fonts should work to an extent.
+
+ The conventions for Malvern Greek text files are intended to be
+ similar to those for K.~J.\ Dryllerakis's Greek\TeX\ (the
+ `|kd|-' fonts), and will be most useful on computers where the
+ operating system uses latin letters (as opposed to those which
+ can display Greek letters on the screen).
+
+ There is a brief guide for |magrmac.tex| called |magrman.tex|.
+\notepar
+ These macros are not necessarily in final form and are not
+ intended to be supported. Use them at your own risk.
+\endnotepar
+
+ The document you are reading is a plain \TeX\ file called
+ |magrmac.dtx|. This `documented \TeX\ macros'\footnote*{The
+ suffix |dtx| is the same as files used to simlar effect in the
+ \LaTeX~2e distribution.} file produces the file `|magrmac.tex|'
+ in the current directory, in addition to the usual |dvi| file.
+ The code lines in the printed documentation are identical to
+ those in the macros file.
+
+%}}} introduction
+%{{{ file identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file, for the benefit of people wondering what the file is for.
+
+\code
+ \|\% magrmac.tex \fileversion~\filedate~-- Malvern Greek Macros
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/magrmac.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, Malvern, Greek, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Macros for using Malvern Greek fonts.
+ |%%% This file was generated by running
+ |%%% plain TeX on magrmac.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute magrmac.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%%}
+ |
+ \|\\message\{\fileversion~\filedate\}
+ |
+\endcode
+%}}} file identification
+%{{{ greek mode
+\section{Greek Mode}
+
+ The Greek Mode is started with |\begingreek| for compatibility
+ with the precedent of Greek\TeX\ and Levy's original Greek
+ macros.\footnote*{The conventions of PDCFMT2 would suggest
+ |\greek|\dots|\endgreek| but (besides being incompatible with
+ existing Greek macros) it is probable that the hyphenation table
+ code (|\language| code) for Greek would be called |\greek|,
+ based on the names I~have seen used.}
+
+ The token register |\everygreek| is expanded each time we enter
+ Greek mode. At a minimum it should contain a command to select
+ an appropriate Greek font.
+\code
+ |\newtoks\everygreek
+ |\chardef\other=12
+\smallbreak
+ |\def\begingreek{%
+ | \begingroup
+ | \catcode`\~\other \catcode`\|\other \catcode`\"\other
+ | \the\everygreek
+ |}
+\smallbreak
+ |\let\endgreek=\endgroup
+\endcode
+%}}} greek mode
+\section{Customization}
+%{{{ lunate sigma, curly phi
+
+\subsec{Lunate sigma}
+
+ The macro |\grlunatesigma| belongs in |\everygreek|. It makes
+ |s| an active char expanding to |c|. A certain amount of
+ jiggery-pokery is required because making |s| active makes it
+ impossible to use the name |\grlunatesigma|!
+
+\code
+ |\toksdef\toksa=0
+\smallbreak
+ |\begingroup \let\\=\toksa \catcode`\s=13 \catcode`\S=13 \\={\endgroup
+ | \def\tmp{%
+ | \catcode`\s\active \chardef s`c
+ | \catcode`\S\active \chardef S`C
+ | }
+ |}\the\\
+ |\let\grlunatesigma=\tmp
+\endcode
+
+\subsec{Variant phi}
+
+ In the end I~make the two-stroke phi $\phi$ the default one,
+ with $\varphi$ as the `variant', for compatibility with plain
+ \TeX.
+\code
+ |\chardef\ninetytwo=92
+\smallbreak
+ |\begingroup \uccode`\~=`f \uppercase{\toksa={\endgroup
+ | \def\grvarphi{%
+ | \catcode`\f\active \chardef~\ninetytwo
+ | }
+ |}} \the\toksa
+\endcode
+%}}} lunate sigma
+%{{{ accent
+
+\subsec{One-accent Greek}
+
+ The |\monotonik| macro makes all the accent characters generate
+ the modern symmetrical accent, while the breathings and iota
+ subscript do nothing.
+\code
+ |\begingroup \catcode`\<=\active \catcode`\>=\active
+ | \catcode`\'=\active \catcode`\`=\active \toksa={\endgroup
+ | \def\monotoniko{%
+ | \catcode\lq\'\active \chardef'3
+ | \catcode\lq\`\active \chardef`3
+ | \catcode\lq\~\active \chardef~3
+ | \catcode\lq\<\active \let<\relax
+ | \catcode\lq\>\active \let>\relax
+ | \catcode\lq\|\active \let|\relax
+ | }
+ |}\the\toksa
+\smallbreak
+ |\def\plutoniko{%
+ | \catcode`\'\other \catcode`\`\other \catcode`\~\other
+ | \catcode`\<\other \catcode`\>\other \catcode`\|\other
+ |}
+\endcode
+%}}} accent
+%{{{ define delims
+
+\subsec{Choose shorthand delimiters for Greek Mode}
+
+ Define |#1| to be a `greek shift' in the way |$| is a maths
+ shift. Like |$|, |#1| will stand for either |\begingreek| or
+ |\endgreek| as required. |#1| must be a one-character control
+ sequence (as might be used after |`|).
+\code
+ |\def\grdelimiter#1{
+ | \begingroup \uccode`~=`#1 \uppercase{\toksa={\endgroup
+ | \def~{\begingreek \let~\endgreek}
+ | }} \the\toksa
+ |}
+\endcode
+
+%}}} define delims
+\endcodefile
+\enddocument
+\bye
+%}}} macros for greek
+
+% Local variables:
+% fold-folded-p: t
+% tex-macros-p: t
+% End:
diff --git a/macros/plain/contrib/pdcmac/magrman.tex b/macros/plain/contrib/pdcmac/magrman.tex
new file mode 100644
index 0000000000..82748646a9
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/magrman.tex
@@ -0,0 +1,604 @@
+% magman.tex -- info about Malvern Greek.
+%{{{ Malvern Greek manual
+%{{{ preamble
+
+\errorcontextlines=1000
+\input pdccmlft
+\input magrmac
+
+\font\notegr=ma55g9
+\font\bodygr=ma55g11
+\font\biggr=ma55g24 % used in sample
+\font\gri=ma56g11 % used in sample
+
+\toksa=\expandafter{\STYbodyT}
+\edef\STYbodyT{\the\toksa\noexpand\f{gr}{ma55g}}
+
+\bodyfonts
+
+\everygreek{\gr \baselineskip=14pt}
+
+\grdelimiter\* % * is already an active char
++\defverbatim\_+ % | is often used in examples
+
+\majorheadline{Typesetting Greek using Malvern fonts}
+
+%{{{ font tables
+
+%% Code to typeset a font table -- lifted from my testfont.tex
+
+\newcount\tableN
+\newcount\hexcount
+\def\hexdigit#1{\ifcase#1\relax 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
+ 8\or 9\or A\or B\or C\or D\or E\or F\fi}
+
+\def\ntablecr
+{%
+ \cr
+ \noalign{\nointerlineskip}
+ \multispan2\hfill &\multispan{33}\hrulefill
+}
+\def\ntable
+{
+ \medskip
+ \begingroup \openup1\jot
+ \def\\{\char\tableN \global\advance\tableN 1}
+ \def\0##1{&\omit&\sevenrm##1}
+ \halign to \hsize
+ {%
+ \chartstrut\hss##\tabskip=0pt plus 10pt &
+ &\hss##\hss&##\vrule\cr
+ \lower 6.5pt\null
+ &\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F
+ \ntablecr
+ \global\tableN=0
+ \ntablelines
+ \crcr
+ }
+ \medbreak
+ \endgroup
+}
+
+\def\ntablelines
+{%
+ \ifnum\tableN<256
+ \let\next\ntablecontinuation
+ \else
+ \let\next\relax
+ \fi
+ \next
+}
+
+\newcount\ntabtmp
+
+\def\ntablecontinuation
+{%
+ % Find out if none of this row are defined by making a horizontal
+ % list of all of them preceeded by a penalty of 1; if any of them
+ % are defined then \lastpenalty will be something other than 1:
+ \setbox0=\hbox{\penalty1
+ \def~{\char\tableN \advance\tableN 1}%
+ ~~~~~~~~~~~~~~~~\global\ntabtmp=\lastpenalty}%
+ % Now set the row in the table iff ntabtmp # 1:
+ \ifnum\ntabtmp=1
+ \global\advance\tableN 16 \let\next=\ntablelines
+ \else
+ \let\next=\ntablecontinuationcontinuation
+ \fi
+ \next
+}
+
+\def\ntablecontinuationcontinuation
+{%
+ \cr
+ \noalign{\nointerlineskip \penalty5000 }
+ & \hexcount=\tableN \divide\hexcount16 \sevenrm\hexdigit\hexcount
+ &&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&
+ \ntablecr
+ \ntablelines
+}
+
+\def\chartstrut{\lower 0.25\baselineskip \vbox to \baselineskip{}}
+
+%}}} font tables
+%{{{ two-column quotations
+
+\def\twocolgr{
+ \smallskip
+ \beginthe{twocolgr}
+ \setbox0=\vbox\bgroup
+ \hsize=\bodywd \advance\hsize-\colsep \divide\hsize by 2
+ \begingreek \strut \ignorespaces
+}
+\def\endtwocolgr{%
+ \par\endgreek \egroup
+ \moveleft\leftmargin\vbox{
+ \hrule\smallskip
+ \hbox to \bodywd{\rigidbalance{0}{2}{\ht\strutbox}{\hfil}}
+ \smallskip\hrule
+ }
+ \smallbreak
+ \endthe{twocolgr}
+}
+%}}} two-column quotations
+%}}} preamble
+%{{{ bibliography
+
+\def\TB{{\it TUGboat}}
+
+\counta=0
+\newtoks\bibliography
+\newcount\bibcount
+
+\def\FAQnote
+{%
+ \par {\bf Note on FAQs}\quad An FAQ is an electronic document, posted
+ regularly to a USENET newsgroup, usually in the form of a list of
+ answers to frequently asked questions. Many FAQs are available on
+ the archive site |pit-manager.mit.edu| (alias |rtfm.mit.edu|)
+ [18.172.1.27] in the directory |pub/usenet/news.answers|. The
+ reference gives the name of the compiler, the title, the
+ last-modified date (in lieu of an edition or version number) and
+ name under which the FAQ is archived appears in parentheses.
+ \par
+}
+
+\def\bibdef#1#2%
+{
+ \expcs\edef{cite#1}%
+ {%
+ \noexpand\docite\noexpcs{cite#1}\noexpcs{refer#1}%
+ }
+ \toks0={#2}
+ \expcs\edef{refer#1}{\noexpand\bibitem{\expcs\noexpand{cite#1}}
+ \the\toks0}
+}
+\def\docite#1#2%
+{%
+ \global\advance\bibcount1
+ \global\bibliography=\expandafter
+ {\the\bibliography #2}%
+ \global\edef#1%
+ {[\the\bibcount]}#1%
+}
+
+\bibdef{Allen}
+{
+ W. Sidney Allen, {\it Vox Graeca: A Guide to Pronunciation of Classical
+ Greek}, 3rd Ed.\ (Cambridge University Press, 1987),
+ pp.\thinspace177--179.
+}
+
+\bibdef{KD}
+{
+ K.~J. Dryllerakis (|kd@doc.ic.ac.uk|), {\it Typesetting Greek Texts with
+ Greek\TeX}, Greek\TeX~3.1 (also known as KDGreek) (CTAN
+ |fonts/greek/kd|).
+}
+
+\bibdef{FAQ}
+{
+ Nikolaos Fotis (ed.), {\it soc.culture.greek} FAQ --
+ Linguistics ({\tt greek-\penalty\exhyphenpenalty faq\slash
+ linguistics}, 1993/03/06).
+}
+
+\bibdef{Yannis}
+{
+ Yannis Haralambous and Klaus Thull, Typesetting Modern Greek with 128
+ Character Codes, \TB\/ 10 (1989), pp.\thinspace354--359 (CTAN
+ |fonts/greek/yannis|).
+}
+
+\bibdef{Harts}
+{
+ Horace Hart, {\it Hart's Rules for Compositors and Readers at the
+ University Press, Oxford}, 39th Edition, revised (Oxford
+ University Press, 1989), pp.\thinspace111--116.
+}
+
+\bibdef{Levy}
+{
+ Silvio Levy, Using Greek Fonts with \TeX, \TB\/ 9 (1988),
+ pp.\thinspace20--24 (CTAN |fonts/greek/levy|).
+}
+
+\bibdef{COD}
+{
+ {\it The Concise Oxford Dictionary of Current English}, 8th Ed.
+ (Oxford University Press, 1990), p.\thinspace1453.
+}
+
+\def\bibitem#1%
+{%
+ \smallskip
+ \indent \llap{#1\hskip1pc}\ignorespaces
+}
+
+
+%}}} bibliography
+
+\twosidedtrue
+
+\noheadlinetrue
+\majorheadline{Typesetting Greek using Malvern fonts}
+\leftline{\headingfonts \the\majorheadline}
+\bigskip
+\leftline{P. Damian Cugley}
+\leftline{Oxford University Computing Laboratory}
+\leftline{(|Damian.Cugley@comlab.ox.ac.uk|)}
+\leftline{April 1993}
+\bigskip
+
+\noindent
+ Malvern is a sanserif font family, implemented in \MF. This
+ document describes Malvern encoding~G (the Greek alphabet).
+
+\section{Using Malvern G}
+
+ Because most latin-alphabet languages require additional composite
+ letter glyphs to be properly typeset by \TeX, most Malvern fonts
+ will be used as the raw material for composite fonts. In contrast,
+ the Malvern Greek font can be used directly to typeset Greek, both
+ with the old accent-and-breathing systems and the newer (post-1974)
+ one-accent system. It follows the conventions of Silvio Levy's
+ original |gr| family \citeLevy\ and K.~J. Dryllerakis's Greek\TeX\
+ (|kd| fonts) \citeKD. It is almost compatible with the reduced
+ Greek fonts (|rgr| and |mrgr| families) described by Yannis
+ Haralambous and Karl Thull \citeYannis.
+
+%{{{ typesetting
+
+\section{Macro file}
+
+ The file |magrmac.tex| has some macros for setting texts in plain
+ \TeX. A future production release may instead work as an option or
+ extension of Greek\TeX, with the objective of making it possible to
+ switch an existing document to Malvern without much editing.
+
+ Greek text is set within a \dfn{Greek mode}, delimited by macros
+ |\begingreek| and |\endgreek|. Each time Greek mode is entered, the
+ contents of the token register |\everygreek| is scanned first.
+ Since |magrmac| does {\it not} load a particular font by default, a
+ manuscript using |magrmac| will want to include an assignment like
+\display
+ |\everygreek={\greekfont}|\cr
+ |\catcode`\*=\active \grdelimiter\*|
+\enddisplay
+ where |\greekfont| has been bound to some Greek font or another such
+ as |ma55g12|. The macro |\grdelimiter| takes one parameter, an
+ active character (represented by a one-character control sequence),
+ and makes that character into a self-matching delimiter for Greek
+ mode (like |$|--|$| works for mathematics mode). Thus, `|*This is
+ Greek*|' produces `*This is Greek*'.
+
+\section{The alphabet}
+
+ The letters are transliterated as
+ follows:
+\table \hfil#\hfil&&\enspace\hfil#\hfil\cr
+ \gr a&\gr b&\gr g&\gr d&\gr e&\gr z&\gr h&\gr j&\gr i&\gr k&\gr
+ l&\gr m&\gr n&\gr x&\gr o&\gr p&\gr r&\gr ss&\gr c&\gr t&\gr
+ u&\gr f&\gr v& \gr q&\gr y&\gr w\cr
+ \tt a&\tt b&\tt g&\tt d&\tt e&\tt z&\tt h&\tt j&\tt i&\tt k&\tt
+ l&\tt m&\tt n&\tt x&\tt o&\tt p&\tt r&\tt s&\tt c&\tt t&\tt u&\tt
+ f&\tt v& \tt q&\tt y&\tt w\cr
+\noalign{\smallskip}%
+ \gr A&\gr B&\gr G&\gr D&\gr E&\gr Z&\gr H&\gr J&\gr I&\gr K&\gr
+ L&\gr M&\gr N&\gr X&\gr O&\gr P&\gr R&\gr S&\gr C&\gr T&\gr
+ U&\gr F&\gr V& \gr Q&\gr Y&\gr W\cr
+ \tt A&\tt B&\tt G&\tt D&\tt E&\tt Z&\tt H&\tt J&\tt I&\tt K&\tt
+ L&\tt M&\tt N&\tt X&\tt O&\tt P&\tt R&\tt S&\tt C&\tt T&\tt U&\tt
+ F&\tt V& \tt Q&\tt Y&\tt W\cr
+\endtable
+ The letter *C c* is \dfn{lunate sigma} (see below). The letter *V v*
+ is \dfn{digamma} (wau). I~put it next to *f* because I~don't know
+ where it belongs in the alphabet.
+
+ A lower case sigma `*s@*' at the end of a word (or followed by
+ punctuation) is automatically changed to the final form `*s*'
+ through \TeX's ligature mechanism.\note{Occasionally \TeX's notion
+ of word boundaries causes the wrong glyph to appear. There are two
+ special invisible glyphs that can be used to control this in obscure
+ circumstances. The so-called \dfn{compound word mark} (or cwm) acts
+ as a word-boundary in the middle of a word. It has code~32, so
+ `|as^^`a|' produces `*as^^`a*', for example. The \dfn{null glyph}
+ is invisible, but, because it is not a boundary character, it can be
+ used to prevent a ligature with a following word boundary. It has
+ code 64, so `|as@|' produces `*as@*'.}
+
+\section{Composite letters}
+
+ The marks that go above the letters are obtained with the
+ following characters, which go before the letter:
+\table \gr#\hfil&\quad#\hfil&\quad #\hfil& \quad *#*\hfil\cr
+\noalign{\hrule height 1pt \vskip1\jot}%
+ \omit Mark\hfil&\omit\quad Char\hfil&
+ Name&\omit\quad Name in \citeYannis\hfil\cr
+\noalign{\vskip\jot \hrule \vskip\jot}
+ <@& |<|& asper (rough, = h)& dase'ia\cr
+ >@& |>|& lenis (smooth)& yil'h\cr
+ "@& |"| (double quote)&
+ diaeresis& dialutik'a\cr
+ '@& |'| (quote)&
+ acute accent& >oxe'ia\cr
+ `@& |`|& grave accent& bare'ia\cr
+ \char126 @& |~|& circumflex& perispwm'enh\cr
+\noalign{\vskip1\jot \hrule height 1pt\smallskip}%
+\endtable
+ A breathing or diaeresis can be combined with an accent, thus
+ `|<~a|' for *<~a*, `|>'e|' for *>'e*.
+
+
+ The vowels *a*, *h* and *w* may have an iota beneath them, called
+ `subscript': *a|*, *h|*, *w|*. These are produced with a vertical
+ bar `_|_' after the letter in Greek mode: `_a|_' makes
+ *a|*, `_<a|_' makes `*<a|*', and so on.
+
+
+ As an example: `*>en >arq~h| >~hn <o l'ogos*' is generated with `_>en
+ >arq~h| >~hn <o l'ogos_'.
+
+% In old-style Greek, all vowels beginning a word require a breathing
+% -- but *u* may only have an asper (rough). In diphthongs (*ai*,
+% *ei*, *oi*, *ui*, *au*, *eu*, *hu*, *ou*, *wu*), breathings and
+% accents stand over the second letter: *a<i*, *o>u*. Double *rr*
+% used to be written *>r<r*.
+
+%\section{Apostrophe (sign of elision)}
+
+% The lenis is also used like an apostrophe, to mark the elision of
+% vowels at the end of a word when the next word starts with a vowel.
+% The Malvern-G fonts, like the Levy-derived fonts, also has a
+% separate apostrophe glyph, which can be set with `|''|' (two quote
+% characters) or `|'|' (one quote) at the end of a word. Thus you
+% have a choice of `|d>|' or `|d'|' (*d>* or *d'*).
+
+
+\section{Punctuation}
+
+ Here's a table of correspondences for punctuation:
+\table \hfil#\hfil&&\enspace\hfil#\hfil\cr
+ *.*&*,*&*;*&*:*&*!*&*?*&*''*&*((*&*))*\cr
+ |.|&|,|&|;|&|:|&|!|&|?|&|''|&|((|&|))|\cr
+\endtable
+ The apostrophe is also generated by a single single-quote at the end
+ of a word: `*d'*' can be generated by `|d'|'. There are also
+ digits, parentheses, brackets, hyphen, dashes, slash, per cent sign,
+ asterisk, plus and equals signs.
+
+\section{One-accent Greek}
+
+ The easiest way to write modern Greek is simply to use |'| for the
+ accent and otherwise to use |\begingreek|--|\endgreek| as before:
+ `*en arq'h hn o l'ogos*' is generated with `|en arq'h hn o l'ogos|'.
+
+ Malvern also has glyphs for a symmetrical accent (*\char3*) and
+ composite letters (such as *\char3 a*, *"\char3u*). The macro
+ |\monotoniko|\note{This macro is so named for compatibility with the
+ |rgr|/|mrgr| macros \citeYannis. It might usefully go in
+ |\everygreek|.} in Greek mode makes |'| an active character,
+ expanding to the symmetrical accent. Then `|En'w|' produces
+ `*En\char3w*'. In fact, the other accent characters |`| and |~| are
+ also made to substitute `*\char3*', and |<|, |>| and _|_ expand to
+ the null glyph, so that a text with all the breathings and accents
+ and be hacked into almost-correct one-accent Greek.\note{Again, for
+ compatibility with the |rgr|/|mrgr| macros. Because monosyllables
+ should not have accents at all in one-accent Greek, a complete
+ conversion from old-style to new-style requires changes to the
+ manuscript anyway, so the usefulness of this feature is debatable!}
+ For example, `_>En~w|_' becomes `*\monotoniko >En~w|*'.
+
+\section{Variant glyphs}
+
+ Sigma has a variant called lunate sigma, written *Cc*. These
+ letters can be obtained directly (produced by the character `|c|' in
+ the manuscript). So that a given text can be switched between the
+ two styles, there is also a macro |\grlunatesigma|, which redefines
+ `|s|' is as active character equivalent to `|c|'. Obviously this is
+ only useful when Greek mode is only used for plain texts, since it
+ prevents `|s|' from being used in control sequence names.
+
+ Similarly, there are two ways to write lower case phi: *f* and
+ *\char92 * (`|f|' and glyph~92). There is no difference in meaning
+ between *f* and *\char92 *; the choice of one or the other is only
+ made on aesthetic grounds. The macro |\grvarphi| redefines `|f|' as
+ an active character equivalent to `*\char92 *', in effect replacing
+ *f* with *\char92 *.
+
+ Normally these macros, if used, will go in |\everygreek|.
+
+%}}} typesetting
+\iffalse
+%{{{ background
+\section{Background}
+
+ This section is optional reading.
+
+\subsection{Development of the Levy-derived font families}
+
+ Silvio Levy's |gr| fonts \citeLevy\ used the \TeX~2 ligature system
+ to make *s* become *s@* when followed by a letter, and had glyphs
+ for almost all the composite letters.
+
+ Yannis Haralambous and Klaus Thull created a set of reduced
+ (128-glyph) fonts, for \TeX\ systems still unable to manage
+ 256-glyph fonts \citeYannis. These fonts (the |rgr| and |mrgr|
+ families) still used Levy's character programs. Because they could
+ not include glyphs for all the composite letters, many composite
+ letters had to be obtained with macros rather than ligatures. The
+ |mrgr| family is for new-style (one-accent) Greek.
+
+ Finally K.~J. Dryllerakis's Greek\TeX\ package (also called KDGreek)
+ \citeKD\ uses the Levy character programs again, but takes advantage
+ of the new ligature features of \TeX~3 to make *s@* become *s*
+ (without needing compound glyphs for every combination of *s@* with
+ a letter). The fonts are given names starting with |kd|.
+ Greek\TeX\ also includes format files for plain \TeX\ and \LaTeX,
+ transliteration programs and other useful things.
+
+\subsection{Designing Greek letters for Malvern}
+
+ My Malvern-G encoding is intended to be `ligature-compatible' with
+ Levy's and Dryllerakis's, meaning that `|<'a|||' will produce
+ `*<'a|*' in each of them, even though this is glyph~141 in
+ |grreg10|, 201 in |kdgr10| and some random number in |ma55g10|. The
+ punctuation characters have the same encoding.
+
+ Designing a sanserif Greek lower case alphabet (*alfabet*?) is tricky
+ because the lower case letters have a very cursive style, as if
+ hand-drawn with a brush by a scribe in a hurry -- which is pretty
+ much the opposite of most sanserif styles. I~made sketches (on
+ paper) of Greek letters forced into the same sorts of shapes as
+ other Malvern letters, and the results were uniformly horrid. The
+ original idea of Malvern was to make a humanist/geometric hybrid, so
+ I tried approaching it from the from the humanist end this time.
+
+%}}} background
+\fi
+%{{{ references
+
+\section{References}
+
+ Since I don't speak a word of Greek -- the only word I know is
+ *barbaroi* and I don't know how to spell it -- I have relied on
+ reading between the lines of the documentation for other systems for
+ typesetting Greek, including Hart's Rules \citeHarts.
+
+ CTAN is the Comprehensive \TeX\ Archive Network, a collection of FTP
+ sites (such as |ftp.tex.ac.uk|, under directory |tex-archive|).
+
+\beginthe{bib} \parskip=0pt \parindent=0pt
+ \the\bibliography
+ \par
+\endthe{bib}
+
+%}}} postamble
+
+%{{{ samples
+
+\section{Examples of text in Malvern 55 and 56}
+
+\iffalse
+ This quotation is used by Haralambous and Thull \citeYannis\ as an
+ example of the old-style accent-and-breathing system:
+%{{{ Popess Johanna
+
+\begin twocolgr
+ >En~w| <esp'eran tin`a >exantl'hsas t`a murol'ogi'a tou
+ >ekoim~ato <o Froum'entios >ep`i t~hs >'ammou t~hs paral'ias,
+ katab`as >ex o>uran~wn <o >ap'ostolos >eke~inos t~wn Sax'onwn
+ >'hnoixe di`a maqa'iras t`a st'hjh to~u koimwm'enou,
+ e>is'hgage to`us <iero`us dakt'ulous tou e>is t`hn >op`hn kai
+ >exag`wn t`hn kard`ian >eb'ujisen a>ut'hn e>is l'akkon pl'hrh
+ <'udatos, <'oper <hg'iasen prohgoum'enws. <H fl'egousa
+ >eke'inh kard'ia >'efrizen e>is t`o <'udwr <ws smap`is >ent`os
+ to~u thgan'iou, >afo~u d`e >ekr'uwsen, >'ejese p'alin a>ut`hn
+ <o <'agios e<is t`on t'opon ths ka`i kle'isas t`hn plhg`hn
+ >ep'estreyen e>is t`on >idik'on tou.
+
+ >'Etuq'e pote, >anagn~wst'a mou, n`a >apokoimhj~h|s m`e
+ >anup'oforon b~hqa, koim'wmenos n`a <idr'wsh|s ka`i >exupn'hsas
+ n`a e<urej~h|s >iatreum'enos? >Agn~wn <'oti e>~isai
+ kal`a >ano'igeis mhqanik~ws t`o st'oma, <'ina plhr'wsh|s e>is
+ t`on >epikat'araton b~hqa t`on sun'hjh f'oron. >All`a
+ p'oshn a>isj'anesai qar'an, m`h e<ur'iskwn e>is t`on l'arugga
+ t`o >oqlhp`on jhr'ion! O<'utw <'ama >'hnoixe ka`i <o
+ Froum'entios to`us >ofjalmo'us, <htoim'asjn n`a prosf'erh|
+ e>is t`hn >aq'ariston >Iw'annan t`hn sun'hjh dakr'uwn
+ spond'hn, >all`a par`a p~asan prosdok'ian o<i >ofjalmo'i
+ tou e<ur'ejhsan xhro`i ka'i n`a progeumat'ish| m~allon >`h
+ n`a kla'ush| >h|sj'aneto >'orexin met`a polu'hmeron nhste'ian
+ <o kal`os Benedekt~inos.
+\end twocolgr
+\rightline{\csc{Emmanouil Ro\"{\i}dis}, `The Popess Johanna (1896)'}
+\vskip 0pt plus \baselineskip
+
+%}}} Popess Johanna
+\fi
+
+ The following paragraph is set in 11-point Malvern~55 (11-point
+ Malvern has comprable x-height to 12-point Computer Modern). This
+ quotation is used as one of the examples in Levy's article
+ \citeLevy:
+\twocolgr
+ >All' >ako'usontai, >enper e>~u dok~h|s l'egein. t'ode d'e sou
+ >ene'ohsa <'ama l'egontos, ka`i pr`os >emaut`on skop~w; e>i <'oti
+ m'alist'a me E>uj'ufrwn did'axeien, <ws o<i jeo`i <'apantes t`on
+ toio~uton j'anaton <hgo~untai >'adikon e>~inai, t'i m~allon >eg`w
+ mem'ajhka par' E>uj'ufronos, t'i pot' >est`in t`o <'osi'on te ka`i
+ t`o >an'osion? jeomis`es m`en g`ar to~uto t`o >'epgon, <ws
+ >'eoiken, e>'in >'an; >all`a g`ar o>u to'utw| >ef'anh >'arti
+ <wrism'ena t`o <'osion ka`i m'h; t`o g`ar jeomis`es >`on ka`i
+ jeofil`es >ef'anh. <wste to'utou m`en >af'ihm'i se, >~w E>uj'ufron;
+ e>i bo'ulei, p'antes a>ut`o <hge'isjwn jeo`i >'adikon ka`i p'antes
+ miso'untwn. >all' >~ara to~uto n~un >epanorj'wmeja >en t~w| l'ogw|,
+ <ws <`o m`en p'antes o<i jeo`i mis~wsin, >an'osi'on >estin, <`o d'
+ >`an fil~wsin, <`osion; <`o d' >`an o<i m`en fil~wsin, o<i d`e
+ mis~wsin, o>ud'etera >`h amf'otera? >~ar' o<'utw bo'ulei <hm~in
+ <wr'isjai n~un per`i to~u <os'iou ka`i to~u >anos'iou?
+\endtwocolgr
+ \rightline{Plato, `Euthyphro'}
+\vskip 1\medskipamount plus \baselineskip
+
+
+ This quotation (similarly stolen) is in Malvern~56 and has
+ |\grvarphi| and |\grlunatesigma| in effect:
+
+\twocolgr \gri \grvarphi \grlunatesigma
+ T`h stigm`h to'uth ni'wjw p'oso bar'u ''nai t`o must'hrio t~hs
+ xomol'oghshs. <Ws t'wra, kane`is d`en x'erei p~ws p'erasa t`a du`o
+ qr'onia mou st`o <'Agion >'Oros. O<i f'iloi mou jarro~un p`ws p~hga
+ n`a d~w buzantin`a kon'ismata >`h >ap`o mustikop'ajeia n`a z'hsw
+ mi`a perasm'enh >epoq'h. Ka`i t'wra, n'a, ntr'epomai n`a mil'hsw.
+
+ P~ws n`a t`o p~w? Jumo~umai <'ena >anoixi'atiko deilin'o, po`u
+ kat'ebaina t`on Ta"'ugeto, mi`a xafnik`h j'uella m`e k'uklwse kont`a
+ sto'us Pentaulo'us. T'oso fober`os >anemos'ifounas, po`u >'epesa
+ katag~hs gi`a n`a m`hn gkremist~w. O<i >astrap`es m' >'exwsan
+ <olo~uje ki >'ekleisa t`a m'atia m`hn tuflwj~w, ka`i kat'aqama,
+ p'istoma, per'imena. <'Olo t`o pan'uyhlo boun`o >'etreme, ka`i du`o
+ >'elata d'ipla mou tsak'isthkan >ap' t`h m'esh ka`i br'onthxan
+ q'amou. >'Eniwja t`o jei'afi to~u kerauno~u st`on >a'era, ka`i
+ xafnik`a x'espase <h mp'ora, >'epesen <o >'anemos, ka`i qontr'es,
+ jerm'es st'ales broq`h qt'uphsan t`a dentr`a ka`i t`o q~wma. T`o
+ jum'ari, <h jro'umpa, t`o fask'omhlo, t`o flisko'uni, qtuphm'ena
+ >ap' t`o ner'o, t'inaxan t`is murwdi'es tous ki <'olh <h g~hs
+ m'urise.
+\endtwocolgr
+\rightline{\csc{Kazantzakis}, `Symposium'}
+\vskip 0pt plus \baselineskip
+
+%}}} samples
+\iffalse
+%{{{ table
+
+*\ntable*
+\smallskip \noindent
+ This is a working encoding, and will likely be different in future
+ versions.
+%}}} table
+\fi
+%{{{ 24-pt sample
+
+\bigbreak
+\moveleft\leftmargin \vbox{ \hsize=\bodywd
+\hrule height 1pt \bigskip
+\begingreek \biggr\baselineskip=30pt
+\centerline{((ABGDEZHJIKLMNXOPRSCTUFVQYW))}
+\centerline{](abgdezhjiklmnxoprss^^`ctuf\char92 vqyw)[}
+\centerline{=0123456789---\%\char42 +/--''!,:;?.-}
+\centerline{\char3 '@ `@ ~@ <@ <'@ <`@ <~@ >@ >'@ >`@ >~@ "@ "'@ "`@ "~@
+ "\char3 @}
+\endgreek
+\medskip\hrule height 1pt
+}
+%}}} 24-pt sample
+\bye
+%}}} Malvern Greek manual
+
+% Local variables:
+% fill-prefix: "\t"
+% fill-column: 76
+% fold-folded-p: t
+% End:
diff --git a/macros/plain/contrib/pdcmac/makefile.in b/macros/plain/contrib/pdcmac/makefile.in
new file mode 100644
index 0000000000..35bdae1907
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/makefile.in
@@ -0,0 +1,160 @@
+# Makefile for the PDCMAC package
+# Template for configure
+
+package = @package@
+
+# directory source code is in:
+srcdir = @srcdir@
+
+# directory for TeX macro files:
+texmf = @texmf@
+texdir = @texdir@
+docdir = @docdir@
+
+# End of configuration section
+########################################################################
+
+TEX = tex </dev/null
+DVIPS = dvips
+FIG2EPSF = $(srcdir)/fig2epsf
+ETAGS = $(srcdir)/dtxtags
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKDIR = $(srcdir)/pmkdir $(MKDIRFLAGS)
+MKDIRFLAGS = --mode=755
+
+code_files = pdccode.tex pdccode2.tex
+
+# The macro files are divided according to whether they have their own
+# DTX file, or come from pdcmisc.dtx or pdcsty.dtx
+self_files = pdcfmt2.dtx pdcfsel.dtx magrmac.dtx pdcoput5.dtx \
+ pdcadobe.dtx pdcl1maa.dtx maamac.dtx
+misc_files = pdcmigr.tex pdcimth.tex pdchyex.tex pdccmsub.tex
+sty_files = ma55lft.tex ma55doc.tex pdccmlft.tex pdccmdoc.tex\
+ pdcpsdoc.tex pdcpslft.tex pdcdoc.def pdclft.def
+macro_files = $(self_files:.dtx=.tex) $(misc_files) $(sty_files)
+
+misc_dtx = pdcmisc.dtx
+sty_dtx = pdcsty.dtx
+dtxfiles = $(self_files) $(sty_dtx) $(misc_dtx) pdccode.dtx
+dvifiles = $(dtxfiles:.dtx=.dvi) pdcguide.dvi
+
+figures = oput01.eps oput02.eps
+documents = pdcguide.tex magrman.tex copying.tex pdcmacvn.tex
+config_files = makefile.in configure
+miscscript = fig2epsf pmkdir pinstall dtxtags
+miscdoc = 00readme.txt install.txt copying.txt version.txt
+
+distfiles = $(miscdoc) pdcguide.dvi pdcmondo.tex \
+ $(code_files) $(dtxfiles) $(documents) $(config_files) \
+ $(figures) $(figures:.eps=.fig) \
+ $(miscscript) $(miscscript:=.1)
+
+########################################################################
+# Standard targets
+
+all: pdcguide.dvi $(macro_files)
+
+# Note. This target assumes either I can use GNU "install", or
+# an "install" compatible with it, or the "pinstall" shellscript supplied.
+install: all pdccode.dvi
+ test -d $(texdir) || $(MKDIR) $(texdir)
+ $(INSTALL_DATA) $(macro_files) $(texdir)
+ -test -d $(docdir) || $(MKDIR) $(docdir)
+ -$(INSTALL_DATA) $(dvifiles) $(figures) $(miscdoc) $(docdir)
+ -test -r news.txt && $(INSTALL_DATA) news.txt $(docdir)
+
+uninstall:
+ cd $(texdir); rm -f $(macro_files)
+ cd $(docdir) && rm -f $(dvifiles) $(figures) $(miscdoc)
+
+mostlyclean:
+ rm -f *.log *.ilg *.toc *.bak
+clean: mostlyclean
+ rm -f *.dvi *.aux *.idx $(macro_files) .misc.flag .sty.flag
+distclean: clean
+ rm -f makefile config.status TAGS
+realclean: distclean
+ rm -f *.ind $(figures) version.txt
+
+dist: $(distfiles)
+ sed -n '/pdcmacv/s/.*[^0-9.]\([0-9.]*\)[^0-9.].*$$/$(package)-\1/p' \
+ pdcmacvn.tex > .fn
+ rm -rf `cat .fn`
+ mkdir `cat .fn`
+ cp -p $(distfiles) `cat .fn`
+ -cp -p ChangeLog `cat .fn`/changes.txt
+ -cp -p news.txt `cat .fn`/news.txt
+ cd `cat .fn`; ls -Rl > contents.txt
+ tar -cf `cat .fn`.tar `cat .fn` && gzip -v9f `cat .fn`.tar
+ cd `cat .fn`; zip -9qrl ../`cat ../.fn`.zip *
+ rm -rf `cat .fn` .fn
+
+version.txt: $(dtxfiles) $(miscscript) pdcmacvn.tex
+ sed -e 's/\\def\\pdcmacversion{\([0-9]*\.[0-9]*\)}/* $(package) release \1 */' \
+ -e 's/\\def\\pdcmacversion{\([0-9]*\.[0-9]*\)\.\([0-9]*\)}/* $(package) release \1, patch level \2 */' \
+ pdcmacvn.tex > version.txt
+ date '+Version ID list generated %Y-%m-%d' >> version.txt
+ echo >> version.txt
+ ( grep -h 'rcs\$$Id' $(dtxfiles) | \
+ sed -e 's/^.*: \(.*\) \$$.*$$/\1/' -e 's/,v/ =/' | sort; echo; \
+ grep version= $(miscscript) configure | \
+ sed -e 's/:version=/ = /' -e 's/"//g' | sort ) | \
+ align_equals >> version.txt
+
+tagfiles = $(dtxfiles)
+TAGS: $(tagfiles) $(srcdir)/dtxtags
+ $(ETAGS) $(ETAGSFLAGS) $(tagfiles)
+
+########################################################################
+# Individual targets
+
+$(self_files) $(miscfiles): pdccode.tex
+$(sty_files): pdccode2.tex
+
+pdcguide.dvi magrman.dvi: $(macro_files)
+pdcguide.dvi: copying.tex pdcmacvn.tex
+
+pdcoput5.dvi pdcoput5.tex: $(figures)
+
+$(misc_files): .misc.flag
+.misc.flag: $(misc_dtx)
+ $(TEX) $(misc_dtx) && touch .misc.flag
+
+$(sty_files): .sty.flag
+.sty.flag: $(sty_dtx)
+ $(TEX) $(sty_dtx) && touch .sty.flag
+
+pdccode.dvi pdccode.tex: pdccode.dtx
+ $(TEX) pdccode.dtx
+ grep endinput tmp.tex && mv tmp.tex pdccode.tex
+
+pdcguide.ps: pdcguide.tex copying.tex $(macro_files)
+ echo '\let\usepsfonts! \input pdcguide' > tmp.tex
+ $(TEX) tmp
+ rm -f tmp.tex
+ $(DVIPS) $(DVIPSFLAGS) -o $@ tmp
+
+# A scratch file for doing tests:
+tryit.dvi: tryit.tex ma55lft.tex pdcl1maa.tex
+ $(TEX) tryit
+
+
+# rules for the configuration itself
+makefile: makefile.in config.status
+ sh config.status makefile
+config.status: $(srcdir)/configure
+ sh config.status --recheck --nocreate
+
+########################################################################
+# Implicit rules
+
+.SUFFIXES: .dtx .tex .dvi .ps .eps .fig
+.dtx.tex:
+ $(TEX) $<
+.tex.dvi:
+ $(TEX) $<
+.dvi.ps:
+ $(DVIPS) $(DVIPSFLAGS) $< -o $@
+.fig.eps:
+ $(FIG2EPSF) $< > $@
diff --git a/macros/plain/contrib/pdcmac/news.txt b/macros/plain/contrib/pdcmac/news.txt
new file mode 100644
index 0000000000..e6963fc96a
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/news.txt
@@ -0,0 +1,14 @@
+news.txt -*-text-*- Time-stamp: <pdc 1995-04-06>
+
+
+Changes to the PDCMAC package since Release 1.0
+
+* Support for Emacs tags added
+
+The shellscript "dtxtags" generates a tags file in the style of etags(1).
+
+* Bug fixes
+
+** Nested numbered lists will work beyond (e)
+** partial pages don't have spurious space added
+** Maamac.tex can be used on its own (it lacked a definition of \toksa)
diff --git a/macros/plain/contrib/pdcmac/oput01.eps b/macros/plain/contrib/pdcmac/oput01.eps
new file mode 100644
index 0000000000..c789902881
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/oput01.eps
@@ -0,0 +1,423 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: oput01.fig
+%%Creator: fig2dev
+%%CreationDate: Thu Apr 6 12:42:28 1995
+%%For: pdc@booth35.ecs (Damian Cugley,MC86,S.E.H.,N)
+%%BoundingBox: 0 0 424 499
+%%Pages: 1
+%%EndComments
+/mtrx matrix def
+/l {lineto} bind def
+/m {moveto} bind def
+/s {stroke} bind def
+/n {newpath} bind def
+/gs {gsave} bind def
+/gr {grestore} bind def
+/clp {closepath} bind def
+/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+4 -2 roll mul setrgbcolor} bind def
+/col0 {0 0 0 setrgbcolor} bind def
+/col1 {0 0 1 setrgbcolor} bind def
+/col2 {0 1 0 setrgbcolor} bind def
+/col3 {0 1 1 setrgbcolor} bind def
+/col4 {1 0 0 setrgbcolor} bind def
+/col5 {1 0 1 setrgbcolor} bind def
+/col6 {1 1 0 setrgbcolor} bind def
+/col7 {1 1 1 setrgbcolor} bind def
+%%EndProlog
+
+%%Page: 1 1
+
+0 setlinecap 0 setlinejoin
+-8 27 translate
+0.0 499.0 translate 0.900 -0.900 scale
+0.500 setlinewidth
+% Polyline
+n 89 329 m 224 329 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 329 m 224 317 l 89 317 l 89 329 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 299 m 224 299 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 299 m 224 287 l 89 287 l 89 299 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 284 m 224 284 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 284 m 224 272 l 89 272 l 89 284 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 269 m 224 269 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 269 m 224 257 l 89 257 l 89 269 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 254 m 224 254 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 254 m 224 242 l 89 242 l 89 254 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 239 m 224 239 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 239 m 224 227 l 89 227 l 89 239 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 224 m 224 224 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 224 m 224 212 l 89 212 l 89 224 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 209 m 224 209 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 209 m 224 197 l 89 197 l 89 209 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 194 m 224 194 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 194 m 224 182 l 89 182 l 89 194 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 179 m 224 179 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 179 m 224 167 l 89 167 l 89 179 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 164 m 224 164 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 164 m 224 152 l 89 152 l 89 164 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 149 m 224 149 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 149 m 224 137 l 89 137 l 89 149 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 134 m 224 134 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 134 m 224 122 l 89 122 l 89 134 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 119 m 224 119 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 119 m 224 107 l 89 107 l 89 119 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 104 m 224 104 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 104 m 224 92 l 89 92 l 89 104 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 89 m 224 89 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 89 m 224 77 l 89 77 l 89 89 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 149 m 374 149 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 149 m 374 137 l 239 137 l 239 149 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 134 m 374 134 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 134 m 374 122 l 239 122 l 239 134 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 119 m 374 119 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 119 m 374 107 l 239 107 l 239 119 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 104 m 374 104 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 104 m 374 92 l 239 92 l 239 104 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 89 m 374 89 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 89 m 374 77 l 239 77 l 239 89 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 224 m 374 224 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 224 m 374 212 l 239 212 l 239 224 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 209 m 374 209 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 209 m 374 197 l 239 197 l 239 209 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 194 m 374 194 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 194 m 374 182 l 239 182 l 239 194 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 179 m 374 179 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 179 m 374 167 l 239 167 l 239 179 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 164 m 374 164 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 164 m 374 152 l 239 152 l 239 164 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 299 m 374 299 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 299 m 374 287 l 239 287 l 239 299 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 284 m 374 284 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 284 m 374 272 l 239 272 l 239 284 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 269 m 374 269 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 269 m 374 257 l 239 257 l 239 269 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 254 m 374 254 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 254 m 374 242 l 239 242 l 239 254 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 239 m 374 239 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 239 m 374 227 l 239 227 l 239 239 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 374 m 374 374 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 374 m 374 362 l 239 362 l 239 374 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 359 m 374 359 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 359 m 374 347 l 239 347 l 239 359 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 344 m 374 344 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 344 m 374 332 l 239 332 l 239 344 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 329 m 374 329 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 329 m 374 317 l 239 317 l 239 329 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 314 m 374 314 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 314 m 374 302 l 239 302 l 239 314 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 449 m 374 449 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 449 m 374 437 l 239 437 l 239 449 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 434 m 374 434 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 434 m 374 422 l 239 422 l 239 434 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 419 m 374 419 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 419 m 374 407 l 239 407 l 239 419 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 404 m 374 404 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 404 m 374 392 l 239 392 l 239 404 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 389 m 374 389 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 389 m 374 377 l 239 377 l 239 389 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 494 m 374 494 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 494 m 374 482 l 239 482 l 239 494 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 479 m 374 479 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 479 m 374 467 l 239 467 l 239 479 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 464 m 374 464 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 464 m 374 452 l 239 452 l 239 464 l
+ clp gs 0.85 setgray fill gr
+% Polyline
+n 449 59 m 449 47 l 89 47 l 89 59 l
+ clp gs 0.80 setgray fill gr
+% Polyline
+n 449 524 m 449 512 l 89 512 l 89 524 l
+ clp gs 0.80 setgray fill gr
+0.500 setlinewidth
+n 254 344 m 254 344 l gs s gr
+ [4.000000] 0 setdash
+% Polyline
+n 449 494 m 449 77 l 389 77 l 389 494 l
+ clp gs s gr
+ [] 0 setdash
+ [4.000000] 0 setdash
+% Polyline
+n 299 494 m 299 77 l 239 77 l 239 494 l
+ clp gs s gr
+ [] 0 setdash
+ [4.000000] 0 setdash
+% Polyline
+n 149 494 m 149 77 l 89 77 l 89 494 l
+ clp gs s gr
+ [] 0 setdash
+ [4.000000] 0 setdash
+% Polyline
+n 374 494 m 374 77 l 314 77 l 314 494 l
+ clp gs s gr
+ [] 0 setdash
+ [4.000000] 0 setdash
+% Polyline
+n 224 494 m 224 77 l 164 77 l 164 494 l
+ clp gs s gr
+ [] 0 setdash
+% Polyline
+n 308 569 m 317 581 l 320 581 l gs s gr
+1.000 setlinewidth
+% Polyline
+n 479 554 m 479 29 l 59 29 l 59 554 l
+ clp gs s gr
+% Polyline
+n 89 308 m 224 308 l gs s gr
+0.500 setlinewidth
+% Polyline
+n 89 59 m 449 59 l gs s gr
+% Polyline
+n 29 344 m 83 308 l gs s gr
+n 75.234 310.774 m 83.000 308.000 l 77.453 314.102 l gs 2 setlinejoin s gr
+% Polyline
+n 269 563 m 269 569 l 344 569 l 344 563 l gs s gr
+% Polyline
+n 89 524 m 449 524 l gs s gr
+/Times-Roman findfont 12.00 scalefont setfont
+113 326 m
+gs 1 -1 scale (caption) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+146 215 m
+gs 1 -1 scale (column 0) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+311 218 m
+gs 1 -1 scale (column 1) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+275 53 m
+gs 1 -1 scale (headline) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+359 515 m
+gs 1 -1 scale (footline) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+323 584 m
+gs 1 -1 scale (grid cell) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+8 371 m
+gs 1 -1 scale (separator) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+8 359 m
+gs 1 -1 scale (caption) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+104 419 m
+gs 1 -1 scale (illustration) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+419 404 m
+gs 1 -1 scale 90.0 rotate (illustration) show gr
+showpage
diff --git a/macros/plain/contrib/pdcmac/oput01.fig b/macros/plain/contrib/pdcmac/oput01.fig
new file mode 100644
index 0000000000..0f265533c4
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/oput01.fig
@@ -0,0 +1,323 @@
+#FIG 2.1
+80 2
+6 89 317 224 329
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 329 224 329 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 329 224 317 89 317 89 329 224 329 9999 9999
+-6
+6 89 227 224 299
+6 89 287 224 299
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 299 224 299 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 299 224 287 89 287 89 299 224 299 9999 9999
+-6
+6 89 272 224 284
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 284 224 284 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 284 224 272 89 272 89 284 224 284 9999 9999
+-6
+6 89 257 224 269
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 269 224 269 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 269 224 257 89 257 89 269 224 269 9999 9999
+-6
+6 89 242 224 254
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 254 224 254 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 254 224 242 89 242 89 254 224 254 9999 9999
+-6
+6 89 227 224 239
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 239 224 239 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 239 224 227 89 227 89 239 224 239 9999 9999
+-6
+-6
+6 89 152 224 224
+6 89 212 224 224
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 224 224 224 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 224 224 212 89 212 89 224 224 224 9999 9999
+-6
+6 89 197 224 209
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 209 224 209 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 209 224 197 89 197 89 209 224 209 9999 9999
+-6
+6 89 182 224 194
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 194 224 194 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 194 224 182 89 182 89 194 224 194 9999 9999
+-6
+6 89 167 224 179
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 179 224 179 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 179 224 167 89 167 89 179 224 179 9999 9999
+-6
+6 89 152 224 164
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 164 224 164 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 164 224 152 89 152 89 164 224 164 9999 9999
+-6
+-6
+6 89 77 224 149
+6 89 137 224 149
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 149 224 149 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 149 224 137 89 137 89 149 224 149 9999 9999
+-6
+6 89 122 224 134
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 134 224 134 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 134 224 122 89 122 89 134 224 134 9999 9999
+-6
+6 89 107 224 119
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 119 224 119 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 119 224 107 89 107 89 119 224 119 9999 9999
+-6
+6 89 92 224 104
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 104 224 104 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 104 224 92 89 92 89 104 224 104 9999 9999
+-6
+6 89 77 224 89
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 89 224 89 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 89 224 77 89 77 89 89 224 89 9999 9999
+-6
+-6
+6 239 77 374 149
+6 239 137 374 149
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 149 374 149 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 149 374 137 239 137 239 149 374 149 9999 9999
+-6
+6 239 122 374 134
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 134 374 134 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 134 374 122 239 122 239 134 374 134 9999 9999
+-6
+6 239 107 374 119
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 119 374 119 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 119 374 107 239 107 239 119 374 119 9999 9999
+-6
+6 239 92 374 104
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 104 374 104 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 104 374 92 239 92 239 104 374 104 9999 9999
+-6
+6 239 77 374 89
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 89 374 89 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 89 374 77 239 77 239 89 374 89 9999 9999
+-6
+-6
+6 239 152 374 224
+6 239 212 374 224
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 224 374 224 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 224 374 212 239 212 239 224 374 224 9999 9999
+-6
+6 239 197 374 209
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 209 374 209 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 209 374 197 239 197 239 209 374 209 9999 9999
+-6
+6 239 182 374 194
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 194 374 194 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 194 374 182 239 182 239 194 374 194 9999 9999
+-6
+6 239 167 374 179
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 179 374 179 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 179 374 167 239 167 239 179 374 179 9999 9999
+-6
+6 239 152 374 164
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 164 374 164 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 164 374 152 239 152 239 164 374 164 9999 9999
+-6
+-6
+6 239 227 374 299
+6 239 287 374 299
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 299 374 299 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 299 374 287 239 287 239 299 374 299 9999 9999
+-6
+6 239 272 374 284
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 284 374 284 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 284 374 272 239 272 239 284 374 284 9999 9999
+-6
+6 239 257 374 269
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 269 374 269 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 269 374 257 239 257 239 269 374 269 9999 9999
+-6
+6 239 242 374 254
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 254 374 254 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 254 374 242 239 242 239 254 374 254 9999 9999
+-6
+6 239 227 374 239
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 239 374 239 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 239 374 227 239 227 239 239 374 239 9999 9999
+-6
+-6
+6 239 302 374 374
+6 239 362 374 374
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 374 374 374 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 374 374 362 239 362 239 374 374 374 9999 9999
+-6
+6 239 347 374 359
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 359 374 359 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 359 374 347 239 347 239 359 374 359 9999 9999
+-6
+6 239 332 374 344
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 344 374 344 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 344 374 332 239 332 239 344 374 344 9999 9999
+-6
+6 239 317 374 329
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 329 374 329 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 329 374 317 239 317 239 329 374 329 9999 9999
+-6
+6 239 302 374 314
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 314 374 314 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 314 374 302 239 302 239 314 374 314 9999 9999
+-6
+-6
+6 239 377 374 449
+6 239 437 374 449
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 449 374 449 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 449 374 437 239 437 239 449 374 449 9999 9999
+-6
+6 239 422 374 434
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 434 374 434 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 434 374 422 239 422 239 434 374 434 9999 9999
+-6
+6 239 407 374 419
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 419 374 419 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 419 374 407 239 407 239 419 374 419 9999 9999
+-6
+6 239 392 374 404
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 404 374 404 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 404 374 392 239 392 239 404 374 404 9999 9999
+-6
+6 239 377 374 389
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 389 374 389 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 389 374 377 239 377 239 389 374 389 9999 9999
+-6
+-6
+6 239 482 374 494
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 494 374 494 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 494 374 482 239 482 239 494 374 494 9999 9999
+-6
+6 239 467 374 479
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 479 374 479 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 479 374 467 239 467 239 479 374 479 9999 9999
+-6
+6 239 452 374 464
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 464 374 464 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 464 374 452 239 452 239 464 374 464 9999 9999
+-6
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 89 59 449 59 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 89 524 449 524 9999 9999
+2 2 0 2 -1 0 0 0 0.000 0 0 0
+ 479 554 479 29 59 29 59 554 479 554 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 254 344 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 89 308 224 308 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 269 563 269 569 344 569 344 563 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 308 569 317 581 320 581 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 29 344 83 308 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 224 494 224 77 164 77 164 494 224 494 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 299 494 299 77 239 77 239 494 299 494 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 374 494 374 77 314 77 314 494 374 494 9999 9999
+2 2 0 0 -1 10 0 5 0.000 0 0 0
+ 449 59 449 47 89 47 89 59 449 59 9999 9999
+2 2 0 0 -1 10 0 5 0.000 0 0 0
+ 449 524 449 512 89 512 89 524 449 524 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 449 494 449 77 389 77 389 494 449 494 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 149 494 149 77 89 77 89 494 149 494 9999 9999
+4 0 0 12 0 -1 0 0.00000 4 15 36 113 326 caption
+4 0 0 12 0 -1 0 0.00000 4 15 44 146 215 column 0
+4 0 0 12 0 -1 0 0.00000 4 15 44 311 218 column 1
+4 0 0 12 0 -1 0 0.00000 4 15 42 275 53 headline
+4 0 0 12 0 -1 0 0.00000 4 15 37 359 515 footline
+4 0 0 12 0 -1 0 0.00000 4 15 39 323 584 grid cell
+4 0 0 12 0 -1 0 0.00000 4 15 48 8 371 separator
+4 0 0 12 0 -1 0 0.00000 4 15 36 8 359 caption
+4 0 0 12 0 -1 0 0.00000 4 15 54 104 419 illustration
+4 0 0 12 0 -1 0 1.57080 4 15 54 419 404 illustration
diff --git a/macros/plain/contrib/pdcmac/oput02.eps b/macros/plain/contrib/pdcmac/oput02.eps
new file mode 100644
index 0000000000..0de9a38e5e
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/oput02.eps
@@ -0,0 +1,404 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: oput02.fig
+%%Creator: fig2dev
+%%CreationDate: Thu Apr 6 12:42:30 1995
+%%For: pdc@booth35.ecs (Damian Cugley,MC86,S.E.H.,N)
+%%BoundingBox: 0 0 443 499
+%%Pages: 1
+%%EndComments
+/mtrx matrix def
+/l {lineto} bind def
+/m {moveto} bind def
+/s {stroke} bind def
+/n {newpath} bind def
+/gs {gsave} bind def
+/gr {grestore} bind def
+/clp {closepath} bind def
+/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+4 -2 roll mul setrgbcolor} bind def
+/col0 {0 0 0 setrgbcolor} bind def
+/col1 {0 0 1 setrgbcolor} bind def
+/col2 {0 1 0 setrgbcolor} bind def
+/col3 {0 1 1 setrgbcolor} bind def
+/col4 {1 0 0 setrgbcolor} bind def
+/col5 {1 0 1 setrgbcolor} bind def
+/col6 {1 1 0 setrgbcolor} bind def
+/col7 {1 1 1 setrgbcolor} bind def
+%%EndProlog
+
+%%Page: 1 1
+
+0 setlinecap 0 setlinejoin
+-54 27 translate
+0.0 499.0 translate 0.900 -0.900 scale
+0.000 setlinewidth
+% Polyline
+n 254 329 m 254 317 l 179 317 l 179 329 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 329 m 254 329 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 344 m 254 332 l 179 332 l 179 344 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 344 m 254 344 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 299 m 254 287 l 179 287 l 179 299 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 299 m 254 299 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 284 m 254 272 l 179 272 l 179 284 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 284 m 254 284 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 269 m 254 257 l 179 257 l 179 269 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 269 m 254 269 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 254 m 254 242 l 179 242 l 179 254 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 254 m 254 254 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 239 m 254 227 l 179 227 l 179 239 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 239 m 254 239 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 224 m 254 212 l 179 212 l 179 224 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 224 m 254 224 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 209 m 254 197 l 179 197 l 179 209 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 209 m 254 209 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 194 m 254 182 l 179 182 l 179 194 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 194 m 254 194 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 179 m 254 167 l 179 167 l 179 179 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 179 m 254 179 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 359 m 344 347 l 269 347 l 269 359 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 359 m 344 359 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 329 m 344 317 l 269 317 l 269 329 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 329 m 344 329 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 344 m 344 332 l 269 332 l 269 344 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 344 m 344 344 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 299 m 344 287 l 269 287 l 269 299 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 299 m 344 299 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 284 m 344 272 l 269 272 l 269 284 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 284 m 344 284 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 269 m 344 257 l 269 257 l 269 269 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 269 m 344 269 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 254 m 344 242 l 269 242 l 269 254 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 254 m 344 254 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 239 m 344 227 l 269 227 l 269 239 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 239 m 344 239 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 224 m 344 212 l 269 212 l 269 224 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 224 m 344 224 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 209 m 344 197 l 269 197 l 269 209 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 209 m 344 209 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 194 m 344 182 l 269 182 l 269 194 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 194 m 344 194 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 179 m 344 167 l 269 167 l 269 179 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 179 m 344 179 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 374 m 344 362 l 269 362 l 269 374 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 374 m 344 374 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 389 m 344 377 l 269 377 l 269 389 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 389 m 344 389 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 314 m 344 302 l 269 302 l 269 314 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 314 m 344 314 l gs s gr
+% Polyline
+n 254 389 m 254 164 l 179 164 l 179 389 l
+ clp gs s gr
+ [4.000000] 0 setdash
+% Polyline
+n 164 389 m 164 164 l 89 164 l 89 389 l
+ clp gs s gr
+ [] 0 setdash
+% Polyline
+n 344 389 m 344 164 l 269 164 l 269 389 l
+ clp gs s gr
+ [4.000000] 0 setdash
+% Polyline
+n 434 164 m 434 74 l 89 74 l 89 164 l
+ clp gs s gr
+ [] 0 setdash
+0.000 setlinewidth
+% Polyline
+n 434 59 m 434 47 l 89 47 l 89 59 l
+ clp gs 0.80 setgray fill gr
+% Polyline
+n 434 524 m 434 512 l 89 512 l 89 524 l
+ clp gs 0.80 setgray fill gr
+0.500 setlinewidth
+ [4.000000] 0 setdash
+% Polyline
+n 434 389 m 434 164 l 359 164 l 359 389 l
+ clp gs s gr
+ [] 0 setdash
+n 97.000 571.000 m 89.000 569.000 l 97.000 567.000 l gs 2 setlinejoin s gr
+% Polyline
+n 89 569 m 434 569 l gs s gr
+n 426.000 567.000 m 434.000 569.000 l 426.000 571.000 l gs 2 setlinejoin s gr
+n 522.000 502.000 m 524.000 494.000 l 526.000 502.000 l gs 2 setlinejoin s gr
+% Polyline
+n 524 494 m 524 554 l gs s gr
+n 526.000 546.000 m 524.000 554.000 l 522.000 546.000 l gs 2 setlinejoin s gr
+n 537.000 37.000 m 539.000 29.000 l 541.000 37.000 l gs 2 setlinejoin s gr
+% Polyline
+n 539 29 m 539 554 l gs s gr
+n 541.000 546.000 m 539.000 554.000 l 537.000 546.000 l gs 2 setlinejoin s gr
+n 67.000 586.000 m 59.000 584.000 l 67.000 582.000 l gs 2 setlinejoin s gr
+% Polyline
+n 59 584 m 479 584 l gs s gr
+n 471.000 582.000 m 479.000 584.000 l 471.000 586.000 l gs 2 setlinejoin s gr
+n 522.000 37.000 m 524.000 29.000 l 526.000 37.000 l gs 2 setlinejoin s gr
+% Polyline
+n 524 29 m 524 74 l gs s gr
+n 526.000 66.000 m 524.000 74.000 l 522.000 66.000 l gs 2 setlinejoin s gr
+ [4.000000] 0 setdash
+% Polyline
+n 425 89 m 515 89 l gs s gr
+ [] 0 setdash
+% Polyline
+n 449 59 m 449 74 l gs s gr
+n 451.000 66.000 m 449.000 74.000 l 447.000 66.000 l gs 2 setlinejoin s gr
+% Polyline
+n 449 104 m 449 89 l gs s gr
+n 447.000 97.000 m 449.000 89.000 l 451.000 97.000 l gs 2 setlinejoin s gr
+% Polyline
+n 329 158 m 344 158 l gs s gr
+n 336.000 156.000 m 344.000 158.000 l 336.000 160.000 l gs 2 setlinejoin s gr
+% Polyline
+n 374 158 m 359 158 l gs s gr
+n 367.000 160.000 m 359.000 158.000 l 367.000 156.000 l gs 2 setlinejoin s gr
+n 507.000 67.000 m 509.000 59.000 l 511.000 67.000 l gs 2 setlinejoin s gr
+% Polyline
+n 509 59 m 509 89 l gs s gr
+n 511.000 81.000 m 509.000 89.000 l 507.000 81.000 l gs 2 setlinejoin s gr
+n 492.000 502.000 m 494.000 494.000 l 496.000 502.000 l gs 2 setlinejoin s gr
+% Polyline
+n 494 494 m 494 527 l gs s gr
+n 496.000 519.000 m 494.000 527.000 l 492.000 519.000 l gs 2 setlinejoin s gr
+ [4.000000] 0 setdash
+% Polyline
+n 431 59 m 515 59 l gs s gr
+ [] 0 setdash
+n 492.000 82.000 m 494.000 74.000 l 496.000 82.000 l gs 2 setlinejoin s gr
+% Polyline
+n 494 74 m 494 494 l gs s gr
+n 496.000 486.000 m 494.000 494.000 l 492.000 486.000 l gs 2 setlinejoin s gr
+% Polyline
+n 89 524 m 434 524 l gs s gr
+% Polyline
+n 89 59 m 434 59 l gs s gr
+1.000 setlinewidth
+% Polyline
+n 479 554 m 479 29 l 59 29 l 59 554 l
+ clp gs s gr
+0.500 setlinewidth
+% Polyline
+n 155 284 m 155 299 l gs s gr
+n 157.000 291.000 m 155.000 299.000 l 153.000 291.000 l gs 2 setlinejoin s gr
+% Polyline
+n 155 329 m 155 314 l gs s gr
+n 153.000 322.000 m 155.000 314.000 l 157.000 322.000 l gs 2 setlinejoin s gr
+n 187.000 160.000 m 179.000 158.000 l 187.000 156.000 l gs 2 setlinejoin s gr
+% Polyline
+n 179 158 m 254 158 l gs s gr
+n 246.000 156.000 m 254.000 158.000 l 246.000 160.000 l gs 2 setlinejoin s gr
+n 363.000 172.000 m 365.000 164.000 l 367.000 172.000 l gs 2 setlinejoin s gr
+% Polyline
+n 365 164 m 365 389 l gs s gr
+n 367.000 381.000 m 365.000 389.000 l 363.000 381.000 l gs 2 setlinejoin s gr
+1.000 setlinewidth
+% Polyline
+n 170 164 m 170 389 l gs s gr
+% Polyline
+n 179 308 m 254 308 l gs s gr
+% Polyline
+n 260 164 m 260 389 l gs s gr
+% Polyline
+n 350 164 m 350 389 l gs s gr
+0.500 setlinewidth
+ [4.000000] 0 setdash
+% Polyline
+n 89 389 m 89 494 l 434 494 l 434 389 l
+ clp gs s gr
+ [] 0 setdash
+/Times-Italic findfont 10.00 scalefont setfont
+269 566 m
+gs 1 -1 scale (bodywd) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+269 581 m
+gs 1 -1 scale (paperwd) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+521 524 m
+gs 1 -1 scale 90.0 rotate (botmg) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+491 509 m
+gs 1 -1 scale 90.0 rotate (footlineskip) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+491 284 m
+gs 1 -1 scale 90.0 rotate (bodyht) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+536 284 m
+gs 1 -1 scale 90.0 rotate (paperht) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+506 74 m
+gs 1 -1 scale 90.0 rotate (headlineskip) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+521 53 m
+gs 1 -1 scale 90.0 rotate (topmg) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+449 86 m
+gs 1 -1 scale (topskip) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+350 155 m
+gs 1 -1 scale (colsep) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+269 119 m
+gs 1 -1 scale (topbox) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+269 464 m
+gs 1 -1 scale (botbox) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+269 518 m
+gs 1 -1 scale (footline) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+254 56 m
+gs 1 -1 scale (headline) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+218 266 m
+gs 1 -1 scale (column 0) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+305 266 m
+gs 1 -1 scale (column 1) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+125 221 m
+gs 1 -1 scale (leftbox) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+218 338 m
+gs 1 -1 scale (caption) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+215 374 m
+gs 1 -1 scale (illo) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+215 152 m
+gs 1 -1 scale (colwd) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+374 284 m
+gs 1 -1 scale 90.0 rotate (colht) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+407 251 m
+gs 1 -1 scale (rightbox) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+152 308 m
+gs 1 -1 scale 90.0 rotate (capsep) dup stringwidth pop 2 div neg 0 rmoveto show gr
+showpage
diff --git a/macros/plain/contrib/pdcmac/oput02.fig b/macros/plain/contrib/pdcmac/oput02.fig
new file mode 100644
index 0000000000..6f34c0811b
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/oput02.fig
@@ -0,0 +1,273 @@
+#FIG 2.1
+80 2
+6 179 317 254 329
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 329 254 317 179 317 179 329 254 329 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 329 254 329 9999 9999
+-6
+6 179 332 254 344
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 344 254 332 179 332 179 344 254 344 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 344 254 344 9999 9999
+-6
+6 179 287 254 299
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 299 254 287 179 287 179 299 254 299 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 299 254 299 9999 9999
+-6
+6 179 272 254 284
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 284 254 272 179 272 179 284 254 284 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 284 254 284 9999 9999
+-6
+6 179 257 254 269
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 269 254 257 179 257 179 269 254 269 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 269 254 269 9999 9999
+-6
+6 179 242 254 254
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 254 254 242 179 242 179 254 254 254 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 254 254 254 9999 9999
+-6
+6 179 227 254 239
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 239 254 227 179 227 179 239 254 239 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 239 254 239 9999 9999
+-6
+6 179 212 254 224
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 224 254 212 179 212 179 224 254 224 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 224 254 224 9999 9999
+-6
+6 179 197 254 209
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 209 254 197 179 197 179 209 254 209 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 209 254 209 9999 9999
+-6
+6 179 182 254 194
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 194 254 182 179 182 179 194 254 194 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 194 254 194 9999 9999
+-6
+6 179 167 254 179
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 179 254 167 179 167 179 179 254 179 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 179 254 179 9999 9999
+-6
+6 269 347 344 359
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 359 344 347 269 347 269 359 344 359 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 359 344 359 9999 9999
+-6
+6 269 317 344 329
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 329 344 317 269 317 269 329 344 329 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 329 344 329 9999 9999
+-6
+6 269 332 344 344
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 344 344 332 269 332 269 344 344 344 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 344 344 344 9999 9999
+-6
+6 269 287 344 299
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 299 344 287 269 287 269 299 344 299 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 299 344 299 9999 9999
+-6
+6 269 272 344 284
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 284 344 272 269 272 269 284 344 284 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 284 344 284 9999 9999
+-6
+6 269 257 344 269
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 269 344 257 269 257 269 269 344 269 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 269 344 269 9999 9999
+-6
+6 269 242 344 254
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 254 344 242 269 242 269 254 344 254 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 254 344 254 9999 9999
+-6
+6 269 227 344 239
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 239 344 227 269 227 269 239 344 239 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 239 344 239 9999 9999
+-6
+6 269 212 344 224
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 224 344 212 269 212 269 224 344 224 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 224 344 224 9999 9999
+-6
+6 269 197 344 209
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 209 344 197 269 197 269 209 344 209 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 209 344 209 9999 9999
+-6
+6 269 182 344 194
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 194 344 182 269 182 269 194 344 194 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 194 344 194 9999 9999
+-6
+6 269 167 344 179
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 179 344 167 269 167 269 179 344 179 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 179 344 179 9999 9999
+-6
+6 269 362 344 374
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 374 344 362 269 362 269 374 344 374 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 374 344 374 9999 9999
+-6
+6 269 377 344 389
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 389 344 377 269 377 269 389 344 389 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 389 344 389 9999 9999
+-6
+6 269 302 344 314
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 314 344 302 269 302 269 314 344 314 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 314 344 314 9999 9999
+-6
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 89 59 434 59 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 89 524 434 524 9999 9999
+2 2 0 2 -1 0 0 0 0.000 0 0 0
+ 479 554 479 29 59 29 59 554 479 554 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 494 74 494 494 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 494 494 494 527 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 509 59 509 89 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 524 29 524 74 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 524 494 524 554 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 539 29 539 554 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 89 569 434 569 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 59 584 479 584 9999 9999
+2 1 1 1 -1 0 0 0 4.000 -1 0 0
+ 425 89 515 89 9999 9999
+2 1 1 1 -1 0 0 0 4.000 -1 0 0
+ 431 59 515 59 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 449 59 449 74 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 449 104 449 89 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 329 158 344 158 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 374 158 359 158 9999 9999
+2 2 0 0 -1 10 0 5 0.000 0 0 0
+ 434 524 434 512 89 512 89 524 434 524 9999 9999
+2 2 0 0 -1 10 0 5 0.000 0 0 0
+ 434 59 434 47 89 47 89 59 434 59 9999 9999
+2 2 1 1 -1 10 0 0 4.000 0 0 0
+ 434 164 434 74 89 74 89 164 434 164 9999 9999
+2 2 1 1 -1 10 0 0 4.000 0 0 0
+ 434 389 434 164 359 164 359 389 434 389 9999 9999
+2 2 1 1 -1 10 0 0 4.000 0 0 0
+ 164 389 164 164 89 164 89 389 164 389 9999 9999
+2 2 0 1 -1 10 0 0 0.000 0 0 0
+ 254 389 254 164 179 164 179 389 254 389 9999 9999
+2 2 0 1 -1 10 0 0 0.000 0 0 0
+ 344 389 344 164 269 164 269 389 344 389 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 155 284 155 299 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 155 329 155 314 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 179 158 254 158 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 365 164 365 389 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 170 164 170 389 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 179 308 254 308 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 260 164 260 389 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 350 164 350 389 9999 9999
+2 2 1 1 -1 0 0 0 4.000 0 0 0
+ 89 389 89 494 434 494 434 389 89 389 9999 9999
+4 1 1 10 0 -1 0 0.00000 4 13 32 269 566 bodywd
+4 1 1 10 0 -1 0 0.00000 4 13 36 269 581 paperwd
+4 1 1 10 0 -1 0 1.57080 4 13 24 521 524 botmg
+4 1 1 10 0 -1 0 1.57080 4 13 49 491 509 footlineskip
+4 1 1 10 0 -1 0 1.57080 4 13 28 491 284 bodyht
+4 1 1 10 0 -1 0 1.57080 4 13 32 536 284 paperht
+4 1 1 10 0 -1 0 1.57080 4 13 53 506 74 headlineskip
+4 1 1 10 0 -1 0 1.57080 4 13 24 521 53 topmg
+4 1 1 10 0 -1 0 0.00000 4 13 30 449 86 topskip
+4 1 1 10 0 -1 0 0.00000 4 13 27 350 155 colsep
+4 1 1 10 0 -1 0 0.00000 4 13 27 269 119 topbox
+4 1 1 10 0 -1 0 0.00000 4 13 27 269 464 botbox
+4 1 1 10 0 -1 0 0.00000 4 13 32 269 518 footline
+4 1 1 10 0 -1 0 0.00000 4 13 36 254 56 headline
+4 1 1 10 0 -1 0 0.00000 4 13 37 218 266 column 0
+4 1 1 10 0 -1 0 0.00000 4 13 37 305 266 column 1
+4 1 1 10 0 -1 0 0.00000 4 13 28 125 221 leftbox
+4 1 1 10 0 -1 0 0.00000 4 13 31 218 338 caption
+4 1 1 10 0 -1 0 0.00000 4 13 14 215 374 illo
+4 1 1 10 0 -1 0 0.00000 4 13 25 215 152 colwd
+4 1 1 10 0 -1 0 1.57080 4 13 21 374 284 colht
+4 1 1 10 0 -1 0 0.00000 4 13 33 407 251 rightbox
+4 1 1 10 0 -1 0 1.57080 4 13 29 152 308 capsep
diff --git a/macros/plain/contrib/pdcmac/pdcadobe.dtx b/macros/plain/contrib/pdcmac/pdcadobe.dtx
new file mode 100644
index 0000000000..693838a000
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcadobe.dtx
@@ -0,0 +1,609 @@
+% pdcadobe.dtx -- documentation & source for pdcadobe.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCADOBE -- Formatting Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcadobe.dtx",
+%%% version = "$Revision: 1.3 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:07:31 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdcadobe.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcadobe
+%{{{ preamble
+\relax
+\input pdccode
+
+\document
+\rcs$Id: pdcadobe.dtx,v 1.3 1995/03/30 16:07:31 pdc Exp $\endrcs
+
+\codefile{pdcadobe.tex}
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{PDCAdobe---Macros for using Adobe fonts}
+\section{Introduction}
+
+ This document describes |pdcadobe.tex|, a collection of macros
+ for using Adobe's Standard Roman character set, via DVIPS's
+ variation on the \TeX\ Text encoding.
+
+\notepar
+ You will need to use a different strategy if your PostScript
+ fonts adhere strictly to the \TeX\ Text conventions (the
+ conventions of Computer Modern Roman, described in {\it\TeX
+ book}\/ Appendix~F, and called OT1 by the \LaTeX~3 team), such
+ as the fonts generated with Fontinst.
+\endnotepar
+
+\subsec{New text symbols}
+
+ The new characters now available in text are:
+$$\halign{\indent\tt\char`\\#1\hfil&\quad#\hfil\cr
+ quotesingle& typewriter-style apostrophe ({\tt\char"0D })\cr
+ quotedouble& typewriter-style double apostrophe ({\tt"})\cr
+ asciicircum& ASCII circumflex\cr
+ asciitilde& ASCII tilde\cr
+}$$
+
+
+\subsec{Use of the Symbol font}
+
+ The assumption is that one of the resons for using PostScript
+ fonts is that, if you stick to the `Adobe~35', the resulting
+ PostScript files are much smaller because no font bitmaps need
+ to be downloaded. On this assumption, Adobe's Symbol font is
+ used whenever possible, even when the Computer Modern symbol is
+ arguably prettier.
+
+ The Symbol font will need to have its own maths family, which by
+ convention this file expects to find defined as |\asyfam|.
+
+\subsec{Composite letters}
+
+\setbox0=\hbox{accent}
+\edef\\{\vrule height\the\ht0 depth\the\dp0 width\the\wd0 \relax }
+
+ Composite letters are those made from some base letter and a
+ {\it mark}, for example {\it\'e}, {\it\"u}.\footnote*{`Composite
+ letters' is a euphemism for what English speakers usually refer
+ to as `\\ed letters', since the word `\\' tends to provoke
+ lectures to the effect that composite letters are not considered
+ to be `\\ed' in many of the lanuages in which they are used.}
+ In the Adobe Standard Roman character set, and hence in
+ |afm2tfm|'s encoding, the composite letters of ISO 8859--1 are
+ included as separate glyphs. These glyphs are accessed using
+ ligatures between mark glyphs and base letters (so that |^^13e|
+ in the manuscript file produces `\'e'). Unfortunately,
+ exploiting this is tricky if we also want to allow for composite
+ glyphs {\it not} included in the PostScript fonts.
+
+ The approach taken in these definitions is that \TeX's composite
+ letter commands (|\'|, |\"|, and friends) are left unchanged, so
+ that `|\'e|' works through \TeX's |\|\\ command. The magic
+ glyphs are available as commands with names like |\acuteglyph|
+ or via the Latin-1 special symbols, so that `|\acuteglyph e|' or
+ `|^^b4e|' (which might liik like `{\tt\char"13 e}' on the screen
+ if your computer uses Latin-1) produces `\'e' as a single glyph
+ (which might mean tha mark is better aligned). Finally, the
+ Latin-1 composite letters generate the single glyphs vial
+ ligatures, so that `|^^e9|' (which may well look like `{\tt\'e}'
+ on the screen) expands to `|\acuteglyph e|' and hence `\'e'.
+
+\subsec{About this document}
+
+ The definitions file and the printed documentation are both in
+ |pdcadobe.dtx|, a `documented \TeX\ macros' file\footnote*{The
+ \LaTeX~2e distribution uses files with the `|dtx|' suffix for
+ similar purposes.} which, when processed by plain \TeX,
+ generates a fresh copy of |pdcadobe.tex| in the current directory
+ in addition to the |dvi| file. This ensures that the printed
+ documentation and the code it describes are identical. The
+ |dtx| file uses the macros in |pdccode.tex|.
+
+%}}} introduction
+%{{{ File identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+
+\code
+ \|\% pdcadobe.tex \fileversion~\filedate~-- macros for Adobe style fonts
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcadobe.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Formatting macros for Adobe-style fonts.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+%}}} file id
+%{{{ chardefs
+\section{Characters available in all styles}
+
+ The following characters are in the fonts generated by
+ |afm2tfm|, so are available in all styles.
+\code
+ |\chardef\quotesingle="0D
+ |\chardef\quotedouble="22
+ |\chardef\_="5F
+ |\chardef\asciicircum="80
+ |\chardef\asciitilde="81
+ |\chardef\cents="A2
+ |\chardef\pounds="A3
+ |\chardef\fractionslash="A4
+ |\chardef\yen="A5
+ |\chardef\florin="A6
+ |\chardef\S="A7
+ |\chardef\currency="A8
+ |\chardef\lguillemet="AB
+ |\chardef\dag="B2
+ |\chardef\ddag="B3
+ |\chardef\gbdecimal="B4
+ |\chardef\P="B6
+ |\chardef\bullet="B7
+ |\chardef\quotesinglebase="B8
+ |\chardef\quotedblbase="B9
+ |\chardef\rguillemet="BB
+ |\chardef\ellipsis="BC \def\dots{\ellipsis\thinspace}
+ |\chardef\permille="BD
+ |\chardef\orda="E3
+ |\chardef\ordo="EB
+\endcode
+ Some glyphs, like |\fractionslash| and |\gbdecimal| may well be
+ used in maths mode, but are defined using |\chardef| to allow
+ them to be used in text as well.
+
+ The definition of |\dots| adds the thin space that is included
+ in plain \TeX's |\dots|, so that `|\dots,|' will have a thin
+ space between the third full stop and the comma.
+
+\subsec{Maths stuff}
+
+ These symbols are available in maths mode, coming from the |\rm|
+ font (fam~0).
+\code
+ |\mathchardef\backslash="205C
+ |\edef\lbrace{\delimiter"407B308} \let\{=\lbrace \mathcode`\{="407B
+ |\mathcode`\|="707C \mathchardef\mid="307C
+ |\edef\rbrace{\delimiter"507D309} \let\}=\rbrace \mathcode`\}="507D
+ |\mathchardef\sim="3081
+ |\mathchardef\cdot="20B4
+ |\mathchardef\bullet="20B7
+ |\mathchardef\ldots="60BC
+\endcode
+ There {\it are} extensible braces in the Adobe Symbol font,
+ which I~would have used for the |\lbrace| and |\rbrace|
+ commands. Unfortunately, the TFM file generated with |afm2tfm|
+ seems to lack the special information that makes extensible
+ characters work, so the |cmex10| glyphs must be used instead.
+
+\subsec{Marks for composite letters}
+
+ Some common accented letters can be got by printing the accent
+ glyph before the letter glyph. However not all combinations
+ will work, so I~have left plain \TeX's definitions in place.
+
+ For later reference, the glyphs used for the accents are given
+ names.
+\code
+ |\chardef\graveglyph="12
+ |\chardef\acuteglyph="13
+ |\chardef\hookglyph="14
+ |\chardef\breveglyph="15
+ |\chardef\macronglyph="16
+ |\chardef\ringglyph="17
+ |\chardef\cedillaglyph="18
+ |\chardef\circumglyph="5E
+ |\chardef\tildeglyph="7E
+ |\chardef\twodotsglyph="7F
+ |\chardef\dotglyph="C7
+ |\chardef\hungarianglyph="CD
+ |\chardef\ogonekglyph="CE
+\endcode
+
+
+ Some special letters and marks have been moved to new slots.
+\code
+ |\chardef\AA="C8 \chardef\aa="98
+ |\chardef\L="E8 \chardef\l="F8
+ |\def\.#1{\accent\dotglyph #1}
+ |\def\H#1{\accent\hungarianglyph"CD #1}
+\endcode
+
+%}}} chardefs
+%{{{ adobe sy
+\section{Adobe Symbol font characters}
+
+ Most of Adobe's Symbol font's glyphs exist already in one of the
+ maths fonts. Nevertheless I~think it makes sense to use them
+ whenever possible, because if it so happens that none of the
+ glyphs in the maths fonts are used, the bitmaps for the fonts
+ may be omitted from the PostScript file, making it much smaller.
+ For these definitions to work, there must be a family |\asyfam|
+ and font nickname |\asy|.
+
+\code
+ |\ifx\asyfam\UNDEFINED
+ | \newfam\asyfam
+ |\fi
+\endcode
+
+\subsec{Extracting the fam name}
+
+\code
+ |\edef\\{\ifcase\asyfam 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
+ | 8\or 9\or A\or B\or C\or D\or E\or F\fi
+ |}
+\endcode
+
+ Where plain \TeX's definition uses glyphs from the roman font,
+ I~have let the definition stand.
+\code
+ |\mathchardef\forall="0\\22
+ |\mathchardef\exists="0\\24
+ |\mathchardef\suchthat="0\\27
+ |\mathcode`*="2\\2A
+ |\mathcode`,="6\\2C
+ |\mathcode`-="2\\2D
+ |\mathcode`.="2\\2E
+ |\mathcode`/="2\\2F
+ |\mathcode`<="3\\3C
+ |\mathcode`>="3\\3E
+\smallbreak
+ |\mathchardef\cong="3\\40
+ |\mathchardef\Alpha="0\\41
+ |\mathchardef\Beta="0\\42
+ |\mathchardef\Chi="0\\43
+ |\mathchardef\Delta="0\\44
+ |\mathchardef\Epsilon="0\\45
+ |\mathchardef\Phi="0\\46
+ |\mathchardef\Gamma="0\\47
+ |\mathchardef\Eta="0\\48
+ |\mathchardef\Iota="0\\49
+ |\mathchardef\vartheta="0\\4A
+ |\mathchardef\Kappa="0\\4B
+ |\mathchardef\Lambda="0\\4C
+ |\mathchardef\Mu="0\\4D
+ |\mathchardef\Ni="0\\4E
+ |\mathchardef\Omicron="0\\4F
+\smallbreak
+ |\mathchardef\Pi="0\\50
+ |\mathchardef\Theta="0\\51
+ |\mathchardef\Rho="0\\52
+ |\mathchardef\Sigma="0\\53
+ |\mathchardef\Tau="0\\54
+ |\mathchardef\varUpsilon="0\\55
+ |\mathchardef\varsigma="0\\56
+ |\mathchardef\Omega="0\\57
+ |\mathchardef\Xi="0\\58
+ |\mathchardef\Psi="0\\59
+ |\mathchardef\Zeta="0\\5A
+%
+ |\mathchardef\therefore="3\\5C
+%
+ |\mathchardef\perp="3\\5E
+%
+\smallbreak
+%
+ |\mathchardef\alpha="0\\61
+ |\mathchardef\beta="0\\62
+ |\mathchardef\chi="0\\63
+ |\mathchardef\delta="0\\64
+ |\mathchardef\epsilon="0\\65
+ |\mathchardef\phi="0\\66
+ |\mathchardef\gamma="0\\67
+ |\mathchardef\eta="0\\68
+ |\mathchardef\iota="0\\69
+ |\mathchardef\varphi="0\\6A
+ |\mathchardef\kappa="0\\6B
+ |\mathchardef\lambda="0\\6C
+ |\mathchardef\mu="0\\6D
+ |\mathchardef\ni="0\\6E
+ |\mathchardef\omicron="0\\6F
+\smallbreak
+ |\mathchardef\pi="0\\70
+ |\mathchardef\theta="0\\71
+ |\mathchardef\rho="0\\72
+ |\mathchardef\sigma="0\\73
+ |\mathchardef\tau="0\\74
+ |\mathchardef\upsilon="0\\75
+ |\mathchardef\varpi="0\\76
+ |\mathchardef\omega="0\\77
+ |\mathchardef\xi="0\\78
+ |\mathchardef\psi="0\\79
+ |\mathchardef\zeta="0\\7A
+ |\mathchardef\sim="3\\7E
+%
+\smallbreak
+ |\mathchardef\Upsilon="0\\A1
+ |\mathcode`'="0\\A2 \mathchardef\minutes="0\\A2
+ |\mathchardef\leq="3\\A3 \let\le=\leq
+ |\mathchardef\fractionslash="0\\A4
+ |\mathchardef\infinity="0\\A5
+%
+ |\mathchardef\clubsuit="0\\A7
+ |\mathchardef\diamondsuit="0\\A8
+ |\mathchardef\heartsuit="0\\A9
+ |\mathchardef\spadesuit="0\\AA
+ |\mathchardef\leftrightarrow="3\\AB
+ |\mathchardef\leftarrow="3\\AC \let\gets=\rightarrow
+ |\mathchardef\uparrow="3\\AD
+ |\mathchardef\rightarrow="3\\AE \let\to=\rightarrow
+ |\mathchardef\downarrow="3\\AF
+\smallskip
+ |\mathchardef\degrees="0\\B0
+ |\mathchardef\pm="2\\B1
+ |\mathchardef\seconds="0\\B2
+ |\mathchardef\geq="3\\B3 \let\ge=\geq
+ |\mathchardef\times="2\\B4
+ |\mathchardef\propto="3\\B5
+ |\mathchardef\partial="0\\B6
+%
+ |\mathchardef\div="2\\B8
+ |\mathchardef\neq="3\\B9 \let\ne=\neq
+ |\mathchardef\equiv="3\\BA
+ |\mathchardef\approx="3\\BB
+ |\mathchardef\ldots="6\\BC
+ |\edef\arrowvert{\delimiter"0\\BD33C }
+ |\mathchardef\relbar"3\\BE
+ |\edef\crlf{\noexpand\mathexbox\\BF}
+\smallbreak
+ |\mathchardef\aleph="0\\C0
+ |\mathchardef\Im="0\\C1
+ |\mathchardef\Re="0\\C2
+ |\mathchardef\wp="0\\C3
+ |\mathchardef\otimes="2\\C4
+ |\mathchardef\oplus="2\\C5
+ |\mathchardef\emptyset="0\\C6
+ |\mathchardef\cap="2\\C7
+ |\mathchardef\cup="2\\C8
+ |\mathchardef\supset="3\\C9
+ |\mathchardef\supseteq="3\\CA
+ |\mathchardef\nsubset="3\\CB
+ |\mathchardef\subset="3\\CC
+ |\mathchardef\subseteq="3\\CD
+ |\mathchardef\in="3\\CE
+ |\mathchardef\nin="3\\CF
+\smallbreak
+ |\mathchardef\angle="0\\D0
+ |\mathchardef\nabla="0\\D1
+ |\edef\registered{\noexpand\mathhexbox\\D2}
+ |\edef\copyright{\noexpand\mathhexbox\\D3}
+ |\edef\trademark{\noexpand\mathhexbox\\D4}
+ |\mathchardef\prod="1\\D5
+ |\edef\sqrt{\radical"\\D6370 }
+ |\mathchardef\cdot="2\\D7
+ |\mathchardef\neg="0\\D8 \let\lnot=\neg
+ |\mathchardef\wedge="3\\D9 \let\land=\wedge
+ |\mathchardef\vee="3\\DA \let\lor=\vee
+ |\mathchardef\Leftrightarrow="3\\DB
+ |\mathchardef\Leftarrow="3\\DC
+ |\mathchardef\Uparrow="3\\DD
+ |\mathchardef\Rightarrow="3\\DE
+ |\mathchardef\Downarrow="3\\DF
+\smallbreak
+ |\mathchardef\diamond="3\\E0
+ |\edef\langle{\delimiter"4\\E130A }
+ |\mathchardef\sum="1\\E5
+ |\edef\rangle{\delimiter"5\\F130B }
+\endcode
+ (I haven't bothered redefining those delimiters based on parts of
+ large delimiters.)
+
+%}}} adobe sy
+%{{{ ISO 8859-1 support
+\section{ISO 8859--1 input}
+
+ ISO~8859--1 (Latin-1) is the de facto standard character
+ encoding in a large numebr of countries, and so we shall try to
+ make a reasonable number of Latin-1 characters available.
+
+\subsec{Symbols}
+
+ Those characters whose code is the same as the code of the
+ corresponding glyph are left alone (with catcode~12). For
+ example, |^^a3| (pounds sterling) is left alone.
+
+ Those that have an equivalent |\chardef| (or |\mathchardef|)
+ name are defined with |\let| (for example, |^^a4| is |\let| to
+ |\currency|). Those with an equivalent standard ligature use
+ that ligature. These conventions hopefully insulate these
+ definitions against changes in the encoding.
+
+ The characters that represent marks for composite
+ letters\footnote*{This phrase is used on the grounds that the
+ word {\it accent} tends to provoke lectures on ways in which
+ many composite letters do {\it not} represent accents in the
+ languages in which they are used.} will form ligatures with the
+ following letter---one may write `{\tt\char"7F u\char"18 c}' to
+ get `\"u\c c'.
+
+ I don't use |\declareactivechar| on these because they would not
+ work properly in verbatim text with catcode~12. (Extending
+ verbatim text to include Latin-1 will take a few definitions
+ along the same lines as |\ttlq| etc.).
+\code
+ |\catcode`^^a0\active \let^^a0=~
+ |\catcode`^^a1\active \def^^a1{!`}
+% A2
+% A3
+ |\catcode`^^a4\active \let^^a4=\currency
+% A5
+% A6 XXX
+% A7
+ |\catcode`^^a8\active \let^^a8=\twodotsglyph
+ |\catcode`^^a9\active \let^^a9=\copyright
+ |\catcode`^^aa\active \let^^aa=\orda
+% AB
+ |\catcode`^^ac\active \let^^ac=\lnot
+ |\catcode`^^ad\active \let^^ad=\-
+ |\catcode`^^ae\active \let^^ae=\registered
+ |\catcode`^^af\active \let^^af=\macronglyph
+\smallbreak
+ |\catcode`^^b0\active \let^^b0=\degrees
+ |\catcode`^^b1\active \let^^b1=\pm
+ |\catcode`^^b2\active \def^^b2{^2}
+ |\catcode`^^b3\active \def^^b3{^3}
+ |\catcode`^^b4\active \let^^b4=\acuteglyph
+ |\catcode`^^b5\active \let^^b5=\mu
+% B6
+ |\catcode`^^b7\active \let^^b7=\gbdecimal
+ |\catcode`^^b8\active \let^^b8=\cedillaglyph
+ |\catcode`^^b9\active \def^^b9{^1}
+ |\catcode`^^ba\active \let^^ba=\ordo
+% BB
+ |\catcode`^^bc\active \def^^bc{\frac14}
+ |\catcode`^^bd\active \def^^bd{\frac12}
+ |\catcode`^^be\active \def^^be{\frac34}
+ |\catcode`^^bf\active \def^^bf{?`}
+\smallbreak
+ |\catcode`^^d7\active \let^^d7=\times
+ |\catcode`^^f7\active \let^^f7=\div
+\endcode
+
+\subsec{Composite letters}
+
+ The composite letters acer accessed via ligatures so that they
+ are immune to some possible changes in encoding.
+\code
+ |\catcode`^^c0\active \def^^c0{\graveglyph A}
+ |\catcode`^^c1\active \def^^c1{\acuteglyph A}
+ |\catcode`^^c2\active \def^^c2{\circumglyph A}
+ |\catcode`^^c3\active \def^^c3{\tildeglyph A}
+ |\catcode`^^c4\active \def^^c4{\twodotsglyph A}
+ |\catcode`^^c5\active \def^^c5{\ringglyph A}
+ |\catcode`^^c6\active \let^^c6=\AE
+ |\catcode`^^c7\active \def^^c7{\cedillaglyph C}
+ |\catcode`^^c8\active \def^^c8{\graveglyph E}
+ |\catcode`^^c9\active \def^^c9{\acuteglyph E}
+ |\catcode`^^ca\active \def^^ca{\circumglyph E}
+ |\catcode`^^cb\active \def^^cb{\twodotsglyph E}
+ |\catcode`^^cc\active \def^^cc{\graveglyph I}
+ |\catcode`^^cd\active \def^^cd{\acuteglyph I}
+ |\catcode`^^ce\active \def^^ce{\circumglyph I}
+ |\catcode`^^cf\active \def^^cf{\twodotsglyph I}
+\smallbreak
+% |\catcode`^^d0\active \chardef^^d0="?? % DH
+ |\catcode`^^d1\active \def^^d1{\tildeglyph N}
+ |\catcode`^^d2\active \def^^d2{\graveglyph O}
+ |\catcode`^^d3\active \def^^d3{\acuteglyph O}
+ |\catcode`^^d4\active \def^^d4{\circumglyph O}
+ |\catcode`^^d5\active \def^^d5{\tildeglyph O}
+ |\catcode`^^d6\active \def^^d6{\twodotsglyph O}
+ |\catcode`^^d8\active \let^^d8=\O
+ |\catcode`^^d9\active \def^^d9{\graveglyph U}
+ |\catcode`^^da\active \def^^da{\acuteglyph U}
+ |\catcode`^^db\active \def^^db{\circumglyph U}
+ |\catcode`^^dc\active \def^^dc{\twodotsglyph U}
+ |\catcode`^^dd\active \def^^dd{\acuteglyph Y}
+% |\catcode`^^de\active \def^^de{TH}
+ |\catcode`^^df\active \let^^df=\ss
+\smallbreak
+ |\catcode`^^e0\active \def^^e0{\acuteglyph a}
+ |\catcode`^^e1\active \def^^e1{\graveglyph a}
+ |\catcode`^^e2\active \def^^e2{\circumglyph a}
+ |\catcode`^^e3\active \def^^e3{\tildeglyph a}
+ |\catcode`^^e4\active \def^^e4{\twodotsglyph a}
+ |\catcode`^^e5\active \def^^e5{\ringglyph a}
+ |\catcode`^^e6\active \let^^e6=\ae
+ |\catcode`^^e7\active \def^^e7{\cedillaglyph c}
+ |\catcode`^^e8\active \def^^e8{\graveglyph e}
+ |\catcode`^^e9\active \def^^e9{\acuteglyph e}
+ |\catcode`^^ea\active \def^^ea{\circumglyph e}
+ |\catcode`^^eb\active \def^^eb{\twodotsglyph e}
+ |\catcode`^^ec\active \def^^ec{\graveglyph i}
+ |\catcode`^^ed\active \def^^ed{\acuteglyph i}
+ |\catcode`^^ee\active \def^^ee{\circumglyph i}
+ |\catcode`^^ef\active \def^^ef{\twodotsglyph i}
+\smallbreak
+% |\catcode`^^f0\active \def^^f0{dh}
+ |\catcode`^^f1\active \def^^f1{\tildeglyph n}
+ |\catcode`^^f2\active \def^^f2{\graveglyph o}
+ |\catcode`^^f3\active \def^^f3{\acuteglyph o}
+ |\catcode`^^f4\active \def^^f4{\circumglyph o}
+ |\catcode`^^f5\active \def^^f5{\tildeglyph o}
+ |\catcode`^^f6\active \def^^f6{\twodotsglyph o}
+ |\catcode`^^f8\active \let^^f8=\o
+ |\catcode`^^f9\active \def^^f9{\graveglyph u}
+ |\catcode`^^fa\active \def^^fa{\acuteglyph u}
+ |\catcode`^^fb\active \def^^fb{\circumglyph u}
+ |\catcode`^^fc\active \def^^fc{\twodotsglyph u}
+ |\catcode`^^fd\active \def^^fd{\acuteglyph y}
+% |\catcode`^^fe\active \def^^fe{th}
+ |\catcode`^^ff\active \def^^ff{\twodotsglyph y}
+\endcode
+
+%}}} ISO 8859-1 support
+%{{{ other hacks
+\section{Modifications to other PDCMAC macros}
+
+
+ For typewriter text, less drastic revision of the string is
+ necessary.
+\code
+ |\def\ttminus{--{}}
+ |\let\ttcircum=\asciicircum
+ |\let\tttilde=\asciitilde
+\endcode
+ Note that ASCII quote and backquote characters are still got
+ from accents because a `neutral' quotation mark is not adequate
+ for computer listings where both sorts of `quote mark' might be
+ appear, with different meanings.
+
+
+%}}} other hacks
+\endcodefile
+\enddocument
+\bye
+%}}} pdcadobe.dtx
+
+%Local variables:
+%fill-prefix: "\t"
+%fold-folded-p: t
+%End:
+
diff --git a/macros/plain/contrib/pdcmac/pdccode.dtx b/macros/plain/contrib/pdcmac/pdccode.dtx
new file mode 100644
index 0000000000..e9b996dba6
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdccode.dtx
@@ -0,0 +1,881 @@
+% pdccode.dtx -- documentation & source for pdccode.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCCODE -- Documented TeX Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/pdccode.dtx",
+%%% version = "$Revision: 1.6 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:08:32 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdccode.tex.
+%%% Running plain TeX on this file produces both a copy of the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdccode
+%{{{ preamble
+
+\relax
+\input pdccode
+\document
+\rcs$Id: pdccode.dtx,v 1.6 1995/03/30 16:08:32 pdc Exp $\endrcs
+
+\codefile{tmp.tex}
+
+\defverbatim\"
+
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{PDCCODE---Documented \TeX\ Macros}
+\section{Introduction}
+
+ PDCCODE is a simpler and less featureful system than the
+ \LaTeX~2e Docstrip package, but uses the same file suffix
+ `|dtx|'. Lines between |\code| and |\endcode| markers are
+ written to a file (set with the |\codefile| command), as well as
+ being printed `verbatim' in document. Thus one \TeX\ pass
+ generates both the macro file(s) and a |dvi| file.
+
+ This document---generated from |pdccode.dtx|---is a |dtx| file
+ for PDCCODE itself, the file of macros used by my |dtx| files.
+ It cannot be used to generate |pdccode.tex| directly (\TeX\
+ might choke halfway through overwriting |pdccode.tex| with a new
+ version, leaving no |pdccode.tex| to generate |pdccode.tex|
+ with). Instead it produces its copy as `|tmp.tex|', and
+ `|tmp.tex|' can be compared to the supplied |pdccode.tex|.
+
+\subsec{How to read this document}
+
+ The |dtx| files are programs (in \TeX's macro language) that
+ generate new programs (the macro files that will be used in
+ documents). The macros described in {\it this} file are used
+ when generating macro files. So, for example, the |\rcs| and
+ |\fileversion| macros used to extract identification information
+ from the |dtx| file are not defined in any of the generated
+ macro files.
+
+\subsec{Background}
+
+ For some time I~have been using a collection of macro files to
+ typeset various types of document with \TeX. After using them
+ in Malvern\footnote*{Malvern is a sanserif font family
+ implemented in METAFONT. The current version is release $1.2$.}
+ releases I have discovered that they had been merged with the
+ Unix\TeX\ macros directory. Originally I~had never intended
+ that these files be used by anyone but me---they were full of
+ hacks and messy code and definitions I~don't use anymore. Since
+ then I~thought of tidying up the macros enough that I'm not
+ embarassed by them, but the task of doing this {\it and}
+ documenting their use was daunting.
+
+ After installing \LaTeX~2e on my new computer, I~decided to have
+ a go at adapting the idea of `documented \TeX\ macros' files to
+ plain \TeX. This way I~could clean up the macros and document
+ them in a systematic fashion.
+
+ The \LaTeX\ Docstrip/Doc-option approach evolved through several
+ different models and so is a complex format. Docstrip (a
+ program written in \TeX's macro language) was used to strip
+ comments from |doc| files making |sty| files, and the \LaTeX\
+ Doc-option separately extracted \LaTeX\ code from comments in
+ |doc| files to make printed documentation. Both Doc and
+ Docstrip required the user to type in file names whenever they
+ ran---which made them useless for batch processing. So separate
+ driver files (with suffixes |drv| and |ins|) were added to
+ distributions. Finally, the |doc| files, which used to be
+ usable as |sty| files (just a little slower because of the
+ comments) were have been changed to be documents instead (making
+ |drv| files redundant, once the |ltxdoc.cfg| configuration file
+ was added to the conventions) and given a new suffix |dtx|.
+
+ The system I~use---called PDCCODE---is simpler and faster, but
+ omits indexes, special change-log commands, and all the features
+ that come with \LaTeX\ formatting. It doesn't have Docstrip's
+ {\it options}\/ feature, which allows several largely-similar
+ files to be generated from the same source.\footnote\dag{I do
+ have an experimental version |pdccode2.tex| which does this but
+ I~am not particularly happy with it yet.} It doesn't print
+ statistics at the end, or do checksums, or even print comforting
+ lines of asterisks and percent signs in the log file.
+
+ My |dtx| files use a single macro file |pdccode.tex| which
+ defines a `code mode' where lines are written to the macro file
+ as well as appearing in the printed documentation. One pass
+ generates both the macro file and the documentation in |dvi|
+ form. The |pdccode.tex| file also includes enough layout
+ commands to typeset the comments.
+%}}}
+%{{{ using pdccode
+\section{Summary of using PDCCODE}
+
+ These commands are explained in more detail below.
+
+\subsec{A skeleton code file}
+
+ A code file using |pdccode.tex| will look something like this:
+$$\it
+\halign{\indent#\hfil\cr
+ "%" name "--" one line description\cr
+\noalign{\smallskip}
+ "%%%@TeX-document-file {"\cr
+ header comments for the document\cr
+ "%%%}"\cr
+\noalign{\smallskip}
+ "\relax"\cr
+ "\input pdccode"\cr
+ "\document"\cr
+ "\rcs$" RCS identification string "$\endrcs"\cr
+ "\codefile{" file name "}"\cr
+ "\author{" author name "}"\cr
+ "\title{" title for the document "}"\cr
+\noalign{\smallbreak}
+ "\section{Introduction}"\cr
+ introduction\cr
+\noalign{\smallbreak}
+ "\section{File identification}"\cr
+ "\code"\cr
+ " \|\% " file name "\fileversion~\filedate~--" one line desc\cr
+ " |"\cr
+ " |%%%@TeX-definition-file {"\cr
+ " " header comments for macro file\cr
+ " |%%%}"\cr
+ " |"\cr
+ " \|\\message\{\fileversion~<\fileauthor~\filedate>\}"\cr
+ " |"\cr
+ "\endcode"\cr
+\noalign{\smallbreak}%
+ definitions and commentary\cr
+\noalign{\smallbreak}%
+ "\endcodefile"\cr
+ "\enddocument"\cr
+ "\bye"\cr
+}$$
+
+\subsec{Commands in code sections}
+
+ Code sections start with |\code| and end with |\endcode|. Before
+ the first |\code| you must do |\codefile{|\<file name>|}| to
+ specify the file.
+
+ Vertical mode material may be used between lines (e.g.,
+ |\smallbreaks|). Unexpanded code lines are introduced with "|",
+ expanded lines with "\|". In expanded lines, use "\{", "\}",
+ "\\", "\%", "\~" for those characters, "~" for a single space.
+
+\subsec{Commands in commentary}
+
+ Most of the commentary will be typeset using the conventions of
+ plain \TeX.
+
+ |\author{|\<text>|}| (must precede |\title|)
+
+ |\title{|\<heading>|}|
+
+ |\section{|\<heading>|}|
+
+ |\subsec{|\<heading>|}|
+
+ |\noindenttrue|
+
+ |\footnote|
+
+ |\defverbatim|\<one-character control sequence>
+
+ |$|\<number>|\mm$| |$|\<number>|\em$| |$|\<number>|\pt$|
+ |$|\<number>|\inch$|
+
+ |\<|\<name>|>| |\cs{|\<name>|}|
+ |\arg{|\<argument name>|}|
+
+ |\TeX| |\LaTeX| |\LaTeX~2e|
+
+ |\notepar| \<paragraph> |\endnotepar|
+
+
+%}}} using pdccode
+%{{{ file identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+\code \catcode`\"=12
+ \|\% pdccode.tex \fileversion~\filedate~-- self-documenting TeX macros
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdccode.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Macros for documented TeX macros (DTX files).
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+%}}} file id
+
+\bigskip\noindent
+ We start by making a nickname for a scratch register. This is
+ |\toks@| in plain \TeX; this definition gives it a name I~can
+ use without catcode hackery.
+\code
+ |\toksdef\toksa=0
+\endcode
+
+%{{{ rcs support
+
+\section{RCS Support}
+
+ RCS (Revision Control System) is a free source code control
+ system which is available from the Free Software Foundation.
+ It inserts keyword-value pairs enclosed in dollar signs into the
+ source code. This command extracts the file's version, date,
+ author and locker (if there is one). It is used like this:
+$$\centerline{\vbox{\tt\def~{\char32 \ignorespaces}
+ \halign{#\hfil\cr
+ \cs{rcs}\$Id:~\<name>,v~\<version>~\<date>~\<ignored>\quad\cr
+ \hfill~\<author>~\<ignored>~{\rm[}\<locker>~{\rm]}\$\cs{endrcs}\cr
+}}} $$
+ The \<locker> field is non-empty iff the file is `locked'
+ (meaning it has been edited and the changes are not checked in
+ yet). The |\filename| macro is defined, even though it will
+ almost certainly be identical to |\jobname|.
+\code
+ |\def\rcs#1: #2,v #3 #4 #5 #6 #7 #8$#9\endrcs{
+ | \def\filename{#2}
+ | \def\fileversion{#3}
+ | \def\filedate{#4}
+ | \def\fileauthor{#6}
+ | \def\filelocker{#8}
+ |}
+\endcode
+
+%}}} rcs support
+%{{{ verbatim text
+\section{Verbatim text}
+
+ Verbatim text is text that is printed identically to the
+ characters in the manuscript file. In the code sections, a
+ vertical bar is used to make lines for the code file. In the
+ documentation, the vertical bar is used as a self-matching
+ verbatim mode character.
+
+ These definitions should be the same as the corresponding code
+ in |pdcfmt2.dtx|.
+
+\subsec{Lists of active characters}
+
+ The verbatim text macros need to know if any characters have
+ been made special apart from the usual ones. This command tells
+ the verbatim macros that |#1| is an active char; in addition to
+ setting its catcode, this makes sure that the character will be
+ re-catcoded appropriately when in verbatim mode. |#1| should be
+ a something that will work after `|`|'; usually this means a
+ one-character control sequence.
+\code
+ |\def\declareactivechar#1{%
+ | \toksa\expandafter{\verbatimplains\do#1}%
+ | \edef\verbatimplains{\the\toksa }%
+ | \catcode`#1\active
+ |}
+\endcode
+
+ Two list macros in the style of |\dospecials| are defined. The
+ first is for characters that must be set to catcode~12, such as
+ `|\|', `|{|', `|}|', `|_|', `|$|', `|#|', `|&|', and `|%|'. The
+ other is for a few characters that are given catcode~13, such as
+ `|`|', `|'|', `|~|', `|^|' and SP.
+\code
+ |\def\verbatimplains{\do\\\do\{\do\}\do\_\do\$\do\#\do\&\do\%}
+ |\def\verbatimactives{\do\`\do\'\do\~\do\^\do\ }
+\smallbreak
+ |\chardef\other=12
+\endcode
+
+\subsec{Setting up verbatim mode}
+
+ This is a macro common to various verbatim text modes. The
+ default spacing of whatever font is used, without any
+ adjustments of spacefactor for punctuation. The characters
+ `|`|', `|'|', `|~|', and `|^|' produce slightly lowered glyphs.
+\code
+ |\newtoks\everyverbatim
+\smallbreak
+ |\bgroup \catcode`\^=13 \catcode`\'=13 \catcode`\`=13 \toksa={\egroup
+ | \def\setupverbatim{%
+ | \frenchspacing
+ | \spaceskip0pt \xspaceskip0pt % use spacing of font
+ | \def\do##1{\catcode\lq##112 }\verbatimplains
+ | \def\do##1{\catcode\lq##1\active }\verbatimactives
+ | \let`\ttlq \let'\ttrq
+ | \let~\tttilde \let^\ttcircum
+ | \the\everyverbatim
+ | }
+ |}\the\toksa
+\endcode
+
+ Here are the definitions for the munged glyphs. These are only
+ necessary in CM-Typewriter-like fonts; using something
+ like Courier, these definitions could probably be omitted.
+
+ The names `rq' and `lq' are based on the use of |\lq| and |\rq|
+ in plain \TeX. An alternative definition for |\ttrq| would be
+ |\chardef\ttrq=13|, producing `{\tt\char13 }'.
+\code
+ |\def\ttlq{\lower0.125ex \hbox{\char18 }}
+ |\def\ttrq{\lower0.125ex \hbox{\char19 }}
+ |\def\tttilde{\lower0.5ex \hbox{\char`\~ }}
+ |\def\ttcircum{\lower0.5ex \hbox{\char`\^ }}
+\endcode
+ This makes the difference between |`'^~| and
+ {\tt`'\char`\^\char`\~}.\footnote*{It turns out that on some
+ \TeX\ systems, the CMTT font has been hacked to have an
+ ASCII-style reverse-apostrohe-cum-grave-accent as character~96
+ and a matching apostrophe-cum-acute-accent as charcter~39,
+ thereby correcting the defects that my definitions of |\ttlq|
+ and |\ttrq| address. But such modified fonts are
+ nonstandard---they should {\it not} be called CMTT---and should
+ be replaced.}
+
+\subsec{Defining a self-matching character for verbatim text}
+
+ A macro for defining a self-matching verbatim character (I~got
+ the idea of a macro for declaring verbatim characters from the
+ \LaTeX~2e documentation macros). |#1| must be a one-character
+ control sequence. If it isn't active already, then
+ |\declareactivechar| is applied to it first.
+\code
+ |\def\defverbatim#1{%
+ | \ifcat\noexpand#1\noexpand~\else \declareactivechar#1 \fi
+ | \begingroup \uccode`\~=`#1 \uppercase{\toksa={\endgroup
+ | \def~{%
+ | \leavevmode
+ | \begingroup \tt \setupverbatim
+ | \catcode`#1\active \let~\endgroup
+ | }%
+ | }}\the\toksa
+ |}
+\endcode
+ Note that there must be a font called |\tt| for it to switch to.
+ (The catcode of |#1| is set to 13 after calling |\setupverbatim|
+ because |#1| will be included in |\verbatimplains|.)
+
+ Finally, we define vertical bar as the conventional
+ self-matching verbatim-mode character.
+\code
+ |\defverbatim\|
+\smallbreak
+ |\hyphenchar\tentt=-1
+\endcode
+ Both |\defverbatim| and |\defineactivechar| have local scope.
+
+%}}} verbatim text
+%{{{ code sections
+%{{{ intro
+\section{Code sections}
+
+ The markers |\code| \dots |\endcode| mark code to be written to
+ the definition file. Each line starts with either "|" or "\|"
+ and finishes with the end of the line in the manuscript file.
+
+ Lines that start with "|" are written out as-is; no macro
+ expansion is allowed. This is how the vast majority of lines
+ are done.
+
+ Lines starting "\|" are expanded. This is so that things like
+ the current version ID (extracted from the RCS identification
+ line or set with |\def|) may be included in the code file.
+ Within such an expanded line, the following macros are defined:
+ $$\halign{\indent#\hfil&&\quad#\hfil\cr
+ |\%|& |%|& per cent sign&
+ |\{|& |{|& left brace&
+ |\}|& |}|& right brace\cr
+ |\\|& |\|& backslash&
+ |~|& \tt\char32 & space&
+ |\~|& |~|& tilde\cr
+ }
+ $$
+ (This list is probably incomplete.)
+%}}} intro
+%{{{ code file name
+
+\subsec{Setting the codefile name}
+
+ Before the first code section, the |\codefile{|\<file name>|}|
+ command specifies the code file. The last code section should
+ be followed by |\endcodefile|. Only one code file may be open
+ at a time.
+\code
+ |\newwrite\CODEwrite
+\smallbreak
+ |\def\codefile#1{
+ | \ifeof\CODEwrite\else \endcodefile \fi
+ | \def\thecodefile{#1} \openout\CODEwrite=#1
+ |}
+\smallbreak
+ |\def\endcodefile{
+ | \message{Code written on \thecodefile.}
+ | \closeout\CODEwrite
+ |}
+\endcode
+%}}} code file name
+%{{{ code sections
+
+\subsec{Code sections}
+
+ Switching to `code mode' is easy, because most of the work is
+ really done by the "|" and "\|" commands.
+
+\code
+ |\def\code{
+ | \smallskip
+ | \begingroup
+ | \let|\CODEline \let\|\CODElinex
+ | \let\{=\CODElb \let\}=\CODErb \let\\=\CODEbslash
+ | \def~{ } \let\~\CODEtilde
+ | \the\everycode
+ | \obeylines
+ |}
+\smallbreak
+ |\def\endcode{
+ | \smallbreak
+ | \endgroup
+ |}
+\endcode
+%}}} code sections
+%{{{ code lines
+\subsec{Code lines}
+
+ This is the definition for unexpanded code lines.
+\code
+ |\def\CODEline{%
+ | \begingroup % matched by \CODElinei
+ | \setupverbatim \catcode`\|\other
+ | \CODElinei
+ |}
+\endcode
+
+ In |\CODElinei|, We must redefine the characters (such as |`|)
+ that are active within verbatim text to expand to their
+ catcode-12 equivalents when they are written to the code file
+ currectly.
+
+ Since one of these is |^|, we temporarily give |@| the meaning
+ of |^| so that we may safely change the catcode of |^|.
+\code
+ |\begingroup\catcode`\'=\active \catcode`\`=\active
+ | \catcode\lq\@=\catcode\lq\^ \catcode\lq\^=\active
+ | \catcode\lq\@@M=\active \toksa={\endgroup %
+ | \def\CODElinei#1@@M{%
+ | \begingroup\let`\lq \let'\rq %
+ | \let^\CODEcircum \let~ \CODEtilde%
+ | \edef\tmp{#1}%
+ | \write\CODEwrite\expandafter{\tmp}%
+ | \endgroup %
+ | \indent\the\everycodeline #1\par %
+ | \endgroup % matches \CODEline
+ | }%
+ |}\the\toksa
+\endcode
+
+ The definition for |\CODElinex| (expanded code lines) is much
+ simpler:
+\code
+ |\begingroup\catcode`\^^M=13 \toksa={\endgroup %
+ | \def\CODElinex#1^^M{%
+ | \edef\tmp{\write\CODEwrite{#1}}\tmp %
+ | {\indent\the\everycodeline #1\par}%
+ | }%
+ |} \the\toksa
+\endcode
+%}}} code lines
+%{{{ catcode hacks
+\subsec{Macros for making category-12 characters}
+
+ For characters that are active in verbatim mode (like |`|), or
+ which must be specially generated in expanded code lines (such
+ as braces generated with {\tt\cs{\char123 }}), we have a
+ `|\CODE|-' macro that generates an explicit character token with
+ catcode~12.
+
+\code
+ |\begingroup\catcode`\/=0 \catcode`\\=\other /toksa={/endgroup
+ | /def/CODEbslash{\}
+ |}/the/toksa
+\smallbreak
+ |\begingroup\catcode`\^=\other \toksa={\endgroup
+ | \def\CODEcircum{^}
+ |}\the\toksa
+\smallbreak
+ |\begingroup\catcode`\~=\other \toksa={\endgroup
+ | \def\CODEtilde{~}
+ |}\the\toksa
+\smallbreak
+ |\begingroup\catcode`\%=\other \toksa={\endgroup
+ | \def\%{%}
+ |}\the\toksa
+\smallbreak
+ |\begingroup\catcode`\~=\other \toksa={\endgroup
+ | \def\CODEtilde{~}
+ |}\the\toksa
+\smallbreak
+ |\begingroup\catcode`\[=1 \catcode`\]=2
+ | \catcode`\{=\other \catcode`\}=\other
+ | \toksa=[\endgroup
+ | \def\CODElb[{] \def\CODErb[}]
+ |]\the\toksa
+\endcode
+%}}} catcode hacks
+%{{{ customization
+\subsec{Customization}
+
+ The token list register |\everycode| is expanded at the start of
+ every code section, the token list register |\everycodeline| at
+ the start of every code line. The default definitions select
+ typewriter font for the code listings, with each line numbered.
+\code
+ |\newtoks\everycode
+ |\newtoks\everycodeline
+\smallbreak
+ |\everycode{\tt \baselineskip=0.8\baselineskip \lineskiplimit=0pt }
+\smallbreak
+ |\newcount\lineno
+ |\everycodeline{\llap{$ \global\advance\lineno1
+ | \scriptstyle\the\lineno $\enspace}%
+ | \mark\expandafter{\the\lineno}}
+\endcode
+%}}} customization
+%}}} code sections
+%{{{ formating
+%{{{ intro
+\section{Layout}
+
+ The PDCCODE macros include enough basic formatting commands to
+ make a simple document---since this file needs to be
+ self-contained. The formatting is fairly primitive, so that
+ |pdccode.tex| will not be excessively long.
+
+ The text is set in the default plain \TeX\ fonts: 10-point
+ Computer Modern Roman. Titles are in CM Sans Serif Bold
+ Extended, headings in CMSS Demibold Condensed, and subheadings
+ in CMSS Italic: all of these are standard fonts which should be
+ available on all \TeX\ systems.
+
+ The line width is wide enough that code lines do not need to be
+ printed in a reduced font (which looks silly).
+
+ the first tokenm of a document is |\relax| and everything except
+ the initial |\input| and final |\bye| in the document is
+ enclosed in |\document|\dots|\enddocument|. This is so that
+ documents using the PDCCODE conventions can be embedded within a
+ another document which by redefining these tokens.
+\code
+ |\let\document\relax \let\enddocument\relax
+\endcode
+
+ I have to set some \TeX~3 parameters because we don't seem to
+ have definitions for them in the local version of |plain.tex|.
+\code
+ |\lefthyphenmin=3 \righthyphenmin=2 \errorcontextlines10000
+\endcode
+
+%}}} intro
+%{{{ layout
+\subsec{Layout}
+
+ The text width is wide enough for 72-character code lines.
+\code
+ |\parindent=2em \hsize=36\fontdimen6\tentt \advance\hsize\parindent
+\endcode
+ A largish left margin is used set---perhaps readers will find it
+ useful for writing comments.
+\code
+ |\hoffset=210mm \advance\hoffset-\hsize \advance\hoffset-25mm
+ |\newdimen\leftmargin \leftmargin=\hoffset \advance\leftmargin-25mm
+ |\advance\hoffset-1in
+\endcode
+
+ The vertical margins are set so that if the file is formatted
+ for A4 ($297\mm$) paper and fed into a driver which thinks it is
+ formatted for American Letter ($11\inch$) paper no information
+ will be lost. We allow for $7\mm$ unprintable area at the edges
+ of paper (this is reasonable for a laser printer), and for the
+ headline being $24\pt + 6\pt - 10\pt = 20\pt$ above the top of
+ the text. (The $6\pt$ allows for the height of the headline,
+ which is in 7-pt type.)
+\code
+ |\voffset=297mm \advance\voffset-11in
+ |\advance\voffset7mm \advance\voffset20pt
+ |\vsize=297mm \advance\vsize-2\voffset \advance\vsize-2\baselineskip
+ |\advance\voffset-1in
+\endcode
+
+ We use ragged-right (ranged-left) printing. (Readability
+ studies have indicated that ragged-right printing is, if
+ anything, easier to read than with both sides aligned.) To do
+ this we remove the stretch and shrink components of the font we
+ use, and make the right margin stretchable.
+\code
+ |\def\do#1{\fontdimen3#1=0pt \fontdimen4#1=0pt }
+ |\do\tenrm \do\tenit \do\tenbf
+\smallbreak
+ |\rightskip=0pt plus 2em minus 2pt \adjdemerits=0 \tolerance=500
+ |\parfillskip=0pt plus 0.8\hsize
+\endcode
+%}}} layout
+%{{{ title and headline
+\subsec{Title and headline}
+
+ The author and title info are printed at the top of the first
+ page---in lieu of a separate title page---and the title goes in
+ the headline of subsequent pages, followed by the version ID and
+ date as extracted from the RCS identification string. If the
+ file locker is non-empty (i.e., the file is being edited), an
+ `e' is appended to the version ID in the headline.
+\code
+ |\def\author#1{\def\theauthor{#1}} \author{P. Damian Cugley}
+\smallbreak
+ |\font\titlefont=cmssbx10 scaled \magstep3
+\smallbreak
+ |\def\title#1{
+ | \vglue2\baselineskip
+ | \begingroup \parindent-\leftmargin \hyphenpenalty10000 \titlefont
+ | #1\smallskip
+ | \endgroup
+ | \leftline{Version \fileversion,
+ | last changed \fileauthor\space \mungedate\filedate}
+ | \ifx\filelocker\empty\else
+ | \leftline{Edited by \filelocker\unskip\ \today}
+ | \fi
+ | \medskip
+ | \hrule \vskip1pt \hrule \vskip1pt \hrule \vskip1pt \hrule
+ | \medskip
+ | \rightline{\theauthor}
+ | \bigskip
+ | \headline{\hfil\global\headline{%
+ | \sevenbf \hskip-\leftmargin \themarks \hfil #1
+ | \fileversion
+ | \ifx\filelocker\empty
+ | \space\mungedate\filedate
+ | \else
+ | e\space\today
+ | \fi
+ | }}
+ |}
+\smallbreak
+ |\def\themarks{%
+ | \ifx\firstmark\empty\else
+ | \firstmark
+ | \ifx\firstmark\botmark \else --\botmark \fi
+ | \fi
+ |}
+\endcode
+
+ Some macros for printing the date. The |\mungedate| macro
+ converts from RCS's format (using slashes) to ISO format (using
+ short dashes).
+\code
+ |\def\today{\mungedate{\number\year/\twodigits\month/\twodigits\day}}
+ |\def\twodigits#1{\ifnum#1<10 0\fi \number#1}
+ |\def\mungedate#1{$ \textfont0=\font \mathcode`/="7B #1 $}
+\endcode
+
+%}}} title and author
+%{{{ sectioning
+\subsec{Sectioning}
+
+ The sectioning commands do no more than generate numbered
+ headings---there are no tables of contents or marks required.
+\code
+ |\font\secfont=cmssdc10 at 12pt
+ |\font\subsecfont=cmssi10
+\smallbreak
+ |\newcount\seccount
+ |\newcount\subseccount
+\smallbreak
+ |\def\section#1{%
+ | \advance\seccount1 \subseccount=0
+ | \bigbreak
+ | \begingroup
+ | \secfont \hyphenpenalty=10000 \tolerance=1000
+ | \rightskip=0pt plus 2em
+ | \noindent\llap{\number\seccount.\enspace}#1
+ | \medskip
+ | \endgroup
+ | \noindenttrue
+ |}
+\smallbreak
+ |\def\subsec#1{%
+ | \advance\subseccount1
+ | \medbreak
+ | \begingroup
+ | \subsecfont \hyphenpenalty=10000 \tolerance=1000
+ | \rightskip=0pt plus 2em
+ | \noindent\llap{\number\seccount.%
+ | \number\subseccount.\enspace}#1
+ | \nobreak\smallskip
+ | \endgroup
+ | \noindenttrue
+ |}
+\endcode
+
+ Here's a simple hack to remove the indentation of the first
+ paragraph following a section heading.
+\code
+ |\newif\ifnoindent
+\smallbreak
+ |\everypar{%
+ | \ifnoindent
+ | {\setbox0=\lastbox}\global\noindentfalse
+ | \fi
+ |}
+\endcode
+
+%}}} sectioning
+%{{{ footnotes
+\subsec{Footnotes}
+
+ Plain \TeX's footnote command is adjusted to use a new parameter
+ to specify the value of |\rightskip| in footnotes.\footnote*{The
+ default definition sets |\rightskip| to $0\pt$, which is
+ moderately disastrous given that spaces cannot stretch or
+ shrink.} It was the trickiness involved in changing definitions
+ like this that persuaded me to not use `|@|' characters in macro
+ files.
+\code
+ |\newskip\footnoterightskip \footnoterightskip=\rightskip
+\smallbreak
+ |\catcode`@=11
+ |\def\vfootnote#1{\insert\footins\bgroup
+ | \interlinepenalty\interfootnotelinepenalty
+ | \splittopskip\ht\strutbox % top baseline for broken footnotes
+ | \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ | \leftskip\z@skip \rightskip\footnoterightskip
+ | \spaceskip\z@skip \xspaceskip\z@skip \rm
+ | \textindent{#1}\footstrut\futurelet\next\fo@t}
+ |\catcode`@=11
+\endcode
+ This definition is a drop-in replacement for the one in {\it\TeX
+ book} Appendix~B (p.\thinspace363 in my copy).
+
+%}}} footnotes
+%{{{ abbrevs
+\subsec{Miscellaneous abbreviations}
+
+ The |\<| macro for writing the names of syntactic entities (as
+ \<foo>) is like in {\it\TeX book} Appendix~E. The |\cs| macro
+ prints a control sequence name; I use this where the easier
+ dodge of writing "|\foo|" won't work (e.g., in the argument to
+ another macro). Similarly |\arg| places its argument in
+ typewriter-style braces. The |\pt| macro works in maths mode.
+\code
+ |\def\<#1>{\leavevmode\hbox{$\langle$\it#1\/$\rangle$}}
+ |\def\cs#1{\leavevmode\hbox{\tt\char`\\#1}}
+ |\def\arg#1{\leavevmode\hbox{{\tt\char`\{}#1{\tt\char`\}}}}
+ |\def\pt{\,{\rm pt}} \def\em{\,{\rm em}} \def\mm{\,{\rm mm}}
+ |\def\inch{''}
+\endcode
+
+ To make a version of the \LaTeX\ logo that should work
+ acceptably with a range of fonts ({\it\LaTeX}, {\bf\LaTeX},
+ {\subsecfont\LaTeX}), I~first define a macro for raising letters
+ until they are flush with the prevailing cap height. I also
+ loosen up the `{\it\TeX}\/' logo (so that it also works with
+ sanserif fonts) and make it set the spacefactor to 1000 (to
+ override \TeX's assumption that a full stop following a capital
+ $X$ isn't the end of a sentence).
+\code
+ |\def\flushtop#1{%
+ | \leavevmode
+ | \begingroup
+ | \setbox0=\hbox{#1}\setbox2=\hbox{X}%
+ | \dimen0=\ht2 \advance\dimen0-\ht0
+ | \raise\dimen0 \box0
+ | \endgroup
+ |}
+\smallbreak
+ |\def\TeX{T\kern-0.1em \lower0.5ex \hbox{E}X\spacefactor1000 }
+ |\def\LaTeX{L\kern-0.1em \flushtop{a}\TeX}
+\endcode
+
+ Occasional paragraphs are written in italics and marked with
+ `note'.
+\notepar
+ The command says `notepar' not just `note' because in my macro
+ files I~use \/|\note| for numbered footnotes (\/{\rm \TeX book},
+ Exercise~15.12).\footnote*{Footnotes in |dtx| files are produced
+ with the plain |\footnote| command.}
+
+ Notes may occasionally be more than one paragraph long.
+\endnotepar
+\code
+ |\def\notepar{
+ | \smallskip
+ | \begingroup
+ | \leftskip2\parindent \advance\rightskip\parindent minus \parindent
+ | \noindent\kern-\parindent{\bf Note}\quad\it
+ | \ignorespaces
+ |}
+\smallbreak
+ |\def\endnotepar{
+ | \smallbreak
+ | \endgroup
+ |}
+\endcode
+%}}} abbrevs
+%}}} formatting
+
+\bigskip\noindent
+ The file is finished with an |\endinput| command; this can be
+ used by other prgorams to check that this file hasn't been
+ truncated by \TeX\ coming to a halt part-way through processing
+ the |dtx| file.
+\code
+ |\endinput
+\endcode
+\endcodefile
+\enddocument
+\bye
+%}}} pdccode
+
+%Local variables:
+%fill-prefix: " "
+%fold-folded-p: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdccode.tex b/macros/plain/contrib/pdcmac/pdccode.tex
new file mode 100644
index 0000000000..0f6ecc8fa2
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdccode.tex
@@ -0,0 +1,263 @@
+% pdccode.tex 1.6 1995/03/30 -- self-documenting TeX macros
+
+%%%@TeX-definition-file {
+%%% filename = "$texmf/tex/plain/pdcmac/pdccode.tex",
+%%% version = "1.6",
+%%% date = "1995/03/30",
+%%% package = "pdcmac 1.0",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "TeX, plain TeX, macros",
+%%% supported = "Maybe",
+%%% abstract = "Macros for documented TeX macros (DTX files).
+%%% This file was generated by running
+%%% plain TeX on pdccode.dtx",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+%%% Distribute pdccode.dtx only as part of the
+%%% package it came in.",
+%%% dependencies = "",
+%%% }
+
+\message{1.6 <pdc 1995/03/30>}
+
+\toksdef\toksa=0
+\def\rcs#1: #2,v #3 #4 #5 #6 #7 #8$#9\endrcs{
+ \def\filename{#2}
+ \def\fileversion{#3}
+ \def\filedate{#4}
+ \def\fileauthor{#6}
+ \def\filelocker{#8}
+}
+\def\declareactivechar#1{%
+ \toksa\expandafter{\verbatimplains\do#1}%
+ \edef\verbatimplains{\the\toksa }%
+ \catcode`#1\active
+}
+\def\verbatimplains{\do\\\do\{\do\}\do\_\do\$\do\#\do\&\do\%}
+\def\verbatimactives{\do\`\do\'\do\~\do\^\do\ }
+\chardef\other=12
+\newtoks\everyverbatim
+\bgroup \catcode`\^=13 \catcode`\'=13 \catcode`\`=13 \toksa={\egroup
+ \def\setupverbatim{%
+ \frenchspacing
+ \spaceskip0pt \xspaceskip0pt % use spacing of font
+ \def\do##1{\catcode\lq##112 }\verbatimplains
+ \def\do##1{\catcode\lq##1\active }\verbatimactives
+ \let`\ttlq \let'\ttrq
+ \let~\tttilde \let^\ttcircum
+ \the\everyverbatim
+ }
+}\the\toksa
+\def\ttlq{\lower0.125ex \hbox{\char18 }}
+\def\ttrq{\lower0.125ex \hbox{\char19 }}
+\def\tttilde{\lower0.5ex \hbox{\char`\~ }}
+\def\ttcircum{\lower0.5ex \hbox{\char`\^ }}
+\def\defverbatim#1{%
+ \ifcat\noexpand#1\noexpand~\else \declareactivechar#1 \fi
+ \begingroup \uccode`\~=`#1 \uppercase{\toksa={\endgroup
+ \def~{%
+ \leavevmode
+ \begingroup \tt \setupverbatim
+ \catcode`#1\active \let~\endgroup
+ }%
+ }}\the\toksa
+}
+\defverbatim\|
+\hyphenchar\tentt=-1
+\newwrite\CODEwrite
+\def\codefile#1{
+ \ifeof\CODEwrite\else \endcodefile \fi
+ \def\thecodefile{#1} \openout\CODEwrite=#1
+}
+\def\endcodefile{
+ \message{Code written on \thecodefile.}
+ \closeout\CODEwrite
+}
+\def\code{
+ \smallskip
+ \begingroup
+ \let|\CODEline \let\|\CODElinex
+ \let\{=\CODElb \let\}=\CODErb \let\\=\CODEbslash
+ \def~{ } \let\~\CODEtilde
+ \the\everycode
+ \obeylines
+}
+\def\endcode{
+ \smallbreak
+ \endgroup
+}
+\def\CODEline{%
+ \begingroup % matched by \CODElinei
+ \setupverbatim \catcode`\|\other
+ \CODElinei
+}
+\begingroup\catcode`\'=\active \catcode`\`=\active
+ \catcode\lq\@=\catcode\lq\^ \catcode\lq\^=\active
+ \catcode\lq\@@M=\active \toksa={\endgroup %
+ \def\CODElinei#1@@M{%
+ \begingroup\let`\lq \let'\rq %
+ \let^\CODEcircum \let~ \CODEtilde%
+ \edef\tmp{#1}%
+ \write\CODEwrite\expandafter{\tmp}%
+ \endgroup %
+ \indent\the\everycodeline #1\par %
+ \endgroup % matches \CODEline
+ }%
+}\the\toksa
+\begingroup\catcode`\^^M=13 \toksa={\endgroup %
+ \def\CODElinex#1^^M{%
+ \edef\tmp{\write\CODEwrite{#1}}\tmp %
+ {\indent\the\everycodeline #1\par}%
+ }%
+} \the\toksa
+\begingroup\catcode`\/=0 \catcode`\\=\other /toksa={/endgroup
+ /def/CODEbslash{\}
+}/the/toksa
+\begingroup\catcode`\^=\other \toksa={\endgroup
+ \def\CODEcircum{^}
+}\the\toksa
+\begingroup\catcode`\~=\other \toksa={\endgroup
+ \def\CODEtilde{~}
+}\the\toksa
+\begingroup\catcode`\%=\other \toksa={\endgroup
+ \def\%{%}
+}\the\toksa
+\begingroup\catcode`\~=\other \toksa={\endgroup
+ \def\CODEtilde{~}
+}\the\toksa
+\begingroup\catcode`\[=1 \catcode`\]=2
+ \catcode`\{=\other \catcode`\}=\other
+ \toksa=[\endgroup
+ \def\CODElb[{] \def\CODErb[}]
+]\the\toksa
+\newtoks\everycode
+\newtoks\everycodeline
+\everycode{\tt \baselineskip=0.8\baselineskip \lineskiplimit=0pt }
+\newcount\lineno
+\everycodeline{\llap{$ \global\advance\lineno1
+ \scriptstyle\the\lineno $\enspace}%
+ \mark\expandafter{\the\lineno}}
+\let\document\relax \let\enddocument\relax
+\lefthyphenmin=3 \righthyphenmin=2 \errorcontextlines10000
+\parindent=2em \hsize=36\fontdimen6\tentt \advance\hsize\parindent
+\hoffset=210mm \advance\hoffset-\hsize \advance\hoffset-25mm
+\newdimen\leftmargin \leftmargin=\hoffset \advance\leftmargin-25mm
+\advance\hoffset-1in
+\voffset=297mm \advance\voffset-11in
+\advance\voffset7mm \advance\voffset20pt
+\vsize=297mm \advance\vsize-2\voffset \advance\vsize-2\baselineskip
+\advance\voffset-1in
+\def\do#1{\fontdimen3#1=0pt \fontdimen4#1=0pt }
+\do\tenrm \do\tenit \do\tenbf
+\rightskip=0pt plus 2em minus 2pt \adjdemerits=0 \tolerance=500
+\parfillskip=0pt plus 0.8\hsize
+\def\author#1{\def\theauthor{#1}} \author{P. Damian Cugley}
+\font\titlefont=cmssbx10 scaled \magstep3
+\def\title#1{
+ \vglue2\baselineskip
+ \begingroup \parindent-\leftmargin \hyphenpenalty10000 \titlefont
+ #1\smallskip
+ \endgroup
+ \leftline{Version \fileversion,
+ last changed \fileauthor\space \mungedate\filedate}
+ \ifx\filelocker\empty\else
+ \leftline{Edited by \filelocker\unskip\ \today}
+ \fi
+ \medskip
+ \hrule \vskip1pt \hrule \vskip1pt \hrule \vskip1pt \hrule
+ \medskip
+ \rightline{\theauthor}
+ \bigskip
+ \headline{\hfil\global\headline{%
+ \sevenbf \hskip-\leftmargin \themarks \hfil #1
+ \fileversion
+ \ifx\filelocker\empty
+ \space\mungedate\filedate
+ \else
+ e\space\today
+ \fi
+ }}
+}
+\def\themarks{%
+ \ifx\firstmark\empty\else
+ \firstmark
+ \ifx\firstmark\botmark \else --\botmark \fi
+ \fi
+}
+\def\today{\mungedate{\number\year/\twodigits\month/\twodigits\day}}
+\def\twodigits#1{\ifnum#1<10 0\fi \number#1}
+\def\mungedate#1{$ \textfont0=\font \mathcode`/="7B #1 $}
+\font\secfont=cmssdc10 at 12pt
+\font\subsecfont=cmssi10
+\newcount\seccount
+\newcount\subseccount
+\def\section#1{%
+ \advance\seccount1 \subseccount=0
+ \bigbreak
+ \begingroup
+ \secfont \hyphenpenalty=10000 \tolerance=1000
+ \rightskip=0pt plus 2em
+ \noindent\llap{\number\seccount.\enspace}#1
+ \medskip
+ \endgroup
+ \noindenttrue
+}
+\def\subsec#1{%
+ \advance\subseccount1
+ \medbreak
+ \begingroup
+ \subsecfont \hyphenpenalty=10000 \tolerance=1000
+ \rightskip=0pt plus 2em
+ \noindent\llap{\number\seccount.%
+ \number\subseccount.\enspace}#1
+ \nobreak\smallskip
+ \endgroup
+ \noindenttrue
+}
+\newif\ifnoindent
+\everypar{%
+ \ifnoindent
+ {\setbox0=\lastbox}\global\noindentfalse
+ \fi
+}
+\newskip\footnoterightskip \footnoterightskip=\rightskip
+\catcode`@=11
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\footnoterightskip
+ \spaceskip\z@skip \xspaceskip\z@skip \rm
+ \textindent{#1}\footstrut\futurelet\next\fo@t}
+\catcode`@=11
+\def\<#1>{\leavevmode\hbox{$\langle$\it#1\/$\rangle$}}
+\def\cs#1{\leavevmode\hbox{\tt\char`\\#1}}
+\def\arg#1{\leavevmode\hbox{{\tt\char`\{}#1{\tt\char`\}}}}
+\def\pt{\,{\rm pt}} \def\em{\,{\rm em}} \def\mm{\,{\rm mm}}
+\def\inch{''}
+\def\flushtop#1{%
+ \leavevmode
+ \begingroup
+ \setbox0=\hbox{#1}\setbox2=\hbox{X}%
+ \dimen0=\ht2 \advance\dimen0-\ht0
+ \raise\dimen0 \box0
+ \endgroup
+}
+\def\TeX{T\kern-0.1em \lower0.5ex \hbox{E}X\spacefactor1000 }
+\def\LaTeX{L\kern-0.1em \flushtop{a}\TeX}
+\def\notepar{
+ \smallskip
+ \begingroup
+ \leftskip2\parindent \advance\rightskip\parindent minus \parindent
+ \noindent\kern-\parindent{\bf Note}\quad\it
+ \ignorespaces
+}
+\def\endnotepar{
+ \smallbreak
+ \endgroup
+}
+\endinput
diff --git a/macros/plain/contrib/pdcmac/pdccode2.tex b/macros/plain/contrib/pdcmac/pdccode2.tex
new file mode 100644
index 0000000000..513600e9cd
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdccode2.tex
@@ -0,0 +1,292 @@
+%{{{ pdccode.tex -- used to make self-documenting TeX code
+%{{{ rcs
+
+%%% version: $Revision: 1.2 $
+
+% A simpler and less featureful system than the LaTeX "doc" package is used.
+% Lines between \code and \endcode are printed to a file
+% set with the \codefile{xx} command. They are also listed
+% "verbatim"
+
+\def\rcs#1: #2,v #3 #4 #5 #6 #7\endrcs{
+ \def\filename{#2}
+ \def\fileversion{#3}
+ \def\filedate{#4}
+ \def\fileauthor{#6}
+}
+
+\rcs$Id: pdccode.tex,v 1.2 1994/12/03 16:26:00 pdc Exp pdc $\endrcs
+\message{\fileversion\space<\fileauthor\space\filedate>}
+%}}} rcs
+%{{{ misc macros
+
+\errorcontextlines10000
+\def\expcs#1#2{\expandafter#1\csname#2\endcsname}
+\def\noexpcs{\expcs\noexpand}
+
+%}}} misc macros
+%{{{ verbatim text
+
+%% Define verbatim text using |...|
+% This is used in the commentary
+
+% Tell the verbatim macros that #1 is an active char; this
+% makes sure that the character will be catcoded appropriately
+% when in verbatim mode. #1 should be a somethign that will
+% wortk after "`".
+\def\declareactivechar#1{%
+ \toks0=\expandafter{\verbatimplains\do#1}%
+ \edef\verbatimplains{\the\toks0 }%
+ \catcode`#1=13
+}
+
+\def\verbatimplains{\do\\\do\{\do\}\do\_\do\$\do\#\do\&\do\%} % \{}_$#&%
+\def\verbatimactives{\do\`\do\'\do\~\do\^\do\ } % `'~^<space>
+
+% \setupverbatim -- makes almost all special characters catcode 12
+% except for ` ' ~ ^, which produce slightly lowered glyphs
+\bgroup \catcode`\^=13 \catcode`\'=13 \catcode`\`=13 \toks0={\egroup
+ \def\setupverbatim{%
+ \frenchspacing
+ \spaceskip0pt \xspaceskip0pt % use spacing of font
+ \def\do##1{\catcode\lq##1=12 }\verbatimplains
+ \def\do##1{\catcode\lq##1=13 }\verbatimactives
+ \let`=\ttlq \let'=\ttrq
+ \let~=\tttilde \let^=\ttcircum
+ \the\everyverbatim
+ \hyphenchar\font=-1
+ }
+}\the\toks0
+
+\def\ttlq{\lower0.125ex \hbox{\char18 }}
+\def\ttrq{\lower0.125ex \hbox{\char19 }}
+\def\tttilde{\lower0.5ex \hbox{\char`\~ }}
+\def\ttcircum{\lower0.5ex \hbox{\char`\^ }}
+
+\newtoks\everyverbatim % expanded at start of every verbatim text
+
+
+% Define #1 as a self-matching verbatim character.
+% #1 must be a one-char control-sequence
+\def\defverbatim#1{%
+ \declareactivechar#1
+ \begingroup \uccode`\~=`#1 \uppercase{\toks0={\endgroup
+ \def~{%
+ \leavevmode
+ \begingroup % matched by closing char
+ \tt
+ \setupverbatim
+ \catcode`#1=13 \let~=\endgroup
+ }%
+ }}\the\toks0
+}
+
+\declareactivechar\| \defverbatim\|
+%}}} verbatim text
+%{{{ writing code sections
+
+% \docodefiles is \do{xx}\do{yy} for a set of file identifiers
+% Each file identifier xx has \ifxx, \xxfalse, \xxtrue, \xxwrite
+% I am greatly hampered by the fact that \newwrite and \newif are \outer!
+\def\docodefiles{}
+
+\def\codefile#1#2{
+ \toks0=\expandafter{\docodefiles\do{#1}}
+ \edef\docodefiles{\the\toks0 }
+ \expcs\CODEnewwrite{#1write}
+ \CODEnewif{#1} \csname#1true\endcsname
+ \expcs\openout{#1write}=#2
+ \expcs\def{filename#1}{#2}
+}
+\catcode`@=11
+\def\CODEnewwrite#1{\alloc@7\write\chardef\sixt@@n #1}
+\catcode`@=12
+\def\CODEnewif#1{%
+ \expcs\edef{#1true}{\let\noexpcs{if#1}\noexpand\iftrue}
+ \expcs\edef{#1false}{\let\noexpcs{if#1}\noexpand\iffalse}
+ \csname#1false\endcsname
+}
+
+\def\allfilesfalse{\begingroup
+ \def\do##1{\global\csname##1false\endcsname}\docodefiles
+ \endgroup
+}
+\def\allfilestrue{\begingroup
+ \def\do##1{\global\csname##1true\endcsname}\docodefiles
+ \endgroup
+}
+
+
+\def\endcodefile#1{
+ \expcs\closeout{#1write}
+ \csname #1false\endcsname
+ \message{Code written to \csname filename#1\endcsname.}
+}
+
+\def\code{
+ \smallskip
+ \begingroup
+ \let|\CODEline % code line without expansion
+ \let\|\CODElinex % code line with expansion
+ \let\{=\CODElb \let\}=\CODErb \let\\=\CODEbslash \def~{ }
+ \the\everycode
+ \obeylines
+}
+\def\endcode{
+ \smallbreak
+ \endgroup
+}
+\def\CODEline{%
+ \begingroup
+ \setupverbatim
+ \catcode`\|=12
+ \CODElinei
+}
+
+
+% In \CODFElinei, We must redefine the characters that are active
+% within verbatim text to expand to their catcode-12 equivalents when
+% they are written to the code file. Since one of these is ^, we
+% temporarily give @ the meaning of ^ so that we may safely munge the
+% catcode of ^.
+
+\begingroup \catcode`\'=13 \catcode`\`=13
+ \catcode\lq\@=\catcode\lq\^ \catcode\lq\^=13
+ \catcode\lq\@@M=13 \toks0={\endgroup%
+ \def\CODElinei#1@@M{%
+ \begingroup\let`\lq \let'\rq \let^\CODEcircum \let~\CODEtilde %
+ \edef\tmp{{#1}}%
+ \def\do##1{\csname if##1\endcsname %
+ \expcs\write{##1write}\tmp \fi %
+ }\docodefiles %
+ \endgroup
+ \indent\the\everycodeline #1\par %
+ \endgroup %
+ }%
+ \def\CODElinex#1@@M{%
+ \def\do##1{\csname if##1\endcsname %
+ \edef\filename{\csname filename##1\endcsname} %
+ \edef\tmp{{#1}} %
+ \expcs\write{##1write}\tmp \fi %
+ }\docodefiles %
+ \def\filename{\<filename>}%
+ {\indent\the\everycodeline #1\par}%
+ }%
+}\the\toks0
+
+% Make macros which expand to various special characters, with catcode 12:
+\begingroup\catcode`\/=0 \catcode`\\=12 /toks0={/endgroup
+ /def/CODEbslash{\}
+}/the/toks0
+\begingroup\catcode`\^=12 \toks0={\endgroup
+ \def\CODEcircum{^}
+}\the\toks0
+\begingroup\catcode`\~=12 \toks0={\endgroup
+ \def\CODEtilde{~}
+}\the\toks0
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \def\%{%}
+}\the\toks0
+\begingroup\catcode`\[=1 \catcode`\]=2 \catcode`\{=12 \catcode`\}=12 \toks0=[\endgroup
+ \def\CODElb[{] \def\CODErb[}]
+]\the\toks0
+\newtoks\everycode
+\newtoks\everycodeline
+
+\def\filenamesanssuffix{\expandafter\CODEsanssuffix\filename.\CODEsanssuffix}
+\def\CODEsanssuffix#1.#2\CODEsanssuffix{#1}
+%}}} writing code sections
+%{{{ layout
+
+
+\newcount\seccount
+\newcount\subseccount
+\font\secfont=cmssdc10 at 12pt
+\font\subsecfont=cmssi10
+
+\def\section#1{%
+ \advance\seccount1 \subseccount=0
+ \bigbreak
+ \begingroup
+ \secfont \hyphenpenalty=10000 \tolerance=1000
+ \parskip=0pt \parindent=0pt \rightskip=0pt plus 2em
+ \number\seccount. #1
+ \medskip
+ \endgroup
+}
+
+\def\subsec#1{%
+ \advance\subseccount1
+ \medbreak
+ \begingroup
+ \subsecfont \hyphenpenalty=10000 \tolerance=1000
+ \parskip=0pt \parindent=0pt \rightskip=0pt plus 2em
+ \number\seccount.\number\subseccount. #1
+ \nobreak\smallskip
+ \endgroup
+}
+
+\def\notepar{
+ \smallskip
+ \begingroup
+ \narrower\noindent\hang
+ {\bf Note}\quad\it
+ \ignorespaces
+}
+\def\endnotepar{
+ \smallbreak
+ \endgroup
+}
+
+% Leave a largish right margin; eventually marginalia will go
+% there. Allow enough line length for 80-character code lines. This
+% makes the text lines a bit longer than I'd like but I don't want to
+% have to resort to having code lines in a smaller font.
+\hsize=40em \advance\hsize\parindent
+
+% (297mm-11in) is the strip of paper lost if printed on USA
+% letter paper; allow another bit for some laserprinters that
+% can't print to the edge of the paper.
+\voffset=297mm \advance\voffset by -11in \advance\voffset by 0.25in
+\vsize=297mm \advance\vsize-2\voffset \advance\vsize-2\baselineskip
+\advance\voffset-1in
+
+\def\do#1{\fontdimen3#1=0pt \fontdimen4#1=0pt }
+\do\tenrm \do\tenit \do\tenbf
+
+\rightskip=0pt plus 2em minus 2pt
+\tolerance=500
+\lefthyphenmin=3 \righthyphenmin=2
+
+%}}} layout
+%{{{ abbrevs
+
+\def\<#1>{\leavevmode\hbox{$\langle$\it#1\/$\rangle$}}
+\def\cs#1{\leavevmode\hbox{\tt\char`\\#1}}
+\def\arg#1{\leavevmode\hbox{{\tt\char`\{}#1{\tt\char`\}}}}
+\def\pt{\,{\rm pt}}
+\def\flushtop#1{%
+ \leavevmode
+ {%
+ \setbox0=\hbox{#1}\setbox2=\hbox{X}%
+ \dimen0=\ht2 \advance\dimen0-\ht0
+ \raise\dimen0 \box0
+ }%
+}
+\def\TeX{T\kern-0.1em\lower0.5ex\hbox{E}X}
+\def\LaTeX{L\kern-0.167em\flushtop{a}\TeX}
+
+%}}} abbrev
+\newskip\footnoterightskip \footnoterightskip=\rightskip
+\catcode`@=11
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\footnoterightskip
+ \spaceskip\z@skip \xspaceskip\z@skip \rm
+ \textindent{#1}\footstrut\futurelet\next\fo@t}
+\catcode`@=11
+
+
+%}}} pdccode.tex
diff --git a/macros/plain/contrib/pdcmac/pdcfmt2.dtx b/macros/plain/contrib/pdcmac/pdcfmt2.dtx
new file mode 100644
index 0000000000..918a960d64
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcfmt2.dtx
@@ -0,0 +1,1194 @@
+% pdcfmt2.dtx -- documentation & source for pdcfmt2.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCFMT2 -- Formatting Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcfmt2.dtx",
+%%% version = "$Revision: 2.4 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/04/06 11:55:16 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdcfmt2.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcfmt2
+%{{{ preamble
+
+\relax
+\input pdccode
+\document
+\rcs$Id: pdcfmt2.dtx,v 2.4 1995/04/06 11:55:16 pdc Exp $\endrcs
+
+\def\example{
+ \smallskip\hrule\nobreak\smallskip
+ \dimen0=\hsize \advance\dimen0-1pc \divide\dimen0 2
+ \halign to \hsize\bgroup\vtop{\tt\def~{\hfil\break} \def\\{\char`\\\relax} \hsize=\dimen0 ##}\tabskip=0pt plus 1fil&
+ \vtop{\hsize=\dimen0 ##}\tabskip=0pt\cr
+}
+\def\endexample{
+ \crcr\egroup
+ \nobreak\smallskip\hrule\smallskip
+}
+
+\codefile{pdcfmt2.tex}
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{PDCFMT2---Formatting Macros}
+\section{Introduction}
+
+ This document describes |pdcfmt2.tex|, a collection of
+ formatting macros for plain \TeX\ documents. For example, it
+ defines commands for making bulleted lists, verbatim text, and
+ generic headings. For longer documents, a higher-level `style
+ file' like |pdccmdoc.tex| will define commands to start sections
+ and generate a table of contents and so on.
+
+ The definitions file and the printed documentation are both in
+ |pdcfmt2.dtx|, a `documented \TeX\ macros' file\footnote*{The
+ \LaTeX~2e distribution uses files with the `|dtx|' suffix for
+ similar purposes.} which, when processed by plain \TeX,
+ generates a fresh copy of |pdcfmt2.tex| in the current directory
+ in addition to the |dvi| file. This ensures that the printed
+ documentation and the code it describes are identical. The
+ |dtx| file uses the macros in |pdccode.tex|.
+
+ The name of the macros file ends in `-|2|' to prevent confusion
+ with |pdcfmt.tex| version 1.1.10, with which it is slightly
+ incompatible.
+
+%}}} introduction
+%{{{ File identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+
+\code
+ \|\% pdcfmt2.tex \fileversion~\filedate~-- macros for formatting
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcfmt2.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Formatting macros for plain TeX documents.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+
+%}}} getting started
+%{{{ internal
+
+\section{Internal definitions}
+
+ Most internal control sequence names will start with `|FMT|'.
+ Here are a few miscellaneous definitions used to save a token
+ here or there.
+
+ I will often use |\toksa| to create definitions containing
+ characters with unusual catcodes. The idiom is
+$$\halign{\indent#\hfil\cr
+ |\begingroup| \<assignments> |\toksa={\endgroup|\cr
+ \quad\<definitions>\cr
+ |} \the\toksa|\cr
+}$$
+ When |\toksa| is expanded, it closes the group (undoing the
+ \<assignments>) but then scans the \<definition> using the
+ catcodes set by \<assignments>. (In extreme cases, the
+ definition of |\toksa| might be enclosed in |\uppercase|, to get
+ strange characters into a definiton.)
+
+ The advantage of this idiom over using |\gdef| in a group is
+ that the definitions need not be global. Avoiding global
+ assignments makes it more likely that the document will be
+ embeddable in other documents.
+
+ Using |\toksa| instead of |\toks0| is more robust when using
+ |\uppercase|, because digits are be given |\uccode| values by
+ |maamac.tex|.
+\code
+ |\toksdef\toksa=0
+ |\chardef\other=12
+\endcode
+
+%}}} internal
+%{{{ verbatim text
+
+\section{Verbatim text}
+
+ `Verbatim' text means text designed to match the ASCII
+ characters in the manuscript file as closely as possible. It
+ kis most often used in computer manuals, where commands typed to
+ a computer or the contents of text files are to be presented.
+ Within verbatim text, most of \TeX's special characters are
+ temporarily disabled.
+
+\subsec{Lists of active chararcters}
+
+ The verbatim text macros need to know if any characters have
+ been made special apart from the usual ones. This command tells
+ the verbatim macros that |#1| is an active char; in addition to
+ setting its catcode, this makes sure that the character will be
+ re-catcoded appropriately when in verbatim mode. |#1| should be
+ a something that will work after `|`|'; usually this means a
+ one-character control sequence.
+\code
+ |\def\declareactivechar#1{%
+ | \toksa\expandafter{\verbatimplains\do#1}%
+ | \edef\verbatimplains{\the\toksa }%
+ | \catcode`#1\active
+ |}
+\endcode
+
+ Two list macros in the style of |\dospecials| are defined. The
+ first is for characters that must be set to catcode~12, such as
+ `|\|', `|{|', `|}|', `|_|', `|$|', `|#|', `|&|', and `|%|'. The
+ other is for a few characters that are given catcode~13, such as
+ `|`|', `|'|', `|~|', `|^|' and SP.
+\code
+ |\def\verbatimplains{\do\\\do\{\do\}\do\_\do\$\do\#\do\&\do\%}
+ |\def\verbatimactives{\do\-\do\`\do\'\do\~\do\^\do\ }
+\smallbreak
+ |\chardef\other=12
+\endcode
+
+\subsec{Setting up verbatim mode}
+
+ This is a macro common to various verbatim text modes. The
+ default spacing of whatever font is used, without any
+ adjustments of spacefactor for punctuation. The characters
+ `|`|', `|'|', `|~|', and `|^|' are produce slightly lowered
+ glyphs.
+\code
+ |\newtoks\everyverbatim
+\smallbreak
+ |\bgroup \catcode`\-=13\catcode`\^=13 \catcode`\'=13 \catcode`\`=13 \toksa={\egroup
+ | \def\setupverbatim{%
+ | \frenchspacing
+ | \spaceskip0pt \xspaceskip0pt % use spacing of font
+ | \def\do##1{\catcode\lq##112 }\verbatimplains
+ | \def\do##1{\catcode\lq##1\active }\verbatimactives
+ | \let`\ttlq \let'\ttrq
+ | \let~\tttilde \let^\ttcircum \let-\ttminus
+ | \the\everyverbatim
+ | }
+ |}\the\toksa
+\endcode
+
+ Here are the definitions for the munged glyphs. These are only
+ necessary in CM Typewriter; when using a PostScript font,
+ different definitions would be necessary.
+
+ The names `rq' and `lq' are based on the use of |\lq| and |\rq|
+ in plain \TeX. An alternative definition for |\ttrq| would be
+ |\chardef\ttrq="0D|, producing `{\tt\char"0D }'.
+\code
+ |\def\ttlq{\lower0.125ex \hbox{\char18 }}
+ |\def\ttrq{\lower0.125ex \hbox{\char19 }}
+ |\def\tttilde{\lower0.5ex \hbox{\char`\~ }}
+ |\def\ttcircum{\lower0.5ex \hbox{\char`\^ }}
+ |\def\ttminus{-}
+\endcode
+ This makes the difference between |`'^~| and
+ {\tt`'\char`\^\char`\~}.
+
+ The macro |\ttminus| is included because it is needed for
+ PostScript font support.
+
+\subsec{Defining a self-matching character for verbatim text}
+
+ A macro for defining a self-matching verbatim character (I~got
+ the idea of a macro for declaring verbatim characters from the
+ \LaTeX~2e documentation macros). |#1| must be a one-character
+ control sequence. If it isn't active already, then
+ |\declareactivechar| is applied to it first.
+\code
+ |\def\defverbatim#1{%
+ | \ifcat\noexpand#1\noexpand~\else \declareactivechar#1 \fi
+ | \begingroup \uccode`\~=`#1 \uppercase{\toksa={\endgroup
+ | \def~{%
+ | \leavevmode
+ | \begingroup \tt \setupverbatim
+ | \catcode`#1\active \let~\endgroup
+ | }%
+ | }}\the\toksa
+ |}
+\endcode
+ Note that there must be a font called |\tt| for it to switch to.
+ (The catcode of |#1| is set to 13 after calling |\setupverbatim|
+ because |#1| will be included in |\verbatimplains|.)
+
+ Finally, we define vertical bar as the conventional
+ self-matching verbatim-mode character.
+\code
+ |\defverbatim\|
+\endcode
+ Both |\defverbatim| and |\defineactivechar| have local scope.
+
+\subsec{List a file verbatim}
+
+ This does something similar to the |lines| environment (see
+ below), except here an external file is read in verbatim (see
+ {\it\TeX book} Appendix~D, Section~3). The
+ |\startlinenumbering| macro may be put in the |\everylisting|
+ token register to create a listing with numbered lines.
+\code
+ |\newtoks\everylisting
+\smallbreak
+ |\def\listfile#1{
+ | \medskip
+ | \begingroup
+ | \parindent=0pt \parskip=0pt
+ | \def\par{\null\endgraf}\obeylines
+ | \setupverbatim \maketabstab
+ | \tt \the\everylisting
+ | \input#1
+ | \endgroup
+ | \medskip\noindent\ignorespaces
+ |}
+\endcode
+ This macro redefines character |^^I| (horizontal tab) to produce
+ the equivalent of eight spaces. This isn't quite the same as
+ what HTs are used for with UNIX files, but it works adequately
+ if all your tabs are at the start of the line (i.e., if tabs are
+ used only for indentation, not to make tables).
+\code
+ |{\catcode`\^^I=\active
+ | \gdef\maketabstab{\catcode`\^^I\active \def^^I{\hskip 4em}}
+ |}
+\endcode
+
+%}}} verbatim text
+%{{{ everypar
+
+\section{Everypar hacks}
+
+\subsec{Parameters}
+
+ The following may be set by higher-level macros to change the
+ apearance of the next paragraph.
+
+ If the flag |\ifnoindent| is set, then the indentation of the
+ next paragraph will be removed (by deleting the box added by
+ \TeX's |\indent| primitive). Thus |\noindenttrue| works like
+ |\noindent|, except that there may be blank lines between
+ |\noindenttrue| and the paragraph it affects.
+\code
+ |\newif\ifnoindent
+\endcode
+ This flag is reset globally once it has had its effect.
+
+ If the box |\parbox| is non-void, then its value is typeset in
+ the left margin of the next paragraph. (At present this does an
+ implicit |\noindenttrue| but later versions may allow the next
+ paragraph to be indented.) The righthand edge of the parbox
+ will be distance |\parboxsep| from the left edge of the text
+ area.
+\code
+ |\newbox\parbox
+ |\newdimen\parboxsep \parboxsep=1pc
+\endcode
+
+\subsec{Setting \cs{everypar}}
+\code
+ |\everypar={%
+ | \ifvoid\parbox
+ | \ifnoindent {\setbox0=\lastbox}\global\noindentfalse \fi
+ | \else
+ | {\setbox0=\lastbox}\global\noindentfalse
+ | \dp\parbox=0pt
+ | \hbox to 0pt{\hss \box\parbox \hskip\parboxsep}%
+ | \fi
+ |}
+\endcode
+%}}} everypar
+%{{{ environment intrinsics
+
+\section{Environment infrastructure}
+
+ An environment is a structure used to typeset textual elements
+ consisting of several \TeX\ paragraphs (usually embedded within
+ one conceptual paragraph). It is a concept like \LaTeX\
+ environments, but with the syntax changed to be more
+ plain-\TeX-like.
+
+ Since environments have one argument that may span many lines in
+ the file we use more verbose brackets than |{|--|}| to make it
+ easier to spot where they begin and end. This is a structure in
+ a document looking like this:
+ $$
+\vbox{\halign{#\hfil\cr
+ |\|\<name>\<args>\cr
+ \quad\dots\cr
+ |\end|\<name>\cr
+}}
+ $$
+
+ A new environment is defined by defining macros called
+ |\|\<name> and |\end|\<name>. Within the |\|\<name> and
+ |\end|\<name> macros, calls to |\beginthe| and |\endthe| are
+ used to check that environments are nested properly.
+\code
+ |\def\beginthe#1{%
+ | \begingroup\def\PDCFMTblockname{#1}%
+ |}
+\smallbreak
+ |\def\endthe#1{%
+ | \def\tmp{#1}%
+ | \ifx\tmp\PDCFMTblockname
+ | \endgroup
+ | \else
+ | \errmessage{You should have said \string\endthe{\blockname}}%
+ | \fi
+ |}
+\endcode
+
+\subsec{A generic end-of-environment macro}
+
+ This macro does a |\smallskip| (if there is not already a larger
+ skip on the current list), and sets the `noindent' flag so that
+ the following \TeX\ paragraph is not indented.
+\code
+ |\def\PDCFMTendenv#1{
+ | \smallskip
+ | \endthe{#1}
+ | \global\noindenttrue
+ |}
+\endcode
+
+ Where an environment describes text that should be indented,
+ usually |\parindent| should be used (for consistency). If
+ |\parindent| is zero we still want to indent the text, and we
+ use |\envindent| to describe how much to indent it by.
+\code
+ |\newdimen\envindent \envindent=1pc
+\smallskip
+ |\def\PDCFMTindent{%
+ | \ifdim\parindent>0pt
+ | \parindent
+ | \else
+ | \envindent
+ | \fi
+ |}
+\endcode
+
+%}}} environment intrinsics
+%{{{ quotations
+
+\section{Quotations}
+
+ This is a simple environment, with the left margin indented and
+ the first paragraph in the quotetd text not indented.
+\example
+ It is ... who said~
+ \\quotation~
+ \indent Shookum hip rallo dyne.~
+ \\endquotation~
+ Indeed, it burgle gurgler.
+&
+ It is interesting to remember the words of
+ Spencone Tipeth, who said
+ \smallskip\leftskip\parindent \noindent
+ Shookum hip rallo
+ dyne.\smallskip\leftskip0pt \noindent Indeed, it burgle gurgler.
+\endexample
+The token
+ register |\everyquotation| might be used to arrange for all
+ quotations to be in smaller type with
+ $$\hbox{|\everyquotation={\smallfonts}|}$$
+\code
+ |\newtoks\everyquotation
+\smallbreak
+ |\def\quotation{
+ | \smallskip
+ | \beginthe{quotation}
+ | \advance\leftskip\PDCFMTindent
+ | \noindenttrue
+ | \the\everyquotation
+ |}
+\smallbreak
+ |\def\endquotation{\PDCFMTendenv{quotation}}
+\endcode
+ The differences from using |{\narrower|\dots|\par}| (apart from
+ how it looks in the source file) include (a)~the right margin
+ isn't indented; (b)~it indents by |\envindent| if there is no
+ |\parindent| and (c)~it is preceeded and followed by a
+ smallskip.
+%}}} quotations
+%{{{ textlists (bullets + numbered)
+
+\section{Textlists---bulleted or numbered lists}
+
+ Here's a generic list-of-items environment, used to implemented
+ bulleted and numbered lists. Each item is started with the
+ convenient |\\| macro (and so may contain more than one
+ paragraph). It is called a `textlist' to distinguish it from
+ other meanings of the word `list'. Usually textlists will be
+ generated with higher-level macros like |\bullets| and
+ |\numbered|.
+
+\subsec{A generic textlist environment}
+
+ The token register |\everytextlist| is expanded at the start
+ of every textlist. The level of nesting is recorded in
+ |\textlistdepth| (a to-level list is depth~0, a list inside
+ that is depth~1, and so on). The flag |\ifnumbered| controls
+ whether items are numbered (using |\numberfordepth|) or
+ bulleted (using |\bulletfordepth|).
+\code
+ |\newtoks\everytextlist
+ |\newif\ifnumbered
+ |\newcount\textlistdepth \textlistdepth=-1
+ |\newcount\textlistcount
+\smallbreak
+ |\def\textlist{%
+ | \par
+ | \beginthe{textlist}
+ | \advance\textlistdepth 1
+ | \textlistcount0
+ | \def\\{
+ | \smallskip\noindent
+ | \advance\textlistcount1
+ | \llap{%
+ | \ifnumbered
+ | \numberfordepth\textlistdepth\textlistcount
+ | \else
+ | \bulletfordepth\textlistdepth
+ | \fi\enspace}%
+ | \ignorespaces
+ | }
+ | \advance\leftskip\PDCFMTindent
+ | \the\everytextlist
+ |}
+\smallbreak
+ |\def\endtextlist{\PDCFMTendenv{textlist}}
+\endcode
+
+\subsec{Bulleted lists}
+
+ This describes a bulleted list, where each paragraph is indented
+ and preceeded by a mark in the margin.
+\example
+ I would like to make...~\\bullets~\\\\ this point; and~\\\\ that
+ point~\\endbullets~And so on and so forth.
+& I would like to make the following very important and relevant
+ itemized points:\smallskip\item{$\bullet$}this point;
+ and\smallskip\item{$\bullet$}that
+ point\smallskip\noindent And so on and so forth.
+\endexample
+Bullets environments may
+ be nested, in which case different marks are used. The sign is
+ chosen with |\bulletfordepth|.
+\code
+ |\newtoks\everybullets
+\smallbreak
+ |\def\bullets{\textlist \numberedfalse \the\everybullets}
+ |\let\endbullets=\endtextlist
+\smallbreak
+ |\def\bulletfordepth#1{%
+ | \ifcase#1 $\bullet$\or --\or $\circ$\else $\cdot$\fi
+ |}
+\endcode
+
+
+\subsec{Numbered lists}
+
+ The numbered list is similar. The style of numbering changes
+ with the listing depth; you can change this by redefining
+ |\numberfordepth|.
+ $$
+\centerline{\vbox{\halign{#\hfil&\qquad\hfil# &&\hfil# \cr
+ Depth 0&1.&2.&3.&\dots\cr
+ Depth 1&(1)&(2)&(3)&\dots\cr
+ Depth 2&({\it a\/})&({\it b\/})&({\it c\/})&\dots\cr
+ Depth 3+&(i)&(ii)&(iii)&\dots\cr
+}}}
+ $$
+ There is also a token regieter |\everynumbered| for any extra
+ customization. This is read after |\everytextlist|.
+\code
+ |\newtoks\everynumbered
+\smallbreak
+ |\def\numbered{\textlist \numberedtrue \the\everynumbered}
+ |\let\endnumbered=\endtextlist
+\smallbreak
+ |\def\numberfordepth#1#2{%
+ | \ifcase#1 \n{\number#2}.\or (\n{\number#2})\or
+ | ({\it\alphabetletter#2\/})\else (\romannumeral#2)\fi
+ |}
+\endcode
+ It turns out that sometimes it is useful to be able to impose a
+ format on numbers generated by formatting macros. For example,
+ I~occasionally find it useful to force all numbers to be
+ generated in maths mode. To do this, all numbers generated by
+ macros are enclosed in |\n{|--|}|. By default, |\n| is
+ equivalent to |\relax|.
+\code
+ |\let\n\relax
+\endcode
+
+\subsec{Picking a letter of the alphabet}
+
+ This macro behaves as much like the primitives |\number| and
+ |\romannumeral| as it can: it expands entirely within \TeX's
+ mouth, and so may be used in |\edef|s and the like. It produces
+ |???| or |!!!| if its argument is not in the range 1--26.
+ The macro is defined so as to reduce the number of tokesn to be
+ skipped when |#1| is less than 6.
+\code
+ |\def\alphabetletter#1{%
+ | \ifcase#1 ??? \or a\or b\or c\or d\or e\else
+ | \xxxalphabetletter#1\fi
+ |}
+ |\def\xxxalphabetletter#1{%
+ | \ifcase#1 \or\or\or\or\or\or f\or g\or h\or i\or j\or
+ | k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or
+ | v\or w\or x\or y\or z\else !!!\fi
+ |}
+\endcode
+
+%}}} textlists (bullets + numbered)
+%{{{ tagged list
+
+\section{Tagged lists}
+
+ In other words, description lists. Each paragraph starts with
+ the `tag' set either in the left margin or sticking in to the
+ current line if it is too long to fit. The tag for each
+ paragraph is introduced with `|\\|\arg{\<text>}'.
+
+ The maximum width of tag labels (including the 1\thinspace en
+ space that goes between label and text) in is stored in
+ |\tagmaxwidth|. If there is not room, then the label is run on
+ in to the paragraph and separated from the text by a quad space.
+\code
+ |\newdimen\tagmaxwidth
+\endcode
+ As well as giving a new definition to the |\\| macro, the
+ |\tagged| command mast choose a value for |\tagmaxwidth|. If
+ there is a large left margin (signalled by giving |\leftmargin|
+ a positive value) then tags will go in there; otherwise the text
+ will be indented and the amount of indentation used as the
+ maximum label width.
+\code
+ |\newtoks\everytagged
+\smallbreak
+ |\def\tagged{%
+ | \par
+ | \beginthe{tagged}
+ | \let\\\TAG
+ | \ifdim\leftmargin=0pt
+ | \tagmaxwidth\PDCFMTindent
+ | \else
+ | \tagmaxwidth\leftmargin
+ | \fi
+ | \the\everytagged
+ | \ifdim\tagmaxwidth>\leftmargin
+ | \leftskip\tagmaxwidth \advance\leftskip-\leftmargin
+ | \fi
+ |}
+\smallbreak
+ |\def\endtagged{\PDCFMTendenv{tagged}}
+\endcode
+ The adjustment to |\leftmargin| comes after scanning
+ |\everytagged| so that it is possible to adjust |\tagmaxwidth|
+ inside |\everytagged|.
+
+ Trickery with |\futurelet| and |\aftergroup| (like that used in
+ plain \TeX's |\footnote| command) is used to allow catcode
+ changes in \<text> to work. This allows macros that generate
+ `verbatim' text to work.
+\code
+ |\newtoks\everytag
+\smallbreak
+ |\def\TAG{%
+ | \smallskip\noindent
+ | \setbox0=\hbox\bgroup % matched by \TAGfinish
+ | \the\everytag\ignorespaces
+ | \futurelet\next\TAGtest
+ |}
+\smallbreak
+ |\def\TAGtest{%
+ | \ifcat\bgroup\noexpand\next
+ | \let\next\TAGgotbrace
+ | \else
+ | \let\next\TAGnobrace
+ | \fi \next
+ |}
+\smallbreak
+ |\def\TAGgotbrace{%
+ | \bgroup\aftergroup\TAGfinish
+ | \let\next
+ |}
+\smallbreak
+ |\def\TAGnobrace#1{%
+ | #1\TAGfinish
+ |}
+\smallbreak
+ |\def\TAGfinish{%
+ | \unskip\hskip0.5em\egroup % matches \TAG
+ | \ifdim \wd0 < \tagmaxwidth
+ | \wd0=\tagmaxwidth
+ | \llap{\box0}%
+ | \else
+ | \hskip-\tagmaxwidth
+ | \unhbox0 \unskip\quad
+ | \fi
+ | \ignorespaces
+ |}
+\endcode
+ It might be interesting to generalize these macros so that new
+ macros with an argument scanned this way may be created more
+ easily.
+%}}} tagged list
+%{{{ lines
+
+\section{Lines environment (for program listings etc)}
+
+ In the |lines| environment, each line in the manuscript file
+ becomes a new paragraph (i.e., a separate line on the printed
+ page). A |%| at the end of a line may be used to split a file
+ line in to several logical lines. In addition, the |lines|
+ environment is bracketed by horizontal rules. The effect is
+ similar to that produced by the |\beginlines|--|\endlines|
+ macros in {\it\TeX book} Appendix~E.
+
+\code
+ |\newtoks\everylines
+\smallbreak
+ |\def\lines{
+ | \par
+ | \beginthe{lines}
+ | \nobreak\smallskip\hrule\nobreak\smallskip
+ | \obeylines
+ | \parindent=0pt \parskip=0pt
+ | \parfillskip=0pt plus 1fil
+ | \the\everylines
+ | \nobreak
+ |}
+\smallbreak
+ |\def\endlines{
+ | \nobreak\smallskip
+ | \endthe{lines}
+ | \hrule\smallskip
+ | \global\noindenttrue
+ |}
+\endcode
+
+ For longer listings it may be nice to have the lines numbered
+ for later reference. The following two macros may be put in
+ |\everylines| to enable line numbering---the first starts from~1
+ in each listing environment, the other continues the numbering
+ from where it left off.
+
+ The line number is kept in |\linenumber| (which may be adjusted
+ by the user). Only every 5th line is numbered. The number of
+ lines until the next printed one is held in |\PDCFMTcount|.
+ Both these are always set globally (which means lines
+ environments cannot be nested!).
+\code
+ |\newcount\linenumber
+ |\newcount\PDCFMTcount
+\smallbreak
+ |\def\startlinenumbering{%
+ | \global\linenumber=0 \global\PDCFMTcount=5
+ | \everypar{\numberthisline}%
+ |}
+\smallbreak
+ |\def\continuelinenumbering{%
+ | \everypar{\numberthisline}%
+ |}
+\endcode
+
+ The |\numberthisline| macro is invoked at the beginning of every
+ paragraph. It increments |\linenumber|, and writes the line
+ number of every fifth line in the right margin. By default it
+ uses the same font as used in subscripts; this can be changed by
+ changing the token register |\everylinenum|.
+\code
+ |\newtoks\everylinenum \everylinenum{\the\scriptfont0 }
+\smallbreak
+ |\def\numberthisline{%
+ | \strut
+ | \global\advance\linenumber1 \global\advance\PDCFMTcount-1
+ | \ifnum\PDCFMTcount>0 \else
+ | \global\advance\PDCFMTcount 5
+ | \rlap{\the\everylinenum \kern\hsize\kern1em \the\linenumber}%
+ | \fi
+ |}%
+\endcode
+
+ Within the lines environment it can be useful to indicate where
+ lines have been skipped. This macro also adjusts the
+ |\linenumber| macro.
+\code
+ |\def\linesskipped#1{%
+ | \strut \hskip20pt $\vdots$ \hskip20pt
+ | {\rm(\it #1 lines omitted\rm)}\par
+ | \advance\linenumber#1\relax
+ |}
+\endcode
+
+%}}} lines
+%{{{ display, table
+
+\section{Displays, Tables -- wrapper about \cs{halign}}
+
+ The |display| environment does a generic (meaning not
+ necessarily mathematical) display, in a manner similar to the
+ |\begindisplay|--|\enddisplay| macros in {\it\TeX book}
+ Appendix~E. As with Knuth's macro, assignments may follow on
+ the same line as |\display|, and |\cr| and |&| may be used to
+ split the display into rows and columns.
+\code
+ |\outer\def\display{\obeylines\startdisplay}
+ |\bgroup\obeylines \toksa={\egroup %
+ | \def\startdisplay#1^^M{%
+ | \catcode`\^^M=5 $$ #1 % matched by \enddisplay
+ | \displayindent\PDCFMTindent %
+ | \halign\bgroup##\hfil&&\quad##\hfil\cr %
+ | } %
+ |}\the\toksa %
+\smallbreak
+ |\def\enddisplay{\crcr\egroup$$}
+\endcode
+
+ The |table| environment is similar, ecept that what follows
+ |\table| is an arbitrary |\halign| specification.
+\code
+ |\def\table{%
+ | $$ % matching $$ is in \endtable
+ | \displayindent\PDCFMTindent
+ | \halign \bgroup
+ |}
+\smallbreak
+ |\let\endtable=\enddisplay
+\endcode
+
+\notepar
+ Both the {\tt table} and {\tt display} environments must go
+ within paragraphs. That is, there should not be blank lines
+ before |\table|, or after |\endtable| unless the table ends the
+ paragraph.
+\endnotepar
+%}}} display, table
+%{{{ ebnf
+
+\section{(E)BNF}
+
+ BNF is Bakus-Naur Formalism; EBNF is Extended BNF. The same
+ environment does either format. The style I~happen to like, has
+ non-terminal sumbols written like \<this>, and terminal symbols
+ enclosed in `--'. Optional text is enclosed in brackets (I~like
+ to put spaces between the brackets and the enclosed text for
+ clarity) and repeatable text in braces.
+
+ In the manuscript file, each production is a separate paragraph.
+ The macro |\>| goes between the left hand side and right hand
+ side of a production; by default, it expands to `$::=$'.
+ Alternatives are separated by |\\|; by default this expands to a
+ bar `$\mid$'. If the terminal symbols happen to be keyboard
+ characters, use the verbatim text character {\tt\char`\|} which
+ adds quotation marks around the text it produces. For example,
+ the following expression
+ $$
+ \hbox{\<foo>\enspace$::=$\enspace`|f|' `|o|' `|o|' $\mid$
+ \<bar> [ \<mumble> `{\bf munge}' ].}
+ $$
+ may be produced with
+ $$
+ \defverbatim\~
+ \hbox{~\<foo> \> |f| |o| |o| \\ \<bar> [ \<mumble> `{\bf munge}' ].~}
+ $$
+ Braces are produced with |\{| and |\}|.
+
+\code
+ |\newtoks\everybnf
+\smallbreak
+ |\def\bnf{
+ | \nobreak\smallskip
+ | \beginthe{bnf}
+ | \advance\leftskip2\parindent \parindent=-\parindent
+ | \parskip0pt plus 1pt
+ | \rightskip=1\rightskip plus 3em
+ | \def\\{$\mid$}
+ | \def\>{\unskip\enspace$::=$\enspace\ignorespaces}
+ | \def|{`\begingroup\tt\setupverbatim\catcode`\|=13
+ | \def|{\endgroup'}}
+ | \def\{{$\lbrace$} \def\}{$\rbrace$}
+ | \the\everybnf
+ |}
+\smallbreak
+ |\def\endbnf{
+ | \smallskip
+ | \endthe{bnf}
+ | \global\noindenttrue
+ |}
+\endcode
+
+ The macro |\<| is based on the one in Appendix~E of the {\it\TeX
+ book}. For example, |\<foo>| produces `\<foo>'.
+\code
+ |\def\<#1>{\leavevmode\hbox{$\langle${\it#1\/}$\rangle$}}
+\endcode
+ The difference is that the name is in italics: \<name> not
+ $\langle$name$\rangle$.
+
+\notepar
+ This macro is not intened for be used to generate character
+ names like Return and Tab; I suggest just saying `Return' and
+ `Tab' for these.
+
+ There is a style of RFC-822 email addresses written in the form
+ `\/|Damian Cugley <pdc@alleged.co.uk>|'. I suggest that when
+ presenting email addresses in printed documents this be rendered
+ as something like `\/{\rm Damian Cugley (|pdc@alleged.co.uk|)}'.
+\endnotepar
+%}}} ebnf
+%{{{ headings
+
+\section{Headings}
+
+ Here are some macros for making headings for sections of a
+ document. There are two styles of layout supported by these
+ heading macros: the usual style~$N$, with headings above the
+ first paragraph of the section, and the `tab-indexed' style~$T$,
+ with headings in the left margin, aligned with the first line of
+ the paragraph.
+
+
+\subsec{The left margin parameter}
+ For style~$T$ headings, this is the size of the extra margin at
+ the left side of the page (so $({\it hoffset}+1\,{\rm in})-{\it
+ leftmargin}$ is the margin between the left edge of headings and
+ the edge of the paper). Set this parameter to $0\pt$ for
+ style~$N$.
+
+\code
+ |\newdimen\leftmargin
+\endcode
+
+
+\subsec{Headings that don't start a new page}
+
+ This macro is intended to be used by higher-level macro with
+ names like |\section|, which take care of numbering section
+ headings and so on.
+ $$
+ \hbox{\tt\cs{doheading}\arg{\<skip>}\arg{\<style>}%
+ \arg{\<coda>}\arg{\<text>}}
+ $$
+ Where \<skip> is the skip to put before the heading (for
+ example, a \<dimendef token> like like |\medskipamount| or
+ |\bigskipamount|, or a \<dimen> enclosed in braces); \<style> is
+ tokens to insert before the \<text> (such as assignments that
+ select the font); \<coda> is tokens that follow the \<text>
+ (which might produce a rule under the heading, for example;
+ usually this is empty); and \<text> is the text of the heading
+ supplied by the user.
+\code
+ |\newskip\headingtemp
+ |\def\doheading#1#2#3#4{
+ | \ifdim\lastskip<#1\relax \removelastskip \vskip#1\relax \fi
+ | \ifdim \leftmargin>0pt
+\endcode
+ If the left margin is greater than zero then we generaten a
+ style~$T$ heading. This is done by putting the text in
+ |\parbox|, which will be used by the |\everypar|.
+\code
+ | \global\setbox\parbox=\vtop{%
+ | \hsize=\leftmargin \advance\hsize-\parboxsep
+ | \parindent=0pt
+ | \leftskip=0pt \rightskip=0pt plus 3em
+ | \hyphenpenalty=10000 \exhyphenpenalty=5000
+ | \strut#2#4#3
+ | }
+ | \else
+\endcode
+ Otherwise we typeset the heading as a separate paragraph.
+\code
+ | \begingroup
+ | \parindent=0pt \parfillskip=0pt plus 1fil
+ | \leftskip=0pt \rightskip=0pt plus0.25\hsize
+ | \hyphenpenalty=10000 \exhyphenpenalty=5000
+ | \strut#2#4#3
+ | \global\headingtemp=\baselineskip
+ | \par
+ | \endgroup
+\endcode
+ The vertical space between the heading and the following text is
+ calculated from the difference in baselineskips between the
+ fonts used in the heading and those used in body text, plus $\it
+ smallskipamount$.
+\code
+ | \advance\headingtemp-\baselineskip
+ | \ifdim\headingtemp>0pt \nobreak \vskip 1.0\headingtemp \fi
+ | \smallskip
+ | \noindenttrue
+ | \fi
+ |}
+\endcode
+
+\subsec{Headings that start a new page}
+
+ Major divisions of a book start on a nw page. The parameters to
+ the macro are similar to those for |\doheading|:
+ $$
+ \hbox{\tt\cs{newpageheading}\arg{\<skip>}\arg{\<style>}%
+ \arg{\<coda>}\arg{\<text>}}
+ $$
+ Where here the \<skip> is the extra space at the top of the page.
+
+\code
+ |\def\newpageheading#1#2#3#4{
+ | \vfill\supereject % ensure no insertions still floating
+ | \null\vskip#1\relax
+ | \moveleft\leftmargin\vbox{
+ | \advance\hsize\leftmargin
+ | \parindent=0pt \parfillskip=0pt plus 1fil
+ | \leftskip=0pt \rightskip=0pt plus0.25\hsize
+ | \hyphenpenalty=10000 \exhyphenpenalty=5000
+ | #2\strut#4#3
+ | \global\headingtemp=\baselineskip
+ | \par
+ | }
+ | \advance\headingtemp-\baselineskip
+ | \advance\headingtemp\smallskipamount
+ | \vskip \headingtemp
+ | \noindenttrue
+ | \def\tmp{#4}
+ | \message{*\expandafter\TOCtrim\meaning\tmp. }
+ |}
+\endcode
+%}}} headings
+%{{{ footnotes
+\section{Footnotes}
+
+ We define a new command |\note| that replaces use of the
+ |\footnote| command. This takes one parameter---the text of the
+ footnote---and supplies automatically-numbered footnote markers.
+
+ The |\newcount| command implicitly sets the counter to~0.
+
+\code
+ |\newcount\notecount
+\smallskip
+ |\def\note{%
+ | \global\advance\notecount+1
+ | \footnote{\number\notecount}%
+ |}
+\endcode
+
+ We add a parameter for the indentation of footnote paragraphs.
+\code
+ |\newdimen\footnoteparindent
+ |\footnoteparindent=\parindent
+\endcode
+
+ Now we modify the definition of |\footnote| in plain~\TeX\ (see
+ TeXbook p.\thinspace363). It has the same function as
+ plain~\TeX's |\footnote|, but uses extra parameters
+ (|\everyfootnote|, |\footnotetextmark|), and handles the case
+ ${\it parindent}=0\pt$.
+\code
+ |\newtoks\everyfootnote
+\smallbreak
+ |\catcode`\@=11
+ |\def\footnote#1{\let\@sf\empty
+ | \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ | \footnotetextmark{#1}\@sf\vfootnote{#1}}
+\smallbreak
+ |\def\vfootnote#1{\insert\footins\bgroup % matched by \@foot
+ | \interlinepenalty=\interfootnotelinepenalty
+ | \parindent=\footnoteparindent
+ | \leftskip=0pt
+ | \the\everyfootnote
+ | \splittopskip=\ht\strutbox \splitmaxdepth=\dp\strutbox
+ | \floatingpenalty=20000
+ | \indent\footstrut
+ | \ifdim\parindent>1em
+ | \llap{\footnotenotemark{#1}\enspace}%
+ | \else
+ | \footnotenotemark{#1}\enspace
+ | \fi
+ | \futurelet\next\fo@t
+ |}
+\smallbreak
+ |\def\@foot{\smallskip\egroup}
+\smallskip
+ |\catcode`\@=12
+\endcode
+ These two parameters control the formatting of the footnote
+ marker in the text and in the note itself. They take one
+ parameter, a \<number>. The default definitions simply use a
+ superscript in maths mode.
+\code
+ |\def\footnotetextmark#1{$^{#1}$}
+ |\def\footnotenotemark#1{$^{#1}$}
+\endcode
+%}}} footnotes
+%{{{ in-paragraph commands
+
+\section{Miscellaneous in-paragraph commands}
+
+
+\subsec{Writing the current date}
+
+\let\n=\relax
+\def\today{\n{\number\day} \monthname\month\ \n{\number\year}}
+\def\monthname#1{%
+ \ifcase#1\or
+ January\or February\or March\or April\or
+ May\or June\or July\or August\or
+ September\or October\or November\or December%
+ \fi
+}
+
+ We define a macro |\today| that prints today's date. I used to
+ have the option of the abbreviated date but decided this was an
+ unnecessary complication. The format `\today' is usual
+ in non-American countries, and is recommended by {\it Hart's
+ Rules}\footnote*{Horace Hart, {\it Hart's Rules for Compositors
+ and Readers at the University Press, Oxford}, 39th~ed.,
+ completely revised (Oxford University Press, 1990),
+ p.\thinspace19.} and Strunk \&
+ White.\footnote\dag{William Strunk jun., and E.~B. White, {\it
+ The Elements of Style}, 3rd~ed.\ (Macmillan, 1979),
+ p.\thinspace3. The American format is given first but followed
+ by the observation that the day--month--year format is `an
+ excellent way to write that date; the figures are separated by a
+ word, and are, for that reason, quickly grasped'.}
+\code
+ |\def\today{\n{\number\day} \monthname\month\ \n{\number\year}}
+\smallbreak
+ |\def\monthname#1{%
+ | \ifcase#1\or
+ | January\or February\or March\or April\or
+ | May\or June\or July\or August\or
+ | September\or October\or November\or December%
+ | \fi
+ |}
+\endcode
+ Redefine the |\monthname| macro if you want different names for
+ the months.
+
+
+\def\isodate{\n{\number\year}--\twodigits\month--\twodigits\day}
+\def\twodigits#1{%
+ \ifnum#1<10 0\fi \number#1%
+}
+
+ Here's a definition for the date in ISO~8601/BS~4795
+ format,\footnote\ddag{{\it The Oxford Writers' Dictionary}
+ (Oxford University Press, 1990), under `date'. I~have not read
+ the relevant standards.} which puts the year first, giving
+ `\isodate':
+\code
+ |\def\isodate{\n{\number\year}--\twodigits\month--\twodigits\day}
+\smallbreak
+ |\def\twodigits#1{%
+ | \ifnum#1<10 0\fi \number#1%
+ |}
+\endcode
+
+
+\subsec{Raising things}
+
+ The |\flushtop| macro prints its argument in a box raised so
+ that the its top is aligned with the top of a letter X in the
+ current font.
+\code
+ |\def\flushtop#1{%
+ | \leavevmode
+ | \begingroup
+ | \setbox0\hbox{#1}\setbox2\hbox{X}%
+ | \dimen0\ht2 \advance\dimen0-\ht0
+ | \raise\dimen0\box0
+ | \endgroup
+ |}
+\endcode
+ This allows us to define a fairly generic version of the \LaTeX\
+ logo:
+\code
+ |\def\La{L\negthinspace\flushtop{a}}
+ |\def\LaTeX{\La\TeX}
+\endcode
+ I have not given a definition for the \LaTeX~2e logo, since
+ I~think that `|\LaTeX~2e|' (or `|\LaTeX2e|' if you prefer) is
+ adequate, whereas Addison--Wesley think it should be `|\LaTeX|
+ |\kern0.05em| |2$| |_{\textstyle| |\varepsilon}| |$|' in regular
+ text and something involving bold maths in boldface. SImilarly,
+ I do not include macros for Bib\TeX, Sli\TeX, AMS-\TeX, and so
+ on; the |texlogos.sty| file from the Eplain package has
+ definitions for these.
+
+\def\superiorletter#1{\flushtop{\the\scriptfont\fam
+ \vphantom{t}\smash{#1}}}
+
+ Here's a variation which raises a scriptstyle letter so that
+ its {\it x}-height matches the cap-height of the body text,
+ thus making `M\superiorletter{\b c\kern0.1ex }Donald' and
+ `1\superiorletter{\b a}', `1\superiorletter{\b o}',
+ `1\superiorletter{er}', `2\superiorletter{\`eme}',
+ `1\superiorletter{st}', `2\superiorletter{nd}',
+ `3\superiorletter{rd}' and `659\superiorletter{th}' (which I
+ prefer to $659^{\rm th}$).
+\code
+ |\def\superiorletter#1{%
+ | \flushtop{\the\scriptfont\fam \vphantom{x}\smash{#1}}%
+ |}
+\smallbreak
+ |\def\Mc{M\flushtop{\the\scriptfont\fam \b{c}}}
+\endcode
+
+
+%}}} in-paragraph commands
+\endcodefile
+\enddocument
+\bye
+%}}} pdcfmt2
+
+%Local variables:
+%fill-prefix: " "
+%fold-folded-p: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcfsel.dtx b/macros/plain/contrib/pdcmac/pdcfsel.dtx
new file mode 100644
index 0000000000..397d6c029d
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcfsel.dtx
@@ -0,0 +1,607 @@
+% pdcfsel.dtx -- documentation & source for pdcfsel.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCFSEL, a font selection scheme for TeX",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcfsel.dtx",
+%%% version = "$Revision: 3.5 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/28 19:05:54 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and defines pdcfsel.tex,
+%%% a file of definitions for managing font selection in
+%%% documents based on the plain TeX macros.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcfsel
+%{{{ premable
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: pdcfsel.dtx,v 3.5 1995/03/28 19:05:54 pdc Exp $\endrcs
+
+\codefile{pdcfsel.tex}
+
+%}}} premable
+%{{{ intro
+
+\author{P. Damian Cugley}
+\title{PDCFSEL, a font-selection scheme for \TeX}
+\section{Introduction}
+
+ This document describes PDCFSEL, a file of font selection macros
+ designed to be used with documents using the plain \TeX\ format
+ (rather than \LaTeX, for example).
+
+ The PDCFSEL macros perform a similar function to the so-called
+ New Font Selection Scheme~2 (used in \LaTeX~2e). PDCFSEL uses a
+ simpler model of font selection, and so is a smaller
+ package---about 110~lines of code---which is just as well as a
+ copy of it will probably need to be included with documents
+ using it. The description of which fonts are used in a document
+ can be relatively compact, despite not using any special
+ database files.
+
+\subsec{Organizing fonts into fontsets}
+
+ We can arrange the fonts used in an imaginary \TeX\ document in
+ a table like so (with an asterisk marking fonts that have to be
+ scaled to fit):
+ $$\def\*{{\rm*}}
+\vbox{\halign{\strut#\hfil&\quad\vrule#&&\quad\tt#\hfil\cr
+ && |\rm|&|\it|&|\bf|&|\bi|&|\mi|&|\sy|\cr
+\noalign{\nointerlineskip}\omit& height \jot\cr
+\noalign{\hrule}\omit& height 1\jot\cr
+\noalign{\nointerlineskip}%
+ body text&& cmr10& cmti10& cmbx10& cmbxti10& cmmi10& cmsy10\cr
+ footnotes&& cmr8& cmti8& cmbx8& cmbxti10\*& cmmi8& cmsy8\cr
+ script&& cmr7& cmti7& cmbx7& cmbxti10\*& cmmi7& cmsy7\cr
+ scriptscript&& cmr5& cmti7\*& cmbx5& cmbxti10\*& cmmi5& cmsy5\cr
+\noalign{\nointerlineskip}\omit& height\jot depth\jot&\multispan6\dotfill\cr
+\noalign{\nointerlineskip}%
+ heading&& cmss12& cmssi12& -&-&-&-\cr
+ subheading&& cmss10& cmssi10& -&-&-&-\cr
+}}
+ $$
+ The column headings are {\it font nicknames}. These nicknames
+ are used as described in the {\it\TeX book} to switch between
+ fonts in the same row. Each has a corresponding {\it fam}
+ used in maths mode, with symbolic names like |\itfam| and
+ |\bffam| (we define $\hbox{|\rmfam|}=0 $ for consistency).
+ I~have added nicknames |\mi| and |\sy| for maths italic and
+ maths symbol respectively.
+
+ Each row of the table is a {\it fontset}. Plain \TeX\ defines a
+ single fontset (which is like the `body text' row of this
+ table); in Appendix~E, Knuth discusses formats that switch
+ between different fontsets with macros like |\ninepoint| and
+ |\eightpoint|. \LaTeX~2.09 uses many fontsets, called
+ |\normalsize|, |\large|, and so on. (NFSS~2 uses a more complex
+ system, where size, weight, and slant may be changed
+ independently of each other.)
+
+ In this table, subheadings and body text have different fontsets
+ in the above, even though the fonts are the same size. Also,
+ there are no |\sf| fonts; the headings are printed in sanserif
+ by using a fontset with |\rm| mapped on to a sanserif font.
+ This is more logical and flexible than the \LaTeX\ approach.
+
+ We can call font families which allow this table to work tidily
+ `regular', and families (like Computer Modern) that require
+ exceptions `irregular'. The above table has one exception
+ (|\it| in scriptscript must use a scaled font); the CM Bold
+ Extended Text Italic fonts can be described as regular if we
+ think of the `body text' entry as being `|cmbxti10 at 10pt|', so
+ that the fonts in that column are scaled fonts without
+ exception. To make font specification compact, we want to take
+ advantage of regular families as much as possible, while not
+ making it difficult to include exceptions.
+
+\subsec{Introduction to using PCDFSEL}
+
+ PDCFSEL uses no databases of font families, and loads no fonts
+ by default. This makes it more flexible, but also requires
+ document designers to write a `mini-database' of those fonts
+ used in the document. The above scheme might be defined as
+ follows:
+\smallskip
+\halign{\indent#\hfil\cr
+ |\input pdcfsel|\cr
+\noalign{\smallbreak}%
+ |\newfam\bifam|\cr
+\noalign{\smallbreak}%
+ |\def\texttemplate{%|\cr
+ | \m{rm}{cmr}\m{it}{cmti}\m{bf}{cmbx}\@\m{bi}{cmbxti10}%|\cr
+ | \M{mi}{cmmi}\M{sy}{cmsy}%|\cr
+ |}|\cr
+ |\loadfont\scriptscriptit{cmti7 at 5pt }|\cr
+ |\xfontset{scriptscript}\texttemplate{5}|\cr
+ |\xfontset{script}\texttemplate{7}|\cr
+ |\fontset{note}\texttemplate{8}{10pt}{scriptscript}{scriptscript}|\cr
+ |\fontset{body}\texttemplate{10}{12pt}{script}{scriptscript}|\cr
+\noalign{\smallbreak}%
+ |\def\headingtemplate{%|\cr
+ | \f{rm}{cmss}\f{it}{cmssi}%|\cr
+ |}|\cr
+ |\fontset{subheading}\headingtemplate{10}{12pt}{subheading}{subheading}|\cr
+ |\fontset{heading}\headingtemplate{12}{14pt}{subheading}{subheading}|\cr
+\noalign{\smallbreak}%
+ |\bodyfonts|\cr
+}
+\smallbreak
+\noindent
+ This defines commands |\bodyfonts|, |\notefonts|,
+ |\headingfonts| and |\subheadingfonts| which switch between
+ fontsets. (The {\it script} and {\it scriptscript} fontsets,
+ which are defined with |\xfontset|, are used only in maths
+ mode and don't need `-|fonts|' commands.) These -|fonts|
+ commands are not usually used directly in documents;
+ |\notefonts| will be used in some |\footnote| command,
+ |\headingfonts| in some heading-generating command, and so on.
+
+ Changes of fontset are accompanied by changes in parameters like
+ |\baselineskip| and pseudo-parameters like |\smallskipamount|,
+ and give definitions to the {\it maths font tables}
+ |\textfont\rmfam|, \dots, |\scriptscriptfont\syfam| (for those
+ fonts that will be used in maths mode).
+
+ We want font nickname commands to be efficient, because they
+ are expected to be more common than changes between rows in
+ the table. In this implementation, after an invocation of
+ |\bodyfonts|, the macro |\rm| expands to exactly `|\fam\rmfam
+ \bodyrm|'.
+
+\subsec{How the rest of this document is organized}
+
+ The remainder of this document is a description of all of
+ |pdcfsel.tex|, including more details of how the commands it
+ defines are used.
+
+ Running this document (|pdcfsel.dtx|) through plain \TeX\
+ creates the definitions file (|pdcfsel.tex|) in addition to
+ the usual |dvi| and |log| files. This way the macros and
+ their documentation may be kept together in one file. The
+ definition lines are numbered.
+
+ The definitions start with macros for loading individual
+ fonts, followed by the macros used to group fonts into
+ fontsets.
+%}}} intro
+%{{{ getting started
+
+\section{Getting started}
+
+\subsec{File identification}
+
+ We start with some comments indentifying the file.
+\code
+ |% pdcfsel.tex -- macros for loading fonts -*-tex-*-
+ |
+ |%%%@TeX-document-file {
+ |%%% title = "PDC Font Selection Scheme",
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcfsel.tex",
+ \|\%\%\% version \space\space\space= "\fileversion",
+ \|\%\%\% Date \space\space\space\space\space\space= "\filedate",
+ \|\%\%\% creator\space\space\space\space= "\filename",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,"
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% abstract = "A file of definitions for managing font
+ |%%% selection in documents based on the plain
+ |%%% TeX macros.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcfsel.dtx.",
+ |%%% dependencies = ""
+ |%%%}
+ |
+ \|\string\message\{\fileversion\space\string<%
+ \fileauthor\space\filedate\string>\}
+\endcode
+
+\subsec{Private names}
+
+ Macros internal to FSEL all have names starting `|\FSEL|'.
+
+\subsec{Macros for edefs}
+
+ These save typing |\expandafter| a lot. The expression
+ `|\expcs|\<token>\arg{\<tokens>}', creates a csname from
+ \<tokens> and applies \<token> to the result. In the body of an
+ |\edef|, The expression `|\noexpcs|\arg{\<tokens>}' converts
+ \<tokens> to a csname without expanding the result.
+\code
+ |\def\expcs#1#2{\expandafter#1\csname#2\endcsname}
+ |\def\noexpcs{\expcs\noexpand}
+\endcode
+%}}} getting started
+%{{{ selecting demand-loading
+
+\section{Selecting auto-loading mode}
+
+ The flag |\ifFSELautoload| is true, fonts are auto-loaded when
+ they first used instead of all at the start. This is useful
+ when not all the fonts described by the fontsets will be
+ needed. The flag is set with the user command
+ |\autoloadfonts|.
+
+ When demand-loading, the fonts used
+ are written to a file named after the document with a |.fnt|
+ suffix. This checklist might
+ be used to decide which fonts need to be sent with the
+ document if it is being sent to someone to compile on a
+ different \TeX\ system.
+\code
+ |\newif\ifFSELautoload
+ |\def\autoloadfonts{
+ | \FSELautoloadtrue
+ | \csname newwrite\endcsname \FSELfile
+ | \immediate\openout\FSELfile=\jobname.fnt
+ |}
+\endcode
+%}}} selecting demand-loading
+%{{{ making csname for one font
+
+\section{How to set up the csname for one font}
+
+ The macro |\loadfont| is used to load individual fonts, defining
+ a control sequence name (csname) which may be used later to
+ switch to that font. When not demand-loading fonts, this is
+ just like |\global\font| followed by expanding the
+ |\everyloadfont| macro.
+
+ If the csname is already defined, then this command does
+ nothing. This is so that irregularities in the font scheme for
+ the document can be allowed for. Parameter |#1| is the csname,
+ for example `|\bodyrm|', and |#2| is the external name, for
+ example `|cmr10|' or `|cmr10 at 12pt|'.
+\code
+ |\def\loadfont#1#2{%
+ | \ifx#1\relax
+ | \FSELloadfont#1{#2}%
+ | \else\ifx#1\UNDEFINED
+ | \FSELloadfont#1{#2}%
+ | \fi\fi
+ |}
+\endcode
+ (We have to compare |#1| against both |\relax|, which is
+ produced by |\csname|--|\endcsname|, and a completely undefined
+ csname.) The macro |\FSELloadfont| doesa the actual work of
+ loading the font.
+\code
+ |\def\FSELloadfont#1#2{%
+ | \ifFSELautoload
+\endcode
+\begingroup \leftskip=\parindent \advance\leftskip4\fontdimen6\tentt
+\noindent{\it Demand-loading}. We don't load the font, instead we
+ define a csname as a macro. When expanded this new macro will
+ (a)~write the font name to the |fnt| file; (b)~define the macro
+ |\subfont| to load |cmr10| instead (in case \TeX\ stops with a
+ `font not loadable' message); (c)~load the font for real (this
+ overwrites the macro); (d)~call |\everyloadfont| for per-font
+ customization and (e)~switch to the new font.
+\par\endgroup
+\code
+ | \edef#1{%
+ | \write\FSELfile{#2}%
+ | \def\noexpand\subfont{\global\font\noexpand#1cmr10 }%
+ | \global\font\noexpand#1#2\relax
+ | \noexpand\everyloadfont\noexpand#1{#2}%
+ | \noexpand#1%
+ | }%
+ | \else
+\endcode
+\leftline{\hskip4\fontdimen6\tentt \indent{\it Immediate loading}.}
+\code
+ | \global\font#1#2\relax \everyloadfont#1{#2}%
+ | \fi
+ |}
+\endcode
+
+ The macro |\everyloadfont| is expanded immediately after
+ actually loading a font. (The definition used is that one
+ current when the font is actually loaded, not the one current
+ when |\loadfont| was executed.) Its |#1| parameter is always a
+ \<fontdef token>, i.e., it can be to used as a parameter to
+ |\fontdimen1|. The |#2| parameter is the external name of the
+ font.
+\code
+ |\def\everyloadfont#1#2{}
+\endcode
+ For example, in a document with a ragged-right margin, this
+ might be used to suppress the stretch and
+ shrink of interword spaces by being defined as follows
+ $$
+\vbox{\halign{#\hfil\cr
+ |\def\everyloadfont#1#2{%|\cr
+ | \fontdimen3#1=0pt \fontdimen4#1=0pt|\cr
+ |}|\cr
+}}
+ $$
+%}}} making csname for one font
+%{{{ making a fontset
+
+\section{How to set up a fontset}
+
+ Now that we know how to define individual font csnames, we
+ need the mechanism for grouping them in to fontsets. A
+ fontset is defined by a template macro which says what font
+ nicknames are defined and gives part of the external font
+ name. The template macro takes no parameters and expands to
+ a list each of whose elements are of the form
+ $$
+\vbox{\halign{$#$\hfil&\quad#\hfil\cr
+ \<type> \arg{\<nickname>} \arg{\<partial name>}&
+ or\cr
+ \cs{@} \<type> \arg{\<nickname>} \arg{\<external name>}&
+ for a scaled font.\cr
+}}
+ $$
+ where a \<type> is one of the control sequences |\f|, |\m| or
+ |\M|, and \<nickname> is the two- or three-letter nickname
+ used for the font (without any leading backslash), for example
+ |rm|, |it|, |bf|. There must be a font fam called
+ |\|\<nickname>|fam| (|\rmfam|, |\itfam| etc.\ are already
+ defined).
+
+ If there is no |\@|, then the \<partial name> is a font name
+ sans the size specification, such as |cmr|. The size in
+ points will be appended to this (|cmr| + $10\pt$ = |cmr10|).
+ If |\@| is included then the \<external name> is the complete
+ font name, such as |cmr10| or |ptmr|. This will be followed
+ by `{\tt\char32 at\char32 10pt\char32 }', say.
+
+ The \<type> specifies how much support for mathematics this font
+ requires. This is because maths mode requires that all fonts
+ that might be used in a formula be loaded (because the font
+ tables |\textfont|, |\scriptfont| and |\scriptscriptfont| must
+ be set). The code |\f| means that the font is not used in
+ maths, |\m| means that |\textfont| and |\scriptfont| will be set
+ correctly for this fam, and |\M| means that |\scriptscriptfont|
+ will also be set. In these cases there must be a corresponding
+ token ending in `-|fam|' that expands to the fam number.
+
+ The fontset name is a sequence of \<letter>s, like `|body|',
+ `|note|', `|script|', `|heading|'. This is turned into a
+ fontset selection macro by adding `|\|' to the front and
+ `|fonts|' to the end (e.g., |\bodyfonts|). The csnames for
+ loaded fonts are formed from the fontset name + the nickname
+ (e.g., |\bodyrm|).
+
+\subsec{Defining the csnames for a fontset}
+
+ The macro |\xfontset| defines all the csnames for the fonts in a
+ fontset, without defining a `-|fonts|' macro. This is used to
+ define a fontset that is never selected in its own right (e.g.,
+ its fonts are used only as subscripts and superscripts), and
+ also used internally by the |\fontset| command. Its arguments
+ are |#1| the fontset name, |#2| the csname of a template macro,
+ and |#3| a \<number> that specifies the font size (sans the
+ `|pt|').
+\code
+ |\def\xfontset#1#2#3{
+ | \def\f##1##2{\expcs\loadfont{#1##1}{##2#3}}
+ | \let\m=\f \let\M=\f
+ | \def\@##1##2##3{\expcs\loadfont{#1##2}{##3 at #3pt }}
+ | #2
+ |}
+\endcode
+
+\subsec{Defining a complete fontset}
+
+ The user command |\fontset| is used to define a complete
+ fontset. Its parameters are
+ |#1| (a string of letters) is the fontset name,
+ |#2| (a csname) is a template macro,
+ |#3| (a \<number>) is size in points,
+ |#4| (a \<skip>) is baseline skip,
+ |#5| (a fontset name) is the scriptstyle fontset, and
+ |#6| (a fontset name) is the scriptscriptstyle fontset.
+\code
+ |% Set up a fontset -- define \#1fonts
+ |\def\fontset#1#2#3#4#5#6{%
+ | \xfontset{#1}{#2}{#3}%
+\endcode
+\begingroup\leftskip=\parindent \advance\leftskip2\fontdimen6\tentt
+\noindent
+ Now to define the |\#1fonts| macro. When demand-loading, this
+ macro will call |\#1mathfonts| (to ensure the fonts needed for
+ maths are loaded). Then it will call |\FSELnicknames| to
+ define |\rm|, |\it|, etc., and to define |\textfont\rmfam|, etc.
+ Finally it will set the baseline skip and related parameters and
+ switch to the new |\rm| font.
+\par\endgroup
+\code
+ | \expcs\edef{#1fonts}{%
+ | \ifFSELautoload \noexpcs{#1mathsfonts}\fi
+ | \noexpand\FSELnicknames{#1}{#5}{#6}\noexpand#2%
+ | \noexpand\setbaselineskip{#4}%
+ | \noexpand\rm
+ | }%
+\endcode
+\begingroup\leftskip=\parindent \advance\leftskip2\fontdimen6\tentt
+\noindent
+ If we are demand-loading, we must define |\#1mathsfonts| as well.
+\par\endgroup
+\code
+ | \ifFSELautoload
+ | \expcs\def{#1mathsfonts}{\FSELloadmaths{#1}{#5}{#6}#2}%
+ | \fi
+ |}
+\endcode
+
+\subsec{Setting font nicknames}
+
+ |\FSELnicknames|
+ gives definitions to |\f|, |\m| and |\M| so that expanding the
+ template macro defines |\rm| and the like. If the fontset name
+ is |ffff|, and a nickname |xx| is introduced with |\f|, the
+ macro |\xx| is defined to |\ffffxx|. If it is introduced with
+ |\m|, then the font table entries |\textfont\xxfam| and |\scriptfont\xxfam| are also
+ set, and |\xx| expands to `|\fam\xxfam \ffffxx|'. If it is
+ introduced with |\M| then |\scriptscriptfont\xxfam| is also set.
+
+ The parameters are |#1| the fontset name, |#2| the fontset name
+ for scriptstyle, and |#3| the fontset name for
+ scriptscriptstyle. The implicit fourth parameter is the
+ template macro.
+\code
+ |\def\FSELnicknames#1#2#3{%
+ | \let\@\relax
+ | \def\f##1##2{%
+ | \expcs\edef{##1}{\noexpcs{#1##1}}%
+ | }%
+ | \def\m##1##2{%
+ | \expcs\textfont{##1fam}\csname#1##1\endcsname
+ | \expcs\scriptfont{##1fam}\csname#2##1\endcsname
+ | \expcs\edef{##1}{%
+ | \fam\expcs\noexpand{##1fam}%
+ | \expcs\noexpand{#1##1}%
+ | }%
+ | }%
+ | \def\M##1{%
+ | \expcs\scriptscriptfont{##1fam}\csname#3##1\endcsname
+ | \m{##1}%
+ | }%
+ |}
+\endcode
+
+\subsec{Setting the baseline skip}
+ The second helper macro, |\setbaselineskip|, sets
+ |\baselineskip| and a bunch of related paramaters and
+ pseudo-parameters like |\smallskipamount|. It takes one
+ parameter, a \<skip>.
+\notepar
+ My definitions for the skips that go before and after displays
+ put less white\-space around displays than is set in plain \TeX.
+ This can be changed by redefining this macro in a style file.
+\endnotepar
+\code
+ |\def\setbaselineskip#1{%
+ | \baselineskip#1\relax \normalbaselineskip\baselineskip
+ | \jot0.25\baselineskip
+ | \smallskipamount 0.25\baselineskip plus 0.083\baselineskip
+ | minus 0.083\baselineskip
+ | \medskipamount 0.5\baselineskip plus 0.167\baselineskip
+ | minus 0.167\baselineskip
+ | \bigskipamount 1\baselineskip plus 0.333\baselineskip
+ | minus 0.333\baselineskip
+ | \abovedisplayskip\medskipamount
+ | \abovedisplayshortskip\abovedisplayskip
+ | \advance\abovedisplayshortskip-1\abovedisplayskip
+ | \belowdisplayskip\medskipamount
+ | \belowdisplayshortskip\smallskipamount
+ |}
+\endcode
+
+\subsec{Loading maths fonts}
+ Finally, we need to force the fonts used in maths at a given
+ size to be loaded. for |\f| fonts this does nothing; for |\m|
+ fonts it loads the text and script fonts; for |\M| fonts it also
+ loads the scriptscript font.
+
+ This is done the first time this fontset is selected, even if no
+ formulas are used (rather than trying to do something
+ complicated like use |\everymath|\dots). Because this macro
+ only needs to be used once for each fontset, it finishes by
+ redefining |\#1mathfonts| to be the same as |\relax|.
+
+ Its parameters are |#1| the fontset name, |#2| the fontset name
+ for scriptstyle, and |#3| the fontset name for scriptscriptstyle.
+\code
+ |\def\FSELloadmaths#1#2#3{%
+ | \let\@\relax \def\f##1##2{}%
+ | \def\m##1##2{\csname#1##1\endcsname \csname#2##1\endcsname}%
+ | \def\M##1{\csname#3##1\endcsname \m{##1}}%
+ | \global\expcs\let{#1mathsfonts}\relax
+ |}
+\endcode
+
+%}}} making a fontset
+%{{{ finishing up
+
+\section{Finishing up}
+
+ We define |\rmfam|, |\mifam| and |\syfam| as aliases for the
+ numbers $0$, $1$ and $2$. This is so that the maths fonts may
+ be included in the font templates without any special
+ arrangements. The names |\itfam|, |\bffam|, |\ttfam|, and |\slfam| are set in |plain.tex|.
+\code
+ |\chardef\rmfam=0 \chardef\mifam=1 \chardef\syfam=2
+\endcode
+ Note that we do not include an alias for the the maths
+ extension font's fam number. This is because there is only
+ one maths extension font---|cmex10|---used for all sizes, so it
+ does not belong in any fontset.
+
+\section{Summary of user commands}
+
+ The following lists the user commands provided by FSEL. A
+ \<fontset name> is a sequence of letters like |note|;
+ \<points> is a \TeX\ \<number> representing size in points
+ (without any final |pt|); an \<external name> is the external
+ name for a font (e.g., `|cmr12|').
+
+\medskip\hrule\medskip
+
+\begingroup \parindent=0pt
+
+ |\autoloadfonts|
+
+ |\loadfont|\<csname>\arg{\<external name>}
+
+ |\xfontset|\arg{\<fontset name>}\<csname>\arg{\<points>}
+
+ |\fontset|\arg{\<fontset
+ name>}\<csname>\arg{\<points>}\arg{\<skip>}\arg{\<fontset
+ name>}\arg{\<fontset name>}
+
+ |\def\everyloadfont#1#2{| \dots\ |}|
+
+ |\def\setbaselineskip#1{| \dots\ |}|
+
+\medskip\hrule\medskip
+
+\endgroup
+
+%}}} finishing up
+%{{{ bugs
+
+\section{Bugs}
+
+ FSEL clobbers the macros |\f|, |\m|, |\M| and |\@|.
+%}}} bugs
+\endcodefile
+\enddocument
+\bye
+
+%}}} pdcfsel
+
+%Local variables:
+%fold-folded-p: t
+%fill-prefix: " "
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcfsel.pdf b/macros/plain/contrib/pdcmac/pdcfsel.pdf
new file mode 100644
index 0000000000..fb3f246541
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcfsel.pdf
Binary files differ
diff --git a/macros/plain/contrib/pdcmac/pdcguide.pdf b/macros/plain/contrib/pdcmac/pdcguide.pdf
new file mode 100644
index 0000000000..635a22f2e0
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcguide.pdf
Binary files differ
diff --git a/macros/plain/contrib/pdcmac/pdcguide.tex b/macros/plain/contrib/pdcmac/pdcguide.tex
new file mode 100644
index 0000000000..cc79b69f67
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcguide.tex
@@ -0,0 +1,942 @@
+% pdcguide.dtx -- user guide for PDCMAC -- Time-stamp: <pdc 1995-04-06>
+
+%%%@TeX-document-file {
+%%% title = "The PDCMAC Package",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcguide.dtx",
+%%% version = "$Revision$",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date$",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "A brief user guide for the PDCMAC package.",
+%%% copyright = "Copyright (c) 1995 P. Damian Cugley",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccmlft.tex, pdcmacvn.tex, ..."
+%%%}
+
+%{{{ pdcguide
+%{{{ preamble
+
+\errorcontextlines10000
+
+\ifx\usepsfonts!
+ \def\bodyfontname{pplr} \def\bodyttfontname{phvr}
+ \def\headingttfontname{phvro}
+ \input pdcpsdoc
+ \mathcode`.=\gbdecimal \mathcode`/="202F
+\else
+ \input pdccmdoc \mathcode`.="0201 \mathcode`/="213D
+\fi
+
+\input pdcmacvn
+\majorheadline{PDCMAC Release $\pdcmacversion$} \twosidedtrue
+\noheadlinetrue
+
+\def\n#1{$ \textfont0=\font \mathcode`i=`i \mathcode`v=`v \mathcode`x=`x #1 $}
+
+\def\plainslash{/} \declareactivechar\/ \let/\plainslash
+\def\texmf#1#2{{\tt\let/=\slash% $ for matching
+ \$texmf/#1%
+ \def\tmp{#2}\ifx\tmp\empty \plainslash \else /#2\fi}}
+\def\url#1#2#3{{\tt#1:\penalty\exhyphenpenalty
+ \plainslash\plainslash \let/=\slash #2%
+ \def\tmp{#3}\ifx\tmp\empty \plainslash \else /#3\fi}}
+
+\newcount\tablecount \tablecount2
+\def\newtableid{\global\advance\tablecount1 \number\tablecount}
+
+%}}} preamble
+%{{{ intro
+\section{What is this thing you Earth people call PDCMAC?}
+%{{{ intro
+\subsec{Introduction}
+
+ PDCMAC is collection of \TeX\ definition files (macro files)
+ which may be useful for setting documents using plain \TeX\
+ (`plain' here meaning \TeX\ formats following similar
+ conventions to those of Appendix~B of the {\it\TeX book}, as
+ opposed to more complex formats like \LaTeX). This package is
+ much less powerful than \LaTeX~2e; it is intended to be a
+ simpler solution to simpler requirements. Because it is less
+ complex, the macro code should be more readily adapted by other
+ \TeX\ hackers.
+
+ The package includes a font-selection system, an output routine,
+ general formatting macros, and `style files' which input the
+ other files and set the format for documents.
+
+ The name `PDCMAC' is pronounced `{\it p-d-c}-mac'. In file
+ names where case matters it is always written in all-lower-case.
+ The fairly consistent use of a `|pdc|-' or `|ma|-' prefix in
+ this and other names is intended to prevent these files clashing
+ with files from other packages. (The `|ma|-' files are part of
+ the Malvern package.)
+%}}} intro
+%{{{ conventions
+\subsec{Conventions in this guide}
+
+ Contents and names of computer files, and commands to be typed
+ literally are printed in {\tt this distinctive font}.
+ Placeholders to be filled in with real file names etc.~are
+ written in {\it this italic font}.
+
+%}}} conventions
+%{{{ copying
+
+\subsec{Copying}
+ The PDCMAC files are copyright \copyright\ 1990--1995 P. Damian
+ Cugley. They may be used in documents, and distributed as a
+ complete package as per the GNU General Public Licence
+ (reproduced at the end of this document).
+
+ The |tex| files generated by the |dtx| files are like `object
+ files'; you should not distribute them without their source
+ files (the |dtx| files).
+
+ Do not modify the generated |tex| files; if you must modify the
+ macros, do this by editing the |dtx| files and running them
+ through \TeX\ again. If you must distribute modified versions
+ (instead of persuading me to modify my copies), help reduce the
+ proliferation of incompatible versions by doing the following:
+\bullets
+ \\describe the modifications clearly in the printed
+ documentation;
+
+ \\say who modifed them in the header comments in the definition
+ files, and change the version identifier;
+
+ \\use a different name for the modifed definition files.
+\endbullets
+ The last point is so that documents using the unmodified
+ versions can coexist with the ones using modified ones.
+
+
+
+%}}} copying
+%{{{ feedback
+
+\subsec{Feedback}
+ I am very interested to hear from people who find a use for this
+ package. Please send comments and suggestions, or reports of
+ bugs, to the address above. If you find PDCMAC useful or
+ amusing, please send me a pretty postcard. Thanks.
+
+%}}} feedback
+%}}} intro
+%{{{ unpack install
+\section{Unpacking and installing the files}
+%{{{ unpack
+
+\subsec{Unpacking}
+
+ Two common formats for archives are
+\bullets
+\\ (on Unix)
+ |tar| files, compressed using GNU |zip| (|gzip|), and
+\\ (on MS-DOS) PKZIP-style archives.
+\endbullets
+ Compressed tarfiles will have names like |pdcmac-1.0.tar.gz| or
+ |pdcmac10.tgz| (the latter form is required by ISO-9660\note{ISO
+ 9660 is the standard for CD-ROM file systems. Its file names
+ are like MS-DOS file names: a sequence of 8-letter components
+ followed by a `|.|' and three-letter suffix. ISO~9660 names use
+ capital letters, but on case-sensitive operating systems these
+ are usually transliterated to lower-case.} file systems).
+ Unpack the package with something like
+\display \defverbatim\"
+ "zcat pdcmac10.tgz | tar -xf -"
+\enddisplay
+ This generates a new directory called |pdcmac-1.0|.
+
+ PKZIP archives unpack files into the current directory, so they
+ are unpacked like this:
+\display
+ |md pdcmac|\cr
+ |cd pdcmac|\cr
+ |unzip a:\pdcmac10.zip|\cr
+\enddisplay
+ assuming the zipfile is so named.
+
+ There is a list of the files in the release in the appendix.
+%}}} unpack
+%{{{ compile
+
+\subsec{Generating the macro files}
+
+ The macro files are packaged with their documentation in
+ |dtx|\note{The \LaTeX~2e distribution uses the file name suffix
+ |dtx| for files with a similar function. Unlike the \LaTeX\
+ system, the |dtx| files for PDCMAC produce the printed
+ documentation and unpack the macro files themselves using a
+ single macro file |pdccode.tex| and a single run through plain
+ \TeX; there are no |drv| or |ins| files.} files; run plain
+ \TeX\ on each of the |dtx| files in turn to generate the macro
+ files and the printed documentation. The resulting definition
+ files have almost no comments in them; instead you must read the
+ |dtx| files or the printed documentation.
+
+ The macro files are written in the current working directory.
+ They are identical to the code lines in the printed
+ documentation (they are generated from the same text in the
+ |dtx| files).
+
+ There is a file |pdcmondo.tex| which reads all of the |dtx|
+ files in turn except |pdcsty.dtx| and produces one large (70+
+ pages) document as well as all their macro files. This is most
+ useful if you want to make a printed listing rather than keeping
+ |dvi| files for reading online.
+
+%}}} compile
+%{{{ install
+\subsec{Installing the files}
+
+ The definition (|tex|) files belong in a directory where \TeX\
+ can find them. In the new soon-to-be-standardized file name
+ conventions TWG-TDS~$0.61$\note{The TUG Working Group on a \TeX\
+ Directory Structure, {\it A Directory Structure for
+ Implementation-Independent \TeX\ Files} Version~$0.61$
+ (\url{ftp}{ftp.th-darmstadt.de/pub/tex/TDS-compliant/draft}{twg-tds.dvi},
+ 10~February 1995).} this is the directory
+ \texmf{tex/plain/pdcmac}{}. On older systems, the files go with
+ all the other macro files.
+
+ With TWG-TDS~$0.61$ the documentation goes in
+ \texmf{doc/plain/pdcmac}{}. If you do not have a directory for
+ documentation, the documentation files might as well go in the
+ \TeX\ inputs directory as well.
+%}}} install
+%{{{ configure
+
+\subsec{Configuration on Unix systems}
+
+ There is a |configure| script and makefile template included,
+ which allows the process of unpacking to be run automatically on
+ Unix systems.\note{The configuration system is based on the GNU
+ Coding Standards, but was written by hand rather than using
+ Autoconf.} The remainder of this section assumes you are
+ installing PDCMAC on a Unix system.
+
+\subsec{Run\-ning |configure|}
+
+ Start by running a Bourne Shell on the |configure| script, by
+ typing `|sh configure|'. This examines your file system and
+ attempts to guess suitable directories in which to put macro and
+ documentation files. The |configure| script understands options
+ listed in Table~1.
+
+\midinsert
+\noindent{\bf Table 1}\quad Options for |configure|. Other
+ options are ignored.\smallskip
+\moveleft\leftmargin\vbox{
+ \def\,{{\rm,}}
+ \def\\#1\, #2&{\vbox to \ht\strutbox{\hbox{$
+ \left.
+ \vcenter{\ialign{\strut##\hfil\cr#1 \cr#2 \cr}}
+ \right\rbrace
+ $}\vss}&}
+ \halign to \bodywd{\tt#\hfil\tabskip=0pt plus 1fil&
+ \vtop{\noindent#\smallskip}\tabskip=0pt\cr
+\noalign{\hrule height 1pt \vskip1.5\jot}%
+\it Option&\omit\it Meaning\hfil\cr
+\noalign{\vskip1\jot \hrule \vskip1.5\jot}%
+ \ttminus h\, \ttminus \ttminus help&
+ Print a summary of options\cr
+ \ttminus n\, \ttminus \ttminus no\ttminus create&
+ Create |config.status| but don't run it to make |makefile|.\cr
+ \\\ttminus t$dir$\, \ttminus \ttminus texmf=$dir$&
+ Says where to find a \TeX\ directory hierarchy. For example,
+ `|-t|\allowbreak|/usr/texmf|' or `|-t|\allowbreak|/usr/local/lib/tex3.14/tex|'. The
+ |configure| script will often guess correctly without this
+ option.\cr
+ \\\ttminus p$dir$\, \ttminus \ttminus prefix=$dir$&
+ Specifies the parent of the \TeX\ directory, for example,
+ `|-p/usr|' or `|-p/usr/local/lib|'. This is for compatability
+ with the GNU coding standards.\cr
+ \\\ttminus wtds\, \ttminus \ttminus with\ttminus tds& Specify that the \TeX\ directory uses some
+ approximation to the TWG-TDS $0.61$ file name
+ conventions. This should not be necessary as
+ |configure| will usually guess correctly.
+ \cr
+\noalign{\vskip\jot \hrule height 1pt}%
+} }
+\endinsert
+
+ The configuration process creates a script |config.status| which
+ records the configuration; running |config.status| generates a
+ file |makefile|\note{Usually a makefile is called |Makefile|,
+ but I~wanted to make the package proof against file name munging
+ from being copied onto MS-DOS discs.} from the template
+ |makefile.in|.
+
+ The |config.status| script has one option |-r| (or |--recheck|),
+ which re-runs |configure| with the same arguments as were used
+ to generate |config.status|; any options following |-r| are
+ passed to |configure|.
+
+%}}} configure
+%{{{ make
+
+\subsec{Running |make|}
+
+ Now you can use the |make| command to unpack and install all the
+ files. Do `|make|' to generate all the definition files and
+ documentation. Then `|make install|' to copy the macros into
+ \TeX's macros directory and the documentation into \TeX's
+ documentation area (assuming there is one). The standard
+ targets which the makefile understands are listed in Table~2.
+
+\midinsert
+\noindent{\bf Table 2}\quad Conventional targets defined in |makefile|.\smallskip
+\moveleft\leftmargin\vbox{
+ \def\,{{\rm,}}
+ \def\\#1\, #2&{\vbox to \ht\strutbox{\hbox{$
+ \left.
+ \vcenter{\ialign{\strut##\hfil\cr#1 \cr#2 \cr}}
+ \right\rbrace
+ $}\vss}&}
+ \halign to \bodywd{\tt make #\hfil\tabskip=0pt plus 1fil&
+ \vtop{\noindent\strut#\strut\smallskip}\tabskip=0pt\cr
+\noalign{\hrule height 1pt \vskip1.5\jot}%
+\omit\it Command&\omit\it Meaning\hfil\cr
+\noalign{\vskip1\jot \hrule \vskip1.5\jot}%
+ all&
+ Generate all the definitions files and |dvi| files\cr
+ install&
+ Generate the definition files and copy them in to \TeX's
+ macro area. Also copy the |dvi| files into \TeX's documentation
+ area, if possible.\cr
+ uninstall&
+ Delete all the files that `|make install|' would install.\cr
+ mostlyclean& Delete some files but not as many as `|make clean|'.\cr
+ clean& Delete files from the current directory that are normally
+ created by `|make all|'. Don't delete files that could be built
+ using the makefile but which come with the distribution.\cr
+ distclean& Delete some more files, including those made by
+ configuration. If you have unpacked the files and generated the
+ macro files without creating any other files, this should leave
+ only the files in the distribution.\cr
+ realclean& Delete files deleted `|make distclean|' and any others
+ that can be rebuilt using the makefile.\cr
+ TAGS& Generate a tags table file for Emacs.\cr
+ dist& Make a tarfile and zipfile for the package.\cr
+\noalign{\vskip\jot \hrule height 1pt}%
+} }
+\endinsert
+%}}} make
+%}}} unpack install
+%{{{ using
+
+\section{Using PDCMAC style files for your documents}
+
+ Normally a document will start by reading one of the style
+ files, which in turn load the various definition files. The
+ style files are intended to be more-or-less compatible with each
+ other. I have arbitrarily divided the style files into
+ `leaflets' and `docs'.
+%{{{ leaflets
+
+\subsec{Leaflet styles}
+
+ A leaflet is only a few pages, so does not need a table of
+ contents or division into large units. There is still a
+ |\section| command, but it is designed for smaller divisions
+ than the |\section| command used in `docs' (in a leaflet,
+ |\section| produces a heading with prominence similar to that
+ produced by |\subsec| in a doc).
+
+ A leaflet-style document has no front matter, and so should
+ start with some sort of heading for the title.
+\lines \it
+ |\input pdccmlft|
+ |\majorheadline{| title |} \noheadlinetrue|
+ \quad commands to generate the title at the top of the first page
+\smallskip
+ \quad text of the document, perhaps using |\section| commands
+\smallskip
+ |\bye|
+\endlines
+%}}} leaflets
+%{{{ docs
+
+\subsec{Doc styles}
+
+ A doc is something larger than a leaflet but smaller than a
+ book. It has a table of contents and numbered sections and
+ subsections, with section titles being reproduced in the
+ headline. There is no provision for cross-references and
+ automatic bibliography (which require an |aux| file and at least
+ two passes through \TeX).
+
+ Sections may be grouped into larger divisions I have called
+ \dfn{part}s. Parts are numbered independently of sections, in
+ upper-case roman numerals. (There is no special reason for not
+ numbering sections within parts; I~just prefer to have fewer
+ levels of numbering, so we get `\S$12.6$' instead of
+ `Subsection~$4.1.6$'.)
+
+\lines\it
+ |\input pdccmdoc|
+ |\part{| title |}| ---or--- |\majorheadline{| title |}|
+ |\section{| title |}|
+ \quad contents of section
+\smallbreak
+ more sections
+\smallbreak
+ |\frontmatter|
+ \quad front matter
+ |\endfrontmatter|
+ |\bye|
+\endlines
+
+\subsec{Front matter}
+
+ The front matter of the document---the title page, preface,
+ forword, etc.---must be printed {\it last}, with the table of
+ contents at the end of the front matter; this is so that the
+ table of contents may be accumulated during the \TeX ing of the
+ file.\note{It has a benefit for people reading the document with
+ a browser: page~1 of the document is the first page of the DVI
+ file, which makes selecting a given page easy, and the table of
+ contents is at the very end, so the browser's `go to last page'
+ command can be used to find the table of contents quickly.}
+ The front matter starts with |\frontmatter| and may contain
+ |\section| commands. Such sections will be unnumbered and will
+ not appear in the table of contents.
+
+ For a short document, a separate title page is probably
+ excessive, and an abstract may be preferable to a preface. In
+ this case the first page after |\frontmatter| could have the
+ title of the document (with author etc.)\ followed by an
+ abstract, any copyright information (or other small print), and
+ the contents (generated by |\endfrontmatter|). In other words,
+ something like this:
+\lines\it
+ |\frontmatter|
+ \quad commands to print the title, etc.
+ \quad|\abstract|
+ \qquad the text of the abstract
+ \quad|\endabstract|
+ \quad copyright information, etc.
+ |\endfrontmatter|
+\endlines
+ For a longer document, there will be a separate title page and
+ perhaps a preface.
+\lines\it
+ |\frontmatter|
+ \quad|\titlepage|
+ \qquad commands to print the title, etc.
+ \quad|\splittitlepage|
+ \qquad print copyright information, etc.
+ \quad|\endtitlepage|
+ \quad|\section{Preface}|
+ \qquad text of preface, etc.
+ |\endfrontmatter|
+\endlines
+ The macro |\splittitlepage| marks the division between the title
+ page (title recto, page~i) and the back of the title page (title
+ verso, page~ii), which is where copyright information goes.
+ When formatting for one-sided printing, the copyright
+ information belongs on the title recto, because the title verso
+ will be blank, so |\splittitle| instead does |\vfill|.
+%}}} docs
+%{{{ new syms
+\subsec{New symbols}
+
+ Several new symbols common to Malvern~A and PostScript fonts are
+ added (listed in Table~3). Approximations built from other
+ glyphs are available in Computer Modern documents.
+
+
+\def\chartable#1{%
+ \midinsert
+ \leftline{{\bf Table \newtableid}\quad #1}\smallskip
+ \def\cs##1{\hbox to \gridwd{\hbox to2em{\csname##1\endcsname\hfil}
+ {\tt\char`\\##1}\hfil}}
+ \def\mcs##1{\hbox to \gridwd{\hbox to2em{$\csname##1\endcsname$\hfil}
+ {\tt\char`\\##1}\hfil}}
+ \def\mch##1{\hbox to \gridwd{\hbox to2em{$##1$\hfil}
+ {\tt##1}\hfil}}
+ \moveleft\leftmargin\vbox\bgroup
+ \hrule\medskip
+ \halign\bgroup ##\hfil&& \hskip\colsep##\hfil\cr
+}
+\def\endchartable{
+ \egroup
+ \smallskip\hrule
+ \egroup
+ \endinsert
+}
+
+\chartable{New symbols}
+ \cs{cents}& \cs{pounds}& \cs{yen}& \cs{florin}\cr
+ \cs{currency}& \cs{lguillemet}& \cs{rguillemet}& \cs{gbdecimal}\cr
+ \cs{permille}& \cs{registered}& \cs{orda}& \cs{ordo}\cr
+ \cs{S}& \cs{P}& \cs{dag}& \cs{ddag}\cr
+\endchartable
+
+ The symbols in the last row are `new' in the sense that they
+ will change according to the current font when using Malvern or
+ PostScript fonts.
+
+
+ The maths symbols in Table~4 will be in the current |\rm| font
+ (fam~0) in PostScript documents.
+\begingroup\catcode`_=12 \catcode`\|=12
+\chartable{Maths symbols taken from Adobe's latin character set}
+ \mch{<}& \mch{>}& \mcs{_}& \mch{|}\cr
+ \mcs{backslash}& \mcs{setminus}& \mcs{sim}& \mcs{mid}\cr
+ \mcs{bullet} &\mcs{lbrace}& \mcs{rbrace}\cr
+\endchartable
+\endgroup
+
+%}}} new syms
+%}}} using
+
+\section{Appendix}
+%{{{ tagged-table intrinsics
+
+\def\taggedtable#1#2#3{
+ \medskip
+ \noindent{\bf Table \newtableid}\quad#1
+ \medskip
+ \moveleft\leftmargin\vbox{\hsize=\bodywd
+ \hrule height 1pt \medskip
+ \line{\it\strut\hbox to \leftmargin{#2\hfil}{\it #3}\hfil}
+ \smallskip \hrule
+ }
+ \tagged \everytag{\tt}
+}
+\def\endtaggedtable{
+ \endtagged
+ \removelastskip \medskip \hrule height 1pt \bigskip
+}
+
+%}}} tagged-table intrisnics
+%{{{ file types
+\subsec{File suffixes}
+
+ In this document, `a |foo| file' refers to a file of the type
+ conventionally given a name ending in `-|.foo|' (using lower
+ case because \TeX\ file names are always given in lower case).
+ This table lists some conventional file name suffixes used for
+ files in this package.
+
+\taggedtable{File suffixes used in this package}{\hbox to
+ \gridwd{Suffix\hfil Origin}}{Meaning}
+\def\\#1#2{\TAG{\hbox to \gridwd{\tt#1\hfil\rm#2}}}
+\\{1}{Unix}
+ Manual page for a program, in |nroff| format.
+\\{def}{\LaTeX~2e}
+ Definitions used by macro files but not expected to be referred
+ to directly in user documents.
+\\{dtx}{\LaTeX~2e}
+ Documented \TeX\ macros---a file which combines macro
+ definitions with their printed documentation.
+\\{eps}{Adobe}
+ An EPSF (Encapsulated PostScript Format) file.
+\\{fig}{Fig}
+ A picture file in Fig's undocumented format.
+\\{fnt}{PDCMAC}
+ Font list---a list of fonts used in a document, generated by the
+ PDCFSEL macros.
+%\\{idx}{\LaTeX~$2.09$}
+% Unsorted index file. (The lamentable convention of using |idx|
+% and |ind|, both standing for `index' but representing different
+% stages in the index-generation process, is for compatibility
+% with \LaTeX.)
+\\{in}{GNU}
+ Template for a configuration file---when using the |configure|
+ script, the file |foo| is generated from the template |foo.in|.
+\\{tex}{\TeX}
+ (1)~A plain \TeX\ document. (2)~A plain \TeX\ definition file.
+\\{tgz}{GNU}
+ A Unix |tar| archive, compressed with GNU |zip|. (Same as
+ |tar.gz|.)
+\\{txt}{traditional}
+ Plain ASCII text, readable on the terminal.
+\\{zip}{?PKZIP}
+ An MS-DOS PKZIP archive.
+\endtaggedtable
+
+%}}} file types
+%{{{ file list
+
+\subsec{List of files}
+
+ Here is a list of files supplied with the package. A list of
+ the files generated from these---the definition files, used in
+ documents---form the next section.
+
+ All the names are chosen so that they may be copied onto, say,
+ an ISO~9660\note{See note~1 on page 2.} or MS-DOS file system and
+ back to a sensible file system without the names being changed.
+
+\taggedtable{Files supplied in the package.}{File}{Contents}
+\\{00readme.txt}
+ Brief description of the package.
+
+\\{configure}
+ A shell script used to automatically configure the makefile for
+ Unix systems. (This is an unavoidable exception to the rule
+ that names are ISO-9660-compatible.)
+
+\\{copying.tex}
+ A copy of the GNU General Public Licence, in \TeX able form.
+
+\\{copying.txt}
+ A copy of the GNU General Public Licence.
+
+\\{dtxtags}
+ Shellscript for making tag files in |etags|(1) format.
+
+\\{dtxtags.1}
+ A Unix manual entry for |dtxtags|.\note{This (and three more
+ shellscripts used in the makefile) are not intended to be
+ installed anywhere, but I~included manual pages just in case
+ they are---or in case the installer is curious as to what these
+ scripts do.}
+
+\\{fig2epsf}
+ A Unix shellscript that converts figures from Fig's format into
+ Encapsulated PostScript Format (EPSF) version~$3.0$ files. It
+ uses |fig2dev| (from the TransFig package) to do most of the
+ work. (It munges the PostScript code produced by |fig2dev|
+ 2.1.4.1 so that it will print and will work with Ghostview.)
+
+\\{fig2epsf.1}
+ A Unix manual page for |fig2epsf|.
+
+\\{install.txt}
+ Installation hints.
+
+\\{makefile.in}
+ Template from which the configuration process generates a
+ makefile, used by Unix's |make| command to automate compilation
+ and installation. Should be called |Makefile.in| but that's not
+ ISO-9660-compliant.
+
+\\{magrmac.dtx}
+ Documentation for Malvern Greek macros. This replaces the file
+ |magrmac.tex| included in Malvern release~$1.2$.
+
+\\{magrman.tex}
+ Brief user manual for |magrmac.tex|. This replaces the version
+ distributed with Malvern~$1.2$. It requires some Malvern~G
+ fonts.
+
+\\{oput01.eps oput02.eps}
+ Diagrams for |pdcoput5.dtx|.\note{The second edition of the {\it
+ PostScript Language Reference Manual} says these should be called
+ `-|.epsf|', but such names are not ISO-9660-compliant, so I~have
+ switched to `-|.eps|'.}
+
+\\{oput01.fig oput02.fig}
+ Source code for the above figures (Fig format).
+
+\\{pdcadobe.dtx}
+ Source code and documentation for |pdcadobe.tex|.
+
+\\{pdccode.dtx}
+ Source code and documentation for |pdccode.tex|.
+
+\\{pdccode.tex}
+ Macros used by |dtx| files. This file has to be included
+ because |pdccode.dtx| can't be \TeX ed without it.
+
+\\{pdccode2.tex}
+ An experimental variation allowing multiple simultaneous
+ code files.
+
+\\{pdcfmt2.dtx}
+ Source code and documentation for formatting macros.
+
+\\{pdcfsel.dtx}
+ Source code and documentation for font selection macros.
+
+\\{pdcguide.dvi}
+ A copy of the user guide, already run through \TeX.
+
+\\{pdcguide.tex}
+ This user guide for PDCMAC.
+
+\\{pdcl1maa.dtx}
+ Source code and documentation for |pdcl1maa.tex|.
+
+\\{pdcmacvn.tex}
+ Version number for the whole package.
+
+\\{pdcmisc.dtx}
+ Source code and documentation for some small macro files.
+
+\\{pdcmondo.tex}
+ Makes a combined listing of all the |dtx| files (except
+ |pdcsty.dtx|).
+
+\\{pdcoput5.dtx}
+ Source code and documentation for an output routine.
+
+\\{pdcsty.dtx}
+ Source code and documentation for style files (|pdccmdoc.tex|,
+ |ma55doc.tex|, etc.).
+
+\\{pinstall}
+ A Unix shellscript that substitutes for the |install| command on
+ systems which don't have GNU |install|.\note{I am not going to
+ bother trying to make a makefile that will work with all the
+ different versions of |install|, since there is no easy way to
+ tell them apart and they are mutually incompatible.}
+
+\\{pinstall.1}
+ A Unix manual page for |pinstall|.
+
+\\{pmkdir}
+ A Unix shellscript used to create a directory. Unlike plain
+ |mkdir|, it creates parent directories of the specified
+ directory if they do not exist. This would be called
+ |pmkdirhier| but that name is not ISO-9660-compliant.
+
+\\{pmkdir.1}
+ A Unix manual page for |pmkdir|.
+
+\\{version.txt}
+ List of the version identifiers of the |dtx| files and the
+ shellscripts that come with the package.
+\endtaggedtable
+
+%}}} file list
+%{{{ macro files
+
+\subsec{List of definition files}
+
+ The following files are the ones that are intended to go in the
+ \TeX\ inputs area and to be used in documents. Here a
+ \dfn{macro file} is simply a file of \TeX\ definitions; a
+ \dfn{style file} is a higher-level definition file that
+ specifies most of the things that affect the style of a document
+ (layout, fonts, macros, etc.). Style files start by reading a
+ bunch of macro files.
+
+\taggedtable{Files generated from the |dtx| files.}{File}{Contents}
+\\{ma55doc.tex}
+ Style file for short documents with Malvern~55 as the text font.
+ A table of contents and page headlines are generated
+ automatically.
+
+\\{ma55lft.tex}
+ Style file for very short documents with Malvern~55 as the text
+ font. `Leaflet'-class documents have no table of contents.
+
+\\{magrmac.tex}
+ Macros for typesetting in Greek with Malvern fonts (or any font
+ with the Malvern~G encoding). There is a brief user's guide in
+ |magrman.tex|.
+
+\\{pdcadobe.tex}
+ Support for fonts with the Adobe Standard Roman and Adobe Symbol
+ repertoires\note{The \dfn{repertoire} of an encoding scheme is
+ the set of characters/glyphs it includes. Since PostScript
+ fonts may be easily re-encoded, repertoire is more significant
+ then the actual encoding.} in the |dvi| file, and ISO~8859--1
+ (Latin-1) conventions in the manuscript file. The output
+ encoding actually used is that variation on \TeX\ Text generated
+ by the |afm2tfm| that comes with DVIPS. Newer \TeX\ systems
+ should instead use PostScript fonts with (a subset of) the 1990
+ Cork encoding.\note{Variously called `DC', `EC', `T1', and
+ `\TeX\ Extended Text---Latin', and described in {\it TUGboat}
+ 10\#4.} This file actually combines two functions: (1)~making
+ the various symbols availabe via commands like |\pounds| and
+ (2)~making Latin-1 characters in the manuscript produce
+ corresponding characters in the output. Described in
+ |pdcadobe.dtx|.
+
+
+\\{pdccmdoc.tex}
+ Style file for short documents with Computer Modern Roman as the
+ text font. A table of contents and page headlines are generated
+ automatically.
+
+\\{pdccmlft.tex}
+ Style file for very short documents with Computer Modern Roman
+ as the text font. `Leaflet'-class documents have no table of
+ contents.
+
+\\{pdcfmt2.tex}
+ Macros for formatting text---bulleted and numbered lists, syntax
+ descriptions, verbatim text, headings, etc. Most of
+ the facilities used by the style files come from this file.
+
+\\{pdcfsel.tex}
+ Macros for selecting fonts. Fonts are organized into
+ \dfn{fontset}s (selected with macros with names like
+ |\bodyfonts|) in which fonts are selected with nicknames like
+ |\it|, |\bf| (specified at the start of the document using
+ template macros).
+
+\\{pdchyex.tex}
+ Some random British English hyphenation exceptions (developed
+ while I~was using American English hyphenation paterns). You
+ may not want to use this. Described in |pdcmisc.dtx|.
+
+\\{pdcimth.tex}
+ Make letters in maths formulas come out in text italic instead
+ of math italic. Useful if the body font isn't CMR, or if
+ multiple-letter identifiers are used. Described in
+ |pdcmisc.dtx|.
+
+\\{pdcl1maa.tex}
+ Support for documents with using the ISO~8859--1 (Latin-1)
+ character set in the manuscript file and fonts with Malvern~A
+ encoding in the |dvi| file. Described in |pdcl1maa.dtx|.
+
+\\{pdccmsub.tex}
+ Define some Malvern~A and PostScript glyphs (like \yen,
+ \registered) by overprinting CM glyphs. Described in
+ |pdcmisc.dtx|.
+
+\\{pdcmigr.tex}
+ Make Greek capitals in maths mode use math italic (fam~1)
+ letters instead of letters from the roman font. Especially
+ useful when there are no Greek caps in the roman font.
+ Described in |pdcmisc.dtx|.
+\endtaggedtable
+%}}} macro files
+%{{{ old files
+\subsec{Obselete files}
+
+ The following macro files were included with the Malvern~$1.0$
+ distribution, but were not intended to be installed.
+ Nevertheless they appear to have been copied into some older
+ versions of the Unix\TeX\ distribution. They are obselete, and
+ their successors have new names (intended to reduce the chance
+ of accidental clashes). I'd appreciate people removing them
+ from their \TeX\ systems.
+\display
+ |formac.tex|&
+ |parmac.tex|&
+ |utils.tex|&
+ |ssoutput.tex|\cr
+ |ldfonts.tex|&
+ |malvern.tex|&
+ |cmdoc.tex|\cr
+\enddisplay
+ The following documents are similarly obselete and should not be
+ in the macros directory anyway.
+\display
+ |aboutmalvern.tex|&
+ |latexfmv.tex|\cr
+\enddisplay
+ The following macro files have the new-style names, but are
+ superseded by PDCMAC~$1.0$ files. You are not required to
+ remove then if you have documents using them. Fortunately, they
+ appear not to have been absorbed by the Unix\TeX\ distribution
+ anyway.
+\display
+ |pdcfmt.tex|&
+ |pdcpars.tex|&
+ |pdcutil.tex|&
+ |pdcoput.tex|\cr
+\enddisplay
+ The new versions will have the major number of their version ID
+ appended to their names (e.g., |pdcfmt2.tex|), and this way new
+ and old versions may coexist, allowing older documents to still
+ be processed by \TeX. The functionality of |pdcpars.tex| and
+ |pdcfmt.tex| have been taken over by |pdcfmt2.tex|.
+
+
+%}}} old files
+%{{{ gpl
+
+\rigidbalancepartialpage{\bigskip}
+
+\begingroup \notefonts \setncolumns2 \everypage{} \leftmargin=0pt
+ \advance\textlistdepth2 \let\section=\subsec
+ \input copying.tex
+ \rigidbalancepartialpage{\bigskip}
+\endgroup
+
+
+%}}} gpl
+
+\frontmatter
+%{{{ an absurd logo
+
+\ifx\asyfam\UNDEFINED
+%{{{ CMSSDC logo
+
+\moveleft\leftmargin\vbox{
+
+\font\titlefont=cmssdc10 at 24pt
+
+\leftline{\titlefont P D C M A C\quad User Guide}
+
+\bigskip
+} % end of vbox
+%}}}
+\else
+%{{{ PostScript logo
+
+\moveleft\leftmargin\vbox{\hsize=\bodywd
+ \font\thefont=pplr at 120pt
+ \input rotate
+
+ \line{\thefont
+ \setbox0=\hbox{\lower0.975ex\hbox{pd}}\dp0=1ex \ht0=0pt \rotu0%
+ c%
+ \setbox0=\hbox{\lower0.95ex\hbox{vw}}\dp0=1ex \ht0=0pt \rotu0%
+ c\hfil
+ }
+}
+\medskip
+\leftline{\font\thotherfont=pplri at 60pt \thotherfont
+ \kern-0.1em USER GUIDE}
+\bigskip
+
+%}}} PostScript logo
+\fi
+%}}} an absurd logo
+%{{{ titlepage
+
+\halign{#\hfil\cr
+ \headingfonts Edition 1 for Release
+ $\textfont0=\font \pdcmacversion$\cr
+\noalign{\medskip}%
+ P. Damian Cugley\cr
+\noalign{\smallskip}%
+ Oxford University Computing Laboratory\cr
+ Parks Road\cr
+ Oxford \sc{OX2~7HN}\cr
+ UK\cr
+\noalign{\smallskip}%
+ |damian.cugley@comlab.ox.ac.uk|\cr
+}
+
+\bigskip
+\abstract
+ PDCMAC is a collection of macro files intended to be useful with
+ \TeX\ formats with similar conventions to those described in the
+ {\it\TeX book}. This document describes how to unpack the files
+ and use them in \TeX\ documents.
+\endabstract
+
+\bigskip
+
+\global\setbox\botbox\vbox{\hsize=\bodywd \prevdepth=0pt
+\noindent
+ {\it PDCMAC User Guide}. \copyright~1995 P. Damian Cugley. All
+ rights reserved. Verbatim copies of this document (including
+ this copyright message) may be freely distributed. This edition
+ first published March 1995.
+}
+
+\let\section=\subsec
+%}}} title page
+\endfrontmatter
+
+\bye
+%}}}
+%Local Variables:
+%fill-prefix: " "
+%fold-folded-p: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcl1maa.dtx b/macros/plain/contrib/pdcmac/pdcl1maa.dtx
new file mode 100644
index 0000000000..8e13681ea0
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcl1maa.dtx
@@ -0,0 +1,248 @@
+% pdcl1maa.dtx -- documentation & source for pdcl1maa.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCL1MAA -- Formatting Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcl1maa.dtx",
+%%% version = "$Revision: 1.3 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:09:52 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdcl1maa.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcl1maa
+%{{{ preamble
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: pdcl1maa.dtx,v 1.3 1995/03/30 16:09:52 pdc Exp $\endrcs
+\codefile{pdcl1maa.tex}
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{PDCL1MAA---Macros for using Latin-1 characters with Malvern~A}
+\section{Introduction}
+
+ This document describes |pdcl1maa.tex|, a collection of
+ definitions designed to make Malvern~A characters available
+ using the ISO~8859--1 input encoding (Latin-1).
+
+
+\subsec{About this document}
+
+ The definitions file and the printed documentation are both in
+ |pdcl1maa.dtx|, a `documented \TeX\ macros' file\footnote*{The
+ \LaTeX~2e distribution uses files with the `|dtx|' suffix for
+ similar purposes.} which, when processed by plain \TeX,
+ generates a fresh copy of |pdcl1maa.tex| in the current directory
+ in addition to the |dvi| file. This ensures that the printed
+ documentation and the code it describes are identical. The
+ |dtx| file uses the macros in |pdccode.tex|.
+
+%}}} introduction
+%{{{ File identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+
+\code
+ \|\% pdcl1maa.tex \fileversion~\filedate~-- Latin-1 chars in Malvern-A
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcl1maa.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "ISO 8859-1 characters using Malvern-A fonts.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+%}}} file id
+%{{{ ISO 8859-1 support
+\section{ISO 8859--1 input}
+
+\subsec{Symbols}
+
+ Those characters whose code is the same as the code of the
+ corresponding glyph are left alone (with catcode~12). For
+ example, |^^a3| (pounds sterling) is left alone.
+
+ Those that have an equivalent |\chardef| (or |\mathchardef|)
+ name are defined with |\let|. Those with an equivalent standard
+ ligature use that ligature.
+
+ I don't use |\declareactivechar| on these because they would not
+ work properly in verbatim text with catcode~12. (Extending
+ verbatim text to include Latin-1 will take a few definitions
+ along the same lines as |\ttlq| etc.)
+\code
+ |\catcode`^^a0\active \let^^a0=~
+% A1
+% A2
+% A3
+% A4
+ |\catcode`^^a5\active \let^^a5=\yen
+% A6
+ |\catcode`^^a7\active \let^^a7=\S
+ |\catcode`^^a8\active \let^^a8=\"
+ |\catcode`^^a9\active \let^^a9=\copyright
+ |\catcode`^^aa\active \let^^aa=\orda
+ |\catcode`^^ab\active \def^^ab{<<}
+ |\catcode`^^ac\active \let^^ac=\lnot
+ |\catcode`^^ad\active \let^^ad=\-
+ |\catcode`^^ae\active \let^^ae=\registered
+ |\catcode`^^af\active \let^^af=\=
+\smallbreak
+ |\catcode`^^b0\active \let^^b0=\degrees
+ |\catcode`^^b1\active \let^^b1=\pm
+ |\catcode`^^b2\active \def^^b2{^2}
+ |\catcode`^^b3\active \def^^b3{^3}
+ |\catcode`^^b4\active \let^^b4=\'
+ |\catcode`^^b5\active \let^^b5=\mu
+ |\catcode`^^b6\active \let^^b6=\P
+ |\catcode`^^b7\active \let^^b7=\gbdecimal
+ |\catcode`^^b8\active \let^^b8=\c
+ |\catcode`^^b9\active \def^^b9{^1}
+ |\catcode`^^ba\active \let^^ba=\ordo
+ |\catcode`^^bb\active \def^^bb{>>}
+ |\catcode`^^bc\active \def^^bc{\frac14}
+ |\catcode`^^bd\active \def^^bd{\frac12}
+ |\catcode`^^be\active \def^^be{\frac34}
+ |\catcode`^^bf\active \def^^bf{?`}
+\smallbreak
+ |\catcode`^^d7\active \let^^d7=\times
+ |\catcode`^^f7\active \let^^f7=\div
+\endcode
+
+\subsec{Composite letters}
+
+
+ The characters that represent marks for composite
+ letters\footnote*{This phrase is used on the grounds that the
+ word {\it accent} tends to provoke lectures on ways in which
+ many composite letters do {\it not} represent accents in the
+ languages in which they are used.} are |\let| to the
+ corresponding composite-letter-making command---one may write
+ `{\tt\char"7F u\char"18 c}' to get `\"u\c c'.
+\code
+ |\catcode`^^c0\active \def^^c0{\`A}
+ |\catcode`^^c1\active \def^^c1{\'A}
+ |\catcode`^^c2\active \def^^c2{\^A}
+ |\catcode`^^c3\active \def^^c3{\~A}
+ |\catcode`^^c4\active \def^^c4{\"A}
+ |\catcode`^^c5\active \let^^c5=\AA
+ |\catcode`^^c6\active \let^^c6=\AE
+ |\catcode`^^c7\active \def^^c7{\c C}
+ |\catcode`^^c8\active \def^^c8{\`E}
+ |\catcode`^^c9\active \def^^c9{\'E}
+ |\catcode`^^ca\active \def^^ca{\^E}
+ |\catcode`^^cb\active \def^^cb{\"E}
+ |\catcode`^^cc\active \def^^cc{\`I}
+ |\catcode`^^cd\active \def^^cd{\'I}
+ |\catcode`^^ce\active \def^^ce{\^I}
+ |\catcode`^^cf\active \def^^cf{\"I}
+\smallbreak
+ |\catcode`^^d0\active \let^^d0=\DH
+ |\catcode`^^d1\active \def^^d1{\~N}
+ |\catcode`^^d2\active \def^^d2{\`O}
+ |\catcode`^^d3\active \def^^d3{\'O}
+ |\catcode`^^d4\active \def^^d4{\^O}
+ |\catcode`^^d5\active \def^^d5{\~O}
+ |\catcode`^^d6\active \def^^d6{\"O}
+ |\catcode`^^d8\active \let^^d8=\O
+ |\catcode`^^d9\active \def^^d9{\`U}
+ |\catcode`^^da\active \def^^da{\'U}
+ |\catcode`^^db\active \def^^db{\^U}
+ |\catcode`^^dc\active \def^^dc{\"U}
+ |\catcode`^^dd\active \def^^dd{\'Y}
+ |\catcode`^^de\active \let^^de=\TH
+ |\catcode`^^df\active \let^^df=\ss
+\smallbreak
+ |\catcode`^^e0\active \def^^e0{\'a}
+ |\catcode`^^e1\active \def^^e1{\`a}
+ |\catcode`^^e2\active \def^^e2{\^a}
+ |\catcode`^^e3\active \def^^e3{\~a}
+ |\catcode`^^e4\active \def^^e4{\"a}
+ |\catcode`^^e5\active \let^^e5=\aa
+ |\catcode`^^e6\active \let^^e6=\ae
+ |\catcode`^^e7\active \def^^e7{\c c}
+ |\catcode`^^e8\active \def^^e8{\`e}
+ |\catcode`^^e9\active \def^^e9{\'e}
+ |\catcode`^^ea\active \def^^ea{\^e}
+ |\catcode`^^eb\active \def^^eb{\"e}
+ |\catcode`^^ec\active \def^^ec{\`i}
+ |\catcode`^^ed\active \def^^ed{\'i}
+ |\catcode`^^ee\active \def^^ee{\^i}
+ |\catcode`^^ef\active \def^^ef{\"i}
+\smallbreak
+ |\catcode`^^f0\active \let^^f0=\dh
+ |\catcode`^^f1\active \def^^f1{\~n}
+ |\catcode`^^f2\active \def^^f2{\`o}
+ |\catcode`^^f3\active \def^^f3{\'o}
+ |\catcode`^^f4\active \def^^f4{\^o}
+ |\catcode`^^f5\active \def^^f5{\~o}
+ |\catcode`^^f6\active \def^^f6{\"o}
+ |\catcode`^^f8\active \let^^f8=\o
+ |\catcode`^^f9\active \def^^f9{\`u}
+ |\catcode`^^fa\active \def^^fa{\'u}
+ |\catcode`^^fb\active \def^^fb{\^u}
+ |\catcode`^^fc\active \def^^fc{\"u}
+ |\catcode`^^fd\active \def^^fd{\'y}
+ |\catcode`^^fe\active \let^^fe=\th
+ |\catcode`^^ff\active \def^^ff{\"y}
+\endcode
+
+%}}} ISO 8859-1 support
+\endcodefile
+\enddocument
+\bye
+%}}} pdcl1maa.dtx
+
+%Local variables:
+%fill-prefix: "\t"
+%fold-folded-p: t
+%End:
+
diff --git a/macros/plain/contrib/pdcmac/pdcmacvn.tex b/macros/plain/contrib/pdcmac/pdcmacvn.tex
new file mode 100644
index 0000000000..b1f9395e65
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcmacvn.tex
@@ -0,0 +1 @@
+\def\pdcmacversion{1.0.01}
diff --git a/macros/plain/contrib/pdcmac/pdcmisc.dtx b/macros/plain/contrib/pdcmac/pdcmisc.dtx
new file mode 100644
index 0000000000..ad7cad7262
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcmisc.dtx
@@ -0,0 +1,555 @@
+% pdcmisc.dtx -- documentation and source code for misc macro files -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "Miscellanous macro files",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcmisc.dtx",
+%%% version = "$Revision: 1.4 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:13:08 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions files pdcmigr.tex, pdcimth.tex,
+%%% pdchyex.tex, pdcmasyb.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions files and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcmisc.dtx
+%{{{ preamble
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: pdcmisc.dtx,v 1.4 1995/03/30 16:13:08 pdc Exp $\endrcs
+
+\def\newfile{\lineno=0 }
+%}}} preamble
+%{{{ intro
+\author{P. Damian Cugley}
+\title{Miscellaneous macro files}
+
+%}}} intro
+%{{{ pdcmigr
+
+\newfile
+\section{PDCMIGR: Use math italic Greek capitals}
+
+ Knuth notes that it is conventional to use unslanted Greek
+ capitals in maths, even though other letters are slanted
+ (I~personally think that it looks nicer to use slanted Greek
+ caps). Thus \TeX\ takes the Greek capitals from fam~0 by
+ default.
+
+ If you are using a body text font that does not have the Greek
+ capitals---for example, almost any PostScript or Cork-style
+ font---then this no longer works. Better then to switch to
+ using the Greek capitals from the math italic font (fam~1).
+ That's what the file |pdcmigr.tex| does. The characters are
+ still in maths class~7, meaning that they will respect changes
+ to |\fam| made by font-switching commands.
+
+\codefile{pdcmigr.tex}
+
+\code
+ \|\% pdcmigr.tex \fileversion~\filedate -- see end of file %
+ for more info
+ \|\\message\{\fileversion~<\fileauthor~\filedate>\}
+\smallbreak
+ |\mathchardef\Gamma = "7100
+ |\mathchardef\Delta = "7101
+ |\mathchardef\Theta = "7102
+ |\mathchardef\Lambda = "7103
+ |\mathchardef\Xi = "7104
+ |\mathchardef\Pi = "7105
+ |\mathchardef\Sigma = "7106
+ |\mathchardef\Upsilon = "7107
+ |\mathchardef\Phi = "7108
+ |\mathchardef\Psi = "7109
+ |\mathchardef\Omega = "710A
+\endcode
+
+ This file has more comments than code. Since the code is so
+ short I think I'll get away with putting the comments after an
+ |\endinput|.
+\code
+ |\endinput
+\smallskip
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcmigr.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "A definition file for TeX, which redefines
+ |%%% \Gamma, ..., \Omega to use letters from the
+ |%%% maths italic font instead of the roman font.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcmisc.dtx",
+ |%%% copyright = "Copyright (c) 1991, 1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute pdcmisc.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+\endcode
+
+\endcodefile
+%}}} pdcmigr
+%{{{ pdcimth
+
+\newfile
+\section{PDCIMTH: use text italic letters in maths mode}
+
+ Very few existing font families have a separate math-italic font. When
+ using these fonts as body fonts, with the Computer Modern fonts as
+ maths fonts, it looks wrong to have the maths letters in a completely
+ different style form the text italic. Therefore it makes sense to
+ redefine maths mode so that the letters come from the text italic font.
+
+ This is also useful when multiple-letter identifiers are used in maths
+ mode. We c an say |$difference:=height+depth$| and get `$\it
+ difference:=height+depth$' instead of `$difference:=height+depth$'.
+
+ In the following, the counters |\count0| to |\count4| are used as
+ follows:
+$$\centerline{\vbox{\halign{\tt\cs{#}\hfil&&\quad#\hfil\cr
+ count0&mathcode for current upper case char\cr
+ count1&mathcode for current lower case char\cr
+ count2&ASCII code of current upper case char\cr
+ count3&ASCII code of current lower case char\cr
+ count4&number of characters left to redefine\cr
+}}}$$
+ The grouping prevents this temporary use conflicting with \TeX's
+ use of these counters.
+
+\codefile{pdcimth.tex}
+\code
+ \|\% pdcimth.tex \fileversion~\filedate~- maths letters in text italic
+ \|\\message\{\fileversion~\filedate\}
+ |
+ |\begingroup
+\smallbreak
+ | \count0="7400 \count1=\count0
+ | \advance\count0 by`A \advance\count1 by`a
+ | \count2=`A \count3=`a \count4=26
+\smallbreak
+ | \loop\ifnum\count4>0
+ | \advance\count4 by-1
+ | \global\mathcode\count2=\count0
+ | \global\mathcode\count3=\count1
+ | \advance\count0 by1 \advance\count1 by1
+ | \advance\count2 by1 \advance\count3 by1
+ | \repeat
+\smallbreak
+ |\endgroup
+\endcode
+\noindent
+ The value $\hbox{\H{}\tt 7400} + c$ used above means mathcode~7,
+ fam~4 (|\itfam|), character~$c$.
+
+ Once again, the code is short enough that I think I can get away
+ with putting the comments at the end:
+\code
+ |\endinput
+\smallskip
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcimth.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "A definition file for TeX, which redefines
+ |%%% mathcodes to use letters from the
+ |%%% text italic font instead of math italic.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcmisc.dtx",
+ |%%% copyright = "Copyright (c) 1991, 1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute pdcmisc.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+\endcode
+\endcodefile
+%}}} pdcimth
+%{{{ pdchyex
+
+\newfile
+\section{PDCHYEX: Hyphenation exceptions}
+
+ These hyphenation exceptions are ones I~use for must documents.
+
+\notepar
+ Of all the macro files in this package, this is the one you
+ should be most chary of using. These are written for a \TeX\
+ system which uses American English hyphenation patterns, but are
+ intended to help it produce hyphenations suitable for British
+ English, and this peverse approach will probably lead to all
+ sorts of anomalies. Ideally separate hyphenation patterns will
+ be used for British English documents.
+\endnotepar
+
+\codefile{pdchyex.tex}
+
+\subsec{File identification}
+
+ The list of exceptions is expected to grow, so it seems best to
+ have the identification at the top of the file.
+
+\code
+ \|\% pdchyex.tex \fileversion~\filedate~-- some British hyphenations
+\smallskip
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdchyex.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "A non-exhaustive set of hyphenation exceptions
+ |%%% designed to make TeX with American hyphenation
+ |%%% tables produce some British hyphenations.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcmisc.dtx",
+ |%%% copyright = "Copyright (c) 1991, 1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute pdcmisc.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%%}
+ |
+ \|\\message\{\fileversion~<\fileauthor~\filedate>\}
+ |
+\endcode
+
+\subsec{Setting parameters}
+
+ These settings are from {\it Hart's Rules} p.\thinspace141.
+\code
+ |\lefthyphenmin=2 \righthyphenmin=3 \uchyph=0
+\endcode
+
+\subsec{And finally, the hyphenation exceptions}
+
+\code
+ |\hyphenation{
+\endcode
+ First, some words from {\it Hart's Rules}\/ pp.\thinspace14--15.
+ I've taken the list on p.\thinspace14 and included here those
+ which were given wrong hyphenation by \TeX's default tables.
+\code
+ | le-gend le-gends re-adjust re-appear exact-ing
+\smallbreak
+
+ | abs-cess abs-cess-es abs-cessed ana-lyse ana-lyses
+ | ana-lysis ana-lyses appear-ance appear-ances bio-graphy
+ | celeb-rate celeb-rates celeb-rations cor-respond-ence
+ | depend-ent des-pise des-pises dis-pised dimin-ish
+ | dimin-ish-es dimin-ish-ed dis-connect dis-connect-ed
+ | dis-connects forget-ting gener-ally haemor-rhage
+ | illus-trate immedi-ate immedi-ately immport-ance
+ | inexplic-able inter-pret inter-est inter-ested
+ | inter-est-ing minis-ter origin-ally philo-sophy
+ | philo-sophic philo-sophic-ally prim-ary prob-ably
+ | semb-lance
+\smallbreak
+ | calm-est debt-ors fea-ther fea-thers post-humous lamb-like
+ | poingn-ant tough-ish ach-ing archaeo-logy etymo-logy
+ | philo-logist psycho-logist tauto-logy zoolo-gist
+\endcode
+ Now some random hyphenations I~encountered in my own documents
+ at some point. I~haven't checked these in a spelling
+ dictionary, so don't use them in documents where your life
+ depends on correct hyphenation.
+\code
+
+ | art-iest cig-ar-ette bio-logy bio-chem-is-try boy-friend
+ | brit-ain brit-ish com-ic com-ics cug-ley dogs-body
+ | dor-mouse gai-man graph-ic immedie-ate immedi-ate
+ | immedi-ately issue mckean mis-hap mis-haps news-letter
+ | news-paper night-crawler origin-ally origin-ator phys-ique
+ | phys-iques porn-o-graphy porn-o-graphic rec-om-mend-ation
+ | Ser-geant ser-geant Sien-kie-wicz spon-tan-e-ous
+ | spon-tan-e-ously stop-ped strip-ped teen-ager teen-agers
+ | tem-per-men-tal Thatch-er-ism Thatch-er-ite under-ground
+ | under-grounds var-i-able venge-ance warp-smith warp-smiths
+ | whirl-pool
+
+ |}
+\endcode
+\endcodefile
+
+%}}} pdchyex
+%{{{ pdccmsub
+
+\newfile
+\codefile{pdccmsub.tex}
+\section{PDCCNSUB: Substitutions using Computer Modern glyphs}
+
+ The Malvern and PostScript repertoire includes some characters
+ not included in the \TeX\ Text fonts used by plain \TeX. I~have
+ made macros for some of these that assemble symbols from
+ existing characters. This way documents can be switched between
+ the different font encoding schemes mroe easily. They won't
+ look very pretty though.
+
+\notepar
+ These work acceptably with ten-point Computer Modern but might
+ need adjustment with other fonts.
+\endnotepar
+
+%{{{ indentification
+\subsec{File dientification}
+
+\code
+ \|\% \filename~\fileversion~\filedate~-- CM subs for PS glyphs
+\smallskip
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcmigr.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Macros for simulating some PostScript characters
+ |%%% using glyphs form the Computer Modern family.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcmisc.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute pdcmisc.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~\filedate\}
+ |
+\endcode
+
+%}}} indentification
+
+
+\code
+ |\dimendef\dimena=0
+\endcode
+\dimendef\dimena=0
+
+%{{{ currency
+
+\subsec{Currency signs}
+
+\def\yen{{%
+ \ooalign{%
+ \hfil\raise0.25ex\hbox{$\scriptscriptstyle=$}\hfil\crcr
+ \hfil Y\hfil
+ }%
+}}
+\def\currency{{%
+ \ooalign{%
+ \dimena-0.10em
+ \hskip\dimena \raise0.2ex \hbox{\mathhexbox202}\hskip\dimena\crcr
+ \hfil \raise0.2ex \hbox{\mathhexbox20E}\hfil
+ }%
+}}
+
+ The Yen sign looks like `50\thinspace000\yen', the cents sign
+ like `37\rlap/c'. The pounds-sterling sign is always italic.
+\code
+ |\def\pounds{{\it\char36 }}
+\smallbreak
+ |\def\yen{{%
+ | \ooalign{%
+ | \hfil\raise0.25ex\hbox{$\scriptscriptstyle=$}\hfil\crcr
+ | \hfil Y\hfil
+ | }%
+ |}}
+\smallbreak
+ |\def\cents{\leavevmode\hbox{\rm\rlap/c}}
+\endcode
+
+ The ISO~646 currency sign---originally created to replace the
+ dollar sign in the international reference version character
+ set---is supposed to be drawn as a circle with four `ears';
+ we'll have to fake it rather crudely: `\currency', as in
+ `\currency100' or possibly `100\currency'.
+\code
+ |\def\currency{{%
+ | \ooalign{%
+ | \hskip-0.1em
+ | \raise0.2ex \hbox{\mathhexbox202}\hskip-0.1em\crcr
+ | \hfil \raise0.2ex \hbox{\mathhexbox20E}\hfil
+ | }%
+ |}}
+\endcode
+
+ The florin sign `{\it f}' seems to have started life as a way of
+ getting an italic {\it f} on dot-matrix printers. In an italic
+ context it still has to be in itaics---switching to a roman
+ letter does not seem appropriate.
+\code
+ |\def\florin{{\it f\/}}
+\endcode
+
+%}}} currency
+%{{{ circled letters
+
+
+\subsec{Things in circles}
+
+\def\circledletter#1#2{{%
+ \ooalign{%
+ \hfil\kern#1\hbox{$\scriptstyle\rm #2$}\hfil\crcr
+ \mathhexbox20D%
+ }%
+}}
+\def\registered{\circledletter{0.02em}R}
+\def\copyright{\circledletter{-0.045em}C}
+ Here's a general macro for making letters in circles---like
+ the registered trade mark sign `\registered', or the signs
+ `\circledletter{0.04em}P' and `\circledletter{0.02em}S'
+ (I~don't use them so I~haven't given them names) or even `\circledletter{0.05em}1'. A matching
+ copyright sing (using a small capital {\it c} instead of a
+ lower case {\it c}) looks like `\copyright'. Parameter |#1|
+ to the macro is the amount to shift the small letter relative
+ to the circle to get it optically centred.
+\code
+ |\def\circledletter#1#2{{%
+ | \ooalign{%
+ | \hfil\kern#1\raise0.00ex \hbox{$\scriptstyle\rm #2$}\hfil\crcr
+ | \mathhexbox20D%
+ | }%
+ |}}
+\smallbreak
+ |\def\registered{\circledletter{0.02em}R}
+ |\def\copyright{\circledletter{-0.045em}C}
+\endcode
+%}}} circled letters
+%{{{ guillemets
+
+\subsec{Guillemets}
+
+\def\lguillemet{\leavevmode \raise0.5ex \hbox{$\scriptscriptstyle\langle\!\langle$}}
+\def\rguillemet{\leavevmode \raise0.5ex \hbox{$\scriptscriptstyle\rangle\!\rangle$}}
+
+ Ersatz guillemets look like \lguillemet this\rguillemet.
+\code
+ |\def\lguillemet{%
+ | \leavevmode
+ | \raise0.5ex \hbox{$\scriptscriptstyle\langle\!\langle$}%
+ |}
+\smallbreak
+ |\def\rguillemet{%
+ | \leavevmode
+ | \raise0.5ex \hbox{$\scriptscriptstyle\rangle\!\rangle$}%
+ |}
+\endcode
+%}}} guillemets
+%{{{ misc
+\subsec{Miscellaneous}
+
+\def\permille{{%
+ \setbox0 \hbox{/}%
+ \flushtop{$\scriptstyle0\!$}/%
+ \lower\dp0 \hbox{$\!\scriptstyle00$}%
+}}
+\def\orda{\flushtop{\the\scriptfont\ifnum\fam>0 \fam\else 0\fi \b a}}
+\def\ordo{\flushtop{\the\scriptfont\ifnum\fam>0 \fam\else 0\fi \b o}}
+
+ The per-mille sign `\permille' can't be made from `\%' sign because
+ matching the rings is impossible, so we use `0/00':
+\code
+ |\def\permille{{%
+ | \setbox0 \hbox{/}%
+ | \flushtop{$\scriptstyle0\!$}/%
+ | \lower\dp0 \hbox{$\!\scriptstyle00$}%
+ |}}
+\endcode
+
+ The British decimal point is a raised dot: `3\mathhexbox201141'
+ instead of `3.141'.
+\code
+ |\def\gbdecimal{\mathhexbox201}
+\endcode
+ Unfortunately, this symbol has become a casualty of the `DTP
+ revolution', and the American use of a full stop as a decimal
+ point has become common.
+
+ The glyphs `\orda' and `\ordo' are used in to abbreviate Spanish
+ ordinal numbers: the feminine {\it primera} becomes 1\orda, and
+ the masculine {\it primero} 1\ordo.
+\code
+ |\def\orda{\flushtop{\the\scriptfont\ifnum\fam>0 \fam\else 0\fi \b a}}
+ |\def\ordo{\flushtop{\the\scriptfont\ifnum\fam>0 \fam\else 0\fi \b o}}
+\endcode
+
+
+%}}} misc
+%{{{ sc and csc
+
+\subsec{Substitutions for Malvern's alphabet-switching commands}
+
+ The macros used to select small capitals etc.\ in Malvern fonts
+ cannot work with Computer Modern, but might appear in documents
+ anyway. Instead they are all made equivalent to |\relax|.
+
+\code
+ |\let\sc=\relax
+ |\let\csc=\relax
+ |\let\mc=\relax
+\endcode
+
+%}}} sc and csc
+
+\endcodefile
+
+%}}} pdcmasub
+\enddocument
+\bye
+%}}} pdcmisc.dtx
+%Local Variables:
+%fill-prefix: " "
+%fold-folded-p: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcmondo.tex b/macros/plain/contrib/pdcmac/pdcmondo.tex
new file mode 100644
index 0000000000..76c6eac3ca
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcmondo.tex
@@ -0,0 +1,189 @@
+% Combined listing of the PDCMAC macros
+% hacked together pdc 1995-03-28
+
+\relax
+\input pdccode
+\input epsf
+\errorcontextlines10000
+\document
+
+\input pdcmacvn
+
+% Redefine the PDCCODE macros
+
+%\def\codefile#1{}
+%\def\endcodefile{}
+%\begingroup\obeylines \toksa={\endgroup %
+% \def\CODElinei#1^^M{%
+% \indent\the\everycodeline #1\par %
+% \endgroup % matches \CODEline
+% }%
+% \def\CODElinex#1^^M{%
+% {\indent\the\everycodeline #1\par}%
+% }%
+%} \the\toksa
+
+
+% abbreviated TOC macros taken from pdcsty
+
+\newwrite\TOCfile
+\openout\TOCfile=\jobname.toc
+\def\TOCwrite#1#2#3{%
+ \begingroup\def\n{\string\n}
+ \def\tmp{#3}%
+ \edef\tmp{\string#1{#2}{\expandafter\TOCtrim\meaning\tmp}}
+ \write\TOCfile\expandafter{\tmp{\folio}}\endgroup
+}
+\def\TOCtrim#1:->{}
+\def\TOCentryfile#1#2#3{
+ \medbreak\noindent{\subsecfont #2}\smallskip
+}
+\def\TOCentrysection#1#2#3{
+ \indent \llap{\S#1\enspace}
+ \ignorespaces #2\quad#3\par
+}
+\def\TOCentrysubsec#1#2#3{}
+
+
+% Abbreviated fontmatter definitions from pdcsty:
+
+\def\frontmatter{
+ \write\TOCfile{\string\endinput}
+ \closeout\TOCfile
+ \vfill\supereject
+ \pageno=-1 \secnofalse \headline{\hfil}
+ \def\TOCwrite##1##2##3{}
+}
+\def\endfrontmatter{
+ \section{Contents}
+ \input\jobname.toc
+ \vfill\supereject
+}
+\newif\ifsecno \secnotrue
+
+
+% sectioning taken from pdccode -- adapted to include TOC entries.
+
+\def\section#1{%
+ \advance\seccount1 \subseccount=0
+ \bigbreak
+ \begingroup
+ \secfont \hyphenpenalty=10000 \tolerance=1000
+ \rightskip=0pt plus 2em
+ \ifsecno \noindent\llap{\number\seccount.\enspace}\fi #1
+ \TOCwrite\TOCentrysection{\number\seccount}{#1}
+ \nobreak\medskip
+ \endgroup
+ \noindenttrue
+}
+\def\subsec#1{%
+ \advance\subseccount1
+ \medbreak
+ \begingroup
+ \subsecfont \hyphenpenalty=10000 \tolerance=1000
+ \parskip=0pt \parindent=0pt \rightskip=0pt plus 2em
+ \ifsecno \noindent\llap{\number\seccount.%
+ \number\subseccount.\enspace}\fi #1
+ \TOCwrite\TOCentrysubsec{\number\seccount.\number\subseccount}{#1}
+ \nobreak\smallskip
+ \endgroup
+ \noindenttrue
+}
+\def\title#1{
+ \vglue2\baselineskip
+ \begingroup \titlefont \parindent-\leftmargin \hyphenpenalty10000
+ #1\smallskip
+ \endgroup
+ \leftline{Version \fileversion,
+ last changed \fileauthor\space \mungedate\filedate}
+ \ifx\filelocker\empty\else
+ \leftline{Edited by \filelocker\unskip\ \today}
+ \fi
+ \medskip
+ \hrule \vskip1pt \hrule \vskip1pt \hrule \vskip1pt \hrule
+ \medskip
+ \rightline{\theauthor}
+ \bigskip
+ \headline{\hfil\global\headline{%
+ \hskip-\leftmargin \sevenbf \themarks \hfil #1
+ \fileversion
+ \ifx\filelocker\empty
+ \space\mungedate\filedate
+ \else
+ e\space\today
+ \fi
+ }}
+ \TOCwrite\TOCentryfile{}{#1}
+}
+
+% A command to include another complete document in this one.
+
+\def\includedocument#1{
+ \begingroup
+ \let\RELAX\relax
+ \def\relax{\let\relax\RELAX \iffalse}
+ \let\document=\fi
+ \let\enddocument\endinput
+ \lineno=0
+ \input #1
+ \vfil\eject \mark{}
+ \endgroup
+}
+
+\includedocument{maamac.dtx}
+\includedocument{magrmac.dtx}
+\includedocument{pdcadobe.dtx}
+\includedocument{pdccode.dtx}
+\includedocument{pdcfsel.dtx}
+\includedocument{pdcfmt2.dtx}
+\includedocument{pdcl1maa.dtx}
+\includedocument{pdcmisc.dtx}
+\includedocument{pdcoput5.dtx}
+
+\headline{\hfil}
+\null
+% need a blank page (unfortunate kludge)
+% This is because each embedded document is followed by a page break
+% but we need the a page break before the TOC to finish writing out
+% the TOC file. Argh.
+\frontmatter
+\vfill
+\leftline{\titlefont PDCMAC Mondo Combined Listing}
+\leftline{\titlefont For release 1\kern-0.07em \raise0.5ex\hbox{.}0}
+
+\section{Preface}
+
+ PDCMAC is a package of plain \TeX\ macro files. The macro files
+ are generated by running plain \TeX\ on |dtx| files, which
+ produces both a copy of the macros and printed documentation
+ (see the {\it PDCMAC User Guide}\/ for more information). This
+ `combined listing' is a compilation of most of the |dtx| files
+ in the PDCMAC distribution (|pdcsty.dtx|, which generates the
+ sample style files, is not included).
+
+ This compilation document works as follows. First it reads
+ |pdcmac.tex| and then redefines some macros to write entries for
+ a table of contents, and then reads the |dtx| files one after
+ another. The results should be same as running \TeX\ on each of
+ the |dtx| files separately, except that the pages are numbered
+ continuously and there is a contents list.
+
+ This is useful for two different purposes: (1)~to make a printed
+ copy of the macros for reference while using them, and (2)~to
+ generate all the macro files in one \TeX\ command instead of
+ several. This is useful when you cannot use the makefile
+ supplied with the package. If you do have the makefile, it will
+ probably be the more convenient way to keep the macro files
+ up-to-date.
+
+ The files are included in alphabetical order. See the PDCCODE
+ chapter below for information on the PDCCODE system.
+
+\endfrontmatter
+\enddocument
+\bye
+
+%Local Variables:
+%fill-prefix: " "
+%tex-has-children: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcoput5.dtx b/macros/plain/contrib/pdcmac/pdcoput5.dtx
new file mode 100644
index 0000000000..106b45feca
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcoput5.dtx
@@ -0,0 +1,986 @@
+% pdcoput5.dtx -- documentation & source for outpout routine -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCOPUT5 -- An output routine for zines",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcoput5.dtx",
+%%% version = "$Revision: 5.3 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/04/06 11:51:03 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdcoput5.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcoput5.tex
+%{{{ preamble
+
+\relax
+\input pdccode
+\input epsf
+
+\document
+\rcs$Id: pdcoput5.dtx,v 5.3 1995/04/06 11:51:03 pdc Exp $\endrcs
+
+\codefile{pdcoput5.tex}
+
+\countdef\counta=255 \newcount\countb
+\counta=`a \countb="7461
+\loop \ifnum\counta<"7B
+ \mathcode\counta\countb
+ \advance\counta1 \advance\countb1
+\repeat
+\counta=`A \countb="7441
+\loop \ifnum\counta<"5B
+ \mathcode\counta\countb
+ \advance\counta1 \advance\countb1
+\repeat
+
+%}}} preamble
+%{{{ introduction
+
+\title{PDCOPUT5---an output routine for zines}
+
+\section{Introduction}
+
+ This document describes |pdcoput5.tex|, a \TeX\ definition file
+ that defines an output routine for \TeX\ documents. The
+ complete text of the macros is reproduced, with brief
+ descriptions of how to exploit them.
+
+ In fact, running plain \TeX\ on the file |pdcoput5.dtx|
+ generates a copy of the macros in a file called |pdcoput5.tex|
+ in the current directory, as well as the printed
+ documentation.\footnote*{The \LaTeX~2e distribution uses files
+ with the suffix |dtx| for similar purposes.} This should help
+ ensure that the printed documentation matches the file it
+ describes.
+
+ The name ends with `-|5|' to distinguish this file from its
+ predecessor (version 4.1.7), so that documents based on the old
+ macros can still be printed.
+
+%{{{ output routines
+\subsec{Output routines}
+
+ In a \TeX\ document, there is a special sequence of \TeX\
+ commands called the {\it output routine} which controls the
+ assembly of pages for output to the |dvi| file.
+ Plain \TeX\ comes with an output routine that handles simple
+ documents (with footnotes and topinserts); \LaTeX\ has a more
+ complex output routine that has many extra features (margin
+ paragraphs, \LaTeX's floats).
+%}}} output routines
+%{{{ backgorund
+
+\subsec{Background to this output routine}
+
+ I have been using \TeX\ to typeset fanzines\footnote\dag{The
+ word {\it fanzine} comes from science fiction fans' jargon: {\it
+ fan} for amateur (in the sense of unpaid, not necessarily
+ amateurish) + {\it magazine}. (They call professional magazines
+ {\it prozines}.) Thus a fanzine (or zine for short) is a small
+ magazine, often produced by photocopying or cheap printing by
+ its editor. The word {\it zine} rhymes with {\it scene} not
+ {\it sign}, and isn't spelled with an apostrophe (unless you are
+ the sort of person who spells {\it phone}, {\it cello} and {\it
+ bus} with an apostrophe).} for some years. Unfortunately, for
+ magazine layouts, the `floating' insertions provided by plain
+ \TeX\ and \LaTeX\ do exactly the wrong thing---in a magazine,
+ the designer wants to lay out the components of the page
+ (illustrations, text, headings) exactly where he or she wants
+ them, whereas the standard \TeX\ formats are designed to let the
+ formatter place components according to its own complex rules.
+
+ Originally I~tried browbeating \LaTeX\ into doing the zine
+ layouts I~wanted. I realized eventually that by the time I~had
+ redefined enough of \LaTeX's kernel to get the effects I~wanted
+ I~would more or less have written everything from scratch. The
+ sort of typesetting I~wanted is so unlike what \LaTeX\ is
+ designed for that \LaTeX\ was getting in the way.
+
+ Thus I~developed a set of \TeX\ definition files,\footnote\ddag{We
+ can ignore the intermediate stage, which involved writing a
+ `user-friendly' format in the style of \LaTeX\ and Texinfo, with
+ structures very different from plain \TeX's syntax. In the end
+ I realized that a format that requires disguising or renaming
+ plain \TeX\ constructs makes using and modifying the macros
+ harder, not easier, because the user has to understand the new
+ conventions in addition to plain \TeX\ syntax.} with an output
+ routine that allowed a page to be peppered with inserts with the
+ text flowing in between them (with a more restricted class of
+ inserts than, say, a DTP program, but still flexible enough to
+ be useful). The output routine also does multi-column text---in
+ this respect it is very similar to the |multicol| package in
+ \LaTeX~2e. The routine presented here has been rewritten from
+ scratch a few times, each time shedding some cruft as I~have a
+ better understanding of \TeX.
+%}}} backgorund
+%{{{ layout model
+
+\subsec{The layout model}
+
+\topinsert
+ \line{\vbox{\advance\hsize-1pc \hsize=0.333\hsize
+ \noindent{\bf Figure 1}\quad Page layout. This shows a
+ page without the optional extra boxes. In this example,
+ text columns each span two grid cells. The left-hand
+ column has an illo (space for an illustration) with caption.
+ }%
+ \epsfxsize=\hsize \advance\epsfxsize-1pc
+ \epsfxsize=0.667\epsfxsize \epsffile{oput01.eps}\hfil
+}
+\medskip\hrule\medskip
+\endinsert
+
+\topinsert
+ \line{\epsfxsize=\hsize \advance\epsfxsize-1pc
+ \epsfxsize=0.667\epsfxsize \epsffile{oput02.eps}\hfil
+ \vbox{\advance\hsize-1pc \hsize=0.333\hsize
+ \noindent{\bf Figure 2}\quad Page layout parameters.
+ This page has with
+ all the optional boxes (shown with dashed lines). One text
+ column has a space left for artwork. Text columns are the same
+ width as grid cells.
+ }}
+\medskip\hrule\medskip
+\endinsert
+
+ The main part of the page (everything except the headline and
+ footline) is called the {\it body}. The body is divided into a
+ grid of cells. The cells are conceptually the framework on
+ which page components like text columns and illustrations are
+ hung. For example, text columns may span two cells. Figure~1
+ shows a simple layout. Fitting on the grid usually means the
+ width of the object is $N\times gridwd + (N-1)\times colsep$ and
+ its left edge is $K\times(gridwd + colsep)$ from the left edge
+ of the page body.
+
+ The aim of using a grid layout is to combine flexibility with
+ enough structure that the result is not a chaotic mess. The
+ example grid is 5~cells wide, so that text columns can probably
+ be 2 or 3 cells wide without being too narrow or too wide.
+ Illustrations may be anything from 1 to 5 cells wide, or may
+ bleed off the page.
+
+
+
+
+%}}} layout model
+%}}} introduction
+%{{{ identification
+\section{File identification}
+
+ Macro files nowadays tend to start with a whole slew of header
+ comments designed to be useful to people comign across the file
+ in some archive and unaware of what it is for.
+
+\code
+ \|\% \filename~\fileversion~\filedate~-- output routine for zines
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcoput5.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "TeX output routine for magazine-style layout.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+%}}} identification
+%{{{ internals
+\section{Miscellaneous internal definitions}
+\subsec{Scratch registers}
+
+ These are one-token names for some handy non-global temporary
+ registers (in plain \TeX\ these are given names with |@| in
+ them; these definitions give them names I can use).
+\code
+ |\countdef\counta=255
+ |\dimendef\dimena=0 \dimendef\dimenb=2
+ |\toksdef\toksa=0 \toksdef\toksb=2
+\endcode
+ I~don't use |\dimen1| and |\toks1| because they are supposed to
+ be used only globally (as discussed in {\it\TeX book}
+ Appendix~B).
+
+\subsec{Queues}
+
+ These macros manipulate queues of instructions for the ouytput
+ routine, represented as list macros of a form similar to those
+ described in {\it\TeX book} Appendix~D Section~2 (the parameters
+ in different order).
+
+\notepar
+ All of these work by making assignments and so will not work in
+ \TeX's mouth.
+\endnotepar
+
+ We can describe these briefly using letters like $x$ to stand
+ for elements (enclosed in braces) and $xs$ to stand for a list
+ macro of $x$s. Each macr has a duplicate starting with `|g|-'
+ which does the same operation globally.
+
+% |\prepend| $xs$ $x$ --- $xs:=\langle x\rangle + xs$
+%\code
+% |\long\def\prepend#1#2{%
+% | \toksa={\\{#2}}\toksb=\expandafter{#1}%
+% | \edef#1{\the\toksa\the\toksb}%
+% |}
+%\smallbreak
+% |\long\def\gprepend#1#2{%
+% | \toksa={\\{#2}}\toksb=\expandafter{#1}%
+% | \xdef#1{\the\toksa\the\toksb}%
+% |}
+%\endcode
+ |\qappend| $xs$ $x$ --- $xs:= xs + \langle x\rangle $
+\code
+ |\long\def\qappend#1#2{%
+ | \toksa={\\{#2}}\toksb=\expandafter{#1}%
+ | \xdef#1{\the\toksb\the\toksa}%
+ |}
+\endcode
+% |\catenate| $xs$ $ys$ $zs$ --- $xs:=ys + zs$
+%\code
+% |\def\catenate#1#2#3{%
+% | \toksa=\expandafter{#2}\toksb=\expandafter{#3}%
+% | \edef#1{\the\toksa\the\toksb}%
+% |}
+%\smallbreak
+% |\def\gcatenate#1#2#3{%
+% | \toksa=\expandafter{#2}\toksb=\expandafter{#3}%
+% | \xdef#1{\the\toksa\the\toksb}%
+% |}
+%\endcode
+ |\qremove| $x$ $xs$ --- $x, xs := hd(xs), tl(xs)$
+ (where $xs = \langle hd(xs)\rangle + tl(xs)$)
+\code
+ |\def\qremove#1#2{%
+ | \expandafter\glopoff#2\glopoff#1#2%
+ |}
+ |\long\def\glopoff\\#1#2\glopoff#3#4{%
+ | \gdef#3{#1}\gdef#4{#2}%
+ |}
+\endcode
+
+%}}} internals
+%{{{ parameters
+\section{Parameters}
+
+ We collect here definitions for parameters that customizate the
+ layout. In documents, many of these are set in using
+ higher-level macros.
+
+ The abbreviations |mg| (margin), |wd| (width) and |ht| (height)
+ are used a lot in dimen names.
+
+\subsec{Heights and depths}
+ The physical size of the paper is $paperwd\times paperwd$. The
+ area which will be filled with text columns is $bodywd\times
+ bodyht$. This area is divided in to a grid of cells each
+ $gridwd\times gridht$, with cells separated by $colsep$
+ horizontally but butting vertically (there are $n$ cells, so
+ $n\times gridwd + (n-1)\times colsep = bodywd$). Finally,
+ $colwd$ is the width of text columns ($colwd = k\times gridwd +
+ (k-1)\times colsep$) and $colht$ is the height of text columns
+ on the current page (it is equal to $bodyht$ iff therte is no
+ topbox or botbox).
+\code
+ |\newdimen\paperwd \newdimen\paperht
+ |\newdimen\bodywd \newdimen\bodyht
+ |\newdimen\gridwd \newdimen\gridht
+ |\newdimen\colwd \newdimen\colht
+\endcode
+
+
+\subsec{Margins and separators}
+ These margins measure from the edge of the paper as defined by
+ |\paperwd| and |\paperht|. The inner margin (|\innermg|) is on
+ the left on odd pages and on the right for even pages.
+
+ The bottom margin will be increased slightly later on to make
+ $$vsize=N\times baselineskip + topskip\quad.$$
+
+\code
+ |\newdimen\topmg \topmg=20mm
+ |\newdimen\outermg \outermg=20mm
+ |\newdimen\innermg \innermg=20mm
+ |\newdimen\botmg \botmg=27mm
+\endcode
+
+ Parameters for the distance between the baselines of the
+ headline and the first line of text the corresponding distance
+ for footlines.
+\code
+ |\newskip\headlineskip \headlineskip=10mm
+ |\newskip\footlineskip \footlineskip=10mm
+\endcode
+
+
+ The parameters |\caprule| and |\capsep| specify the separation
+ between captions and the adjacent text column. The vertical
+ displacement is $capsep$, with a horizontal rule of thickness
+ $caprule$ is drawn in the middle (set this to $0\pt$ to have no
+ rule).
+
+\code
+ |\newdimen\caprule \caprule=0.4pt
+ |\newskip\capsep \capsep=5mm
+\endcode
+
+ The corresponding parameters for column separators---this time
+ it is a vertical rule.
+\code
+ |\newdimen\colrule \colrule=0.4pt
+ |\newdimen\colsep \colsep=5mm
+\endcode
+
+ The number of text columns on a page.
+\code
+ |\newcount\ncols \ncols=1
+\endcode
+
+\subsec{Boxes}
+ To switch the number of columns in mid page, the first text is
+ run through the output routine and the resultant partial page is
+ stored in |\partialpage| to be placed at the top of the next
+ output.
+
+\code
+ |\newbox\partialpage
+\endcode
+
+ The special boxes |\topbox| and |\botbox|, if non-void, are
+ placed at the top and bottom of the page, going inside the
+ headline and footline but outside the body text area (which is
+ reduced correspondingly). These are often useful in
+ multi-column text to put titles that span the page.
+\code
+ |\newbox\topbox \newbox\botbox
+\endcode
+
+ These boxes, if not void, go at the left and right of the body
+ text. The amount of space for columns of text is reduced by the
+ width of the boxes.
+\code
+ |\newbox\leftbox \newbox\rightbox
+\endcode
+
+ The output routine is passed the current page contents in
+ box~255.
+\code
+ |\chardef\pagebox=255
+\endcode
+
+\subsec{Hooks}
+
+ These two list macros are used to override the output routine
+ with customized layouts.
+
+ One item is removed from |\pagelist| to generate each page body
+ (the page body is everything except the headline, footline,
+ topbox, botbox amd partial page). If the list is empty, then
+ the default action is `|\makebody\pagebox|'. The commands
+ should make a box with width |\bodywd|m and heght |\colht|.
+\code
+ |\let\pagelist\empty
+\endcode
+ An item is removed from |\collist| each time a column is to be
+ created by |\makebody|. Each item should be \TeX\ commands that
+ generate a box with width |\colwd| and height |\colht|.
+\code
+ |\let\collist\empty
+\endcode
+
+ Finally, token registers that may be used to customize pages and
+ captions. For example, |\everypage| is used in |pdccmdoc.tex|
+ to create an empty |\leftbox| on each page.
+\code
+ |\newtoks\everypage
+ |\newtoks\everycaption
+\endcode
+%}}} parameters
+%{{{ make a column (vbox)
+\section{How to make one column}
+
+ This is the default way to generate a column of text---this will
+ normally be invoked $k$ times if there are $k$ columns.
+
+ A column is a vbox of height $colht$ and width $colwd$. It
+ contains, in order from top to bottom, an illustration (vertical
+ mode material, normally white space for artwork to be pasted
+ into), caption separator, text (from the page), caption
+ separator, and bottom illustration. The illustrations are
+ usually omitted. When there is no illustration, the caption
+ separators are omitted too.
+ The macro takes the following parameters:
+$$\halign{\indent\tt\##\hfil&\quad#\hfil&\quad#\hfil\cr
+ 1& vertical mode material& illustration at top of column\cr
+ 2& \<8-bit number>& box to make middle out of\cr
+ 3& vertical mode material& illustration for bottom of column\cr
+}$$
+ To make baselines line up, $capsep=baselineskip$ and the height
+ of a top illustration must be $N\times baselineskip + topskip$
+ and of a bottom illustration must be $N\times baselineskip$
+ (|\prevdepth| is set to $0\pt$ at the start of the bottom
+ illustration, so if it starts with a box, baselineskip glue will
+ be inserted to make the baseline of the box align correctly.)
+\code
+ |\newdimen\toptotal \newdimen\bottotal
+\smallbreak
+ |\def\xxxmakecolumn#1#2#3#4#5{\xmakecolumn
+ | {\ifdim#1=0pt\else \kern#1 \fi
+ | \def\tmp{#2}\ifx\tmp\empty\else #2 \fi}
+ | {#3}
+ | {\def\tmp{#2}\ifx\tmp\empty\else #2 \fi
+ | \ifdim#1=0pt\else \kern#1 \fi}%
+ |}
+\smallbreak
+ |\def\xmakecolumn#1#2#3{%
+ | \vbox to \colht{
+\endcode
+ Calculate in |\dimena| how much of the text box will be needed
+ once we have allowed for any illustrations, footnotes or
+ topinserts:
+\code
+ | \dimena\colht
+ | \setbox0=\vbox{#1}\advance\dimena-\ht0
+ | \ifdim\ht0>0pt
+ | \advance\dimena-\capsep
+ | \advance\dimena\topskip \advance\dimena-\baselineskip
+ | \fi
+ | \setbox4=\vbox{\prevdepth=0pt #3}%
+ | \advance\dimena-\ht4
+ | \ifdim\ht4>0pt \advance\dimena-\capsep \fi
+ | \ifvoid\footins\else
+ | \advance\dimena-\ht\footins
+ | \advance\dimena-\skip\footins
+ | \fi
+ | \ifvoid\topins\else
+ | \advance\dimena-\ht\topins
+ | \advance\dimena-\skip\topins
+ | \fi
+\endcode
+ Split that much text off the top of the box:
+\code
+ | \splittopskip\topskip \splitmaxdepth\maxdepth
+ | \setbox2=\vsplit#2to\dimena
+\endcode
+ Now to sandwich it all together.
+\code
+ | \dimena=\ht0 \dimenb=\dp0 \unvbox0
+ | \ifdim\dimena>0pt
+ | \prevdepth=\dimenb
+ | \capseparator
+ | \dimena\baselineskip \advance\dimena-\topskip
+ | \kern\dimena
+ | \nointerlineskip
+ | \fi
+ | \ifvoid\topins\else \unvbox\topins \vskip\skip\topins \fi
+ | \dimena\dp2
+ | \ifvoid2 \vfil \else \unvbox2 \fi
+ | \ifvoid\footins \else
+ | \vskip\skip\footins \footnoterule
+ | \dimena=\dp\footins \unvbox\footins
+ | \fi
+ | \ifdim\ht4>0pt
+ | \prevdepth=\dimena
+ | \capseparator \kern-\prevdepth \prevdepth0pt
+ | \fi
+ | \unvbox4
+ | }%
+ |}
+\endcode
+ The caption separator is in an hbox so that
+ baselineskip glue will be added appropriately.
+\code
+ |\def\capseparator{%
+ | \hbox to \colwd{%
+ | \dimena=0.5ex \advance\dimena-0.5\caprule
+ | \dimenb=\dimena \advance\dimenb\caprule
+ | \vrule height \dimenb depth-\dimena width\colwd
+ | }%
+ |}
+\endcode
+
+ Here's a macro for making an illustration (blank space) with
+ caption, suitable for top of page. |#1| is the cation, |#2| is
+ vertical mode material commands to make the illustration (often
+ this will be something like `|\kern|$n$|\baselineskip|' to leave
+ $n$ lines of blank space). The whitespace between illustration
+ and caption is adjusted to make the whole shebang line up.
+\code
+ |\def\topillustration#1#2{%
+ | \setbox0=\vbox{#2}%
+ | \dimena\ht0 \dimenb\dp0 \unvbox0
+ | \counta\dimena \divide\counta\baselineskip
+ | \advance\dimena-\counta\baselineskip \advance\dimena-\topskip
+ | \kern-\dimena \prevdepth\dimenb
+ | \hsize=\colwd \vskip-\parskip \noindent#1\par
+ |}
+\endcode
+
+ Similar for bottom of column.
+\code
+ |\def\botillustration#1#2{%
+ | \setbox0\vbox{\hsize=\colwd \vskip-\parskip \prevdepth=0pt #1}
+ | \setbox2=\vbox{\prevdepth=\dp0 #2}%
+ | \dimena=\ht0 \advance\dimena\dp0 \advance\dimena\ht2
+ | \unvbox0
+ | \counta\dimena \divide\counta\baselineskip
+ | \advance\dimena-\counta\baselineskip
+ | \advance\dimena-\baselineskip
+ | \kern-\dimena
+ | \unvbox2
+ |}
+\endcode
+
+%}}} make a column
+%{{{ make body part of page (hbox)
+\section{Making the page body hbox}
+
+ The page body is everything except the footline, headline,
+ topbox and botbox. It should be a box of height |\bodywd|
+ (which is normally fixed) and height |\colht| (which is
+ |\bodyht| minus the top and bot boxes).
+
+ The default macro for making the body is |\makebody| which takes
+ as its parameter the box number (usually |\pagebox|). (This may
+ be replaced by adding items to the list macro |\pagelist|.)
+\code
+ |\def\makebody#1{%
+ | \hbox to \bodywd{%
+ | \ifvoid\leftbox\else
+ | \box\leftbox
+ | \colseparator
+ | \fi
+ | \makecolumnfromcollist{#1}%
+ | \counta\ncols
+ | \loop \ifnum\counta>1
+ | \colseparator
+ | \makecolumnfromcollist{#1}%
+ | \advance\counta -1
+ | \repeat
+ | \ifvoid\rightbox\else
+ | \colseparator
+ | \box\rightbox
+ | \fi
+ | }%
+ |}
+\smallbreak
+ |\def\colseparator{%
+ | \hfil \vrule width\colrule depth0pt \hfil
+ |}
+\endcode
+
+ The macro |\makecolumnfromcollist| is used to generate columns
+ (which must be boxes of height |\colht| and width |\colwd|). It
+ uses the next item on |\collist| if there is one, otherwise it
+ just uses |\xmakecolumn|.
+\code
+ |\def\makecolumnfromcollist#1{%
+ | \ifx\collist\empty
+ | \xmakecolumn{}{#1}{}%
+ | \else
+ | \qremove\temp\collist
+ | \temp
+ | \fi
+ |}
+ |
+\endcode
+%}}} make insides of page (hbox)
+%{{{ make a page (vbox)
+\section{Making a page vbox}
+
+ The macro generates a new page---a vbox to be `shipped out'.
+ The first page includes a |papersize| special; this is because
+ if the macros used to change the paper size also generated the
+ |\special| then there might be conflicting |\special|s which
+ would confuse the printer driver. This way the paper size may
+ be changed a few times before the first page.
+
+ The |\colht| register is set to the height of text columns on
+ this page (which is $bodyht$ minus the height of any partial
+ page, top or bottom boxes).
+\code
+ |\def\makepage{%
+ | \vbox{
+ | \papersizespecial
+ | \colht\bodyht \advance\colht-\ht\partialpage
+ | \advance\colht-\ht\topbox \advance\colht-\ht\botbox
+ | \advance\colht-\dp\partialpage
+ | \advance\colht-\dp\topbox
+ | \the\everypage
+ | \makeheadline \nointerlineskip
+ | \box\partialpage \nointerlineskip
+ | \box\topbox \nointerlineskip
+ | \ifx\pagelist\empty
+ | \makebody\pagebox
+ | \else
+ | \qremove\temp\pagelist
+ | \temp
+ | \fi
+ | \unvbox\botbox
+ | \makefootline
+ | }%
+ |}
+\endcode
+
+ The |\makeheadline| macro generates the headline in the form of
+ vertical mode material with zero height. It is expanded after
+ |\everypage| has been expanded, at the very top of the page's
+ vbox.
+\code
+ |\def\makeheadline{
+ | \vbox to 0pt {
+ | \skip0=\topskip \advance\skip0-2\ht\strutbox
+ | \advance\skip0-\headlineskip
+ | \vskip\skip0
+ | \hbox to \bodywd{\the\headline}
+ | \vss
+ | }
+ |}
+\endcode
+
+ The footline is, naturally, generated with |\makefootline|.
+ This time there is no requirement for it to be zero height. It
+ is the last thing in the box being shipped out.
+\code
+ |\def\makefootline{{
+ | \baselineskip=\footlineskip
+ | \hbox to \bodywd{\the\footline}
+ |}}
+\endcode
+
+ The |papersize| special is specified in the manual for DVIPS.
+ It specifies the physical size of the medium---and so must be
+ multiplied by the current magnification.
+\code
+ |\def\papersizespecial{{%
+ | \dimena=0.001\paperwd \multiply\dimena\mag
+ | \dimenb=0.001\paperht \multiply\dimenb\mag
+ | \special{papersize=\the\dimena,\the\dimenb}%
+ | \global\let\papersizespecial=\relax
+ |}}
+ |
+\endcode
+%}}} make a page (vbox)
+%{{{ output
+\section{The output routine}
+
+ The output routine sets |\hoffset| appropiately (subtracting
+ $1{\scriptstyle''}$ to allow for \TeX's peculiar origin point
+ one inch from the top left of the page.
+\code
+ |\def\pdcoutput{%
+ | \ifodd\pageno \hoffset=\innermg \else \hoffset=\outermg \fi
+ | \advance\hoffset-1 true in
+ | \voffset=\topmg
+ | \advance\voffset-1truein
+ | \shipout\makepage \advancepageno
+ | \ifnum\outputpenalty>-20000 \else \dosupereject \fi
+ | \unvbox\pagebox
+ |}
+\smallbreak
+ |\output={\pdcoutput}
+\endcode
+%}}} output
+%{{{ automated column setting
+\section{Specifying a grid}
+
+ These macros for setting the paper size ought to be invoked
+ after the base font and baseline skip have been set but before
+ the numebr of columns is chosen.
+
+\subsec{Specifiying the paper size}
+
+ This is a macro that might be used in documents. It takes two
+ parameters, \<dimen>s for the width and height of the paper.
+\code
+ |\def\setpaper#1#2{%
+ | \paperwd=#1\relax
+ | \paperht=#2\relax
+ | \OPUTcalcbodywdht
+ | \OPUTcalctopskip
+ |}
+\endcode
+ Calculate the page body width |\bodywd| from the paper size and
+ the size of the margins:
+\code
+ |\def\OPUTcalcbodywdht{
+ | \bodywd=\paperwd \advance\bodywd-\outermg \advance\bodywd-\innermg
+ | \bodyht=\paperht \advance\bodyht-\topmg \advance\bodyht-\botmg
+ | \OPUTcalctopskip
+ |}
+\endcode
+
+ To avoid having to write `Aiv' or `afour' for specifying
+ international standard A4 paper, I~use an
+ |\ifcase|.\footnote*{Note for Americans: A4 corresponds to
+ American Letter size, and A3 to Ledger size.} This macro
+ handles A0 to A5.
+\code
+ |\def\setpaperA#1{
+ | \ifcase#1
+ | \setpaper{841mm}{1189mm}\or
+ | \setpaper{594mm}{841mm}\or
+ | \setpaper{420mm}{594mm}\or
+ | \setpaper{297mm}{420mm}\or
+ | \setpaper{210mm}{297mm}\or
+ | \setpaper{148mm}{210mm}
+ | \else
+ | \errmessage{Dunno how big DIN A#1 paper is, sorry.}
+ | \fi
+ |}
+\endcode
+
+\subsec{Adjusting the body height and top skip}
+
+ Plain \TeX\ sets |\topskip| to $10\pt$, which means there is a
+ gap between the top of the letters of the top line of text and
+ the top of the pages's vbox (i.e., $vsize$ is measured from the
+ baseline of the last line to a line $topskip$ above the baseline
+ of the first line). For magazine-style setting, it is more
+ usual to have $topskip$ set to the cap-height of the font
+ (assuming there are no strange tall characters in use).
+
+ To have an exactly $N$ lines to a page,
+ $$
+ bodyht = (N-1)\times baselineskip + topskip \quad.
+ $$
+ This macro increases the bottom margin in order to set $bodyht$
+ to such a value.
+\code
+ |\def\OPUTcalctopskip{
+ | \setbox0=\hbox{AXbl()!gyJQ,}
+ | \topskip=\ht0 \maxdepth=\dp0
+ | \advance\bodyht-\topskip \divide\bodyht\baselineskip
+ | \multiply\bodyht\baselineskip \advance\bodyht\topskip
+ |}
+\endcode
+
+ Give this value for $bodyht$, we can set $hsize$ and $vsize$
+ according to the number of columns to a page. For $N$ lines to
+ a column, we need $N\times ncols$ lines to make a whole page, so
+ $$
+ \eqalign{vsize
+ &= (ncols \times N - 1) \times baselineskip + topskip\cr
+ &= (bodyht + \delta) \times ncols - \delta\cr
+ }
+ $$
+ where $\delta=baselineskip-topskip$.
+\code
+ |\def\OPUTcalchsizevsize{
+ | \hsize=\colwd
+ | \vsize=\bodyht
+ | \advance\vsize-\topskip \advance\vsize\baselineskip
+ | \multiply\vsize\ncols
+ | \advance\vsize-\baselineskip \advance\vsize\topskip
+ |}
+\endcode
+
+
+\subsec{Setting the number of columns}
+
+ Now some macros used in documents for setting the number of
+ coumns. In the general case we have a grid of $n$ cells with
+ text columnns spanning $k$ cells. This macro takes two number
+ parameters, $n$ and $k$. It sets |\ncols| to as many columns
+ fit on the page.
+ $$
+ \eqalign{colwd &= k \times gridwd + (k - 1) \times colsep\cr
+ ncols &= \lfloor n \mathbin/ k \rfloor\cr}
+ $$
+ Often $n$ is not a multiple of $k$, which leaves some grid cells
+ `spare' for illustrations or extra margins and so on.
+\code
+ |\def\setnkgrid#1#2{%
+ | \gridwd=\bodywd
+ | \advance\gridwd-#1\colsep \advance\gridwd\colsep \divide\gridwd#1
+ | \colwd#2\gridwd \advance\colwd#2\colsep \advance\colwd-\colsep
+ | \ncols#1 \divide\ncols#2
+ | \gridht=\baselineskip
+ | \capsep=\gridht
+ | \OPUTcalchsizevsize
+ |}
+\endcode
+
+ For simpler layouts, we just set the number of columns and set
+ the grid and column widths to be the same.
+\code
+ |\def\setncolumns#1{%
+ | \colwd=\bodywd
+ | \advance\colwd-#1\colsep \advance\colwd\colsep \divide\colwd #1
+ | \gridwd=\colwd
+ | \ncols=#1
+ | \OPUTcalchsizevsize
+ |}
+\endcode
+
+\subsec{Setting default values}
+
+ We give all the parameters default values by assuming A4 paper
+ and a single-column layout in \TeX's default fonts.
+\code
+ |\setpaperA4
+ |\setncolumns1
+\endcode
+
+%}}} automated column setting
+%{{{ balancing columns
+\section{Routines for balanced columns}
+
+\subsec{Balanced columns from a rigid vbox}
+
+ This is the routine discussed in {\it\TeX book}, Appendix~D,
+ Section~7 (pp.\thinspace396--397). It takes a rigid, regular
+ vbox (rigid meaning there is no stretchable glue between lines,
+ and regular meaning that baselines are all the same distance
+ apart). Its parameters are
+ $$\centerline{\vbox{\halign{\tt\char`\##\hfil&&\quad#\hfil\cr
+ 1&\<8-bit number>& box to chop\cr
+ 2&\<number>& how many columns to make (${}>0$)\cr
+ 3&\<dimen>& the value of \cs{topskip} for the box\cr
+ 4&tokens& what to put between columns\cr
+ }}}$$
+ the last parameter will usually be |\hfil| or |\colseparator|.
+ Usually this command will be used like
+$$\hbox{|\hbox to \bodywd{\rigidbalance...}|}$$
+
+
+\code
+ |\newcount\RGDncols
+\smallbreak
+ |\def\rigidbalance#1#2#3#4{%
+ | \setbox0=\box#1\relax \RGDncols=#2\relax \toksa={#4}%
+ | \begingroup\splittopskip#3\relax \vbadness=10000
+ | \valign{##\vfil\cr \RGDdosplits}%
+ | \endgroup
+ |}
+\endcode
+ The helper function that produces the insides of the valign is
+ recursive.
+\code
+ |\def\RGDdosplits{
+ | \dimena\ht0 \divide\dimena\RGDncols
+ | \advance\dimena\splittopskip
+ | \setbox1=\vsplit0 to\dimena
+ | \unvbox1
+ | \global\advance\RGDncols-1
+ | \cr
+ | \ifnum\RGDncols>0
+ | \noalign{\the\toksa}
+ | \RGDdosplits
+ | \fi
+ |}
+\endcode
+
+\subsec{Balance partial page}
+
+ Occasionally it is useful to switch between different grids or
+ numbers of columns within one page. This macro does this,
+ creating a shorter-than-usual page body (including topbox and
+ botbox) and then putting the result in |\partialpage| Its
+ parameters are |#1| the \TeX\ code used to generate the text
+ columns and |#2| what to put between the partial page and the
+ rest of the page.
+
+\code
+ |\def\makepartialpage#1#2{
+ | \maybepagebreak
+ | \begingroup
+ | \output{%
+ | \message{[partial}
+ | \setbox0=\vbox{\unvbox\pagebox}%
+ | \global\setbox\partialpage\vbox{
+ | \box\partialpage \nointerlineskip
+ | \the\everypage
+ | \box\topbox \nointerlineskip
+ | \hbox to \bodywd{%
+ | \ifvoid\leftbox\else
+ | \box\leftbox \colseparator
+ | \fi
+ | #1%
+ | \ifvoid\rightbox\else
+ | \colseparator \box\rightbox
+ | \fi
+ | }% \nointerlineskip
+ | \box\botbox
+ | #2
+ | \dimena\baselineskip \advance\dimena-\topskip
+ | \kern\dimena
+ | }%
+ | \message{page]}
+ | }
+ | \eject
+ | \endgroup
+ |}
+\smallbreak
+ |\def\rigidbalancepartialpage{
+ | \makepartialpage{\rigidbalance0\ncols\topskip\colseparator}
+ |}
+\endcode
+ Occasionally \TeX\ might have just over a pageful of text when
+ this command is used (since the page break calculations do not
+ take into account the space subtracted by
+ illustrations\footnote*{This is probably a bug.}). In this case
+ we have to force out a complete page.
+\code
+ |\def\maybepagebreak{%
+ | \vskip0pt plus\baselineskip \penalty-100
+ | \loop
+ | \dimena\vsize \advance\dimena-\ncols\ht\partialpage
+ | \advance\dimena-\ncols\ht\topbox
+ | \advance\dimena-\ncols\ht\botbox
+ | \ifdim\pagetotal>\dimena
+ | \eject\null
+ | \repeat
+ |}
+\endcode
+%}}} balancing columns
+\endcodefile
+\enddocument
+\bye
+%}}} pdcoput5.tex
+
+%Local variables:
+%fold-folded-p: t
+%fill-prefix: " "
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcsty.dtx b/macros/plain/contrib/pdcmac/pdcsty.dtx
new file mode 100644
index 0000000000..33f22e7994
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcsty.dtx
@@ -0,0 +1,1153 @@
+% pdcsty -- documentation and source code for several style files -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "Damian's random style files",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcsty.dtx",
+%%% version = "$Revision: 1.2 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:12:17 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX style files pdccmdoc.tex, ma55doc.tex,
+%%% etc. and definitioon files pdcdoc1.tex and pdclft1.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions files and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "This program is free software; you can redistribute
+%%% it and/or modify it under the terms of the GNU
+%%% General Public License as published by the Free
+%%% Software Foundation; either version 2 of the License,
+%%% or (at your option) any later version.",
+%%% notice = "This program is distributed in the hope that it will
+%%% be useful, but WITHOUT ANY WARRANTY; without even the
+%%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%%% PARTICULAR PURPOSE. See the GNU General Public
+%%% License for more details.",
+%%% notice = "You should have received a copy of the GNU General
+%%% Public License along with this program; if not, write
+%%% to the Free Software Foundation, Inc., 675 Mass Ave,
+%%% Cambridge, MA 02139, USA.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode2.tex"
+%%%}
+
+
+%{{{ pdcsty.dtx
+%{{{ preamble
+
+\input pdccode2
+\rcs$Id: pdcsty.dtx,v 1.2 1995/03/30 16:12:17 pdc Exp $\endrcs
+
+\everycode{\tt \baselineskip=0.8\baselineskip \lineskiplimit=0pt }
+\newcount\lineno
+\everycodeline{\llap{$ \global\advance\lineno1
+ \scriptstyle\the\lineno $\enspace}}
+
+
+\codefile{cmX}{pdccmlft.tex} \codefile{cmT}{pdccmdoc.tex}
+\codefile{maX}{ma55lft.tex} \codefile{maT}{ma55doc.tex}
+\codefile{psX}{pdcpslft.tex} \codefile{psT}{pdcpsdoc.tex}
+\codefile{X}{pdclft.def} \codefile{T}{pdcdoc.def}
+
+\def\maonly{\global\maXtrue \global\maTtrue
+ \global\cmXfalse \global\cmTfalse
+ \global\psXfalse \global\psTfalse
+ \global\Xfalse \global\Tfalse
+ \banner{Malvern}}
+\def\cmonly{\global\maXfalse \global\maTfalse
+ \global\cmXtrue \global\cmTtrue
+ \global\psXfalse \global\psTfalse
+ \global\Xfalse \global\Tfalse
+ \banner{Computer Modern}}
+\def\psonly{\global\maXfalse \global\maTfalse
+ \global\cmXfalse \global\cmTfalse
+ \global\psXtrue \global\psTtrue
+ \global\Xfalse \global\Tfalse
+ \banner{PostScript fonts}}
+
+\def\styonly {\global\maXtrue \global\maTtrue
+ \global\cmXtrue \global\cmTtrue
+ \global\psXtrue \global\psTtrue
+ \global\Xfalse \global\Tfalse
+ \banner{Style files}}
+\def\Tstyonly{\global\maXfalse \global\maTtrue
+ \global\cmXfalse \global\cmTtrue
+ \global\psXfalse \global\psTtrue
+ \global\Xfalse \global\Tfalse
+ \banner{Doc style files}}
+\def\Xstyonly{\global\maXtrue \global\maTfalse
+ \global\cmXtrue \global\cmTfalse
+ \global\psXtrue \global\psTfalse
+ \global\Xfalse \global\Tfalse
+ \banner{Lft style files}}
+
+\def\Tonly {\global\maXfalse \global\maTfalse
+ \global\cmXfalse \global\cmTfalse
+ \global\psXfalse \global\psTfalse
+ \global\Xfalse \global\Ttrue
+ \banner{Sectioning macros for Docs}}
+\def\Xonly {\global\maXfalse \global\maTfalse
+ \global\cmXfalse \global\cmTfalse
+ \global\psXfalse \global\psTfalse
+ \global\Xtrue \global\Tfalse
+ \banner{Sectioning macros for Lfts}}
+
+\def\banner#1{
+ \par
+ \line{%
+ \vrule height 1ex width 0.2ex
+ \leaders\vrule height 1ex depth -0.8ex \hskip2em
+ \enspace{\it \strut #1\/}\enspace
+ \leaders\vrule height 1ex depth -0.8ex \hfil
+ }
+}
+
+\def\onlyone#1{
+ \allfilesfalse \global\csname#1true\endcsname
+ \banner{{\tt\csname filename#1\endcsname}}
+}
+\def\onlytwo#1#2{
+ \allfilesfalse \global\csname#1true\endcsname
+ \global\csname#2true\endcsname
+ \banner{{\tt\csname filename#1\endcsname},
+ {\tt\csname filename#2\endcsname}}
+}
+
+\def\common{
+ \par
+ \allfilesfalse \global\Xtrue \global\Ttrue
+ \closebanner
+}
+
+\def\closebanner{
+ \line{%
+ \vrule height 1.8ex depth -0.5ex width 0.2ex
+ \leaders\vrule height 0.7ex depth -0.5ex \hfil
+ }
+}
+
+
+
+%}}} preamble
+%{{{ introduction
+
+\null\vskip2\baselineskip\hrule\bigskip
+\leftline{Style files for the pdc- macros \fileversion\space(\filedate)}
+\bigskip\hrule\bigskip
+\headline{\hfil\global\headline={\hfil
+ \sevenbf Style files for the pdc- macros
+ \fileversion\space(\filedate)}}
+
+\section{Introduction}
+
+\subsec{About the style files}
+
+ This document describes a family of plain \TeX\ style files for
+ typesetting documents which are short enough not to need any
+ fancy indexing or cross-references, but long enough to want
+ numbered section headings and a table of contents.
+
+ A {\it style file} in this context means a definitions file that
+ specifies the formatting of for a document: layout, choice of
+ fonts, instructions for how to format lists, and so on. The
+ style files use the macros defined in other definition files to
+ supply most of the features they need. The document only needs
+ one `|\input|' command to set up most of the commands it needs.
+
+\subsec{No cross-references}
+
+ Omitting cross-references is important because it means we can
+ avoid having documents that have to be run through \TeX\ more
+ than once (the first time to generate a raw index or
+ cross-reference file, the second to incorporate the references
+ into the document). This greatly simplifies the macros.
+
+ So that the table of contents may be generated automatically
+ without requiring a second pass, it is printed {\it last\/} in
+ the file. It follows that the table of contents belongs at the
+ end of the front matter of the document (on pages numbered in
+ roman numerals), immediately before page~1. It is easiest if
+ all the front matter is printed last. After the end of the
+ document proper, put the front matter enclosed in |\frontmatter|
+ \dots |\endfrontmatter|; this automatically switches to page
+ numbering in roman numerals, and puts the table of contents at
+ the end.
+
+ The file |pdccmdoc.tex| does documents using the Computer Modern
+ fonts. There is a variant called |pdccmlft.tex| intended for
+ `leaflets' that are even shorter than the `docs' produced with
+ |pdccmdoc.tex|. Leaflets have no front matter section, no table
+ of contents, and section headings are much less prominent---they
+ should only be a few pages long at most. The Malvern versions
+ are called |ma55doc.tex| and |ma55lft.tex|.
+
+\subsec{About this document}
+
+ The file that generates this printed documentation, |pdcsty.dtx|
+ is a `documented \TeX' file. As well as briefly describing what
+ the macros are for and how they work, it includes a complete
+ listing of their definitions. The text of the definitions is
+ also written to files in the current directory, generating fresh
+ copies of the style files. This way this documentation and the
+ files it describes are guaranteed to match.
+
+ The lines of all definitions are numbered continuously, even
+ though only a subset of all the definition lines will go in each
+ file.
+
+%}}} introduction
+%{{{ starting up
+
+\section{Starting up}
+
+\subsec{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file, for the benefit of people wondering what the file is for.
+ The macro file otherwise has no other comments, in the hope that
+ this will let \TeX\ read it in faster. (It should be possible
+ for the identification comments to go {\it after} an |\endinput|
+ at the close of the file, but the convention is to have them at
+ the start.)
+
+ The following segment is common to the style files and the
+ definiton files.
+
+\code
+ \|\% \filename~\fileversion~\filedate~-- macros for short documents
+\smallbreak
+ |%%%@TeX-definition-file {
+ \|\%\%\% filename~~~~~~~= "\filename",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, style file",
+ |%%% supported = "Maybe",
+\cmonly |%%% abstract = "Top-level macro file for documents set in
+ |%%% Computer Modern fonts.
+\maonly |%%% abstract = "Top-level macro file for documents set in
+ |%%% Malvern 55, 56 and 75 fonts.
+\onlytwo{X}{T}
+ |%%% abstract = "Sectioning macros for style files.
+\allfilestrue\closebanner
+ |%%% This macro file was generated by running plain
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+\onlytwo{X}{T}
+ |%%% dependencies = ""
+\cmonly |%%% dependencies = "pdcfmt2.tex, pdcfsel.tex, pdchyex.tex,
+ |%%% pdcimth.tex, pdccmsub.tex, pdcmigr.tex,
+\maonly |%%% dependencies = "maamac.tex, pdcfmt2.tex, pdcfsel.tex,
+ |%%% pdchyex.tex, pdcimth.tex, pdcmigr.tex,
+\psonly |%%% dependencies = "pdcadobe.tex, pdcfmt2.tex, pdcfsel.tex,
+ |%%% pdchyex.tex, pdcimth.tex, pdcmigr.tex,
+\Tstyonly
+ |%%% pdcoput5.tex, pdcdoc.def",
+\Xstyonly
+ |%%% pdcoput5.tex, pdclft.def",
+\allfilestrue\closebanner
+ |%%%}
+ |
+ \|\\message\{\fileversion~<\fileauthor~\filedate>\}
+ |
+\endcode
+
+ This is followed immediately by a list of the macro files
+ included by this format:
+\code
+\styonly
+ |\input pdcimth
+ |\input pdcmigr
+ |\input pdcfmt2
+ |\input pdchyex
+ |\input pdcoput5
+ |\input pdcfsel
+\cmonly
+ |\input pdccmsub
+\maonly
+ |\input maamac
+\psonly
+ |\input pdcadobe
+\common
+\endcode
+
+
+%}}} starting up
+%{{{ layout
+
+\section{Layout}
+
+\subsec{Paper sizes}
+
+ The section defining the paper size is at the very top of the
+ file to make it easy for someone adapting the macros to American
+ Letter size paper to find them.
+
+ Nevertheless, we set the top and bottom margins to be large
+ enough that even if it is printed on American paper, nothing
+ important will be cut off. This requires decent-sized margins
+ at the top and bottom of pages (since the end of the page that
+ will be lost depends on whether the printer driver has its real
+ origin at top-left or bottom-left). The edge of the printing
+ area is guessed at as being $7\,{\rm mm}$ from the edge of the
+ paper.
+\code
+ |\topmg=297mm \advance\topmg-11in \advance\topmg7mm
+ |\botmg=\topmg
+ |\advance\topmg\ht\strutbox \advance\topmg\headlineskip
+ |\ifdim \topmg<20mm \topmg=20mm \fi
+ |\ifdim \botmg<27mm \botmg=27mm \fi
+\smallbreak
+ |\setpaper{210mm}{297mm}
+\endcode
+
+ The document has `tab-index' headings, that is, headings go in a
+ wide left margin to the left of the body text. The underlying
+ structure is a grid is 4~cells wide, with the text spanning
+ across the rightmost 3~cells. Definitions in the fonts section
+ below specify that the text will be set ragged-right.
+\code
+ |\setnkgrid{4}{3}
+ |\colrule=0pt
+ |\leftmargin=\gridwd \advance\leftmargin\colsep
+\endcode
+ The output routine's |\leftbox| is set at the start of each page
+ to make space for the left margin.
+\code
+ |\everypage={\ifdim\leftmargin>0pt
+ | \setbox\leftbox=\hbox to \gridwd{}\fi}
+\endcode
+
+ While we're here, we customize some of the environments supplied
+ by pdcFMT2:
+\code
+ |\everyfootnote={\notefonts}
+ |\everylinenum={\smallfonts}
+\maonly
+ |\def\footnotetextmark#1{{\rmsy#1}}
+ |\def\footnotenotemark#1{{\rmsy#1}}
+\common
+ |\everylinenum={\smallfonts}
+ |\everytag={\bf}
+\endcode
+
+%}}} layout
+%{{{ fonts
+\section{Fonts}
+
+ This section describes the fonts available in the document.
+
+ We introduce extra nicknames |\bi| for bold italic (used for the
+ first mention of new techical terms), |\mf| for the METAFONT
+ logo, |\mfi| for the METAFONT logo in italic (Something of an
+ affectation) and |\ttb| for an `emphasized' typewriter (usually
+ it is best if this is slanted, not bold).
+\code
+\styonly
+ |\autoloadfonts
+\endcode
+
+ The style files differ because of encoding schemes more than
+ because of the particular fonts. For example, a style for Times
+ Roman will work for Palatino too,if we change the names of the
+ fonts used. To do this, a macro |\basefontname| may be defined
+ before the style file is read in; if it isn't defined it is
+ given a default value.
+
+%{{{ cmr
+
+\subsec{Fonts for Computer Modern documents}
+\cmonly
+ We use Computer Modern Sans Serif for the headings in CM
+ documents. I have not put much effort into making formulas
+ work in headings.
+\code
+ |\def\STYheadingT{%
+ | \m{rm}{cmss}\m{mi}{cmmi}\m{sy}{cmsy}%
+ | \f{it}{cmssi}\f{tt}{cmtt}\f{mf}{logo}\f{mfi}{logosl}%
+ |}
+\smallbreak
+ |\font\headingrm=cmss17 \font\headingit=cmssi17
+ |\fontset{subheading}\STYheadingT{10 scaled 1200}{14pt}
+ | {small}{tiny}
+ |\fontset{heading}\STYheadingT{10 scaled 1728}{20pt}
+ | {subheading}{small}
+\endcode
+
+ We use Computer Modern for body text.
+\code
+ |\def\STYbodyT{\m{rm}{cmr}\m{it}{cmti}%
+ | \m{bf}{cmbx}\@\f{bi}{cmbxti10}%
+ | \m{mi}{cmmi}\m{sy}{cmsy}%
+ | \@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ | \f{tt}{cmtt}\@\f{ttb}{cmsltt10}%
+ |}
+\smallbreak
+ |\font\tinytt=cmtt8 at 7pt
+ |\font\bodysy=cmsy10 at 12pt
+\endcode
+
+%}}} cmr
+%{{{ malvern
+
+\subsec{Fonts for Malvern documents}
+\maonly
+
+ Headings are in Malvern~75. The maths fonts are scaled for
+ expediency; I~do not make much effort to make formulas work in
+ headings.
+\code
+ |\def\STYheadingT{%
+ | \m{rm}{ma75a}\@\m{mi}{cmmi10}\@\m{sy}{cmsy10}%
+ | \f{it}{ma76a}\@\f{tt}{cmtt10}\@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ |}
+\smallbreak
+ |\fontset{subheading}\STYheadingT{12}{14pt}{subheading}{subheading}
+ |\fontset{heading}\STYheadingT{18}{20pt}{subheading}{subheading}
+\endcode
+
+
+ We use Malvern~55 for body text. The supplementary font with
+ encoding~B is added, with font nickname |\rmsy|.
+\code
+ |\newfam\rmsyfam
+\smallbreak
+ |\def\STYbodyT{%
+ | \m{rm}{ma55a}\f{rmsy}{ma55b}\m{it}{ma56a}%
+ | \m{bf}{ma75a}\f{bi}{ma76a}%
+ | \m{mi}{cmmi}\m{sy}{cmsy}%
+ | \@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ | \f{tt}{cmtt}\f{tb}{cmsltt}%
+ |}
+\endcode
+% The main problem with defining the body fonts is that the
+% $x$-height of Malvern is larger then Computer Modern. This makes
+% in necessary to load the maths fonts at a larger size to match.
+% (A better solution might be to make a parameter file for
+% Computer Modern so that maths fonts may be generated with
+% compatible proportions.)
+%\code
+% |\loadfont\bodytt{cmtt10 scaled \magstep2}
+% |\loadfont\notett{cmtt10 scaled \magstep1}
+% |\loadfont\smalltt{cmtt10 scaled \magstephalf}
+% |\loadfont\bodytb{cmsltt10 scaled \magstep2}
+% |\loadfont\smalltb{cmsltt10 scaled \magstep1}
+% |\loadfont\notetb{cmsltt10 scaled \magstephalf}
+%\endcode
+ There is no point using |\loadfont| on the maths symbol fonts,
+ since they have to be loaded anyway the first time |\bodyfonts|
+ is called.
+\code
+ |\font\bodymi=cmmi10 scaled \magstep2
+ |\font\bodysy=cmsy10 scaled \magstep2
+ |\font\notemi=cmmi10 scaled \magstep1
+ |\font\notesy=cmsy10 scaled \magstep1
+ |\font\smallmi=cmmi10 scaled \magstephalf
+ |\font\smallsy=cmsy10 scaled \magstephalf
+\endcode
+%}}} malvern
+%{{{ PostScript
+
+\subsec{Fonts for Times documents}
+\psonly
+ The big problem with PostScript fonts is what they are called;
+ I~shall be assuming that Fontname~$1.6$\footnote*{Karl Berry,
+ {\it File Names for \TeX\ Fonts} $1.6$ ({\tt
+ ftp:\penalty\exhyphenpenalty //ftp.umb.edu\slash pub\slash
+ tex\slash fontname/}).} applies: fonts with |afm2tfm|'s
+ variation on the \TeX\ Text encoding are called |ptmr| and fonts
+ with Adobe's StandardRoman encoding are called |ptmr0| (rather
+ than |rptmr|).
+
+ This macro attempts to make it possible to guess the standard
+ name for the italic variant of a given font.
+ |\KBcanonical{|\<tentative font name>|}| takes a font name which
+ is formed from an upright name optionally followed by `|i|'
+ representing an italic variation. It returns the corresponding
+ standard name. For example, |ptmri| is left unchanged, but
+ |phvri| is changed to |phvro| and |phvrrni| is changed to
+ |phvron|.
+\code
+ |\def\KBcanonical#1{%
+ | \expcs\ifx{KB#1}\relax #1\else\csname KB#1\endcsname \fi
+ |}
+\smallbreak
+ |\ifx\KBadobe\UNDEFINED \def\KBadobe#1{\KBcanonical{#10}} \fi
+ |\def\KBit#1{\KBcanonical{#1i}}
+ |\def\KBbi#1{\KBbf{#1i}}
+ |\def\KBbf#1{\expandafter\KBbfx#1.}
+ |\def\KBbfx#1#2#3#4#5.{\KBcanonical{#1#2#3b#5}}
+\smallbreak
+ |\def\KBpagbr{pagdr} \def\KBpagbri{pagdro}
+ |\def\KBpbkbr{pbkdr} \def\KBpbkbri{pbkdri}
+ |\def\KBpagri{pagro} \def\KBpagbi{pagbo}
+ |\def\KBphvri{phvro} \def\KBphvbi{phvbo}
+ |\def\KBpcrri{pcrro} \def\KBpcrbi{pcrbo}
+ |\def\KBphvrrni{phvron} \def\KBphvbrni{phvbon}
+ |\def\KBphvrrn0{phvr0n} \def\KBphvbrn0{phvb0n}
+ |\def\KBphvrrni0{phvro0n} \def\KBphvbrni0{phvbo0n}
+\endcode
+
+ Headings are in Helvetica. The maths fonts are scaled for
+ expediency; I~do not make much effort to make formulas work in
+ headings.
+\code
+
+ |\ifx\headingfontname\UNDEFINED \def\headingfontname{phvr} \fi
+ |\ifx\headingttfontname\UNDEFINED \def\headingttfontname{pcrb} \fi
+\smallbreak
+ |\def\STYheadingT{%
+ | \@\f{rm}{\headingfontname}\@\m{mi}{cmmi10}\@\m{sy}{cmsy10}%
+ | \@\f{asy}{psyr}%
+ | \@\f{it}{\KBit\headingfontname}%
+ | \@\f{tt}{\headingttfontname}\@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ |}
+\smallbreak
+ |\loadfont\bodysy{cmsy10 at 12pt}
+\smallbreak
+ |\fontset{subheading}\STYheadingT{12}{14pt}{subheading}{subheading}
+ |\fontset{heading}\STYheadingT{18}{20pt}{subheading}{subheading}
+\endcode
+
+
+ We use Times Roman by default for body text, and Courier for
+ typewriter text. Adobe's Symbol font is included, with font
+ nickname |\asy|; a family called |\asyfam| has already been
+ created by |pdcadobe.tex|.
+\code
+ |\ifx\bodyfontname\UNDEFINED \def\bodyfontname{ptmr} \fi
+ |\ifx\bodyttfontname\UNDEFINED \def\bodyttfontname{pcrr} \fi
+\smallbreak
+ |\def\STYbodyT{%
+ | \@\m{rm}{\bodyfontname}\@\m{it}{\KBit\bodyfontname}%
+ | \@\m{bf}{\KBbf\bodyfontname}\@\f{bi}{\KBbi\bodyfontname}%
+ | \@\m{asy}{psyr}\m{mi}{cmmi}\m{sy}{cmsy}%
+ | \@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ | \@\f{tt}{\bodyttfontname}\@\f{tb}{\KBit\bodyttfontname}%
+ |}
+\endcode
+
+
+ Finally the alphabet-switching commands defined for Malvern
+ fonts are given dummy definitions.
+\code
+ |\let\sc=\relax \let\mc=\relax \let\csc=\relax
+\endcode
+
+%}}} malvern
+
+\common
+\subsec{Definitions common to all formats}
+
+\code
+\styonly
+ |\fontset{tiny}\STYbodyT{7}{9pt}{tiny}{tiny}
+ |\fontset{small}\STYbodyT{9}{11pt}{tiny}{tiny}
+ |\fontset{note}\STYbodyT{10}{12pt}{tiny}{tiny}
+ |\fontset{body}\STYbodyT{12}{14pt}{small}{tiny}
+\endcode
+
+ The text is set left-justified (ragged-right). To make this
+ work, the fontdimens that control word spacing are set to force
+ interword spaces to all be the same width.
+\code
+ |\def\everyloadfont#1#2{\fontdimen3#1=0pt \fontdimen4#1=0pt}
+ |\rightskip=0pt plus 2em \tolerance=1000
+\smallbreak
+ |\bodyfonts
+ |{\tt \hyphenchar\font=-1 }
+\common
+\endcode
+
+%}}} fonts
+%{{{ minimal section headings
+\section{Simple sectioning}
+
+\onlyone{X}
+ A `leaflet' is divided into short sections, which may contain
+ subsections (but usually will not). There may well be more than
+ one section on a page.
+
+ The section number is held in two count registers, and printed
+ (enclosed in |\n{|\dots|}|) with the macro |\thesecno|:
+
+\code
+ |\newcount\secno \newcount\subsecno
+\smallbreak
+ |\def\thesecno{%
+ | \n{%
+ | \number\secno
+ | \ifnum\subsecno>0
+ | .\number\subsecno
+ | \fi
+ | }%
+ |}
+\endcode
+
+ The section and subsection commands are implemented
+ straightforwardly with macros from |pdcfmt2.tex|, since there is
+ no need for marks or fiddling with table-of-contents files.
+\code
+ |\def\section{
+ | \global\advance\secno1 \global\subsecno0
+ | \doheading\medskipamount{\subheadingfonts\thesecno\enspace}{}
+ |}
+\smallbreak
+ |\def\subsec{
+ | \global\advance\subsecno1
+ | \doheading\smallskipamount{\bodyfonts\thesecno\enspace}{}
+ |}
+\endcode
+
+ The page header includes only the title of the file, which the
+ user sets with the command |\majorheadline{|\<text>|}|
+\code
+ |\newtoks\majorheadline
+ |\expandafter\majorheadline
+ | \expandafter{\expandafter\uppercase\expandafter{\jobname}}
+\endcode
+ All those |\expandafter|s are to get the initial value in upper
+ case.
+
+ The flag |noheadline| signals that the headline is to be omitted
+ on this page (e.g., the title page). The |twosided| flag is set
+ for two-sided binding.
+\code
+ |\newif\ifnoheadline \newif\iftwosided
+\smallbreak
+ |\headline{%
+ | \ifnoheadline
+ | \hfil
+ | \else\iftwosided
+ | \ifodd\pageno
+ | \hfil \the\majorheadline \quad{\bf\folio}%
+ | \else
+ | {\bf\folio}\quad \the\majorheadline\hfil
+ | \fi
+ | \else
+ | \hfil \the\majorheadline \quad{\bf\folio}%
+ | \fi\fi
+ |}
+\smallbreak
+ |\footline{%
+ | \ifnoheadline
+ | \global\noheadlinefalse
+ | \hfil{\bf\folio}\hfil
+ | \else
+ | \hfil
+ | \fi
+ |}
+\endcode
+
+%}}} minimal section headings
+%{{{ sectioning
+\section{Sectioning in PDCCMDOC documents}
+
+\onlyone{T}
+ Now a document is divided into {\it sections}, which are further
+ divided into so-called {\it subsecs} and {\it subsubsecs}.
+ (Division into subsubsecs should be done sparingly.)
+
+ The sections may be grouped into {\it parts}---or, to look at it
+ another way, parts are a larger division of the document than
+ sections, but sections are not numbered within part numbers.
+ Each |\part| command should be almost immediately followed by
+ |\section|.
+
+\subsec{Macros for section numbers}
+
+ The part and section numbers are kept in \TeX\ number registers,
+ with corresponding `|\the|-' macros to print the value
+ formatted.
+\code
+ |\newcount\partno
+\smallbreak
+ |\def\thepartno{%
+ | \ifcase\partno O\or I\or II\or III\or IV\or V\else
+ | \expandafter\uppercase\expandafter{\romannumeral\partno}%
+ | \fi
+ |}
+\endcode
+ Formatted section and subsec numbers are generated by one macro
+ |\thesecno|. It automatically omits (sub)subsec numbers if they
+ are zero. The whole number is enclosed in |\n{|\dots|}| so that
+ the formatting of numbers may be customized.
+\code
+ |\newcount\secno \newcount\subsecno \newcount\subsubsecno
+\smallbreak
+ |\def\thesecno{%
+ | \n{%
+ | \number\secno
+ | \ifnum\subsecno>0
+ | .\number\subsecno
+ | \ifnum\subsubsecno>0
+ | .\number\subsubsecno
+ | \fi
+ | \fi
+ | }%
+ |}
+\endcode
+
+\subsec{Parts}
+
+ The |\part| macro takes one argument, the title. It sets a
+ token register |\majorheadline| which is printed on the left
+ page of two-sided documents.
+
+ The |\majorheadline{|\<text>|}| command may be used immediately
+ after a |\part| command if the part title is not suitable to go
+ in the headline. This should also be used at the start of the
+ document to the title of the document, if division into parts is
+ not used.
+\code
+ |\newtoks\majorheadline
+ |\expandafter\majorheadline
+ | \expandafter{\expandafter\uppercase\expandafter{\jobname}}
+\smallbreak
+ |\def\part#1{%
+ | \global\advance\partno1
+ | \newpageheading{2\baselineskip}{\headingfonts}
+ | {}{\thepartno.\quad#1}
+ | \TOCwrite\TOCentrypart{\thepartno}{#1}
+ |}
+\endcode
+
+\subsec{Section headings}
+
+ Section headings will start on a new page if the current page is
+ almost finished. The section heading is set across the full
+ width of the page, including the margin usually used for
+ tab-indexed headings.
+
+ To force the next section to start a new page, do
+ |\sectionpenalty-10000| immediately before it.
+\code
+ |\newcount\sectionpenalty
+\smallbreak
+ |\def\sectionheading#1{
+ | \par
+ | \vskip 0pt plus 0.3\vsize
+ | \penalty\sectionpenalty \sectionpenalty-200
+ | \vskip 1\bigskipamount plus -0.3\vsize
+ | \begingroup \advance\leftskip-\leftmargin
+ | \parskip=0pt \parindent=0pt
+ | \hyphenpenalty=10000 \exhyphenpenalty=500
+ | \interlinepenalty=100
+ | \headingfonts \nointerlineskip
+ | \hbox{\hskip-\leftmargin
+ | \vrule height 2pt depth 0pt width \leftmargin
+ | \vrule height 2pt depth 0pt width \hsize}
+% | \nobreak\medskip
+ | #1\par
+ | \nobreak\smallskip
+ | \endgroup
+ | \global\noindenttrue
+ |}
+\endcode
+ As well as generating a heading, the section macro generates
+ marks used for the page headings and a TOC entry. The marks are
+ of the form in a way similar to that discussed in Chapter~23 of
+ the {\it\TeX book}. More precisely, a mark is placed on either
+ side of the section heading of the form
+$$\hbox{\tt\arg{\<rhs>}\arg{\<lhs>}}$$ where \<rhs> is the section
+ number that belongs on the right-hand page, reflecting the
+ situation at the bottom of the page, whereas \<lhs> is what
+ belongs on following left-hand pages.
+\code
+ |\newtoks\sectiontoks
+ |\newif\ifsecno \secnotrue
+\smallbreak
+ |\def\section#1{
+ | \ifsecno
+ | \global\advance\secno1 \global\subsecno0 \global\subsubsecno0
+ | \fi
+ | \toks0={#1}
+ | \mark{{\the\sectiontoks}{\ifsecno\S\thesecno\space\fi\the\toks0 }}
+ | \edef\tmp{\ifsecno\noexpand\S\the\secno\space\fi}
+ | \global\sectiontoks\expandafter{\tmp#1}
+ | \sectionheading{\ifsecno\thesecno\quad\fi #1}
+ | \mark{{\the\sectiontoks}{\the\sectiontoks}}
+ | \TOCwrite\TOCentrysection{\ifsecno\thesecno\fi}{#1}
+ |}
+\endcode
+ Subsecs and subsubsecs use the |\doheading| macro defined in
+ |pdcfmt.tex|. They do not appear in page headings, but may
+ appear in the TOC.
+\code
+ |\def\subsec#1{%
+ | \ifsecno \global\advance\subsecno1 \global\subsubsecno0 \fi
+ | \doheading\medskipamount{\subheadingfonts}{}
+ | {\ifsecno\thesecno\quad\fi#1}
+ | \TOCwrite\TOCentrysubsec{\ifsecno\thesecno\fi}{#1}
+ |}
+\smallbreak
+ |\def\subsubsec#1{%
+ | \ifsecno \global\advance\subsubsecno+1 \fi
+ | \doheading\smallskipamount{\rm}{}{\ifsecno\thesecno\quad\fi#1}
+ | \TOCwrite\TOCentrysubsubsec{\ifsecno\thesecno\fi}{#1}
+ |}
+\endcode
+
+ The headline and footline are controlled by two flags. The
+ command |\noheadlinetrue| suppresses the headline for this page
+ (e.g., a title page). The |twosided| flag says whether the
+ document should be formatted for two-sided printing.
+\code
+ |\newif\ifnoheadline
+ |\newif\iftwosided
+\smallbreak
+ |\footline={%
+ | \ifnoheadline
+ | \global\noheadlinefalse
+ | \hfil\bodyfonts\n\folio\hfil
+ | \else
+ | \hfil
+ | \fi
+ |}
+\endcode
+ The headline varies according to whether it is a one-sided page,
+ a left-hand page or a right-hand page. On a one-sided page, it
+ has the major headline (part or document title) at the left, and
+ the section title of the {\it first} section on the page on the
+ right with the folio. On a left-hand page, there is the folio
+ and the major headline, and on a right-hand page there is the
+ section title for the {\it last} section on the page, and the
+ folio.
+\code
+ |\headline={%
+ | \ifnoheadline
+ | \hfil
+ | \else
+ | \bodyfonts
+ | \iftwosided
+ | \ifodd\pageno
+ | \hfil
+ | \expandafter\firstoftwo\botmark\quad
+ | {\bf\n\folio}%
+ | \else
+ | {\bf\n\folio}\quad
+ | \the\majorheadline
+ | \hfil
+ | \fi
+ | \else
+ | \the\majorheadline
+ | \hfil
+ | \expandafter\secondoftwo\topmark\quad
+ | {\bf\n\folio}%
+ | \fi
+ | \fi
+ |}
+\smallbreak
+ |\def\firstoftwo#1#2{#1}
+ |\def\secondoftwo#1{}
+\endcode
+%}}} sectioning
+%{{{ table of contents
+\section{Table of contents intrinsics}
+
+ This section defines the macros used to generate a table of
+ contents. The entries are written to a file \<jobname>|.toc| in
+ the current directory. At the end of the manuscript this files
+ is closed and then read to generate the table of contents.
+
+ Macros special to the TOC-generating section have names starting
+ with `|\TOC|-'.
+\code
+ |\newwrite\TOCfile
+ |\openout\TOCfile=\jobname.toc
+\endcode
+
+ Entries in the TOC file are of the form
+$$\hbox{\tt\cs{TOCentry}\<foo>\arg{\<secno>}\arg{\<title>}\arg{\<folio>}}$$
+ where |\TOCentry|\<foo> is a csname, \<secno> is some
+ automatically-generated section number like `|1.2|', \<title> is
+ the section title as supplied by the user, and \<folio> is the
+ folio for this page, in arabic or lower-case roman numeral form.
+
+ They are generated with calls to |\TOCwrite| like this
+$$\hbox{\tt\cs{TOCwrite}\cs{TOCentry}\<foo>\arg{\<secno>}\arg{\<title>}}$$
+ The \<secno> is evaluated when |\TOCwrite| is called, whereas
+ the \<title> is carefully written without being expanded so that
+ its expansion happens when the TOC file is read in. The
+ \<folio> is automatically appended when it is written.
+\code
+ |\def\TOCwrite#1#2#3{%
+ | \begingroup\def\n{\string\n}
+ | \def\tmp{#3}%
+ | \edef\tmp{\string#1{#2}{\expandafter\TOCtrim\meaning\tmp}}
+ | \write\TOCfile\expandafter{\tmp{\folio}}\endgroup
+ |}
+\smallbreak
+ |\def\TOCtrim#1:->{}
+\endcode
+
+
+ Now we define all the `|\TOCentry|-' macros.
+\code
+ |\def\TOCentrypart#1#2#3{
+ | \smallskip
+ | \dimen0=\hsize \advance\dimen0\leftmargin
+ | \moveleft\leftmargin\hbox to\dimen0{\strut\bf #1. #2\hfil}
+ | \smallskip
+ |}
+\smallbreak
+ |\def\TOCentrysection#1#2#3{
+ | \smallskip\noindent\llap{#1\kern1pc}%
+ | {\bf \ignorespaces #2\quad\rm \n{#3}}\par
+ |}
+\smallbreak
+ |\def\TOCentrysubsec#1#2#3{
+ | \ifvmode \noindent \else \quad \fi
+ | {#1}~{\ignorespaces #2}
+ |}
+\smallbreak
+ |\def\TOCentrysubsubsec#1#2#3{}
+\endcode
+%}}} table of contents
+%{{{ front matter
+\section{Printing the front matter}
+
+ The front matter of the document---the title page, preface,
+ forword, etc.---must be printed {\it last}, with the table of
+ contents at the end of the front matter; this is so that the
+ table of contents may be accumulated during the \TeX ing of the
+ file.\footnote*{It has a benefit for people reading the document
+ with a browser: page~1 of the document is the first page of the
+ DVI file, which makes selecting a given page easy, and the table
+ of contents is at the very end, so the browsers `go to last
+ page' command can be used to find the table of contents
+ quickly.}
+ The front matter starts with the command |\frontmatter| and may
+ contain |\section| commands. Such sections will be unnumbered
+ and will not appear in the table of contents.
+
+ For a short document, a separate title page is probably
+ excessive, and an abstract may be preferable to a preface. In
+ this case the first page after |\frontmatter| could have the
+ title of the document (with author etc.)\ followed by an
+ abstract, any copyright information (or other small print), and
+ the contents (generated by |\endfrontmatter|). In other words,
+ something like this:
+$$\halign{\indent#\hfil\cr
+ |\frontmatter|\cr
+ \quad\it commands to print the title, etc.\cr
+ \quad|\abstract|\cr
+ \qquad\it the text of the abstract\cr
+ \quad|\endabstract|\cr
+ \quad\it copyright information, etc.\cr
+ |\endfrontmatter|\cr
+}$$
+ For a longer document, there will be a separate title page and
+ perhaps a preface.
+$$\halign{\indent#\hfil\cr
+ |\frontmatter|\cr
+ \quad|\titlepage|\cr
+ \qquad\it commands to print the title, etc.\cr
+ \quad|\splittitlepage|\cr
+ \qquad\it print copyright information, etc.\cr
+ \quad|\endtitlepage|\cr
+ \quad|\section{Preface}|\cr
+ \qquad\it text of preface, etc.\cr
+ |\endfrontmatter|\cr
+}$$
+ The macro |\splittitlepage| marks the division between the title
+ page (title recto, page~i) and the back of the title page (title
+ verso, page~ii), which is where copyright information goes. On
+ a one-sided document, the copyright information belongs on the
+ title recto, because the title verso will be blank, so
+ |\splittitle| instead does |\vfill|.
+
+ Setting |\pageno| nagative makes it print in roman numerals.
+ Calling |\secnofalse| suppresses section numbering. The first
+ page has no headline.
+\code
+ |\def\frontmatter{
+ | \write\TOCfile{\string\endinput}
+ | \write\TOCfile{\folio}
+ | \closeout\TOCfile
+ | \vfill\supereject
+ | \ifvoid\partialpage\else \null\vfill\eject \fi
+ | \beginthe{frontmatter}
+ | \pageno=-1 \secnofalse \noheadlinetrue
+ | \def\TOCwrite##1##2##3{}
+ |}
+\endcode
+ The front matter is finshed off with the contents list,
+ generated by |\endfrontmatter|. This reads the TOC file, which
+ was closed at the end of the last page of the body of the
+ document.
+\code
+ |\def\endfrontmatter{
+ | \section{Contents}
+ | \input\jobname.toc
+ | \vfill\supereject
+ | \endthe{frontmatter}
+ |}
+\endcode
+
+ Here's macros for generating the titlepage---it shoul;d enclose
+ commands to generate the title, author and publisher information
+ for the document. If it is used, it goes immediately after
+ |\frontmatter|, so that the title page is page~i.
+\code
+ |\def\titlepage{
+ | \vfill\eject
+ | \beginthe{titlepage}
+ | \noheadlinetrue
+ | \def\splittitlepage{
+ | \iftwosided \vfill\eject\null\vfill \else \vfill \fi
+ | }
+ |}
+\smallbreak
+ |\def\endtitlepage{
+ | \eject
+ | \endthe{titlepage}
+ |}
+\endcode
+
+ This |abstract| environment doesn't do anything fancy.
+\code
+ |\def\abstract{
+ | \smallskip
+ | \beginthe{abstract}
+ | \setbox\parbox\hbox to \gridwd{\subheadingfonts Abstract\hfil}
+ | \noindenttrue \bodyfonts
+ |}
+\smallbreak
+ |\def\endabstract{
+ | \smallskip
+ | \endthe{abstract}
+ |}
+\endcode
+%}}} front matter
+ This concludes the code that is included only in documents with TOC.
+\common
+
+%{{{ abbreviations
+
+\section{abbrevs}
+
+
+ The definitions of |\pt| and |\mm| work only in maths mode.
+\code
+ |\def\pt{\,{\rm pt}}
+ |\def\mm{\,{\rm mm}}
+\smallbreak
+ |\def\MF{{\ifdim\fontdimen1\font>0pt \mfi \else \mf \fi META}\-%
+ | {\ifdim\fontdimen1\font>0pt \mfi \else \mf \fi FONT}}
+ |\def\MSDOS{\leavevmode\hbox{MS-DOS}}
+\endcode
+
+\subsec{Program names with small caps}
+
+ Some program names use small capitals in their names. For
+ normal fonts there is no point trying to duplicate this, since
+ small capitals aren't common to all fonts. But small capitals
+ come `for free' with Malvern, so we might as well use them. The
+ following definitions apply to Malvern~A fonts.
+\code
+\maonly
+ |\def\PS{\csc{PostScript}}
+ |\def\La{L\negthinspace\flushtop{\char"C1 }}
+\cmonly
+ |\def\PS{PostScript}
+\common
+\endcode
+
+\font\sf=cmss10
+ Here's a redefinition of |\TeX|. This adds a spacefactor 1000
+ to the end (so that \TeX\ doesn't apply its usual heuristic that
+ a full stop following a capoital {\it X} isn't a sentence end).
+ It also loosens up the logo, producing `\TeX' rather than the
+ usual `T\negthinspace\lower0.5ex\hbox{E}\kern-0.125emX'. This
+ design is more forgiving of changes in font (for example, in
+ sanserif it makes `{\sf\TeX}' instead of `{\sf
+ T\negthinspace\lower0.5ex\hbox{E}\kern-0.125emX}').
+\code
+ |\def\TeX{T\kern-0.1em\lower0.5ex\hbox{E}X\spacefactor1000 }
+\endcode
+
+ The macro |\dfn{...}| formats a defining instance of a word or
+ phrase (usually used the first time a new technical term is
+ introduced). When generating an index with a command |\index|,
+ this also adds the phrase to the index.
+\code
+ |\begingroup\catcode`\|=12 \toks0={\endgroup
+ | \def\dfn#1{\ifx\index\UNDEFINED\else\index{#1|INDdfn}\fi{\bi #1}}
+ |} \the\toks0
+\endcode
+
+ Here's a hack for using email-style emphasis using
+ `asterisking'. Text enclosed in matching asterisks is
+ emphasized.
+\code
+ |\declareactivechar\* \def*#1*{{\it#1\/}}
+\endcode
+
+
+\begingroup\defverbatim\~
+ When documenting computer progams it is useful to be able to
+ present dialogues between the user and the computer, with the
+ user's commands distinguished by a slightly different font.
+ Here we define ~\|~\<text>~|~ so that it behaves like
+ ~|~\<text>~|~ except that |\ttb| is used instead of |\tt|. In
+ maths mode it is still equivalent to |\Vert|.
+\code
+ |\def\|{%
+ | \relax\ifmmode
+ | \Vert
+ | \else
+ | \begingroup
+ | \ttb \setupverbatim
+ | \catcode`\|=13 \let|\endgroup
+ | \fi
+ |}
+\endcode
+\endgroup
+%}}} abbreviations
+%{{{ postamble
+\section{Finally}
+
+ The definitions common to all style files are read last, so that
+ they can take account of changes to |\baselineskip|.
+\code
+\Tstyonly
+ |\input pdcdoc.def
+\Xstyonly
+ |\input pdclft.def
+\common
+\endcode
+
+ And, at last, a file {\tt\<filename>.cfg} is read, if it exists.
+\code
+ |\def\inputifexists#1{%
+ | \openin15=#1
+ | \ifeof15 \else \input #1 \fi
+ | \closein15
+ |}
+\styonly
+ \|\\inputifexists\{\filenamesanssuffix.cfg\}
+\common
+\endcode
+
+\endcodefile{cmX} \endcodefile{cmT} \endcodefile{maX} \endcodefile{maT}
+\endcodefile{psX} \endcodefile{psT} \endcodefile{X} \endcodefile{T}
+\bye
+%}}} postamble
+%}}} pdccmcode.dtx
+
+%Local variables:
+%fold-folded-p: t
+%fill-prefix: " "
+%End:
diff --git a/macros/plain/contrib/pdcmac/pinstall b/macros/plain/contrib/pdcmac/pinstall
new file mode 100644
index 0000000000..c9b6b95638
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pinstall
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+# I can't figure out how I'm supposed to use a builtin "install"
+# program in a makefile given that every Unix has an incompatible version!
+
+# This script shall behave similarly to GNU "install".
+
+version="1.1 Time-stamp: <pdc 1995-03-24>"
+
+echo=
+strip=:
+
+while test $# -gt 0; do
+ case $1 in
+ -c) ;;
+ -n|--no-create)
+ echo=echo ;;
+ --g*=*)
+ group=`expr $1 : '.*=\(.*\)$'` ;;
+ -g|--g*)
+ group=$2; shift ;;
+ -g*)
+ group=`expr $1 : '-.\(.*\)$'` ;;
+ --o*=*)
+ owner=`expr $1 : '.*=\(.*\)$'` ;;
+ -o|--o*)
+ owner=$2; shift ;;
+ -o*)
+ owner=`expr $1 : '-.\(.*\)$'` ;;
+ --m*=*)
+ mode=`expr $1 : '.*=\(.*\)$'` ;;
+ -m|--m*)
+ mode=$2; shift ;;
+ -m*)
+ mode=`expr $1 : '-.\(.*\)$'` ;;
+ -s|--strip)
+ strip=strip ;;
+ -h|--help)
+ cat <<@EOF
+$0 -- install files
+usage:
+ $0 [ OPTION ]... FILE1 FILE2
+ $0 [ OPTION ]... FILE1...FILEn DIR
+ $0 --help | --version
+options:
+ -c ignored
+ --group=GROUP --owner=USER --mode=MODE -g GROUP -o USER -m MODE
+ --strip -s
+@EOF
+ exit 0 ;;
+ -V|--version)
+ echo "PDCMAC install ($0) version $version"
+ exit 0 ;;
+ -*)
+ echo >&2 $0: $1: not understood -- try $0 --help
+ exit 2 ;;
+ *)
+ files="$files $lastfile"
+ lastfile=$1 ;;
+ esac
+ shift
+done
+
+#echo group=$group owner=$owner mode=$mode lastfile=$lastfile files=$files
+
+$echo cp -p $files $lastfile || exit 1
+if test -d "$lastfile"; then
+ $echo cd $lastfile
+else
+ files="$lastfile"
+fi
+
+if test -n "$group"; then
+ $echo chgrp $group $files || exit 1
+fi
+
+if test -n "$owner"; then
+ $echo chown $owner $files || exit 1
+fi
+
+if test -n "$mode"; then
+ $echo chmod $mode $files || exit 1
+fi
+$echo $strip $files
+
+exit 0
diff --git a/macros/plain/contrib/pdcmac/pinstall.1 b/macros/plain/contrib/pdcmac/pinstall.1
new file mode 100644
index 0000000000..7faccac859
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pinstall.1
@@ -0,0 +1,108 @@
+.TH PINSTALL 1 "Time-stamp: <pdc 1995-03-27>" "PDCMAC 1.0" "CONTRIBUTED SOFTWARE"
+.SH NAME
+pinstall \- shellscript for copying programs into system directories,
+compatible with install
+.SH SYNOPSIS
+.na
+.B pinstall
+[
+.B \-c
+] [
+.I options
+]
+.I file1
+.I file2
+.br
+.B pinstall
+[
+.B \-c
+] [
+.I options
+]
+.I file\|.\|.\|.
+.I dir
+.br
+.BR pinstall
+.B \-\-help
+|
+.B \-\-version
+.PP
+.I options
+= [
+.B \-\-no\-create
+] [
+.BI \-\-group= groupname
+] [
+.BI \-\-owner= username
+] [
+.BI \-\-mode= mode
+] [
+.B \-\-strip
+]
+.SH DESCRIPTION
+.na
+This documents the
+.SM PDCMAC
+version of
+.IR install (1),
+called
+.IR pinstall .
+It is only used if
+.SM GNU
+.I install
+is not available.
+.PP
+This copies
+.I file1
+(which must exist)
+to the name
+.IR file2 ,
+or
+the
+.I files
+into the directory called
+.IR dir ,
+preserving the last-modified times
+(just like
+.BR "cp \-p" ).
+.PP
+This command is implemented as a shellscript.
+.SH OPTIONS
+.TP
+.B \-c
+Ignored.
+.TP
+.BI \-\-group= "groupname, " "\-g " groupname
+.PD 0v
+.TP
+.BI \-\-owner= "username, " "\-o " username
+.TP
+.BI \-\-mode= "mode, " "\-m " mode
+.PD
+Set the group, owner or mode for the new files (using the same
+conventions as
+.IR chgrp (1),
+.IR chown (1),
+and
+.IR chmod (1)
+respectively).
+Only root can combine changes of mode and group.
+.TP
+.BR \-\-help ", " \-h
+Print a usage message and exit.
+.TP
+.BR \-\-no\-create ", " \-n
+Do not copy files; instead print the commands that would have been performed.
+.TP
+.BR \-\-strip ", " \-s
+Apply
+.IR strip (1)
+to the files after copying them.
+.TP
+.BR \-\-version ", " \-V
+Print a version identification message and exit.
+.SH AUTHOR
+P. Damian Cugley
+.I damian.cugley@comlab.ox.ac.uk
+.SH "SEE ALSO"
+pmkdir(1), chgrp(1), chown(1), chmod(1), cp(1), strip(1), install(1)
diff --git a/macros/plain/contrib/pdcmac/pmkdir b/macros/plain/contrib/pdcmac/pmkdir
new file mode 100644
index 0000000000..1ed9baef93
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pmkdir
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+version="1.0 Time-stamp: <pdc 1995-03-27>"
+
+# pmkdir [ -m MODE | -g GROUP | -o OWNER | -n ] DIR
+# -- create a directory DIR, including any necessary
+# intervening directories.
+# Also takes note of 3 enbvironment variables:
+# GROUP -- group to give to new directories
+# OWNER -- owner for new directories
+# MODE -- mode for new directories
+# If called with the name of an existing directory, this will still
+# change group, mode, owner (if they are set).
+
+me=`basename $0`
+
+while test $# -gt 0; do
+ case $1 in
+ --m*=*)
+ MODE=`expr $1 : '.*=\(.*\)$'` ; export MODE ;;
+ -m|--m*)
+ MODE=$2 ; export MODE; shift ;;
+ --g*=*)
+ GROUP=`expr $1 : '.*=\(.*\)$'` ; export GROUP ;;
+ -g|--g*)
+ GROUP=$2; export GROUP; shift ;;
+ --o*=*)
+ OWNER=`expr $1 : '.*=\(.*\)$'` ; export OWNER ;;
+ -o|--o*)
+ OWNER=$2; export OWNER; shift ;;
+ -n*|--n*)
+ echo=echo ;;
+ -h|--h*)
+ cat <<'@EOF'
+$me -- make directory and any parent directories necessary
+
+$me [--no-create] [--mode=MODE] [--group=GROUP] [--owner=OWNER] DIR...
+$me --help | --version
+
+MODE is a mode for the new directory(s); see chmod(1).
+GROUP and OWNER are the group and owner; see chown(1) and chgrp(1).
+
+The --no-create option means don't do anything, print the commands instead.
+
+If not specified on the command line, the environment variables MODE,
+GROUP and OWNER are used. If there are no environment variables, the
+defaults used by mkdir(1) apply.
+@EOF
+ exit 0
+ ;;
+ -V|--v*)
+ echo $me for PDCMAC $version
+ exit 0 ;;
+ -*)
+ echo >&2 `basename $0`: $1: not understood
+ exit 2 ;;
+ *)
+ p=`dirname $1`
+ test -d $p || $0 $p || exit 1
+ $echo mkdir $1 || exit 1
+ test -n "$OWNER" && { $echo chgrp $OWNER $1 || exit 1; }
+ test -n "$GROUP" && { $echo chgrp $GROUP $1 || exit 1; }
+ test -n "$MODE" && { $echo chmod $MODE $1 || exit 1; }
+ ;;
+ esac
+ shift
+done
diff --git a/macros/plain/contrib/pdcmac/pmkdir.1 b/macros/plain/contrib/pdcmac/pmkdir.1
new file mode 100644
index 0000000000..88ed4e46cf
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pmkdir.1
@@ -0,0 +1,81 @@
+.TH PMKDIR 1 "Time-stamp: <pdc 1995-03-27>" "PDCMAC 1.0" "CONTRIBUTED SOFTWARE"
+.SH NAME
+pmkdir \- make a directory and possibly its parents as well
+.SH SYNOPSIS
+.na
+.B pmkdir
+[
+.B \-\-no\-create
+] [
+.BI \-\-group= groupname
+] [
+.BI \-\-owner= username
+] [
+.BI \-\-mode= mode
+]
+.I dir\|.\|.\|.
+.br
+.BR pmkdir
+.B \-\-help
+|
+.B \-\-version
+.SH DESCRIPTION
+.na
+This documents the
+.SM PDCMAC
+version of
+.IR mkdirhier (1),
+called
+.IR pmkdir .
+.PP
+For each
+.I dir
+this creates a directory with that file name.
+Unlike
+.IR mkdir (1),
+any intermediate directories required will also be
+created.
+.PP
+This command is implemented as a shellscript.
+.SH OPTIONS
+.TP
+.BI \-\-group= "groupname, " "\-g " groupname
+.PD 0v
+.TP
+.BI \-\-owner= "username, " "\-o " username
+.TP
+.BI \-\-mode= "mode, " "\-m " mode
+.PD
+Set the group, owner or mode for the new files (using the same
+conventions as
+.IR chgrp (1),
+.IR chown (1),
+and
+.IR chmod (1)
+respectively).
+Only root can combine changes of mode and group.
+.TP
+.BR \-\-help ", " \-h
+Print a usage message and exit.
+.TP
+.BR \-\-no\-create ", " \-n
+Do not copy files; instead print the commands that would have been performed.
+.TP
+.BR \-\-version ", " \-V
+Print a version identification message and exit.
+.SH ENVIRONMENT
+.TP
+.SM GROUP
+.PD 0v
+.TP
+.SM OWNER
+.TP
+.SM MODE
+.PD
+The values of these variables are used if the corresponding command-line
+options are omitted.
+.SH AUTHOR
+P. Damian Cugley
+.I damian.cugley@comlab.ox.ac.uk
+.SH "SEE ALSO"
+pinstall(1), chgrp(1), chown(1), chmod(1), mkdir(1), mkdirhier(1)
diff --git a/macros/plain/contrib/pdcmac/version.txt b/macros/plain/contrib/pdcmac/version.txt
new file mode 100644
index 0000000000..18b8e2204e
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/version.txt
@@ -0,0 +1,19 @@
+* pdcmac release 1.0, patch level 01 *
+Version ID list generated 1995-04-06
+
+maamac.dtx = 1.5 1995/04/06 13:33:44 pdc Exp
+magrmac.dtx = 1.3 1995/03/29 16:32:24 pdc Exp
+pdcadobe.dtx = 1.3 1995/03/30 16:07:31 pdc Exp
+pdccode.dtx = 1.6 1995/03/30 16:08:32 pdc Exp
+pdcfmt2.dtx = 2.4 1995/04/06 11:55:16 pdc Exp
+pdcfsel.dtx = 3.5 1995/03/28 19:05:54 pdc Exp
+pdcl1maa.dtx = 1.3 1995/03/30 16:09:52 pdc Exp
+pdcmisc.dtx = 1.4 1995/03/30 16:13:08 pdc Exp
+pdcoput5.dtx = 5.3 1995/04/06 11:51:03 pdc Exp
+pdcsty.dtx = 1.2 1995/03/30 16:12:17 pdc Exp
+
+configure = 1.0 Time-stamp: <pdc 1995-03-24>
+dtxtags = 1.1 Time-stamp: <pdc 1995-04-06>
+fig2epsf = 1.0 Time-stamp: <pdc 1995-03-24>
+pinstall = 1.1 Time-stamp: <pdc 1995-03-24>
+pmkdir = 1.0 Time-stamp: <pdc 1995-03-27>