summaryrefslogtreecommitdiff
path: root/Build/source/texk/tetex
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/tetex')
-rw-r--r--Build/source/texk/tetex/ChangeLog3
-rw-r--r--Build/source/texk/tetex/Makefile.in120
-rw-r--r--Build/source/texk/tetex/README.a2ping9
-rw-r--r--Build/source/texk/tetex/README.texdoctk298
-rwxr-xr-xBuild/source/texk/tetex/a2ping2399
-rwxr-xr-xBuild/source/texk/tetex/allcm118
-rw-r--r--Build/source/texk/tetex/allcm.man28
-rw-r--r--Build/source/texk/tetex/allec.man28
-rwxr-xr-xBuild/source/texk/tetex/allneeded46
-rw-r--r--Build/source/texk/tetex/allneeded.man30
-rwxr-xr-xBuild/source/texk/tetex/configure1605
-rw-r--r--Build/source/texk/tetex/configure.in12
-rw-r--r--Build/source/texk/tetex/depend.mak0
-rw-r--r--Build/source/texk/tetex/doc/Makefile28
-rw-r--r--Build/source/texk/tetex/doc/TETEXDOC.bib15
-rw-r--r--Build/source/texk/tetex/doc/TETEXDOC.dvibin0 -> 81240 bytes
-rw-r--r--Build/source/texk/tetex/doc/TETEXDOC.pdfbin0 -> 337756 bytes
-rw-r--r--Build/source/texk/tetex/doc/TETEXDOC.ps4418
-rw-r--r--Build/source/texk/tetex/doc/TETEXDOC.tex1134
-rw-r--r--Build/source/texk/tetex/doc/teTeX-FAQ440
-rwxr-xr-xBuild/source/texk/tetex/dvi2fax41
-rw-r--r--Build/source/texk/tetex/dvi2fax.man22
-rwxr-xr-xBuild/source/texk/tetex/dvired98
-rw-r--r--Build/source/texk/tetex/dvired.man63
-rwxr-xr-xBuild/source/texk/tetex/e2pall89
-rw-r--r--Build/source/texk/tetex/e2pall.man55
-rwxr-xr-xBuild/source/texk/tetex/epstopdf406
-rw-r--r--Build/source/texk/tetex/epstopdf.man54
-rw-r--r--Build/source/texk/tetex/epstopdf.rc32
-rw-r--r--Build/source/texk/tetex/fdf2tex.man31
-rwxr-xr-xBuild/source/texk/tetex/fmtutil883
-rwxr-xr-xBuild/source/texk/tetex/fmtutil-sys29
-rw-r--r--Build/source/texk/tetex/fmtutil.cnf.575
-rw-r--r--Build/source/texk/tetex/fmtutil.man80
-rwxr-xr-xBuild/source/texk/tetex/fontinst16
-rw-r--r--Build/source/texk/tetex/fontinst.bat2
-rw-r--r--Build/source/texk/tetex/fontinst.man45
-rwxr-xr-xBuild/source/texk/tetex/kpsetool118
-rw-r--r--Build/source/texk/tetex/kpsetool.man106
-rwxr-xr-xBuild/source/texk/tetex/kpsewhere63
-rw-r--r--Build/source/texk/tetex/kpsewhere.man50
-rw-r--r--Build/source/texk/tetex/latex.info4309
-rw-r--r--Build/source/texk/tetex/latex2e.texi5260
-rw-r--r--Build/source/texk/tetex/makempy.man60
-rw-r--r--Build/source/texk/tetex/mkocp.man50
-rw-r--r--Build/source/texk/tetex/mkofm.man33
-rw-r--r--Build/source/texk/tetex/ofm2opl.man91
-rw-r--r--Build/source/texk/tetex/opl2ofm.man74
-rw-r--r--Build/source/texk/tetex/otp2ocp.man41
-rw-r--r--Build/source/texk/tetex/outocp.man44
-rw-r--r--Build/source/texk/tetex/ovf2ovp.man87
-rw-r--r--Build/source/texk/tetex/ovp2ovf.man78
-rw-r--r--Build/source/texk/tetex/pdfetex-pl.pool1652
-rwxr-xr-xBuild/source/texk/tetex/ps2frag11
-rw-r--r--Build/source/texk/tetex/ps2frag.man41
-rw-r--r--Build/source/texk/tetex/ps4pdf104
-rwxr-xr-xBuild/source/texk/tetex/pslatex46
-rw-r--r--Build/source/texk/tetex/pslatex.man44
-rwxr-xr-xBuild/source/texk/tetex/rubibtex110
-rw-r--r--Build/source/texk/tetex/rubibtex.man63
-rwxr-xr-xBuild/source/texk/tetex/rumakeindex77
-rw-r--r--Build/source/texk/tetex/rumakeindex.man63
-rwxr-xr-xBuild/source/texk/tetex/tcfmgr385
-rw-r--r--Build/source/texk/tetex/tcfmgr.map10
-rwxr-xr-xBuild/source/texk/tetex/texconfig1412
-rwxr-xr-xBuild/source/texk/tetex/texconfig-dialog495
-rwxr-xr-xBuild/source/texk/tetex/texconfig-sys30
-rw-r--r--Build/source/texk/tetex/texconfig.man27
-rwxr-xr-xBuild/source/texk/tetex/texdoc206
-rw-r--r--Build/source/texk/tetex/texdoc.man94
-rwxr-xr-xBuild/source/texk/tetex/texdoctk1794
-rw-r--r--Build/source/texk/tetex/texdoctk.man217
-rwxr-xr-xBuild/source/texk/tetex/texexec24
-rw-r--r--Build/source/texk/tetex/texexec.man574
-rw-r--r--Build/source/texk/tetex/texfind.man72
-rw-r--r--Build/source/texk/tetex/texfont.man84
-rwxr-xr-xBuild/source/texk/tetex/texlinks290
-rw-r--r--Build/source/texk/tetex/texlinks.man65
-rw-r--r--Build/source/texk/tetex/texmf/texconfig/README23
-rw-r--r--Build/source/texk/tetex/texmf/texconfig/g/genericbin0 -> 981 bytes
-rw-r--r--Build/source/texk/tetex/texmf/texconfig/generic10
-rw-r--r--Build/source/texk/tetex/texmf/texconfig/v/vt100bin0 -> 1230 bytes
-rw-r--r--Build/source/texk/tetex/texmf/texconfig/x/xtermbin0 -> 1368 bytes
-rw-r--r--Build/source/texk/tetex/texshow.man69
-rw-r--r--Build/source/texk/tetex/texutil.man266
-rw-r--r--Build/source/texk/tetex/thumbpdf.man100
-rw-r--r--Build/source/texk/tetex/ttf2afm.man74
-rwxr-xr-xBuild/source/texk/tetex/updmap1383
-rwxr-xr-xBuild/source/texk/tetex/updmap-sys30
-rw-r--r--Build/source/texk/tetex/updmap.cfg.5137
-rw-r--r--Build/source/texk/tetex/updmap.man260
-rw-r--r--Build/source/texk/tetex/updmap.pl1136
-rw-r--r--Build/source/texk/tetex/vpe.pl421
-rw-r--r--Build/source/texk/tetex/win32.mak256
-rw-r--r--Build/source/texk/tetex/win32/epstopdf.c735
-rw-r--r--Build/source/texk/tetex/win32/epstopdf.txt25
96 files changed, 36131 insertions, 0 deletions
diff --git a/Build/source/texk/tetex/ChangeLog b/Build/source/texk/tetex/ChangeLog
new file mode 100644
index 00000000000..6987af677da
--- /dev/null
+++ b/Build/source/texk/tetex/ChangeLog
@@ -0,0 +1,3 @@
+Sat Dec 18 14:19:43 CET 1999 te
+ * added manpages for epstopdf and dvi2fax (contributed by "James
+ R. Van Zandt" <jrv@vanzandt.mv.com>)
diff --git a/Build/source/texk/tetex/Makefile.in b/Build/source/texk/tetex/Makefile.in
new file mode 100644
index 00000000000..79bd5a740c5
--- /dev/null
+++ b/Build/source/texk/tetex/Makefile.in
@@ -0,0 +1,120 @@
+# Makefile for teTeX's extra scripts - te@dbs.uni-hannover.de.
+# Public domain.
+
+kpse_include ../make/paths.mk
+kpse_include ../make/common.mk
+kpse_include ../make/programs.mk
+
+man5dir = $(mandir)/man5
+
+SCRIPTS = \
+ allcm allneeded dvi2fax dvired fmtutil fontinst \
+ kpsetool kpsewhere ps2frag pslatex rubibtex rumakeindex \
+ texconfig texconfig-dialog texdoc texdoctk texexec texlinks updmap \
+ ps4pdf fmtutil-sys texconfig-sys updmap-sys
+
+PDFSCRIPTS = a2ping e2pall epstopdf
+
+PERLWRAPPED = fdf2tan fdf2tex makempy texfind texfont texshow texutil \
+ thumbpdf pdfcrop uniqleaf
+
+manpgs = \
+ allcm allec allneeded dvi2fax dvired e2pall epstopdf fdf2tex fontinst \
+ kpsetool kpsewhere makempy mkocp mkofm ofm2opl opl2ofm otp2ocp outocp \
+ ovf2ovp ovp2ovf ps2frag pslatex rubibtex rumakeindex texconfig texdoc \
+ texdoctk texexec texfind texfont texshow texutil thumbpdf \
+ ttf2afm updmap
+
+INFOFILES= latex.info
+POOLFILES = pdfetex-pl.pool
+all: $(SCRIPTS) $(PDFSCRIPTS)
+default: all
+
+install: install-data install-exec
+check:
+
+# Auxiliary files.
+install-data:: $(INFOFILES)
+ $(SHELL) $(top_srcdir)/../mkinstalldirs $(man1dir) $(man5dir) $(texpooldir) $(texmf)/doc/tetex
+ for p in $(manpgs); do \
+ $(INSTALL_DATA) $(srcdir)/$$p.man $(man1dir)/$$p.$(manext); \
+ done
+ $(INSTALL_DATA) $(srcdir)/fmtutil.man $(man1dir)/fmtutil.1
+ $(INSTALL_DATA) $(srcdir)/texlinks.man $(man1dir)/texlinks.1
+ $(INSTALL_DATA) $(srcdir)/fmtutil.cnf.5 $(man5dir)/fmtutil.cnf.5
+ $(INSTALL_DATA) $(srcdir)/updmap.cfg.5 $(man5dir)/updmap.cfg.5
+ cd $(man1dir); rm -f allec.$(manext) texhash.$(manext) \
+ lambda.$(manext) pdflatex.$(manext) kpsepath.$(manext) \
+ kpsexpand.$(manext) mf-nowin.$(manext) ctangle.$(manext) \
+ cweave.$(manext) odvicopy.$(manext) \
+ odvitype.$(manext) texconfig-sys.$(manext) \
+ updmap-sys.$(manext) mktexfmt.$(manext) fmtutil-sys.$(manext)
+ ln -s allcm.$(manext) $(man1dir)/allec.$(manext)
+ ln -s mktexlsr.$(manext) $(man1dir)/texhash.$(manext)
+ ln -s omega.$(manext) $(man1dir)/lambda.$(manext)
+ ln -s pdfetex.$(manext) $(man1dir)/pdflatex.$(manext)
+ ln -s kpsetool.$(manext) $(man1dir)/kpsepath.$(manext)
+ ln -s kpsetool.$(manext) $(man1dir)/kpsexpand.$(manext)
+ ln -s mf.$(manext) $(man1dir)/mf-nowin.$(manext)
+ ln -s cweb.$(manext) $(man1dir)/ctangle.$(manext)
+ ln -s cweb.$(manext) $(man1dir)/cweave.$(manext)
+ ln -s dvicopy.$(manext) $(man1dir)/odvicopy.$(manext)
+ ln -s dvitype.$(manext) $(man1dir)/odvitype.$(manext)
+ ln -s texconfig.$(manext) $(man1dir)/texconfig-sys.$(manext)
+ ln -s updmap.$(manext) $(man1dir)/updmap-sys.$(manext)
+ ln -s fmtutil.$(manext) $(man1dir)/mktexfmt.$(manext)
+ ln -s fmtutil.$(manext) $(man1dir)/fmtutil-sys.$(manext)
+ test -r ./latex.info || cd $(srcdir) && for i in latex.info*; do \
+ $(INSTALL_DATA) $$i $(infodir)/$$i; done
+ if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
+ install-info --info-dir=$(infodir) $(infodir)/latex.info; \
+ else true; fi
+ for p in $(POOLFILES); do \
+ $(INSTALL_DATA) $(srcdir)/$$p $(texpooldir)/$$p; \
+ done
+ for p in TETEXDOC.pdf TETEXDOC.ps TETEXDOC.dvi teTeX-FAQ; do \
+ $(INSTALL_DATA) $(srcdir)/doc/$$p $(texmf)/doc/tetex; \
+ done
+ $(SHELL) $(top_srcdir)/../mkinstalldirs $(texmf)/texconfig $(texmf)/texconfig/g $(texmf)/texconfig/v $(texmf)/texconfig/x
+ $(INSTALL_DATA) $(srcdir)/texmf/texconfig/g/generic $(texmf)/texconfig/g
+ $(INSTALL_DATA) $(srcdir)/texmf/texconfig/v/vt100 $(texmf)/texconfig/v
+ $(INSTALL_DATA) $(srcdir)/texmf/texconfig/x/xterm $(texmf)/texconfig/x
+ $(INSTALL_DATA) $(srcdir)/texmf/texconfig/README $(texmf)/texconfig
+ $(INSTALL_DATA) $(srcdir)/texmf/texconfig/generic $(texmf)/texconfig
+ $(INSTALL_SCRIPT) $(srcdir)/tcfmgr $(texmf)/texconfig/tcfmgr
+ $(INSTALL_DATA) $(srcdir)/tcfmgr.map $(texmf)/texconfig/tcfmgr.map
+
+install-exec:
+ -$(SHELL) $(srcdir)/../mkinstalldirs $(scriptdir)
+ for s in $(SCRIPTS); do \
+ $(INSTALL_SCRIPT) $(srcdir)/$$s $(scriptdir)/$$s; \
+ done
+ if test -f $(bindir)/pdfetex; then \
+ for s in $(PDFSCRIPTS); do \
+ $(INSTALL_SCRIPT) $(srcdir)/$$s $(scriptdir)/$$s; \
+ done; \
+ cd $(scriptdir); rm -f mptopdf; ln -s texexec mptopdf; \
+ else \
+ true; \
+ fi
+ cd $(scriptdir); rm -f allec kpsepath kpsexpand texhash; \
+ ln -s allcm allec; \
+ ln -s kpsetool kpsepath; \
+ ln -s kpsetool kpsexpand; \
+ ln -s mktexlsr texhash
+ cd $(scriptdir); rm -f $(PERLWRAPPED); \
+ for f in $(PERLWRAPPED); do \
+ ln -s texexec $$f; \
+ done
+ cd $(scriptdir); rm -f mktexfmt; ln -s fmtutil mktexfmt
+
+kpse_include ../make/clean.mk
+
+config.status: $(srcdir)/configure
+ $(SHELL) $(srcdir)/configure --no-create --verbose
+
+Makefile: $(srcdir)/Makefile.in config.status
+ $(SHELL) config.status
+
+depend:
+
diff --git a/Build/source/texk/tetex/README.a2ping b/Build/source/texk/tetex/README.a2ping
new file mode 100644
index 00000000000..48586f1f3bd
--- /dev/null
+++ b/Build/source/texk/tetex/README.a2ping
@@ -0,0 +1,9 @@
+a2ping is a UNIX command line utility written in Perl that converts many
+ raster image and vector graphics formats to EPS or PDF and other page
+ description formats. Accepted input file formats are: PS (PostScript), EPS,
+ PDF, PNG, JPEG, TIFF, PNM, BMP, GIF, LBM, XPM, PCX, TGA. Accepted output
+ formats are: EPS, PCL5, PDF, PDF1, PBM, PGM, PPM, PS, markedEPS, markedPS,
+ PNG, XWD, BMP, TIFF, JPEG, GIF, XPM. a2ping delegates the low-level
+ work to Ghostscript (GS), pdftops and sam2p. a2ping fixes many glitches
+ during the EPS to EPS conversion, so its output is often more compatible
+ and better embeddable than its input.
diff --git a/Build/source/texk/tetex/README.texdoctk b/Build/source/texk/tetex/README.texdoctk
new file mode 100644
index 00000000000..54217cb61ce
--- /dev/null
+++ b/Build/source/texk/tetex/README.texdoctk
@@ -0,0 +1,298 @@
+ texdoctk v.0.5.3
+
+texdoctk is a Perl/Tk-based frontend for easy access of package documentation
+for the TeX typesetting system on Unix platforms. It includes the following
+files:
+
+ texdoctk - the program source
+ texdoctk.dat - the database containing the information about the
+ accessible documentation files for teTeX-texmf
+ texdocrc.defaults - the system-wide default specification for viewer
+ and printer settings
+ texdoctk.1 - manpage
+ README.texdoctk - this file
+The current version is 0.6.0.
+
+REQUIREMENTS
+The program is written in Perl/Tk; it requires Perl 5 and Perl/Tk 8.x. It is
+known to run with Perl 5.004_04 or higher and PerlTk 800.015.
+The database file texdoctk.dat is made for the teTeX distribution.
+Note that the program is *not* a viewer, but an interface to access a document
+with the appropriate viewer. Thus, you need to have appropriate viewers for
+the different formats to actually read the files. Documentations are available
+as .dvi, .ps, .pdf, .html or plain text; some packages are only documented in
+the .sty files. For plain text files (.txt, .sty etc.), texdoctk's own text
+viewer can be used (default). If a document format is not known, texdoctk
+will by default assume that it is plain text and use the text file viewer;
+this behaviour can be switched off in the Settings menu.
+If you want to print the documentations, you will need converters to turn
+non-PS files into PostScript. Here are some suggestions:
+dvi->ps: dvips (is part of teTeX)
+ http://www.radicaleye.com/dvips.html
+pdf->ps: pdf2ps
+ http://www.cs.wisc.edu/~ghost
+ Acrobat Reader
+ http://www.adobe.com
+html->ps: html2ps
+ http://user.it.uu.se/~jan/html2ps.html
+plain text->ps: a2ps
+ http://www-inf.enst.fr/~demaille/a2ps/
+To increase the font size automatically for high-resolution screen, the program
+xwininfo is used; texdoctk will work without as well, though.
+
+INSTALLATION
+The program texdoctk can be copied into any directory where programs are stored
+on your system, e.g. into /usr/local/bin or, probably more adequate, into
+/usr/local/teTeX/bin. It assumes that you have the env command in /usr/bin/
+available to determine the location of the Perl executable; therefore, you may
+need to change the first line of the code if this is not the case for your
+system or if for some reason your Perl executable is not called "perl"; you
+will also have to change the perl call in the sub viewslc as well.
+The database file texdoctk.dat and the configuration file texdocrc.defaults
+must then be put into a subdirectory of the main texmf directory called
+texdoctk. If you want to include information for your local system,
+generate a file texdoctk-local.dat. Make sure to run texhash after
+installation. See the manpage for more info.
+Set the defaults in texdocrc.defaults according to your system; you can
+replace the settings which are specified in the shipped file, but do not
+uncomment variables for items which are not available or applicable for you,
+but just leave the value empty by specifying nothing.
+The individual users can define their own preferences by copying the system
+texdocrc.defaults to ~/.texdocrc and assign new values to the items to be
+changed. They can also establish an additional personal database for packages
+they might have installed in their respective $HOME; this database must be
+called texdoctk-pers.dat and reside in $HOMETEXMF/texdoctk/.
+If you meet the requirements concerning the teTeX distribution, I assume that
+the texdoctk.dat file should work without failures; if you have another
+distribution or if your texmf/doc tree is somehow modified, it may happen that
+a file is not found in spite of the program trying to find it elsewhere. You
+will have to edit the file then, but make sure to keep the right format for
+the entries:
+<package-label>;Short description for listbox (opt. <package-name>);path in doc directory;optional keywords
+(without breaking the line!). If the documentation is included in the .sty file
+instead of a proper documentation file, the optional keywords should start with
+-?- directly after the semicolon, where ? is 0, 1, 2 or 3; these are flags
+which indicate in which part of the .sty the instructions are placed. See the
+database file and/or the manpage for more details if necessary.
+The documentation is grouped into 17 categories; the 18th button of the main
+panel is inactive by default. If you have special documents which do not fit
+into any of the categories, you can create a block with a new name in
+texdoctk-local.dat or texdoctk-pers.dat with the respective entries.
+In the settings window you see a checkbox in the html->ps and text->ps
+converter menus for switching on/off output redirect. This is due to the fact
+that some converters do not write their output into a file but to stdout by
+default, so a redirect is needed, e.g.
+a2ps myfile.txt >myfile.ps
+
+DISCLAIMER
+texdoctk v.0.6.0 (Sep 23, 2004) - GUI for TeX documentation access
+Copyright (C) 2000-2004 Thomas Ruedas
+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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ACKNOWLEDGEMENTS
+Thomas Esser included the program in the teTeX distribution of TeX and Friends.
+He provided me with informations about changes in the texmf tree and made a
+number of very useful suggestions. He also has coordinated and kept track of
+several additions from other contributors, who fixed bugs and added extensions
+e.g. for use under Win32 systems.
+Reinhard Kotucha and Andreas Werner made very valuable comments and suggestions
+to enhance v.0.3.0, especially about the special treatment of Netscape.
+Reinhard Kotucha also made many useful suggestions and provided patches for
+v.0.4.0; unfortunately, I could not implement all these ideas yet.
+Hans Fredrik Nordhaug made some suggestions, e.g. concerning local and
+personal texmf trees, and reported several bugs in different releases; he also
+contributed fixes/patches.
+Adrian Bunk also has reported a bug and contributed a small manpage for the
+program. He made a Debian GNU/Linux package of texdoctk.
+Michael Sanders reminded me to set the permissions right in the tarball.
+As this is my first application written in PerlTk, it happened that I could
+not solve every problem with my book and the other documentation, but had to
+ask for help on comp.lang.perl.tk. Paul R. Andersen and Stephen O. Lidie have
+given helpful replies and examples for me to try out.
+Fabrice Popineau, and possibly others who I don't know, have provided
+portability to Win32 platforms for use with fpTeX. Staszek Wawrykiewicz helped
+making it ready for use with new TeXLive editions.
+Paul Szabo pointed out a potential security risk related to the way names of
+temporary files are generated.
+
+TO DO LIST
+Unfortunately, I didn't have time to implement all suggestions made by the
+aforementioned people; I hope that I can do that at some later time:
+- widget placement in topic toplevels becomes ugly when the toplevel is
+ stretched or shrunk; should be made more elegant
+- raise existing texdoctk window instead of possibly running texdoctk twice;
+ (this seems to be difficult, because it requires interprocess communication
+ which is kind of unsafe and requires the use of perl -T)
+Possible further long-term enhancements:
+- maybe use Williams Catalogue for automatically building database during
+ installation
+- refined printing facility
+
+BUGS
+Netscape error output will be written to stderr even if the quiet mode was set,
+because I didn't manage to start it with the "inline" perl script.
+Widget placement in topic toplevels becomes ugly when the toplevel is stretched
+or shrunk.
+The font in the frame labels of the Settings menu are not forced to the default
+font; this will become visible e.g. at hi-res screens, where the label font is
+not scaled up.
+Please let me know if you find bugs or have suggestions for improvements.
+
+HISTORY/CHANGES
+v.0.6.0 Sep 23, 2004
+ - Unknown document formats will be opened as plain text with the text
+ file viewer by default; the Settings menu was given a new button to
+ toggle this behaviour.
+ - Allow for texmf-dist and texmf-doc trees for compliance with teTeX 3
+ and TeXLive.
+ - Made an attempt to allow for additional personal user's databases to
+ be located in $HOMETEXMF, following a long-standing suggestion of
+ H.F.Nordhaug. Additional local and personal databases do not need
+ to be copies of the system database; instead their contents will be
+ appended to the entries of the default list.
+ - Fixed a bug with the handling of the local texmf tree reported by
+ Sebastian Luque.
+ - Updated this README and the manpage.
+v.0.5.2 May 20, 2004
+ - Changed the name generation of temporary files to something random
+ in order to address a potential security risk pointed out by Paul
+ Szabo.
+ - Replaced -q option for enabling "quiet" behaviour by -v option for
+ enabling "verbose" behaviour; quiet behaviour is now the default and
+ was extended to suppress the popup of Warning windows (popmsg level
+ 1).
+ - Added a possibility to have the Settings menu write the user's
+ ~/.texdocrc (older suggestion by R.Kotucha). NB: It is not intended
+ to write the system-wide texdocrc.defaults, because it does not set
+ $TEXDOCPATH and $LOCALDOCPATH.
+ - Button colours are made configurable through the texdocrc files or
+ the Settings menu. This is intended to fix a problem H.F.Nordhaug
+ reported with users of newer versions of the KDE, where some button
+ colours suddenly where messed up. - Validity of entered colours
+ is checked if X11's showrgb program is available.
+ - DVIPS_OPTS, PDFPS_OPTS and PRINT_OPTS in texdocrc.defaults are now
+ obsolete, but still supported. It seemed more reasonable to treat
+ the contents of DVIPS_CONV, PDFPS_CONV and PRINT_CMD as command lines
+ (which actually would have already been possible all the time). The
+ same is true for the viewer variables.
+ - Command line options can now be grouped (i.e. -av instead of -a -v).
+ - Cursor changes from arrow to watch in some tasks, to indicate a
+ process which takes a bit of time.
+ - fixed some glitches in databases: semicolons at the end of the
+ pdfTeX-related entries; corrected description of ltxtable (hint by
+ Rolf Niepraschk) and changed its position; corrected description of
+ AMSguide (AMS TeX instead of AMS LaTeX) (hint by H.F.Nordhaug)
+ - several additions by other contributors, for instance support for
+ Win32 systems
+v.0.5.1 April 21, 2001
+ - Enhanced right-button search function so that compressed doc files
+ are also found.
+ - Fixed a bug in the documentation finding subroutine reported by H.F.
+ Nordhaug: the compression determination block in sub finddoc was
+ broken.
+ - Improved treatment of entering an empty string in the search:
+ this is now explicitly treated as demand for display of the whole
+ database, instead of search for a null string.
+ - Automatic selection of list item in listbox if it contains only one
+ element; this will frequently happen in search results. In this
+ context, the autoview flag (option -a) has been introduced in the
+ texdocrc.defaults and the Settings menu: if it is chosen, the
+ appropriate viewer will be started automatically in the case of
+ one-item listboxes.
+ - Made <Ctrl-q>, <Ctrl-s>, <Ctrl-t> and <Ctrl-h> definitions active in
+ all widgets; thus, you don't need to type <Ctrl-q> in the main window
+ to quit, for example. Introduced new global key binding for raising
+ the main window (<Ctrl-m>).
+ - Fixed a braindead typo in the texdoc-*.dat files (too dumb to tell).
+ - Some small changes/updates in the Help text; the button and window
+ are now named "Help/About".
+ - Added an emacs perl-mode directive at the end, mostly for my
+ convenience.
+v.0.5.0a April 19, 2001
+ - Fixed bug in texdoc-102.dat reported by H.F.Nordhaug: correct path
+ for multirow is latex/multirow/multirow.sty (instead of
+ latex/misc/multirow.sty, as in texdoc-100.dat)
+v.0.5.0 April 18, 2001
+ - For some packages, the only documentation is included in the .sty
+ file itself. This documentation is now made accessible by extracting
+ the comments/instructions, writing them into a temporary text file
+ and calling the text file viewer on it. Thus 38 additional
+ documentation files are made accessible now.
+ - implementation of a suggestion by Hans Fredrik Nordhaug: contents of
+ the local texmf tree ($TEXMFLOCAL) can be included now. Arbitrary
+ inclusion of additional private texmf trees is not yet possible,
+ though.
+ - Two fixes/improvements in the databases by R.Kotucha were made
+ (concerning epslatex and the MetaPost tutorial)
+ - R.Kotucha suggested the use of the program xwininfo to determine
+ screen resolution and switch to a larger font size at hi-res screens.
+ He provided a patch for this, which I added after a slight
+ adaptation.
+ - auto-determination of Perl's path (stolen from some script by Thomas
+ Esser, IIRC)
+ - If a beta release of teTeX is used, the teTeX-1.0.2 database will be
+ used as a default instead of the 1.0.0 database
+ - introduced new message type with transient windows
+ - fatal error messages if essential config/database files are not found
+ - some syntax cosmetics
+v.0.4.0 June 11, 2000
+ - implementation of several suggestions by Reinhard Kotucha and
+ Andreas Werner:
+ * More than 1 document can now be viewed at one time, because the
+ viewers now run as background processes. They are not killed when
+ texdoctk itself is quit.
+ If Netscape is your browser, HTML documents are now loaded into
+ an existing Netscape window; no new Netscape will be started. This
+ is to be a bit economic with system resources.
+ * The Search button resp. <Ctrl-s> now switches on/off the search
+ entry widget; this is to avoid that multiple entry widgets come up,
+ because that doesn't make much sense.
+ * If no TXT_VIEWER is defined, the environment variable $PAGER will
+ be used, if defined (but see below).
+ - bugs/fixes and suggestions reported by Hans Fredrik Nordhaug:
+ * $j for loop in sub srchstr was too short:
+ $j<$maxind[$i] --> $j<$maxind[$i]+1
+ * misplaced last SRCH in keywords branch of sub srchstr: last SRCH
+ had to be put into inner if block
+ * added support of zip compression format
+ - bug/fix reported by Adrian Bunk:
+ * ambiguous use of redirection flag/sign hor html and text->ps
+ conversion
+ - own text viewer for plain text documentation files; this is now the
+ default in the original texdocrc.defaults
+ - kpsewhich instead of find is used for rescue file search
+ - temporary files generated when printing or possibly decompressing (as
+ in Debian) now get different names to prevent overwriting files which
+ are still in use
+ - main, settings, and help windows made non-resizable
+ - suppressed availability of listbox selection to X selection
+ - document selection toplevel windows will be raised now instead of
+ being opened twice or more times if they are already open
+ - uniform font for all text-containing widgets explicitly set; I had
+ some weird font configuration when running texdoctk under a CDE
+ - environment
+v.0.3.0 March 11, 2000
+ - first full public release
+ - implementation of some suggestions by Thomas Esser:
+ use of kpsewhich, changes in directory and database configuration
+ implemented cd to file directory to ensure rendering of graphics
+ made viewer message output suppression really quiet
+ better layout of help window
+v.0.2 March 7, 2000
+ - first public release (preliminary)
+v.0.1 - private trial version, does not exist anymore
+
+AUTHOR
+Thomas Ruedas
+tr@geol.ku.dk
+http://www.geophysik.uni-frankfurt.de/~ruedas/progs.html
diff --git a/Build/source/texk/tetex/a2ping b/Build/source/texk/tetex/a2ping
new file mode 100755
index 00000000000..82d202b022e
--- /dev/null
+++ b/Build/source/texk/tetex/a2ping
@@ -0,0 +1,2399 @@
+#! /bin/sh
+eval '(exit $?0)' && eval 'PERL_BADLANG=x;export PERL_BADLANG;: \
+;exec perl -x -S -- "$0" ${1+"$@"};#'if 0;
+eval 'setenv PERL_BADLANG x;exec perl -x -S -- "$0" $argv:q;#'.q+
+#!perl -w
+package Htex::a2ping; $0=~/(.*)/s;unshift@INC,'.';do($1);die$@if$@;__END__+if !1;
+# This Perl script was generated by JustLib2 at Wed Apr 23 09:14:13 2003.
+# Don't touch/remove any lines above; http://www.inf.bme.hu/~pts/justlib
+#
+# This program is free software, licensed under the GNU GPL, >=2.0.
+# This software comes with absolutely NO WARRANTY. Use at your own risk!
+#
+package just; BEGIN{$INC{'just.pm'}='just.pm'}
+BEGIN{ $just::VERSION=2 }
+sub end(){1}
+sub main(){}
+
+BEGIN{$ INC{'strict.pm'}='strict.pm'} {
+package strict;
+use just;
+# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
+require 5.002;
+sub bits {
+ (grep{'refs'eq$_}@_ && 2)|
+ (grep{'subs'eq$_}@_ && 0x200)|
+ (grep{'vars'eq$_}@_ && 0x400)|
+ ($@ || 0x602)
+}
+sub import { shift; $^H |= bits @_ }
+sub unimport { shift; $^H &= ~ bits @_ }
+just::end}
+
+BEGIN{$ INC{'integer.pm'}='integer.pm'} {
+package integer;
+use just;
+# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
+sub import { $^H |= 1 }
+sub unimport { $^H &= ~1 }
+just::end}
+
+BEGIN{$ INC{'Pts/string.pm'}='Pts/string.pm'} {
+package Pts::string;
+# by pts@fazekas.hu at Sat Dec 21 21:32:18 CET 2002
+use just;
+use integer;
+use strict;
+
+#** @param $_[0] a string
+#** @param $_[1] index of first bit to return. Bit 128 of byte 0 is index 0.
+#** @param $_[2] number of bits to return (<=32)
+#** @return an integer (negative on overflow), bit at $_[1] is its MSB
+sub get_bits_msb($$$) {
+ # assume: use integer;
+ my $loop=$_[1];
+ my $count=$_[2];
+ my $ret=0;
+ ($ret+=$ret+(1&(vec($_[0],$loop>>3,8)>>(7-($loop&7)))), $loop++) while $count--!=0;
+ $ret
+}
+
+#** @param $_[0] a string
+#** @return value if $_[0] represents a floating point numeric constant
+#** in the C language (without the LU etc. modifiers) -- or undef. Returns
+#** undef for integer constants
+sub c_floatval($) {
+ my $S=$_[0];
+ no integer; # very important; has local scope
+ return 0.0+$S if $S=~/\A[+-]?(?:[0-9]*\.[0-9]+|[0-9]+\.])(?:[eE][+-]?[0-9]+)?\Z(?!\n)/;
+ undef
+}
+
+#** @param $_[0] a string
+#** @return value if $_[0] represents a floating point or integer numeric
+#** constant in the C language (without the LU etc. modifiers) -- or undef
+sub c_numval($) {
+ my $S=$_[0];
+ no integer; # very important; has local scope
+ return 0+$S if $S=~/\A[+-]?(?:[0-9]*\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+\.?)\Z(?!\n)/;
+ undef
+}
+
+#** @param $_[0] a string
+#** @return the integer value of $_[0] in C -- or undef
+sub c_intval($) {
+ my $S=$_[0];
+ my $neg=1;
+ $neg=-1 if $S=~s@\A([+-])@@ and '-'eq$1;
+ return $neg*hex $1 if $S=~/\A0[xX]([0-9a-fA-F]+)\Z(?!\n)/;
+ return $neg*oct $1 if $S=~/\A0([0-7]+)\Z(?!\n)/;
+ return $neg*$1 if $S=~/\A([0-9]+)\Z(?!\n)/;
+ undef
+}
+
+sub import {
+ no strict 'refs';
+ my $package = (caller())[0];
+ shift; # my package
+ for my $p (@_ ? @_ : qw{get_bits_msb c_floatval c_numval c_intval}) { *{$package."::$p"}=\&{$p} }
+}
+
+just::end}
+
+BEGIN{$ INC{'Htex/dimen.pm'}='Htex/dimen.pm'} {
+package Htex::dimen;
+# by pts@fazekas.hu at Sat Dec 21 21:26:15 CET 2002
+use just;
+use integer;
+use strict;
+use Pts::string qw(c_numval);
+
+my %bp_mul;
+{ no integer; %bp_mul=(
+ 'bp'=>1, # 1 bp = 1 bp (big point)
+ 'in'=>72, # 1 in = 72 bp (inch)
+ 'pt'=>72/72.27, # 1 pt = 72/72.27 bp (point)
+ 'pc'=>12*72/72.27, # 1 pc = 12*72/72.27 bp (pica)
+ 'dd'=>1238/1157*72/72.27, # 1 dd = 1238/1157*72/72.27 bp (didot point) [about 1.06601110141206 bp]
+ 'cc'=>12*1238/1157*72/72.27, # 1 cc = 12*1238/1157*72/72.27 bp (cicero)
+ 'sp'=>72/72.27/65536, # 1 sp = 72/72.27/65536 bp (scaled point)
+ 'cm'=>72/2.54, # 1 cm = 72/2.54 bp (centimeter)
+ 'mm'=>7.2/2.54, # 1 mm = 7.2/2.54 bp (millimeter)
+) }
+
+#** @param $_[0] a (real or integer) number, optionally postfixed by a
+#** TeX dimension specifier (default=bp)
+#** @return the number in bp, or undef
+sub dimen2bp($) {
+ no integer;
+ my $S=$_[0];
+ my $mul;
+ $mul=$bp_mul{$1} if $S=~s/\s*([a-z][a-z0-9]+)\Z(?!\n)// and exists $bp_mul{$1};
+ my $val=c_numval($S);
+ $val*=$mul if defined $val and defined $mul;
+ $val
+}
+
+just::end}
+
+BEGIN{$ INC{'Htex/papers.pm'}='Htex/papers.pm'} {
+package Htex::papers;
+# contains paper size information
+# by pts@fazekas.hu at Sun Dec 22 00:30:58 CET 2002
+use just;
+use integer;
+use strict;
+use Htex::dimen;
+
+my @papers=(
+#
+# paper.txt
+# by pts@fazekas.hu at Tue Jan 16 18:21:59 CET 2001
+# by pts@fazekas.hu at Tue Jan 16 19:13:16 CET 2001
+#
+# Examined: dvips, gs, libpaperg
+#
+# all units are measured in Big Points (bp)
+# 72 bp == 1 in
+# 2.54 cm == 1 in
+#
+# papername width height
+qw{Comm10 297 684},
+qw{Monarch 279 540},
+qw{halfexecutive 378 522},
+
+qw{Legal 612 1008},
+qw{Statement 396 612},
+qw{Tabloid 792 1224},
+qw{Ledger 1224 792},
+qw{Folio 612 936},
+qw{Quarto 610 780},
+qw{7x9 504 648},
+qw{9x11 648 792},
+qw{9x12 648 864},
+qw{10x13 720 936},
+qw{10x14 720 1008},
+qw{Executive 540 720},
+
+qw{ISOB0 2835 4008},
+qw{ISOB1 2004 2835},
+qw{ISOB2 1417 2004},
+qw{ISOB3 1001 1417},
+qw{ISOB4 709 1001},
+qw{ISOB5 499 709},
+qw{ISOB6 354 499},
+qw{ISOB7 249 354},
+qw{ISOB8 176 249},
+qw{ISOB9 125 176},
+qw{ISOB10 88 125},
+qw{jisb0 2916 4128},
+qw{jisb1 2064 2916},
+qw{jisb2 1458 2064},
+qw{jisb3 1032 1458},
+qw{jisb4 729 1032},
+qw{jisb5 516 729},
+qw{jisb6 363 516},
+
+qw{C7 230 323},
+qw{DL 312 624},
+
+qw{a3 842 1190}, # defined by Adobe
+qw{a4 595 842}, # defined by Adobe; must precede a4small
+
+# a4small should be a4 with an ImagingBBox of [25 25 570 817].},
+qw{a4small 595 842},
+qw{letter 612 792}, # must precede lettersmall
+# lettersmall should be letter with an ImagingBBox of [25 25 587 767].
+qw{lettersmall 612 792},
+# note should be letter (or some other size) with the ImagingBBox
+# shrunk by 25 units on all 4 sides.
+qw{note 612 792},
+qw{letterLand 792 612},
+# End of Adobe-defined page sizes
+
+qw{a0 2380 3368},
+qw{a1 1684 2380},
+qw{a2 1190 1684},
+qw{a5 421 595},
+qw{a6 297 421},
+qw{a7 210 297},
+qw{a8 148 210},
+qw{a9 105 148},
+qw{a10 74 105},
+qw{b0 2836 4008},
+qw{b1 2004 2836},
+qw{b2 1418 2004},
+qw{b3 1002 1418},
+qw{b4 709 1002},
+qw{b5 501 709}, # defined by Adobe
+
+qw{a0Land 3368 2380},
+qw{a1Land 2380 1684},
+qw{a2Land 1684 1190},
+qw{a3Land 1190 842},
+qw{a4Land 842 595},
+qw{a5Land 595 421},
+qw{a6Land 421 297},
+qw{a7Land 297 210},
+qw{a8Land 210 148},
+qw{a9Land 148 105},
+qw{a10Land 105 74},
+qw{b0Land 4008 2836},
+qw{b1Land 2836 2004},
+qw{b2Land 2004 1418},
+qw{b3Land 1418 1002},
+qw{b4Land 1002 709},
+qw{b5Land 709 501},
+
+qw{c0 2600 3677},
+qw{c1 1837 2600},
+qw{c2 1298 1837},
+qw{c3 918 1298},
+qw{c4 649 918},
+qw{c5 459 649},
+qw{c6 323 459},
+
+# vvv U.S. CAD standard paper sizes
+qw{archE 2592 3456},
+qw{archD 1728 2592},
+qw{archC 1296 1728},
+qw{archB 864 1296},
+qw{archA 648 864},
+
+qw{flsa 612 936}, # U.S. foolscap
+qw{flse 612 936}, # European foolscap
+qw{halfletter 396 612},
+qw{csheet 1224 1584}, # ANSI C 17x22
+qw{dsheet 1584 2448}, # ANSI D 22x34
+qw{esheet 2448 3168}, # ANSI E 34x44
+qw{17x22 1224 1584}, # ANSI C 17x22
+qw{22x34 1584 2448}, # ANSI D 22x34
+qw{34x44 2448 3168}, # ANSI E 34x44
+);
+
+#** Converts a numeric paper size to a well-defined paper name. Tolerance is
+#** 8.5bp
+#** @param $_[0] width, in bp
+#** @param $_[1] height, in bp
+#** @return () or ("papername", ret.paper.width.bp, ret.paper.height.bp)
+sub valid_bp($$;$$) {
+ no integer;
+ my ($W1,$H1)=(defined$_[2]?$_[2]:0,defined$_[3]?$_[3]:0);
+ my ($WW,$HH)=(Htex::dimen::dimen2bp($_[0])-$W1, Htex::dimen::dimen2bp($_[1])-$H1);
+ # Dat: 1mm == 720/254bp; 3mm =~ 8.5bp
+ no integer;
+ for (my $I=0; $I<@papers; $I+=3) {
+ return @papers[$I,$I+1,$I+2] if abs($papers[$I+1]-$WW)<=8.5 and abs($papers[$I+2]-$HH)<=8.5;
+ }
+ ()
+}
+
+#** @param $_[0] (width width_unit "," height height_unit)
+#** @return () or ("papername", width.bp, height.bp)
+sub valid($) { # valid_papersize
+ my $S=lc$_[0];
+ $S=~/^\s*(\d+(\.\d+)?)\s*([a-z][a-z0-9]+)\s*,\s*(\d+(\.\d+)?)\s*([a-z][a-z0-9]+)\s*\Z(?!\n)/ ?
+ valid_bp("$1$3","$4$6") : ();
+}
+
+#** @param $_[0] (width width_unit? ("," || "x") height height_unit?) || (papername)
+#** @return () or ("papername"?, width.bp, height.bp)
+sub any($) {
+ my $S=lc$_[0];
+ if ($S=~/\A[a-z]\w+\Z(?!\n)/) {
+ for (my $I=0; $I<@papers; $I+=3) {
+ return @papers[$I,$I+1,$I+2] if lc($papers[$I]) eq $S;
+ }
+ }
+ return () if $S!~/^\s*(\d+(\.\d+)?)\s*((?:[a-z][a-z0-9]+)?)\s*[,xX]\s*(\d+(\.\d+)?)\s*((?:[a-z][a-z0-9]+)?)\s*\Z(?!\n)/;
+ # ^^^ Dat: [xX] is xdvi-style, [,] is dvips-style spec
+ my($w,$h)=($1.$3, $4.$6);
+ my @L=valid_bp($w,$h);
+ @L ? @L : (undef,Htex::dimen::dimen2bp($w),Htex::dimen::dimen2bp($h))
+}
+
+just::end}
+
+BEGIN{$ INC{'Htex/a2ping.pm'}='Htex/a2ping.pm'}
+
+package Htex::a2ping;
+# a2ping.pl -- convert between PS, EPS and PDF and other page description formats
+# by pts@fazekas.hu et al. at Wed Apr 16 14:54:13 CEST 2003
+# a2ping.pa created at Sun Apr 20 22:25:47 2003
+#
+# This file contains perldoc(1) documentation. Search for `=head1'.
+# See revision history at end of this file.
+#
+
+use just +1; # a JustLib application
+use strict;
+use integer;
+use Htex::papers;
+BEGIN { $Htex::a2ping::VERSION="2.77p" }
+
+# Imp: gs(704?!) sometimes finds too small bbox, see Univers.eps
+# Imp: respect bbox in METAPOST %! (not EPS), don't use Compute-GS T-
+# Imp: -sPDFPassword=...
+# Imp: `a2ping.pl -v jf.eps pdf1: t.pdf' PDF1: must be forced to have --below
+# Imp: option to `clip' an EPS to the specified bbox -- does file size decrease?
+# Imp: fix bug a2ping -v ~/a2ping_bug.ps a2ping_bug.pdf; running type1fix on
+# all fonts with dff.pl has fixed the problem
+# Imp: post-process PNG etc. written by sam2p
+# Imp: better help and docs
+# Imp: respect full /MediaBox for a PDF -> EPS|PDF1 conversion
+# Imp: --ll x,y command line option
+# Imp: Htex/a2ping.pa -v ../image/tuzv.ps t.pdf (1st and second page different)
+# Imp: also save+restore /pdfmark ??
+# Imp: fix /MediaBox an all PDF pages if !$ll_zero
+# Imp: PDF -> PDF1 conversion with gs -sDEVICE=pdfwrite
+# Imp: direct PDF to PCL5 conversion with gs
+# Imp: remove %%BeginDefaults | %%PageMedia: plain | %%EndDefaults (pdftops(1))
+# Imp: fix completely bogus margin and papersize handling:
+# ../justlib2/Htex/a2ping.pa --duplex=force-short -v -p:a3 -r force-unknown tuzv.ps t.pdf
+# Imp: careful distinction between PDF and PDF1
+# Imp: psnup support (-1 -2 -3 -4 ...)
+# Imp: idempotent PS -> PS, add other header
+# Imp: use convert(1) etc.
+# Imp: possibly disable compute-pipe
+# Imp: $header_remove_p ??
+# Imp: --leftright option instead of --below
+# Imp: pdfboxes.pl, get offset from gs
+# Imp: detect error messages from GS, abort...
+# Imp: use all pdftops + gs + acroread
+# Imp: possibly accept /PageSize from %%DocumentMedia
+# Imp: /DocumentMedia seems to screw up sub-pt placement in gv(1)
+#
+# Dat: example: a2ping.pl --extra=-c:ijg:50 -r86 nn1.eps nn1.jpg
+# Dat: calling ``showpage'' is not required for -sDEVICE=pdfwrite with gs 6.50,
+# but -sDEVICE=pgmraw depends on it
+# Dat: the functionality of pdfboxes.pl cannot be provided here with a shorter
+# implementation, because gs always outputs the content stream of the PDF
+# objects first
+# Dat: pdftops -eps writes negative bbox correctly
+# Dat: markedEPS: include pdfmarks
+# Dat: gs 7.04 gdevdjet.[ch], gdevdljm.[ch]
+# Dat: to be undeffed in setpagedevice: /.MarginsHWResolution /PageSize
+# /ImagingBBox /HWResolution /HWSize /.MediaSize (we undef all)
+
+### program identification
+my $program = "a2ping.pl";
+my $filedate="2004-04-28"; # my $filedate="2001/03/05";
+my $copyright = "Written by <pts\@fazekas.hu> from April 2003.
+This is free software, GNU GPL >=2.0. There is NO WARRANTY.
+(epstopdf 2.7 Copyright 1998-2001 by Sebastian Rahtz et al.)\n";
+# "Contains modifications by pts\@fazekas.hu";
+my $title = "$program $Htex::a2ping::VERSION, $filedate -- $copyright\n";
+
+### ghostscript command name
+my($quote,$GS)=("'","gs");
+($quote,$GS) = ("\"","gswin32c") if $^O eq 'MSWin32' or $^O =~ /cygwin/i;
+
+# --- help functions
+
+sub fnq($) {
+ my $fn=$_[0];
+ return $fn if $fn!~y@-a-zA-Z0-9/.+_@@c;
+ $fn=~s@'@\\'@g if $quote eq "'";
+ $quote.$fn.$quote
+}
+
+sub debug {
+ print STDERR "* @_\n" if $::opt_verbose;
+}
+sub warning {
+ print STDERR "$0: warning: @_\n";
+}
+sub error {
+ my $s=$title; $title="";
+ die "$s$0: @_\n";
+}
+
+# unlink temporary files?
+my $tmpunlink_p=1;
+my $tmpsig=1;
+my %tmpfiles;
+my $tmpdir=exists $ENV{TMPDIR} ? $ENV{TMPDIR} : '/tmp';
+$tmpdir="." if (!-d $tmpdir or !-w $tmpdir) and -w '.';
+sub cleanup() {
+ unlink keys %tmpfiles;
+ exit 125;
+}
+END { unlink keys %tmpfiles; }
+sub temp_unlink($) {
+ if (exists $tmpfiles{$_[0]}) {
+ unlink $_[0] if $tmpunlink_p;
+ delete $tmpfiles{$_[0]};
+ }
+}
+sub temp_prefix() {
+ my $prog0=$program;
+ $prog0=~y@a-zA-Z0-9@_@c;
+ if ($tmpsig) {
+ $tmpsig=0;
+ $SIG{INT}=$SIG{TERM}=$SIG{HUP}=$SIG{QUIT}=\&cleanup;
+ }
+ return "$tmpdir/$prog0-$$-".int(rand(1<<30))."-"; # 30: nonnegative
+}
+
+#** @return arg rounded down to int
+sub floor($) {
+ # Dat: Perl int() rounds towards zero
+ no integer;
+ $_[0] < 0 ? -int(-$_[0]) : int($_[0])
+}
+
+#** @return arg rounded up to int
+sub ceil($) {
+ no integer;
+ $_[0]==int($_[0]) ? $_[0] : 1+ ($_[0] < 0 ? -int(-$_[0]) : int($_[0]))
+}
+
+
+just::main;
+
+# ---
+
+sub FL_PAGE1_STOP(){1} # is file format single-page?
+sub FL_SET_PAGESIZE_OK(){2}
+sub FL_PDFMARK(){4}
+sub FL_NEED_SHOWPAGE(){8} # does gs -sDEVICE=... need showpage?
+sub FL_SAMPLED(){16} # is it a sampled (raster, pixel-based)
+sub FL_ANY_ORIGIN_OK(){32} # (llx,lly) may be anything, not just (0,0)
+sub FL_HAS_ANTIALIAS(){64}
+sub FL_VIA_SAM2P(){128} # sam2p(1) can convert PNM to such a format
+sub FL_OK_SAM2P(){256}
+
+my %fmts=( # Name=>[flags]
+ 'EPS'=>[FL_PAGE1_STOP],
+ 'markedEPS'=>[FL_PAGE1_STOP|FL_PDFMARK], # Imp: should we have FL_SET_PAGESIZE_OK?
+ 'PDF1'=>[FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_PDFMARK],
+ 'PDF'=>[FL_SET_PAGESIZE_OK|FL_PDFMARK|FL_ANY_ORIGIN_OK],
+ 'PS'=>[FL_SET_PAGESIZE_OK|FL_ANY_ORIGIN_OK],
+ 'markedPS'=>[FL_SET_PAGESIZE_OK|FL_PDFMARK|FL_ANY_ORIGIN_OK],
+ 'PCL5'=>[FL_SET_PAGESIZE_OK|FL_ANY_ORIGIN_OK],
+ # ^^^ Dat: no FL_HAS_ANTIALIAS -- would need lj5gray, which is loonger
+ # ^^^ Dat: no FL_SAMPLED, because cannot set resolution
+ 'PBM'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_OK_SAM2P], # Dat FL_HAS_ANTIALIAS produces obscure image
+ 'PGM'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_OK_SAM2P],
+ 'PPM'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_OK_SAM2P],
+ # Now come the FileFormats supported via sam2p
+ 'PNG'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
+ 'XWD'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
+ 'BMP'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
+ 'TIFF'=>[FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
+ 'JPEG'=>[FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P],
+ 'GIF'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P], # Imp: disable antialias for few colors?
+ 'XPM'=> [FL_PAGE1_STOP|FL_SET_PAGESIZE_OK|FL_NEED_SHOWPAGE|FL_SAMPLED|FL_HAS_ANTIALIAS|FL_VIA_SAM2P], # Imp: disable antialias for few colors?
+);
+my %fmt_aliases=qw(MARKEDPS markedPS MARKEDEPS markedEPS PCL PCL5
+ UNMARKEDPS PS UNMARKEDEPS EPS EPDF PDF1 MEPS markedEPS);
+# Dat: .ps will be unmarked PS
+# Imp: sometimes markedEPS for .eps?
+my %fmt_exts=qw(eps EPS epsi EPS epsf EPS eps2 EPS ps PS ps2 PS
+ pcl PCL5 pcl5 PCL5 pbm PBM pgm PGM pnm PPM ppm PPM pdf PDF png PNG
+ xwd XWD bmp BMP rle BMP tif TIFF tiff TIFF jpg JPEG jpe JPEG
+ jpg JPEG gif GIF xpm XPM);
+
+### usage
+# vvv deprecated options:
+# --outfile=<file>: write result to <file>
+# --debug: verbose debug informations (default: $bool[$::opt_verbose])
+# --(no)filter: d. read standard input (default: false)
+# --(no)gs d. run Ghostscript to create PDF
+my $usage=
+"${title}Usage: $program [options] <inputfile> [[<outformat>:] <outputfile>]
+Run with --doc to read documentation as a UNIX man(1) page.
+Options: --help print this help message
+--(no)compress use compression (def: best)
+--(no)hires scan HiResBoundingBox (def: yes)
+--(no)exact scan ExactBoundingBox (def: no)
+--(no)verbose verbose debug informations (def: no)
+--(no)below allow below+left_from baseline (def: no)
+--(no)tmpunlink unlink temporary files (def: yes)
+--(no)antialias render shades at outlines (def: scale3no) (=scale3yes =no =yes)
+--gs-cmd= path to Ghostscript (def: gs or gswin32c)
+--gs-ccmd= path to Ghostscript, 4 bbox calc (def: gs or gswin32c)
+--gsextra= extra arg to gs
+--extra= extra arg to external prg (i.e pdftops)
+--bboxfrom= adsc|compute-gs|pagesize (def: guess)
+--papersize= unchanged|force-unknown|600bpx5cm (def: default) (bp)
+--threshold= min color for 1 in 8->1 bit conv (def: 128)
+Possible input formats: PS EPS PDF JPEG GIF TIFF PNG PNM PCX BMP LBM XPM TGA
+Possible output formats: @{[sort keys %fmts]}
+Examples for producing 'test.pdf':
+ * $program test.eps
+ * produce postscript | $program -v - test.pdf
+Example: look for HiResBoundingBox and produce corrected PostScript:
+ * $program -d --nogs -hires test.ps>testcorr.ps
+";
+sub errorUsage {
+ die "$usage\U!\E!\U!\E Error: @_\n";
+}
+
+# --- @ARGV parsing
+
+### default option values
+my @extra=();
+my @gsextra=();
+#** Output file format (string)
+my $FileFormat=undef;
+$::opt_help=0;
+$::opt_verbose=0;
+my %vals_compression=map{$_=>1} qw(best none flate zip);
+$::opt_compression='best';
+#** Prefer %%HiResBoundingBox over %%BoundingBox, but emit both
+$::opt_hires=1;
+$::opt_exact=0;
+# $::opt_filter=0; # deprecated
+# $::opt_outputfile=undef; # deprecated
+$::opt_below=undef;
+$::opt_antialias=undef; # render shades at path outlines for better readability
+$::opt_gs_cmd=undef;
+$::opt_extra="";
+$::opt_duplex="default";
+$::opt_threshold=128;
+my %vals_antialias=map{$_=>1} qw(no yes scale3yes scale3no);
+my %vals_duplex=map{$_=>1} qw(force-unknown force-simplex force-long
+ force-short unchanged default-simplex default-long default-short);
+# ^^^ short: duplex printing, will bind short edge of paper (ideal for
+# duplexing psnup -2)
+#** Dat: force-unknown is forced by /setpagedevice/load def
+$::opt_resolution="default"; # unchanged force-unknown 600x600 (DPI)
+$::opt_papersize="default"; # unchanged force-unknown 600bpx600cm (bp)
+#** --bboxfrom=adsc sets %%BoundingBox from the 1st page if no ADSC comment in non-EPS ps
+my %vals_bboxfrom=map{$_=>1} qw(adsc compute-gs guess pagesize);
+$::opt_bboxfrom="guess";
+my $InputFilename;
+my $OutputFilename;
+
+sub is_page1_stop() { 0!=($fmts{$FileFormat}[0]&FL_PAGE1_STOP) }
+sub is_set_pagesize_ok() { 0!=($fmts{$FileFormat}[0]&FL_SET_PAGESIZE_OK) }
+sub is_pdfmark() { 0!=($fmts{$FileFormat}[0]&FL_PDFMARK) }
+sub is_need_showpage() { 0!=($fmts{$FileFormat}[0]&FL_NEED_SHOWPAGE) }
+sub is_sampled() { 0!=($fmts{$FileFormat}[0]&FL_SAMPLED) }
+sub is_any_origin_ok() { 0!=($fmts{$FileFormat}[0]&FL_ANY_ORIGIN_OK) }
+sub is_has_antialias() { 0!=($fmts{$FileFormat}[0]&FL_HAS_ANTIALIAS) }
+sub is_via_sam2p() { 0!=($fmts{$FileFormat}[0]&FL_VIA_SAM2P) }
+sub is_ok_sam2p() { 0!=($fmts{$FileFormat}[0]&FL_OK_SAM2P) }
+
+# ---
+
+sub show_doc() {
+ # run `pod2man __FILE__ | man -l -', same as `perldoc __FILE', but perldoc(1)
+ # is missing from some Debian sites that have pod2man.
+ my @path=split/:+/,$ENV{PATH};
+ my $pod2man_='pod2man --center="a2ping: advanced PS, PDF, EPS converter" ';
+ $pod2man_=q~perl -ne 'if($a>1){print}elsif($a&&/^=head1/){$a=2}else{$a=!/\S/}' ~
+ if !grep { -x "$_/pod2man" } @path;
+ my $pager='';
+ for my $pageri ((defined $ENV{PAGER} ? $ENV{PAGER}: ''),'less','most','more','view - ','vim -R - ','vi - ','joe -rdonly -asis -','pager') {
+ next if $pageri!~/^(\S+)/;
+ my $pagert="/$1";
+ if (grep { -x $_.$pagert } @path) { $pager=$pageri; last }
+ }
+ $pager=q~perl -pe 's@\010_@@g;s@.\010@@gs' | ~.$pager
+ if substr($pager,-2)eq' ' or $pager=~/\A(?:view|vim?|joe|emacs|mcedit|nano|nano-tiny|ae)\b/;
+ # ^^^ Dat: these cannot handle underline/bold backspace directly
+ $ENV{PAGER}=$pager;
+ my $man='';
+ if (substr($pod2man_,0,5)ne 'perl ') {
+ $man=' | man -l -'; # calls $PAGER
+ if ((!grep { -x "$_/man" } @path) or qx(man -l 2>&1)=~/\binvalid option\b/) {
+ $man=' | nroff -Tlatin1 -mandoc'; # Linux, no need for eqn(1), tbl(1) etc.
+ if (!grep { -x "$_/nroff" } @path) { $man='' } # just write it
+ }
+ }
+ my $cmd=$pod2man_.fnq(__FILE__).$man;
+ if ($cmd!~/[|] man -l -\Z(?!\n)/) {
+ if (!length $pager) {
+ die unless open PIPE, "$cmd|";
+ print while sysread PIPE, $_, 4096;
+ die "$0: error showing doc\n" unless close PIPE;
+ exit 0;
+ }
+ $cmd.=' | $PAGER';
+ }
+ ##die $cmd;
+ $ENV{LESS}="" if !defined $ENV{LESS};
+ $ENV{LESS}="$ENV{LESS}R"; # show ANSI escapes
+ die "$0: exec ($cmd) failed: $!\n" if !exec $cmd;
+}
+
+die $usage if !@ARGV or (1==@ARGV and $ARGV[0] eq '-h' or $ARGV[0] eq '--help'
+ or $ARGV[0] eq 'help');
+show_doc() if 1==@ARGV and $ARGV[0] eq '--doc' or $ARGV[0] eq 'doc';
+
+{ my($I,$optname,$optval);
+ my %optmap=qw(o outputfile outfile outputfile r resolution h help
+ f filter d verbose v verbose debug verbose p papersize
+ c compression compress compression h hires b below e exact x extra);
+ #** Options that have a mandatory argument
+ my %argopt1=qw(outputfile 1 duplex 1 resolution 1 extra 1 compression 1 gs-cmd 1
+ gs-ccmd 1
+ papersize 1 paper 1 bboxfrom 1 antialias 1 gsextra 1 threshold 1); # 1 arg
+ my %argnone=qw(help 1 verbose 1 noverbose 1 nocompress 1 noantialias 1); # 0 arg
+ my %argmaybe=qw(); # 0 or 1 arg
+ my %argbool=qw(hires 1 exact 1 below 1 gs 1 filter 1 tmpunlink 1
+ approx 1); # boolean arg
+ # Dat: --noverbose --nocompress
+ my $opts_ok=1;
+ for ($I=0; $I<@ARGV; $I++) {
+ if ($ARGV[$I]eq '--') {
+ $OutputFilename=$InputFilename if defined $InputFilename and
+ !defined $OutputFilename and $opts_ok;
+ $opts_ok=0;
+ } elsif ($opts_ok and $ARGV[$I]=~/\A--+(\w[\w-]*)(?:[:=](.*))?\Z(?!\n)/s) {
+ $optname=lc$1; $optval=$2;
+ } elsif ($opts_ok and $ARGV[$I]=~/\A-(\w)(.*)\Z(?!\n)/s) {
+ $optname=lc$1;
+ if (length($2)==0) { $optval=undef }
+ elsif (index(":=",substr($2,0,1))>=0) { $optval=substr($2,1) }
+ else { $optval=$2 }
+ } elsif ($opts_ok and !defined $FileFormat and defined $InputFilename and $ARGV[$I]=~s@\A(\w+):@@) {
+ my $fmtag=uc$1;
+ # errorUsage "invalid FileFormat tag: $fmtag" if $fmtag!~s@:\Z(?!\n)@@;
+ if (exists $fmts{$fmtag}) { $FileFormat=$fmtag }
+ elsif (exists $fmt_aliases{$fmtag}) { $FileFormat=$fmt_aliases{$fmtag} }
+ else { errorUsage "Unknown FileFormat tag: $fmtag" }
+ if (0!=length($ARGV[$I])) {
+ errorUsage "Multiple output filenames" if defined $OutputFilename;
+ $OutputFilename=$ARGV[$I];
+ }
+ next
+ } elsif (!defined $InputFilename) { $InputFilename=$ARGV[$I]; next }
+ elsif (!defined $OutputFilename) { $OutputFilename=$ARGV[$I]; next }
+ else { errorUsage "Too many arguments (multiple input/output files?)" }
+ $optname=$optmap{$optname} if exists $optmap{$optname};
+ if (exists $argopt1{$optname} and !defined $optval) {
+ errorUsage "Argument expected for --$optname" if $I==@ARGV;
+ $optval=$ARGV[++$I];
+ }
+ # Dat: $optname and $optval are now correct
+ errorUsage "No argument expected for --$optname=$optval" if exists $argnone{$optname} and defined $optval;
+ if (substr($optname,0,2)eq"no" and exists $argbool{substr($optname,2)}) {
+ $optname=substr($optname,2);
+ errorUsage "No argument expected for no --no$optname=$optval" if defined $optval;
+ $optval="no";
+ }
+ if (exists $argbool{$optname}) {
+ # same as sam2p GenBuffer::parseBool, understands:
+ # on true yes ja igen oui enable 1 true vrai? right sure allowed
+ # off false no nein nem non disable 0 false faux? wrong nope disallowed
+ $optval=(!defined($optval) or 0==length($optval)
+ or $optval=~/\Ao[nu]/i or $optval!~/\A[fndw0]/i) ? 1 : 0;
+ } elsif (!exists $argopt1{$optname} and !exists $argnone{$optname} and !exists $argmaybe{$optname}) {
+ errorUsage "Unknown option --$optname, see --help"
+ }
+ # vvv application-specific
+ if ($optname eq "help") { die $usage }
+ elsif ($optname eq "help") { show_doc() }
+ elsif ($optname eq "noverbose") { $::opt_verbose=0 }
+ elsif ($optname eq "nocompress") { $::opt_compression='none' }
+ elsif ($optname eq "verbose") { $::opt_verbose++ }
+ elsif ($optname eq "hires") { $::opt_hires =$optval }
+ elsif ($optname eq "exact") { $::opt_exact =$optval }
+ elsif ($optname eq "below") { $::opt_below =$optval }
+ elsif ($optname eq "approx") { $::opt_approx=$optval }
+ elsif ($optname eq "threshold") { $::opt_threshold=$optval+0 } # Imp: accept only int 0..256
+ elsif ($optname eq "filter") {
+ # errorUsage "Multiple input filenames" if defined $InputFilename;
+ # $InputFilename='-';
+ errorUsage "Multiple output filenames" if defined $OutputFilename;
+ $OutputFilename='-';
+ } elsif ($optname eq "tmpunlink") { $tmpunlink_p=$optval }
+ elsif ($optname eq "gs") { $FileFormat=$optval ? 'PDF1' : 'markedEPS' }
+ elsif ($optname eq "compression") {
+ errorUsage "--$optname expects one of: @{[keys%vals_compression]}" if !exists $vals_compression{$optval};
+ $::opt_compression=$optval;
+ $::opt_compression='zip' if $::opt_compression eq 'flate';
+ } elsif ($optname eq "outputfile") {
+ errorUsage "Multiple output filenames" if defined $OutputFilename;
+ $OutputFilename=$optval;
+ } elsif ($optname eq "gs-cmd") {
+ errorUsage "Multiple --gs-cmd" if defined $::opt_gs_cmd;
+ $::opt_gs_cmd=$optval;
+ } elsif ($optname eq "gs-ccmd") {
+ errorUsage "Multiple --gs-ccmd" if defined $::opt_gs_ccmd;
+ $::opt_gs_ccmd=$optval;
+ } elsif ($optname eq "extra") { push @extra, $optval }
+ elsif ($optname eq "gsextra") { push @gsextra, $optval }
+ elsif ($optname eq "duplex") {
+ errorUsage "--$optname expects one of: @{[keys%vals_duplex]}" if !exists $vals_duplex{$optval};
+ $::opt_duplex=$optval
+ } elsif ($optname eq "bboxfrom") {
+ errorUsage "--$optname expects one of: @{[keys%vals_bboxfrom]}" if !exists $vals_bboxfrom{$optval};
+ $::opt_bboxfrom=$optval
+ } elsif ($optname eq "noantialias") {
+ $::opt_antialias='no'
+ } elsif ($optname eq "antialias") {
+ errorUsage "--$optname expects one of: @{[keys%vals_antialias]}" if !exists $vals_antialias{$optval};
+ $::opt_antialias=$optval
+ } elsif ($optname eq "resolution") {
+ if ($optval eq "unchanged" or $optval eq "force-unknown") { }
+ elsif ($optval=~/^(\d+(?:[.]\d+)?)\Z(?!\n)/) { $optval="$1x$1" }
+ elsif ($optval=~/^(\d+(?:[.]\d+)?[x,]\d+(?:[.]\d+)?)\Z(?!\n)/) { }
+ else { errorUsage "--Resultion expects unchanged | force-unknown | DPI | XDPIxYDPI" }
+ $::opt_resolution=$optval
+ } elsif ($optname eq "papersize" or $optname eq"paper") {
+ if ($optval eq "unchanged" or $optval eq "force-unknown") { $::opt_papersize=$optval }
+ else {
+ my @L=Htex::papers::any($optval);
+ errorUsage "invalid or unknown for --papersize" if !@L;
+ $::opt_papersize="$L[1],$L[2]" # width, height
+ }
+ } else { die } # unreachable
+ } # NEXT opt
+ errorUsage "Too many arguments (multiple input/output files?)" if $I!=@ARGV;
+ # splice @ARGV, 0, $I;
+}
+
+$GS=$::opt_gs_cmd if defined $::opt_gs_cmd;
+my $CGS=$GS;
+$CGS=$::opt_gs_ccmd if defined $::opt_gs_ccmd;
+$GS.= " -dSAFER"; # -dWRITESYSTEMDICT
+$CGS.=" -dSAFER"; # -dWRITESYSTEMDICT
+
+### get input and output filename
+if (!defined $InputFilename and defined $OutputFilename) { # --filter
+ $InputFilename='-';
+} elsif (!defined $InputFilename) {
+ errorUsage "Input filename missing"
+} elsif (!defined $OutputFilename) {
+ $FileFormat='PDF1' if !defined $FileFormat;
+ if ($FileFormat eq 'PDF1' or $FileFormat eq 'PDF') {
+ if (($OutputFilename=$InputFilename) ne '-') {
+ $OutputFilename =~ s/\.[^\.]*$//;
+ $OutputFilename .= ".pdf";
+ }
+ } else {
+ $OutputFilename = '-'; # standard output
+ }
+}
+print STDERR $title if $::opt_verbose;
+$title="";
+
+# Dat: no more @ARGV
+errorUsage "please specify <outformat>" if
+ !defined $FileFormat and ($OutputFilename!~m@[.]([^/.]+)\Z(?!\n)@ or
+ !defined($FileFormat=$fmt_exts{lc$1}));
+$::opt_below=is_any_origin_ok() if !defined $::opt_below;
+error "--below=1 invalid for FileFormat $FileFormat" if $::opt_below and
+ !is_any_origin_ok() and $FileFormat ne 'PDF1' and $FileFormat ne 'EPS' and
+ $FileFormat ne 'markedEPS';
+error "--below=0 invalid for FileFormat $FileFormat" if !$::opt_below and
+ is_any_origin_ok();
+$::opt_antialias=is_has_antialias() ?
+ (is_sampled() ? 'scale3no' : 'yes') : 'no' if
+ !defined $::opt_antialias;
+
+if ($FileFormat eq 'PBM' and ($::opt_antialias eq 'scale3yes' or
+ $::opt_antialias eq 'scale3no')) {
+} elsif ($::opt_antialias ne 'no' and !is_has_antialias()) {
+ $::opt_antialias='no';
+ warning "--AntiAlias ignored for FileFormat $FileFormat"
+}
+if ($::opt_antialias eq 'scale3no' or $::opt_antialias eq 'scale3yes') {
+ $::opt_resolution="72,72" if $::opt_resolution eq 'unchanged' or $::opt_resolution eq 'force-unknown' or $::opt_resolution eq 'default';
+ # ^^^ GS raster default
+ my @L=split/[,x]/,$::opt_resolution;
+ @L=(@L,@L); # Imp: ..
+ $L[0]*=3; $L[1]*=3;
+ $::opt_resolution="$L[0],$L[0]";
+}
+
+### option compress
+my $GSOPTS=join(" ",map{fnq$_}@gsextra);
+# $GSOPTS.=" -r72 -sPAPERSIZE=a4 "; # default -- will be overridden by `setpagedevice'
+# ^^^ Dat: default does only harm; user should specify on command line
+
+### option BoundingBox types
+#**** pts ****
+# scan all of them and find the best
+{ my $BBprint = "%%BoundingBox:";
+ $BBprint = "%%HiResBoundingBox:" if $::opt_hires;
+ $BBprint = "%%ExactBoundingBox:" if $::opt_exact;
+ debug "Strongest BoundingBox comment:", $BBprint;
+}
+my $BBregex='%%(Hi[Rr]es|Exact|)BoundingBox:';
+
+if (!is_set_pagesize_ok()) {
+ if ($::opt_papersize ne'default' and $::opt_papersize ne'force-unknown') {
+ error "Cannot set --PaperSize for FileFormat $FileFormat"
+ } else { $::opt_papersize='force-unknown' }
+} elsif ($::opt_papersize eq'default') { $::opt_papersize='unchanged' }
+
+if ($::opt_resolution eq'default') { $::opt_resolution='force-unknown' }
+error "Cannot set --Resolution for FileFormat $FileFormat (must be markedPS or sampled)"
+ if $FileFormat ne 'markedPS' and !is_sampled()
+ and $::opt_resolution ne'force-unknown';
+error "Bad --Resolution=$::opt_resolution" if $::opt_resolution ne 'unchanged'
+ and $::opt_resolution ne 'force-unknown' and $::opt_resolution!~/\A(\d+)+[,x](\d+)\Z(?!\n)/;
+
+if ($FileFormat ne 'markedPS' and $FileFormat ne 'PCL5') {
+ if ($::opt_duplex ne'default' and $::opt_duplex ne'force-unknown') {
+ error "Cannot set --Duplex for FileFormat $FileFormat (must be markedPS or PCL5)"
+ } else { $::opt_duplex='force-unknown' }
+} elsif ($::opt_duplex eq'default') { $::opt_duplex='force-unknown' }
+
+debug "Doing --PaperSize $::opt_papersize" if $::opt_papersize ne 'force-unknown';
+debug "Doing --Duplex $::opt_duplex" if $::opt_duplex ne 'force-unknown';
+debug "Doing --Resolution $::opt_resolution" if $::opt_resolution ne 'force-unknown';
+debug "Doing --AntiAlias=$::opt_antialias" if $::opt_antialias ne 'no';
+
+### option outfile
+if ($OutputFilename eq '-') {
+ debug "Output file: standard output";
+} else {
+ debug "Output filename: $OutputFilename";
+ #error "$OutputFilename: won't overwrite input file with itself"
+ # if $OutputFilename eq $InputFilename;
+}
+
+### option gs
+debug "Output FileFormat: $FileFormat";
+$::opt_compression='zip' if $::opt_compression ne 'none';
+if ($FileFormat eq 'PDF' or $FileFormat eq 'PDF1') {
+ debug "Ghostscript ps2pdf command: $GS $GSOPTS";
+ debug "Compression: $::opt_compression";
+} elsif ($FileFormat eq 'PCL5') {
+ debug "Ghostscript ps2ljet command: $GS $GSOPTS";
+} elsif (is_sampled()) {
+ debug "Ghostscript ps2sampled command: $GS $GSOPTS";
+}
+
+#**** pts ****
+sub read_error() { error "read $InputFilename: $!" }
+my $bytes_left=-1; # -1==unlimited
+my $already_read=0;
+sub dem1($){defined$_[0]?$_[0]:-1}
+#** @param $_[0] number of bytes to read, or undef to read a line
+#** @return the string read
+sub readIN(;$) {
+ my $S;
+ ## return "" if $bytes_left==0;
+ ## print STDERR "READ($_[0])\n";
+ if (defined $_[0]) { read_error if 0>dem1 read IN, $S, $_[0] }
+ else {
+ $!=0; # clean up error code
+ $S=<IN>;
+ read_error if !defined($S) and $!;
+ $S="" if !defined $S; # EOF
+ }
+ if ($bytes_left<0) { # unlimited
+ } elsif (length($S)>=$bytes_left) {
+ $S=substr($S, 0, $bytes_left);
+ $bytes_left=0;
+ } else { $bytes_left-=length($S) }
+ $already_read+=length($S);
+ $S
+}
+
+sub open_OUT() {
+ error "Cannot write outfile '$OutputFilename'" unless
+ open(OUT, $OutputFilename eq '-' ? ">-" : "> $OutputFilename")
+}
+
+#** @param $_[0] temp file extension (e.g ".img")
+#** @param $_[1] preprint
+#** @param $_[2] bool: force pipe even if seekable?
+sub fix_pipe_in($$$) {
+ my $c="";
+ if ($_[2] or (length($c=readIN(1))!=0 and !seek IN,-1,1)) { # we cannot seek back
+ # Dat: ^^^ test seekability instead of $InputFilename eq '-'
+ my($ext,$preprint)=@_;
+ my $tifn;
+ # $ext=$1 if $InputFilename=~/[.](\w+)\Z(?!\n)/; # never true
+ $tifn=temp_prefix()."M$ext";
+ error "Cannot open temp input: $tifn" unless open TI, "> $tifn";
+ $tmpfiles{$tifn}=1;
+ die unless print TI $preprint, $c;
+ print TI or die while length($_=readIN 4096);
+ die unless close TI;
+ $InputFilename=$tifn;
+ debug "Temp input file: $InputFilename";
+ die unless open IN, "< $tifn";
+ die unless seek IN, length($preprint), 0;
+ $already_read=length($preprint);
+ $bytes_left=-1; # unlimited, since readIN() has copied only part
+ # $bytes_left++ if $bytes_left>=0; # ungetc($c)
+ # temp_unlink $tifn; # do it later (at END{})
+ } else {
+ $already_read--; $bytes_left++ if $bytes_left>=0; # BUGFIX at Fri May 14 00:21:18 CEST 2004
+ }
+}
+
+my $temp_out_fn;
+
+#** Does overwrite $temp_out_fn. Fine.
+sub fix_force_out($) {
+ my($ext)=$_[0];
+ # $ext=$1 if $InputFilename=~/[.](\w+)\Z(?!\n)/; # never true
+ $temp_out_fn=temp_prefix()."O$ext";
+ # error "Cannot save output: $!" unless open SAVEOUT, ">&OUT"; # always STDOUT; maybe not open yet
+ error "Cannot open temp output: $temp_out_fn" unless open OUT, "> $temp_out_fn";
+ $tmpfiles{$temp_out_fn}=1;
+ # $OutputFilename=$temp_out_fn;
+ debug "Temp output file: $temp_out_fn";
+ # temp_unlink $temp_out_fn; # do it later (at END{})
+ return $temp_out_fn;
+}
+
+#** @param $_[0] temp file extension (e.g ".img")
+#** @return new output filename
+sub fix_pipe_out($) {
+ if (!defined $temp_out_fn) {
+ return $OutputFilename if $OutputFilename ne '-';
+ return fix_force_out($_[0]);
+ }
+ $temp_out_fn
+}
+sub fix_close_out() {
+ # error "closing filter out: $? $!" unless close OUT;
+ if (defined $temp_out_fn) {
+ my $buf;
+ die unless open FCO, "< $temp_out_fn";
+ print STDOUT $buf while sysread FCO, $buf, 4096;
+ die unless close FCO;
+ temp_unlink $temp_out_fn;
+ undef $temp_out_fn;
+ }
+}
+
+sub do_system {
+ my($progname)=splice@_,0,1;
+ debug "Running: $progname @extra @_";
+ error "prog $progname failed: $? $!"
+ if 0!=system $progname, @extra, @_; # Dat: non-zero exit() or not found
+}
+
+sub do_exec {
+ my($progname)=splice@_,0,1;
+ if (scalar keys %tmpfiles) {
+ # Cannot exec() right now, because we have to unlink some temporary files
+ # later.
+ do_system $progname, @_;
+ } else {
+ debug "Execing: $progname @extra @_";
+ 1 if exec $progname, @extra, @_;
+ # ^^^ Dat: $OutputFilename eq '-' should be OK
+ error "exec failed: $!";
+ }
+ exit(0);
+}
+
+#sub shq($) {
+# my $S=$_[0];
+# return $S if $S!~y@A-Za-z0-9_,:./-@@c and length($S)>0;
+# $S=~s@'@'\\''@g;
+# return "'$S'"
+#}
+
+### open input file
+if ($InputFilename eq '-') {
+ debug "Input file: standard input";
+ open(IN, "<&STDIN") or error "cannot open standard input";
+} else {
+ # -f $InputFilename or error "input file missing: $InputFilename"; # Imp: named pipe?
+ open(IN,"< $InputFilename") or error "cannot open input file: $InputFilename";
+ debug "Input filename:", $InputFilename;
+ if ($InputFilename eq $OutputFilename) {
+ # error "same input and output file: $InputFilename";
+ my $ext=$InputFilename=~m@([.][^./]+)\Z(?!\n)@ ? $1 : "";
+ binmode IN; $bytes_left=-1;
+ fix_pipe_in($ext, "", 1); # Dat: defined later
+ }
+}
+binmode IN;
+
+### scan first line, check for DOS EPSF (and remove DOS headers)
+my $header;
+{ SCAN_AGAIN:
+ my $S;
+ $_=$header="";
+ read_error if 0>read IN, $S, 4;
+ error "$InputFilename: empty file" if 0==length($S);
+ $already_read+=length($S);
+ ##print tell(IN)." bar=$already_read\n";
+ my $iff="?"; # Input File Format
+ # vvv be permissive, since we have only 4 chars
+ if ($S eq "\211PNG") { $iff="PNG" }
+ elsif ($S=~/\A(\377+\330)\377/) { $iff="JPEG" }
+ elsif ($S eq "MM\000\052" or $S eq "II\052\000") { $iff="TIFF" }
+ elsif ($S=~m@\AP([1-6])[\s#]@) { $iff="PNM" }
+ elsif ($S=~/\ABM/) { $iff="BMP" }
+ elsif ($S eq "GIF8") { $iff="GIF" }
+ elsif ($S eq "FORM") { $iff="LBM" }
+ elsif ($S eq "/* X" or $S eq "/*XP") { $iff="XPM" }
+ elsif ($S=~/\A\12[\0-\005]\001[\001-\10]/) { $iff="PCX" }
+ elsif ($S=~/\A[\36-\77](?:\001[\001\11]|\0[\002\12\003\13])\0/) { $iff="TGA" }
+ elsif ($S eq "\305\320\323\306") { $iff="DOS-EPSF" }
+ elsif ($S eq "\033%-1") { $iff="UEL" }
+ elsif (substr($S,0,1)eq'%') { $iff="P" } # PS, EPS or PDF
+
+ # PNG JPEG TIFF PNM BMP GIF LBM XPM PCX TGA
+ if ($iff eq "DOS-EPSF") { # DOS EPSF header
+ read_error if 30-4>read IN, $S, 30-4, 4;
+ my ($eheader,$ps_ofs,$ps_len,$wmf_ofs,$wmf_len,$tif_ofs,$tif_len,$checksum)=
+ unpack"A4VVVVVVv", $S;
+ $already_read+=30-4;
+ error "$InputFilename: bad DOS EPS" if $eheader ne "\305\320\323\306" or $ps_ofs<30;
+ my($ps_end, $wmf_end, $tif_end)=($ps_ofs+$ps_len, $wmf_ofs+$wmf_len, $tif_ofs+$tif_len);
+ $ps_ofs-=30;
+ if (!seek IN, $ps_ofs, 1) {
+ while ($ps_ofs>4096) { $ps_ofs-=4096; readIN 4096 }
+ read_in $ps_ofs if $ps_ofs>0;
+ }
+ $bytes_left=($ps_end>$wmf_end and $ps_end>$tif_end) ? -1 : $ps_len;
+ $S=readIN(1);
+ } elsif ($iff eq "UEL") { # HP PJL UEL, untested
+ $S.=readIN;
+ $S=substr($S,1);
+ error "$InputFilename: bad HP PJL UEL header: ".(~chomp($S)&&$S)
+ if $S!~/\A%-12345X\@PJL ENTER LANGUAGE\s*=\s*POSTSCRIPT\s*\r?$/i;
+ 1 while length($S=readIN())!=0 and substr($S,0,4)ne'%!PS';
+ die "$InputFilename: premature HP PJL UEL header" if length($S)==0;
+ } elsif ($iff eq "P") {
+ # no-op yet, see later
+ } elsif ($iff eq "?") {
+ error "unknown input image format: $InputFilename";
+ } else { # some vector graphics format
+ # Imp: why isn't sam2p(1) PNG -> PNG idempotent?
+ my $sfmt=$FileFormat eq'markedEPS' || $FileFormat eq 'EPS' ? 'EPS'
+ : $FileFormat eq'markedPS' || $FileFormat eq 'PS' ? 'PS' # Dat: emits no /PageSize
+ : $FileFormat eq'PDF1' || $FileFormat eq 'PDF' ? 'PDF'
+ : undef;
+ if (defined $sfmt) {}
+ elsif (is_via_sam2p() or is_ok_sam2p()) {$sfmt=$FileFormat; $::opt_approx=1}
+ else { error "sam2p doesn't support our FileFormat $FileFormat" }
+ fix_pipe_in ".img", $S, 0;
+ if ($::opt_approx) {
+ do_exec('sam2p', ("$sfmt:", '--', $InputFilename, $OutputFilename));
+ } else {
+ warning "post-processing of sam2p PDF output increases file size" if $sfmt eq 'PDF';
+ $sfmt='EPS' if $sfmt eq 'PDF'; # Imp: PDF1<->PDF
+ close IN;
+ my $tpfn=temp_prefix()."Psimg";
+ error "Cannot open temp pipe dest: $tpfn" unless open TP, "> $tpfn";
+ $tmpfiles{$tpfn}=1;
+ die unless close TP;
+ do_system('sam2p', ("$sfmt:", '--', $InputFilename, $tpfn));
+ error "Cannot open temp pipe src: $tpfn" unless open IN, "< $tpfn";
+ $already_read=0; $bytes_left=-1;
+ $InputFilename=$tpfn; # '-'
+ goto SCAN_AGAIN
+ }
+ }
+
+ # now deal with PS, EPS and PDF
+ if (substr($S,0,1) eq '%') {
+ $S.=readIN;
+ if (substr($S,0,4)eq'%PDF') {
+ # error "$InputFilename: won't read a PDF file";
+ if ($FileFormat eq 'PDF') { # convert PDF to PDF
+ # !! PDF->PS->PDF
+ open_OUT();
+ $_=$S;
+ debug "Doing a bit-by-bit copy";
+ do {
+ error "input error: $!" unless print OUT;
+ } while (length($_=readIN 4096));
+ close OUT; close IN;
+ exit 0;
+ } elsif ($FileFormat eq 'PDF1') { # Dat: remove extra pages by running pdftops and gs -sDEVICE=pdfwrite
+ # !! Imp: possibly Run MetaPost output through full dvips (texc.pro) when prologues:=0
+ # !! Imp: add full dvips %* font comment when prologues:=1 (design sizes missing :-()
+ # Dat: no way to use $::opt_approx, because it doesn't remove extra pages
+ fix_pipe_in ".pdf", $S, 0; # in case of stdin
+ # Imp: option to open pdftops pipe instead of temp file
+ # Dat: we rather use a temp file here for safety and early error detection
+ do_input_pdftops: # come from EPS: and markedEPS:
+ close IN; # after fix_pipe_in()
+ my $tpfn=temp_prefix()."Peps";
+ error "Cannot open temp pipe dest: $tpfn" unless open TP, "> $tpfn";
+ $tmpfiles{$tpfn}=1;
+ die unless close TP;
+ do_system qw(pdftops -f 1 -l 1 -eps -- ), $InputFilename, $tpfn;
+ error "Cannot open temp pipe src: $tpfn" unless open IN, "< $tpfn";
+ $already_read=0; $bytes_left=-1;
+ $InputFilename=$tpfn; # '-'
+ goto SCAN_AGAIN
+ } elsif ($FileFormat eq 'EPS' or $FileFormat eq 'markedEPS') { # convert PDF to EPS
+ # Dat: limitation: markedEPS and EPS are treated the same
+ # vvv Dat: pdftops(1) is part of the xpdf package
+ # vvv Dat: pdftops(1) can emit to stdout
+ fix_pipe_in ".pdf", $S, 0;
+ if ($::opt_approx) {
+ do_exec qw(pdftops -f 1 -l 1 -eps --), $InputFilename, $OutputFilename;
+ } else { goto do_input_pdftops }
+ } elsif ($FileFormat eq 'PS' or $FileFormat eq 'markedPS') {
+ # Dat: limitation: markedEPS and EPS are treated the same
+ fix_pipe_in ".pdf", $S, 0;
+ close IN;
+ # vvv we must query the BoundingBox first
+ my $cmd="pdftops -f 1 -l 1 -eps ".fnq($InputFilename)." -";
+ debug "pdftops bbox pipe: $cmd";
+ error "pipe: $!" unless open PIPE, "$cmd |";
+ my $line;
+ error "expected PS document" if !defined($line=<PIPE>) or $line!~/^%!PS-Adobe-\d.*EPSF-\d/;
+ my @L; # $papersize_x, $papersize_y
+ while (<PIPE>) {
+ last if /^%%EndComments/ or !/^%/;
+ @L=($1,$2) if /^%%(?:Hires|Exact)BoundingBox:\s*\S+\s*\S+\s*(\S+)\s*(\S+)\s*$/i;
+ @L=($1,$2) if /^%%BoundingBox:\s*\S+\s*\S+\s*(\S+)\s*(\S+)\s*$/i and !@L;
+ # ^^^ Dat: HiRes has priority
+ # ^^^ Dat: ignore llx and lly coordinates
+ }
+ 1 while read PIPE, $line, 4096;
+ error "closing PIPE: $?" unless close PIPE;
+ error "BoundingBox not found in pdftops output" if !@L;
+ debug "Got PaperSize: @L";
+ $L[0]=ceil $L[0]; $L[1]=ceil $L[1]; # Dat: pdftops expects integer papersize :-( )
+ if ($::opt_approx) {
+ do_exec 'pdftops', '-paperw', $L[0], '-paperh', $L[1], $InputFilename, $OutputFilename;
+ } else {
+ my $tpfn=temp_prefix()."Pps";
+ error "Cannot open temp pipe dest: $tpfn" unless open TP, "> $tpfn";
+ $tmpfiles{$tpfn}=1;
+ die unless close TP;
+ do_system 'pdftops', '-paperw', $L[0], '-paperh', $L[1], $InputFilename, $tpfn;
+ error "Cannot open temp pipe src: $tpfn" unless open IN, "< $tpfn";
+ $already_read=0; $bytes_left=-1;
+ $InputFilename=$tpfn; # '-'
+ goto SCAN_AGAIN
+ }
+ }
+ error "cannot create from PDF: FileFormat $FileFormat";
+ OK:
+ }
+ error "$InputFilename: EPS DSC must be %!PS-Adobe" if substr($S,0,4)ne'%!PS';
+ # ^^^ Dat: mpost outputs "%!PS\n"
+ } else {
+ warning "$InputFilename: no PS ADSC header, BoundingBox not found\n"
+ }
+ $header=$S;
+}
+
+# Dat: Now we are converting from PS|EPS to EPS|markedEPS|PDF|PCL5|PGM
+# So we're converting from PS|EPS with Ghostscript
+
+### variables and pattern for BoundingBox search
+my $bbxpatt = '[0-9eE\.\-]';
+my $BBValues = "\\s*($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)"; # protect backslashes: "\\" gets '\'
+
+my $ll_zero=0; # ($llx,$lly)==(0,0) in the output file
+my $need_grestore=0; # 0 v 1
+#** Applies %%*BoundingBox, %%EndComments, special setpagedevice, gsave..translate
+#** @param $_[0] llx, may be undef to signify that bbox is undetected
+#** @param $_[1] lly
+#** @param $_[2] urx
+#** @param $_[3] ury
+#** @param $_[4] after_correct PostScript code (resolution, page size)
+#** @return PostScript code to be printed after the header
+sub CorrectBoundingBox($$$$$$$) {
+ no integer;
+ my $bbx="";
+ my $pagedev_mark="";
+ my $translate="";
+ my ($llx, $lly, $urx, $ury, $after_correct, $fontsdefs, $is_restored) = @_;
+ if (defined $llx) {
+ my ($xoffset, $yoffset) = (0, 0);
+ my $old_bbox="$llx $lly $urx $ury"; # debug "Old BoundingBox: $old_bbox";
+ # my ($width, $height) = ($urx - $llx, $ury - $lly);
+ ($xoffset, $yoffset) = (-$llx, -$lly);
+ # $::opt_below=0 if $lly>=0; # always move to (0,0)
+ # my ($urxh,$uryh)=($urx,$ury);
+ # my $no_translate=$::opt_below;
+ #die $no_translate;
+ ($llx,$lly,$urx,$ury)=(0,0,$urx-$llx,$ury-$lly) if !$::opt_below;
+ $urx=1 if $urx<=0; # Dat: GS dislikes empty image; fix also negative image
+ $ury=1 if $ury<=0;
+ my($px,$py)=($urx,$ury);
+ ($px,$py)=($1+0,$2+0) if $after_correct=~m@/PageSize\s*\[(\S+)\s+(\S+)+\]@;
+ my @paper=Htex::papers::any("$px,$py");
+ $paper[0]=defined $paper[0] ? "%%DocumentPaperSizes: $paper[0]\n" : "";
+ $bbx.="%%BoundingBox: ".floor($llx)." ".floor($lly)." ".
+ ceil($urx)." ". ceil($ury)."\n";
+ $bbx.="%%HiResBoundingBox: $llx $lly $urx $ury\n".
+ "%%ExactBoundingBox: $llx $lly $urx $ury\n" if floor($llx)!=$llx
+ or floor($lly)!=$lly or ceil($urx)!=$urx or ceil($ury)!=$ury;
+ $bbx.="%%DocumentMedia: plain $px $py 0 () ()\n". # like pdftops(1)
+ "$paper[0]";
+ # ^^^ Imp: can DocumentMedia be non-integer? As of us, it can.
+ # vvv we output a second /MediaBox here, and we'll remove the first one
+ # (written by GS) later
+ # vvv Dat: old version of Ghostscript insisted on an integer /CropBox (??).
+ # we do not force it now
+ $pagedev_mark.="mark /CropBox [$llx $lly $urx $ury] /PAGE pdfmark\n" if is_pdfmark();
+ # die "$xoffset $yoffset $::opt_below";
+ if ($xoffset==0 and $yoffset==0) { #**** pts ****
+ $need_grestore=0;
+ $ll_zero=1; # Dat: we do not insert extra /MediaBox here, gs -sDEVICE=pdfwrite will do
+ } elsif ($::opt_below) {
+ # Do not translate (set (0,0) to the origin) with --below or multi-page
+ # file formats.
+ $need_grestore=0;
+ $ll_zero=0; # fix /MediaBox because it become non-(0,0)-based
+ $pagedev_mark.="mark /MediaBox [$llx $lly $urx $ury] /PAGE pdfmark\n" if
+ is_pdfmark(); # $FileFormat eq 'markedEPS' or $FileFormat eq 'markedPS';
+ # Dat: markedPS and contains pdfmark!
+ } else {
+ # debug "Offset:", $xoffset, $yoffset; # no new information, see -$llx, -$lly
+ $xoffset=0 if $xoffset==0; # get rid of `-0'
+ $yoffset=0 if $yoffset==0; # get rid of `-0'
+ if ($is_restored) { $translate="" } # save..restore does gsave..grestore
+ else { $translate="gsave "; $need_grestore=1 }
+ $ll_zero=0;
+ # vvv the /MediaBox is different from what gs dumps
+ # $pagedev_mark=~s@/PageSize\s*\[[^\]]*]@/PageSize [$urx $ury]@; # BUGFIX at Tue Apr 22 10:08:17 CEST 2003
+ $pagedev_mark.="mark /MediaBox [$llx $lly $urx $ury] /PAGE pdfmark\n" if is_pdfmark();
+ $translate.="$xoffset $yoffset translate\n"
+ }
+ my $new_bbox="$llx $lly $urx $ury";
+ if ($old_bbox eq $new_bbox) {
+ debug "Final BoundingBox: $new_bbox";
+ } else {
+ debug "Old BoundingBox: $old_bbox";
+ debug "Final corrected BoundingBox: $new_bbox";
+ }
+ $pagedev_mark="/pdfmark where{pop}{/pdfmark/cleartomark load def}ifelse\n$pagedev_mark"
+ if length($pagedev_mark)!=0;
+ }
+ # vvv Imp: `<<' -> `dict'
+ # Dat: it is inherently impossible to tell GS that it shouldn't
+ # recompress the images already compressed in the EPS file, but keep
+ # them in their original, compressed form. So we rather instruct GS to
+ # recompress
+ my $markpagedevices="";
+ if (is_pdfmark()) {
+ $markpagedevices="
+/CompatibilityLevel 1.2 %PDF-1.2
+/EmbedAllFonts true
+/Optimize true % ignored by gs-6.70
+/AutoRotatePages /None
+/UseFlateCompression ".($::opt_compression ne 'none'?"true":"false")."
+/AutoPositionEPSFiles false
+/AutoFilterGrayImages false
+/ConvertImagesToIndexed false
+/DownsampleMonoImages false
+/DownsampleGrayImages false
+/DownsampleColorImages false
+/AutoFilterColorImages false
+/EncodeMonoImages true
+/EncodeGrayImages true
+/EncodeColorImages true
+/AntiAliasMonoImages false
+/AntiAliasGrayImages false
+/AntiAliasColorImages false\n";
+ $markpagedevices=(length($markpagedevices)!=0 ? "<< $markpagedevices >> setpagedevice\n" : "");
+ $markpagedevices.="1 dict dup /ImagingBBox null put setpagedevice\n";
+ $markpagedevices.="1 dict dup /Policies 1 dict dup /PageSize 3 put put setpagedevice\n"; # ripped from pdftops(1)
+ }
+ my $setpagesize="";
+ # die defined $urx;
+ # die is_set_pagesize_ok();
+ # die $after_correct;
+ if (defined $urx and is_set_pagesize_ok()
+ and $::opt_papersize ne'force-unknown'
+ and $after_correct!~m@/PageSize\s*\[@) { # Imp: m@/Pagesize ugly
+ # Dat: true for FileFormat PGM
+ # Dat: emit /PageSize even for PDF1
+ # Dat: Ghostscript 6.70 rounds /PageSize down, but we need up when creating /MediaBox for PDF
+ $setpagesize="2 dict dup /PageSize [".ceil($urx)." ".ceil($ury)."] put setpagedevice\n";
+ # ^^^ Dat: PLRM.pdf doesn't forbid a non-integer /PageSize
+ }
+ my $bsetup=is_page1_stop()?"":"%%BeginSetup\n%%EndSetup\n";
+ # ^^^ Dat: CUPS inserts its setpagedevice calls for /Duplex and /PageSize
+ # etc. just after the %%BeginSetup line (or, if missing, puts it in
+ # front of the first %%Page). We'd like this execution order: CUPS,
+ # ours, PStoPS (or psnup). (When we come after CUPS, we'll have a
+ # chance to override its settings.) So we emit a fake
+ # %%BeginSetup..%%EndSetup pair just before our code doing
+ # `setpagedevice'.
+ # !! ?? run pstops first, and then a2ping.pl
+ my $save=$is_restored?"save\n":"";
+ $bbx.$fontsdefs."%%EndComments\n".$bsetup.$setpagesize.$markpagedevices.$pagedev_mark.$after_correct.$save.$translate
+}
+
+### scan header
+my $to_OUT="";
+my $after_code="";
+my $do_fix_tumble=0;
+my $is_restored=0;
+if (1<length($header)) {
+ my($llx,$lly,$urx,$ury);
+ my($bbtype)='-'; # None
+ my $allow_adsc_bb=1;
+ my $after_correct="";
+ my $do_bb_line=sub { # sub do_bbline($$)
+ no integer;
+ # Decreasing precedence of various BoundingBoxes:
+ # The last valid *bbox entry has effect.
+ # Active policy:
+ # normal mode : BoundingBox ExactBoundingBox HiResBoundingBox
+ # --hires mode: HiResBoundingBox BoundingBox ExactBoundingBox
+ # --exact mode: ExactBoundingBox BoundingBox HiResBoundingBox
+ # -hi -ex mode: ExactBoundingBox HiResBoundingBox BoundingBox
+ # Another possible policy:
+ # normal mode : BoundingBox HiResBoundingBox==ExactBoundingBox
+ # --hires mode: HiResBoundingBox ExactBoundingBox BoundingBox
+ # --exact mode: ExactBoundingBox HiResBoundingBox BoundingBox
+ # -hi -ex mode: ExactBoundingBox==HiResBoundingBox BoundingBox
+ my($S,$from)=@_;
+ return if $S!~/^(?:$BBregex|set)$BBValues/oi;
+ # print STDERR "($S)\n";
+ my $E1=defined$1 ? $1 : "+";
+ my $T=!defined($1) ? 'S' : uc substr $1,0,1; # '' || 'H' || 'E'
+ # debug "Trying BoundingBox T-$bbtype: $llx $lly $urx $ury";
+ if ($T eq 'S'
+ or !$::opt_hires and !$::opt_exact and ($T eq '' or ($bbtype ne '' and ($T eq 'E' or $bbtype ne 'E')))
+ or $::opt_hires and !$::opt_exact and ($T eq 'H' or ($bbtype ne 'H' and ($T eq '' or $bbtype ne '')))
+ or $::opt_exact and !$::opt_hires and ($T eq 'E' or ($bbtype ne 'E' and ($T eq '' or $bbtype ne '')))
+ or $::opt_exact and $::opt_hires and ($T eq 'E' or ($bbtype ne 'E' and ($T eq 'H' or $bbtype ne 'H')))
+ ) {
+ # if ($allow_bb) {
+ ($bbtype,$llx,$lly,$urx,$ury)=($T,$2+0,$3+0,$4+0,$5+0);
+ debug "Applying ${E1}BoundingBox$from T-$bbtype: $llx $lly $urx $ury";
+ # }
+ } else {
+ my @L=($2+0,$3+0,$4+0,$5+0); # convert 0.00 to 0
+ debug "Ignoring ${E1}BoundingBox$from T-$bbtype: @L";
+ }
+ # Dat: don't do $do_bb_line=sub{};# same as $allow_bb=0;
+ };
+ $header=~s@\r\n?\Z(?!\n)@@;
+ my $after_comments=""; # after %%EndComments
+ # my $res;
+ { my $headEPSF;
+ my $headPS="PS-Adobe-3.0";
+ # vvv Imp: run this correction even w/o input EPS header
+ if ($header!~s/\s+(EPSF-[.\d]+)$// or $::opt_bboxfrom ne 'guess') { # a PS not an EPS already
+ # This is the compute-pipe routine.
+ # To convert an [E]PS to an EPS:
+ # -- find the end of the 1st page in the code, and remove everything after it
+ # -- `pop' off the execution stack after the 1st page
+ # -- `end' the dictionary stack after the 1st page
+ # -- change the ADSC magic `%!PS-Adobe-...' to `%!PS-Adobe-3.0 EPSF-3.0'
+ # -- remove the `%%Pages', `%%DocumentPaperSizes', `%%PageOrder:'
+ # (Ascending) comment from the ADSC header
+ # -- possibly remove the `%%Page' ADSC comment [no]
+ # -- ignore calls to = setpage setpagemargin setpageparams .setpagesize
+ # setpagedevice setpagetype setprintername setresolution a4 letter ...
+ # -- surround the code by save ... pop* end* restore (implies gsave ... grestore)
+ # -- possibly ignore calls to showpage [showpage is forced]
+ $headEPSF=" EPSF-3.0";
+ debug "Computing BBox info from non-EPS PS file";
+ fix_pipe_in 'i.ps', "%!$headPS\n", 0;
+ my $tfn=temp_prefix()."c.tgs";
+ error "temp open $tfn: $!" unless open F, "> $tfn";
+ $tmpfiles{$tfn}=1;
+ ##print tell(IN)." car=$already_read\n";
+ die "$0: $!\n" unless print F "% this is temporary gs command file created by $program".'
+/DOCUT true def
+/MAINFILE FN (r) file def
+/DICTCOUNT countdictstack def
+count /OPCOUNT exch def
+<</BeginPage { % <PageCount> BeginPage -
+ dup 1 eq {
+ count OPCOUNT sub 1 sub (pop-count==) ..print ===
+ countdictstack DICTCOUNT sub (end-count==) ..print ===
+ DOCUT { (cut-offset==) ..print MAINFILE fileposition === flush } if
+ (bbox-success\n) ..print
+ quit
+ } if
+ .callbeginpage
+ }
+>> setpagedevice
+
+% vvv do these after our call to /setpagedevice
+.currentglobal true .setglobal
+systemdict begin
+/..paper.redef<< >>def
+/..print/print load def
+/setpageparams{pop pop pop pop (\nset-called-4==/setpageparams\n) ..print flush}def
+/setpage{pop pop pop (\nset-called-3==/setpage\n) ..print flush}def
+/setpagesize{pop pop (\nset-called-2==/setpagesize\n) ..print flush}def
+/.setpagesize{pop pop (\nset-called-2==/.setpagesize\n) ..print flush}def
+/setpagemargin{pop (\nset-called-1==/setpagemargin\n) ..print flush}def
+{% anti-Windows-printer-driver `%%[ ProductName:` etc.
+ dup type/stringtype eq{
+ dup length 3 ge{
+ dup 0 3 getinterval (%%[) eq{
+ (\nset-called-1==/=\n) ..print flush
+ (\nset-called-1==/print\n) ..print flush
+ }if}if}if
+ pop
+}
+dup/= exch def /print exch def
+/setpagedevice{pop (\nset-called-1==/setpagedevice\n) ..print flush}def
+/..sdict <<
+ /PageSize { % [. .] PageSize -
+ dup type /arraytype eq {
+ dup length 2 ge {
+ dup 0 get type dup /integertype eq exch /realtype eq or {
+ dup 1 get type dup /integertype eq exch /realtype eq or {
+ (\npapersize-x==) ..print dup 0 get ===
+ (\npapersize-y==) ..print dup 1 get === (\n) ..print
+ } if
+ } if
+ } if
+ } if
+ pop
+ }
+ /HWResolution { % [. .] PageSize -
+ dup type /arraytype eq {
+ dup length 2 ge {
+ dup 0 get type dup /integertype eq exch /realtype eq or {
+ dup 1 get type dup /integertype eq exch /realtype eq or {
+ (\nresolution-x==) ..print dup 0 get ===
+ (\nresolution-y==) ..print dup 1 get === (\n) ..print
+ } if
+ } if
+ } if
+ } if
+ pop
+ }
+ /Duplex { % [. .] PageSize -
+ dup type /booleantype eq {
+ (\nsides-duplex==) ..print dup === (\n) ..print
+ } if
+ pop
+ }
+ /Tumble { % [. .] PageSize -
+ dup type /booleantype eq {
+ (\nsides-tumble==) ..print dup === (\n) ..print
+ } if
+ pop
+ }
+>> def
+%/.setpagesize{pop pop (hehehe\n) print} def
+% /a4{(hehehe\n) ..print} def % doesn"t work, has to be put into userdict
+/setpagedevice{
+ { % <key> <val>
+ exch dup ..sdict exch known { % run all keys known in ..sdict
+ ..sdict exch get exec
+ } {pop pop} ifelse
+ } forall
+ (\nset-called-1==/setpagedevice\n) ..print flush
+}def
+/setpagetype{pop (\nset-called-1==/setpagetype\n) ..print flush}def
+/setprintername{pop (\nset-called-1==/setprintername\n) ..print flush}def
+/setresolution{pop (\nset-called-1==/setresolution\n) ..print flush}def
+[ % Dat: fixed at Mon May 19 14:32:31 CEST 2003
+ statusdict /.pagetypenames 2 copy known {get}{pop pop{}}ifelse
+ % ^^^ Dat: may be {/a4 STRICT {(%END SIZES) .skipeof} if /a5}
+ { /11x17/a3/a4/a4small/b5/ledger/legal/letter % GS 7.04
+ /lettersmall/note/a0/a1/a2/a5/a6/a7/a8/a9/c0/c1/c2/c3/c4/c5/c6
+ /a10/b0/b1/b2/b3/b4/b5/b6
+ /isob0/isob1/isob2/isob3/isob4/isob5/isob6
+ /jisb0/jisb1/jisb2/jisb3/jisb4/jisb5/jisb6
+ /archE/archD/archC/archB/archA/flsa/flse/halfletter
+ /tabloid/csheet/dsheet/esheet/executivepage/com10envelope
+ /monarchenvelope/c5envelope/dlenvelope/folio/quarto
+ }
+]{{
+ dup type /nametype eq { dup xcheck not { % Dat: fixed
+ % dup ===
+ dup ..paper.redef exch known {pop} {
+ dup ..paper.redef exch null put
+ dup userdict exch 2 copy known { 2 copy get
+ 1 index userdict exch undef
+ % Stack: /a4 userdict /a4 {...}
+ % 3 copy pop undef
+ 4 2 roll exch undef
+ } { exch pop pop {} } ifelse
+ % Stack: /a4 {595 842 //.setpagesize --exec--}
+ % Stack: /a4 {595 842 {/statusdict --.systemvar-- --begin-- .setpagesize --end--} --exec--}
+ { /get exec /pop (\nset-called-0==) ..print === flush } % dump
+ dup length array copy cvx % make a copy for subsequent invocations
+ 2 copy exch 0 exch put exch pop % change /get to {...}
+ 2 copy exch 2 exch put % change /pop to /a4
+ def % overwrite it in systemdict
+ } ifelse
+ true
+ } if } if
+ pop
+}forall} forall
+end % systemdict
+.setglobal
+systemdict readonly pop
+
+(bbox-begin\n) ..print
+MAINFILE cvx exec
+(add-showpage==1\n) ..print
+/DOCUT false def
+showpage quit
+';
+ die unless close F;
+ # vvv Imp: make it work on Win32 (no >&1 redirection)
+ my $gs3=$CGS. # "-dPAGE1QUIT=".($FileFormat eq 'EPS' or $FileFormat eq 'markedEPS' ? 'quit' : '{}').
+ " -dWRITESYSTEMDICT -dNOPAUSE -sDEVICE=bbox -sFN=".fnq($InputFilename)." ".fnq($tfn)." 2>&1";
+ debug "Ghostscript compute pipe: $gs3";
+ my $res=`$gs3`;
+ ## die $res;
+ temp_unlink $tfn;
+ ## print STDERR $res;
+ error "not a GS output from $GS"
+ if !defined $res # BUGFIX at Sun Mar 7 18:51:34 CET 2004
+ or $res!~s/\A\w+ Ghostscript \d.*\n// # AFPL Ghostscript 6.50 (2000-12-02)
+ or $res!~s/.*?^bbox-begin\n//m;
+ if ($res!~s/\nbbox-success\n\Z(?!\n)/\n/) {
+ warning # not `error', mpost(1) `prologues:=0; ... btex fonts' output won't compile
+ "BBox discovery was not successful";
+ # !! continue only if MetaPost output?
+ goto SKIP_BBOX_DISC;
+ }
+ #: Copyright (C) 2000 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
+ #: This software comes with NO WARRANTY: see the file PUBLIC for details.
+ #: set-called-0==/a4
+ #: %%BoundingBox: 56 41 539 783
+ #: %%HiResBoundingBox: 56.645998 41.849999 538.811984 782.351976
+ #: pop-count==0
+ #: end-count==1
+ #: cut-offset==81898
+ my $pop_count=0;
+ my $end_count=0;
+ my $cut_offset=-1;
+ my $papersize_x=undef; # page_width
+ my $papersize_y=undef; # page_height
+ my $resolution_x=undef;
+ my $resolution_y=undef;
+ my $duplexi=0;
+ my $tumblei=0;
+ my %H;
+ my $undefs="";
+ my $bbc=0; # required
+ for my $line (split/\n/, $res) {
+ if ($line=~/^$BBregex$BBValues/oi) { $do_bb_line->($line," from Compute-GS"); $bbc++ }
+ elsif ($line=~m@^set-called-(\d+)==/(\S+)$@) {
+ if (not exists $H{$2}) {
+ $H{$2}=1;
+ $undefs.="/$2".(
+ $1==0 ? "{}def\n" :
+ $1==1 ? "/pop load def\n" :
+ "{".("pop "x$1)."}bind def\n"
+ );
+ }
+ # Dat: Safe, restorable, EPS-wise: /setpagedevice {pop} def
+ # Dat: Smart, documentwise /a4 dup where{dup wcheck{exch{}put}{pop{}def}ifelse}{pop}ifelse
+ }
+ elsif ($line=~/^pop-count==(\d+)$/) { $pop_count=$1+0 }
+ elsif ($line=~/^end-count==(\d+)$/) { $end_count=$1+0 }
+ elsif ($line=~/^cut-offset==(\d+)$/) { $cut_offset=$1+0 }
+ elsif ($line=~/^papersize-x==([-+0-9eE.]+)$/) { no integer; $papersize_x=$1+0 }
+ elsif ($line=~/^papersize-y==([-+0-9eE.]+)$/) { no integer; $papersize_y=$1+0 }
+ elsif ($line=~/^resolution-x==([-+0-9eE.]+)$/) { no integer; $resolution_x=$1+0 }
+ elsif ($line=~/^resolution-y==([-+0-9eE.]+)$/) { no integer; $resolution_y=$1+0 }
+ elsif ($line=~/^sides-duplex==true$/) { $duplexi=1 }
+ elsif ($line=~/^sides-dumplex==false$/) { $duplexi=2 }
+ elsif ($line=~/^sides-tumble==true$/) { $tumblei=1 }
+ elsif ($line=~/^sides-tumble==false$/) { $tumblei=2 }
+ elsif (length($line)==0 or $line=~/^(?:Copyright |This software )/) {}
+ elsif ($line=~/^Loading (\S+) font from.*[.][.][.]/) { debug "GS builtin font used: $1" }
+ else { debug "unknown line ($line)" }
+ }
+ undef $papersize_y if !defined $papersize_x;
+ die unless $allow_adsc_bb==1;
+ # Dat: This only applies when converting fron non-EPS PS:
+ # Setting $allow_adsc_bb=0|1 now would disallow/allow the %%BoundingBox
+ # etc. ADSC comment override the bbox computed by -sDEVICE=bbox.
+ # When converting PS -> EPS, the PS file usually contains
+ # `%%BoundingBox: 0 0 paperwidth paperheight', but the figure
+ # itself is smaller.
+ $bbtype='-';
+ ## die "$papersize_x;;"; # PDF -sPAPERSIZE=a4
+ #if ($::opt_papersize ne 'force-unknown' and $::opt_papersize ne 'unchanged') {
+ # # override bbox
+ # ($llx,$lly)=(0,0);
+ # ($urx,$ury)=split/,/,$::opt_papersize;
+ #} elsif (!is_page1_stop() and defined $papersize_x and defined $papersize_y) {
+ #}
+ debug "PaperSize wd=${papersize_x}bp ht=${papersize_y}bp" if defined $papersize_x;
+ if ($::opt_papersize eq 'force-unknown' or ($::opt_papersize eq 'unchanged' and !defined $papersize_x)) {}
+ elsif ($::opt_papersize ne 'unchanged') {
+ die if is_page1_stop();
+ ($papersize_x,$papersize_y)=split/,/,$::opt_papersize;
+ goto do_force_papersize
+ } else {
+ # Dat: no $do_bb_line here, because we've done it with $bbc++, and we'll also do it later
+ do_force_papersize:
+ die if is_page1_stop();
+ # vvv ($llx,$lly,$urx,$ury)=(0,0,$papersize_x,$papersize_y);
+ # $do_bb_line->("set 0 0 $papersize_x $papersize_y"," from /PageSize");
+ $after_correct.="1 dict dup /PageSize [".ceil($papersize_x)." ".ceil($papersize_y)."] put setpagedevice\n";
+ # ^^^ Dat: both PS and markedPS would benefit from /PaperSize
+ # ^^^ Dat: will be put after CorrectBoundingBox
+ # Dat: unneeded: $allow_adsc_bb=0 if $FileFormat eq 'PDF'; # force this into /CropBox (otherwise only /MediaBox)
+ }
+ if (defined $papersize_x and ($::opt_bboxfrom eq 'papersize' or ($::opt_bboxfrom eq 'guess' and is_set_pagesize_ok()))) {
+ $allow_adsc_bb=0;
+ $do_bb_line->("set 0 0 $papersize_x $papersize_y"," from /PageSize"); # does ($llx,$lly,$urx,$ury)=(0,0,$papersize_x,$papersize_y);
+ }
+ $allow_adsc_bb=0 if ($::opt_bboxfrom eq 'compute-gs') ? ($bbc!=0)
+ : ($::opt_bboxfrom eq 'guess') ? ($bbc!=0 and is_page1_stop()) # Imp: is is_page1_stop() OK here?
+ : 0;
+ if (!is_page1_stop()) {
+ $pop_count=$end_count=0; # assume PS is correct
+ $cut_offset=-1;
+ }
+ # if ($FileFormat ne 'EPS' and $FileFormat ne 'PS') { # device-specific (marked)
+ # ^^^ Dat: $::opt_resolution and $::opt_duplex are already 'force-unknown' if $FileFormat is appropriate
+ {
+ $::opt_resolution=$resolution_x.','.$resolution_y if
+ $::opt_resolution eq 'unchanged' and defined $resolution_x and defined $resolution_y;
+
+ # vvv Imp: move down like $::opt_resolution
+ if ($::opt_duplex eq 'force-unknown' or ($::opt_duplex eq 'unchanged' and $duplexi==0)) { $do_fix_tumble=($duplexi==1 && $tumblei==1) }
+ elsif ($::opt_duplex eq 'force-simplex') { do_simplex: $after_correct.="1 dict dup /Duplex false put setpagedevice\n" }
+ elsif ($::opt_duplex eq 'force-long' ) { do_long: $after_correct.="2 dict dup /Duplex true put dup /Tumble false put setpagedevice\n" }
+ elsif ($::opt_duplex eq 'force-short') { do_short: $do_fix_tumble=1; $after_correct.="2 dict dup /Duplex true put dup /Tumble true put setpagedevice\n" }
+ else {
+ $duplexi ||= $::opt_duplex eq 'default-simplex' ? 2 : 1;
+ $tumblei ||= $::opt_duplex eq 'default-short' ? 1 : 2;
+ goto do_simplex if $duplexi!=1;
+ goto do_long if $tumblei!=1;
+ goto do_short;
+ }
+ }
+ # vvv Dat: save...restore is _always_ necessary to undo the changes made
+ # in the file itself
+ $is_restored=1; # $after_comments.="save\n";
+ $after_comments.=$undefs; # after our precious setpagedevice calls
+ # debug "pop_count=$pop_count;";
+ # debug "end_count=$end_count;";
+ # debug "cut_offset=$cut_offset;";
+ $after_code.=("pop\n"x$pop_count).("end\n"x$end_count);
+ if ($cut_offset>=0 and ($bytes_left==-1 or $cut_offset<$bytes_left)) {
+ $bytes_left=$cut_offset-$already_read;
+ ##print tell(IN)." ar=$already_read\n";
+ debug "Cutting after showpage at $cut_offset -> $bytes_left";
+ # ^^^ Dat: cutting after `showpage' makes PS -> EPS conversion easy
+ # sleep 1000;
+ }
+ # Dat: don't unlink $tifn yet, we'll continue scanning it
+ # Imp: verify EPS created
+ } else { $headEPSF=" $1" }
+ SKIP_BBOX_DISC:
+ if ($::opt_resolution eq 'force-unknown' or $::opt_resolution eq 'unchanged') {}
+ else { $after_correct.="1 dict dup /HWResolution [@{[split/[x,]/,$::opt_resolution]}] put setpagedevice\n" }
+ # ^^^ Dat: syntax already ok for $::opt_resolution
+ $after_correct.="2 dict dup /TextAlphaBits 4 put dup /GraphicsAlphaBits 4 put setpagedevice\n" if
+ $::opt_antialias eq 'yes' or $::opt_antialias eq 'scale3yes';
+
+ $headEPSF="" if $FileFormat ne 'EPS' and $FileFormat ne 'markedEPS';
+ $headPS=$1 if $header=~s/(PS-Adobe-[.\d]+)$//;
+ $to_OUT.="%!$headPS$headEPSF\n";
+ }
+
+ debug "Scanning header for BoundingBox";
+ my $do_atend=0;
+ my $doing_atend=0;
+ my $saved_pos;
+ my $saved_bytes_left;
+ my $creator_metapost_p=0; # HiResBoundingBox: after EndProlog
+ my $creator_adobeps_p=0;
+ my $had_pages=is_page1_stop(); # Dat: don't put `Pages:' to target EPS
+ my $fontsdefs="";
+ my %fontsnames;
+ my @creator;
+ read_again: while (length($_=readIN)) {
+ ##print STDERR "(($_))\n";
+ ### end of header
+ next unless /\S/;
+ y@\r@@d; chomp;
+ if (!$doing_atend) {
+ if (/^%%EndComments\b/i) {
+ # Dat: EPSI created by ImageMagick has BeginDefaults+EndDefaults+BeginPreview
+ # Dat: PS output by ADOBEPS4.DRV has BeginDefaults+PageBoundingBox+ViewingOrientation+PageFeatures+EndDefaults
+ 1 while length($_=readIN) and !/\S/;
+ if (!/^%%BeginDefaults\b/i) { y@\r@@d; chomp; $after_comments.="$_\n"; last }
+ 1 while length($_=readIN) and !/\S/;
+ if (!/^%%EndDefaults\b/i) { y@\r@@d; chomp; $after_comments.="%%BeginDefaults\n$_\n"; last }
+ next
+ } elsif (/^%%EndDefaults\b/i) { # EPSI created by ImageMagick
+ } elsif (/^%%Creator:\s*ADOBEPS/i) { # ADOBEPS4.DRV
+ # Emits ``%%BoundingBox 1 1 ...' instead of `0 0'
+ $creator_adobeps_p=1;
+ } elsif (/^%%Creator:\s*MetaPost\b/i) {
+ $creator_metapost_p=1;
+ } elsif ((substr($_,0,2)ne'%%' and substr($_,0,7)ne'%*Font:')
+ and substr($_,0,5)ne'%EPS ' # epsincl.mp
+ or !$creator_metapost_p and substr($_,0,5)eq'%%End'
+ or /^%%Begin(?:Prolog|Setup)\b/i
+ ) { $after_comments.="$_\n"; last }
+ }
+ if (/^%%BeginPreview\b/i) { # remove EPSI preview ballast ****pts****
+ while (1) {
+ error "Missing EPSI %%EndPreview" if !length($_=readIN);
+ last if /^%%EndPreview\b/;
+ y@\r@@d; chomp
+ }
+ } elsif (/^%%Creator:\s*(.*)/i) {
+ push @creator, $1;
+ $creator[-1]=~s@\s+\Z(?!\n)@@;
+ $creator[-1]=~s@, a2ping .*@@; # remove old
+ } elsif (/^%%(?:DocumentPaperSizes|PageOrder|DocumentMedia):/i) {
+ # silently ignore these -- will be recalculated
+ } elsif (/^%%Pages:\s+(\d+)\s*/i and !$had_pages) { # Not `%%Pages: (atend)'
+ # Dat: don't `$do_atend=1' only for %%Pages
+ $to_OUT.="$_\n"; $had_pages=1
+ } elsif (/^%%Pages:/i) {
+ # silently ignore these -- not significant for EPS
+ } elsif (/^$BBregex$BBValues/oi) { ### BoundingBox with values
+ s@($BBregex)\s*1\s+1\s+@$1 0 0 @ if $creator_adobeps_p;
+ # vvv $bbtype may be possibly already set by compute-gs
+ $do_bb_line->($_," from ADSC") if $allow_adsc_bb;
+ } elsif (/^$BBregex\s*\(atend\)/oi) {
+ ### BoundingBox with (atend)
+ debug "At end $1BoundingBox";
+ # warning "Cannot look for BoundingBox in the trailer with option --filter" if $::opt_filter;
+ # ^^^ Dat: may be seekable anyway, omit warning
+ $do_atend=1
+ } elsif (/^%%Page:/i and !$creator_metapost_p) { # at Thu Sep 25 15:59:52 CEST 2003
+ $after_comments.="$_\n"; last
+ } elsif (/^%\*Font:\s+(\S+)\s+/) { # mpost(1) output
+ ## debug $_;
+ $fontsdefs.="$_\n"; # put in front (before `gsave ... translate')
+ $fontsnames{$1}=1;
+ } elsif (substr($_,0,5) eq '%EPS ') { # epsincl.mp
+ $after_correct.="$_\n" if !$doing_atend; # before `gsave'
+ } elsif ($doing_atend or /^%%End/) {
+ # we might be in mid-line
+ } else {
+ $to_OUT.="$_\n"
+ }
+ }
+ if ($doing_atend) { # already read (atend); restore file position
+ seek(IN, $saved_pos, 0) or error "Input unseekable, cannot go back to line `: (atend)'";
+ $bytes_left=$saved_bytes_left;
+ } elsif ($do_atend) { # seek to near EOF and try again
+ # error "Cannot leave line `: (atend)'" if ($saved_pos=tell IN)<0 or !seek(IN,0,1);
+ fix_pipe_in "j.ps", $to_OUT, 0;
+ die if ($saved_pos=tell IN)<0;
+ $saved_bytes_left=$bytes_left;
+ # vvv get the very last *BoundingBox entry from the last 4096 bytes
+ if ($bytes_left>4096) {
+ die unless seek(IN, $bytes_left-4096, 1);
+ $bytes_left=4096;
+ } elsif ($bytes_left<0) {
+ die unless seek(IN, -4096, 2) or seek(IN, 0,0); # Dat: 0,0 for short files
+ }
+ $doing_atend=1; goto read_again;
+ }
+ # if (!$had_pages) { debug "Lying %%Pages: 1"; $to_OUT.="%%Pages: 1\n" }
+ # ^^^ Dat: rather not lie !! go to (atend) if command line
+ # vvv Dat: $bbtype ne'-' would be a bad idea
+ warning "BoundingBox not found, try --bboxfrom=compute-gs" if !defined $llx; # !! compute-gs
+ push @creator, "$program $Htex::a2ping::VERSION"; # if "@creator"!~/\ba2ping\b/;
+ $to_OUT.="%%Creator: ".join(", ",@creator)."\n"; # before CorrectBoundingBox to be before `gsave' etc.
+ $to_OUT.=CorrectBoundingBox $llx, $lly, $urx, $ury, $after_correct, $fontsdefs, $is_restored;
+ $to_OUT.=$after_comments;
+ if (%fontsnames) { # !! save .. restore
+ $to_OUT.="{@{[sort keys%fontsnames]}}{\ndup where{pop pop}{cvlit dup def}ifelse}forall\n";
+ $to_OUT.="/fshow where{pop}{/fshow{exch findfont exch scalefont setfont show}bind def}ifelse\n";
+ }
+}
+
+### open output file or pipe (do this as late as possible)
+my $do_scale3_pnm=0;
+my $scale3_pnm_fn;
+my @pnm2sampled_cmd;
+if ($FileFormat eq 'PDF' or $FileFormat eq 'PDF1') {
+ my $ofn=$ll_zero ? $OutputFilename : fix_pipe_out('.pdf');
+ my $pipe = "$GS -q -dBATCH -sDEVICE=pdfwrite $GSOPTS -sOutputFile=".fnq($ofn)." -";
+ debug "Ghostscript ps2pdf pipe:", $pipe;
+ open(OUT, "| $pipe") or error "Cannot open Ghostscript pipe";
+} elsif ($FileFormat eq 'PCL5') {
+ my $ofn=$do_fix_tumble ? fix_pipe_out('.pcl5') : $OutputFilename;
+ # vvv ljet4 cannot do duplex, ljet4d can
+ my $pipe = "$GS -q -dBATCH -sDEVICE=ljet4d $GSOPTS -sOutputFile=".fnq($ofn)." -";
+ debug "Ghostscript ps2ljet pipe:", $pipe;
+ open(OUT, "| $pipe") or error "Cannot open Ghostscript pipe";
+} elsif ($FileFormat eq 'PBM' or $FileFormat eq 'PGM' or $FileFormat eq 'PPM'
+ or is_via_sam2p()) {
+ $do_scale3_pnm=($::opt_antialias eq'scale3no' or $::opt_antialias eq 'scale3yes');
+ my $device=$FileFormat eq 'PPM' || is_via_sam2p() ? 'ppmraw' :
+ $FileFormat eq 'PBM' && $::opt_antialias eq 'no' ? 'pbmraw' : 'pgmraw';
+ # Dat: -sDEVICE=pgm is ASCII, pgmraw is binary
+ my $pipe ="$GS -q -dBATCH -sDEVICE=$device ";
+ # $pipe.="-dTextAlphaBits=4 -dGraphicsAlphaBits=4 " if $::opt_antialias; # Dat: already done
+ my $ofn=$OutputFilename;
+ if (is_via_sam2p()) {
+ # Dat: fortunately the following file format names are commin in sam2p(1)
+ # and a2ping.pl: PNG XWD BMP TIFF JPEG GIF XPM
+ @pnm2sampled_cmd=('sam2p',"$FileFormat:",'--'); # Imp: use convert(1) if no sam2p(1)
+ $ofn=fix_force_out('SS.pnm');
+ push @pnm2sampled_cmd, $ofn, $OutputFilename;
+ }
+ if ($do_scale3_pnm) {
+ $scale3_pnm_fn=$ofn;
+ $ofn=fix_force_out('S3.pnm') if $do_scale3_pnm;
+ # ^^^ Dat: this must be the last call to fix_force_out()
+ }
+ $pipe.="$GSOPTS -sOutputFile=".fnq($ofn)." -";
+ debug "Ghostscript ps2raster pipe:", $pipe;
+ open(OUT, "| $pipe") or error "Cannot open Ghostscript pipe";
+} else { open_OUT() }
+
+my $unlink_OutputFilename;
+END { unlink $unlink_OutputFilename if defined $unlink_OutputFilename }
+$unlink_OutputFilename=$OutputFilename;
+
+die unless binmode OUT;
+#die $to_OUT;
+# !! remove setpagedevice from EPS->EPS, but keep EPS->PGM
+# vvv needed by EPS->PGM conversion !!
+if (is_need_showpage() and is_page1_stop()) {
+ $to_OUT.="/showpage{showpage quit}bind def\n"; # don't call showpage twice
+ $after_code.="showpage\n";
+}
+error "write OUT" if !print OUT $to_OUT;
+$to_OUT="";
+
+### print rest of file
+sub OVERLAP_LENGTH(){4096} # `%%TrailerLength: 1162' by ADOBEPS4.DRV
+my $extra_trailer="%%Trailer\n";
+##undef $unlink_OutputFilename; die;
+{ my $overlap=""; # keeps OVERLAP_LENGTH chars
+ my $S;
+ # print OUT while length($_=readIN 4096);
+ while (length($S=readIN 4096)) { # Dat: 4096>=OVERLAP_LENGTH
+ #if (length($S)<OVERLAP_LENGTH) { $S="$overlap$S"; $overlap=""; }
+ #die if length($S)<OVERLAP_LENGTH; # happens sometimes
+ #print OUT $overlap, substr($S,0,length($S)-OVERLAP_LENGTH());
+ #$overlap=substr($S,-OVERLAP_LENGTH(),OVERLAP_LENGTH);
+ next if length($overlap.=$S)<OVERLAP_LENGTH;
+ print OUT substr($overlap,0,length($overlap)-OVERLAP_LENGTH());
+ $overlap=substr($overlap,-OVERLAP_LENGTH());
+ }
+ if ($overlap=~s@\r?\n%%Trailer\r?\n(.*?)\Z(?!\n)@\n%%Trailer\n@s) {
+ my $S=$1;
+ $S=~y@\r@@d;
+ $S=~s@\n%%TrailerLength:.*$@@m; # ADOBEPS4.DRV
+ $overlap.=$S;
+ $extra_trailer="";
+ }
+ $overlap=~s@(?:[\n\r\0\f]+%%EOF)?[\n\r\0\f]*\Z(?!\n)@@;
+ # vvv Dat: would move %%Trailer after dvips output `end userdict /end-hook known{end-hook}if'
+ # $overlap=~s@(?:[\n\r\0\f]+%%Trailer)?(?:[\n\r\0\f]+%%EOF)?[\n\r\0\f]+\Z(?!\n)@@;
+ print OUT $overlap;
+}
+
+### close files
+error "closing IN: $?" unless close IN;
+# ^^^ SUXX: gs always exit(0), if exists
+# vvv Dat: $after_code is pop+end
+print OUT "\n$extra_trailer$after_code",
+ ("grestore\n"x$need_grestore),
+ ("restore\n"x$is_restored),
+ "%%EOF\n";
+error "closing gs filter: $? $!" unless close OUT;
+
+# --- PNM scaling routines for --antialias=scale3*
+
+sub pnm_gettok($) {
+ my ($fh,$S,$C)=($_[0],"");
+ while (1) {
+ die "unexpected EOF" if !defined($C=getc($fh));
+ if ($C eq'#') { <$fh> } # ignore rest of line
+ elsif ($C=~y@ \n\r\t@@) { last if length($S)!=0 }
+ else { $S.=$C }
+ }
+ $S
+}
+
+my @div9=(0,0,0,0,0,map { $_, $_, $_, $_, $_, $_, $_, $_, $_ } 1..255, 255);
+
+#** @param $_[0] length always divisible by 3
+sub p5_avg_lines($$$$) {
+ use integer;
+ my $len=length($_[0]);
+ my $olen=$len/3;
+ while ($len>0) {
+ vec($_[3],--$olen,8)=$div9[
+ vec($_[0],$len-1,8)+vec($_[0],$len-2,8)+vec($_[0],$len-3,8)+
+ vec($_[1],$len-1,8)+vec($_[1],$len-2,8)+vec($_[1],$len-3,8)+
+ vec($_[2],$len-1,8)+vec($_[2],$len-2,8)+vec($_[2],$len-3,8)];
+ $len-=3;
+ }
+}
+
+#** @param $_[0] length always divisible by 9
+sub p6_avg_lines($$$$) {
+ # Imp: why is it lighter than: convert -scale '33.3333%' a3.pbm a3r.pgm
+ use integer;
+ my $len=length($_[0]);
+ my $olen=$len/3;
+ while ($len>0) {
+ vec($_[3],--$olen,8)=$div9[
+ vec($_[0],$len-1,8)+vec($_[0],$len-4,8)+vec($_[0],$len-7,8)+
+ vec($_[1],$len-1,8)+vec($_[1],$len-4,8)+vec($_[1],$len-7,8)+
+ vec($_[2],$len-1,8)+vec($_[2],$len-4,8)+vec($_[2],$len-7,8)];
+ $len-=6 if 0==--$len%3;
+ }
+}
+
+# ---
+
+if (!$ll_zero and ($FileFormat eq 'PDF' or $FileFormat eq 'PDF1')) { # correct /MediaBox if not (0,0)-based
+ ### ****pts**** remove incorrect /MediaBox produced by gs
+ my $tfn=temp_prefix()."p.tgs";
+ error "temp open $tfn: $!" unless open F, "> $tfn";
+ $tmpfiles{$tfn}=1;
+ die unless print F "% this is temporary gs command file created by $program".'
+ GS_PDF_ProcSet begin
+ pdfdict begin
+ FN (r) file pdfopen begin
+ % vvv keep file offsets, because `pdffindpageref` overrides it with contents
+ /OFT Objects 0 get dup length array copy def
+ % vvv Dat: the generation number is assumed to be 0
+ % vvv Dat: modifies Objects[0]
+ 1 pdffindpageref 0 get
+ Objects 0 OFT put
+ readxrefentry ===
+ currentdict pdfclose end end end
+ ';
+ die unless close F;
+
+ my $gs2="$GS -dNODISPLAY -dBATCH -sFN=".fnq(fix_pipe_out(undef))." -q ".fnq($tfn);
+ debug "Ghostscript dup pipe: $gs2";
+ my $offset=`$gs2`;
+ chomp $offset;
+ temp_unlink $tfn;
+ if ($offset=~/\A\d+\Z(?!\n)/) {
+ # Dat: now $offsets is a file position containing our /Page object
+ die unless open F, "+< ".fix_pipe_out(undef);
+ die unless binmode F;
+ die unless seek F, $offset+=0, 0;
+ my $pageobj;
+ die unless 32<read F, $pageobj, 4096;
+ if ($pageobj=~m@\A(.*?/Type\s*/Page\b.*?)(/MediaBox\s*\[0 0 [^\]]*\]).*?/MediaBox\b@s) {
+ substr($pageobj, length($1), length($2))=" "x length($2);
+ # ^^^ overwrite first buggy /MediaBox definition with spaces
+ die unless seek F, $offset, 0;
+ die unless print F $pageobj;
+ debug "old /MediaBox destroyed.";
+ } else {
+ debug "warning: double /MediaBox not found at $offset";
+ }
+ die unless close F;
+ } else {
+ debug "warning: gs failed to locate double /MediaBox";
+ }
+}
+if ($FileFormat eq 'PCL5' and $do_fix_tumble) {
+ # stupid Ghostscript ignores /Tumble true with -sDEVICE=ljet4
+ # 2 dict dup /Duplex true /Tumble false put setpagedevice % long HP PCL5e "\033&l1S"
+ # 2 dict dup /Duplex true /Tumble true put setpagedevice % short HP PCL5e "\033&l2S"
+ # 2 dict dup /Duplex false /Tumble false put setpagedevice % simplex HP PCL5e "\033&l0S"
+ # HP PCL5e gs header "\033E\033&l2A\033&l1S\033&l0o0l0E\033&l-180u36Z"
+ die unless open F, "+< ".fix_pipe_out(undef);
+ die unless binmode F;
+ my $pageobj;
+ die unless 32<read F, $pageobj, 4096;
+ if ($pageobj=~s@\033&l1S.*@\033&l2S@s) {
+ die unless seek F, 0, 0;
+ die unless print F $pageobj;
+ debug "fixed /Tumble true (short).";
+ } elsif ($pageobj=~m@\033&l0S@) {
+ debug "no need to fix to /Tumble.";
+ } else {
+ debug "warning: /Duplex /Tumble settings not found"
+ }
+ die unless close F;
+}
+if ($do_scale3_pnm) {
+ # Imp: scale down the file in place, ovoid early overwrite
+ # Imp: possibly call an external C program that is faster
+ debug "Scaling down PNM by 3x3";
+ die unless open F, "> $scale3_pnm_fn";
+ die unless binmode F;
+ die unless open FIN, "< ".fix_pipe_out(undef);
+ my $hd;
+ die "PNMraw expected\n" if read(FIN,$hd,2)!=2 or $hd!~/\AP[456]/;
+ my $wd=pnm_gettok(*FIN); die "width expected\n" if $wd!~/\A(\d+)\Z(?!\n)/;
+ my $wd3=$hd eq 'P4' ? ($wd+7)>>3 : $hd eq 'P5' ? $wd : $wd*3; # bw/grayscale/RGB
+ my $ht=pnm_gettok(*FIN); die "height expected\n" if $ht!~/\A(\d+)\Z(?!\n)/;
+ if ($hd ne 'P4') {
+ my $mx=pnm_gettok(*FIN); die "max==255 expected, got: $mx\n" if $mx ne '255';
+ }
+ $wd+=0; $ht+=0;
+ { use integer;
+ my $phd=($hd eq 'P5' and $FileFormat eq 'PBM') ? "P4 ".(($wd+2)/3)." ".(($ht+2)/3)."\n"
+ : ($hd eq 'P6' ? 'P6' : 'P5')."\n# reduced-3x3\n".
+ (($wd+2)/3)." ".(($ht+2)/3)." 255\n";
+ die if !print F $phd;
+ }
+
+ my($l1,$l2,$l3);
+ my $ret="";
+ if ($hd eq 'P4') {
+ while ($ht>0) {
+ die "full row expected1\n" if $wd3!=read FIN, $l1, $wd3;
+ if (--$ht==0) { $l2=$l1 }
+ else {
+ die "full row expected2\n" if $wd3!=read FIN, $l2, $wd3;
+ if (--$ht==0) { $l3=$l2 } # Imp: adjust 2/3 weight
+ else { $ht--;
+ die "full row expected3\n" if $wd3!=read FIN, $l3, $wd3;
+ }
+ }
+ $l1=unpack("B$wd",$l1); $l1=~y@10@\000\377@; $l1.=substr($l1,-3+length($l1)%3) if length($l1)%3!=0;
+ $l2=unpack("B$wd",$l2); $l2=~y@10@\000\377@; $l2.=substr($l2,-3+length($l2)%3) if length($l2)%3!=0;
+ $l3=unpack("B$wd",$l3); $l3=~y@10@\000\377@; $l3.=substr($l3,-3+length($l3)%3) if length($l3)%3!=0;
+ p5_avg_lines($l1, $l2, $l3, $ret);
+ die if !print F $ret;
+ }
+ } elsif ($hd eq 'P5') {
+ while ($ht>0) {
+ die "full row expected1\n" if $wd3!=read FIN, $l1, $wd3;
+ $l1.=substr($l1,-3+length($l1)%3) if length($l1)%3!=0;
+ if (--$ht==0) { $l2=$l1 }
+ else {
+ die "full row expected2\n" if $wd3!=read FIN, $l2, $wd3;
+ $l2.=substr($l2,-3+length($l2)%3) if length($l2)%3!=0;
+ if (--$ht==0) { $l3=$l2 } # Imp: adjust 2/3 weight
+ else { $ht--;
+ die "full row expected3\n" if $wd3!=read FIN, $l3, $wd3;
+ $l3.=substr($l3,-3+length($l3)%3) if length($l3)%3!=0;
+ }
+ }
+ p5_avg_lines($l1, $l2, $l3, $ret);
+ if ($FileFormat eq 'PBM') {
+ my $I=length($ret);
+ while ($I--) { vec($ret,$I,8)=vec($ret,$I,8)<$::opt_threshold } # [\0\1]
+ # ^^^ grayscale>=$::opt_threshold will be white
+ $ret=pack"B".length($ret),$ret;
+ }
+ die if !print F $ret;
+ }
+ } elsif ($hd eq 'P6') {
+ while ($ht>0) {
+ die "full row expected1\n" if $wd3!=read FIN, $l1, $wd3;
+ $l1.=substr($l1,-9+length($l1)%9) if length($l1)%9!=0;
+ if (--$ht==0) { $l2=$l1 }
+ else {
+ die "full row expected2\n" if $wd3!=read FIN, $l2, $wd3;
+ $l2.=substr($l2,-9+length($l2)%9) if length($l2)%9!=0;
+ if (--$ht==0) { $l3=$l2 } # Imp: adjust 2/3 weight
+ else { $ht--;
+ die "full row expected3\n" if $wd3!=read FIN, $l3, $wd3;
+ $l3.=substr($l3,-9+length($l3)%9) if length($l3)%9!=0;
+ }
+ }
+ p6_avg_lines($l1, $l2, $l3, $ret);
+ die if !print F $ret;
+ }
+ }
+ die unless close F;
+ temp_unlink $temp_out_fn;
+ undef $temp_out_fn;
+}
+if (@pnm2sampled_cmd) { # $scale3_pnm_fn -> $OutputFilename
+ do_system @pnm2sampled_cmd; # Dat: uses @extra -- really share that?
+ temp_unlink $scale3_pnm_fn;
+}
+fix_close_out();
+undef $unlink_OutputFilename;
+if ($OutputFilename eq '-') {
+ debug "Done OK, stdout is $FileFormat"
+} elsif (-f $OutputFilename) {
+ debug "Done OK, created $FileFormat file $OutputFilename (".(-s _)." bytes)";
+} else {
+ error "missing $OutputFilename"
+}
+just::end __END__
+
+Dat: `=item * foo' is wrong, puts big space between `*' and `foo'
+
+=begin man
+
+.ds pts-dev \*[.T]
+.do if '\*[.T]'ascii' .ds pts-dev tty
+.do if '\*[.T]'ascii8' .ds pts-dev tty
+.do if '\*[.T]'latin1' .ds pts-dev tty
+.do if '\*[.T]'nippon' .ds pts-dev tty
+.do if '\*[.T]'utf8' .ds pts-dev tty
+.do if '\*[.T]'cp1047' .ds pts-dev tty
+.do if '\*[pts-dev]'tty' \{\
+.ll 79
+.pl 33333v
+.nr IN 2n
+.\}
+.ad n
+
+=end
+
+=head1 NAME
+
+a2ping.pl -- convert between PS, EPS and PDF and other page description
+formats
+
+=head1 SYNOPSIS
+
+Z<> B<a2ping.pl> [B<-->]B<help>
+ B<a2ping.pl> [B<-->]B<doc>
+ B<a2ping.pl> [I<options>] <I<inputfile>> [[I<outformat>:] I<outputfile>]
+
+=head1 DESCRIPTION
+
+B<a2ping> is a UNIX command line utility written in Perl that
+converts many raster image and vector graphics formats to EPS or PDF and
+other page description formats. Accepted input file formats are: PS
+(PostScript), EPS, PDF, PNG, JPEG, TIFF, PNM, BMP, GIF, LBM, XPM, PCX,
+TGA. Accepted output formats are: EPS, PCL5, PDF, PDF1, PBM, PGM, PPM,
+PS, markedEPS, markedPS, PNG, XWD, BMP, TIFF, JPEG, GIF, XPM.
+B<a2ping> delegates the low-level work to
+Ghostscript (GS), B<pdftops> and B<sam2p>. B<a2ping> fixes many glitches
+during the EPS to EPS conversion, so its output is often more compatible
+and better embeddable than its input.
+
+Without the C<--below> option, it is guarenteed to start at the 0,0
+coordinate. C<--below>, C<--hires> and C<-v> are recommended options.
+
+The page size is set exactly corresponding to the BoundingBox.
+This means that when Ghostscript renders it, the result needs no
+cropping, and the PDF MediaBox is correct.
+
+If the bounding box is not right, of course, you have problems. If you
+feed crap in, you get crap. But you can supply the
+B<--bboxfrom=compute-gs> option to make GS recompute the bounding box.
+
+The name of the input file doesn't matter -- B<a2ping> detects the file
+format based on the first few bytes of the file. The name of the output
+file matters if I<outformat> is missing from the command line: then the
+extension of the output file determines the FileFormat (I<outformat>).
+
+=head1 EXTERNAL PROGRAMS
+
+The internal file format of B<a2ping.pl> is PS/EPS. Everything read is
+first converted to PS or EPS, then processed by B<a2ping.pl>, then
+converted to the output format.
+
+To analyse the bounding box and other properties of non-EPS PS files
+(and EPS files with option B<--bboxfrom> other than B<=guess>), GS is
+used. Converting PS to EPS involves this analysis.
+
+To write PDF files, GS is used.
+
+To read PDF files, B<pdftops> from the B<xpdf> package is used.
+
+Sampled input formats are PNG, JPEG, TIFF, PNM, BMP, GIF, LBM, XPM, PCX
+and TGA. To read sampled input formats, B<sam2p> is used. B<sam2p> is
+a raster image converter written in C++ by the author of B<a2ping.pl>.
+
+Extra output formats are PNG, XWD, BMP, TIFF, JPEG, GIF and XPM. To
+write extra output formats, B<sam2p> and GS are used.
+
+PNM output formats are PGM, PGM and PPM. To write PNM output formats, GS
+is used.
+
+
+=head1 TIPS AND TRICKS
+
+=over 2
+
+=item *
+
+Call with the B<-v> option to see progress and debug messages.
+
+=item *
+
+If your EPS contains a wrong bounding box, you can fix it by running
+C<a2ping.pl -v --bboxfrom=compute-gs thefile.eps -->
+
+=item *
+
+You can specify B<-> as I<inputfile> to get stdin and as I<outputfile>
+to get stdout. This works even for PDF files (which must be seekable),
+because B<a2ping> copies them to a temporary file automatically.
+
+=item *
+
+If I<inputfile> and I<outputfile> are the same, B<a2ping> copies the
+I<inputfile> to a temporary location first. However, this usage is
+recommended only if there is a backup of the file to be restored in case
+B<a2ping> doesn't produce the desired result.
+
+=item *
+
+If you specify B<--> as I<outputfile>, it will be the same as I<inputfile>.
+
+=item *
+
+B<a2ping> respects B<--Duplex> for FileFormat PCL5, even though GS doesn't.
+
+=item *
+
+If you have an incompatible PS that GS can read but your printer cannot print,
+just run C<a2ping.pl foo.ps PDF: - | a2ping.pl - PS: foo.ps>
+
+=item *
+
+If you have a PS coming from Win32 (often with extension C<.prn>), run
+it through B<a2ping>. It will remove the resolution changes and the
+progress text printed to the terminal (which confuses gv(1) and makes
+some filters in the print queue emit incorrect output).
+
+=item *
+
+B<a2ping> does antialiasing (B<--antialias=scale3no>) of glyphs and
+curves when emitting a sampled image (FileFormats such as PGM and PPM).
+This improves readability of the glyphs. B<=yes> instructs GS to do
+internal antialiasing, but it usually doesn't improve much. B<=scale3no>
+turns off GS internal antialiasing, but makes it render everything 3x3
+as big, and then scales it back down. B<=scale3no> turns on both 3x3
+scaling and GS internal antialiasing, which results in thicker lines and
+worse quality in general.
+
+=item *
+
+When creating a PBM file, antialiasing usually doesn't improve the
+quality, so it is switched off by default. But if you set
+B<--antialias=scale3no> or B<--antialias=scale3yes>, GS will render a PGM file,
+and the value of B<--threshold> determines the minimum intensity for white in
+the final PBM.
+
+=item *
+
+If you need a bigger sampled output file, specify a larger
+B<--Resolution>. The default is B<--Resolution=72>. If your sampled output file
+is going to be really big, you should specify B<--AntiAlias=yes> instead of
+the default B<--AntiAlias=scale3no> to speed up conversion.
+
+=back
+
+
+=head1 MISC
+
+=over 2
+
+=item *
+
+Doesn't depend on the filename or extension of the input file.
+
+=item *
+
+Conversion from EPS to PDF: fixes glitches etc., calls gs
+-sDEVICE=pdfwrite
+
+=item *
+
+Conversion from EPS to EPS: fixes various glitches, moves (llx,lly) to
+(0,0), removes binary junk from the beginning of the EPS etc.
+
+=item *
+
+Conversion from PDF to PDF: keeps the file intact
+
+=item *
+
+Conversion from PDF to EPS: calls pdftops -eps (of the xpdf package)
+
+=item *
+
+Conversion from PS to EPS: keeps 1st page only, removes setpagedevice etc.
+
+=back
+
+=head1 AUTHORS
+
+The author of B<a2ping> is Szabó Péter <F<pts@fazekas.hu>>.
+
+B<a2ping> is inspired by and historically based on the B<epstopdf> Perl
+script modified by Thomas Esser, Sept. 1998, but his modifications have
+been removed from B<a2ping>, and also B<a2ping> and B<epstopdf> do not
+share common code anymore. B<epstopdf> is written by Sebastian Rahtz,
+for Elsevier Science. B<epstopdf> contained extra tricks from Hans Hagen's
+texutil.
+
+=head1 HISTORY
+
+=head2 1999/05/06 v2.5 (Heiko Oberdiek)
+
+ * New options: --hires, --exact, --filter, --help.
+ * Many cosmetics: title, usage, ...
+ * New code for debug, warning, error
+ * Detecting of cygwin perl
+ * Scanning for %%{Hires,Exact,}BoundingBox.
+ * Scanning only the header in order not to get a wrong
+ BoundingBox of an included file.
+ * (atend) supported.
+ * uses strict; (earlier error detecting).
+ * changed first comment from '%!PS' to '%!';
+ * corrected (atend) pattern: '\s*\(atend\)'
+ * using of $bbxpat in all BoundingBox cases,
+ correct the first white space to '...Box:\s*$bb...'
+ * corrected first line (one line instead of two before 'if 0;';
+
+=head2 2000/11/05 v2.6 (Heiko Oberdiek)
+
+ * %%HiresBoundingBox corrected to %%HiResBoundingBox
+
+=head2 2001/03/05 v2.7 (Heiko Oberdiek)
+
+ * Newline before grestore for the case that there is no
+ whitespace at the end of the eps file.
+
+=head2 2003/02/02 (Szabó Péter)
+
+ * option --below
+ * removes DOS EPSF binary junk correctly
+ * adds all 3 BoundingBox DSC comments
+ * reads all 3 BoundingBox DSC comments, and picks the best
+ * forces BoundingBox to be an integer
+ * adds %%EndComments and proper %!PS-Adobe-?-? EPSF-?.? header
+ * adds %%Pages:
+ * adds invocation syntax: a2ping <infile.eps> <outfile.eps|pdf>
+ * can convert PDF to EPS (by calling pdftops(1)) and PDF to PDF
+ * emulates work for PDF input
+
+=head2 2003/04/16 (Szabó Péter)
+
+ * added PS and sam2p support, renamed to a2ping
+ * sam2p and pdftops if $InputFilename eq '-';
+ * remove PJL UEL header from the beginning
+ * works for PS non-EPS files for input
+ * input support for PNG JPEG TIFF PNM BMP GIF LBM XPM PCX TGA via sam2p
+ * removes ^L (form feed) from end of EPS file
+ * -x=-c:rle to add sam2p options
+
+=head2 2003/04/26 (Szabó Péter)
+
+ * omit the unnecessary setpagedevice calls when creating normal eps
+ * --noverbose --nocompress supported differently
+ * no more option defaults :-(
+ * justlib2
+ * multi-page output with PS:, PDF:, PCL5:
+ * after `a2ping -pa4', file out.pcl says: `HP PCL printer data - A4 page
+ size', instead of `US letter'
+ * justlib2-ified doesn't depend on Getopt::Long anymore
+ * fully supports filtering (stdin and/or stdout), PDF and PCL5 output to
+ pipe (!$$ll_zero)
+ * adds DSC ``%%DocumentMedia: plain 612 792 0 () ()''
+ * BoundingBox precedence for EPS input: --PageSize, %%*BoundingBox,
+ setpagedevice. Precedence for other inputs: --PageSize, setpagedevice,
+ %%*BoundingBox
+
+=head2 2003/09/25 (Szabó Péter)
+
+ * --bboxfrom=adsc: %%BoundingBox overrides -sDEVICE=bbox
+ * improved bbox discovery
+ * many bugfixes
+ * MetaPost EPS input fixes for prologues:=0;
+ * a2ping.pl -v --papersize=50,60 --bboxfrom=compute-gs t.ps t2.ps
+ * consistent bbox, --PageSize, /PageSize handling
+ * consistent --Resolution and --Duplex handling
+
+=head2 2003/12/02 (Szabó Péter)
+
+ * --bboxfrom=compute-gs option to fix PS -> EPS bbox (gs -sDEVICE=bbox), tuzv.eps
+
+=head2 2004/02/10 v2.77 (Szabó Péter)
+
+ * the compute-pipe routine is now run unless --bboxfrom=guess with EPS
+ * added --gsextra=
+ * added --antialias=
+ * added FileFormat PBM, PGM, PPM
+ * separated FileFormat features to FL_* constants
+ * added --doc
+ * there is no default FileFormat (PDF) anymore
diff --git a/Build/source/texk/tetex/allcm b/Build/source/texk/tetex/allcm
new file mode 100755
index 00000000000..945c7c88457
--- /dev/null
+++ b/Build/source/texk/tetex/allcm
@@ -0,0 +1,118 @@
+#!/bin/sh
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+progname=`basename $0`
+tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$
+
+case "$progname" in
+ allec)
+ encoding=T1;;
+ *)
+ encoding=OT1;;
+esac
+
+case "$1" in
+ -r)
+ DVIPS=dvired
+ shift
+ ;;
+ *)
+ DVIPS=dvips
+ ;;
+esac
+
+body()
+{
+ cat <<-'eof'
+ \pagestyle{empty}
+ \parindent0in
+ \hfuzz=\maxdimen
+ \hbadness=10000
+ \textheight9.5in
+ \textwidth6.5in
+ \newcommand{\myformula}{\sum a_{b_{c_d}} = c}
+ \newcommand{\mytext}{text $\mathcal{\myformula}\mathrm{\myformula}
+ \mathbf{\myformula}\mathsf{\myformula}\mathtt{\myformula}
+ \mathnormal{\myformula}\mathit{\myformula}$}
+
+ \newcommand{\TestSizes}{{%
+ \tiny \mytext\scriptsize \mytext\footnotesize \mytext\small \mytext
+ \normalsize \mytext
+ \large \mytext\Large \mytext\LARGE \mytext\huge \mytext\Huge \mytext}}
+ \newcommand{\TestRM}{rm-family: {\rmfamily\TestSizes}\newline}
+ \newcommand{\TestSF}{sf-family: {\sffamily\TestSizes}\newline}
+ \newcommand{\TestTT}{tt-family: {\ttfamily\TestSizes}\newline}
+ \newcommand{\TestFamilies}{\TestRM\TestSF\TestTT\newline}
+ \newcommand{\TestMD}{md-series: {\mdseries\TestFamilies}}
+ \newcommand{\TestBF}{bf-series: {\bfseries\TestFamilies}}
+ \newcommand{\TestSeries}{\TestBF\TestMD\par}
+ \newcommand{\TestUP}{up-shape: {\upshape\TestSeries}\par}
+ \newcommand{\TestIT}{it-shape: {\itshape\TestSeries}\par}
+ \newcommand{\TestSL}{sl-shape: {\slshape\TestSeries}\par}
+ \newcommand{\TestSC}{sc-shape: {\scshape\TestSeries}\par}
+ \newcommand{\TestShapes}{\TestUP\TestIT\TestSL\TestSC}
+ \begin{document}
+ \TestShapes
+ \end{document}
+eof
+}
+
+head()
+{
+ echo '\documentclass['$1'pt]{article}'
+ echo '\usepackage['$encoding']{fontenc}'
+}
+
+# before we create the tmpdir, set trap for cleanup
+trap '
+ rm -rf $tmpdir
+ exit 1
+' 1 2 3 7 13 15
+
+(umask 077; mkdir "$tmpdir") || {
+ echo "$progname: failed to create temp directory." >&2
+ exit 1
+}
+
+cd $tmpdir || exit 1
+echo >&2
+echo "---------------------------------------------------------------------" >&2
+echo ">>>>>>>>>>> Generating testfiles for 10pt, 11pt and 12pt. <<<<<<<<<<" >&2
+echo "---------------------------------------------------------------------" >&2
+head 10 > allcm10.tex
+head 11 > allcm11.tex
+head 12 > allcm12.tex
+body >> allcm10.tex
+body >> allcm11.tex
+body >> allcm12.tex
+
+echo >&2
+echo "---------------------------------------------------------------------" >&2
+echo ">>>>>>>>>>> Calling latex... <<<<<<<<<<" >&2
+echo "---------------------------------------------------------------------" >&2
+latex allcm10 >/dev/null
+latex allcm11 >/dev/null
+latex allcm12 >/dev/null
+
+echo >&2
+echo "---------------------------------------------------------------------" >&2
+echo ">>>>>>>>>>> Now, calling $DVIPS to make missing fonts... <<<<<<<<<<" >&2
+echo "---------------------------------------------------------------------" >&2
+$DVIPS ${1+"$@"} -V -f allcm10 > /dev/null
+$DVIPS ${1+"$@"} -V -f allcm11 > /dev/null
+$DVIPS ${1+"$@"} -V -f allcm12 > /dev/null
+
+cd /
+rm -rf $tmpdir
diff --git a/Build/source/texk/tetex/allcm.man b/Build/source/texk/tetex/allcm.man
new file mode 100644
index 00000000000..fe75f4ef6d3
--- /dev/null
+++ b/Build/source/texk/tetex/allcm.man
@@ -0,0 +1,28 @@
+.TH allcm 1 "11/94" "teTeX" "teTeX"
+.SH NAME
+allcm \- force the most important Computer\-Modern\-fonts to be calculated
+.SH SYNOPSIS
+.B allcm [-r]
+.SH DESCRIPTION
+.I allcm
+forces a large number of Computer Modern Fonts to be calculated as pixel files.
+This is done through running
+.IR dvips (1)
+over a certain test-file. Therefore, the fonts are created in the resolution
+needed by dvips.
+
+If the \-r flag is specified, the command
+.IR dvired (1)
+will be used instead of dvips.
+
+.I allcm
+does not recalculate existing fonts (as long as the Metafont mode does not change).
+
+.SH "SEE ALSO"
+allec(1),
+allneeded(1),
+dvips(1),
+dvired(1).
+
+.SH AUTHOR
+Thomas Esser <te@dbs.uni-hannover.de>
diff --git a/Build/source/texk/tetex/allec.man b/Build/source/texk/tetex/allec.man
new file mode 100644
index 00000000000..56bf87a60c5
--- /dev/null
+++ b/Build/source/texk/tetex/allec.man
@@ -0,0 +1,28 @@
+.TH alldc 1 "11/94" "teTeX" "teTeX"
+.SH NAME
+allec \- force the most important ec\-fonts to be calculated
+.SH SYNOPSIS
+.B allec [\-r]
+.SH DESCRIPTION
+.I allec
+forces a large number of ec-style Fonts to be calculated as pixel files.
+This is done through running
+.IR dvips (1)
+over a certain test-file. Therefore, the fonts are created in the resolution
+needed by dvips.
+
+If the \-r flag is specified, the command
+.IR dvired (1)
+will be used instead of dvips.
+
+.I alldc
+does not recalculate existing fonts (as long as the Metafont mode does not change).
+
+.SH "SEE ALSO"
+allcm(1),
+allneeded(1),
+dvips(1),
+dvired(1).
+
+.SH AUTHOR
+Thomas Esser <te@dbs.uni-hannover.de>
diff --git a/Build/source/texk/tetex/allneeded b/Build/source/texk/tetex/allneeded
new file mode 100755
index 00000000000..15c62c84adb
--- /dev/null
+++ b/Build/source/texk/tetex/allneeded
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+progname=`basename $0`
+dvired=false
+
+case $1 in
+-r) DVIPS="dvips -x707"
+ shift;;
+*) DVIPS=dvips;;
+esac
+
+case $# in
+0) echo "Usage: $progname [-r] files ..." >&2
+ exit ;;
+esac
+
+findopt=
+dvipsopt=
+
+for i
+do
+ if [ -f $i ] || [ -d $i ]; then
+ findopt="$findopt $i"
+ else
+ dvipsopt="$dvipsopt $i"
+ fi
+done
+
+find $findopt -name \*.dvi -type f -print |
+ while true; do
+ read i
+ test -z "$i" && exit
+ echo "processing file '$i' ..."
+ $DVIPS $dvipsopt -f "$i" >/dev/null
+ echo
+ done
diff --git a/Build/source/texk/tetex/allneeded.man b/Build/source/texk/tetex/allneeded.man
new file mode 100644
index 00000000000..7d9a67548b7
--- /dev/null
+++ b/Build/source/texk/tetex/allneeded.man
@@ -0,0 +1,30 @@
+.TH allneeded 1 "11/94" "teTeX" "teTeX"
+.SH NAME
+allneeded \- force the calculation of all fonts now needed
+.SH SYNOPSIS
+.B allneeded [\-r] files ...
+.SH DESCRIPTION
+.I allneeded
+forces the calculation of all fonts that are needed to preview a set of
+dvi files. Just specify where the program should search for files on the
+commandline.
+The fonts generation is triggered by running
+.IR dvips (1)
+over all accessible dvi\-files. Therefore, the fonts are created in the resolution
+needed by dvips.
+
+If the \-r flag is specified, the command
+.IR dvired (1)
+will be used instead of dvips.
+
+.I allneeded
+does not recalculate existing fonts (as long as the Metafont mode does not change).
+
+.SH "SEE ALSO"
+allec(1),
+allcm(1),
+dvips(1),
+dvired(1).
+
+.SH AUTHOR
+Thomas Esser <te@dbs.uni-hannover.de>
diff --git a/Build/source/texk/tetex/configure b/Build/source/texk/tetex/configure
new file mode 100755
index 00000000000..87f89bc1c7d
--- /dev/null
+++ b/Build/source/texk/tetex/configure
@@ -0,0 +1,1605 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer"
+ac_help="$ac_help
+ --without-mktexmf-default do not run mktexmf if MF source missing"
+ac_help="$ac_help
+ --without-mktexpk-default do not run mktexpk if PK font missing"
+ac_help="$ac_help
+ --without-mktextfm-default do not run mktextfm if TFM file missing"
+ac_help="$ac_help
+ --without-mkocp-default do not run mkocp if OCP file missing"
+ac_help="$ac_help
+ --without-mkofm-default do not run mkofm if OFM file missing"
+ac_help="$ac_help
+ --with-mktexfmt-default run mktexfmt if format file missing"
+ac_help="$ac_help
+ --with-mktextex-default run mktextex if TeX source missing"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+ac_config_files=
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_envvar| sed 's/[_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: invalid variable name: $ac_envvar" 1>&2; exit 1; }
+ fi
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=texconfig
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:557: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ if test -z "$COMSPEC"; then ac_x=-f; else ac_x=-x; fi
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test $ac_x $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:588: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ if test -z "$COMSPEC"; then ac_x=-f; else ac_x=-x; fi
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test $ac_x $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:640: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ if test -z "$COMSPEC"; then ac_x=-f; else ac_x=-x; fi
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test $ac_x $ac_dir/$ac_word; then
+ ac_cv_prog_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:673: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 684 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:715: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:720: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:729: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:748: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ case $ac_dir in
+ /*|[A-z]:/*) ac_aux_dir=$ac_dir;;
+ *) ac_aux_dir=`pwd`/$ac_dir;;
+ esac
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ case $ac_dir in
+ /*|[A-z]:/*) ac_aux_dir=$ac_dir;;
+ *) ac_aux_dir=`pwd`/$ac_dir;;
+ esac
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:816: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ # Hack for MSDOS and descendants.
+ if test -z "$COMSPEC"; then ac_x=-f; else ac_x=-x; fi
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test $ac_x $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:871: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ rm -f conftestdata
+# MS-DOS is a special case, because it sort of pretends that ln -s
+# works for executables.
+if test -z "$COMSPEC" && ln -s X conftestdata 2>/dev/null
+then
+ rm -f conftestdata
+ ac_cv_prog_LN_S="ln -s"
+else
+ ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:894: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+
+echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
+echo "configure:923: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+ USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6
+ if test "x$USE_MAINTAINER_MODE" = xyes; then
+ MAINT=
+ else
+ MAINT='#M#'
+ fi
+
+
+
+echo $ac_n "checking for loader (symbol LD)""... $ac_c" 1>&6
+echo "configure:942: checking for loader (symbol LD)" >&5
+if eval "test \"`echo '$''{'cf_cv_subst_LD'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+test -z "$LD" && LD=ld
+cf_cv_subst_LD=$LD
+fi
+
+LD=${cf_cv_subst_LD}
+echo "$ac_t""$LD" 1>&6
+
+
+echo $ac_n "checking for archiver (symbol AR)""... $ac_c" 1>&6
+echo "configure:956: checking for archiver (symbol AR)" >&5
+if eval "test \"`echo '$''{'cf_cv_subst_AR'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+test -z "$AR" && AR=ar
+cf_cv_subst_AR=$AR
+fi
+
+AR=${cf_cv_subst_AR}
+echo "$ac_t""$AR" 1>&6
+
+
+echo $ac_n "checking for archiver options (symbol ARFLAGS)""... $ac_c" 1>&6
+echo "configure:970: checking for archiver options (symbol ARFLAGS)" >&5
+if eval "test \"`echo '$''{'cf_cv_subst_ARFLAGS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+test -z "$ARFLAGS" && ARFLAGS=rc
+cf_cv_subst_ARFLAGS=$ARFLAGS
+fi
+
+ARFLAGS=${cf_cv_subst_ARFLAGS}
+echo "$ac_t""$ARFLAGS" 1>&6
+
+
+
+# Check whether --with-mktexmf-default or --without-mktexmf-default was given.
+if test "${with_mktexmf_default+set}" = set; then
+ withval="$with_mktexmf_default"
+ :
+else
+ with_mktexmf_default=yes
+fi
+
+# Check whether --with-mktexpk-default or --without-mktexpk-default was given.
+if test "${with_mktexpk_default+set}" = set; then
+ withval="$with_mktexpk_default"
+ :
+else
+ with_mktexpk_default=yes
+fi
+
+# Check whether --with-mktextfm-default or --without-mktextfm-default was given.
+if test "${with_mktextfm_default+set}" = set; then
+ withval="$with_mktextfm_default"
+ :
+else
+ with_mktextfm_default=yes
+fi
+
+# Check whether --with-mkocp-default or --without-mkocp-default was given.
+if test "${with_mkocp_default+set}" = set; then
+ withval="$with_mkocp_default"
+ :
+else
+ with_mkocp_default=yes
+fi
+
+# Check whether --with-mkofm-default or --without-mkofm-default was given.
+if test "${with_mkofm_default+set}" = set; then
+ withval="$with_mkofm_default"
+ :
+else
+ with_mkofm_default=yes
+fi
+
+# Check whether --with-mktexfmt-default or --without-mktexfmt-default was given.
+if test "${with_mktexfmt_default+set}" = set; then
+ withval="$with_mktexfmt_default"
+ :
+fi
+
+# Check whether --with-mktextex-default or --without-mktextex-default was given.
+if test "${with_mktextex_default+set}" = set; then
+ withval="$with_mktextex_default"
+ with_mktextex_default=yes
+else
+ with_mktextex_default=no
+fi
+
+
+echo $ac_n "checking where the main texmf tree is located""... $ac_c" 1>&6
+echo "configure:1040: checking where the main texmf tree is located" >&5
+texmfmain=
+if test "x$datadir" != 'x${prefix}/share'; then
+ # First case, datadir is defined...
+ eval p=\"$datadir\"
+ # Unconditionally set the directory, but...
+ texmfmain=`echo "$p/texmf" | sed 's,//*,/,g'`
+ # ... do complain if it wasn't found.
+ if test -d "$texmfmain"; then
+ echo "$ac_t"""$texmfmain"" 1>&6
+ else
+ echo "$ac_t""not found" 1>&6
+ echo "configure: warning: No texmf tree found at $texmfmain.
+ *****************************************************************
+ * Error: The main texmf tree was not found. *
+ * If you do not have the files, you should be able to them from *
+ * the same place you got these sources from, or from one of the *
+ * CTAN hosts. *
+ *****************************************************************
+ Winging it." 1>&2
+ fi
+else
+ # Second case, datadir is default...
+ if test "x$prefix" = "xNONE"; then
+ p="$ac_default_prefix"
+ else
+ eval p=\"$prefix\"
+ fi
+ for e in share/texmf lib/texmf texmf; do
+ if test -d "$p/$e"; then
+ texmfmain='${prefix}'/"$e"
+ break
+ fi
+ done
+ if test -z "$texmfmain" && test "x$prefix" = "xNONE"; then
+ # Still no texmfmain found, no prefix set, perhaps kpsewhich is
+ # installed and can help us out.
+ texmfmain=`kpsewhich --expand-path='$TEXMFMAIN'` 2>/dev/null
+ fi
+ texmfmain=`echo "$texmfmain" | sed 's,//*,/,g'`
+ if test -n "$texmfmain"; then
+ echo "$ac_t"""$texmfmain"" 1>&6
+ else
+ eval texmfmain="$datadir/texmf"
+ echo "$ac_t""not found" 1>&6
+ echo "configure: warning: The main texmf tree was not found at $texmfmain.
+ *****************************************************************
+ * Error: The main texmf tree was not found. *
+ * Use the --datadir option to specify its parent directory. *
+ * If you do not have the files, you should be able to them from *
+ * the same place you got these sources from, or from one of the *
+ * CTAN hosts. *
+ *****************************************************************
+ Winging it by pretending $texmfmain is correct." 1>&2
+ fi
+fi
+
+
+
+ac_config_files="$ac_config_files Makefile"
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+
+trap 'rm -fr `echo "$ac_config_files " | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@CC@%$CC%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@LN_S@%$LN_S%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@MAINT@%$MAINT%g
+s%@LD@%$LD%g
+s%@AR@%$AR%g
+s%@ARFLAGS@%$ARFLAGS%g
+s%@texmfmain@%$texmfmain%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"$ac_config_files"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*|[A-z]:/*) # Absolute path.
+ srcdir="$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ "") ;;
+ [/$]*|[A-z]:/*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ rm -f conftest.in
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%:% $ac_given_srcdir/%g" -e "s%^%$ac_given_srcdir/%"`
+ cat $ac_file_inputs > conftest.in
+ #
+ # Replace lines of the form ac_include foo with the contents of foo:
+ # first, from the ac_include lines construct a list of file names.
+ # From that list, we construct a second list of those files that exist.
+ # Then we construct lists of sed commands for including those files,
+ # and a sed command that removes the ac_include lines. We don't attempt
+ # to read non-existent files because some (buggy) versions of sed choke
+ # on this. Have to use sed because old (Ultrix, SunOS) awk does not support
+ # getline or system. (Anyway, configure scripts aren't supposed to use awk.)
+ # Can't use only one -e and commands {dr foo} because foo has to be last.
+ # Be careful, because the filename may contain /. Be careful with
+ # whitespace; we need to use echo.
+ #
+ file_substs=`sed -n '/^ac_include/s%ac_include[ ]*\(.*\)%\1%p' conftest.in`
+ # Create the sed command line ...
+ if test -n "$file_substs"; then
+ echo "configure: warning: ac_include is obsolete; instead use kpse_include" 1>&2
+ file_subst_cmd="sed -e 's/^ac_include/kpse_include/'"
+ else
+ file_subst_cmd='sed'
+ fi
+ kpse_substs=`sed -n '/^kpse_include/s%kpse_include[ ]*\(.*\)%\1%p' conftest.in`
+ for ac_inc in $file_substs $kpse_substs; do
+ if test -f "$ac_given_srcdir/$ac_inc"; then
+ ac_mung=`echo $ac_inc | sed 's,/,%,g'`
+ file_subst_cmd="$file_subst_cmd -e '/^kpse_include $ac_mung$/r $ac_given_srcdir/$ac_inc'"
+ fi
+ done
+ file_subst_cmd="$file_subst_cmd -e '/^kpse_include/d'"
+ # ... and fix the whitespace and escaped slashes.
+ file_subst_cmd=`echo "$file_subst_cmd" | sed -e 's,%,\\\/,g' \
+-e 's/kpse_include /kpse_include[ ]*/g'`
+ # I can't find any way to do variable substitution in the sed commands
+ # (so the user could have, e.g., $top_srcdir in their ac_include line).
+ (eval $file_subst_cmd conftest.in) \
+ | sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s* conftest.in
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ].*$%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS=""
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%:% $ac_given_srcdir/%g" -e "s%^%$ac_given_srcdir/%"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file and --srcdir arguments so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ for ac_arg in $ac_configure_args; do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case "$ac_arg" in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
+ esac
+ done
+
+ for ac_config_dir in : $subdirs; do
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ if test ! -d $srcdir/$ac_config_dir; then
+ continue
+ fi
+
+ echo configuring in $ac_config_dir
+
+ case "$srcdir" in
+ .) ;;
+ *)
+ if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :;
+ else
+ { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; }
+ fi
+ ;;
+ esac
+
+ ac_popdir=`pwd`
+ cd $ac_config_dir
+
+ # A "../" for each directory in /$ac_config_dir.
+ ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
+
+ case "$srcdir" in
+ .) # No --srcdir option. We are building in place.
+ ac_sub_srcdir=$srcdir ;;
+ /*|[A-z]:/*) # Absolute path.
+ ac_sub_srcdir=$srcdir/$ac_config_dir ;;
+ *) # Relative path.
+ ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
+ esac
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f ./configure; then
+ ac_sub_configure=./configure
+ elif test -f $ac_sub_srcdir/configure; then
+ ac_sub_configure=$ac_sub_srcdir/configure
+ elif test -f $ac_sub_srcdir/configure.in; then
+ ac_sub_configure=$ac_configure
+ else
+ echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+
+ # Make the cache file name correct relative to the subdirectory.
+ case "$cache_file" in
+ /*|[A-z]:/*) ac_sub_cache_file=$cache_file ;;
+ *) # Relative path.
+ ac_sub_cache_file="$ac_dots$cache_file" ;;
+ esac
+ case "$ac_given_INSTALL" in
+ "") ;;
+ [/$]*|[A-z]:/*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
+ # The eval makes quoting arguments work.
+ if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
+ then :
+ else
+ { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; }
+ fi
+ fi
+
+ cd $ac_popdir
+ done
+fi
+
diff --git a/Build/source/texk/tetex/configure.in b/Build/source/texk/tetex/configure.in
new file mode 100644
index 00000000000..fcaf2e14755
--- /dev/null
+++ b/Build/source/texk/tetex/configure.in
@@ -0,0 +1,12 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(texconfig)
+
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+sinclude(../kpathsea/withenable.ac)
+
+KPSE_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/Build/source/texk/tetex/depend.mak b/Build/source/texk/tetex/depend.mak
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/tetex/depend.mak
diff --git a/Build/source/texk/tetex/doc/Makefile b/Build/source/texk/tetex/doc/Makefile
new file mode 100644
index 00000000000..9c5a1ac5e69
--- /dev/null
+++ b/Build/source/texk/tetex/doc/Makefile
@@ -0,0 +1,28 @@
+default: pdf ps dvi clean
+
+TETEXDOC.pdf: TETEXDOC.tex
+ pdflatex TETEXDOC
+ bibtex TETEXDOC
+ pdflatex TETEXDOC
+ pdflatex TETEXDOC
+ thumbpdf TETEXDOC
+ pdflatex TETEXDOC
+
+TETEXDOC.dvi: TETEXDOC.tex
+ latex TETEXDOC
+ bibtex TETEXDOC
+ latex TETEXDOC
+ latex TETEXDOC
+
+TETEXDOC.ps: TETEXDOC.dvi
+ dvips TETEXDOC -o
+
+clean:
+ rm -f TETEXDOC.aux TETEXDOC.log TETEXDOC.lot thumb???.png TETEXDOC.out TETEXDOC.tex~ TETEXDOC.toc thumbdta.tex thumbpdf.log thumbpdf.pdf TETEXDOC.blg TETEXDOC.bbl TETEXDOC.tpt auto
+
+veryclean: clean
+ rm -f TETEXDOC.pdf TETEXDOC.dvi TETEXDOC.ps
+
+pdf: TETEXDOC.pdf
+dvi: TETEXDOC.dvi
+ps: TETEXDOC.ps
diff --git a/Build/source/texk/tetex/doc/TETEXDOC.bib b/Build/source/texk/tetex/doc/TETEXDOC.bib
new file mode 100644
index 00000000000..57bf15c8d33
--- /dev/null
+++ b/Build/source/texk/tetex/doc/TETEXDOC.bib
@@ -0,0 +1,15 @@
+ @Book{Knuth:1984:M,
+ author = "Donald E. Knuth",
+ title = "The {\MF}book",
+ publisher = "Addison-Wesley",
+ year = "1984",
+ }
+
+ @Book{Lamport:1994:LDP,
+ author = "Leslie Lamport",
+ title = "{\LaTeX}: {A} Document Preparation System",
+ publisher = "Addison-Wesley",
+ year = "1994",
+ edition = "2nd",
+ }
+
diff --git a/Build/source/texk/tetex/doc/TETEXDOC.dvi b/Build/source/texk/tetex/doc/TETEXDOC.dvi
new file mode 100644
index 00000000000..a246385ce54
--- /dev/null
+++ b/Build/source/texk/tetex/doc/TETEXDOC.dvi
Binary files differ
diff --git a/Build/source/texk/tetex/doc/TETEXDOC.pdf b/Build/source/texk/tetex/doc/TETEXDOC.pdf
new file mode 100644
index 00000000000..69649b88a8c
--- /dev/null
+++ b/Build/source/texk/tetex/doc/TETEXDOC.pdf
Binary files differ
diff --git a/Build/source/texk/tetex/doc/TETEXDOC.ps b/Build/source/texk/tetex/doc/TETEXDOC.ps
new file mode 100644
index 00000000000..d6147b94bf0
--- /dev/null
+++ b/Build/source/texk/tetex/doc/TETEXDOC.ps
@@ -0,0 +1,4418 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
+%%Title: TETEXDOC.dvi
+%%Pages: 20
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 595 842
+%%DocumentFonts: Palatino-Roman Palatino-Bold LOGO10
+%%+ LMTypewriter10-Regular CMSY10 Symbol CMMI10 LMTypewriter10-Italic
+%%+ Palatino-Italic Palatino-BoldItalic LMTypewriterSlanted10-Italic
+%%+ LOGOSL10
+%%DocumentPaperSizes: a4
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips TETEXDOC -o
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2005.08.22:0920
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: 8r.enc 0 0
+% File 8r.enc TeX Base 1 Encoding Revision 2.0 2002-10-30
+%
+% @@psencodingfile@{
+% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry,
+% W. Schmidt, P. Lehman",
+% version = "2.0",
+% date = "30 October 2002",
+% filename = "8r.enc",
+% email = "tex-fonts@@tug.org",
+% docstring = "This is the encoding vector for Type1 and TrueType
+% fonts to be used with TeX. This file is part of the
+% PSNFSS bundle, version 9"
+% @}
+%
+% The idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard encoding, ISO Latin 1, Windows ANSI including the euro symbol,
+% MacRoman, and some extra characters from Lucida.
+%
+% Character code assignments were made as follows:
+%
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+%
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+%
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+% These are /dotlessj /ff /ffi /ffl.
+%
+% (4) hyphen appears twice for compatibility with both ASCII and Windows.
+%
+% (5) /Euro was assigned to 128, as in Windows ANSI
+%
+% (6) Missing characters from MacRoman encoding incorporated as follows:
+%
+% PostScript MacRoman TeXBase1
+% -------------- -------------- --------------
+% /notequal 173 0x16
+% /infinity 176 0x17
+% /lessequal 178 0x18
+% /greaterequal 179 0x19
+% /partialdiff 182 0x1A
+% /summation 183 0x1B
+% /product 184 0x1C
+% /pi 185 0x1D
+% /integral 186 0x81
+% /Omega 189 0x8D
+% /radical 195 0x8E
+% /approxequal 197 0x8F
+% /Delta 198 0x9D
+% /lozenge 215 0x9E
+%
+/TeXBase1Encoding [
+% 0x00
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef /breve
+ /minus /.notdef /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi /dotlessj /ff
+ /ffi /ffl /notequal /infinity
+ /lessequal /greaterequal /partialdiff /summation
+ /product /pi /grave /quotesingle
+% 0x20
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus
+ /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three
+ /four /five /six /seven
+ /eight /nine /colon /semicolon
+ /less /equal /greater /question
+% 0x40
+ /at /A /B /C
+ /D /E /F /G
+ /H /I /J /K
+ /L /M /N /O
+% 0x50
+ /P /Q /R /S
+ /T /U /V /W
+ /X /Y /Z /bracketleft
+ /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c
+ /d /e /f /g
+ /h /i /j /k
+ /l /m /n /o
+% 0x70
+ /p /q /r /s
+ /t /u /v /w
+ /x /y /z /braceleft
+ /bar /braceright /asciitilde /.notdef
+% 0x80
+ /Euro /integral /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /Omega /radical /approxequal
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /Delta /lozenge /Ydieresis
+% 0xA0
+ /.notdef /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot /hyphen /registered /macron
+% 0xD0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde
+ /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
+
+
+%%EndProcSet
+%%BeginProcSet: ec-lm.enc 0 0
+/enceclm[
+/grave
+/acute
+/circumflex
+/tilde
+/dieresis
+/hungarumlaut
+/ring
+/caron
+/breve
+/macron
+/dotaccent
+/cedilla
+/ogonek
+/quotesinglbase
+/guilsinglleft
+/guilsinglright
+/quotedblleft
+/quotedblright
+/quotedblbase
+/guillemotleft
+/guillemotright
+/endash
+/emdash
+/cwm
+/perthousandzero
+/dotlessi
+/dotlessj
+/ff
+/fi
+/fl
+/ffi
+/ffl
+/visiblespace
+/exclam
+/quotedbl
+/numbersign
+/dollar
+/percent
+/ampersand
+/quoteright
+/parenleft
+/parenright
+/asterisk
+/plus
+/comma
+/hyphen
+/period
+/slash
+/zero
+/one
+/two
+/three
+/four
+/five
+/six
+/seven
+/eight
+/nine
+/colon
+/semicolon
+/less
+/equal
+/greater
+/question
+/at
+/A
+/B
+/C
+/D
+/E
+/F
+/G
+/H
+/I
+/J
+/K
+/L
+/M
+/N
+/O
+/P
+/Q
+/R
+/S
+/T
+/U
+/V
+/W
+/X
+/Y
+/Z
+/bracketleft
+/backslash
+/bracketright
+/asciicircum
+/underscore
+/quoteleft
+/a
+/b
+/c
+/d
+/e
+/f
+/g
+/h
+/i
+/j
+/k
+/l
+/m
+/n
+/o
+/p
+/q
+/r
+/s
+/t
+/u
+/v
+/w
+/x
+/y
+/z
+/braceleft
+/bar
+/braceright
+/asciitilde
+/hyphenchar
+/Abreve
+/Aogonek
+/Cacute
+/Ccaron
+/Dcaron
+/Ecaron
+/Eogonek
+/Gbreve
+/Lacute
+/Lcaron
+/Lslash
+/Nacute
+/Ncaron
+/Eng
+/Ohungarumlaut
+/Racute
+/Rcaron
+/Sacute
+/Scaron
+/Scommaaccent
+/Tcaron
+/Tcommaaccent
+/Uhungarumlaut
+/Uring
+/Ydieresis
+/Zacute
+/Zcaron
+/Zdotaccent
+/IJ
+/Idotaccent
+/dcroat
+/section
+/abreve
+/aogonek
+/cacute
+/ccaron
+/dcaron
+/ecaron
+/eogonek
+/gbreve
+/lacute
+/lcaron
+/lslash
+/nacute
+/ncaron
+/eng
+/ohungarumlaut
+/racute
+/rcaron
+/sacute
+/scaron
+/scommaaccent
+/tcaron
+/tcommaaccent
+/uhungarumlaut
+/uring
+/ydieresis
+/zacute
+/zcaron
+/zdotaccent
+/ij
+/exclamdown
+/questiondown
+/sterling
+/Agrave
+/Aacute
+/Acircumflex
+/Atilde
+/Adieresis
+/Aring
+/AE
+/Ccedilla
+/Egrave
+/Eacute
+/Ecircumflex
+/Edieresis
+/Igrave
+/Iacute
+/Icircumflex
+/Idieresis
+/Eth
+/Ntilde
+/Ograve
+/Oacute
+/Ocircumflex
+/Otilde
+/Odieresis
+/OE
+/Oslash
+/Ugrave
+/Uacute
+/Ucircumflex
+/Udieresis
+/Yacute
+/Thorn
+/Germandbls
+/agrave
+/aacute
+/acircumflex
+/atilde
+/adieresis
+/aring
+/ae
+/ccedilla
+/egrave
+/eacute
+/ecircumflex
+/edieresis
+/igrave
+/iacute
+/icircumflex
+/idieresis
+/eth
+/ntilde
+/ograve
+/oacute
+/ocircumflex
+/otilde
+/odieresis
+/oe
+/oslash
+/ugrave
+/uacute
+/ucircumflex
+/udieresis
+/yacute
+/thorn
+/germandbls
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginFont: LOGOSL10
+%!PS-AdobeFont-1.0: LOGOSL10 001.000
+%%CreationDate: Mon Mar 23 20:45:28 1998
+%%VMusage: 120000 150000
+11 dict begin
+/FontInfo 14 dict dup begin
+/version (001.002) readonly def
+/Notice (Copyright (c) Taco Hoekwater, 1998. All rights reserved.) readonly def
+/FullName (LOGOSL10) readonly def
+/FamilyName (LOGOSL10) readonly def
+/ItalicAngle -12 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/Weight (Medium) readonly def
+end readonly def
+/FontName /LOGOSL10 def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 65 /A put
+dup 69 /E put
+dup 70 /F put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 84 /T put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/FontBBox {80 -11 867 611} readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A989B9974B0179FC6CC445BCF7C3C3333173232E3FDBFF43949
+1DB866C39088C203DC22FDC758584860EC7BB67FDA28CC6208249060E18FAB32
+204779B5C03C0493BBBBC95CF02692CC4DEAA8D2EA90B5C2E64374E92BCB8501
+429B8FAE4A76C0C6B76D6FF7CF9A7D5EDFBCA0E959541C59BD05B7DE43D25D53
+FC3DDA6EF0C2743978A6D03E19CCED4A11F2EA4BCC3110BE8B8D9E2772361969
+C19258EFAFDC276CB1ADE9208A941A36D18F9FB1C33DEF76AA315DDB006FF6DD
+021DCB16DF22A06DEFEF321C9A6AD3438C1AC51101B9F0B5A58131C9E1B7F3F7
+99DF425FB082BD1A4F860045983FED432A5DDFF5F662AD5982E19BBBD9065C40
+84A971EAD143FD5C9B8356EE756EE868F10F3AEBAC1F6B156F1669DCF81236B2
+7AD9D84124DC4763A119E727FA68443264A417174B48F87CE901AE946C181A57
+14CC1AAC16D2DD454F66A2B236C3B8956FCCCD5F3E641424CD4E7C8A80669EDE
+38230CB6EBD34E8C695FBC0AC71C522B76B282E39BB9037B7DB5E674FDA46992
+285C11C9368735A56DE3C98CD2A9BD1844354114D388195B5085B35B72D505C1
+CC6F1965CCDFAEC9FD71EFD275FE7F79F8AF7AA8A74C652323C4D42534765583
+319BF3C64213DF59C7B564BF88AD7B5BA1680E560D903D7241469E52FE7755C3
+37489EE62344B46C7111A3FD1892B2E9622F38D8E7D4C2B8DB307129608A5C15
+57E5A15C48D6F579E6E0D7E78694CE0F16DCC3C71BFE541FF2235D4A9ED6B30E
+D71BCAE9A07F4F3EF87F4BA198BC1B16384AEE950AD0C629CDF5A515C02916C6
+3101816F86AB235E8311677B1C0CB9960CC95B7B2F417EFF4B900033051A26F3
+19723E7F3F1A822A0D6A8BD3E5D64103FCE62418A13FE940B948290D3423E7E4
+F90E877FF56688E40CC5FBCE2150CE744155036B7AA544E9E8642BF1F64CB500
+7FE0EDB98C59F0A1D2BEE89CFD1F9A393D0C473067F9EAE3BBD6D534CD7D6F41
+2272657FEBC48EE2AFFB799D56E70C72A5E9D273D7752ECC5CE29F2918E473D4
+9B5DCB81EC6F568579EC441C243A19B1B18AA9F5031F38896470A92B47933300
+33D0AE6F131B9AEA54270C0E9012C6B763746FC02775669B71DDA41C7AA161B5
+3A5AAA7A2C22B676A72C3AE53A7D864F2C9EC71EFCF46C2A89AC6E6A8E718F54
+C872C3E81A5DC5452910BE92A99C1A4F3B900C34193E943B535735FB2F12E8DF
+9C6EF0F015C8186E873EE253CB1FDEE159CBE02CC693E75F31B6A4ACCE2F57DB
+09F588CB2E2F6DF0ED394027EE29C7D5CF4B72E15A5D08BA578577914082D893
+37BBAB23E0ADEEBC3AFC1246132EC1048E65BE4CC71CBA58BD657148EA16CE8A
+C8D24A16BA310093EF919AB33B2CE23FBC41176046BB4F80299981A736C2D926
+3A3C257B6FF102DAC6C24D85FF2E3D65C1BDA13330535CEF85B276CBFB9FD23C
+CEA0E198B083DED753BF8D2CA7BE0BB40818A8B33CF10082122D640C5716DCFF
+D1E00AA917E3EE256DF9E7AD626732ABCCED40FE054FAD9A3878CFF5D5335D62
+A28B3F6101606CF7C30D049EF7CDCF8B7ECBDD9B38EEF82798CB22FF597FFA6B
+731A569EDF2DEFB3F1FCF6FFDE71C08C07BB524E435A4C74335FC30388AB9DBF
+29DE92EDB00E5A6601942AF6BF15C4E13494B1F189EFA992C79E2C1781FF28A7
+9B850F540219F17771D7894CD84B0DBD1E19B5C738F9B199397C7715771F1A70
+1DB732D7146B669394E296015BFF5C5B39A13994B8ABE3FF9173C297E8247331
+A569A3787FD252D8C83035D105CBEBEFA28E65CFE617894E0B349BE481C5160F
+11D7F07A5E4268D6124E4D0B2B6042F198ECC17BA3EBBB38AA2CF020C130B395
+04C1CA9242ADFA228D70F9ED60525AD4F77576F71DD6147E81F75A37CB2F9124
+5FACFB7E80C6E1181ECE2D8BAF7E6CA02C48EAF0E3905A324B695F23D894E914
+C8744EE02E700B01BCEB4BDA4D4E0A2787011D33F99EDAE370993F74EE9AB9FF
+DF41A3A73A838E24F09E7972556FD1DDA71F85C8E28846A47EC9E358A3B3CE64
+7FB1BA78F965B60119844D4D447CC189CBC474EF4090C09143F6294030155D0D
+D45DDA98C89041385402CC8CE6E7086394F9DD45FF3B0F244607EF2FB34A8185
+AA286DF4B2BC4497AF8C24E2792A710F8872A843DEB0E198CD4889B5C7D7B113
+34089402846ED390CE1B274925C48395FBC7E262FD1DDF497BE095D7CB489A54
+D6CA961BD749EECF589C78D5A96182999663FECE5CA605FCC702FDDF972F4083
+2711E4B2BF73888D2B33B78F91B70052B9E606D1B5EECE73C01DDBB3574A19AB
+0123A546B804CFA40A81328C809B4FE190DD8306409436C2EF726BE3ADD8B966
+EFB50F6239786E86175B270C3A38AC3CEDCCA1875616237C93D24AD20D3DCA71
+799CCC4B927ABF202CB546DF8C470C72E9F0F74CD4BCB24742FF7985584E77A1
+74C6AF59E146AF2961AF2CF13B931689C0DA1CF5148FEEF5FA08FD0A9F17FDDD
+4ADD34506F85869D34F2C0A69E144070233A89E98FE795F87B777B9D8006F854
+C0C2CD9173FC82BF7C5B0AD1EA7DBDA530794602CDA10F2A5CE2302E8F26BAFA
+9C5E0D430129872A0AD2EB5858BD9147C47008E934DBF171CE152502BA0782A2
+BBAD96C546DD11456F970FC843163B748EA71E0AEF947E454A6EC6F616B3377D
+6F806CB19722170779F2ACB49A7448E4512325C12D5A4CD5BC5C2130772BF640
+2272BE6D90583E64791B22E467D172DB3CC73FD1769BDBE5434143C537BDFBC1
+2454C334F083F32DAD4D50C181B90AA23BC97C45F1EAEBBF0677CDDA45CEDB04
+384CC7851CF09E517D194AAE6EA8EF3A94FBCCFC72347CB35BB2379251A01C0B
+9E6F7B9D71FAEAAD1600AE405F1664F9F47239557532F7BF38E239E8B89CF2EC
+EFA27FAD49CD98D5C61E372AACC325F26760805CF367DC5E9370720E8FE07097
+2843DEF1D556D70C66
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: LMTypewriterSlanted10-Italic
+%!PS-AdobeFont-1.0: LMTypewriterSlanted10-Italic 0.982
+%%CreationDate: 14th March (Monday), 2005
+% Generated by MetaType1 (a MetaPost-based engine)
+% Copyright 2003--2005 TeX USERS GROUPS. Supported by DANTE eV, GUST, GUTenberg, NTG, and TUG. METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki from GUST (http://www.gust.org.pl).
+% ADL: 611 222 167
+%%EndComments
+FontDirectory/LMTypewriterSlanted10-Italic known{/LMTypewriterSlanted10-Italic findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(0.982)readonly def
+/Notice(Copyright 2003--2005 TeX USERS GROUPS. Supported by DANTE eV, GUST, GUTenberg, NTG, and TUG. METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki from GUST (http://www.gust.org.pl).)readonly def
+/FullName(LMTypewriterSlanted10-Italic)readonly def
+/FamilyName(LMTypewriterSlanted10)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch true def
+/ItalicAngle -9.4626 def
+/UnderlinePosition -167 def
+/UnderlineThickness 69 def
+end readonly def
+/FontName /LMTypewriterSlanted10-Italic def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-190 -316 786 1023}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
+1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
+B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
+4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
+DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
+2AD360A28616CB4A0670C1BF105A2B97A25458EAC07B98B8F1ABC91ED489DF5A
+340A9C333CA5AF409E52EE1BA5629A1DA85B8B9EA3150173A28A696C6B98D060
+4CD8AE5F032FC97BAA1F5394B526DA51B5521D60F8531E0E5A437F5E00E9B683
+3F08ED5C6A216D2CA9C1806AEA6B335CD03C87CB35115D28AF52BF955F7F349A
+C9C2519FBF9D866A7CC0AB363443FFA4831A9FAF41181CC67437D2315BA0438C
+2D2387CED780B0C89728BF50FCD44E9E83FAB34E2B3568C404BBDB093C686442
+E5564018AC82941FDF0090B2667130B244595873A1DEB072567485BBEB0477F6
+888F992F513DF295396DE99FB5C5CFC42730CA862D4989519F10A2B41E877BF8
+796B56A64E370BC6825604BAC0CCDCF9E3158C7D17990FDA792001EC5A633327
+AE101B925A998628DE3EA55C7DED4205D12826355B80974B17BE4B208DFFD62A
+014538F6915CA7F17CBCF3162DC2B6552CEA83FFD009FD57024A15869A1A3340
+96941BC3EBDC45F241325D4D21CAC26D05295623FAF9D5A3903F2C8193D654B3
+9D7C617EE1ABADE6EB4605FF428A9D5B0A83A1030D59B020A25A201A6033AFB6
+E57C106CF62606513C10B6F6B229A8AF1F7A306C5E076AC44CDCF1E8FD5419DF
+89D926A23727CA5EB5B7ED35B46F9C98D396F62E48A09008ECE74217ED8A9FC2
+F0E3457213CF32248D77148ABB19D107C81EEF1B95F1CD1C9FBDB26DD9FA273F
+9875E53E6818E144BAC134CD552829408DF1667CB6A1D0517AE907876BCD8C2B
+43DCEFF90863C51B90ED847CA5BFE8A5C20AAD08B739E78A7C46F597040B6BAA
+6339EFBE067A21861E4D9949324B65DA0ED5A7ECC778455CD0180C702FDB5D2E
+A39F04B20793C8B7592A7399CDCAACCC07D78CA854018EA5B5EB455676E41FB8
+9312963C566164834396822262BF7D306774BDF782B1DD18A4EDBB88D465CFAB
+C650B6CDF174778C899B8AB067BFC47E062DA2DF251991CB652A41E9B3348B6A
+3854E63198BE048693161D0D16E07E3F2CBE8177C98956A36219A3981C363438
+EDB94D25B85BAA191EAD599FC5EB51B2E6058DEA4F847FE19CDBDCF42303C2CC
+1B26C78BF48DB4C29C67CA490B4C76C3A8CD5A2894CBC866E41065DE3F54630F
+FA816168B879E23DDA591D242C1D066E165BF330F4D3A0A807DA8C72ECC64CCD
+BF536AFC7CFA670159556B8E70A34FEB78C9DAC6933B8A61A12051BDA2FB7C69
+92B79CD83E40292315B0EFE711C72EE50DA6ED4BD6582E0925DDC2C0F2F0DA63
+D0CAB3D77B63E54344F80D589438BB8AA51657E0899028F67F64AA534A2AF512
+C1F2BC5BEE9F218015189AD2F4308068FA72E47E611ACD8A387FD8136A7C8046
+657FE87EFB947F6EF31DCC61CDDFC39A27718081823662372FE843423B04039E
+704058DEB846AA6A8B1F6B84939432C6F8249D5179A163671F3FDAFDB62329C8
+91F2FC0CDFB18D8A4D2260DC93D7AC1107B3098B5DE64CE29BC8EAD802462F66
+F3EDF479FDEDA3A981E93EE65123A9456E301532929320D07646B8F4E8CB5171
+09806DD2CB6704EBB0D4389D1217080B7631DB5EB2C1EE447A160AE2CF655A29
+41F1E48A71BAAD560D9987FC1B454037C7BB317932882AE82292FF2FCE4207DE
+C332AC167E282459BDAF6F4C56D862C31ED9A2DED98A79B1993FE3C7F50F9AAC
+0E3EBD9F7431FFB72E03A05ED59A723EA87D7B7EC6CAEB5D464B4F6421A43793
+1A2EBD816C7AC81F42E9372DE5AF671D6B6F27C39FEB34D964638590E25AA60E
+8F85B839667494E68E34391E2542903355658BD278E67696161F756C8DF7D51C
+4905B01ABC6B2D707F1BF8FE2E9CC4384B16934083213CC51CBF9538EEE06665
+1BC3431A6C426CC298540C1441477B022F220DC7C268E27F7F90ABB168FF8DD6
+EC74957607DB3ED0285C3F4521A664FC2FD52A7DFDC782E94787CAD9B657C53F
+197D8E3C4D46C308D4687822AC40BEDE6696B97D7E89B0C602BB1A8598FC3ED0
+21147E2BE3B76ED36626C93F0F7587802F6C66C3BC6E9DF45A22A24877E4A449
+9742D29386419D4CE4AA05D1B9F055304FDE0541624B4873AE82AA9B11484D9D
+6F8B66D150591E00FCA269C5A764B4913744BB8C222DBC80B3A27C2B2E981903
+DF45C6C9B90489846E96852878792D64A7BEA283E74A8FA5BA226E00766FF829
+895F285F112220F83004332C950EAC5A902B304B5D06FE54F10DD11F2CBFB5BE
+2E357A9FAF092F7C3D4B36042FEFA70953AB89F5B5CF6BFC015A54C5F26A3B40
+4B9B9376E79A8034246D67CA83661FE8E8FD33169BAD40D0A599D118553E39EF
+0BDA5CD019A73B7944C9C20553244EEF2BB5BF88A000941FC5F85C754D513240
+2A0A94EA3D0E37D3217ED4C1346E54223361FA1DBA789C741EFC39C267389582
+F7A23284DADDA9B1AFBB80F5A0BD1C7A2F75FE41B7C7648602DD62C32CDF44DD
+8E430DCB7638E2E03B5143B4D7C02512F2C206936D56176E3E2D24DB0B57B599
+6E98DB45FB426B00636C4FD897BA0934A3EDD552944258F3184E28421EFBF0F6
+600EFA1E7D0E562ABA90EA40D6F2FE1D28D125B2A6759C9457FD9AA0FF834DFA
+815E1F3765392D2DB2F4AB03FD01A266292A42C02E3D1C41FD46552E7CA1B36B
+02C66505D3172A11BAA2FE592ED088AF61FBE6210FC290D98260A2F70A9D1505
+0BF7C3888F921C5B0A135D7A339F0DA939C3B4E1A896F799BF1C6415820D2F1F
+B893A9E4A67EA6C5ECCC73B17CF2A29CE223138B98E6C2655AE3E7EA1EA3A27A
+B7F970E1E19B8478BDE1715B172F7ED5B36C3AD33E1B31038F25819C130B7BA3
+A84FFC3B61FA204411DB939EBFFA88D1BB317EFBB63091DD48E3DAEFF4E3760A
+8B0E1D0641C7768CB7980D684C2EED449992426730E1A4338C14F18731B69681
+39F42DC735B1B3247719545FE88D186373488719EFC2D558D47FD0D033108561
+4FB069CA8D80059115F0E2610C0904CD9019197ED8ACFA6F3D493DCE5F821DD4
+A58AD06AA5691C9898813E5A4AC9BD0087BFA2F2DF10AECE1F7B9FD3B35074D8
+5BDA9A615D5C32430632F811A9B7270AC4A6F7CD311C5443FB20CF288B172FBC
+49F5FDFCA8BE38549AE53F72B85A6F03B58AE41DF50C88989E4E3A8B8981DA79
+57B9BD48478B6A198AD34FA65B3FD76716D40C47CF247250C134FF33B27B979F
+3836E4771AF3DA8CB32BBF65A9FDF67D49547B226B1658D1858CF4AE069BC8D5
+168A2ED64AC357CA628C26CB1751E6F6F923C9B8586CB87E1F0CB4457D5D19AE
+386456AD8C5D6D789015B2CC356F40419776455D8CCA320F1449D3E0C5801EDF
+E4C8BBE2482A485ADEB711A5D5D489D543B8A20F0278602EA080B532CCD08D89
+506CACD8323BBDE8EFF318AFBA650A3D455CF14D56DF7C21D7CDAC569CA15651
+63872D62ED75AD82068FB9A44C98405CCF54DE838BFF264A3C969D745205FE23
+94005B5E7B238C5B37AF0CB20D025CC00B473C32A5DAF8C0F963BCA758B2A02C
+F70A46A8DD3F1EF73F820B00E188F569F66DEA6D6D320CC014956E10F03083BB
+89F311F38E8043FA363DCA07A10CF50845BAE801DB3611D794FB1A1D878BFDBB
+49FD849312805B4180127D394BF0B241179F8CEDA90AFAED987FEA9789840A56
+20C8DD4F4FAEADDF737EBFAA0432A43FA3CF732F443D1B302755CA7C1A3014CD
+8984AF79A60717C38B23D7CA54BD43619A46D5FEFDD4DB692E755BCAF6AB8F5B
+958F7B91385E510CDAC287E14AE0BC3624493ED50AB68A0B22A779D7D816629D
+15F104300B995E8562B37C85E89093EC89B975E77077C0009D905FDDA547F04F
+0C596B99077020341D0C81B101C2E73CDE30808BE614306731BB0705FF8A83BC
+BC56BCDEB0F3292A8AD108AA64FFEB0CC4106C988A4D102BFA3084DF1A69D83B
+C517F09C0F7D604CB84D6F4AA0656AE18670DAA3BC88E7A85599FC794A93D8A4
+E3D51594B472EBD68B46C87FFB5A530833A191B5CA52AFFAD95E18348CBAE03F
+F8269ECC9C3CBC78BEC316DC8850DE6284BF1940F241A22A09F10267CD625EA1
+BEC1F1A6A1A5A5BFB54A1BE8C704194D72A79D34AFFDEEB69F1EAF891E3B72DE
+4F132378DD12D9E794F40D232BE781E03EB8C828CA17E181751050BF6E2E0107
+1E5B7569629AF50EBCF7152E3715510FBF60F16755CEA66D854E9A5B2B808890
+A43D9E7F59104AADCF7974D15AA5768AA9E2269D0AF9511B662551A7BD6FC76D
+541CC4861E8C7BFA5F6CB780E69545567B2D7D0891B23C98AA5A9712EA6ECDA4
+73786AD4A423EA8BF7AE91239BC60EDB4F148BDAFA2B81DFADD8E946FA4ACA6F
+2440DBE7F42367569CC2354D7B725C2E2B38D20E81C0700BFFBFC3B6E45FDA05
+D04DE260D94722956833588CADED96C9BE62DF2B9C4020AF4F0245779D1A8D79
+C0582A7F28CEFB515A7527DD76E350F26EEAB85EA7ACAF7479F67E5A5975F01A
+B676E600823FEC28C30D2208A868EC0D031437A2E68B180CB1D3458F56F419AC
+D8CFCAD7ACCE8836F997FF2B5FA634F5428046582FA4FE4B51595D2149ACF6DC
+6979DEC7AAEEBCCA32CB4A86C85DFD2A6A02FFC00814F797D344BBDA02F2715B
+7FA2B748947055113DF4821BC5FB9CA55CF68F410B19CFA88B95995366FB7A10
+9BB9F34BF0DBD906FBCB6A6B137D19CC27586E3550F1334652408290E2076FFA
+59AF3487877C0D5A18BB4FA9CDA30DB6F1AEF8AE8448BBC999CB5D67EB7C2649
+8593783878C0A96D083E18D9F88CF847B821970C83A1C4698C66A8C900013C14
+ED7BA85AA0302972CFC64E60986F5F5A6A5DB1C5BD9D255C71D033EE14B86A51
+567AD17C93C29A9C4516327A2627A5EF96629177EB74FC1C83B091EA1700BD5B
+069BB7DEEE2BB45E71ADB1BF9D0592E3EDD486DB3E31405AC422487A8E9B4CB1
+906C4E0310DF2D64F17FA59D0ABEFA11CE987CCD009FD53039A1BFEA1C40DC1A
+EA90C0959232198D1F4AD65B4ADAA3B1B2F74ECE5DA88BFD862CDEB2CD24D086
+B230F2D5FE30359E7B394A3C21C0D095F94F3315918F3E35C1FCCDC397734E25
+B9DC2952C9B101276FF63B61F317AC0338BA7DF2E210640AFC4EC25EB8DE48F5
+460A147AE59AA81C0B0A6BC9DD687A18BA25D37CED0CD4E718D59DFCA7BFCB7F
+37873249128C214C434123A76CCEE99BD8937434E3D15B0899D7568F1D02C607
+217FAFB1E526042C5B66EED4F921646F560829E5A4C737E5A4BA6498A4A1A082
+66ECB80F3956DF84FA5B7F11E4344ABAAE7E63DF2BD3F3C6CBB52E5D75AB74E8
+30939CEF9EFB36BA389E266EB035CC39C828E042FC059A2C0FC15DAB7FAD29B0
+215256CFF25F22E753393188F7B79B49C0F138DE68AA1F5B257AE0F3D2F50BA8
+221F087318B006BB5C73A806BE5556CA1B25F2298D1B77928B2565A93B27A613
+041DF12E948905E2D850D697BE04E8C724C13AA75BE4CA7B2CEFD8BC432268AC
+2DADC295EC4D1154426CEE11CE17F036C10A982D3D5A26CAB55D1F43B9F5C861
+84AAE2179C4CBFC016A8E893C28EF549CA3C0F7C816BA54549B1860F032E844E
+AC0E22D4B4002ACD8A06F29CD37368244A2EBBB9310ACA9EF05193524C4E85AA
+A0DDF02AD09FF6795A31930D91424572A24EFC245742B43DE82755C5608635A7
+6845967CFBBEE7810EC93784B7C00EA048FE672F22A7DC5E0BA296F8BC572DD6
+35CA720B7A9063555F598E184CE235D436D37D31BCED986A2715166C001C80A5
+CF302500D3F3428D883D166829B223970F7D9E8398B3FD21D1FE47D715C304B7
+49B5A65638BC3B4B4CE7F52144B2D4AA133851EC30082831A28816092721E106
+7D627362649D82A5C3A57DC5041B1A13FD2FAEA6B2C2646D3F2500142328D8D3
+B40136F3CF6DB790C2DBCE265B6A223D0ED3DA70C143CA4F4B21EBDB9E19F010
+B7347FF6E9BE216CB5DE5D367EE01C808604D05C042BCEF30133BE0EAFEFFC4C
+84B2A3F6C00DE3EAF47ACB1B4587DBA063C52E8210D6F5B3C5C23A608558756B
+4CDD4359D5C57E07C0131287CB8A1CD7229ED655CBB1CDA9CF82B5AF1E801890
+0D500C4CE3599A4B186761649BC3DDA28F18BCCEAF2AD29C826602033327589A
+7E03000A0E18641EAC906A5EF0F9BC2108062134A7F1095E422CD6D8A3B72353
+9698E5C6EF96832C8915D0C0E3A64E6B43021301D083753323D1726E22C04895
+627F0051A78A46CE7FA79049B46B4EA196068CCE29BDE02F74CF3F25468A199E
+5E7725983CFD34457404F15BA85E1CDD6C4085D1E6ABEBBA650C441DC395590E
+4999A373A0ADB76FB2BD1787A42C2E1D24DE2121886300C638209437A806FCDA
+2034A6E5CFAF53CAF1C31EAABE44B4E65AC23085F55BD6E354CFF3438ED3B369
+92D22944354AE32F7135A2E453F321F1FAECC837D00890473726B43BF80E2514
+C8EA1D6D890713607A2C117C07604B899D0465B24447A38E88BDCB7DE042AA82
+7FE25755A8086702519C4E36FF06342E7FA9FE4BEB970EC45F7A56748D8DE39E
+F478CEB616EFF5F6C99552306526AF1980EDF91E8CA5296972FDCC24EE7F3EF9
+3DB577D2E225B5250B8DC675AE667E98132DE2FD992965837E604A8B2C51E4FA
+23D61F8B59EB1F91BF9908E7115E5ED381D39E07E0422F94E78481D067D7A65C
+52482D6E2C5740794958D0D12B567DB14F2A3355CA6B6DDDFF3E2CA981E3997B
+BFB6AB9BF25959430D9FCE659D9C0B80D44EBEBD0539801393C60C723029CD58
+3F6405828CA8C05E7325F9077349C965534295E05E383CE7851BE71430B47233
+91FF781AEABAF8D9D6EC398CC60728D7C950215F7843FD99CB484614FEF62CB2
+17DB07076D4391E99DF321D0D871A37C34FB441B58D87B8FFA4821791D5EAB7F
+25592E2E45B8C16F81157EA832947F829801EAD65B11D30DF7380AF3BB1EBAB6
+CEDA2DE760A98868ACB45CCC8CC2370FE267830C23BF33B08E86B537A0CC0127
+44A4BEA7FA46C14DB1297A545F320357DB771BD7A674D75FB486A911840172E5
+208BF47AA03593193376AB667F09513B075F85976F9C28F7088A5E41311E9B82
+067883EDC8BCDDDFCB6A87C6ECD0284A86FC797DCC1F99EE10677B75E6F729E7
+E3BEF7DBF8F92AFC1924FF85BF0BD5547FBF0ACD890470AA537503F40F4E3D39
+ACE81E6816449AA859A9754CAD9B4208374CA21C1779685838150CF56953701A
+5445C72EFFE7497A91E603F12241E2EB52B5EE286D3582FA02F1417C2C6BB5DB
+F0D3698FB728652F3A6571CEFAAA7EE59B1F8CEC6E67F64B36C58C36A88F6096
+9A764BC3650F24C58003033723BA1DE8C731C1EF1CBC1FDAD30F836970B82436
+448DF2CF7FED61BCAA295453173D7DF585736B8F403DB837A6E6EB5B52549B01
+0FB206FC42AD1B3BA51F002C5FF185A72F8B21D6486CD41A80EC051E875DFEE8
+DE92EF4C176742032FE8889839755D8D821CD7FC244285D25C6DC3DB80638606
+92D8A40F41E91238E4D11F8FEA94605EF6283222A4FE45E411657A6414355567
+1786D885D64EFEFA51409FC4D512C520EF5235E1EADD229F2AC9127E70D10C3A
+04EE976B8938FDA640CB3074240BC1EEB328E08ADF89735A59A4A4B48ABF4B83
+5D34179953C42E821C769735FB865860424EA7F5CD9AC21D2DEF9A482B50F8B7
+224BC9D6A2C79FA0D79AA7CAF3D77BBF1D4D4963B96902F3A84599D73EB3303D
+7B74883A77E79D4469DC7E5A9141AD2C56C395D1B1542BDDF61AAD8AD92DBA17
+469780CDCD4B38BFE83A730A4642CE4F8E4A7847107009B163709687F03E8904
+C670CBFF1BC053359921DEE61AEEF9862229709047ED0BD0D57633CD7CAF1F9C
+C62DCAE4EE399FF9148A791304DD3DE38FA895DF8B9126DDAF9B52DB3F3E7664
+20B22AB9AA334586263A8F262D3B5D3B93ADDCB366B3F06E7E7F6D9B01FA4317
+57E0313B5274F487A92ECE967BA1132703A2FE34A499060791FD4069D0807225
+26DF8CBC99BA03C2C94D3F88857A01BAA2C5C2C79D8578DF1E5081EFB6EBBD8E
+CFB8A01770863B5FD1D6CDAC9B9A1DAD5804ADBF5BFF3B20656A3FF51D2DC263
+13FA7D4D05D8E9A9F4E75604EE936E13A9C528A198B8EC8654AD69CCB5C20996
+4A2898D6B64EC115F1D1E455CA8C5C8B7674C429EC7A0082DD32F67B93BE909C
+4403FE3258790FF1B3FF67F4C95EE044070E86C3FCF0848A65F3C0999AEDF806
+EB13CF980181E85AEADA1D290708A8224C649D3021CBAB14E585ADEACF17EF1A
+F57B30934D33BCB97230F1F85044E950D54F31C19698C0C0C9683827A13C1735
+D2C649C0D4A5899F90883B5DF70118B704B26735286F105FEC8DBF2728B4E6EC
+288621C12EFFE5CE74ABA28C8C578549FF72CEA1D8AF8F15E122C28FCA6826B0
+96042D18A2DA41F81B89DDB37C88A024D42DF89C8D4D734A0B108FD2BEB48AE4
+EE23AE4194F920986C6CF3A993077C0B2501E3EF763FC1F9979D1EAD71790CBF
+B48E5B35640919767237D0F793271EE576454A86A0C216B224E0DE81D66ACE46
+18235EED4FC60F6AE7BF7BE43085E59A7E898219842DB960292ED9D9954D71AF
+0B943E3C6B83B82EC62BBD305ABB1400BDCF7A4BBAAC2CD397686834A6BAB96E
+E0F79ADD9F9AAC581DC1F040BAF224FB5C0FA52C0B89FD7DAC14268DEAF39F06
+54D590E6E8AC9068E04A0D026203043C2654AFC64543D4BC320843A4BF30E82A
+78D0E0AE8843DD8E00C8781645BD3696C4B6A1F1F83F5E5F4EDDABAF7394E7AA
+0197EB3648B68FAD548A1F010A0D28538B60A2ADDE6F26A46CBAD656899D01B5
+03CDDCEEC86AC20091684979154D98437D6BBE4C8EEC74B6D9BB7D6DA6E53FE1
+F01FCCC7F5399762D1BC994E94B6179B1A78D238459F7196192FAACB98CA8981
+35460B120AFAD7B779862CE91B5B27FE97E1D595E787E96359EE9D23C7E54A7B
+F4B0D3480F00DFDC22CC8FC032E38B815EC475EC6F0D6D083CCD272E8A5BC5FE
+D4DFC5301B554BC721F19C3FC8134939CD28AF21976B42B06A63719C44432BDA
+9C59B2A5C1CDE2B37C804F50577B6D1308DD9C414C5B626CB45A2972D906C53B
+7C1E0B5F7006777AD11B3564D30D2232DB38E4735EC693888CB7590966A0B7AB
+A94CFB22616642225A5AD8C4FBEB07FE262D75AA093A73EA94DA544D0991E030
+2D896C0885A3542B3B7216F61560D793E91B0A972678A8E98315860D63EFE617
+8FD39A8D5CD9130FF2A3D16F24E2DCAB139B0D5E41A236B929A74CC4051B7060
+935838E474E21B30B609BEF513096500268411CC3AE2ED2176A6762E968A4068
+43B9FA47CA8C694939587BE5AE2347C835DC00E5A73E95668DD0484B4D3BA482
+E6B4F79EC50CD4ABC417F3BA55D92248B51611E0C30AA49A6D0DA6028D436930
+AB6ED25984C2322CC78C4FD59D491DAAD25CE8A47AED7DFF73B314E40007013C
+12EFAFED3434FA017B58EFA18D7DEC9E43F0C01B21551AF418FD9D6B8576F8DC
+C579206AA9F21A1C50D078718DA8FA6ED6A8582BDA6791F08238AD01C6655291
+CC03E87DF7760C0B265E69091135318B5BAE543C44CB396F138D0BE636CDDE88
+3E1CB4ADF94B4DFFE102DB0B0898C241E6295881A5A2660D5D253DF6AA998ED7
+55452D68A636A9B0CDA1509D95CA8A85A9EAA164A4716C503C86F1370268AB1F
+0E9E41C1E7B82193A0F5CF51A67569825A9F89E29A8E86BADF6F6924B140920B
+73E76CA06FBFEA7634856DF64281C9CE0D5D4817B34C9D419A70A24704AF31AB
+83EAEDA618C70F735DF746994341A37D1CD2F487E7576F4EE17E9A79A6E4A2CB
+EC1E2F0E9E27EAFB7E4EF5E27BC07F49CFE7A8E40CCF6CFE964A70EF432FFF0F
+2D9CF2B5EECBF408B54C3E0E0F292CC210EE91005D439B07CEED8885526519E4
+50E0E857A008B29841E176122E3D1E152006A69361913019CCB8D949E2A1BFFA
+40E6D3504256304676103F26675EB99BE87FE10428ED2CC9F3D6882E3E909D54
+7D6A8DDB0B9574A830F9EF54A659C7EC71100D53E3A6523811176AD741399EEA
+64525B4CB3EBAD79CF53852D72E7D6DB5E4CC7B10FC6DCDCF41556C3BFE5E135
+48DEEFEDFB47D236F1DF488EA9100D499A87C0AD17DA7E32656D15736C339C5B
+FB43AF47577453FF94AE6233F78F6E8615BCD0E6CFFE077688C365888921E456
+0B5058CE088B3ACA4E03A3CF8C5DFF4132151E130091586CB675F892F868823C
+C55D4859C09148529FBA57A3916C716462889DF510CDE4EE303C2B52AFC39837
+7A8B387A8F2B5AA3EF8CBDC06696D3B82063FC20CEB298993F419F8AFE92AA7E
+B62E988B0D3CE71048399787217BCF509AC16C12CD2A46F5111DA9D83893DDE7
+A8B1EA1470F99611A8DE68CCAE80B0FFF87E514ABCF5B87853A3972AA21BA88B
+6EC44292E10449051823F23F527DA1D584AABC140202A964893A4F7E03021E2F
+291F270C8B92398FFED22DBF4E006F303EADF1E26987E4B9CBC486B947056EDE
+4ADA28877B6B867613D53FD6CF230F4B050408E1DC84C04787B612DD3A2FA850
+EC3326710040E77E8A11D86BDA5FDF5C92005ADF6BDB1CC337171D3E59114245
+FB9B093DEEC937526816B7E00D14BF1C354506C4D8BF35121F924F2877EBD9C0
+5944518B80A83A36DBB8735350B6AA75D42A7D2B7664F1F9C153555838831AE0
+EFC9DEF6AD56640152A5010D25C836FAD8B8569DAEAE67A5CE8259422AD26070
+2C4419860A94D0E467A9832EFC5B2B7ED6396F2DC0C27737DA383EE310ED0B6E
+1698FF1AE7A618276284CF0B0724C84017A881CA94A329EDE2935F01AAFB04FB
+DC7B4B8770D3E62C7EEA9759D337AA2077C5763BB7D3096AB2F6E1A835006F1B
+AD394692F4FF1366EC0F779EC1A895514DE0885D3BA5976E4D90C21CF58AE181
+C974555ACDD144A6062953EDD79A71710A0560E92D1CB0373B54B48A334BC58D
+1E56137BCCE782F65D21CC9BCDB0162BDAEE9C327134B56197C411E3E3466BE9
+26E72751B7B73886C1C0394F1A561EA185C51DB15F95196DB28B1A5318E868D3
+EFBB90D58EEFD17FB2A23DF811A9B7270AC4A6F7CD311C5443FB20CF288B1222
+2C787A7711638D5760569422E603172B7CC7BC55EFD30A232A65591D0EF3D501
+D9F1A88D8BB0EDE87EF9D8D1A6D983558086958FF839797DB45168A9F3FEF6B8
+BEB6523AB434161B4CD9385A5AFA01532296FDA1DBEC1D4A612288C29CE56137
+3FFA666F6A4161E6593F9EF18E9486C525EA450CA2E00F13584B0AA7DD92F264
+6BF7F758980B327E651C06AAC2897A2E839E3A2225EE93EE41B46E7B9E513973
+DF94CC2D37694850ECE54C80D2CE7BAD92B35CAA4F4C66C0DC234DFBDC9B13E6
+2E040FC34E778D966B3EDE9EDF028C0019ECC8CAA5E07458583103B60DC4180B
+7DDB99E3AF5C45072D5FDE12DD81276D71A507DE29B299AF582319835E23408E
+414CE2299CD46780A4C53F8545A6DC0F6E1C7B45CDA98418B81260A3AAEC22DD
+AEFD798892E8865EBF5276D595486474679F6CD54A836E6848549F749658F1F5
+C0E3D442BD3D390982DAB79A6383A5CDAB2CFB5B30B3566EB48440D16A80A8D1
+4905803F4C580F80546B2D997B174FD53FA4041B0AEEC6597EE5FD1996F8AAE7
+91FF65FB53F78C6F639F516546C897917F6E490B5BFC1EE11AE4C309F99ADA97
+29A3F59686AEA33CBBC14A90191909AFAEA9BDCE7871DBA71AEC63901513D317
+665645A9F6F964C0FBC114419DB246B08C3C29D09A73E14FA749FF23B0E3B2B6
+C417DA6CA096C359A9D2372D5BE1E01AB1EA93615AFBFDD29F5BD30078346493
+080868F56A5A0BE705E9DAE32D3C3BA59DE8F44E70FF842306ACCF65C0AC9673
+859DB9C3A673280BE15AFC6D052F79B8FC23A4E6FED2DFCBBDCF4A008F3464EA
+D10C6F0DDF513A630E0133FEC808630E495A8376CF183C5CDCF006E69DC0F5DF
+0E67B983327319A47B7EC15F6E5BA686EB8295A282705BF1414AA87E1680E89D
+8A8FFCAE76174518C3C26F3DEF5ED468E6CDB1A1FF8BAFB8B7FB1145ECF9C256
+7A48B0C043C6D77A6BBA49D625056509BC9BDE9DEE1E8951142A28319378A3B2
+3F48721B8A7520C2C08F8C1098BF71196B775C4AB13FB72B85222C6861BDBCCB
+F5B17AA9F218A80D732FA0DFE76AFE62F4E10693029CE085ABDC77E8EBBBFC63
+67498EDB67E8ACBA7603ACDF0BB64DC77FA78F87D3790CAEA19E2884079464CA
+AC1E8B607F9D37332AA4BA88CDD10CBE8069F818CB504EE9C2F39A933844BE67
+4E4BCB5B93BE0688490B3A656582CBC1D90D9931DFAAFEF53A9242AE07EEDA4D
+1042BE0DB0311AAD05E48B2C312C5297ECF7637C9BA48F730C2A8CA5441A4B7E
+D06EBFC5FBF9D2895BB5B6E1C1BAFF90F1E16665998AB7612444953BD7280461
+0E4F730DAF2F2D5AB767C320C62543E267954EF87A10E9D566B4A07963E6186F
+C14FAEB626F320AB51A8033A3F755FBB8515426BB432CB6210B93F60CB6CE078
+01A43BD6BCB6D746FB9D570DF400084540991445F900906E74846306E52E324E
+00D300A78B984ADD82BE89A53FA2D0813AB238367A14F0ED1EAC26E444B6BCE6
+186C2CFFD8EA20EA384D74D11F9273358E7F80EE2F614F05609AA46E89996BF4
+EBB7842B8F58CDB75221EC1825202CE86DDB34598B8CAED5B6DA81A6C816C747
+542CB17AC1A10E33FC1E611BC3142D4A9B58F97102E7AACB63D33EEE87547541
+F53976C86DC1EF079B38B28707465362E2A71BF6E386B0FBBC875F8C43762E81
+FBAD412D55491D1A57B150A5B386F7ECCC0EE8E31695A336BCC0C3C5180A41B9
+651968581D24F00612472210D9E9EF91C80A862AF4A25AAB13FD9326A26EDF85
+AD06AE33A868CEE9C4F13CBD9D331F2084C125EADCCFCFB62238DC3A09D84F16
+4206B35C10F88133EF9C99B76DCB93A22E893D1A6715C3AAB9D7A991233488B2
+D41B812A11DD507A000AF18760DE738F9AA02A86EF23D5F28C1F1C53B0D1D18E
+7284386F6082C2362E4CCF3E66ECC33C744626B6E683E7C274B6D9388B8B586D
+4DE80A0316E2B540545535BADE6D74857E0CEC3B9B3C66FDE7436030382F9C07
+3E6BC1061EA7062E1616C58AD50B99310A0DAF0C077FC0D434F1987943914B3C
+BB793D68E5483364DFD62E02361DC0694534AADB7CA1C907C3EAD979BA7BFDEC
+45A8702254B2B54A972B3583047D43D202EC047CC23B82B573D1107EBD32D2B3
+818E7FA41C0527DE436726C96AB7602B782939220D351CE8179EE650B0D9C505
+0670AAF6561BBAE10CA63833AB245A75FA6077C8D570392BC1268080FE26A1E6
+314ACB088F4DDF2EF2810260236761820A96B78BD1D5A73E157AECB9F3F59C0D
+736946734C62D46D43EC3F2CF6D0C964CB3FCDDDE264E04EC3B40211B51F645A
+D8CBABFBB903B090ABC8D0222F3F3AB095198DF2FE36B36F9968B5CF9FDBFA11
+DCA0E08D087C4D0543040E889BBCE899347659CDD152A758D6237E52C6147BAF
+092943B9666224238D328C48F6D8A346D64690F6FD0DA0A9318C09C86A3CB60F
+8FF548AF36F41E219963F2D0D66C0F9656E47E98A214318EAB91191B962D627E
+7524D34E87E4F457FC7B8E0A12CE97781A06B58C3DCD8842BA0542A392A10370
+8A7365C39717F8AF609221AE2E0A8CDD8A31A0090A7C0FD608C35EBBBC89F567
+55F99A3C158C2C2C11CF6126D1716B808D97E787F5BB19D0C93CD09F534B07AB
+5996711300B4E28756F69F8B65F807ACA15B0FA0098083597E359F09038051C4
+BC551D0290D532709F7A5DC180608370FEA2F20521FBF9165F5BC55CA837CF2D
+70FE8977957788C0472218A35BCD872CDD1AAF3BFABAFE773F095BA4D5A0F960
+7E25DC3132390E4C50D65665E065DADBF514DA09934CD93AFE81063D8AD64E24
+F517ED326030FCAA6F3262DCDFCAE93B9D7FE883B77229E55CC6DB71752DD0DE
+ACAE196EB3927F60AF79A1DAFE4CC4DCCFA7D52DEAA323FAFB89424B97E2E027
+3050A4D8015CB53C7450E9108DEC2128676A9B13173DEA137EDA6510258FF3F4
+2CB00489F4722E4D3AC1FF1C9321DFF0C1D7F02E464D2458C1DB4482CDE7A7B6
+BAFC25704476DFC3EBA8C199FB016EF1BA40457D668D34832D284DACCB80C85F
+D4E99C7E9C4E9346F1FCC35E0A99C6CFF06958072E27CE342A66A4C27C0FB2F4
+4E2BB54EDCE5D6E365450F5CD528BDCB140E3F6B0A4D973F65E63E37274D9BEB
+6C47FC02E53E6410EB7C884E68E496316C1FCC57968F790C5E7948B72C4AEBA1
+04706181782CB418D2A2842D2A8D814A3F0622B586231B4513F6E2DAE85D8EA0
+7DBF0F7CE8AF45BCAE8E072081FBD259576C2B7F6138C7D17CD5D1BBC93A8D63
+77B233BA5C2A504B014DCE8D922CA473ADFBFF85285CFE4E9C42CBA274592C95
+3BD5A9CBC996C9AE765B71717C65323D8ADB04340CB71315D89A0A06D4C8C61A
+EF51A2BF9C283446B177BFFBD9B94C2C008FF74A20138BEB2D094C8447525ECF
+7E0304D3BD24256912A2ED3C59B32CB1FC7ECF94D46E085D6B51FD3EDDA3EBD2
+1CB5B571D21CC03C6ABE01F6B601D390E2DC1104F91B54A06D57CA568DC2505C
+F6EDCF2412B0A9382D7B9B373257AF837DF7C0016D0A81386816EAF7CBD2677F
+CD108F4166A65971ED507AAB3A6F5F1E07791446F9E9D18741DD7643D81F7308
+197FACB989416E6AA9FA07A30EB80A9F2FD46684C21DB094A39F0AC8535F07BA
+31C71CA5D158A149F9344E7A1BE32DFF3E48051C4F3146917DF98C40DCB82C01
+3495C882C7A5E2768D210FA622491C4B224888BA29A0BBA92D0B480AF0C39A12
+B68F330C6794A3CA9CF5CE7649F2F7795BA4F9747FCD772569E557E716BCBE5A
+066EB52BBE9A04F9815DB6DB1EB3472A1CFA532E87B80603A0AD60251EEBE74E
+7A1D47BA78CAC708C675AA7545CDC4C81E6B858F9393AF9AA5E69F799E01D301
+B647DA54A45537EC3D1EC098C144D60AC1FBCB365F6F507132D32B9DA17F8F1D
+DBB63B0ED28911B59FD805227CAD2240EBB42329953C906D8FF4F162F2257C1C
+9041B5E01DD1C82A501D5EFCC91B0E557A55D183B165C5C9C572718CA48FA93D
+CF81E6FA8462153924C8F92AAA2B0F898F99D00D75B828208DE3B01B641BCF83
+0CFBC548E655D710716E369D32ECB783B3D707070F3405C679394FD2186B4C59
+46D6F28C5FE63E24E17083604DDB4B3C2B67064CB6FAC2BFD463451E867DE0C7
+0BB6D56B3D304DC7DC46C58914E793F2D80A3FD81724729F44D53FFBD3E3C03A
+A3B770A8B4C088436BE5780A39355D1A214A5965ABBF995969138C8A750A892D
+DAEF50284D2CEADFC997B78F9C502BEC7C25AD67D929CE8BE711ED480CBB8B9E
+59E1B8F099F3BC025C012E85B2B1C1D5159025883E3130C656F7976BE348681C
+F88CE442026AA09F828E59584BF2C4D751F87122E2175AC6DA8E033FF3DF0FDC
+7F4F675EE1B90F7F51ED2E5B611274D0054BD5FC845B7F11B883416C5CDD5543
+BA15221D9716AC3D4CD2AFA8D9B404C04A93FC8E74F724DB01EC7E67FC33903B
+7DDA3697D159B7BF23CFD7EE20738DE07BF2CB6AB91D17C5793A8F9EDA9B5CE5
+873D64C726C983B33756ACF3FE3AD85C6A571E78F27A55F5A474C9B7F27903B5
+9C8328CDFA38D00DD68E2A2EB4489007C555A6A08B437AFCF723A8F721B0613F
+10EC929FC657A99A86DEDC1737FCDAE025AA1456417054DC724C92B1743E575F
+F979918B6C94ED90D38FC1A63064AFE71B5A359C4A0929163E8EF660794518DA
+45E1A110E38EBA2D3B88B585A260DC483EAF72E4A3209A9E0FE95574AFAA4737
+59440CB93D25CEA7D30F5F17203EBDC1C0F575F4A979FF04F1B3C17864FBC8B9
+2B77DAEB2FC8041D54CCECD79A73BFB38AE77E4271245E983995244048C4B4FC
+B5EDB4621857E3D7C5274A91C1BA12B3171505F5B7695B2F355214B7B880F619
+803771373F3446F254A093582A6625A0A490C4C0D6C3E0DB490681DA53F590C7
+B904D64166FF0A87986CC9B6EA75BEE37BC2C7BEAE9A4370CBCC6A3B60E897A2
+A10ACC9590B7D180C8A5422AB89E041D629DB8446F058199B31DFD6087D4C454
+10161E7A841ADCE046C2079EA5BC0A9AE90D0094669D7697AEE2265047DBC98A
+857B183E3D2AACF07C5EFB1DB3E97A1F3E9E98B047779D494D9E203D158FB3A5
+2E470CFCF25D070AE2A8E0DA1603969F8D10469A0BD8B4132974C601B6FA2947
+1DC34814FC81A1E1A5155CFC98EB26E60B05B105EBEB7A7476D831D2C0383F39
+389D739E6FA3E08747D5705F441A3E2DEFF36B8FF289CAF254F5C310AB3BC4F6
+1C2FAD79570767979CEC35A117AAC4508DBA86A2ACDAE6B930FB8DAF84693137
+0FF1C57AA8246E4BE2349868E7722DAF5AC823DF21A5EEBA2EA566AFD9C6B861
+2064088FCC4B30D4DFB3EB1E58EC90DA623AE6FB3708C00A4BDE3339EE44F33A
+75C620A66DED9DE544643B9C3417305B2906D26756132ABB51B16B80F468DF27
+4069AE7AB410E612F0EA2D31C7B31D6FB71FA078FF00A40E236B7BCA3A83192D
+97B128519E4CCA3124EC7F2BA3E5D66350AC0FBDF769E54B11A5DFF77707B9F3
+E1243A14E0C5DBBFAEE3D0E5B2D187FB6AB6BC2189999EB5F2F53D263ADE076A
+5DDB61CB18C2C4F91D6B5486C33E3C5580FE4159D0CA9287D40B271BABE422FE
+53A8033A3F755FBB8515426BB432CB6210B93F60CC1076BE511A90A773A97D89
+56A65CF6BF8D3F29A8376F7EC995CBD15CA3930A5FE314E02D56E60B62165B52
+996294DC2480BC8223B359DA5AD05039EDC7280BD9F1606337580FCF14B26666
+E8F75B6BC6389E7A85FDEBC0D69A395BEC1DDDBC2AD2B526C6CD55B427B52417
+1AAFC0FBF0F3A6713E67E7C08467C617E31DFA524A30DB697FB86D8C0CD75EDC
+4A13F5C35996BC712723DFF34F9521770077096AC9FFF055B087C94886F0C838
+990E66EFA9641140EC171DE0B4C6A03AD8C04C59A7A86BF1BD10D7ED3BD8F3ED
+CF0B1F51A01691E505DA03AB3799AC275DEDD5575E9B3B16D7D737DD0247632B
+208A3B83181BEFEFAE8A46553A8A85B8F34AFE4DA1EC3AC2D43E99D94FBB4CEE
+C7198EAA9270AE8B041C30E460BBEA210077CC4F3587AA9041C1438B7BCFF69B
+D5A4FE49765296D309190BCCC69D751F3FBA44B3ABE5564318882206C9671621
+AB11DAE5DB81E86A55E07B024D8B822CEC255B464F34BD3F8C714DD0B43D864F
+549344B3D2D311C782B0D15E895E26DD1E3BD852A017138F4C9CF842249CC9E1
+F571F00FF9EE3A06766DB1C758A8D75A32116FC143C27C6D96E30AD4DC9D80E7
+BC03A0FA06EA072CC94F18C5B034767B564AB05136B2562919A3DB9F223C853E
+EC9277234C8E2238EC5E64514CC288BE442DEEA8E22F1053741FDACF44B503C2
+A6BE14EE86623DA3904459C109B9BE9452091EFAE456F443385CE0A0BAE17AD5
+E0E360720F68DAC955AD257F77A0C56FA46B56F32AECE87F8D3052E7238D05C0
+8B580D8A9D9DFC2EB840E1818F6F1CA52E8DCB340420EAD844C7E336A2E47224
+D29972E84785450467CE7B6B5CCD4A00A4866D2F89FB374260E9C0D60F0F2049
+D5A06F34DE2335626096EA26D57B94A928E1F7626B38272829C49B77DA56D8C3
+459AEF9356949ED2B5351DC5A10DD5F4FBD3184047F8F52B0787EB4B70BBAB6A
+5AB05F22604D380FD3572448A7AC138BCE2F261058B0F7D42C6FFAF8AA0B6CD1
+5D4CA8C3B522944E2DFEE576E04DD2F06570C474B0B414473B436F50966B571C
+52770A2A8A15EC363DAEC92DC7E8BCFC67C2C33B0C6565BD4486E7038C3C3492
+C914860E06521EC9E8056817A090DF345C143EB8F2A289EA703C24663DD7C203
+3891E5E6D8505BAC70FF538C735C2E787D64F993B882B6112C7BC6381459BB3B
+D8E8BD8CDF61FEF2585E482EE3E4D217D67F016B4990CFB9B7335AAFB1B259A7
+B19DC09CF02A02713C1FDB9EDAD6982CF55BC7DC06B034D0EF5AF4FB385DB448
+9EA39B1945336E0989E393012334DB1347601577453A37D1995144AC22383BAD
+0D43058F54E4F8C6278A3549585E94245D9E7E63EB45F0D1798271E811DAC730
+9C37D13848552D03C07E06969315884369E75CF18BD84BB1AA7F88CB97755F31
+16CE5E9F6A43919B83B646DDA8ED86888DDA3065C5091D99EEEAC4309241557E
+C985BA26DD7650B28A326F8B92F4E100749B38E5EA28AF1B3FC5D973408F12F0
+2CB8EDDF6CE870E720C4A205EA48931955CB6414033D22B683432D749F104791
+D964A4E4059B6595005CC1A38855F8A61C29C1229C4839821305F74E474FB917
+184A403006ADAC1E98CF910706F653CD2601C5A7C39DE7FC5A89FB868D379093
+C76D9C6D839C74458AFE461803EDAAD78BF5F7A738766E7C1F63F41A27623712
+B626E7C8B5F8709BC9CC5164A73337FCAA0BB145CE7E1F6D6055DCBF374AB4D6
+560B31C3DE623AE6FB3708C00A4BDE3339EE44F33A75C620A66C3F82F070F486
+122EE08A4870456161458B6C93A1602B0152724D54AE7F8F34E0A1E814732B48
+245056238423EA617137DC8441EA7B8E6A353FE001C63AD0C72E1EB4F3DCD8F4
+EDF3C8D421F534BA4ED408A9E655FE17716CC9A7EFF044237CAB3726CD9E420F
+208782A53B7D8880C1BB53DC44857A0915AAED5114FA1FE6B5C9AD96FDC3E94B
+57AD72D7C977A144002C186B0DC098663B091C3181010BEE8D7D335B48B374BA
+8969C0F653FD1F267F5C4F79D08FD7B68352CACCA2D75D486446E7369DE48714
+C882F9132D908BA2D4057EC3592A03E259D54CE09362404B4F40E99C0F28418B
+2C29117FD2F121037B11163D00B9F92013CC40CF96EF3E053C3AEC1C65AA548C
+78ADAE3AF14383339606F4670595CDF4378BA86D70CF9AF06F03197FACB98941
+6E6AA9FA07A30EB80A9F2FD46685F5D43F4E47F96B61BA0F88E99544E109918A
+B0BDCA94C2D971D4171889A5764F8F0A2CCAD2762C643C0A7B21B8119E955DC6
+44A10ABB7CBC3AABF759EFA30418EB2C17F8860F3101768380625A5DEB63E0A5
+CA8D017DBA29DAA3A16E7F0B8E3FF80E1CA99B929EEA738AF1EA813B2A7B2C0B
+E392053C4E1985A7557735458BDF077449CCC137BE3F3C8B5968E5E82DE931CA
+6238DF599991D07DC8433C710D25F710E4511768F708A00D003043473B837959
+D2ADA08CAAC84AB583421E5C08469D8D97C290149E89E4379FA8031FEEFBCF40
+35E4319F565C7391D8A702D11F3BEE244542BFD2849D498C239237ECDCB23458
+C388B13DE375C1AB93D839DC4F2D41639E03C463B9D53CCC300E2A8890F44A1C
+629C360FA9C8D25588F16892258D6B3BD94BB607BAB73B0B10D6049C11BCB7A1
+6C178F56F23D75047ECE96EB36F6CADE7470118E6D7588C75639F04CAF0BAE66
+C0A862D6B27E0F1154A9EC0D95BEC5C6B2B50FD44F61E2E7C76E18A0D573BE4B
+E58E0D110215D074E7ECB2ED339DADD6F39274E7E8B2B3B84C5D15F807E1A2C3
+60818BB03F7FD9051E119794A89912F39A68114B0DCCF08771129FFEA6CC9816
+4EA9EB8E28DA25F459C5019A7AF19BB1DF75F985EB1E684B4821CA583928714F
+3FA3D08D08C1A696775658C48A1271DA0E46468695A4CA7D1B1BF6D4AC2B193F
+EF9C507FF353A02267E55B1C0FA3C2263FF9FEA39D7FE05CAA69D741F114B5C2
+CD2E63CF7D0E0B85AA6BA6E3A1D9BD72837A508EBF531591F1A56E7D1E22A65F
+B87F274CED6FA9903DD9C28A08103957BBFD269B2CE9C17B631B6281B98CE965
+63219F82D9EEAFC6F78AF8033A6885413DBCEA757EA7676D23FC0E90F03456E1
+231CFB3CC4E3A1163272E4B12630C2651431B3554ACC5D07ACEA1E0B4EBD8EE0
+F0C862742F9A5F889F5C57CDC1BCC32B6E3B86DF71EA7A458EB6620FCBB0A587
+2C27D7B74DB62ACA0D3B143B9672CE2B4E3FE94448F0A8E288A3190A2F8AFB7C
+08706A1A9F9128841698D39D7A6620558C0F4AC96DB6D04FA90E615D06A805EF
+2EA704243FB382621C0730886350B352014576858A26DF969402AB30E0F9C56A
+C4DBCA91E0C88FF6F0EBFAC5F9837A7EC7AE3F0134DC78B6E8689F2965CCFBCA
+090FDC33F885179DAE71D903DD76A03FA57080AE5C40688DCAF754A276F0A1DE
+4CA4C3DAC48CB4B342B148AA93A8CBD31ACE5D70E4A43CB7F31B82F8E826BC70
+60AFA7B325E89FBCE55E6ED5D4D93FE1C0914F9FD2C73F1D915C9C37944429EF
+21786C53910D7124EC938BBDDA0B18A3EC35DADBFC28ED338D9519E7E1A053EA
+F0914DAEE2E90A5D8304CE37D3D708FB4C197F972E2941C9924E8B65D9ED512D
+024828F35A805DC0E555CAA49C4FAAC8681B042321505CB0CEE9FB7E025E2D00
+DFBA1D8FDD6D1958AABEDABC7C47532B4B80F77BF6EE43CFD08C913CCA182BA8
+9C9BEFCD87DB55AA5E0AD1D2C398A278033031FA6CA3E19BE891AB08ACE7DA19
+E2F50FAE0EB69D13485162294547525ACA6C964A1E08423D9BDA918221919E4B
+FD62F54A6A98F74CB852D6510B5AB1B30E1EB03636B5F50DCAD816D501A60C51
+FB1F38771C27251A50034E872DA7E4740F8BBC91379EE330A885FD5F1BCBAD33
+19C2AB81DCEB396BA47EA5E363C4FF366CBFCD581739C3508DBA86A2ACDAE6B9
+30FB8DAF846931370FF1C7DA0841CB0C6AD90F780EFC2FEA24988396DF3B2EF0
+169F304292D07DA5C9CEE4EFB147786586BEDE9B4149FF1E7D89BB2EFC1FD3A8
+89B724193FCE3DBEF87F56057690029A7350C20BBEA11B7521FA578F0AD6EF51
+09E301301296EE36140BF1707E5283DE6FE063694553380E39D599EE7BF0DBCE
+70072460726B51555E8577D0239698FA963D8E4C13C2C86747B76623E09D96FD
+453CF3AF2307E37B9B78EB6E6F2AAB432BF8CD46D9E1E22DFA2961D605CE03D6
+CC8711030D2483F7564F1DE2CDEE9BEE0507016F7651418558D452E731374EB4
+8A0182782F84277397DAE62595E8913877434B12D14EEDD16CAD30ED18B6F832
+E45704E5A2A51FC399E81BEC9BD614E5C88C16C92401CBEA5732C69BAB87EE22
+128A7F6B6AEEC9D5B0D1C9641E59CE041594E0396A0BE077F6ED955316C7438D
+4366B8BF0735BC7321DEC56AF018C4D52AC91E30C06E10EB0E6EC70F7476C183
+F334756E6CD414E6E4D92A5FC32F5BAC912C731F1A77DBFF8BA903FBE010C266
+7F4A82EB7100A9CDF235A014F89A33F6DB1E62DA447AB71A060B5199BF7899D4
+1F602E326FCD0A74A8457B12F3D607619CB08AE72CC5BB3A34201A0649F0EF4D
+5D68E2B50EB8441057292CB8E3306F74A76C08D5B20D8896713764599CABD316
+B5BC7684724C610C6263AD649C32D00F99B504DD1602FBCC202CC8046EDF79CB
+D08EA5AC1920F4E395EB7A69DCE16AF779DB5E989ECC4489F682CAE39E3FE754
+3C5392CDD26DBB0B3B8EFCA83DDCD78D676E71B6C51A64A87FD82AC7FD782CB8
+A9FB9137CBE9607998FFE1B4D2716BA61F704CAA3FD6D9B25F63CD8CC50A4FC5
+9C2F3F6FD9963174FF863FAF07DD9830B8CDC1E183BBCFBB2C11CDEDF020EE04
+66F1485F502234D7275F749AC69C7826A5EF683AD4C7DD7B91DEDFCE3088529A
+5C2BFE6B271EFE69C67B6E0BE554AAE13D9A8D6890F4E2E9F09632FDA612B34B
+33A9AAF0881F251F863683A1ACFD7164EAD511A3BC74169094B5B620A28D40FC
+D6D9B321855BDA608E23BD365208D5B99935F71EF07D9740BCE7F7351840EC9E
+4553B37EFBF9F1161C8AF4879CEAA37352D164013DA9C1D285F15D9DD37D5373
+C293BC00646EFA0A96570BAB2AD4C34678F9AA5C13BB58F03A57E07433C1EE78
+8B3D96A1500440CDECD8326E1A9D0DB17A1D921E3306AB2B2A0EAE2EF5BEDF81
+C0486C57E52DD412FB66F40610C2299F6C6000A135917B6DC7F6AEE22D1892CF
+2D5337581A05B27B4D3CB22545C5F7D9DCA52F5EE2BC41E415CBEC45468CB171
+BBF1AB6653D30FAA959DAEE60A27AE7D7116F771F4BB50E3B470A5800B4FEDC4
+A99823CAFF87E567B965718C5C8331F31E58AF3A560C46F0F9A0A0E9FA210EE2
+5A003A1513A14DE29AADF0AC9F4B4CC126DF2779061016E76E056405F1094AFB
+2137E531F829BC2AEDC874B4CF92B25D0CC6E61277E23AE3D35A9206DB8F5959
+CDBAE7DC021E2E9A6A644510454A0A41DEBAE7BF7A16F17D7091B8F23E2E5510
+87BC152E862DD7238DED7FA16F3060767515E673954E17149247E152835FEEC3
+DED3BB9E1480A97703C0077E23BF643D324A88554E3F25A4E90E6B6034A7EA3E
+DE7DEDDB5B4210133A83B91D365379A09F22AE79C60649618BE2D9314DC2FE21
+D65556FF2F1986CC5C1CAB6DABDC2EC9F429B1639025AB10CF578B1E998B85A3
+B5C25ED8BDC9432987A542CC715F33F7B723AF2F89C2392BD75A3B24FD53E6AE
+9FC4ACAF741E32C68830AE5A632C6D45F16CF1B0533F43F0316CC731A06C4EB4
+89A9FA2085568B98098FF1BF7F11575997CBAAAABD34A84072C22EAD78C9BB2B
+15E15FD49474D98EFD763C71DFFEE9283FDF36287B70142EA39BFD396053909C
+6A737732E13DE31115E24D59104678C099281956645D8DED5E4E059DB8AF9AD5
+F9617C3E9F76936856B0F508C743F8EE00B3DDE8213D1772518D5BDC23822957
+915F538019D53931F57A7C4B6DDC66D0AB735B8C7EF3AB0B3B567C765B5E2617
+9F4E126B052EBE914CB750E8379E0AAAAD96922FBE63EB375D61FA5FA5BAE085
+87CBE443A670446BB9E21B2F7A57AE4D0B7FFF204FBCB67F44F0002CBCEFA3E1
+9303EC6D037758B978630DA74C2F383E0B76A333683220CE886A8E0F9F7843AD
+6BD55BF54E079A0E224CCC90C6E7D3998175673DECE9CED8F582ADA240D0F690
+5F148A87612DEC4BDC1DDAD556EC1EEB9109E2E4F93A7309780B2BE948818024
+F496C600CC5B6E47F5F4D9BE4ACE19CB19680E726603045A014EF487627A0B61
+4FF81DF5F186D2906BD7DBFD843681735C8AE625C3F7C185372808108FD2B14C
+690946A47CAFB94D6A68391BE2868D6C5FF34037B5077FB453713094D9FE8CDC
+9757D2ABFF764E95B8076701BB28CCF31FCA27C0C673DCA8A5759E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: LMTypewriter10-Italic
+%!PS-AdobeFont-1.0: LMTypewriter10-Italic 0.982
+%%CreationDate: 14th March (Monday), 2005
+% Generated by MetaType1 (a MetaPost-based engine)
+% Copyright 2003--2005 TeX USERS GROUPS. Supported by DANTE eV, GUST, GUTenberg, NTG, and TUG. METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki from GUST (http://www.gust.org.pl).
+% ADL: 611 222 167
+%%EndComments
+FontDirectory/LMTypewriter10-Italic known{/LMTypewriter10-Italic findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(0.982)readonly def
+/Notice(Copyright 2003--2005 TeX USERS GROUPS. Supported by DANTE eV, GUST, GUTenberg, NTG, and TUG. METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki from GUST (http://www.gust.org.pl).)readonly def
+/FullName(LMTypewriter10-Italic)readonly def
+/FamilyName(LMTypewriter10)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch true def
+/ItalicAngle -14.0362 def
+/UnderlinePosition -167 def
+/UnderlineThickness 69 def
+end readonly def
+/FontName /LMTypewriter10-Italic def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-189 -316 834 1023}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
+1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
+B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
+4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
+DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
+2AD360A28616CB4A0670C1BF105A2B97A25458EC5D9B093E143A7C731387AC6D
+921DBACD6561EB8C8D15D884178C6CA4B7BD762BBC90BF3AC98BA3B244BEDD03
+28905B9ED588D5C24796F019FA4A4AB8A3174FB49DBDC49949A6AA7ACC26C045
+6E719A4AE2FD45EE868FDDF07A80E9A626BB43CDFDAA9DE7789B8D68C28D932B
+1E0D9172916EFAAB6EA8BB449C0067FAC310FD45F48EBC617727C07DF494C47C
+DCA0FDEA9CB1E0248FDD191025C389971B9A9D985826D0D8240D470BBED98F65
+AEFA8CD539C098C963AC721560DCBCDBAB16FCA600E3F037F2937982D38C9CCA
+A9C63BFB0958BA366EAC89D7D54AA96B4656E454479455E31BD9ACFA6C2EA8D5
+710347365BFDD4996CBF5B47FFF010225E34815CC5860FA9889D29B16EA85144
+3226259B862BC04B515F7E41BB8B43559EBAA342815B508B9A5F8445F88657B1
+30B915D3D18F5D7EA0F1EDFB3A1519FFA4E33A885B1607CEC3FDBD740170D50A
+9FA76FE17ADE912BEB39C4295876ABABDBAF42102C4A86A3C16410C06D51A771
+556A084EA57AF3FFBFF4C6E21936B83345DFB950D85B30D398F5910572B824FE
+48F530643F6D5AEA3DE45FA5577180F2C87DC465896F9076DBCCBE0E39B6C364
+2F79E92CF7A9852515447DA66BC242E8C29E75E96CBE2162DA6673453D3C965C
+9827C5966A264C55C0F89BEDDF4476293C9FBAC7D3C1DB478F2CF70547C1EA3D
+7C902C93E04AF559FFD67CEA2659A25D95C0122597B2A18E229E574D7EF5B17A
+3D705F17B077DBEBF9406FB859EA2484C590D754B6102CC36E7238CBCCEADD55
+861C076F13F8CC47A41DB39702ECE2668AF95440E17694979AAAF2128538537D
+22C0E288EE3BC6D6AE3F5841E4468AD0E8D5EA91A16E0181AB00E3167050F1BE
+4288DE7AACA1A374D091A8D9A421C608C1ED7D7B422F4FE1411B06D7F820B474
+8BB4E29792A956F66132D1E4670CF8F442CE0D612B097C996F556CE0169F2C8D
+F4C0C6F5C0834B51EC319CE4F9F49C077AB2EAD3B49DCC3432182DBF626B5456
+7266EA2FC1ECB4C1CF866A7A8235B50AE4D56F9A2CECCAA13DB8DE668AC382B5
+37654138F5DB7801500448E74475596427AABA3C7EE4290F0D890BE07BED1F09
+5C782F79B396A2286DB04B400916A09531A93992036C78C8D01D6B215FC30501
+8D0F42D2C05275429B68DA81C613A05E57CC6849A365F9AF8BB9A8C848963020
+A5B15F862E7DCC78F25D7C5326190863D5E14C5C8B1107FC4A44FEAC44475744
+4D27BC3ADB2496D758AEBFBD49F7D93E6AB33F8E9EB23EEB04A74D60669DCA94
+8F1834130643D31DA524380E4958131631A19C1C8ED26207556C047D2DFF37B2
+69FAFD98CB727609ABC99E6E71CC7D4588DB4957DD1E286D45676C9FCC9C894C
+FD8B555BCA925A37EEE489C7FC5E4422CB0728999131241FC14AD4D522125953
+8F0CA3263BA0B22C5E531A6784237D67F4E6D9031F874AC47BEB4E84870290E8
+B1A02169927F6D6DF2BA37169928E7F06723F1FCFDB3E355BDA077E525640CF2
+11E7A3B8DB7BF746E85C18EFB586ABCDA6A329FB5D07459B7E6C66685144EA4C
+DAD55A0BC8ACE6E7972CDD9318A247900C698EB3D319E2CF2657A2CBD51A828A
+FF6D632592EAEF5EF11B6C37B6BA413F846A887BD1B3B89EEF73565F3D0D2ECA
+9F6CEA624002296A1EFE646E370390407746B9D3B2737CFBB2415614AF279584
+EEEE66FDD6947B83EDBE72EFB20DAF8A28FF1410DDFDFFCC9BAFDC23595F4346
+D12CBCD0A3335CCD7758BB7AD06843E35E01006862EFCA1E621ED2A65D66DFDB
+2098887BC845E63C3182FD226B1369975F6276B34A7453D932AE04BA8AA71177
+94FB0DF0D9E564C44EC932424FC707DCE608574F2930E596BD6CB249A05F229C
+DC2C7B3F4693D1ED7A5E23628762E804EDDD045FA702F68652A4BAE83E634BB7
+968281E22133A947416DA2238038CC14777C943CAF8038C03C57418377255201
+AE91F48B7FC6E5864766CD821AF3AAE8945D037F78D6C568F71405C0934C35E1
+576099082701FCE199811DD294CC46C8BAC95C208C3E590F45036691F1A6FFA4
+90B18E3D332DB6BD15030D7B40622753C9A7F0B1C126314700F0EAF60C7ADED3
+9431033CCEB5F4CC02D42B0C297B98AC0D060B8CCB23F49CCC825175CE2A3ED3
+7719230111C69DD2E11AEF151F68A978656397F0FB0D9F6D17E30065D79AE1FB
+42841F918580F3EA43D284AD3FFCFC7FD24038848D6697C68C519487D2C0D18E
+FC7785857D60593E7DD7AE98A2FFDF5357A04F8A74CDA53E85A56B2DD3F25D5A
+9F620224A0A463B7BC2C470BBA2A404EF32B6BC5FC5C0A20F53DE7A8FA45ECD8
+9CC71E7EA832947F829801EAD65B11D30DF7380AF3BB1B23DE5009E59E3417FE
+D153DBCA288DC767537CFC74A9FB90C37D73638049850AD019D2BFC45ADBA046
+32F816E0855B765AC37A0D73593F5DB546DCEFE11EA55D878A85ADF68A6975BE
+0CBEFCB2C3C34A650FE137FF5424EC1C28487B7D93628E039E14526B19E4EC10
+64D99CEB46A5C38E81F3C5AA93D24A2FA55862DD786FF5C28ECC3F08B56E8564
+F18556B5F1DBCFF100E97751AD83318B32C62B5C7BD1CDFB109F708BB748EBD7
+8831A3BD98C5361B66226EA5E832444FCCE71599627C2C1AF8F72103F1A7415F
+526A2CF3C16B80078260806CE627529201F1A70ED484FE92F0C684F4A0419166
+C84CF5342B479A465137BD820832EE94D79A89CD27586E3550F1334652408290
+E2076FFA59AF34834B59E568C7465E6DCD933AFC7C4F37904B6F5DFC77D74713
+B15C80A2764EBBD622778943218112CD853504EC9A164C369C237DD28FC4BE28
+43036E872B2A076DB81FA3F3844CFB23383CA50C135971F27E862D87DA3D92A7
+6A55B20FBDC8F08B4857C2B99E52AD0DA87CE26FA0401C5456071B3EB1BB3F89
+B77292DB0520AA32238BE4D2DBFC52FB6837D0AF6FFC27B43A9CF90D5AFABC30
+41BB44B933DA3A8336FFE9568C0E6EF4EB78D4C5714622E75955FF3E78C4575D
+810E7E0501C16F63A8DF81E537B689FE89AD254C935178E836E4C439AD0ECF36
+C30F76ADEB12ED4A41BADF2F9A5110BD1595B16AF9E044066353662414DBD469
+C92C458B19E2CF7390AFEB6F7F9E6309A71C82A089CD2DF10B21821321C28792
+5BF53DB2C28B55AAF8797624292DA15DA636493350028443C6EA3A5EE2D34D7D
+C2421E6955EFF593A4B690C7C4181757961F92E91A896BA64439D3A6C4DABC66
+89A91795A2DABA5F0E09C79F2AE5A178E37F4FFE0300932030C47C0D7F063AF9
+CCD4063B8984C3889F9DDAAA2086E7D34345915FDA3D82FC347F0D24314DFB37
+8B7F001843D44FB1E1B9EC45589B444FC797737012AAB970DBFD0F43FAEC418E
+16536B30D75D3462EB461C609C8D47E7B3EA757EA7676D23FC0E90F03456E123
+1CFB3CC4E1C0D9BD76B717A8CC0B23758DE3959BA8CA4E6635AA6CBE5FCE6EDA
+DB8A3512329E3473F6983DF6D1282DF3243A03528359F9CA0BC7FD7E77265441
+DBB89C914F82740BDA38E755DDF36B38BC481B7EA2D35D335CA63F800271FBCC
+D9DFAAB5E93F903A8FEC0119ED1479AD315CAA69F4DB314DC26ED5B60252DD15
+2E0A1C4989655D79EE67D722E54198E66CA6EF6FD2B82E5440386030276B14D1
+BC62CA55244B6AD971A023FA480C0321EFCC75626861C86A9C0BA0E70C944B3B
+21CD6DF7B741344010B345394F22199DE571B5E71F57D74F27ADA78E407D0E67
+0E2F2454556BF388104571701FAA9866F81A02BDF349FAB129F23E86C9BD62FC
+05A8FB9D679B921F0616F272F26E0BDB8D5F6FA9E78EA3D8A8D2559C85177C31
+784217D6A61BCB560C5AD591F881A8ACD5910F0675F6848BC8D4E9792F2984FD
+4ACEA1BD9243D7BEEC0DF6292DB1ED5ED621A612FE8D2F4FAD459D4943657ADD
+842FF3D6D1143830B374604B34DD12080D7BBABCC56B4CC24011214CB26E1575
+3BD358D6931EEA4A860E1A17079A59DEB9C7A4CAE1AADDCE367964B7B169AA67
+3EB782E275EDBFE0C5E7FD7DC1D74BDEA77930F422822BB15D1BFC89A8565D49
+AE01B286AE295A1A0CBC029245E94EA10FFB437B85BD4E547F476AD6E7850D0E
+405AE6523DC0CBB36045141019DB87C73771A6CED0715EFF43475A0FD680DDA6
+06D2C1530AD64AC3EFE729F41C4A5422E130D852D784C82835BBAFF561681D2E
+556718C129C9D2D48615CBDC21EC015FC8175698CF322A862B487248D53E1F62
+32B240DC5FD92FFEC328F30A32D4DD880655C0CDB8C0A6025701B90848A5ADCC
+95666607DF2DFC8DEE83F6A664B9055D144C3A5F150324F5348BEE46258D3A25
+6190D2800F4E198E4A702BD9C08E466E283361872786CA70FB7D927E36A2E4A6
+F34E754C8DD8EA2571CEB920818D8B16068294BEABA5CBD4F32EA6822EBBB7BC
+073376256851D7C637B282BBF5DAB0182C67EE05B6CA067EFC9FEB41C852C0C8
+4CAAFD32AA716301301AF68F43F510D3F0F5070C44375E9508D28368D77C3D74
+39705D49FC3929AD9700B3205A433016971AF248EB25722ABD75D068039B663E
+DF0EDA6DA2414F34F3F8539D22DDDB38C5022CE64D636D0BDEF9A08A4AFA85AB
+3502A38A8D0253F153AAC4D8526D51B72E18F4D38022545893B74D339EDE9399
+E5B127D646FAB0A8612DCA1CC8DA7A381FE8BB735EBA4E9C05D6F238CE8CC902
+D1CB601CDC94E21F9E9537CE44D5D84E9A18DAF2A99D8EE950A877F81CC8B55C
+A9534511D08883DE4ECD76DFEF5D26165773A459A2C6CDA1A2B095AFDF0D7EE6
+9B65E0181D69369AFCCFB832FDABFC818580D0817FE37B1D01A11B703081F406
+87848E6766CC8D703B64341ADC30B47F91282EDFFE2894C26690CAC1B113237A
+B5CC03FC2402D631041D617A88E67E7AC8E934D993EFAFC5D3C280C6065CC8EA
+3A3FE058C6917D4D2261EF3B27F4F84A27603543947F05A373C5F8987CDF2672
+DF6276A805DFFB0936772A5A3344CC6A7DC3DBFB464844F9D6A6BF415DF58183
+44B245FA45B8CC39EADC00F42AAD7BDCE1D80995284AE921EB361784C3DF7D7F
+7354C807C6BCAE0E89082ED1857603A39E15A7E232176C51FAE6DF02EEACF5E0
+C9F80EC414D016D5DF926C4455FE7FCBE124CB47C28D01A91B6908D3320480F7
+71183B302FF55667390AF2E314BC8E0DCA1D9BCB80C73C09D36274C91F1149C8
+9024DA3E3E0022F1BF63BD012080A4BD18DE1AB6353B8AD44469296DD4C9928F
+AAB6BE26151101B7807B2F2EE631BD20B064F116731DC3556B48BF53EDCE1499
+F3925DACEC43096853016E9338E1559BE5FAFF381BD82A6C71C267409461DDA3
+76C72E9D95AA2B96376A3B83379B8B8ACBACD4C81041DD8BBD767AD3EFBE479E
+CA5B7529BAE86B985D6BEA5CF7EDC36C78E30CCCCE4EEBEFA2169FA75AE50BCE
+105F8B4C47FE961EED2A60C6C7AAF4C713ABB3BF00C27164649A42B061255C93
+ECD9B8DC0D2A73720893EA87A9619436BB0441D1ACFE4B66296218E1EFC5BE6D
+8540337D6514FB2E38493FB11CB731C8F5863F21359D29793DEA2B103889A61F
+D11075AABCE9F2517EC9B53D7DB5B586B8DAB677BC1AE4BBD043BA99CF39FDA5
+6C856E0A2A8F03089ABCC46C2C6849606988C3B7F11476BD78B73D73ED40CCE3
+2031FCFAE2737B412807F7C9E6494D03EA93448917C5B7C0486172439C132B32
+E829D10EA96B0E873B54C7D2A3108D8678E9172B317EEF73133F01D9D09D8A4E
+CC0DE847ABED596854D54DC3CF3DE605BCDEB500ED2A188680E41CEE552DF55A
+235EA7E738E9BFC4912BD09DBF020D89506CD1270C0B3EA235BDEFE3E247B53D
+20894424603C5A41EDBB960A31B510A33BCC14C66F77EA121005DB4BDC978A8B
+E4D86E59B51793EFE0AC5806DD64E0860EBB61481E868CB90046AAADBB3A47AB
+C082590B1722F95F6CEA4642F2409E506EDBFE9AA18176340054B7EC46C10CC7
+F79152DED9570B7F3A707983202D0274738CB7DB4E9A14291AF15CE3BBD6B3B9
+0E508C3B2A291E44EDF3C8E24B6C3B810F597F13BCF4EF5B4E799DDF1521604B
+E019A51F8FEAA74DD627CF29E7A0DE588F035FFA5B7481050ED9EF7A99E3FE10
+3AB285CCFC758B2278F2B24CE9865F20902D6358440EFC9EAB6D47A6C28CC24C
+E9E9CA5619AA7464211B4E23A6D022E4E60A63B99730488AFEE2B5F1EB1AE08B
+BAC909E4FABEE1F8512BB3B7862EAE8E10393D1987095FCA5160EB02B451713F
+5332E0CF05C754FD76916FECE4DB2807334C316F3B0A640B2DC602C756B5F8EA
+F453A6D82701E2F309838A4C47A8648A567A89550FF4F0A8F1AFB3A1F7C9A8EB
+02E325643F78D02419611D50402BDEB3A16A92F3D4AE513AD13B562C5EE145AB
+39905815D6C3E8B60AC5C02560B2658907CDACFCF46AAF3069248A3907349498
+10EA8AEF27E536BD4963C694A57B12AF3CEE45979BA3750C56F01DD65E1DECC5
+6BAF8D3062CEF9A2B89179CA4C207D42D3EC6C45BE6D1FB3F56C8F84A7A13CCC
+A4C15596E0A9944C09B4037189A2B0D04409CB8446DF8BD5991C265A2DC91C36
+EEE43CB41561D6D131D733AC7707F02010926F13711D0A45D2BEE293F0C78D30
+FEFE85FF18BCF66904152E88A5DE95CCCB1CBD4239EEA0DB002626A434FDAA22
+29EEC078C2116A4D36295BE3F3051D7B7EE08A4211AD764B9A8D9CAA0D1DE310
+6460B90F509370EEB3875928C3250CE7AA4AA4A2C04E1AFDFC87DFEE2A17EBB1
+79163088E634326B24C471AD74BB39F6AD35835B40EC27B7ED3E03770C23A83F
+C926E4E49C0608E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBEFBFAB092B
+C46D3D72DBF4A0960790485372B2196514289465A0B2A48291F051DB2A0AD285
+6B3B38FBE2DC3B4D1CB5FE7A5EFD43BAA7D48BCB87B1BBECEB0B630D6FEADDA6
+ED3C2D0B1B96D7F061EACDE498346A3CA6A77B50461EBFD780DDE75A8607FCED
+3D443D30BB1E4DE562C624F36FAE2F8ADD3F32E0E98C53617537FB915F26253B
+F544176BFD7625B80223C231FE14896CC19E2DB362D6C7AA97AD291A3032F419
+8B12D0D7A61B06D63389A3D05A1326B7A7A5FE7216BCE081EF42F0846374B50F
+FD315E1DF64E73CF532923E209E8F48A84A163CFEC2CE27C04DC00FD5ED52EBD
+4B10AA2776133BC2CBC99AC09AF946C409A009674D3973F49E02479CFCBCC6F3
+F44486733E55AFF970CDCEE36EFAAD437595AEFEE8F2884ED3851CDD937194EC
+D03E78CBB916BC57037DBE008CF0CCF6D7A7918073D89DA1A5EF78FCD1F235F3
+2A62F24154E22FCFB851E1C22E111F6DB9A7F8D9F240B8532A91218736C73BCC
+C0F2F81D7ACBBAA1B71056D018CA5CDFEBC8E3A5511219AFBFABAE4AF3125756
+82E6A86792FF4F53E1A77E016AB67421D22093B0DD14DF91CAF8D0B9822A858C
+8736888C82493407221B7738CA5A266E761DC301FA6EBEF1CEA0B66A6581C863
+8D5F4D4A1CE333DEF556BAA879453320DCE8EDE7ED1918294062582DFB8EB145
+E42398E0AB443A4F47906A09156C93994992C526DBF82D2740D8C45888D4A0CF
+8AE610E7017E11E78CF5E716F8F0DA75C9221E3F45BC7A8F8AF3361EE4B989D3
+A4635F7904281829F30C7154220A64C0A6B89BFED476AD37A68E052072B433E5
+041DF32C69E0D4F050660F516545482856E5573D30CBD27D95C4B672323894D5
+B24CD8F855812A0309F59554533FA55762A0903B56650D1C30CEF45B44FEB6FA
+4349A180D0B4BB20F582D4594813371DAA712F67C1D6DE9F80D4DDA43A9FE34F
+E4FAB544433703882F2A971A09196EE70772CCF4E8199570C607CBAE88BF794E
+A774CAD2ECA4581BD58ADB6AB154DAE79625D9A463B616725FB7745CBB094CB3
+607C6ECA114DD18898A989CA1551A47537FB356B805ABD7FD9DBDADEAA5D1453
+2F6AB4CF487FC29101739FC070DCCA88D2BC7DEDF58F9D12E6298288601F1EC2
+134C63CC7C4BDF7754174D5C5A20DF7A300E7DBA6370B48142B747B4373D28D3
+9DB0FFFF2646E94179D30EBDF73A25B991A8B72030A2C02EF8B7DE41DE1B4C25
+8642FC882F7F947F9CC098E491BD2F7FFE6009ED344479A8615C2F353A540FEE
+60F062C80B22E64B31388226B5C052471F24909E5601B79DBF1F7838A3BAD87A
+6564FEA96ABAD11B83E2308B2A2B3B5714CB9D2D3330ADFD7241F285D511A410
+A3CDC27D677DD17FCDC5BFFCC5CE9C78BFA2B830328F9A6D46AEC3CF192BBFF7
+4C518C7288FDEA2588AF81E4B2E3C0DB5D193016C4CF81249AF3DD504B34BEBB
+4632F4D7E48DE622D6D3D9675E23EBEE3478352EAA05DEC5A6772A60428C7405
+15971B4CE4375A1A9F1EC3D6148A1C850BFBA049DF505817CF5FCBEB7DD5871E
+DA1C1A74828618BBFDC1685A6750E12464F772F3A2CCDB482604F556EF1DE5EA
+9D1991BB213AD960278AA498A967D890C29571327271662AD1F1404A836A801A
+94776AE8FF00313293BE08701A5D90094EB79BF159A65B012A2EACFC2FD63A24
+81330F3CF3E6698EE25EF3C6D9BF8BC7619F7250217F45F01FB0F15F7D3786FE
+1AF77CE0C06AE18F8C86E4C34E707D7EF11CD4322E8DA1D212C20281360F60B0
+A962E256C02723505DACC792086E18039526155ABFD0D21E2805D403CD56EC5D
+3671C9CE091995D384491B65E4B3711B128EE29FA14441B9BCEB72E11C13D38E
+FB1B705AC331588DE29FEFCF03915CB1C64141049219FC028D0EBF7F4D3D2A68
+B2366102ABAD3D8ABE1CFB0A9DE45DB1D7F188A2EAB53160E97AA67C23795550
+FB9C592FC511E223CE1E32D373B2FA3927A0BB82F73A6A99029E58354F2131D8
+4B5D736ACF96F667862BC1BAF0E033DFD0E4A775131735F93F0895E0072591A5
+30393E0EF9FDE3FE2559CB14E22749372883A262140C4E6714F5D76BB727EC1D
+0AD9A06DB0B3D5F5707EBE31FE7F66E30BAD25394D85D6A1E672DD1096784ED2
+206D80192C27876568862E15B1B72102DD4C20619428DEB2182D7A5B4CCD3FB2
+0090767A6AF4C4E67B407B215422A6F409D59C30977F6D4B84D116EE6F2F9709
+180CA6A8CA11AE1447F80168B6CEDA7A20FF9AD7A658A8385E5F5BE2ABC0850E
+F0DB43FD1D96881C95C05D8654D1D562B4E1B528A19A2DA1A65C4DF64925215C
+C4DF3BC0DA1077DE75F932A39855E31C4D4A1F2D1CB9276400AFF35CE170D31F
+2B16683C879CA8A382972E086F827FF93742EB700043207D04B1F80764033929
+A8F36278575777299697480D55F7425124F5D7E61A400BDCD15EADBEDE387552
+3CDFFF0F3EBC495A0C143F7D89F5A7906D76138611002FE7E92828BFC1E8E27C
+F34B972AD10DFD269E762E83D1FAF55AAAD3647229781D1E47E62384F43D8925
+85597CB66F5CCC37D0CC1979414B141B0B14ACEA0C0DDCAED669667EA1F883B5
+C99697A210FB5F43BA7DFA7A6B441D29E047314BA0EF2128C39E8FA4E174E180
+BBCCB105D64D6003CD9FA6516AA18F35C7CC9A7C8D719E8FCE2E4AF1F3B74124
+866EB7FBCCCA5B71D3926A5888D4EE45DEBA1EEABB908B9D5F85DAE2AAC9AC01
+9659396EEF4B46097F60B95A405DEA4E75D61036020AEDB7754226F422E9551C
+BEF3504B69EEB8584D6AC888FDFEDE4783A639A6DA91E826BEC0E3C6C043C47C
+EB610EEB1C7C304449084A11FEE213568E6CABC01F5F358F2B05CDEF065A4255
+83E667D928C2D7500E5926AA784E5659F3651C49C701002EC51111038EA627ED
+64658353BE1CA3769040F003E9221563718511E79DF1586378263B64C3CF4908
+3322176390B8B6CC88AAB0CD130921560822D8F89DCA5B1802B72B112034F3A7
+BD9EF3FABB04B5081C33120741EF2F23E144BF6D376C4643295F769C4B52529A
+054F6B673D04BB51CB07261AFC2B0A6F5BDF6CC77C8E43C053205C11118ACE57
+4645944506E6C1971441D40B4705A4725AC38A93817D33CFD614E6D82DF617F7
+7EAB048E71B51B3BA43BDBDF2A680D97649B531827F6A27FC91200176ED1F787
+C90DC3D3C5CD3B5E0513A540D0C7575D56000265B67F8565A82A1D003242430E
+B6FF1DBE8C3D96F2BAFCE655B666CD868B5F3D166C13ADC94B00E604E6721FD2
+C7ED56171592ECF80CDD365650AEAA5E1D52D8F88DD49D3F271A99201B99E29F
+709C9ACF280854914E1D232EC03BF66BBF7432E4876FB3C6856091CEF0000AC1
+2460C7D2276B6174010EE3696D11291F2E3F06359FB2DF0AD940418996E3BC69
+089F1DEDD57F8B7A8CAB42412D8D67DFD423699143C3BB3C7475E21AAF22AD06
+FB556EA67B254677CD2041DEBCB1FC8F4F3B288515CE4371357009384B60998F
+F0F2A095D7F3BAB5120C4F83209F1FCDE26013495D887B8461CEA108F8AFFC16
+8D29F067A65A53DFEF604CC50026FD0FA59A0D93F91021E7A2A4339CE7B5CAFC
+07B7FEA769AD6DB847C5FFBF83A9135CC1969E4FDFDCFE0B5F87FB1A9C5363DF
+6ADEEEA9082B1AB14AF297C6B72AC7033AD78319D0838FDFA909D8BD1E3C5077
+A7BBBF3C3B3194AABFEA61341C59B612180E4E1C74479165A133D00285C4FD7E
+49FA5D2FB569061CAE94BAFF364DF468BE421CC531EAE4B3CD2473C979D11C11
+BCCEC0550BA61E177A84043B797AAFB22C9FB5EFE995BB7F489674A494F370A7
+329477D58B435892A5DCD78EBA1048842EACD9168B620439F55FCA7313B67CE7
+FA22F8631F181A551912A89D32739DF1D3BF7CD7DF18EBF95CF03C9AE906C232
+A124D171C22295BACD1D974C8BD85FCC3E5A5BA3ECEE5920BBAFFF7CBB603DE7
+72DED3D1A91AF4D9F034FC4E903FC910C2DD83A9EBCDDF1610B2DBCE8D49A89D
+E2733B985650ED4AF7BA55E5268D7DC50499FB10A0A8A89270ACDBB7167F1EAB
+CEDD9532036DC8B0E3082C0CA07D5E9A31F28B335C772B3FB6E71E7B85050753
+F3D80F49365D5006829FED63CB9571B219B3830B4C3BC3B926DD8420D84FF4FD
+6D3263FB9E97AEFFFE3C5FCBD9790B301E9CE62B783B68773C3A3673AF8F575E
+CDFA99FD6AC36D436B89F0FFF57ADC4D7D461ECBA91D8497F341825ABD849980
+EBBAF61719BC50DFACBBC2E6F6CA74B31EF41D3CE547C09DFD50B9BEA18D947C
+78041EE981FF38A306FE6BA6A35630A7D636C1FCDB936D8F9829E91C20F24FCF
+F3B8645ECC3AD0C5EA2C6E6490285C3230F195AE7E6F4D20CAB9F8DC6E18CFAF
+1B031677089C11F12C5F8A59DAB86CE7477658A608CB758F249771AE119EF374
+04C17535023E73FD32A1EF0C6595575A7888422B0051C282B4B49CAE5BEF89C4
+830CF8E3071B1378999867C5F0970BAAFB320F87FC5D14039580BE01C8B223F1
+73BD86C842D1C9ED10B006C9498D723A6E6E4B3D1F7A62C216ABFEF928F1E2BC
+E051279788C2BF2C5A059989302773F0C3AF78609DFD6173CB81DBA26D9F0E44
+A8E0BE7578B7A682581FDD7668540F756B0FA290D7710104D3FB7D11D7DA7372
+51FB47D0B21212E70DAF86A6F2EF86E2824686D085BBED345F7E6EB57D050B66
+ABF0B89AE754BF7F8203F0C857CFAE8A868BC658413CBAE52F30E55B902ACC35
+DE87E70DE8EDFE7D803CBB126441812F2FE368F51654EF115AF46CFBC3800C3A
+BB4326F97319F3EC1C7389F3C9A5D9E476DA325EF015908A6A5B958CF632FAC7
+4FB900E04B0B13B26BFA8A80D7D9C61E853272B9CFC744A71B4001F9CA02A6E5
+FE2C44486145F773517B790FFB540FC1AB69BA768310F537D16FB73F6F857EF4
+19616A0D2E3D646143431C318824FC38A41EA7745C4CCA4E75E460FBBB1875E5
+9CD940B468FC2DA90F69D361C31826743EB62C444271924C89E11E79BB215541
+E3A478F0933EB129EAE44484E084BDDE7F825AF68920F678B5C4584A1EAB3944
+3FB4126192FE52BAE06F64F51F736877EF6935ECA18A5F86EDFFDAB7E4DC0F17
+3A13F0CA0B415712169FDB95DA44EBE94ED148050EA8B17C7BED0D9F20225C3C
+204A716744D3D19D536F23631F2C05A884542E408BFDE756C91AB084E55076BD
+130A5C4DC3BE1FDAFD9348548BA85064FEA8D15C17D8D796896A9318D430B234
+2B9D3806FAF0FD8C3F73BBD5F1FAD85D58F4F20D8814C3C4F34403C404C616BA
+3D47233BE72E4B676F7A211F72225DB3DB146BDB01C7EF6BB5C62F58C1E729F2
+24EC05FB4EC009EF48E7E56CA7AD3C50F55A041447594422EEFFACCE6AF7CC97
+68F720AF8E10B97F7BE3A270405594D3E06C17B47719E2678D952E7AE2B08EF5
+ADC765E59DC22D831094E3986C1F01D42BFBF8A7CFA315D2A1B0FA5117C21FB2
+DE99DD2C1D04C2BF832196D27869EE01D169FC58F743CD16C8F0A7582D5FAADE
+6BE18603642142C01F7924228A89E0645EA557455F1027A249EEAD5580BB3D24
+651664E84B70EF18FF2BFF7603BA3CF4C6B4C95926DF2099D19B442950D8AB6B
+10F2CB000A0D128B232D9A9E24006A4FCB9FDF2D13FFDD939E001AAF11F61EE5
+D6A4303ED46CEB347FF787F3B3D95ED3FBB8E563C2CC64E2DA3631AB809AE5E7
+6F88B4B726AC41950EE2F482555BF740EFD19B85536774CBD1C137BF68BAE029
+43FAEF0D36E3CF03D2E7C4D82D9E93B77A0E409B4D5E17600E1E43F5EA1F8849
+3812847848165C1548740C594BBB157B9A42917B94466C45736CFAA9723223CB
+AF554ECBE4972F8B408FFD530B29D86D466F2D1A2E8D3BBFE5B60766FC706C4D
+F71BA27A4F68E496316C1FCC57968F790C5E7948B72C4AEBA609671339A0AEA2
+1D2A485E14007D8E4377D75506A96D9F8DAEAA879FF07E6137447A43961425A1
+8051A0C0C3881682FBA1FB7D44FCB548EE2EF56D3E57F221A0D2242740AD2C6B
+1DB8C539FB20F08257D40F890FC7E35E82992D202FA0F4243D324A5983198F2A
+73CDBD54D8633E08ED08F6AB4A600A144502EC6C0E64D7A794068920A1AC5359
+71A39AE275A0985633653CFFA517CEE39C4C97DBE7C11DB4532B8213B6BFB01F
+2259FD1697C38DAF20B53DFC9486975EDECA62FEE0E560AA168511535B19915A
+7D0EBB97BC6D6DE5618A53CC463D7000699BA8B86904560C673C48096B221D23
+56ED46C2F7FB449FD3C54F16B960E4260085CDB0E668091D812DB5BE01853F7F
+1EA8A56A2242836658B42A04DBCDAFFBAA05DDB016BBA5D31C90A3BCC11AA415
+7F7CC11191D9DA18C621D859943D7578C07E1D295EA47AB5FDB14365B5AD6770
+47B2A35A9FECF15113D6749C930792B6312D77FE6721B6E3B9A8CB43174033A9
+3571F60D2109A44555E3E903645FD62D218C3662D74F6D6CC8E2383251CDA9AE
+64309FD3CB47406A6DCA7A18A590CCC8B55495235CD6E19E5ADDC240FE1F1299
+D5A4E950160A446B893810AAAD5A1398D832E29AAD67A8D74AA3D84D3EC7C2EA
+FFC26E31DDA3F547E1A79F10812D6F13F02B09A06A643B619C7561E0B3BB8970
+1862071EB66C09D723ABD7E21F050069966B29347DDEDE12B88B5F361966D3B4
+08BCDF5FB6356A2ECEE5118D86CD0DC85A9A53BE7E1C068352E9F349CFB1A8C6
+0E56234CFD61340010CE1C184163D206C87AFB47225F6D9519498F979AB08B72
+AB42EC156FA0E7BC549F2A430A703529E5DB46542534F225F840CAB7D1AB6E43
+B88D35736FD2CCBB0ECA9B263A42847FE706D560B37748A540AFFAAC9C9F2A00
+A83E92720C0C4892C6962CF7AFDDB4EF2F39566CEDB9718E893E8FE50C9C9FCC
+6A921D3D79130049274A8C6EA0C82E9389FF92B06AEA75A7585E7A706C281AA2
+07003C5E31BE5B0FDDA3767B107C2A504CEAEC7BD3C51775569DD1BD8A7748E8
+5CEEEA8F0CBF658C8269082B5288D4ACD657986ED70737B36318E92E02DACBC4
+56A3B93C2037F16E329069C16F52E9BBC504BB84DEB4536386594E7376FE9D27
+CB74DB2CC263413888D1C4B8121EC2C5D4A71BA5134263186E4E2F93B1170A6F
+1725A65DE0BF2FB02FE4082C0CA07D5E9A31F28B335C772B3FB6E71E7B850D91
+AD4EC63F668B70DDF92B5E74564E00F3DF8CFE5A810C9FF5F0895262CBEAE159
+84ED7DA8C72A5EE74A03979B435B91F09CA373237CD5184821CCB8483DD207A4
+83CB99A2830C00D98856F0EFD239DB4CD9A4D009964E5A78A75A1FD3C1BF9723
+4D40D1B53E99F5ACA863828546CAE4D836CADCCE70D61F503C05D4CC4BCA211A
+D3F29492F25ABABC84A3C8221051CDB025E519E52BB2FA19155BDEB2291E9FEE
+9FF070E1DC782D2C96C2126E9745030171081E55CFFC07B7FEA769AD6DB847C5
+FFBF83A9135CC1969E469E05232486F108053A082AF365FDE86FA40B544AB47C
+51DA8BCBFCE2CF04E2DBA86343BADA5C89355A821D2C919D6833903A296C641C
+C83BA1B169B1729DA75FB7BFA99E1426E53799824AD73C5E8BA4181160906A79
+8A4BB2F89E6CCC1D40F78A28ECC992859F085A05262EC4910B45323B24F840AA
+363C8C06EC0F4D58005511B0843ABEC9298C62F7D3ECA60C0878B2A3022E3D1F
+47831D725C3B2D2BD6576BC1FFD0D092D0EF46C2FF8D4D5868CE225EB77F4E62
+5159A05F7F9443A0AC8BCBB2FA24F5F9C4739CDBF72D22D83F2B142EBA604819
+3729AEC956E2C601007EA97707EA2DC72E1D7C37EA762AC6E7348B67C1F08534
+B1CF503901DA83B763C8CF218D415A38205A3DB002C0FE1B2BB0FD33893288E1
+CAF47B73525E1F66E3F4D34E56D7F9F96705D458D51B76C73173263805C12091
+2C4A40F9E2FE11CB83B3BA4339968E9597EEC16144700ADE725EBF12B167CA42
+0943F7F3276BCE104716347CBBB915B4185462EA79C9DAF1AED801D6239C7777
+FF97DB2AC67C7F64A570447FCED40BC94E7465C365A2FB21BABA09D5377F424A
+AE07A199D5825CB5DB62680664A8C32A7059E8DCBDF3EE5CDA220987161A2E2B
+E7F4212FB8E2A9BA738587DB68DAEE4E1255BF293797A1BD1FAAB9AF2BAB4803
+80C61437D6B136DFE42B145626CDD287909F4E902B1636DB4267B9B5FF1454AC
+7D54F59C5D94588BB27460195D5CD57DCA4AE57ABAD4C056E42D5B86A0F90F57
+2D406B03CB1E35BBE7ECDDDA6E7FC363C345F8B3ACB722B368B05C2BD2B2188B
+0E51975F6E3E04F4B21AFAB6EDA99A9762772EB694E6FEDCFBE292901F033C34
+089EC1F0403DFA3C61AAF973165EC8BB8D255A909C780017684D24C958B8D8CD
+F495824800DCA337CEEFBB741AE73DD575D15368DB7C6022BCC5A3A6599E8440
+DC37D853338C68DB048F27E64850AF042F96BFFFD3B3903C60869AB188B4F8C8
+80C41EEF179A9E95A7B2A70E3A9170C482348FB688A75131FB8726B4230B4F8D
+878451CEFEAFA490E16ACBBAD8CFF61BB6F90617233EFBCECF61496F8793E9B2
+9CBAB90443083A74742E895C8B2BB07DDA99390DD354AE4C8E2478A28257BE44
+61BF0D5737FEF579DD9484FA78B0E924B11C3DC8938A559F0D5BF2DAD4417253
+C76643B8CD86EFCC6050DAA8B204C4A83000BF40B9066C210634C26BE4D54889
+27E83A6949F1F163BAF4EB99FCC371083A4988777B0BA569D036482645367F7E
+7A1E7501D976534DB8F4AA0999D7052483C3BDD1D4A10454C93E435AD8B5690C
+5BCA6D17B9E51F0E0BF50829783F5CE239D75E944DBD9996FE7E135D1784D793
+B1DE313193D15C775F01E89CE0D1E726D460DE413EFEA669B7901F256F35A8E8
+349123EFE3513DE84351D340BFE1E0A87313AF33B72B0F9AB59F6A9C39DA4F98
+28B9EDC12DC92A7BA30D1613A3614B260D6F83ECDB18146C7BBEA68DA954FB11
+1767709FDFD6B8D11ABFDB376307BA73824B95611550FDE0CCA34E8FE1ADD421
+1352ACC3AFE91F9FE082F213C45F0EF13072F7747E946206E88D274DD8EEED23
+0B27E0DF64F4D76A5D0CC0C2B8E7CDDA498623748FA6380541C130824BE560CE
+9701C9A84A76F6A2812AF0DEB6AAA7984479B2CDD75A8D974C3232713DD060A3
+874834ED552DD7293D1D3F86D4FDC4FCD4B1697443A99FFA4491F2B85D31FA19
+3F8C9B58F3D4BCCF3638857C25C73B78F5C35FF0DD1AEFE3074AD7D836AD0221
+1578672376E2B3FCE63EA6188EA5A1B0F5106ADF3EEBE554A6C69F8DCB88685B
+932110588AEB8975DEDEE759A2BBCA40C811B9D857CF8E5105EB4615720B6469
+62D8037B07FE87D0E97CF4FA509B30F5CF266753287FAA1AE38EB626E9A41CDC
+6BE62BC7B0CB1BBDC584A6665F8C59C1A2F11A4F507FADCC056E2149ADC9438B
+74A118064460F8A6CB7312AB9DC7B89962E27DDEF0E4EC52EB3F90DFF118DE19
+E071B0CAD1E5477E423C38D574BA9A237BD00A733EA05D613301D6A4D24C14F2
+AFDD734A558594466D19327F4BB5A9B8E0C4747CFEE5B370F52E38E750F117A6
+1647C37E846906ABD77DA27E88743D7EE30E15C1651991A6A9CD12066878AB5D
+5AABB3B12CEA753FBCE23AEF16A12F81D6145E33570A9F19F41999337A57A673
+02CD793D3CE49CD8DE2762AADD662C119B88B06E5886517E80265F10B9458B6B
+7F06D5C9A578996AAF957B963C159EDAD2B14BBA989401A79045BDF78DA02134
+9902332707106BBB5D307960E97F21227B34D001A98B961862B5BA481DA1E4DB
+4B8B2F63FFCC4208FA18CCB93DDF3784D054AAF95DC58EE4FE2988EA94605EF6
+283222A4FE45E411657A641435556166E2411874BCEA002D2EF289BF18C8EBAE
+755857D519625810F7642FF192B1241525D1262B52C70DE1120700C53A8C4198
+24DFF97F4576D8511C2D9462B373C59D8DC802E63BC9A08A0BAE8904A5EBDF9F
+FBE3A3489261A071FB2E2E897C1AD9E6A375D7771A6AEDB0E02641A9766D3C94
+DE2797EA505DDC0A5842CDA6E6E5484BCA81A739E0FA7297AB17B4D2307FA283
+9FCE196D5BD93BED40A9EA708B90450506739302816399B8C8357C1F0EEC2F3D
+5ADD213CBD4FA5311591A3A52101009DDE43B62C03089DA4A1A08266ECB80F39
+56DF84FA5B7F11E4344ABF92894E40E9494038C8C4146D9E400A2CF70467645A
+2F72BB3EDB80685331C5C5999B5AEC80E5C6524D97498491AE6FD4A5ECEC62E1
+E0B1073E6F0B6DEAF86B33F38E14C4D9EEBC5F048B0811B8F3BF2BBA45C9A57E
+7B274F1ACDBD1BE8C562766771E80C997F5B1F8692E1E8CBCF345053E66FF0D7
+E382EB33B0F33725F23D575DB8C766965274CFA6B0CF986FD924816C0C55830C
+CD8D5B824EC6618EF5155DFF6BCEC22ED954560FF7A1971E39FD5011CF8589EA
+50E264B14FCE5DFBC0AEA69F565C82F24E765122AE8A5280ADA093DD3A9BB978
+93774A8BAAAE76004AEFDB5C7DCBF2401DB4921693B8A573A002A46992A7C2EC
+F52F4A885352C70B1CECF502BC56EDE1966C41E28D9E33FEC6EDF59F573E7EE6
+684B82CAAF26B0F6849688C4A3D83CD75A59434FB3497D38B03F6E52ED2F1DD3
+8A57AB9AA6FC582E9A9B3EF96C0F30CA9ACEF70F7756409B3522155968A3B9C7
+7F2029E7D44D88904AD23D3FFBF1AFBF1164062F545BE743C1F152BF07FB852E
+0A92ED6D704F15FF0F863528DB72EA34843B840ACF32FFBFD9E8DC6ED9FA9FF3
+79C70C8E413C65F8D97A8194F96259F8A07E4D3EA96F0E5106C2DD04FD954582
+3A7303F5DF13DA65A193EC75AE920BC40C57B23DD9F31DF8E6B739271A4AEEC6
+444CC22E90A04E43B1D165EA43C140686CE2E8E64C393C26B59748B7EA000C5F
+BB8B8BB77DC8AC0BF32CF66290120A0B84E0E2CC1FF88329D93251443F94C25A
+DC271FCEBED3611546F4470F8DC9A34A31D8FC6479AFBB1004BA15E3E5D0EE47
+0B9811A0F51BC6926F144766DABA0A344DC456D5E319B09D021766A822B1048B
+5F3CD101B1A712173F4D3F5E34F131B32A41EB1527BEDAB8F1E990C0A6786547
+78CEEA64B7B3BFDC1BCC154FE86AD607D2F962729B4543399424634FB4845082
+1921A37FD2134D35241F5A4254DC11A417D465D5680062E387A44BECE5C6C1E4
+B0358124B83444B94A006DC9D3C171BAEA6C706C3433977EC0AC0CB08D9B0296
+9B71A1A0784F874870B8D6F7096E251C6B88360835226126CD237989114BF0DE
+F1E84FC08D89A7A9D4359C9B6DECF341A862F49A3FE8CB87CB4B83461BC1E61E
+D4F83C7356E547451B7B20E16C6D2F5CA9FF87F80D8F86934225E55034DACDEA
+2AE6C8D0C0CBAF7A73BF883DD295DCBBCD0D92C297BE6F1740C1AA795980BFD4
+498A70B19C95AAF94139EDB251936AA43D02F839DD161168565E045D89DC8946
+A9CDA9A7F497246EA4C44A12EF33A54D27E653DCCC2B78551535EE5DA52B7AF5
+030F8AE148231413C6EB1984E30EC73AE00E97EEB44B3FCB53808E0E45786912
+AB9606859F8B88CEBF2609ACB01D758D8C883B0294E541E0DB8CFB173D518F9C
+51019EB4FED063631C630E27EF5A0FA16510FB9F6D14FC983E99D27F9136D98B
+6D150BECFCAB9AC7528E3792B8C87BF92E6A39E5CB7C7CE701707CAD34720855
+0DF890CF5924BC50D349A604C275CCEE298E96A59755370E746320CAAA9DCD5D
+CD55BABD53E08D9FC1A863599BCF9A717F4DC319B4B59D1A418B1C0471F995FF
+9B16AEB06EFA17F88C1BC49F0B60700B0F05CB4E8623072F9884ED79A75221D2
+A3772CBABB1A1DFB78BBF223A60624E11300A768C5D30AEC5E4E3299205DE91F
+70834CD87323DEE711598377B8A1CE29546E3ED45EDECE8A9243E3A6697AEAC8
+555DB97024548895DB59FE6777D6E374B40FAEAFFC4AC8DC19A2E6C69185894F
+EF000C09AEA0C535A5CDE48428211B3614DD55B1151791CE6294480430B3817F
+4C818AB6D27A17455260973FDF394D385E81DCFC02B7C16ACED1F54B3850227D
+2F6D538FEEBDD697C394F6F3B8BB8563E409E90FE9A484A1109F2EBC5EF7908D
+61DC74206F45C0198F2957A103CB2F0D1F55AA122628853277D3063FABF0C384
+F249A1078F558432595547F4B7A0CD08A10D492664E293D71C3A768351FEAABE
+ED85FA5BAB5B9803A898120E5FD95954B85E567969DD0CEA6C96698E0A8749D9
+A1335995707E49C90F72B9C5942F03F06D9052B0AF7CB7E7ED91CB43236FBCC5
+0D20C11C6929C93EE6FF10D626A9235C76FC3010895BE4AFF551597F0B1F3657
+C3F6D99AE73789CA43DDD61AFD0A6C1ABC42F11D385E1BB99D04FEB88B6DE54F
+3245753FC550C7F6DDFD47D41850C81E31DC424E008D3648C230C8DAE6E410E2
+1F448FD60D1E9B8A9DFD05C44C457C2669807F316309C3B86FE985561EBCF74D
+D0AADD279F095AB2975A5DF0D99F84EEF820A7ABA051E8F097B3E33D1E180BCB
+0A7C4B1AE5728DAF271377FA7A0B3BE567F630F989B8F2412E534465334A4115
+6A070819E98D7384DCF20A3083956D51A1EE03A2CA61DE42D78AEF0167498735
+295CFFA34B73DB1D4D77D17EAA35BD7DEF5A54D050720CEB18C82281B4044341
+E8C2293947D17ABE7DB5A4CC7CF50A660F7E2B4165A815EFDD666E075ADBB3E2
+0834170EBB1E68485B88BAC4B3CC064DEBA373B191FBC5DD1478F707C87462B6
+750D30A93F56EECB028F93FC3751A9EBD1D97C1B4A3D172CB448B5B95E50C128
+1EFFF3160CF442002776687500866D8A84D0651F4644CF51DAA8608BC3B698A2
+2BAE29AAE136AC1B4EA21D07C4D7BBA3AB19B14F1490E5EFDC805E67EA1803EA
+C4AB9F7D674E7089B4D57115306585F60AB12F58DCF6C885FFA8B3E42F7CBEC3
+66E60C18416AECDB22DBC756822E7E515F4867B0507001D56A6AEAF6C59102FC
+7A5CF34A17BA8BB89EC9287B3729137F16749F0BFD880E519D305B0313F71DCA
+E5B69DF9551D56E0253ECB4C011887694480448013E594FDC7C0D4075CF497D3
+6B0C069E09D504E360902FFA0EEFD299FAB959A61A952B76C2FBF1A9C063FD03
+B33E23B3D400AC17060AA32CDF7722CF808EEF614A41793523238CB8CE62255B
+AF0145692EE3B52643A0DE3E617421011F78FE6D542317CCB82B906D58ABEC0C
+1485B9B83B1F42CEB4203F46DD2D9DAF8F90CF4F43A855888B11241CEA22C286
+B7F058E8F48EBFC36AAD3511F899A9336C3AE72F666D681A4FA8B2477893175F
+3008EEF551CFD31FF4C8EDA1464E4B6822B0EA9B636F53F71DB75FC6AA30EACE
+E40AFE2068FC618945860121C4BF9C53691AEF59C661BC11D959929AA73D4F72
+AE1C9F11629C25528F9EE4C311EF9941A1871225866E12E2B87190DE90AD502A
+E89BCA5BD92B4A41EDF74BD6546A647368AB44B3E102E2F1348B2F930C2F482F
+17D107B1AA4C38913352388852CA9D2E0F4A930BEDB6F4CE046EE0A9BB4FDF59
+F1C168E7DF3B43FCB4C9DF1736074582183309AE01A7CC9AB0195C0B9D8AA260
+4D44E97BAC3B8BB13E5628BCE6ADBF9F892926DFE4B20D41DCF37C16376241EC
+64990E8FE0F01E28499677DF134EF6C6B454C14B434898A487638D194D7B7F4F
+DE7B730558C056E1E29D254B347D4E43DB29155D93CDC05BC0FE45B681C73C50
+BA9A452FCA63E499511AB71ECB5F7DA6540FF8CDCBC94847750B1F7DE56207EB
+2E7480E1207329949BFAA4259A32E85EC4DC4F14DEA17736D0535B8B84820471
+CAA34AD337BCE7D22253EC0B88C4FEB205770A7B3C751759BA48E9564430EC4F
+1494C878F7F63EDEA60DAF2448DE8A7983AF93936ABF6580C629A7592A909A4F
+89FBE2E3EEFC8A84611D89F3B76B92097A94B6212A1708B1A968EB32F26357C0
+E1421AA0F101BA284D079A7D06D8D7E20E0C275DFF8E0E5BCE6581A2C28C3511
+26B799284434C917AC52941EAEB8C5516B4205E2419B5EA3CBEFFCF06FE0F1BD
+D60D789E56263362340FBA8CA49B9AD210E2B4D776423154B529297E4E8AEB9E
+349683FC5E1C323236F713380A916E858C42C0A17024B262F96C003D0ABD2828
+9B42E513D0E82FC861C0D9ED98E873821095C6BE6CA90DF3996D3D6B8C688597
+34B232A794B76C2F2FB52E11D09B045D242711BA07ABA47AE2C9A245AEA68342
+6FACAB2AC454BF8CAFB4BAB53AEEF64C09F619102B84876333C41AD397BE461E
+81157AFFACC5448B7EE5BEEBC5DF2234B462CCBA1494B784A1501D4A201B9AA5
+0DDD322B269A9EF9E8A341C3838B58331978769588A529A6F9F730EB0BACF4DC
+07775B9477F42BF97B1ED1409469183E0986217475B12542E63DD5AD8DCEEC30
+73F803F3AD7D84D027324E192E9CDD5ECCC9FE06556A2F3AA4096F796ACEE322
+5C3DF1916537BA17FE5EE5EFD3CCF162CB74AE2AEF320C6CFE168487EEABCEA0
+012A7369F429D8DB8C32D872C0578F7394C4781C3FC4C5D21126A66527926A0A
+373476B893FDE910B4F0A8CFAB3896FC42896FF04E078CD780697A4F2C899221
+E11C127809102A59B5F310FFFAD36EEF979C5015E3E114577CE3660049091B68
+A8B012E51CFF4EC0E32BF255B9407F13851B3C57EE6BE247B0F944BCEF2B613E
+1FE50AE11D031390A48B7B80B7AC1EDC4C829388AE005E75EC2C18A6186430C0
+4C56C220E7E11A3FC218612CF6031EE47960224E71522E07B27884552A74DCBF
+CC46786032B6F8678925AFC2C804DAE931EA7011CC0248D331A10FD1DF27FD45
+3D914086B0BA351AEDFF3687E4714F4D5197D15C15ACFADB8BE47AA6C6231E90
+CCBA7487CC2D461E96C613E6A4D03FFCDE2A796E9817603E5ACE9E33326BD996
+80EF375CDD905D7529EFD92567B804B3BFFF417402E8A576856AF06195B4E002
+5EF24813ECA61A8D261B3AE9D1DD640E4EF82F827A17686A11DB292A0BE26580
+62D4F35A8831A49E596BD00DAD0A14078BF55E4A128D2BE8113BC4E93C1A9AB0
+2379190A12FA8250389E8881DF2C74D48A4C56F7482F71039C3C75C3BF7E3906
+8748087C7B7561AF1DA3B48527DF6F4EF7AA2D41A53DC479BEEC76BC2D5857D7
+3FD6095AEDAE0014CC88EAE209C4E0B065EB6BF9E97235525FD05CE475539DB4
+6C17F1DB0CA0E2084EE519EA88E1B1B69FD2E00B306ADFBF4CC6E06F7F4EC78C
+EC7FFE257B7A5E97207FC550900E9D8206F24A189E57A0495C75837B2573412E
+F1523FD7A6D607CF47A17AF5C7D244DE2ED24EBFDF2E750C7DF9806C5CE150D2
+CD5C86ED647EEF9957C30AB9DC710B13F979282A96BD6ECE93E673AE0421853D
+F2F7AFAE4DF72254040DEBAA3A801387E2F9FB09B82C5FFB8BF1A8C563D6FE43
+CBD8FA5C851103EB0E86E529D2E618AF313629517EFD3336D128CF857D23BF5C
+F13B0708EE13BEF790988A4CEEF677D19236D03A324F1710BD52A0567E76F49D
+67AD8B67E569920EFADFEE39EDB812F72C12DDDE250A0ACBCB84628B32651FB6
+01F24BD58A4590EABE7993BFF76A1AAAA683682DCE
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.1: CMMI10 1.100
+%%CreationDate: 1996 Jul 23 07:53:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 61 /slash put
+readonly def
+/FontBBox{-32 -250 1048 750}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
+990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
+6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
+DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
+59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
+D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
+8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
+6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
+1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
+03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
+95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
+74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
+3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
+47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
+AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
+42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
+40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
+B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
+9560176676ABB71BBD0EE56B4CC492C0652750227CEC6F2B8227D6FA080A086B
+4D3A730E3BC6CADCCF5521A6835D88C7DFA3492C070F690436BD8C72FF87CBCC
+F48F6CA7D1EAA7474150BB9A49A6E2A285E09A4E5DF9C8D4D2C5F4B64D42F49F
+DE50382F50BF5C19279773C12970809650686FD87E2C89EF7B36486CC217C0E2
+03BCC6E2E3DF071B3DF0E0336FE2F8C77FE887BF1F0CE617943633D9EEC569BB
+EFB9F665D2D22FA7E7CA520546591B5C1669B4F624F6EF35A097B3822D4166F2
+3981DBD6BAAED5835E0C8F216E43BD14AC80D6D2F434205182F4B897BB10B8A1
+2EDF6077B32ACD587A3891DAE1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.1: CMSY10 1.0
+%%CreationDate: 1991 Aug 15 07:20:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 2 /multiply put
+dup 15 /bullet put
+dup 33 /arrowright put
+dup 104 /angbracketleft put
+dup 105 /angbracketright put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
+5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
+0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
+DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
+71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
+4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
+515DB70A8D4F6146FE068DC1E5DE8BC57033D79919697C81395D5B94C3AAAB11
+52D73937A41903462D92415BDA3BDE0E452D5BCCD583937AAC292752D3520B2A
+25F68BF9727E0F35C254A2054FF6B5CDAF0D7A9B9661760233F9BEDB38C5A8CA
+9E0F3203802A7C966F9B552E7783117467452A9F71C3F205F2AAFD795A4270E1
+86ABB6FAF609AE64652714B2721B5D41B9ACF89705169CCBEB7E9764FA8314FD
+5AE965D4FA887452B6AF710530478DAE042D1DAE4C722BFDCA62FEE446A18B8C
+7BC5103CE060D16055602CF58BE0490389CB56870EC795D91DB3A03749676DAE
+52160AD853F75BF3FED2603C2431E26F0E5BEFCD466C5B7CB0C7014222B2A5A6
+41D691B2C19029CCE4D1E78EB57544A2B03428BAD6E5950DC79F6593BB470F95
+27B271DE5B8DFE5A526858850520EC0F6F798BBE32238639B901B49003860310
+CECA19031E5D1D4E1EB19931E5F6BA8976DA4CF7AE1D83B8C7557E14191A8DFC
+426BE195D981900508E5C58E45A991BD17D25B8D26F6F640D302866A0F821BF6
+535590DD459668145B151FDDF230CACEB407353C91775023AA9E400C8422A47C
+A10E8A3593BA19754DC6D9E673EB831AB16DB3A1590C2D404692A71E7CA79D58
+DE251FCA4FFFF21352F95F94139EB76CB7C678AD228537C976435E7763C835F6
+2A57E69A4472188AEFF262AB3B2747127D98EAB2EFECB2FBE1F487C848341BD8
+C442C63C4B075AE3A74A415CB31EA0EABE1B25B23897F83BCF7A23A27D510E49
+C20B4AF698E8D38EC31B70C960A39718A62AA5D907692326AD8B8E768B3B7BCF
+1DA774D8AF1955AC8957C638B93952D98CB95BBE39C72175FE01F08D68FA7937
+7177341B387C12E4E5B3F87CE94F43538BDA8F923197B1468197D23EB8CD4504
+556CE8AC28FD807B2B5ABF4E1A0260B7A0AD9DBC56828D894CAF30666804E918
+E7DE29479E9628A3A5149A924CCAAE96279337B508DBEA033334580620D52119
+7110FA949289D5AF80A57FC8C6FCC8D679649CDE363A5A33B923FDA5F9C0B4B5
+5172A80CF3BABAAFE5B39FB2D507704128DBFF5611DAE32DB6F955A7FFD606FE
+933A08
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: LMTypewriter10-Regular
+%!PS-AdobeFont-1.0: LMTypewriter10-Regular 0.982
+%%CreationDate: 14th March (Monday), 2005
+% Generated by MetaType1 (a MetaPost-based engine)
+% Copyright 2003--2005 TeX USERS GROUPS. Supported by DANTE eV, GUST, GUTenberg, NTG, and TUG. METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki from GUST (http://www.gust.org.pl).
+% ADL: 611 222 167
+%%EndComments
+FontDirectory/LMTypewriter10-Regular known{/LMTypewriter10-Regular findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(0.982)readonly def
+/Notice(Copyright 2003--2005 TeX USERS GROUPS. Supported by DANTE eV, GUST, GUTenberg, NTG, and TUG. METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki from GUST (http://www.gust.org.pl).)readonly def
+/FullName(LMTypewriter10-Regular)readonly def
+/FamilyName(LMTypewriter10)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch true def
+/ItalicAngle 0 def
+/UnderlinePosition -167 def
+/UnderlineThickness 69 def
+end readonly def
+/FontName /LMTypewriter10-Regular def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-208 -316 731 1023}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
+1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
+B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
+4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
+DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
+2AD360A28616CB4A0670C1BF105A2B97A25458EAC07B98B8F1ABC91ED489DF5A
+340A9C333CA5AF409E52EE1BA5629A1DA85B8B9EA3150173A28A696C6B98D060
+4CD8AE5F032FC97BAA1F5394B526DA51B5521D60F8531E0E5A437F5E00E9B683
+3F08ED5C6A216D2CA9C1806AEA6B335CD03C87CB35115D28AF52BF955F7F349A
+C9C2519FBF9D866A7CC0AB363443FFA4831A9FAF41181CC67437D2315BA0438C
+2D2387CED780B0C89728BF50FCD44E9E83FAB34E2B3568C404B50475374EBD88
+C5897623FD6AABEA4EC344B2C58B3A303CB4AEC838C7487558FB82699FEFFA82
+9D9AFFE0CA5AF8DF180746A5DE0C691C78525613A6BEBF03C63D01AEF1CC1120
+1840B2722DD847497C88C79442A775F06BBC020059E213CE0ACD4ED475A68AE4
+5BDF11249DB6163661AC48C375D7057F28CBD058F502F6C8A01D7A39D6A88849
+4BAC31340020D0415428AF1593007B177F34F217CA227BD69FBC418F59673620
+A29541CF7E097D0CC99D23CA3495AF10E5EF67713E4DDA8E8828D9960D1EF4B4
+19F09220392CC2B4757D8D7CB26D722384DDC7824F2BEDABD3467B506F4F31E7
+2B735C5FEBDCBD6B16FCBC256E8178EDAAFF484DE8135E6BFF79DCEF238310F2
+F0387DF2E7A210A2D81004B8A246CBC818A147CBA867B743DAC4295AFE7CF3D3
+E827C4EF5A7159E7EDE2F6277AFF841E7197DB6384432E26DA6283C2439DA5D2
+FCBA29D6E7F6BB3CF9ACA0BAC4BC066E92357F030EE5F42499F1EA1207F00675
+69C552ED9BB63C4F10D8ABC6C740D7F2237D5BDD8D8B94BBA8ADF803CE70515C
+4C9B69078FF346C3B5502BB792266DBA189C55A37E4E59AE2A9E1CA6A6709759
+49AE73255E24985C8C1BCEE1DE12EC32D0A2ED443E1BDA176AD957246B776CC2
+BDA676A92AC7059CCEA1D1384C70E81C588F0253F25161ECB2373526F54BBC53
+BAB51CE0F8F455A5AF6E214AA39B54229F651B03B14C5D75E8D4F8978775AEF9
+9C4622B54819C47356E722E9594BBFE4F2AA6990CED947E2775E27EA978F28FC
+E0A7CA54B96CB0F2A450BB60A8608E16F01869C907BC4D8321734432C70673F3
+35AD00BDF14775ECD2C71AF0A7CE6D97C26130F4E5054146C308D4687822ACC0
+69FE878F84067FFEF9E72F8364960C845C5A2B81ECB5A523CB2915A925B1655F
+C683BBA2E986B3C401AEC31A6EC87894097F78A2B652818AABE247C5D397B1AB
+6E38DD0C8EA24CB736F46F5D6B13B95692C24679C5DED520EB71B17AB6126CFA
+24ABEC3F6F3FCAD2510DDF5F456F6AA20C296B02E213E218294D109FFD8BB43B
+45B666BBAC49AA465931518AD81BD2BE6FAA00211411EC919B75ED0EBBCCB03E
+F5F13BB2C4F0EF5A35D36BC5FEEC5907086772F4BE1CBA7691480D037E37EBAE
+969B7ABA98EB37CB2C2A8EA5326178611E141F028371D5B7758A43F98F4DC479
+2308CDFE2779CA6F2B4B7094FAA48BE555CB0DC8E762D429B64C360D5E163027
+0573D395E1D941320B7F28C2C8233D743CD3030B8255F7C59FCD30333D542F83
+821C56B4F4B8BCD47CD326C5D69009C8B1622165648B1CE2DF4A4D5FF0DD4EB1
+11622EE5AF104328A4B90D93FA21ACB8D69482A45F3B5893ADDD71F0378DCCF3
+10D9761128948A218EDA860F87A2E273ECFFE853FC746B70F0244EDB76DF5622
+9A420287271D1C73675BC4DEBAA9A9B77740484A6159E105FA43374E288DC93D
+A7561326B7A7A5FE7216BCE081EF42F0846374B50FFD314BDECD14B341F14A9E
+A4D83B33DC6B94C76B462DE2237B3467B1A26791BB653B865750745817CA28E2
+221C07281BCFF79F658BC473FC262EE2FDEAD12F1178FD23CAE96C94B20AE2F1
+D147AAB602E9889CA3D425145EBE94FB5A471CDB842AFDA408E56DBB752A5F90
+EA7C2765D1983BD77CC4F02023B383E39712D021442DEE880A6518C3E585EA20
+0884B051300C269B2353CEB9D39AB195BE5776EB8D864CE0BC36AE063F833CE6
+6B594BB6BD224F9E55B1187997532BD69AAA71A7046587EA1350C84F0ADDDB4F
+E35701CDDDA2CE68D6CF18F74C45C985E6F9113472083B7B4E700546D3433659
+0BCE1D420F1B6DB72361A82EC811DD60CFD0F29FAF8462DB98C784359F28895A
+CA2468C31918DEF4D0064EBFC23908C4EE8655E12DCA4E6B66BCB89BBEFF3359
+F62327FEA224A856E0B7309A9711146DACEC7698A5FDB4685C29D7ABC599CBE2
+1843BBCC7A5080AC8C3EAD6F518231408EAEF5070BB95F0EF502225FF0F97C11
+92976B4797AB3620FE665809102BA7126B73D1DFEC96B8B48C55D6D0B9CDAD69
+0F8976A6736F54733A9A1DE3328CBCB8FF1DED4C52CF83421209C4A82074B1A0
+9188847B219D146D73D89EB24BB2F33508AC5FE1C03EEEC8DB2F0FDA6D519752
+6AD773CC4FE566DAD91997A19D95E52890888F7002E25E625DC47721187408EA
+2A22AA7C602BE0B0A43D9D5C6F50C479AE379006220706DC806409EF7E5BFD96
+6C2815E1A1DAC71DA249BA44E0D0D3F6724561ACB8D1BB8CC8938FE313D6978B
+315F723A7E8296AFBFEE1989A09F9F9A09D503C8683A15B591ADCB184E689989
+5E3B48C80DB5140CECAD52A56F1BFD459667449FB7D3A09203AB9F07A8726726
+04F139C499CC23218FBBA2174F6F44449816AEEF3795C69DE577C4B9C0EB5891
+CFFFAAFAC728BE96A872391420BFEC53355E4FCFBAF202BE40EB2D9FFC4CF5D9
+7E5C253EC6CBC95C776157B26448EC9E0DF35C6B43C7C81B91358CF6517C9C41
+8DA0959A99677C4A5A97860D9D1615587D68A4AC7A7204445CA8D365ADD468CC
+F773F3D5F482480A69070C62EB07B6A43063CC0EE57C97BDCAE5BAFB5AF89F94
+923453B335C2D5487DDBDC27DCAA73799D9308C7344ECCE1242F5ED495501262
+317FEF59FF2CC06304B7125EA7A893F6281F1192BFFEDBE544A95183E9A00F23
+BC0DB07A36EB7B608D2AD018C84F470192BF326C93EA779E60BB4E038223B7A6
+E419ABFC5589937753F789D62A85E0B7DB21E963318BEC09EB32BBF97D4C85C9
+9BBA62EE86C30D0DE6FDD8CBC3A6CB7A5F2F60CAA8FD04D9F0D5E02CF6E173D5
+6F8D3D3CCC6FFAE2CC33028129F4A085AD61FEA18DD519076B7C40657F0218DC
+9A35C4112D7F4F248721974FC654CA144765FC7D16FF244FC13E97116E1C3FDB
+669D7F761F45FE977A7D2251773B691B2D79E57EEE7810FC84BAB090E3434034
+B8BF9C336D7991B97D2C102F72ABE7F97CF8D7F3E36B58DD3E802C89472529D7
+F422B6BDC853612A330747A58759815B768E0D7738E36188B538522D04808003
+0FD0C8932BC9F78CD047695BB506DB994C5F5824813B878784571BD807C450CB
+DF0453682BB3519205D57BAC8E8D1035C70385541366D7F036B7A36FEBD489C0
+E4B284FFA332B3D433EA37474B6B70426ACAB0D723CCF35E37FC3ECA0714EC89
+DDE0C6C1670C8E1A30BF278A959256964FC491B192838A87D6ADF80C755BB866
+B0536E9D0486EE22E1C9771B40D48806F82B4B5AA65A7A9B6E99FED552EF5639
+5011B3A13BD144BDFAAABE3E3F9A2B1635540D6C05951627A6010A110BB390AA
+5312E192C2AFB92AE52EF03F94DC211CB2CB94A27524A4C2516A816233885204
+3093DBCC03FC0A022D504EF495A6B5D5A0127D5BC39C5BCCEA527FC5AB60891B
+BD258ADFB0B4B7F81B9A23C87331C9579B9FA4A5A6C89C0F79AAA61401F6CA05
+8ED16528D28E50E37BBEB1D155450364504E14B92F4B6722BD29396F61B509F4
+B1F39474686F17807CD210AFD2C02131258DABAA1CD08127A538FD71FEB47665
+EED274860C3BF880DC2F6C80CEC4A9218B29DF6D268B4C57CC51D40DE34C3793
+29ADB367F7561FCDD83C1A9473DDF6254C62013FD10333512A4B99192330E9CA
+13D9C379F6D4BF688ACAF9F67A367682C94A82A0F73BA0CF85D443B7CEB513FC
+E083D3DE0E9B39B77AF6F492E24663E0BE2020D0F73ABD375CFFDB55C192759C
+A158C1C3C972D1772F7CC3B20A150C67BC1E9EBB4E6267D3463BBA62F326E481
+093C909067B140C92B19C1AD14481B2B51A357012BE45B6B1416CD777C55AF62
+01D2466B9753C2806CC4C21A7CBDF293AC35BE4CB855C99CE14CBF5AD3288030
+E36A4AA67966B1A383BCC2FDC0173C1C05CDAF99C7826A77AEBEA0EBC4C4EBD6
+FD73B454A1E9807DE85363DF1EC4CA35BEE645078C74C53DFCAE9A895D47D5DD
+F5B4C4A724969C7BB7463204E9937B3E9B6055623EFC4FE1DE599BCEFDA85BE2
+9E113D06CC89BCCC3D6877A763C3178F38BBC558A1E4B888F2A56A19F391D394
+603C39A8EB2A7B29AC7F24D1260B7A39E0F87E7AD5FCF013B3EA4C39D7A98D13
+10BFFF1BFD938020D6F8F873E7A0C607F80A4C94CADE958A286C4E76A6B2EAED
+FE2FDB17FF267D0F21C35BE0D60FE50F2AC2BEDDBACA731F6A6A487FB63811D1
+1E765AF68EC5862ABBC9851911351B86A8346E2A8B93027C166028F1147DA54D
+B76950FB438571A427EF5C938B1C0AA429E2C6C9F76C9EAA0D8DBAFD92E40730
+1632F4E74597156CD7903C1C42E115E9C5203037C808BD295195E06265F9F845
+E184CC0594188DC4771B8904EEEBCC24F73AED8CAA60D19C8AA1FEC0DC50899D
+11BE76EC06E70CB7751EC56EB5C80EE2A7AAF2CA12D1EB4548266CEB6DED188E
+FEAE13FA319E5F388B89BF950C292C152AECC5D01E6CD2CFF2A335D8E21BDEAC
+7BDE74DBE7654F3277E7D2F3F10BA883CB2046E81CE317A0B867554FC41A1CFF
+D301929BE09F85FBEE99D21B512779E121066B447E7AAE1341C6231A44436177
+00BB86DD2DD408C5D8978FF3C3ED33A6A882C549C4D7C8E35656CC9F8DBC66D1
+715E03CCB773C8BF489F570E3BA55C79603EFA6E0830183BE3DC453189871949
+3BEC5458D52ACEBC284F2AE1A678A4961393C4717F0CE7E9B3FAF14A531D8839
+074F73F9FD61748F194DA2E1B368D757BAB2FFC553ECFABB7E9694FFF0BA2F68
+62D8B6767346EC7C81C2621090113BE75EF0CFC1C176A9649E1EAC8419EFADD6
+877A8A828777527ECB048884B759AC9A551DE527F80D2452A711B015F03F47B4
+9DD7F33D5B4AB217BA1048A6E8A8E59BADAB0DF6C6D023D4D3FE4C32956D9E76
+7E309ABE6CA45067EFC6923A5FCE039A9B9DF6FB29227AB3A481B5B76ACD2D17
+6FE7587CC217F9F568A81F97C7101BABC80FC6726396B20DFA40ED6AC6C134C8
+FFB644C505C324413CC9AA82CB0A51F6AAD0A5B01A5AB634715251B19FBA354F
+49ECF6B7E76FA5EF4ED2D5FB2870E2C36D1CF43D1AB5EC07FD02651DB2565E84
+9E3E863D02EBC561CDA7D32B64D1BAEE7735FFEFA9801E4D411FC6A3C6139D58
+E9D69D6D8FD76C832D4161AF4E55CAF3C7C84F3D397E25A739C61C084465A5E6
+E28BEFBBC6020ED7EF071525CDB93880A24EAEADF171B5C0745AE7D4C90730CF
+B259E348145C5C9A51773D0C75B3EC4997939B8FF2FD682FC5F4572E7CECE7E5
+48847AC42C77C4EB1AECFB3036079F4F10AD3441334B6342027D6840C2CD47C0
+830E7D9C2202314FC6267C0E80B973173F1C0470FE756A3B9E57591BDFBFD50C
+F2EA8E3F28EB495069A1DDF11DC575039B9325E885564248E527CC7F4CEA370D
+01C5CDA782878DCD1076B37DED307D41687135708C6BE071493A4E7D819CF6DE
+3EA05D613301D6A4D7B251979A0C70147753E076B73687915D05705F38761D50
+95AB71CC001A8D44DF11ACEF4941B8E5598E11FD11363CF45D0AD1FDAF194F7D
+CD648D8F14A5264B6277B6BA57850DEBC593B844B77C34B7C17AB9B7DB8AF11C
+CF34D24EE2C844A0E1323D2B6F0AC89ED75A8D8990BEC512C815FB214B82459C
+026B3A1226E7BF21558D70B55472C2E331AAAFEA5C905FC0D12C6ECB60F72D16
+E67673D4BD4A91BA9BDFBFE3B71B65667AE5E27D9AC6340010DBDFC09F5B3A39
+0C7084BA4E6E0D78AFDB692AB573303C6D458A1ABAAA7CE8CAA45A9CF32034CD
+2106773B47C1150E113158D9BD552DE9B8B0D55B9160FD2F1A5D114DDC0F56E2
+1EC302E8127B1D6467EEB0F60A142C6CCE7DA625F13D9C508DBB5659C16C8D4A
+57C8D48FAAAF03996D966AE65A1E3D80DF790547FF23C860C277CCA229FA53B6
+A9E830C0658485CA630766ACC73011ED0874B55A2F39CC9DA62E79AB52309037
+CCBDBD8E33B85FAB35AD6E6AD0598415CC67957722506A4F3C9CE40724AE4FB4
+A931ED30390B81E0D7C76E8BA15289ED33F847F34F8B86B6A05134D14DC4706B
+4B435FD5255C00B1CCEED3EBEDFB7778AF5F984DEA53961B7AC5B2258900C878
+1645BD36960B83664FE8D31D8D46949F69A3DABEC0658F565BF624D326317DEB
+820EE23562352D63B00CE64E574010172423BF5A5403B8E8656640B9FD8DD7D1
+F131D312C2CF747D35FB85DE4E3D72319F54E9E05755F04702A145F80D076763
+31147BFF0602581EEEDD6C8F062E3E6783AD762482408DC5FAF1EDA8FD8E3EE8
+BFB0B49A2AC41080DB9F3D8ED49F60786E6171529E0E1972EBF20BA99B973D83
+3C0135343C9A4C06B895687A3F0DEA8B7F4F8013345CDBA402EBCCC1090E857A
+B029E6C75123998FC42D3E0C3F20960FE902FA8FCDBA92637D2CE33D4EEBF0AD
+2A8782CDF9E695663ED58922C2D185B80B478DA643F3EBED3ABC74FA83FB5145
+20DE675D073F415271514ACFA19D2B9D2E2E1D3DF78D4A55409F16111EAC8BFB
+0D946E34E5623D68837EA1E70DA07C43942B964A6D5ABBACCE69775DA6C3D3F1
+0434C3077A2428BEB3FA5E46ED9C413EF195DB33CB8CA3E04E291EE8E9E19ED3
+16C9751654A3CD885FDC72E4D24101C91398605EF9467750D982CCCD4B937C7D
+BD3D0A85275A7DA9E0E1336F13F8526C6BBFF2B1DB7FA8AE81BB3381FFFC6801
+FC793F24F175B4395881CCBD19E055EC61B46F490A77118A2D65E8A6B1CF6305
+53013E902F16251FD20BEE1A1572D7A182F0DEEEB596F4524B80DABCA7D280DF
+AB8B0B3ACC533B21FD461641C4FE92E11F232CACF2867E6F462C044BC20DA885
+EDCD4803D5DC0FB5BF685331C5C5999B5AEC80E5C6524D9749810CA6CDE659C1
+E6CDCFCB3FD9ABF5D7BEBEA6BEA39EEBEEC99AB504CB4FE1C4F7A53B8EC2FDC7
+614E23F7D328D458E70B6DBE472F83389D74C3B83B7437FB44CE935B88A3D7D4
+E3FB13343F286E505014A567733A950B86CFF737D3C7CDF50D3E9219F908B315
+D8FC4DABAC6A8F104943DEECE7E5FC166ECC5C25B81723F35B6E2C376C4F467E
+2F6A320A79C6A1C23A695A0C8B36CBEEC17D5A5C3C97BF954050C48466C4352C
+79BFA265F992C7BAD1CE5EF4DF3F8C21D9CC04E187BE53F8FED4F33633BA03A7
+248C804DAA2B51B443839D49DE5CE537DF8352F46113649BBF781BD5C6928245
+9F75ADA02D7ED5D348F7CB90853155DDB6250BADA65F839BB6CBAC21C9507357
+B0C37CD15368DB7C6022BCC5A3A6599E8440DC37D8533389D6FFEE8CA94484C8
+D06F0C5EA658E1E27E801178FB453D112407698138FFBB16C5A1132F73A6E14E
+09CCB4A01F624F8B47476E4098ED693455F82F098F49FF48762FFFD2E8B5EE02
+1FEF16B633D789B5AD9912A0DA55686A77634C5BF95DBE48FE4DA1BB5D3B1B4D
+A1454568CE441083F4647D674AEEC41A3E496FDEC2C0A1F90C1F4FF44273E895
+E36ECD8881C06314B934962984C7FE400CCA51194B7A91345D491DF967641D4D
+F5FDC27E019A58B072F20B249362BF1999B6EB81DCFCDA69E68F2A60A840779F
+33BBFECE063768C3B08BA647BC6CF4B18AFBCBAE3F83829AF4F1C1B762DD12E1
+3CF238935252C84E876F9F42CA4E7892D99644B225C06917CD8C632D443824A5
+26DDD545AA99CF8EC08CF47C409055FA93DCC555683FCB4D46B8BD32FED7F47A
+A7DBE8B7B8B305D5BA7EBC2FA4287AE02B2539F6DACD88AD99A2B686FBEC34A6
+F9ED7CA0D34378914075B7A31ED94233A9690AA696EE8680F2218CE7AF439563
+60D95D5DAC9009FAF1D1CAEDF7DB855F8A6A1FCEF61CD2A5097CCF506C626B18
+E1CC6E4F1FAE7489FC2A842A1398CD00188333431902E82B66A456173D23BF8F
+BC66A3E4A223A448D89044F3709F1688660787640CDDE6B7918E261620939439
+77D6C64C44F44B79EC7E16AF8A706E2A30A8D04F7CE25277024CDCF396AD743A
+F24B4870DF45DCA66055EEC8313272070103BD0C1A0CC262235138ECAF1B66B0
+9DF5739B4A104248B717850832B3812C04006BF7FC11A7338F380927E5F20F65
+E61032E53BD00CF49A36F6AB633326189C155E3D6F77101C59F62AEB10B4DC0B
+DFD0995D0085C514658D7A1084DEA5C3FCD95CB1834DC4DFBAB734E78912D306
+347C0DCDEBBF156308B599A33E79B6CA2FF8E5412628E7F6E827F0EE06537599
+5DA17FE02884F4E26CCDC125E1127CE3BF44B5672639E3411AF88BCE768CC72F
+14589D293BF29C73EB3A2860B123D9B971EDF13DF610C6F3EA97A4A38F3F2827
+3DF0A1DEA602C8687473C07F4671206794D6EAD1708AEE49AAA636E6FDB83CCE
+8849508AB9653D3002D39B43809169C114312748E0A60E83AFECFC0279ECFDE3
+14BC8E0EFA447E36F75B06C555D966E73FA7A1164CF197CECA77B2BF8FD9BC3A
+76BDFC773C1957E23347C4C78D0C3707BBF6A58C50ABAFAA52EC5F286AE67CB5
+0907176F2DF522917B41D1DA4F460189CA64DA2D8AC35DD10A8785399D382FC5
+4ED39CEF3F9292DD0BCCC266E6895648A6629899B29523A3E2876BEF80C09603
+6DD4C95B6B6EF41016922430549FE1ABE58BC6297B05FD52E99C741A3E0AB942
+174C3AC43E4C2E379C5976511DA685A959D1827A1967CBC5E782151F69CCA985
+24AE18876BA8E350679F288F726DCF297BECFB8920206D8807B9DACCDDB981C4
+5E13732320512E9B61E1D683FC1DCADA8C9F6C822C84B4D06EF4C815482D4819
+F059E590A670456AE85071AB946D3B0F2A7FDB9B3BA6BB7AC00BB6D156AF24E2
+3B77D83180BB4741A6900B1B64C4A285B25A06D846FC8ACCAA52EEFBB2C31C4F
+8FF8BB1E7EA3D879118BE4F2D2F5B4D6D5A90B188505175088F304C2C9022814
+F58A69A8643A1655DF6C848C3B02C04D9E889714ECE6C8838605E184663A3613
+8ED8C3981B0EA15380385C9E4571C466AF1C0846C25363440720BE08EE3F85A6
+9114E7C3446DDF1D7D942C7A1B5171F1BF3F29CDF026E8E5BEF643BFDF588DF9
+3B6925100D074E11C6D288042023756461D2BFEEF8BFD513B0380993B8D52A65
+46D6977650310EBC62B5AAE1C61E6A8BB6B315DE7285F1C1C49DDA1A7E7833FE
+D6D84E6F6554646BD59A3DF0153E09C52EAA676AF73508E9704D6E01E3FC943A
+A32D2E5C8BC17485EDF454F39D7AD4B5AE946C7E207BBDDE96E9AA998A741417
+E5C0A79444E197B321BB8116BBC6FC1C6FA793153C95555805F13A46336CD217
+1FFC355965BDD50DE68A0570629D51DBD141B8B7988DBDA4CB77CB2097DBFA64
+05117245C74D0FC1B495593B3D020683696B7D5186206027B020024CB98169C9
+FAF20B76D6CDD0DBAA8822B58A6BDC7D7E585A9C849CE54A33D63B692151773D
+A08101509CD47B1070873F9DFC151ED509560A43E1678203DF64C3915EE29DBF
+E1AE36DCF413C8026120D556E3AAE3C6CDDC2209680D6951E73BA1DB177585AF
+50149DA5C766A2D241AD2F9E6CAFB2BD81EBED69E888FBA1E2544DE0BB152A09
+01F7BA032EE0F2AD7CE0FEE3CAD755AC23964FB3A0FE97C1245DD6E5EB772AAE
+B666A158A5D83B7E0FBE24C3092C12D311487C360FDBD15FDBA7AB5C9FCB13F9
+11F771074D424FC74A13CB659627682A37B6583580231B6C0044F2FE6D0E1354
+98CE167FB5D27A610669CBA6C5742CFBC4C40ABB2685D389DBCCBBE4CDB02694
+B403E6922EF30EEDB86012DBFFF13C7DAC43B546822755C5ADC3F4798C3EF4A5
+6D79AA6C5EBEB45D3AF27D21DDAEFD798892E8865EBF5276D595486474679F6D
+83CB4F7CC1656BE602CAAF7D89959658835F6DD1A7BB0A1BAA848811AAF0B2D2
+BFFB94A610FC31D10C0815C4596F755CEF317497B20CE477C46C9CF5A2EA8004
+82A6BB5D7C17BD16A11DFD7D48F4FE71A6869C42FCF442B2723AB0DC49FC8A2E
+0BCFB2A5224A20C5C14FE0568AC78CBFA622D31F783FE35D5AEDA6D646ED0B65
+8B1D2ECBA107B30A9C71A8C23EA2E1EB0302C214E7D6F7E62C178B8C406F7F4B
+AF61516F52BCA6767BD06B21212750EA6C26EF7F9C9D4E4602EDEF6492A8AB39
+1237137B5A5C661809CE83D67D926816D58D4E2306026405D970EBE54FD703A9
+F5E0CE1DD74F1C6081D61317763D0C226C1B0520541F3D309AC650FEAF3BDDA5
+6769149F2A1B8CA400958C6611D567EECE1E42FEFEDDA0078E7789333EB4A4A9
+CE7E1FC3DE57410DA12E707F36C2DD237344E594568E611AF4987F7203DDCE93
+170428CB54EFDA16BCA10B6031A59CB8548D2DDD50B72F99FD64C63AD02717F7
+1FCBF459E0DF961A5281ACE5534744D5DCA956F1D0FBFF3AC03458D9BD552DE9
+B8B026EDE899A33A846BF3641A7CD4FC672CD10024F331FE72D5006B5CB38C7A
+634E500950E67175C8EA5084E4FED0637D79FC8F79C315815887A0B05BE6C356
+CB33BD7B26C60E59C9710FD0AEAAC9496CB47C84630C8BBB5D7A088A6E734361
+5E64359C00C372BEF65C43A02C59ADDAAC725D06E4B89C2722635C92ECB992AF
+7DFCBF3AABAB38A59159D28EE82B1E0D598150AFE3009F4B5B5B68F7D7EA0ED9
+EE8EE582EC2347A9D9D537867718B137C170E37F4EDB7B06FF106463F15AE054
+F273399DD9C1E4CD0CB37EE28268FA3F210153EA929F9AB8B2BB9EF10D8EC576
+12DBA20E15C4B54109A1B5D36962D6C23C0FB45B933534C0B4C59DCBC43123AD
+C66BF831DB6A55DCD23E2428C6699442358D5345D634EF0886A20B66A8ECE119
+E076E25C4799D60C2CC73610B087F668AEBDE8800B4EAF0AC1C993B6CEB761AC
+8A4993D34A1E767260A171E7BD66A4B803B7B4ED054CD81E02C40475CC3DA7EA
+0C5872B6C996C44E712F82A71C040CC46914D29D5207C63E893B0F854BDFC449
+ED454D197E8B3820AF57881EB688D61276F94706B29796358956C55E2AFF9E1D
+DA55A4DB09F7284A186924F1D302BC8A984C08999491AA9C10B3A6B79CCC2CD8
+440BFCEBB85F434EEC721B1687E847E0BE6E4DD3C751E3FD6AA8BB509B508544
+5A66B75B90802B8522CD9775285CCCC1D8661C4F061141B6A3B673820401628C
+3994C49C54859DB5FC6D3B9BCE671341CF7C30CAFCE21C74ED943A4EED0C1B3B
+D32479CB4AB45DC4B966A6F5B67AB968DB5BC1E2390645266166F85E87FDD024
+24F0BB509687B0C6958967CF82C547CE1F1FE1B018462BEBE17138AA07373412
+B44023BA4E204FFC37535085D94909E448627F247FBFFDDC55F549333C2C6CCF
+7A84850350E764479A66995E9C8D91B1DE629208A7DFC55327ECCF5BA4050D53
+8C053D9F362D8D25132FC87B35473527A07F8AF0C5D5B18E333F92594CC3FE8F
+E52B960F67D6D533107EBDB47808CDCAA21D4A2B6E13D7FAB3BF897D9C8EF5A1
+4FAAB7FA53CD2601C5A7C39DE7FC5A89FB868D379093C76B22FA65AD62C472D8
+392272B72B903E988A469C72511CB259E34897555E41856D173CED91E77A8626
+A29B22DE3495218282E3DD31EA5EAB1C2B1DAC68EDA5CBB912597B5108AEEB51
+985E869E1187E732C3302E608D428BC5B6EF2A1DFCD1B084170140A7516D83EA
+6D228C3075CED71D73D954E906B2E454B042219998E4896D091C0A67012884DC
+6438DEC47396ED7A19900DA26B5C69158EAC38C8B5030B795AA0CE8D74EF1AB5
+82C3ADC6811EABCD71C98311C13C3CCD7B252EDA53076928F9867BDE894CA483
+5568EEBE9F1EBA0D351904AA26CF813DF2352A18A33FBCFC1236254669680E1B
+B64E75827BFC859BB38E7063D774894508801DD6037CE8D6959FDC22C36E1541
+899171BC12C8AFDEB8BEE40DA110ADA3FF7F79157204E37A4CBBCB1EC09CA4CD
+0107D87997A1B6DE54F4928EFE1822E00375D6EC1A698AFBEE2418D16C7DF7E5
+DC82EC2453C76DA0E37881839138AD73B30958EECCF947B560416263259C9A91
+88EC6821B09BD0960BD419076B9BA994FB4A0185E387357DDBE05D64591E6A43
+69326774B114CEC7C29FD13B0C1928828564D92085764B70DE68D7E359A081B2
+D1D4CEB9E40FFAC6BD2F8303F58AD762475D749E55267744E046627E381FF097
+27EFEBB52E5D60AACB9F06D2110DDA89A3CAE0A3082B99772D58532B1A3E7A4E
+04BBBB4676534794CEAB380B1E461C5432A86D79C99ED39EF436CBA30F8EB1A6
+E543782DABE3FF873F446A600029D5FACE40BDF7F9B0714AB9E6E655AFE40883
+439385A66612CF61FBCC5917EF125CE9A3362FBC02F1967DA9603932A66FAC82
+D253D8256F6828433B6FA36C08DA3B7FC06D2E69166E5BCDC33EFFFD392924E5
+7ECB5A258A29105B3303E4EC76FE3383700A594ADE0E9D59FF37C4F4E6E54845
+E9F80D1180B1FCA1A75090DCBAE8DB96C15B184C668CE54897E8B9F0A0E73300
+686A2EEA2E5002D7CC403AE6A0080CF4DFCACEE5513EAF3E903BAB38790E872B
+D9E58DFA8BC885FAE09A9446DFDF923961AE5C0616208C27229420CF2450270B
+B75F181704FC3ADA152A9B3D1400072AD969B0353ACDECB582C109585F829065
+A21ED351087963C8B579466D5A3237732F80C4ECF89E1C4C315D782334244B76
+7EB7651FF0B70681E8AFCB586558161B3D57710E22F1F98824AFF33B68549CE3
+4ADDF25E2262FF7F3777956E984735F551A81DBD3A13D927138FC985E21E924E
+15E480A3148A7DCBBF61ED7769F5DD268AE35F039B09D77B795FAA9C987C3A1B
+4BC2D791D856307FEBC524734E0DA2BD1A957EC40BEC5ED705F31F6325D15C0A
+93C2BE6091FF0FC1F756FEE0E51A3A5197A7527303F4C29E1240F90533E281EE
+EDCC3F5E4DE80BCEBE57D1EC4A3D0035E2A57BEBDC39E7AB9B8A6C79FE207C18
+E5AF8026D15411CD48CC6C3D7E0E41EAF61191F2FD8874475F36FA1D9905A3E1
+69A1A02B17E1E5A321FA60C8B478AF69608C3DFDF5EC927C6E79972AD10D4E8B
+7945973E31253DAD08488B1C71AA6F08A5FE3F6222ACF5BF49BF2C28599EB66F
+071FFCE3410C547A9B74D2160649724B6005BEEFF3FA45A3B0827C61ABFA9DDB
+04C9AA1DDB15D6C9B18141AA9663BA238228C268E3045EC926EE4FA1566B96E2
+21864A45A24ADAEC63F61C9FD1819D064DB0024341A7BA745D8F3DF3DD0D5AB0
+28F2EAA0F855F7EDC36C78E30CCCCE4EEBEFA2169FA75AE50BCCB2E0CDD97770
+20AF551C7388FC693CA59B24774D8798849B5CB64D19B2D50C3CDB4E43E6D918
+5F37A0B20E80D2C071EBFB43D84299D336736B15B05591122AE51D167B1CEFC6
+9766224D83461F0530CEE3B17B32722B35C8F4F8B7EE0DCDFAD9087B161E74E4
+B1F38E4E2B8E6B7B2717F2AE5C7A008D5D6D8FB2DDDE41498CC6B6D44361F4BB
+36135D9BD2741BD5A40FB00BA9C014DA2144FBE631FD29A63119C731B3FC8D78
+A9E369F922CA6454BC145B47BFEA03F315BA14C80E80248819BCCFAA907DAB20
+B5F6E2067C46264EEEB0AB0FBF2EDA1A8420EF654A1850EEC7CF994BE8DE8672
+207703D00D9E6A2484139548F671E401BF708F7D4FDD2789F57A6585929BF102
+8022A7979D6833903A296C641CC83BA1B169B1729DA75FB7B1757E911DD383BE
+2942320C8F54044AA6A13F05A35E36AA282F0E245291E60AA9A4EE1AE4B05DE4
+9C03FB70AFD472AACBF8AE866C0504DCAE2EA0AF63D45D80F3C0E9F8183C0393
+0976543E664CD260A9CD331DFE1C4D2D0AB367BE06B2C5A7079BF0FFAF12EB37
+E0939F1FE0AE269BD8FD4588E5CD134F6A0ACEB527B0EBD67BF4EE86AC142486
+23CAAFB0C7C0CF949124AFBA697675EAC52FB65DF15037C399A67BA5086967F6
+2058884ADA64EA538E28687B02C8080C8C555E8FD3C8C3DD48882E00F703CCD8
+08EDF6A3384C1F904277FF3D1F0976C7A3705004E6F4DD84B8F1EE9363656635
+2DB18F4C62FB553E583C4694CC3AEFFB540C0B2473F20BF05A8315BBC3117839
+8C4DF7ACB575FB4A435B05827CE32E0D7A3E54F783FE3E4B35DE0BE957F93199
+5C83EAB1684CA637424DC59853EDF0FC27A063C6EB6939B4B36C663316967E50
+66FAEDE5F026344983D415861028AADD851711FBFACD0470F350D82C9182997C
+8ADB039C9E9960E315302AE483655A0A80A7D8A6118AE6271DE5DFB2AEA11E2E
+B7A6FB6EF267A59638B537607DCF609FA9AD7C2CA6A8BF2BE3705145E083AE72
+313B4DF045D1E1DA858E84BFDBC183011F760AF1031243C6C6E4FFBB0BCB977B
+8C0001B129C3C3A20F75B6AAD83D584D28241570749D21282A82668CEABF8F30
+7F1FFB3EAF0E15911C27E7F186714D5788BE542A21AD7AADDBA859AC86E10296
+CE26A4E18A9CEE9D23CE1C4A2518B4477323334D6C97EEC297E6DD495D27874F
+236F2D055AFA20DEAC11391414095E1D7C21C0FDCAC0F6704B3063DF26145F55
+CF2946BBFB7E27D19FBC7290236713829523A6832AB7DDCB910CABB6E897350E
+080F73E0C1B62C927D1DB9B9AEC749D3A6FE1A11A684D6AB3E048714B45DC954
+D2B36715767BE40A109342D018A8CE20F6649AD918AE28F75ECA2CCB30909BF1
+C43CB165E3EB7A22CBE9B4080B89569800C1EE520BC761D8BC48CC05727B7158
+9342370F8A366E11B363ED138AC1B7A39CBBE3E75DA003115C7416C29A27BE5D
+BE8DD190CEAB577C4EF72BDE7188AEEC3E466AE803B56632182FAC8B5786F0FC
+1A21E399530449FAB1495E0E3CA4E523C17A201E21DB85365DD8B855E4BDA6A3
+4B1A23BC4E814C13706AFDA1D383F306ED42A31C12817DF687C87F7C18D62E44
+A0351C8167558745A4772B854BA266CD5D5024CF54B6CBFDCCD8252E8BFED410
+330FA1D2C066EA0336235F102B7DFCE33759CDBA3A9FA33899ED270082C0AB52
+9AC1AD3C3CA251DE5EB71E69D89258DBCE6DBE6A49F1C4C0B11197F66F3AC900
+EADB7A3E047ED1AFB0CEE70D4EA0C2C719E650E86F9874883F050AB80F014047
+72900BB683BC88F9C5269A93877AA00DBB108EC29424015EFA0DD221DB552211
+6D932E1AE1388F12C750C615EDCBCCDF3EFFB43DE564FFCC7849276A1AAA5FE9
+A2B821EA44479FB5E51596E02EAA696C6B42B8ADE6BBBABF7E2D68F2902A9859
+2758AA3173BBE979AC2CCBE49814A7F8E0CF4BEC3FCB14B26BD7CFF974E1B957
+685FAA25EB1C403021A8B8FAB5FE7F8D48BABA2304D6596B43FAD84937127B53
+BC32B26484FB4A32A2C768598809683AD106824EC00164837C943713184F2CC1
+29A1280B0BBC586A2763AAD673CED7838D2ACDCE60D218A8996ECDDC9DBBD5DE
+D6A872FFEE2C40D6592DBBA0FFA4518A9263712B56C31FA7979C5FD442DEB120
+7FAB0394E12546649D61D41B472FA5E4E7A6DB4184254157EEFF936FC3AEB72F
+AC222E81827485B6F20ECC3FC987F1113AAC5D384A85AC8BAFA3F880AB284660
+15B1E84C8070EBA0555C6B2BB2EE605AAB1F38BD1DA7714FD25DDFFB5467E221
+2100ADAE07838F53B0B7C64331A13816323CE98B48E1B62E8414E51B64E0D3B3
+25C1A95E66CEFB055FED35B84BF377BF4FD27BFC57BF468FADC5816312ADCA7F
+B4141058A0086F70D5BC3D9EE3DCB1FF5800FE6C7EBE36EF444E835E146A42A2
+17EA5719C72704D494C0EB65F305B0C1EA40F9C3D1FD684F1AE1A3AB4C0E8398
+F253C5B0FAD7F5BE161394B96E23979DC1A5DF5F5342A77A4ABBCD9AAB0A6AED
+B9D3E439850C159C3D5F52522E46FC862373298EE2E2EC4E5DFEADA9B1E9383A
+2B0BEA4954B819E97A02E63F8B304A1AB9672587331C2BABECF3480342363927
+A0C61B0761E32DFE2BB282F9AD29807A3217376F8D07D1136D0297A34C52BA62
+25D844EC0DA48716A83C4CF57985857E1614EBBDF1FFD16958A24D6AFDA870FE
+E4A278F46C293CAA76C6A9C46E6B57D81529D22E3BAC561136D347170511EA50
+8DB893617833CD8B54918EBE778E466D657A804EEFEA56138C5B1E5701149285
+ABB31E5F3B5C64B7F651E0985A518DC4D534B3086B5BE1ADFEAE20BD15FACCF0
+A967A37710471E706A6F1F7ACFB307674555B844205A9508673E1DA90F4313A8
+F6BCA1B96FA91459C4261CF8A1BDA55806F8A71E151DF21D97F894F443FC0D86
+738E4227C533AA3C35748A55B5317D5A24361719AEE7F411E1E78753AD01D5D1
+E7CB21D55AAB6BB0A1CC91271290DAAB0AD7377674DBCD9FADB08D4D69A04332
+7A588B8C5B1CD693757C3A5B86E2A4E2F46D5A812EFB4132ADFA39B4F873B845
+ABF2660C75FD9E02455C3B78163F227F138511C8D3F5FE223C97936BE153E09C
+0837804B622771A366135D590AA8D9DF1572B80291EC89546F2AAC86758C8848
+39A70C1884600D0A37D974AE0768543434AA613EC44A0795422AD7448F0AE845
+4789C1374F41EE1102FEEABF6EF3C3D96F1123C6FA28BFCABC9CCC18DA14A0D5
+29452D507C04521B4699BBAC62E25A8AA3F115026ADA9C53020673B9AD4CC51D
+EF34860544DC522636D5B7FB6E48E7DDB9094B44AA35E9D63562215870C775A9
+1C2D2086DD7D5DC2E8D4CB161824874D0A03EBBAD031039BD1337C2F2B40FA39
+87B572957E34A62AAB1AD769096756502A725BC1BD88886F11B1D3814E6478A2
+C7C4CEC5EF293AF9A1AE0913556233D87E35E30D267994B0639D860F9B4151C3
+B869C2FEB82AD03AF067FC6D600734F59939234F00DDE81852FE74F0D0781CDC
+5303AE631B7AA2484EA82F498CC56D71647B8F6DE3CA2AF29DC60C5F34CF5782
+FF57CD410469120CBEABAB5F1417E6B46B01E21838CCF5E78F601F6F8A63D0FC
+F3135BE7E4461907C8EF7DCA5062C327E26EAB7EEC2FC100F1262785D7C27ABC
+E4B721002007B8221D79FFB96D3D02C9C5DD1F20E31F3E2285AF51E0384CEC93
+5A5AA23E77D7D5F944A82E4E7F92FDB7F202B946BDD4053BB721FB2EA71D2FFF
+5E74901A5A4E21CC4ACBBB5A6714C55C6795399A11DC011701100F8FD8491AA8
+38D927B2F8548CFFBE68A3A645CC6A7DC3DBFB464844F9D6A6BF415DF5818344
+B74E39426240BB2AECAF921477FCD299B2E5EA7AE1997DF962DD8CBC0A878608
+407B9267EC9FB996A19A7E800981145939C9A1AD845676304587BCD57E944930
+DC45B0163264DEA98B2691D0AF9A6EAEAB6297F1DE23785F7C93DC0843D5C857
+462D5D23EA6F98EF70BBC26E46690533C8E24E2733E2B77A18DFB52448A38516
+DDC82D6B98634574C2504D0A7289740ADAA00D5BC9C1AC49BB194FC3D098A414
+88DAB65F0A521E4F3D0100C89911548CD3D53641E74FCFE25B3DBB34BF7B588A
+702B385BC7D38253D623161CB021A180ECA6FFF6253A2CBF7C4A1D65189A94A6
+4962F03029644C4DD89EDD03764A886747BD1DDF0C56D2B90F4D707CFD45E588
+F7F0CEA7717976FBB04E6A3577A3C0BFD8C1EEE74E2B18FA0D5A7BAA4BA6704F
+556E0324E1D389E506ECF11C7A65958D6E425DD838BF30DC1FE53B3606A82694
+7EBF8762DD2A9217131385E8179A2869395A2F3C7D1F5CB0E41450CB245ED1D2
+ECFE4F392CA0BC5603E57A92791013E50094C0BA6056D8FD33A2DB139CB9E284
+05DA733CA0D3195597150B847315C78C3871F7DF0D5B8BBD40BB5D37BF967E13
+0CE848C798AA7786282E1FAE278E6048CCBE977A69C022884193E1D5FDC28A79
+0EBE63BDEFD696EB6349C22DCFFEA13DA5BC70A57224FFEC525682F1EE0D3602
+3D842D52DD41355B98B1ACE73D4A6E52D0470FE58A065D3DA5FCB72C7ED78F68
+B2ACF52CF3C77836818A0B996F2C615A7A961B7AD155A8F2D3DB308E5B2F7A17
+205E45CC81A721A0919D7CA9D41705E89FD4DBE55FE346E3CF1ACCF3E9C4678E
+6952E3219931DF42A1661D656C27C4864FF69822883FD8A04660BEFF44E44FB4
+7949643896ADFF67741FF8F24D7ADE3C68CB348BD4A6AE9FEE690C5A5AA7C69E
+764A8CF052457FB4A933E543E084E7BFB0E3062A60E6A4CC8D315FED91E551BB
+5888EFD5A614A6F7B3D054F538136C632094CE5ADA327CC9E27EB9205E88CDB6
+2BF277F910ECEC888EA682D39C66F095258F9358E8B050FA36CFF5FB17EE7229
+3200E2E94717CD19579F3127D1D8CCF2D61AA9FF33CA9F9C8E6FF154326F7C36
+55261C4ADB604159199785AAD4C782B78A353D4635484C1C754DE17438216552
+1A5888F78D8D36AC9611501046D77178093DDB7F94C930B85EEAD0C66E614670
+0257A1E8A93C8592C2381023838D3E60A9DE9B8D47E97C9BC48C85B84404DAD3
+6CDB708E37926B072D7A0467A350280AD5063AA53804FEFE897B23F84E8BC167
+E699E6A9C5CFA68627C18C5F9AF056CB3DB698AB21009D028A4C4A7AF4BABE42
+EFAE36A4434EDBBC9238A79F6C2C66DAD103C1DC7113811CAC63A5435513D825
+F0F088ABB48A8F6014AB76265A00842F957835C146E8728C97F121DE22257D3E
+0CEEA4F621863E964A389ECA8B00B59BF0D7FD22BB800A96B2722967416CC8D9
+88E06E1ED02B277AB08FCEBEA6003301365AA77CE95BF8BB7AF3197934573ED4
+28E90D512716837E85550310E5C1F405DAA5CA761D192E2A46B42C718E00D150
+6CC61AF7D83B2C0048905D775F1E6CC6533950457F8342C347D79D4188F5DE2E
+3D3E420CC2413CAC4C3FE8F2B1F149CC3A3E1EA0B56381B10643E25FC83A7191
+5324EA7D9132050BF2A629C7537FDE983CAF43514254545F36471C94F3955700
+C92CB4C9DBBCDC480F95E77E94A122670DC8725837E41ECD4856A7F88DD82960
+328D7B5D237DE0A87669CC31C1FD98CDB5A4271677B7E8B2DCF5C28F5C399EF5
+96BD68FB5CEA7897D2195062A7C6579DE0654DF85E54EAB89E23E9B06A948F46
+D6E175C5B6F56199CC18B8727527EDE40F92C33B7ED5FA6BB6997A5608992A52
+8CE3C37539E2EE3D2BE32CCCDA6ADD87E781DEE294458BCA19BF57A5CB694336
+732534957DE613E0D3BD4882418D754930A6E333D6C6498B840EB35AB1520001
+FFA49823C8F2D91E310796E7B9355C2314AA423265FAD60AD75C6E01A72ED08D
+94344A5ECEFC86F46EBA7D04164F52F31EC79ECF1AF2C6536D148456ACCE89DA
+826217AFF782CB25E02AC53FD2EFBDD34A443F263B41A3B2076595CE2A7DAAA9
+4B7E62F746F8AFE5BDA9936166602D77EDAEF7E2B128D8FC5BFD35CD26492B68
+8F0F7F39CD33001FFBF0609E9B6FF9274F1CCB0538AEAF8E558D3AD501C521A0
+8BF7253AA2DCD293428B3E3273F3A0012623C0D0DF93619C82C6766FE6A39F53
+2B83C350F7FD1D657C31646C321475937F9C82D5BF578A0C3D8308264467A5A4
+6D9FC4537C28C5000604DA2AD9E0421951EBA4BB8A19F85266BC437EABE7955B
+328D7B887A5BC3DA22CB749FA8363812E280E58E1116E53C01DCF352CB2CC7D9
+5AC4F03427D41B16A798B3586A125BEEADFAD8F9A573FA145B8325EC1DE76A36
+87ABC3D34172433CC652E9B2516AD0EEC9F45216ED78E4A11A816466C949FCB8
+8A21E889779169F006297062ACACFC919E9FB3C3D2E685A798FA77F19A8C689D
+9B648A6E4C0060824D13F796524D885E13FA3B644429CEB7441306E87D530030
+AF415B98AA4CBA156F57F857DDDFFA1390C73633029DF4DEEB27EAEB667323E3
+7C4E29B3489549CF69E35583BD0B8A0B7FE706262106DBE19B8393DD59F9580A
+87066ADDB5BDBE59ADD99A624038186B76DBFE95533F5D38C867DE7AE30BE863
+7120D1CFCF0C94B0BA3A2DE0C94FD524906DAFF94B679881E88883F5AC49DFC5
+952F9687E2DCB2C5AEF28ACFFA6678908F7F02FA1E5A4A405A7D8EC04132F5C9
+EEE633324031D85F4761DA78BFA5AE30FA18DB761ACD50EFE1EDDF114903155F
+14A3D27477386B661EDBAEBA2B897E24D2897D849A1D2B9CD638C76C805720F1
+A5577A2E135403EFAD52472E97602424CC86C82456FC409FB6098CD1D44BAE1D
+0D3F817AFCB4959257628D6274F07A0B3746AA1B2DAEC4A7FF7B5BA1A9C8A2AC
+BF8BCEE03EA10638464C94492B9A44B70BB79A896F3A027D235E7FBD6504FF87
+E09EC39EE6B44DAD15F3244C90733BA17E4346834B1361AC326E0471866927E3
+B6123D75DB1F5D1B6A2463EF171CCD22DCB473B8173E8F9133A6D45FBB5E17CB
+D0C488526577753611F28C96D3FBC0E71E6E678610F0E5739A2B5ED475264CBD
+399EAFAA634EE5245E8CA25395126360E8D3FD32EDFFB6DF4F6B598EAB49C515
+36BCCB903C12E12D4873BD7924B5C9C6328DFB7227FA2B3A8C9E47388E6D0040
+85E155563D84B0AA680462471C0106247D150F6BA142E6C2CE62A242673E9C2D
+CAA12133B5B6018795DECB2EC9DCBFCAC22A2C9371BFBF8553964511BC21A7C2
+5C49F878279D2BADBBECCAD2386EC8A6AC7C1FD66B399B07F62C916A3248CD7A
+868F13752E81EBA84B59682C2F5C72A54EDBD8F129D985A13ACAD1A7C6BD6348
+B96E2B9A86644C798549129F0F2E675B2BB529E218150497C5EE8731DAAFBB24
+45723D5897B52D770C87BD9484F2D6B94F12183003BEFDCF5F2EB4AF9AF1D30E
+038847F468450A966758374F5191575C605625F409EBB2A73118C744BA421C37
+94F5D181701447CF7E14720E2BEDA95135957F217362C7FEE6F8D82A07117DC4
+49FC4BFD5A752AC61DF1ECDE0F243945928169754EFD6DAA3219E5AF8DFD8B26
+3DB063BB70700F09C02326B40E27E034888218938A1DE27312D8817E7D1B907B
+20EB55F52A526F3D4D366983049194A9FA7D60DA416013E96E479F6F7E7BB20B
+277DBDAA8072D9548C793BCCEAB06663D976949A4DA4609D73A187BDAE4A23B9
+DB4D1920D4846625D4B9998859A1BC99C0DE5B6E8F976AE8E59420F78C511A05
+CA9DB8CAB7E083A9CDC79872F27058D7B51C6BC954F92A187117A750B2156846
+B7A8366D6738AD2827EE2C394B894D9FF2337432A326ECCE7880E15D64C777FB
+CB70707F4F0F088114534F6D36E4D09867C5ABA76AEEAADB72DE788DDD2B2DA7
+7461736E1FDBC3CAF717772354046BE08A005D30BD2C79976035F41A634B4951
+44781202C2B00E5DDDEE979D1F298E69E9BDF7073D0C3B04A19E77E75301B51D
+6E1E03944ABE063BAAC326291B5DC30DE854B0262FDAE3573F67A51662367833
+673F7FF134434641DC856CAED323FEBFBA6B4A659F14CE9531D9857C3B11B9DE
+4C7A8729DE942340A40AB16BDAA13AC8EA78E1302820D8598A7540C52A237144
+A1CCA77307AFAC798F1399CA678A54625762D1DB6EA4038B0863AF705821FD4C
+C816D72E41D6A5B1735A3DFD9C3107DA232FE1FB923D3ABE78293BF063FBE6E5
+9CB6382698E3E7E08AA5E52996E6AD5EEEC2C5B3285261BC0DE0D48449A419DB
+88540A48DEC4D97820E5A9E327067049F30C9F0E6CA828C7BFCF478AE9F08795
+BED167CFE3B05FE61A64BF58D59E56A740F78CB42DB23A3E6B6DB126AA88856F
+AF1DDB818C847E21917F8043CBFAD9A3BADDFC68DCCF67E696BA7DC79C5E98BD
+38B14F7FC7DFABB3BF5692145258B4475917829F413DBF6B1AF5A3923521AF70
+2F2FB739DA1952960DD913F35AB9B9F693D3B94F4143E9826BD08360DF60A2CB
+B2190E52DCDCB65E5B0E80B31FB1621F5B3C9503FF10BABF091FB833BC771484
+6362053D24A0372CFFE7A4730E70573BDB16FC18E5BA24F5FE17B9C1818E1D45
+6F5039788CDFF3FEB77218D82EC626C936209AAE5D9735BBF8799A87D1260604
+F96F889DF510CDE4EE30D81CE0DEA1028AF6B97BF321B182A5B6289E594321AA
+53B7E829D0B912D27B3C8EA15167110F8EA110C3C4F8A7D1595E7890403E4DB4
+11C9DE262609EF3FF4447F47A6D7C9E547CA8AF51CE8AF672BF268D53A04DFC9
+7AC259070A189DF113C6F952963250F4F341AB6FAC582EA6B83908E0E4F87752
+52CFCAEE3E8C9545D8AF5C021D15C7F1E13959B775CA26236DF9E5BDF4882722
+97529EEE582D062693DF7DED5B5A034801B8E97C5B37E8605BE7ACCC37DE190F
+B1C45AEC54DF9340E7E75FC84482BE525EF0657F438C0001C0FAF4DEF7673E4D
+16A3DF6C7DA2C3FFEE1AB3DB45828557E83B04EC1A24CA82B8CC60A015670698
+7C7D0DB913F1BBF8A7B4A4D7C1F1602194DCD6A4855C5821F7B1165F3ECC1554
+6CBAD93D215952CF508955B90480063CD8DB8899F118316B3B554EE8FB510D32
+12A134D6977F0FC94E7141812D8824F8233E5270A3DDBF6D0FB488A1C624BBC1
+147A74DF0A745C083D7745668454256EAB9B1CC4A0564E9D7A401C7931D3F47F
+C4AAB63663D90BA4B43F741667B70DF85126EB447AD97EB260FC0C1020784546
+C48D21DCD058ED9620357F10522858C361B25BF021AC4D131EF710A4FEF74D8B
+7E2347719C81F7DC856BE383ECBBF2719688DD2CE66583F82EC2C244976AA5DE
+D522DA2A5EDF409A3EEB5735617E77A7A77D808D6E4AF11714551C2356DB2DCB
+48BCCCD03F82C6936F987293ABB0D94CA5E4DC07C4A66D2A5776E3D3709BE30F
+D9860F64FF6D6DBA4505920095B8FB2B5595BA0B6B468EF8F46E2C3ABA05CC5E
+A4891FBEBE1B6371CC3040EBBCC855D90C8CCAC8BFACFCF0E923F2EF64841BC9
+B7B4D631A675D44B2D0C17274BAAAA454168F15C37B7F240A4AC95BECF08C2BA
+D47CA484F64080B76D7947EFF837259A582C61017A720161EA2CE5BC374CFFC9
+EDDE8F94D4B63F3907EC73E5B4F9B71156B357F62608909B7E4AF651E9F6D23E
+F60AF9131A1E73E0DC6575021FE4ED747876FB0540D68A8B8B619F8EEAC1396B
+66693591F60C3447DFC6E9A7B5EDA26186578223C50EB478AC4131E901E9BC39
+6F3349E6BA39D975E878BEB31930671A59F0984B2949821305F52F428048F0AA
+B4D1B588D2612B077D12069E43530B402B78690275D50309730449352FCAAE6C
+21663871C5E962B1703654FAD911216C9BABD24E38E571EF342E58A119661BFF
+7B847666BC267B68501D9B0256D5D60752E3864D6C8D8DB97FC92DF35EADEEF8
+940CF777FC1FD548BE96A6A62D6E825230516BE93DD8DF8CEC4918D7FE142FD3
+8A8BEA77AF7231D14F974D5033E55DE8A5313145C48BCC34A268CC45222CF582
+BB85A76F88F9817A5B81102F0C3AD256BB1BA83D906EF1099DA1BF5D66E8A5F5
+50F449157850C07ABAB3BECD609D88670F11ECAFCD7300533438A252DA431770
+B6D7040D72396104B6FF35976DE842DB55DD3239F9F292658069D619527A955C
+5840E3F0736A7C0EDA3E239C23A9BC94D2BB2581629D0C9CEA189DC0086F2054
+15C83F3223178394A917C85BCF3DA7DB019794C85BD9F09D4B894679CC41EF3E
+B695333742BA9E4A6E1D3A4BD9F0B7E0B28447E741364E315E7A18958795762A
+882FD6A3E2F6D6B367EAA7D2B13810A80CA1B4603DC2B59108094C406EB45774
+3043EBEA32B09947F21F8F9DB0985ACE34A56BCCDB75DD39F3A64E7CD87AD658
+EE642C42692F10137D32BAA9EB850B9831B1B2B803651CDE2B42701A0029AA67
+DCB9DC94301EA34C3872A7A145184E7661CF1E614B878A2B5D561F97176033A7
+A3ABA468FA39B092328100A905E88E03863FA67D3BD8E03F418C44A895C34BCE
+80A0254541A3FE4712B1D0739BEA5B0586EDC6E12084209C59631C5811D0CC79
+DCC5C2D73915AB87E8E26DBA2CFC3AC053334806B316A5BC342485E2F7822BD6
+7FFEED6615C218AE422CEC8D980E131FF45A520572D444A5DE5A94E71E9CCC5A
+AA3C7449B69E4DE0A3A861D29804CCC25EC207CF1423844608334DAFA5F86D69
+B98253C4270F09D038BABA80AC6ED79239720FCB997730CAE73415DB9FBF4E97
+9E15629F34ED4756894A1373FB8BAEFFABFA38EAF53F5171CAF5FFC713A2CBB7
+B06FE0F6C49D6B279074A58E4C9F4952D2186CDE88032B1DC8D0697BCE5C41CC
+32EC73DBD346DE3E01DCAFBDC31CC35457264B5C3945D52B74C2634B7D524AE3
+5D9CC192E979852EAEC1D621492AE6D4412493E0CDB38599330A9BA4149F9360
+5BA3D68CF70DF4DC61F48A089025A1E3B38167FDE24916E0021C0DF70055085D
+91582DA522D6359EA3AC074FE6EA3D082832977F1E69D1A827A46FDC0F182443
+47F6DBFC0F0814EE3D7C83AB13762B780529E8CDD832D3F608BE8FB158E4F9E3
+32B73E12469A20CE3D0401A7B165F5271B585DF211D2F5FBA4EF469AEFCEECAA
+18CDC62D9A82019C0A8D22B197E5C81C3A2849288811F4393EFD8838AE20849A
+044C1AE6460ED541E210ECD62CCEE00486C185CE2711938D605AAC01A15D60CB
+5607F9E5696F13AF91E4D7C41B245C81CE24C4894A829FBDDDA0902ED149CFF1
+997CDC6886A867EFD5C6886A60F27EF31C45E92F4717D8FBD4A0844A8D940922
+600F1031E55353DAEB143ED668003E3196A1B01B2CC236C3BC468BDCD6D69D3C
+10A0DBB28EFC16DB6E17725E3409FF6CC8F3C38638084F8F4F7DA8B4AEEED920
+D8646F499E45D95AB16320C06B4F625F5741DA37E298379C790ADFB7D4AE2DE1
+288F04663CA7C2572E92D94A7876E1C4F6C1838BFDFEBA9DDBFCD9023C35EC78
+BC1462E826A8BC000D7B1351919F4846D33B3F4D0F890D62ACB43EC469355351
+96CA29FA216E7980665A358233C154632F6E37605D7BE1D821C67C6D1B7D6DE1
+8064541DD5427DDEB103FF247068EF9B9B43A951DC93BDAEF844631528DA357F
+0E30D9AB91D1F73B6AE9F49AF2051EBE45114862CAEA43CB3395570020B0E58A
+7A5945228BA4CF9D30EE8526CBD718A6EA077E630D9F5BB7ECAF36C1E0B7A3AF
+A35B532BCA16C510B8EDD19938E087DCEFF0260528027158655551B2629877F3
+39B7C969E17D82D2848795E40EA53554E16F7E056FFB16B9ADE6F3B23940FBC1
+D83E25B6C911AE2928A13C1DF299898AA1001247D3EC602903337BF4700C3475
+3DBB6E9406424079694D946F5021F2E8A63986E7C8F5DCD04E9B4C1F6A7BCB73
+ECA51FC8415FAFC12C5777A76F32768B7F6B8C3381BF4903A735B7746BB6812F
+E53D59DE9938F495AC07199FA85267A621E6CEC165897D8AB8F56F70DB778E60
+32E3243476B874464269ACA5BF843428AE24F3FBBBD9947BC5A800F9DA6B7BAF
+861C6739EC16B168927E4925532684A429F690536B79F694C12D718E03D939B9
+1520C652F1196EAF1BC975E26F8057F240C4E051D096CC40E931BEB074AA9E32
+BBFA361593C34FE75E5E97328618BF64DE4BEE2CB0F263EF782C0D4D3A644884
+D32EC1130C4E43A7FCC0FFCB223701D9052D9B2AC5EAAC9C996A67D046499E47
+1C4C9BC047036204853B86B0C08AF8A15F4A4DF313D85C474780C64CE329E155
+18DE0B91E73A2AFD5F8DC4CDF14C1A9D0B93E9AFA8FD013A09A11232BB05764C
+514F783B1CAC58B04CDE0F5BB42D48B5DD29CF46BC063A2BB722AC7117930428
+A93E3164BF69B6FE8D7341900CBC3F48AD686FEC32B4D64FA952C2B899887280
+0A847CDD3245EDCBC0646C7C6E80081562C7D52844B5EA0504D4F1E15A786A24
+C555F07115493112F2DCA7F1FFEA417A55A919D4B9734D9FB7982A5239BA41F6
+022DBA5C585542853A4E6FCFBA95E31E2B939B30DE3E0CC49BE3BA370215A159
+53B841058296B4C1B81665886CAA5F0136DEBDD9D4265B8B8BF3A39487DC46D5
+28B49A5828DD1E2C9F43CAC5A774B3174D266F4FCFD48DBF5688AFF3541CA173
+E13F711FE424013FEB9541621C79BB3D11F2E85043560FF3ED1C64D62E796ABE
+17510BC555C27BFC8CE84999F45D43A687F901B1D0030E2B734CD2063A1D0C54
+EF86546024BA90631557257FFC6A1EE6616AEC4DEEAF2899107FD5EFB2533C49
+74AC2B6E2EAB2276195F1C8AB164BE9E46AE5F5E9B7B21BD32AF7BFC460AF16C
+5AB0833A996F6895C2B27804D8A2C9DF80BD1E08DCC0511627F96C828EC25967
+BF7418D5E9829AF626F82B9A15F31F018B51CED0D31FF26B75CEBC252C4413B8
+3650F86AE90725D1E79DF9FF11188360AFC84BB2DCD919A160C7AD5BB562C24A
+207C6866CBC2FDCDF94E2588FB22F624F43AEEC462FD82673F4D553B102DADB5
+B405E48CD184CD128CDA799930FF588B444C7BDA1A1CF019F96A6776F5A92C81
+49B0FA58B4F6101E49A6D4B8224C70EE240E39639238310E3E238ED8CE920ED9
+2C81D95E684D10644818ADAFB37CB7A8CE8A3D1C2DC0ABA26BE0264CE4A5167A
+BEE983806A15520D326B7B7493E891C5726B66D279E72D5BD9FB1507ECD232A8
+077E7F1FC03853CE5EA4DBA6728946C135BFA75A98DC3BED8E2F79999D0D5FB2
+D1F10866FB55664AA7D6B4680C6AAC9E9CA9193C157D2489EF10958D9DDEEDEC
+E4BA3DD823836C941A80F6C614865B4BE47ABEB2896314EBD7E20AEF5359B2DA
+B8797AA0F03E2E9FAB9ACB87B3AF7D8DCE5A41816ECDDF97DC2C8DCF5C8BCCCC
+03EA0D497800F952DBBB63C0DA21C717E348E0BE63120324CF4519D783566958
+1477FBFD614700D6BC3A1C4E266C123F4F7DA9CCC9B5C71D0890A6368860E1C7
+872B5067535D7C620BE23CBB3782D88FD516A1DEA24F8C6764FF7DBF636BAA4A
+D81F5E7E4C45A02A65B57E4332F3DC5D5EC79B2D6AAD772C4178198B08A3C6A4
+717FE692BC348B55BDF9F7291130DFC6AFC2FEDAD6C697F091ED7338F50E0CB9
+7D7FA008F732025D3D106B7E135C7FD907D2A6C36D060873FB1C80316538B657
+2992B6C7F6E00CBE37A5987C43E34B7A21AA7D151A5AE07F30210237D210E8D9
+8416D772984988C4219051A2214B3BFD19891B7380C942FE914BCA7ADBD966AC
+2C2197D2C3D6D00554EBB59A570932E1456B87390CEFA94CC862DD34E1A74052
+8445E2423C73FBF82E9961A7926D1A05FDB2436267395BBD0F42D0CBEE87AE6D
+68A4C0336BE904ECD3167406EED34039982ED5E5664949215B7B7C699903F93E
+FE81905DE32F9848F9A42DF41AC56CFDED584726806D7EBDCF38700B646962D8
+037B07B4578C3A37B667544F1CA4D16AA46E757E17ED67B71611ADB76D771198
+BA670F65C79875E281908E4E79094D5FE171B7622722892C189AA02D13551FC4
+9C934408289362F2470B36B6DC2177B4507ABF3F1E973E8B4F3DAD7FA872B15F
+AAAB3601BC8C7C6F4F0FF1F348C9D3F1FA454D98E25393738C59079C4CE22205
+C8F61EE2068824B4AAE5F3D674ADA848F91943F11C3932EEE241576C35595D8B
+02820035D7627B8D71B6ABE082598CFA266A582496BB290052165E002E7D4D45
+B3FFB1282F621CE68F6032579EF7430063A09F6170D6335240166D84A2C48EBA
+91C032523B8DAA3825BA7F42859E43FF094E0927BF13D2CBE606F605C92E623E
+D2B878504A44F088E82ABB25924706B0BC0F896A006470C97F9C400CA7E29A64
+A5DD1E06D19E0E44804AB992686370EB8BD39759834DE2F56091E9837DBCBF1E
+55CDC265DA9BE53A8BF27EF459DF384FCF569CA71C0498117EE72EE057ECFDEB
+F5273A830BE79F5E0824AFB010DC809783AB31CB4CD9573F9251B352D6EC3623
+F663BF60052545C40B1E23184DBCE9E0F7FAD03A805F7D11083B22D13691C5E3
+EC440F3B8FF025B7A7D7A973F2EF6701F173D98422FB4F1DD72A2D1DD6AFE312
+E441BB827C5200C0DE81FBF0F6600EFA1E7D0DA8BB944146B3B7D9CA452453C8
+25B92E606247E509FE68950DD572CD605F5E64FCB19D176C24DBEDD2808DB174
+906E10F03083BB89F311F38E8043FA363DCA07A10286A6A40D35153C336C37E2
+1E3E82144C358B1B12E2508A53DA5A08A8F7E99982084F1533B65ACE0E766EED
+25C7153508478C13AAF1AD1906A8B85265FFC7C4880E6EE206F0418417633E9D
+F5A43D6135C1BEECBCDAD907074BE3AB545F0F252F924A6F2D1A2E8D3BBFE54A
+BD222A82F8EE68847204BFA62EE0D9D656A369D3030F7B21B9C3DCB6550CD18A
+28D79D896A60017B4E5A7B06FF4D1360CDDCEDD19C2E162F8A950A51B8BC5DA5
+D6AE5D4BFADA6A5F92A1A03820DF4E9BF079A64E39E02C98CFBED9D1B87A8DC7
+1DD684F29AA95FB6020B097082E73509B70F0C64694B73BFF292B930D6DAFE5C
+9FD3CEB862C79336E0A1F9BBBE2E6AE7E2AD3DE2DE71003CF1C8220908B66B6E
+B4C0EEF805F7A0245D8F945E3F5F1D93F6CFAF2AA7EABF9280981B4E52221251
+8F50092ACA035B3CF0AC73EFFB1EC10BB751BA8B96989AD1834BE7729569F2DE
+F33F9469903A4319D244F00164BCFA2D85C30DA60205116AB7833FC159283054
+AA61D40A092C6207EC587466B0E55B5690955F260A441AB54B256036F48D10D4
+41ABFA40086967CF3CEDE338D376450FAE357BD5D01300381027F256139750AA
+FECA09D0BDAB2138031EAAE9F69CEAB8CF021E67BA374D54D4BC31F740010F4D
+0376EEC62B03337F0CA3A96554CAFCDDEACCA8C050E0A5B1769B81FEB1539060
+782AFAC5638E3579FA46161DF989D48DC305027895951CA6CADA500582570DAA
+EE8011BC6CA9C6713A4CC57E49880BF61BA40A331CE0730E2148AD363D40FC75
+EB3F94FDF3A7307B163B2EE4FEB1B825834687536EA427999DD3578B73567121
+DF11D79F2501E6D5CCF8BF8EA734FA949289DAC77F915CE6DC91D4F8B7800A05
+DECB300CD7A8C38D774B67EDF79DB65997EBD308E2F0464B9F2AF622E8D49039
+EF36A5E00EDA0D4DEDABCEEFBB46218244DCD6D996A0C7681D951B720F91C790
+10F3F5C5EEDD3B474825105C85EDDDB9374C0A20BDBF458201496BC6F590C7DB
+2D287C31ACC2990354C228C5F97EFBA2159F8EE8C9F376DFFA7D2AE7DEF52FAD
+0AB9815F70BD048925ED6058185E1930FB2A840D20350E4527E54BF7066EF0AF
+B220FE18FA5A40710850828347D2C3A8E44140D8DF8A26A3F2A9EE35DC3424CB
+1CDB4367736E86F2CAB2B61F652CC956CC653245AA60D404B3187D0FEB65CF56
+5A912A654AD34A872DA7E4740F8BBC91379EE330A885FD5F1BCBAD3088B4A47F
+74893F360FD2D6A980E6E4F77B93A92505CA18F03D463BF0C1B89EBBF386A025
+C53DA67F575E800750C93AFB1C8A8242616114E29975F3EC7FE247A0CB0AF5C8
+0F6977AABA48CD601358BFC654F3C7516FBE690A6780130570EE32D3213B8A30
+AC2C56B6F742B9B00B0D294BBF750952957CC273451A1629E9A4F16DA2D033C4
+1DC48FCC6A9219FAA4AF90CB269CDBB78A44554BC3157E37A6EB7BB45145DC27
+EFAE54613961F9E542A99E32C147AA72A335EC9E375F58E7DEC5E069FB1A2A62
+893BFBA8EAA1211B33A99DC5E168EDA3F93C17F89A71AA3A1506BB977C9C568D
+0C3ED6DAAB77B647793C5C2B8C6364546B6BA9CB8F47635A0B65934AD2E4DF3C
+2A2CB3667AA5DD200D31F6BA872A2F8BF5012D2A519860E47F55AB027F803FE6
+E10D542E2A56E760394B5FA7B29FD0F64BA916F03393197DF646D61776298C81
+87E7853DB4F66E5EE26E1F6BA485D6E297DB71D5380C44D1A8C6D64D5F445106
+127A7F906EA5F2789A83AF6C10CAAB8B65CF9BCEC941D4BBFED82834C556C258
+F516AA299214F53BBBF97997F5CD56CB80CC88D81802668E54AFFCA48DDEED34
+605ABD8C03131609687A7065211C9498FC546EB380FC67DA3380D4DDE405B6BD
+FDAC6F4A3814116DBD016B8B73894DB4AE98EC642D9063169B15DF8A379C2219
+31729D6D5025113D9925481CC7EA7D5A7AB5457C3008FC43613AC8AD611F4B15
+84FA139256BDA77459C04EEE2A5B7835FF13AA98F7F897170CB944BAB4DF25A7
+F15AB568927964DFCC8B21748B5D242C0E45B1BB25EB951E2C9ECC0532881ADD
+44A1A625CB93AF526D816C7A1C8AFAAF29ED727AFBA02950B9C441AB6D46CB92
+4AB9A583C3F9DD36848CB5ED3E822D31DCCF19FF38BF4FDDEBEFC2DDCD6EB810
+373F36C8D16241BB91DB3B7403BF1635E6EEC41827ABFE5335D0815C73ACD659
+55EEA00A8A7DF5F293CEE712A2F69C5AE294F3F358470FC5AF3FC765D50509D4
+54251BD18C269128462448524D7535C707DE8A32F8CBA85F0F29FF8219A7EAE6
+4B91D9B0E275B5EB377408F87ED4D4FC28E8C2864447914DF3EDC44EB7AD7E83
+FEEE55DBC0DB1E4B59DE5E27ECBEC782AE5B29D62A06FD3CCE8DEE6E37DDA428
+354E6863CE81A5AE1CF404247F1E987505CA33F061E0253096B2C1A170B6D59B
+0507E5C5A7C427C4CDE22213A022A958DB4F9D063737557E17C6ED39AFA57307
+7A7058AA8F182F283B5A3A81CB1A2211B5C1888124D2D79FCC74B0E02E7E067A
+669592C93A2AE9CD2EA9E580E4EDFEBCBE7FC74EE696CFF346432CFB2F182A5E
+0D961B68177A48F437813B635739999C9A221BDA4D141EB911AB3ED796B8189A
+3FEF4EFD13C7804232B261B20DD18736CD7A4F99770E389E34E6C5D3B415565A
+04C9F7E7E5866D2749D423940855DC9A70014620FE57AD708BFE23D2CDD3B4AE
+BF9966F9D0457582D38F63C4D6E698771FF8F53DD1CF5F63F3E1BBCF5DB1D937
+B93F37EC072A7B002B716237C463366A4D054B8050086731E8911B0B75E16E6A
+D472013BF4C6E33509F4DE16B6F175EA1DAC8AAFBAC989DF1015A964EA13510F
+830870A784456FFD0F64926FF7F7E690664F42CCD99D7E88E3C973E2405B0EEF
+9ECB15918B49B5BB6DBE718EDF4815DC5783384903AC47360FC624E9F9290415
+4F7BE0DD4018B444EEA62440BC190912A177D024F2D76B0876A985D6F8582DBD
+B8D0B1C5F93B2ECE65D3DFCCBDC0595720A2DD14D45C19E517D06AC30223BA41
+6B99132D550EA0F4B2199359ABF305E7D65F38CF6434AE97F67BDD482AF40C81
+BCF7C95047E13EFF059A0C29A8CB707245B93960E1DF9CB0E78C986F20417421
+169EECF1E3FC30F73E2F88C52E3F8C77A5CDBE9612EE833BDF62A6BF4035AA61
+0C8AF206B018EBB443374318864258D46FE701F3B8A589E2B009F7FD2C9F981C
+81AB103004A8D5824CA26BF8E5EDD8EB0F6212EC2534BD8DE723C61E17B8A943
+F0A3DD4D7C8636E8DB8E9DA536495B0D941B86BD5A1AFCDDF49E04D214B20298
+C8E734475DD6B32B3A671B1FB841E57F1D75B89DAAF17D7D57D5D654E8B5E3DE
+0861B0E3EC74CD5A207BBDEA827A2E559B619228453FD0F5541CE7259DCDE1FB
+67ADEFF73AA4F68BDB75704A826F173153A65930B23266ABBA0BD8304C30913F
+CF29F6ADAEEF5E7BADD22DA43C6A8BD9646B7A96209ED0A2EF9747F46BCCDA50
+ADA62FC40BA75F0471D1344F5547CBAFA33220E567D653A7A529387B0BC2E313
+797DFAECABE3E2003778ACBEA881799C0B0A35144135903291DF8304FAB48712
+2A38E753C77DC1DA88C03A75B458196E4C99C244A6C28AB0C9FEB1D8FDD386E0
+40076991F5E152E56D2803F3F152DFF83B4D7FCB6B856939EB2AC18B65580845
+390571236A92E315431DA0E907EC95F388C611F3E5A4C716CC988EC805D4150B
+A059A5DD2323D70F6BC6993155471ED23FD52CB8A5879B0240BB755035DF1795
+436E47AE99069ABEC51F65A58956553A0805B3A2126A06C10E830D24D46EA523
+AD9AC9B54CF75666FB3F9AD326A1C459137816BCB6C3B76DCA2AE3686F7D6F18
+2EDAD65BC47A70C64A99BC3018D657429A85CD87315FB80D5A070EBCDF0D89E0
+A8CB46CA65E20C8C606717CEA5F3B45FC102E55A6DC857358F580EF0A6F4176A
+713D9D897D34F741FD41A60E6395AF687EC8407CBDB4D440BFE11ED6C468BD63
+A0B5368D083E8401CE63E7D61A23B0610EC7B3ACFB9FE9872A255C9CC78D6404
+B10DF4A9319E9B4738AB059ACE73E94E8FD2A05F8E9E1ED93618EA16291ABD8B
+A3258B91BD441B489D278A694E003F2A0778607AAFE3AAA871D375530025A41C
+CBB34A4909B7020B2D46D919E564C4268CFEDD702AA17406F53C3329B0B1C778
+89DF835D3DE11B575BED767F9267485008FF8E4132C5F3300323229445CC804F
+724215F74667507BECC8E82A7681475EECBA84DD94237699F12CAD22A3220A6B
+E4372789A5E4A815D207AECDF72CFF996B29EAD29530CBAECC4D2FD3F27819E5
+B852DBA23A916977A763C3178F38BBFF133643182E37F2C0463515EC2FAC8795
+D1F9C3C81C86FC5825D35E250335E05CDD955F970037564F45E65455A26693FB
+C9A3D1449CF3A613EABA9A95E2E37B47E0E9A901BA9DFF7382667CC29D4A4EC2
+153307F42995A451BFA0457139B1D671EC1E09615FE51A11239CBEB49E75DD4B
+2F3EB9BD2BB816BE50CB662CB93907D36F34A1C40FDF9C919268F0A61C8494E9
+02A44AA10D7A51A4D0C3E6671FC4130C97D34670B4B934EA8C82FFA452136990
+332DDE3AA22324D7331FB56520C1EE0C6F9FDB13ECB6450F688686A6E7D6F489
+2B7F12FCB2E3243664353455BE4296DC3D8FB350FB789F5B78A6F53EF2516694
+B6532C598A62902702EB10773F592ED6643CA361800A9FBC7B2374A19AE60CB0
+4EDCBE6E05EE223E77C42CDE50214D545B53EA9A3781ED3F0AF95E54D14D8CA0
+2C894A515CEA2D62242281750D27AA2F2AB01ADE35987904888816B3A37DEE22
+883838BC944B69AB5414596C17B28BEE3A7AF8A10FAB69AEC572386CBAAB3919
+B08630E5B4945FCDD70F7061CCEE2F6E1759DF72E538F323CAE1519F038BCE61
+2BED7DFC8AA1FA819108ED41BE74437D8D82C57FF39FAD1D02D24BF95A281697
+EAB5C4BB01B86DCDCE4AA1BAEF74754ED91FEE95EE8FEAF9EC93FD06CAAC2E1A
+737E8E9D23BA564C3A017FA3995A90C0CE1F4CD6A4DA2D15CEBE5A687F9505C0
+ED8192EEC0C7221C3BE66DB2323D158DE5EE594A938A4CAA3DB59ABC1B4BE557
+82EBEBE110B2E217770F23EC5680CD7BB4B73FEBA8E6B759AD2351D56EFE729C
+05446FBCC3685E75307CA190242214BF6B9152D7AA2D74B68F3CF951425784E4
+4A61087EF81FF43CF7258BF64C6D6E573148E5B8EB554D257EDCF25AECF5580F
+CD8B9F3017281165FA0D8DFAF596E1D75C98ADE6BA01FA2FEADFEB702604373F
+8FDFB60CE8DA3C71E710359C5CE3E69D734D98523A044E68F4BCE67A7356ABA3
+9ECFBA1F56FBE49620CFC7C2B57DCD3A02BE03C555B02366E149C89119A92D84
+8E6C82CD753BC3F2488B3ED9C506F3309C013224A14F6543DFF528D35D36F118
+13F17BB9FEA0049C32F2DA50CDAAFBDF09AE8AA98660FAEE257D45E74BDBFBB3
+53FCED45C922F6973D1ECC4B9E6C365DB13C6CABCF721EE000B2EB54C1C84FA3
+B2CD894241D510A97D3B644B1709316953216DC22F0528DE6965BF2C76308B0F
+B26F46CC8D6AEA3BAF7F5CCBAFE640F8A8CD367ECFA1286D61EC7A019D03EB58
+10347131DF90B72F8B2B6BD1FE9D4CD8CFFA3BF673E2A5BA998D2D94C77640E6
+05DFCCCE2B9633E9E812FF1C3BCA1F4B99D34ED7076795B4EF9112BD56259542
+DDD3C5BD7EC0917C959536332F0A14F3276A22DA4A5F0FDBAA2718830603D8A3
+898DC10DB35D2F64647616C7ED3D6B804C8ACA69D0383FCF7E9F48DBBA857404
+B0826E4AC4DE06354A284053A8378EA1887DFE402EF65CA6D9B1ED92B8D0A601
+E4BE1E2F127052B9F045D1D23304400FE6EDB28CC5874734F38FC42B8368420C
+55BDDA7BC0A29F55577DE1403A9D1870CDC2ECE91AC7F2AB9CCC93BFB138A087
+376AE369CCDAEBCDCD40CE7AC497157229C61DE7A092E9ACD15F55E177BB3D45
+0CE6FB005A43A0868631DBAFE5FCF6F07621E8DDEAF6EF77F950F6DB03898D0F
+3772D2802C43EDCEE2D6E6E89444D4882DCC62833AC496C7EE85DB54DBC383A8
+CC60E3CBDF7309920593926418E1D956E1254970C7D7F2B23F7C78BB8C3D02B4
+22E5738DDF458C1094CBAB96EE40F60B8D97C1FACC463150BE787B72AC3B8ECC
+62F0B8F569008765F9420DE88BBC562F2A63EA789A09C28517B33B97BBB61011
+C47808B5D80DDA781DED3C06E30EE62DBD64A815A0130AF00014FE1DC8921C0E
+6C39D77906A63CD1BD483ACDB735F4BC3EEF1922C0A4A48919F62F9EAE2651E5
+51651C6E8628EFEDBAB8737C6BAE304C18EC2E88F856F32A8E103E8C9808EA1F
+75A4C6F8FC65BE386DF42AC56C2E96FDA724C304A329DC7653439ECFC13F36F2
+A0B60F827A28258E347389A3F9752651C2435AE7D7356981AFCB22811CAFCC73
+8E1B9C669D47D3910212E3CFB0C7E899E5B49877F4DC7C9D48E7D62AC087C514
+949C8DB52D57891CE9A985852DA3441BCB275035D838F65FF5ADD1578FA804C4
+FD650B4789E4D2E59001759A4C3BF56B5A08BE7F03667559E05038D660DE26B3
+33DD0F254614A86FD22FBBC8762F3C354CA7C8274C48534B2C67A09EB62089EA
+2E7B00EF6A89F6FE578B345D48B09F60C705134811F7BB34713BBA77EED1DF8F
+505E68D570C1343D8C24DE81F592CCD8364228DB2E26981A10D1C0A9DA18FB88
+4F0DEFCE78285BF52563233DA1AC23DA4340D744F07A9C06CF018C55DD50D6CB
+A8B6FDFB2F58F1BAC29922545058A34350D48B7627F1A74E8732D5445A10ADFC
+4FF42ADF4DDC069309CD323623015630CEA881188BC8E969A3B9001455E4A7C9
+3E03202E4C026A84108B7065E646FA99871869FC85E8593FD4F5AC6DCCC7D8C2
+3CE45036511CC5B280DD9B062949CB193FDF11E7CE1C4E2D9B0934EF94F0031E
+95B10C03239B9249C055204A7EB7317E53121484F878D5AA560D0C8A34907783
+67FBAF0D9E752460F03DA2017FA73AF4881F60996CAC3A8D2C95654C1C5AED41
+085B99B8D8D8BB0C5EB8D7B2924AF04D879182CBFEEE222F937B6C6C8CD1D913
+FB70CDE4B637C6925E0CB5BD96C3FF4D4466F7A94BD7C040BA99D66F6A3BF5D3
+DD57DF9A0E91D6BD9270178C7AAF4D715BD33D2E3319B09127C2B57323289136
+C4A5FFBF1117C733EB2106F17CEDBB6C472ECC6448E1495F6B61A668C84275FB
+D6C5D47AADBCC8CACC3F7CC3626CD320B23DFB7505E00A1C9AAD283809A99B03
+44C438E147DF12018421342AD39A86E6AF9B7E711E74469E20D04ACCE642E32D
+43363628D9F25A8B0E4213243BB60575513660A070030B0854D6E51F8784EE27
+F1B3107CC1C1CD8DB87165083FD1DA92DC84E6735A2E275D935AC298A52CE79A
+961A13FF6BEAF355DAB4D553F068BE8EAD32395AFAED29AD3FD5B11AE02CA293
+0FF406B75AF68D816C258EBC0D7B8F05B87367A3D8A4CA91B0A2D6E9FFF3AF33
+C00CEB9606D7692BFC294417148BA6176ED46ACF340878B07E6C98D5CFC68189
+FFCC43EE29073966BDC58ABC21400ECB71920E75538E076D51397A2832A44AD5
+D83DC33A31709D35FE5338471ADDE2149FCA96F59F91C207CF3B69CA5A414606
+9172FCFDA6AEA680264BF3F85AB48F9241F5B1ED7DE9EB63076703B29D712257
+2C723C1D8CF614C19EC40A0991467228F4EE5832DBE82330DFB8C9C1E4CDEBC5
+FBD35E3E4E0118694F6D7D46C0A53196AA11852FEA062E253EC84FBFD7E0A94A
+0376254B926501FC9092E46B430D611AB7CBCAE933AD708237B4F1FA4953F9FA
+86CDD436FF60B68AE9EDF2D46BD3B4B4902910FC3B3783A74FCB3A603A3B41CD
+0BC4D679E9D66BA917172B6674693E34EBDD9C7371E7EAA666F7116412D89C75
+7623421D62EDBE5A81A61761AF688C996E259D040136FB27809D2133DB5147CA
+8858BE7FE756DF6113B80F4ABA310080CD8484A858DB7E0E7BAD183B395A4BD8
+FDE30B5CD7999E010BF1DE5355F5578BD2195BC9650A059935F84E1E35A3B902
+EE24670A62C9AAC4E1C7CDEE5731B8FDDB259120B5ED615FB1A022FABF890AB7
+C1591D9BBB4FE266C9CADBF538BEA3ACD95C2733C619160DFE3D19AB88328C22
+B3EE39FE1366F1AA4CEDC233B1AAA796A2E0802FC871CA86FF7201D82AC41C7D
+90D7E8E39CDB0F765F8223DBB446304C3B9B3CB6778CA0F670CF057032D3030C
+C23A93ADB031D2D2CBF9DCA35FCD661D3A621D68F14CBB5D6143C9E43A50DCC5
+39952490FD3F51278CCE75E058BB6D40E5C7350525B5B71E30D9DB1933637AC5
+B58F0084B27AA5F43D24764DDA5AC674A5571D2E161232A05FEF272B4451E9DC
+4AE1CD17B8DDF504ECAA80CFC974C5936762152EF40C875487C34043195AF539
+D67A642744919084747197AB17B4D2307FA248241F02CDA7A4ED1C53F598BB50
+7279771342817D0D736C3EEEE890A8001B1EDEBFC3DC2E76D6E4580021FE56B6
+77746EBE1368EF8961286EA544AB2C9A0646A0AE0B1D8033740013FC63B43329
+31118A23E8991D0D6C41F241A796BB06909BC8627CAD2415F40F8F1F932BAF7D
+7F3A24F95BD0EFFDCD21132910EC30CCFB407DA6BFAFEA6B143EFE966AC1214E
+4DA3A0F7431B3D8C9942A9DBCBE32051E8612410948F0C1CC4C35114DEE607CF
+26F306041E9021A1447F35C0D89912B3A6D958FCAAAEFD283070152E7A0A70A9
+1BA4BE102E4FBCDB024F202FCD91559569BCDD47A4043141B8F7AA88FDC46BEF
+75C3B58C7B93A535C9D4F289A6335EFF3E38398B0C9E6314B3B550C679F81E3F
+BE807B807486D90AFA24E42789784BA3D0F6D81DB2AC16584EA998D0CF11809A
+34942C9BFD3D5A85E64069098C4E0624D401DB3283992F7AABFDDAB46EF5D279
+099CEE24E1B3D1C184AC658DF87A9B151907EEF3D5548DB885312BAAF31197FD
+4EFFCE5F4F31D25DD771680EB7E7BAB3AFF9D5B4A5CA9D11C0DACB66BFCCEFC7
+E9A6CC520FF3C45BD9AE07EC2924CF2E9B288FCD4C3D3CCD67B916A3E13042CA
+786E7AF06CA50220FF100586C288CE8BBCD0D2667E7843884F80A614FAEDB5DD
+3D24B1BE9D90BE94E58E562D568A54ECA91B323BA95D10FAA84DFFE90AECAA69
+A0D2F670D49AF80E8DB7ABE7B9D2B4F3D93572D975D14437BE51CA1884BC18E6
+7FEAB14338F4D576CF25E3475A2F1EF52F752A1A312D0D84F47B87C64C6276B8
+E5A725F0875CAF9024DE0ECC630DF237336BC8079C8AED0018E0CD1A9224632F
+9EC1E9C0C529A38B1F3E340742937D544F5FB1E504531077142A3CDE5D26A8B4
+9A0BC1FAA23EF4B8A74390039A72140CA4C83018AAADB9B270E3D4961B9845FA
+2E295CA842E72341E791B009C3CFA7B2361B91D4E36D6EEA3BCF45DA27DB7DDD
+451A8096CB2FB893305D4CB1D99EDB40E74D644EAB91F487904855132416A585
+00DA4C8A8F79E49B5E67B8A530B7ECD97D7C159359F37202FEC5A81EE6DF3B4E
+90A46BD50FBD646BD20504EE06C6BDD6C0B855B6C93A57305F4CDDE4B33EF1F0
+EE3A33656C76AAD65BB40BA2CFD892F2027AEDBC2632360E470BE8C0A90E1326
+ACF60E9E8AD22E346866B6CBDFE9D437F5CF36CEEBB225FA834BE8EC3395B097
+B989C98402BD985CAB49BBC8B072D52C7A3AE2277528265A601BAFCB06DE4153
+9ED4719C1192BD6E8ADA350A1CE728D6C03091D22591E144A65D6104EE76539E
+6C73DDED42B9CEBD233A922BAF031A316C6F85F19DC74F210544BFB464FDAEF0
+6056D3D7347F108B58DCAA84D3E21F284E5953889A5424C60F1947313B397FB3
+2C51BBEE4CFD13D6C2E704EC314A9C68333A64250F5CAD4D5EC44BB9A00DFEC6
+0E37CCC3D3C509C6EC8AE6FA9AF355B36CFA719FF0C79E70E1D1FC08B96429CE
+551D4FF42F8C51139878B373C5EF5EA99AA92257B4288937384CF290AAADF405
+6423ACB105DFD49A9B6AD71EB236AF7DB0DBA23448A2F2944683E827BE94368F
+F52379918F5DE2509A140FAD34B1F844C2F96437AA36F6F2AB8BB10C5126A7EA
+B00D09C888472A31E46CFA3AD6FECB8B111A9C7604B9BEC360CC1AEBB90AE711
+D4473E831756F537667F1A1902681234ED1E04854C0CFAB7B04FB863EA238CEC
+1D145AEA0AD921DD5F6E7F1CF7C3C7DC19179CA5C7D9D31BC83F1933963EC10B
+0F98405254A12B671BB2CA130D8DFDA326C9674023596392EAB7405783421228
+2BB7BDFC551A7ABFC1FED7CD23F298CCF89C7FAFFE239EC15BCAD63A6BB25780
+06ACE643B80A0BE34C00AB7F0F9D7990B8BFF7EDDC0DBE7FB713D022CF94AF18
+26DCFD81F8F5E1F40AC5A42258DC11CF0DE90B2D074B0C690E34EE3A9815F73F
+2AA21A3EB942ED17DEAC54F05258F2A68628D7CBA69340BF73C39DFC951FC304
+31B473B20CAEB8D1FF03FA7BAC15E40F100B8163F9FB1B4190A8DF5BC2AE40A2
+75AE26033FE89F399746714CAD61417C9DA3D871F8AB4ED93A0BB92DD122B5C7
+B173F6945CDB51153F0758045C4223A768A3D0205BE2434118077B20D0A5BD79
+9AD4EDC1755C950D0887FFA85C559D9ED3B7DD6CFE037182B55A4874C385DBD6
+272F657C84AB44DBE6B2F94AA79239BA96849BDD4FAC7D7BB889559D6DFF27AB
+A4802067D4979762EB75B84376F5FF85586C61030C62121A5597D98CF941786F
+11CDC597BF933A58231214B143C1FE8B5B9A661156E0F0563B78CAA258105D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: LOGO10
+%!PS-AdobeFont-1.0: LOGO10 001.000
+%%CreationDate: Mon Mar 23 20:42:13 1998
+%%VMusage: 120000 150000
+11 dict begin
+/FontInfo 14 dict dup begin
+/version (001.002) readonly def
+/Notice (Copyright (c) Taco Hoekwater, 1998. All rights reserved.) readonly def
+/FullName (LOGO10) readonly def
+/FamilyName (LOGO10) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/Weight (Medium) readonly def
+end readonly def
+/FontName /LOGO10 def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 65 /A put
+dup 69 /E put
+dup 70 /F put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 83 /S put
+dup 84 /T put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/FontBBox {0 -11 722 611} readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A989B9974B0179FC6CC445BCF7C3C3333173232E3FDBFF43949
+1DB866C39088C203DC22FDC758584860EC7BB67FDA28CC6208249060E18FAB32
+204779B5C03C0493BBBBC95CF02692CC4DEAA8D2EA90B5C2E64374E92BCB8501
+429B8FAE4A76C0C6B76D6FF7CF9A7D5EDFBCA0E959541C59BD05B7DE43D25D53
+FC3DDA6EF0C2743978A6D03E19CCED4A11F2EA4BCC3110BE8B8D9E2772361969
+C19258EFAFDC276CB1ADE9208A941A36D18F9FB1C33DEF76AA315DDB006FF6DD
+021DCB16DF22A06DEFEF321C9A6AD3438C1AC51101B9F0B5A58131C9E1B7F3F7
+99DF425FB082BD1A4F860045983FED432A5DDFF5F662AD5982E19BBBD9065C40
+84A971EAD143FD5C9B8356EE756EE868F10F3AEBAC1F6B156F1669DCF81236B2
+7AD9D84124DC4763A119E727FA68443264A417174B48F87CE901AE946C181A57
+14CC1AAC16D2DD454F66A2B236C3B8956FCCCD5F3E641424CD4E7C8A80669EDE
+38230CB6EBD34E8C695FBC0AC71C522B76B282E39BB9037B7DB5E674FDA46992
+285C11C9368735A56DE3C98CD2A9BD1844354114D388195B5085B35B72D505C1
+CC6F1965CCDFAEC9FD71EFD275FE7F79F8AF7AA8A74C652323C4D42534765583
+319BF3C64213DF59C7B564BF88AD7B5BA1680E560D903D7241469E52FE7755C3
+37489EE62344B46C7111A3FD1892B2E9622F38D8E7D4C2B8DB307129608A5C15
+57E5A15C48D6F579E6E0D7E78694CE0F16DCC3C71BFE541FF2235D4A9ED6B30E
+D71BCAE9A07F4F3EF87F4BA198BC1B16384AEE950AD0C629CDF5A515C02916C6
+3101816F86AB235E8311677B1C0CB9960CC95B7B2F417EFF4B900033051A26F3
+19723E7F3F1A822A0D6A8BD3E5D64103FCE62418A13FE940B948290D3423E7E4
+F90E877FF56688E40CC5FBCE2150CE744155036B7AA544E9E8642BF1F64CB500
+7FE0EDB98C59F0A1D2BEE89CFD1F9A393D0C473067F9EAE3BBD6D534CD7D6F41
+2272657FEBC48EE2AFFB799D56E70C72A5E9D273D7752ECC5CE29F2918E473D4
+9B5DCB81EC6F568579EC441C243A19B1B18AA9F5031F38896470A92B47933300
+33D0AE6F131B9AEA54270C0E9012C6B763746FC02775669B71DDA41C7AA161B5
+3A5AAA7A2C22B676A72C3AE53A7D864F2C9EC71EFCF46C2A89AC6E6A8E718F54
+C872C3E81A5DC5452910BE92A99C1A4F3B900C34193E943B535735FB2F12E8DF
+9C6EF0F015C8186E873EE253CB1FDEE159CBE02CC693E75F31B6A4ACCE2F57D2
+D71F14040179E7A12597522170E2945660B2E3B32D37A47300DE1791AD549845
+98F2ADC6D30DDC885234AD26F87F8FEE3872074E1C95F4A4B7B343B2EE61FD40
+276D8ECF80C719B3120B01FF7A763DE8A50105F9877858C3011EB520CE49742E
+71BAA0844327F219CF5BE5AAF77DAF2681A1D345357A7DA3C6A1D10344BECF0A
+797AF3C46864EEC0E3400873B8B00990D932329D2DD03ADAE930E3F329F80E3B
+F9749BC4B8CE2BFF2F394FC5BCBDE40DD9EAE6A20FB1CEE85ACC097BC38F3900
+1689C5674D8CC8DCFEF5D5A4ABFA9E7147D966920A13A3C5B5608E97CDB7FF5C
+7F68976440D691458F0CFAE5743D8B15E6E98F53EBED619259C9E21B1DCC3452
+5FA22A53397DE07B53966F0A5D853EAF2ECF11D1345D2CDE86873D3388A00219
+026DD612DB12FB30B6B508A1037F013DAC8DF85C2457AE41FF4136756F9B1D6C
+38AF247EFBE3672F3CA284FF7F9CB1EE20F1A7097AFD5F3B212649A05186E7FF
+D93AFACF2A4AC49CBCD15D33F1EC25C54CE3C2893C12D01D7C5389EA93BF005D
+5EEBDA54EC0B06E1FC0E75C3EBB62B7CF97D37186AEC3691240B7BE9217F3240
+9C1E88B44F2A18DD9BDD6802910054A720747692EAF5F22E037C522001345ABB
+09E47964593495416A5602F2082D283AB55DB2D36CDA41E522F393C2942931A6
+07A9BD11D7BE2AB60524BECBBCE28B386BD10BE7BF6E5FFBE329FAF1A7911BA0
+4EC682AAE9F8BE1247073EEDBD807103506D07A3BF3EBCE5D8E8EB108C063FA8
+991A5E1F2E6F9A905D7EF9F19EEBF24568291D314186130A9D2C7EF557E1F29C
+EB3A661D11264891B9E90B7634635B2082CE48A0417E5194504C1A1D84066A67
+D47A73CC21DC54C44E3F07B1C299FFE49A0D20288795155852F1D96964DB05C4
+1848E0418BB45F390C5895FA8BA0FFE7A19D1D36417289BCEF4E11DEA0B4599C
+D43FF04E96F8243E768D2174A9B7A2775530510567002EA3132EB846195669E8
+27761AE81C0FB8CD3990FCC4843235E221A5A3E23588075C1F1E87E41B8A30F8
+EB7B2DA236B525C45EC7031213D1BD83E0E1014C212AA82A9CE648B231E4C130
+2FD07BA03D8CFA450C0B6C78B58B21E9A0E1585AB4E75639B532F32792A441B0
+4AB3CEF6A0A7F952DF90FFB788F717CC138FEFF8574921E981D48F90018FA6B7
+E6B58D6E01BF4D99788235AA0847B7E97618140486831C4CCCE4F1405AF10452
+3421F49EB5F01E60CD7D687FF0B7B18A735200670FE0D4FB6415DE16F0FEEEFE
+2C5A3324CDEA7B3F44CEE2EE4FD24108C0DB7E02673BF9B095D951490AC262D7
+46822A733627A8233DA86E47EA6C4AF887602F97673E6D52EE4DAAA5479DE18A
+E3A4D8C9569F5ED4E2B5E3B445A5746644D5C1CFFCBB09CEBECB9CBF9BAA4473
+93EEDA167B181C8F214239D84A981C40C869E71C1755254D165D392034B0078B
+892AF6FE1EB6000F12252E5267A2D5A1B47E761F733D6ADF059C869222D13CFD
+F5995DE594F949DD021BD168BDA4C68C1CF437B0849266BF46A7AEC3279446B6
+B92C6BFA1479989FF6A1C4CB01688B38FD5240ABF4915B778F1D38D49B12EBE9
+AE45695DE3CE2F3704B2FCF3B261DFBCC0B1A9DAAF125E79D57FF777AF01C4F5
+669082CD1587709AE5343C50A17676052CF824A56D614441F258C081E3103A79
+9751DFDC95B7C4D13205C79B2A6139DDCDBC44A3D469A838C41CB4622C97B9D1
+1240D8ECC3A97D9B5DF9A9F0ABB65BF8A093047C9C26C951F06ECA5F584BC931
+6F8B64DF46AC5110FBA93EB0E9CD56C1E91C8E0E31A28613C412393AECBA82C8
+D3754C2AAF172D1A1A160F269AE4D9A9D95F18363AB0019C8B5082837736A25A
+DB4E584CE7BF216AE87AC2CF179DBF7E081D353640E1EE742F04A9FA43B5AAC2
+0C349F47ED1412A0B182D57280A9D79EE4F5DD75
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+TeXDict begin 39139632 55387786 1000 600 600 (TETEXDOC.dvi)
+@start /Fa 190[48 65[{TeXBase1Encoding ReEncodeFont}1
+66.4176 /Palatino-Italic rf /Fb 171[53 4[61 61 73 6[57
+57 3[61 65[{}7 90.9091 /LOGOSL10 rf /Fc 135[48 3[48 7[48
+2[48 2[48 48 1[48 99[{enceclm ReEncodeFont}7 90.9091
+/LMTypewriterSlanted10-Italic rf /Fd 134[51 3[51 35 40
+35 1[51 51 1[76 30 51 1[30 1[45 30 40 1[40 1[51 97[{
+TeXBase1Encoding ReEncodeFont}16 90.9091 /Palatino-BoldItalic
+rf /Fe 139[48 48 48 1[48 48 48 48 3[48 3[48 48 21[48
+32[48 45[{enceclm ReEncodeFont}12 90.9091 /LMTypewriter10-Italic
+rf /Ff 134[45 3[51 30 35 35 1[45 40 51 71 25 40 1[25
+45 45 25 35 1[37 42 40 8[66 3[56 51 2[56 3[51 6[56 71
+2[66 6[23 58[{TeXBase1Encoding ReEncodeFont}28 90.9091
+/Palatino-Italic rf /Fg 194[47 61[{}1 94.7265 /CMMI10
+rf /Fh 150[37 37 70[95 30[74 2[{}4 94.7265 /CMSY10 rf
+/Fi 168[70 87[{}1 90.9091 /Symbol rf /Fj 182[25 6[44
+66[{TeXBase1Encoding ReEncodeFont}2 72.7272 /Palatino-Roman
+rf /Fk 129[48 48 1[48 1[48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48
+48 48 1[48 48 1[48 48 48 48 48 1[48 48 48 48 3[48 48
+48 48 48 48 48 1[48 48 1[48 48 48 1[48 1[48 48 48 48
+48 48 48 48 48 48 48 48 48 4[48 48 48 48 1[48 48 11[48
+21[{enceclm ReEncodeFont}76 90.9091 /LMTypewriter10-Regular
+rf /Fl 171[53 57 2[57 61 61 73 6[57 57 3[61 65[{}9 90.9091
+/LOGO10 rf /Fm 240[45 15[{}1 90.9091 /CMSY10 rf /Fn 134[55
+50 83 55 61 33 44 39 61 61 55 61 89 33 61 33 33 61 55
+39 50 61 44 61 50 8[66 100 78 78 66 61 72 83 61 83 83
+100 61 2[39 83 83 55 61 83 72 1[78 6[25 50 50 50 50 50
+50 50 50 50 1[29 25 33 25 2[33 33 37[61 2[{
+TeXBase1Encoding ReEncodeFont}63 99.6264 /Palatino-Bold
+rf /Fo 107[45 45 25[51 45 76 51 56 30 40 35 1[56 51 56
+81 30 56 30 30 56 51 35 45 56 40 1[45 7[61 61 1[71 1[61
+56 66 2[76 76 91 56 2[35 76 76 51 56 76 66 1[71 8[45
+45 1[45 45 45 45 45 45 1[23 30 23 2[30 30 37[56 2[{
+TeXBase1Encoding ReEncodeFont}57 90.9091 /Palatino-Bold
+rf /Fp 138[73 40 53 47 1[73 66 73 106 40 2[40 73 66 47
+60 73 53 1[60 8[80 3[80 1[86 12[73 1[86 13[60 60 60 60
+60 60 1[30 43[73 2[{TeXBase1Encoding ReEncodeFont}30
+119.552 /Palatino-Bold rf /Fq 30[45 70[39 2[91 45 1[45
+45 21[30 1[30 45 51 47 76 51 55 30 39 36 51 55 50 53
+80 26 51 21 26 53 51 30 44 56 40 50 45 25 2[30 55 30
+1[61 61 91 66 71 56 48 61 71 55 71 76 86 56 66 30 31
+76 69 51 56 70 64 56 71 1[40 3[23 23 45 45 45 45 45 45
+45 45 45 45 55 23 30 23 55 1[30 30 25 1[76 33[55 55 2[{
+TeXBase1Encoding ReEncodeFont}87 90.9091 /Palatino-Roman
+rf /Fr 182[22 6[41 52 65[{TeXBase1Encoding ReEncodeFont}3
+66.4176 /Palatino-Roman rf /Fs 135[44 1[44 1[44 44 2[44
+1[44 44 1[44 1[44 44 44 44 44 44 2[44 97[{enceclm ReEncodeFont}15
+83.022 /LMTypewriter10-Regular rf /Ft 171[48 52 2[52
+55 55 66 6[52 52 3[55 65[{}9 83.022 /LOGO10 rf /Fu 190[45
+65[{TeXBase1Encoding ReEncodeFont}1 58.1154 /Palatino-Roman
+rf /Fv 134[46 1[69 47 50 27 35 33 1[50 45 48 73 24 46
+1[24 48 46 28 40 51 37 46 42 8[55 83 2[51 4[65 2[51 60
+1[28 3[51 1[59 51 65 6[21 7[42 3[21 28 21 41[50 2[{
+TeXBase1Encoding ReEncodeFont}39 83.022 /Palatino-Roman
+rf /Fw 139[28 37 32 14[37 51 42 31[65 65[{TeXBase1Encoding ReEncodeFont}
+7 83.022 /Palatino-Bold rf /Fx 134[55 3[60 1[42 39 2[54
+58 88 4[58 2[48 3[50 12[61 9[33 4[61 15[50 2[50 1[50
+48[{TeXBase1Encoding ReEncodeFont}16 99.6264 /Palatino-Roman
+rf /Fy 138[87 47 5[83 1[42 6[69 3[72 8[96 3[88 6[136
+7[88 69[{TeXBase1Encoding ReEncodeFont}10 143.462 /Palatino-Roman
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%PaperSize: A4
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 1444 557 a Fy(teT)1624 591 y(E)1694
+557 y(X)35 b(Manual)1575 810 y Fx(Thomas)25 b(Esser)1595
+1014 y(January)h(2005)1721 1349 y Fw(Abstract)496 1507
+y Fv(teT)600 1527 y(E)640 1507 y(X)34 b(is)g(a)f(distribution)h(of)f(T)
+1508 1527 y(E)1549 1507 y(X)h(and)f(r)o(elated)e(pr)o(ograms:)51
+b(pdfT)2693 1527 y(E)2732 1507 y(X,)37 b(e-T)2950 1527
+y(E)2990 1507 y(X,)g(Omega,)371 1607 y(Aleph,)f(L)676
+1590 y Fu(A)709 1607 y Fv(T)746 1626 y(E)786 1607 y(X,)g(ConT)1087
+1626 y(E)1128 1607 y(Xt,)g Ft(MET)n(AF)l(ONT)r Fv(,)g
+Ft(MET)n(AP)t(OST)r Fv(,)g Fs(dvips)p Fv(,)d Fs(xdvi)p
+Fv(,)h Fs(dvipdfm)p Fv(,)f Fs(dvipng)p Fv(,)371 1706
+y(B)r Fr(I)r(B)-5 b Fv(T)521 1726 y(E)562 1706 y(X,)21
+b Fs(makeindex)c Fv(etc.)496 1806 y(teT)600 1825 y(E)640
+1806 y(X)h(aims)f(to)h(make)f(using)h(and)f(maintaining)h(a)f(T)2151
+1825 y(E)2191 1806 y(X)h(system)g(as)f(easy)f(as)h(possible.)25
+b(The)371 1906 y(pr)o(ograms)i(ar)o(e)e(built)i(ar)o(ound)f(the)h(W)-8
+b(eb2c)26 b(distribution)i(by)f(Karl)f(Berry)g(and)h(Olaf)f(W)-8
+b(eber)i(.)371 2005 y(A)30 b(common)i(part)d(of)h(many)h(pr)o(ograms)e
+(is)i Fs(kpathsea)p Fv(,)e(a)h(library)f(that)h(pr)o(ovides)g(ef)o
+(\002cient)371 2105 y(access)21 b(by)f(name)h(to)g(\002les)g(stor)o(ed)
+f(hierar)o(chically)-9 b(.)496 2205 y(This)27 b(document)f(describes)g
+(how)h(to)f(use)g(and)g(set)g(up)g(the)g(teT)2549 2224
+y(E)2590 2205 y(X)g(system.)42 b(It)26 b(does)h(not)371
+2304 y(attempt)j(to)g(be)g(a)f(compr)o(ehensive)h(guide,)i(instead)e
+(it)g(tries)g(to)g(give)g(an)g(overview)f(about)371 2404
+y(what)21 b(softwar)o(e)f(and)g(documentation)i(is)f(contained)g(in)g
+(the)g(distribution.)1858 5443 y Fq(1)p eop end
+%%Page: 2 2
+TeXDict begin 2 1 bop 144 193 a Fp(Contents)144 404 y
+Fo(1)91 b(The)23 b(Components)e(of)h(teT)1247 425 y(E)1292
+404 y(X)2218 b(3)280 517 y Fq(1.1)97 b(W)-8 b(eb2c)28
+b(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)177 b(3)280 630 y(1.2)97 b(T)531 651
+y(E)574 630 y(X)23 b(extensions:)i(pdfT)1313 651 y(E)1356
+630 y(X,)e(e-T)1578 651 y(E)1621 630 y(X,)f(Omega,)h(Aleph,)f(encT)2536
+651 y(E)2579 630 y(X)50 b(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+177 b(3)280 743 y(1.3)97 b(DVI)22 b(drivers:)27 b(dvips,)22
+b(dvilj,)i(xdvi,)e(dvipdfm,)h(dvipng)52 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)177 b(4)280 856 y(1.4)97
+b(Makeindex)43 b(.)i(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)177 b(5)280 968 y(1.5)97 b(T)-8 b(exinfo)61
+b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)177 b(5)280 1081 y(1.6)97 b(UNIX)21 b(Scripts)h(/)h(T)-8
+b(ools)57 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)177
+b(5)144 1285 y Fo(2)91 b(Concepts)23 b(and)f(con\002guration)2148
+b(7)280 1398 y Fq(2.1)97 b(The)21 b(T)705 1419 y(E)749
+1398 y(X)i(Dir)n(ectory)f(Str)o(uctur)n(e)g(\(TDS\))77
+b(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)177 b(7)280 1511 y(2.2)97 b(Overview)23
+b(of)f(the)g(pr)n(ede\002ned)e(texmf)j(tr)n(ees)75 b(.)45
+b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)177 b(8)280 1624 y(2.3)97 b(The)21 b(\002le)i(name)g(database)g
+(\(ls-R\))85 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)177 b(9)280
+1737 y(2.4)97 b(Runtime)22 b(con\002guration)g(\(texmf.cnf)h(\002le\))
+64 b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)177 b(9)280 1850 y(2.5)97 b(Using)21 b(Postscript)g
+(type)h(1)h(fonts)g(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)177
+b(9)280 1963 y(2.6)97 b(Con\002guration)22 b(\002les)g(maintained)h(by)
+g(texcon\002g)39 b(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)132 b(10)280 2076 y(2.7)97 b(Automatic)22
+b(font)g(generation)43 b(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132
+b(12)280 2188 y(2.8)97 b(TCX)22 b(\002les)60 b(.)45 b(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132
+b(12)280 2301 y(2.9)97 b(Cr)n(eating)23 b(PDF)f(\002les)36
+b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132
+b(13)144 2505 y Fo(3)91 b(Release)25 b(notes)e(for)g(teT)1131
+2527 y(E)1176 2505 y(X)f(2.0)2154 b(14)144 2709 y(4)91
+b(Release)25 b(notes)e(for)g(teT)1131 2730 y(E)1176 2709
+y(X)f(3.0)2154 b(14)280 2822 y Fq(4.1)97 b(New)21 b(pr)n(ograms)h(/)h
+(font)f(support)f(/)i(macr)n(o)g(packages)42 b(.)j(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132 b(14)280 2935 y(4.2)97
+b(Changes)22 b(to)g(web2c)40 b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)132 b(14)280 3048 y(4.3)97 b(Modi\002cations)22
+b(to)g(the)g(dir)n(ectory)f(str)o(uctur)n(e)h(and)h(\002le)f(sear)n
+(ching)k(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132 b(15)280
+3161 y(4.4)97 b(Changes)22 b(to)g(texcon\002g)f(/)i(updmap)f(/)h
+(fmtutil)57 b(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)132 b(16)280 3274 y(4.5)97 b(Changes)22
+b(to)g(pdfT)1145 3295 y(E)1188 3274 y(X)77 b(.)45 b(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)132 b(17)280 3386 y(4.6)97
+b(pdfetex:)26 b(the)21 b(new)h(default)h(T)1538 3408
+y(E)1582 3386 y(X)f(engine)72 b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132 b(17)280
+3499 y(4.7)97 b(Changes)22 b(to)g(xdvik)64 b(.)45 b(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132 b(17)280 3612 y(4.8)97
+b(Changes)22 b(to)g(dvipsk)85 b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)132 b(18)280 3725 y(4.9)97 b(Impr)n(oved)21
+b(documentation)75 b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132
+b(18)144 3929 y Fo(5)91 b(Resources)2828 b(18)280 4042
+y Fq(5.1)97 b(Helpindex)21 b(\002le)i(for)f(the)g(documentation)g(tr)n
+(ee)53 b(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)132 b(19)280 4155 y(5.2)97 b(Internet)20 b(Newsgr)n(oups)44
+b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132
+b(19)280 4268 y(5.3)97 b(T)531 4289 y(E)574 4268 y(X)23
+b(User)e(Gr)n(oups)87 b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)132 b(19)280 4381 y(5.4)97 b(Mailing)24 b(Lists)36
+b(.)45 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)132 b(19)280 4494 y(5.5)97 b(Compr)n(ehensive)21 b(T)-8
+b(eX)22 b(Ar)n(chive)h(Network)d(\(CT)-7 b(AN\))49 b(.)c(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132 b(20)280
+4606 y(5.6)97 b(The)21 b(T)705 4628 y(E)749 4606 y(X)i(Catalogue)83
+b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)132
+b(20)280 4719 y(5.7)97 b(Fr)n(equently)20 b(Asked)h(Questions)g(\(F)-7
+b(AQs\))64 b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)132 b(20)1858 5443 y(2)p eop
+end
+%%Page: 3 3
+TeXDict begin 3 2 bop 144 193 a Fp(1)119 b(The)30 b(Components)h(of)f
+(teT)1596 221 y(E)1653 193 y(X)144 404 y Fq(This)21 b(document)f
+(cannot)h(describe)f(all)j(the)d(pr)n(ograms)g(which)i(ar)n(e)f(part)g
+(of)g(teT)2908 425 y(E)2951 404 y(X)g(in)g(detail,)h(but)e(it)144
+517 y(tries)g(to)h(give)g(you)f(an)i(overview)-8 b(.)26
+b(This)21 b(section)g(describes)f(the)g(packages)g(which)i(form)f(the)f
+(main)144 630 y(components)h(of)i(teT)877 651 y(E)919
+630 y(X.)144 883 y Fn(1.1)99 b(W)-7 b(eb2c)144 1060 y
+Fq(W)f(eb2c)25 b(is)f(a)h(T)631 1081 y(E)674 1060 y(X)f
+(implementation,)h(originally)g(for)f(Unix,)g(but)g(also)h(r)o(unning)f
+(under)f(W)-5 b(indows,)144 1173 y(Macintosh,)33 b(DOS,)f(Amiga,)i(and)
+d(other)f(operating)g(systems.)51 b(It)31 b(includes)g(T)2943
+1194 y(E)2987 1173 y(X)g(itself)g(and)g(the)144 1286
+y(following)23 b(pr)n(ograms:)280 1467 y Fm(\017)46 b
+Fl(MET)n(AF)l(ONT)r Fq(:)25 b(a)e(font)f(compiler)h(intended)e(to)h(pr)
+n(oduce)g(typefaces)f(of)i(high)f(quality)h([1)q(].)280
+1652 y Fm(\017)46 b Fl(MET)n(AP)t(OST)r Fq(:)23 b(a)d(pr)n(ogram)e
+(similar)j(to)d Fl(MET)n(AF)l(ONT)r Fq(,)e(modi\002ed)i(to)g(output)f
+(Postscript)g(code)371 1765 y(instead)j(of)g(bitmaps.)27
+b(Documentation)20 b(for)g Fl(MET)n(AP)t(OST)f Fq(is)h(available)j(via)
+e(the)e(command:)371 1878 y Fk(texdoc)46 b(mpman)p Fq(.)280
+2063 y Fm(\017)g Fq(B)r Fj(I)r(B)-5 b Fq(T)536 2084 y(E)580
+2063 y(X:)33 b(a)26 b(pr)n(epr)n(ocessor)d(to)h(make)i(bibliographies)f
+(for)h(L)2428 2046 y Fr(A)2466 2063 y Fq(T)2507 2084
+y(E)2550 2063 y(X.)36 b(For)24 b(documentation,)h(see)371
+2176 y Fk(texdoc)46 b(btxdoc)22 b Fq(and)g(Appendix)f(B)i(of)f([2)q(].)
+280 2361 y Fm(\017)46 b Fq(utilities)21 b(for)f(converting)f(between)g
+(dif)n(fer)n(ent)h(font)f(metric)i(and)f(bitmap)h(formats:)26
+b Fk(gftopk)p Fq(,)371 2474 y Fk(gftodvi)p Fq(,)21 b
+Fk(gftype)p Fq(,)g Fk(pktogf)p Fq(,)g Fk(pktype)p Fq(,)f
+Fk(pltotf)p Fq(,)h Fk(tftopl)p Fq(,)g Fk(vftovp)p Fq(,)g
+Fk(vptovf)p Fq(.)280 2659 y Fm(\017)46 b Fq(DVI)23 b(utilities:)28
+b Fk(dvicopy,)45 b(dvitomp,)h(dvitype)p Fq(.)280 2844
+y Fm(\017)g Fq(other)22 b(tools:)27 b Fk(patgen)p Fq(,)20
+b Fk(pooltype)p Fq(,)h Fk(tangle)p Fq(,)f Fk(weave)p
+Fq(,)i Fk(ctangle)p Fq(,)e Fk(cweave)p Fq(.)285 3025
+y(The)f(main)j(documentation)c(for)i(W)-8 b(eb2c)21 b(is)f(the)f(\223W)
+-8 b(eb2c)20 b(manual\224)i(and)e(the)f(\223kpathsea)h(man-)144
+3138 y(ual\224.)29 b(These)21 b(can)j(be)e(accessed)g(via)i
+Fk(texdoc)46 b(web2c)21 b Fq(and)i Fk(texdoc)46 b(kpathsea)23
+b Fq(r)n(espectively)-10 b(.)144 3391 y Fn(1.2)99 b(T)417
+3415 y(E)467 3391 y(X)25 b(extensions:)31 b(pdfT)1305
+3415 y(E)1354 3391 y(X,)25 b(e-T)1602 3415 y(E)1651 3391
+y(X,)h(Omega,)e(Aleph,)g(encT)2680 3415 y(E)2729 3391
+y(X)144 3568 y Fq(Besides)35 b(the)h(standar)n(d)h(T)1082
+3590 y(E)1125 3568 y(X)g(pr)n(ogram,)j(the)c(following)i(extensions)c
+(to)j(T)2843 3590 y(E)2886 3568 y(X)g(ar)n(e)g(included)g(in)144
+3681 y(teT)259 3703 y(E)302 3681 y(X:)144 3862 y Fo(pdfT)337
+3884 y(E)380 3862 y(X)45 b Fq(This)20 b(can)g(optionally)f(write)g(Acr)
+n(obat)h(PDF)g(format)g(instead)e(of)i(DVI.)f(The)g(user)f(manual)371
+3975 y(can)26 b(be)f(accessed)f(by)h(the)f(command)h
+Fk(texdoc)46 b(pdftex-a)p Fq(.)35 b(The)24 b(L)2707 3958
+y Fr(A)2745 3975 y Fq(T)2786 3997 y(E)2830 3975 y(X)g(hyperr)n(ef)g
+(package)371 4088 y(\()p Fk(texdoc)47 b(manual)n Fq(\))19
+b(has)h(an)f(option)f(\223pdftex\224,)h(which)h(turns)e(on)g(all)j(the)
+d(pr)n(ogram)h(featur)n(es.)371 4201 y(In)i(DVI)f(mode,)g(pdfT)1118
+4222 y(E)1161 4201 y(X)g(works)f(like)i(the)f(usual)h(T)2110
+4222 y(E)2153 4201 y(X)g(with)f(the)g(exception)f(of)i(the)e
+(availabil-)371 4314 y(ity)k(of)f(additional)i(typographic)d(featur)n
+(es.)371 4463 y(In)27 b(PDF)g(mode,)f(pdfT)1146 4484
+y(E)1190 4463 y(X)g(supports)f(graphics)h(inclusion)i(for)f(the)f
+(following)h(graphic)g(for)n(-)371 4576 y(mats:)480 4761
+y Fm(\017)46 b Fq(PNG)23 b(\(portable)f(network)f(graphics\))480
+4904 y Fm(\017)46 b Fq(PDF)23 b(\(portable)f(document)g(format\),)480
+5048 y Fm(\017)46 b Fq(JPG)24 b(\(jpeg\))1858 5443 y(3)p
+eop end
+%%Page: 4 4
+TeXDict begin 4 3 bop 480 193 a Fm(\017)46 b Fq(MPS)23
+b(\(metapost)e(output\))371 381 y(It)g(does)f(not)g(support)f(EPS)i
+(\(encapsulated)f(postscript\),)g(but)h(if)h(you)e(have)i(r)n(ecent)f
+(versions)371 493 y(of)k Fk(ghostscript)c Fq(\(version)j(5.10)h(or)f
+(later\))h(and)f Fk(perl)g Fq(\(version)g(5)g(or)g(later\))h
+(installed,)g(you)371 606 y(can)32 b(use)d(the)h(tool)g
+Fk(epstopdf)f Fq(to)h(convert)g(EPS)g(graphics)h(into)f(PDF)-8
+b(.)30 b(When)g(including)h(a)371 719 y(PDF)26 b(\002le,)g(pdfT)929
+741 y(E)972 719 y(X)g(is)f(able)i(to)e(access)g(parts)g(of)h(a)g
+(multi-page)g(\002le:)34 b(a)26 b(complete)f(page)g(or)g(a)371
+832 y(clipped)h(part)f(of)h(a)g(page.)36 b(This)26 b(featur)n(e)f
+(extends)f(pdfT)2347 853 y(E)2390 832 y(X)h(beyond)g(its)g(typesetting)
+d(capa-)371 945 y(bilities)i(into)e(a)h(versatile)g(tool)f(for)h
+(handling)g(arbitrary)g(generated)d(PDF)j(\002les.)144
+1133 y Fo(e-T)265 1154 y(E)309 1133 y(X)46 b Fq(adds)28
+b(a)i(small)g(but)f(powerful)f(set)g(of)h(new)g(primitives,)i(and)e(an)
+g(extension)f(for)h(right)f(to)371 1246 y(left)j(typesetting.)48
+b(In)30 b(default)g(mode,)i(e-T)1886 1267 y(E)1929 1246
+y(X)e(is)h(100)16 b(\045)31 b(compatible)h(with)e(or)n(dinary)g(T)3489
+1267 y(E)3533 1246 y(X.)371 1359 y(See)22 b Fk(texdoc)46
+b(etex-man)22 b Fq(for)g(details.)144 1546 y Fo(Omega)h(\()p
+Fi(W)p Fo(\))46 b Fq(Omega)31 b(works)f(internally)h(with)g(16-bit)i
+(Unicode)d(characters;)36 b(this)30 b(allows)i(it)f(to)371
+1659 y(work)23 b(dir)n(ectly)h(with)f(almost)h(all)h(the)e(world's)g
+(scripts)f(simultaneously)-10 b(.)30 b(It)23 b(also)h(supports)371
+1772 y(dynamically)34 b(loaded)d(\223)p Fi(W)h Fq(T)-8
+b(ranslation)32 b(Pr)n(ocesses\224)e(\(OTPs\),)k(which)e(allow)h(the)e
+(user)f(to)371 1885 y(de\002ne)h(complex)h(transformations)f(to)g(be)h
+(performed)e(on)i(arbitrary)g(str)n(eams)f(of)h(input.)371
+1998 y(Documentation:)c Fk(texdoc)46 b(doc-1.12)n Fq(.)144
+2185 y Fo(Aleph)f Fq(is)25 b(a)g(T)648 2207 y(E)692 2185
+y(X)f(engine)g(that)h(combines)f(the)g(good)g(featur)n(es)g(of)g(eT)
+2577 2207 y(E)2621 2185 y(X)g(and)h(Omega.)34 b(The)24
+b(L)3433 2168 y Fr(A)3471 2185 y Fq(T)3512 2207 y(E)3556
+2185 y(X)371 2298 y(based)e(format)h(of)g(Aleph)f(is)h(called)g(Lamed.)
+144 2553 y Fn(1.3)99 b(DVI)24 b(drivers:)31 b(dvips,)26
+b(dvilj,)f(xdvi,)g(dvipdfm,)g(dvipng)144 2730 y Fq(For)e(printing)h
+(and)g(pr)n(eviewing)g(DVI)g(\002les,)f(you)g(need)g(to)h(use)f(one)g
+(of)h(the)f(DVI)h(drivers)f(that)h(ar)n(e)144 2843 y(available:)144
+3031 y Fo(dvips)45 b Fq(This)31 b(driver)f(converts)g(DVI)h(\002les)g
+(into)f(Postscript.)52 b(Postscript)29 b(is)i(a)h(page)e(description)
+371 3143 y(language)g(that)g(many)h(laser)f(printers)f(dir)n(ectly)h
+(support.)49 b(W)-5 b(ith)30 b(the)g(help)g(of)g(the)g(utility)371
+3256 y Fk(ghostscript)p Fq(,)d(it)h(is)g(possible)f(to)h(view)g
+(Postscript)f(documents)f(on)i(scr)n(een)f(and)i(to)e(print)371
+3369 y(Postscript)c(documents)g(on)h(non-Postscript)e(printers.)31
+b(This)24 b(version)g(of)g Fk(dvips)f Fq(supports)371
+3482 y(hypertex)e(and)i(partial)i(font)e(downloading.)28
+b(In)23 b(this)g(r)n(elease,)f(the)h(sear)n(ch)g(path)g(for)g(con\002g)
+371 3595 y(\002les)29 b(have)g(been)g(changed:)40 b(the)28
+b(curr)n(ent)g(dir)n(ectory)g(is)h(no)g(longer)f(sear)n(ched)g(by)h
+(default.)371 3708 y(Additionally)-10 b(,)23 b(secur)n(e)e(mode)h(has)h
+(been)f(turned)f(on)h(by)h(default.)k(For)22 b(details,)g(consult)g
+(the)371 3821 y(documentation:)27 b Fk(texdoc)46 b(dvips)o
+Fq(.)144 4009 y Fo(dvilj)f Fq(This)39 b(is)g(a)h(family)g(of)f(drivers)
+f(to)g(support)f(HP)i(LaserJet)e(\(and)i(compatible\))h(printers:)371
+4121 y Fk(dvilj,)51 b(dvilj2p,)f(dvilj4,)g(dvilj4l,)g(dvilj6)p
+Fq(.)36 b(These)25 b(drivers)g(ar)n(e)h(faster)g(than)f(the)371
+4234 y Fk(dvips)31 b Fq(+)i Fk(ghostscript)c Fq(alternative)k(\(which)g
+(can)g(also)g(be)f(used)f(to)g(print)h(DVI)g(\002les)g(on)371
+4347 y(HP)27 b(LaserJet)f(printers\),)h(but)h(they)e(lack)i(a)g(few)f
+(featur)n(es)f(like)i(support)d(for)i(virtual)i(fonts,)371
+4460 y(r)n(otated)22 b(or)g(scaled)h(graphics,)f(etc.)144
+4648 y Fo(xdvi)45 b Fq(This)34 b(is)g(a)g(pr)n(eviewer)f(for)h(DVI)f
+(\002les)h(under)e(the)h(X)h(W)-5 b(indow)33 b(System.)60
+b(It)33 b(has)h(support)371 4761 y(for)26 b(Postscript)e(specials)h
+(thr)n(ough)g(Display)h(Postscript,)e(NeWS)h(and)g Fk(ghostscript)p
+Fq(.)34 b(Hy-)371 4874 y(pertex)28 b(support)f(was)h(also)i(added)d
+(for)i(this)g(version)f(of)h Fk(xdvi)p Fq(.)46 b(A)29
+b(link)g(can)h(be)f(followed)371 4987 y(by)h(clicking)h(with)f
+(Button-1)e(or)i(Button-2)e(\(open)h(link)h(in)g(a)h(new)e(window\))g
+(on)g(it.)50 b(W)-5 b(ith)1858 5443 y(4)p eop end
+%%Page: 5 5
+TeXDict begin 5 4 bop 371 193 a Fq(the)25 b(help)g(of)g(sour)n(ce)g
+(specials,)g(xdvi)h(can)g(interact)f(with)h(most)e(editors)g(in)h(some)
+g(way)-10 b(.)35 b(For)371 306 y(details,)22 b(visit)i(the)d(pr)n
+(oject)i(page.)144 483 y Fo(dvipdfm)44 b Fq(This)27 b(pr)n(ogram)h(can)
+g(convert)f(dvi)h(\002les)f(into)h(pdf)f(format,)i(while)e(supporting)f
+(a)i(rich)371 595 y(set)g(of)g(featur)n(es)g(\(via)i(T)-8
+b(eX's)27 b(\\special)j(scheme\):)39 b(hyperlinks,)28
+b(bookmarks,)h(thumbnails,)371 708 y(image)d(inclusion)g(etc.)35
+b(For)25 b(details)g(consult)g(the)f(documentation)g
+Fk(texdoc)46 b(dvipdfm)26 b Fq(and)371 821 y(the)c(web)h(page.)144
+998 y Fo(dvipng)44 b Fq(makes)24 b(PNG)h(and/or)f(GIF)h(graphics)f(fr)n
+(om)i(DVI)e(\002les)h(as)g(obtained)f(fr)n(om)i(T)-8
+b(eX)23 b(and)i(its)371 1111 y(r)n(elatives.)k(For)21
+b(details,)h(consult)h(the)e(documentation:)27 b Fk(texdoc)46
+b(dvipng)p Fq(.)144 1360 y Fn(1.4)99 b(Makeindex)144
+1537 y Fk(makeindex)31 b Fq(is)j(a)g(general)f(purpose)e(hierar)n
+(chical)36 b(index)d(generator;)k(it)d(accepts)f(one)g(or)g(mor)n(e)144
+1650 y(input)25 b(\002les)g(\(often)g(pr)n(oduced)f(by)i(a)g(text)e
+(formatter)h(such)g(as)h(T)2395 1671 y(E)2438 1650 y(X)g(or)f
+Fk(troff)p Fq(\),)g(sorts)f(the)g(entries,)144 1763 y(and)34
+b(pr)n(oduces)f(an)h(output)f(\002le)h(which)g(can)h(be)f(formatted.)61
+b(The)34 b(formats)g(of)g(the)f(input)h(and)144 1876
+y(output)20 b(\002les)i(ar)n(e)g(speci\002ed)f(in)h(a)h(style)e
+(\002le;)h(by)g(default,)f(input)h(is)g(assumed)f(to)g(be)h(an)g
+Fk(idx)g Fq(\002le,)g(as)144 1989 y(generated)e(by)j(L)714
+1972 y Fr(A)752 1989 y Fq(T)793 2010 y(E)837 1989 y(X.)k
+(Documentation:)h Fk(texdoc)46 b(makeindex)144 2238 y
+Fn(1.5)99 b(T)-11 b(exinfo)144 2415 y Fk(texinfo)20 b
+Fq(is)j(a)f(documentation)f(system.)26 b(It)21 b(pr)n(oduces)g(online)h
+(or)g(printed)e(output)h(fr)n(om)h(a)h(single)144 2528
+y(sour)n(ce.)k(It)22 b(uses)f(T)778 2549 y(E)822 2528
+y(X)h(to)g(typeset)e(documents)h(for)i(printing)f(\()p
+Fk(texdoc)46 b(texinfo)n Fq(\).)144 2777 y Fn(1.6)99
+b(UNIX)25 b(Scripts)g(/)g(T)-11 b(ools)144 2954 y Fq(If)18
+b(you)f(ar)n(e)h(using)g(teT)894 2975 y(E)937 2954 y(X)f(under)g(UNIX,)
+f(you)h(can)i(use)e(the)g(following)h(scripts.)26 b(Mor)n(e)17
+b(documenta-)144 3066 y(tion)k(for)g(a)h(speci\002c)f(tool)g(can)h
+(either)f(be)g(obtained)g(fr)n(om)g(its)g(UNIX)f(manual)j(page)e(or)g
+(by)g(r)o(unning)144 3179 y(the)h(pr)n(ogram)g(with)h(the)f(option)f
+Fk(\025help)p Fq(.)144 3340 y Fo(texdoc)46 b Fq(allows)24
+b(you)e(to)h(easily)g(access)g(documentation)f(included)h(with)g(teT)
+2884 3361 y(E)2927 3340 y(X.)29 b(Y)-8 b(ou)22 b(only)h(have)371
+3453 y(to)i(r)n(emember)g(the)g(\002le)g(name)h(of)g(the)e(document)g
+(that)i(you)e(want)h(to)g(access,)h(without)e(the)371
+3566 y(dir)n(ectory)h(part.)36 b(If)25 b(you)g(do)f(not)h(specify)g(a)h
+(\002le)f(name)h(extension)e(\(such)h(as)g Fk(.dvi)p
+Fq(\))g Fk(texdoc)371 3678 y Fq(will)g(try)d(a)i(few)e(default)h
+(extensions.)k(After)22 b(sear)n(ching)h(the)g(\002le,)g
+Fk(texdoc)e Fq(starts)h(an)i(appr)n(o-)371 3791 y(priate)19
+b(viewer)-7 b(.)27 b(The)18 b(command)h Fk(texdoc)40
+b(\025help)17 b Fq(gives)i(you)f(a)h(list)g(of)g(available)j(command)
+371 3904 y(line)30 b(options.)47 b(While)30 b Fk(texdoc)e
+Fq(is)i(a)g(fast)f(and)h(ef)n(\002cient)g(tool)f(if)h(you)f(exactly)g
+(know)g(what)371 4017 y(you)23 b(ar)n(e)i(sear)n(ching)f(for)-7
+b(,)24 b(it)g(is)g(of)g(limited)h(use)e(if)i(you)e(don't)g(know)g(the)g
+(exact)h(name)g(of)g(the)371 4130 y(documentation)e(\002le.)144
+4307 y Fo(texdoctk)46 b Fq(This)31 b Fk(perl/tk)f Fq(based)h(tool)g
+(allows)h(you)e(to)h(br)n(owse)f(thr)n(ough)g(the)h(available)j(docu-)
+371 4420 y(mentation)26 b(by)g(some)f(topics)h(and)g(to)f(sear)n(ch)h
+(for)g(keywor)n(ds.)36 b(It)25 b(uses)g(a)i(simple)f(database)371
+4533 y(\002le)33 b(for)f(its)g(con\002guration)g(\(named)h
+Fk(texdoctk.dat)p Fq(\),)f(which)h(you)e(can)i(customize)g(and)371
+4646 y(extend)21 b(easily)-10 b(.)144 4822 y Fo(texcon\002g)45
+b Fq(allows)26 b(you)f(to)g(carry)g(out)g(the)g(most)f(common)i
+(con\002guration)f(tasks)f(in)i(teT)3301 4844 y(E)3344
+4822 y(X.)36 b(The)371 4935 y(pr)n(ogram)26 b(can)h(be)e(used)g(in)h
+(command)g(mode)f(or)g(in)i(interactive)f(mode.)36 b(For)25
+b(the)g(interac-)371 5048 y(tive)i(mode)e(\(which)j(is)e(invoked)g(by)g
+(calling)i Fk(texconfig)d Fq(without)g(ar)n(guments\),)i(a)g(curses)
+1858 5443 y(5)p eop end
+%%Page: 6 6
+TeXDict begin 6 5 bop 371 193 a Fq(based)21 b(utility)h(is)g(used)e
+(for)i(user)e(interaction)i(\(menus,)f(check)h(boxes,)e(.)14
+b(.)g(.)g(\).)26 b(The)21 b(command)371 306 y Fk(texconfig)50
+b(help)25 b Fq(shows)g(you)h(a)h(list)f(of)h(available)i(command)e
+(line)g(options)e(\(command)371 419 y(mode\).)371 566
+y Fk(texconfig)c Fq(can)j(be)f(used)f(to)h(set)f(up)h(T)1731
+587 y(E)1774 566 y(X)g(format)h(\002les)f(and)g(their)g(hyphenation)f
+(patterns,)371 678 y(to)j(set)g(up)g(printers)f(\(for)i
+Fk(dvips)p Fq(\))e(and)i(for)f(a)h(few)f(other)g(things.)35
+b(It)25 b(manipulates)h(con\002gu-)371 791 y(ration)d(\002les)f(to)g
+(stor)n(e)g(the)g(con\002guration)g(changes.)371 938
+y(If)e(the)e(use)g(of)i Fk(texconfig)c Fq(causes)j(a)h(change)f(in)h
+(some)e(con\002guration)h(\002le,)g Fk(texconfig)e Fq(will)371
+1051 y(try)26 b(to)g(save)h(that)f(\002le)h(into)f(the)g(texmf)g(tr)n
+(ee)g(that)g(is)h(speci\002ed)e(by)i(the)e Fk(TEXMFCONFIG)f
+Fq(vari-)371 1164 y(able.)38 b(V)-8 b(ariable)27 b(\(cached\))f(r)o
+(untime)g(data)f(\(such)h(as)g(format)g(\002les)f(generated)e(by)j
+Fk(fmtutil)p Fq(,)371 1277 y(map)k(\002les)f(generated)e(by)i
+Fk(updmap)p Fq(\))f(will)j(be)e(stor)n(ed)f(in)h(the)g(texmf)g(tr)n(ee)
+f(speci\002ed)g(by)h(the)371 1390 y Fk(TEXMFVAR)21 b
+Fq(variable.)144 1570 y Fo(updmap)44 b Fq(Some)36 b(tools)f(in)i(teT)
+1257 1592 y(E)1300 1570 y(X)f(support)e(Postscript)h(T)-8
+b(ype)35 b(1)i(fonts:)54 b Fk(dvips)p Fq(,)39 b Fk(pdfT)3258
+1590 y(E)3292 1570 y(X)p Fq(,)h Fk(xdvi)p Fq(,)371 1683
+y Fk(dvipdfm)30 b Fq(and)g Fk(gsftopk)p Fq(,)f Fk(ps2pk)p
+Fq(.)48 b(The)29 b(last)h(two)f(in)h(this)g(list)g(just)f(convert)g
+(outline)h(fonts)371 1796 y(into)23 b(a)h(bitmap)g(format)f(which)h(is)
+f(helpful)h(for)f(applications)h(that)e(don't)h(dir)n(ectly)g(support)
+371 1909 y(outline)32 b(fonts.)54 b(In)32 b(an)g(ideal)g(world,)i(all)f
+(of)f(these)e(pr)n(ograms)h(would)g(shar)n(e)h(a)g(common)371
+2022 y(con\002guration)d(\002le)g(to)g(set)f(up)g(their)h(outline)g
+(fonts.)46 b(The)29 b(r)n(eality)g(is)g(dif)n(fer)n(ent,)i(however)-7
+b(,)371 2135 y(and)27 b(each)g(tool)f(needs)f(its)i(own)f
+(con\002guration.)39 b(The)26 b Fk(updmap)f Fq(utility)i(was)g
+(developed)d(to)371 2248 y(generate)j(these)h(con\002guration)g
+(\002les)g(fr)n(om)i(a)f(central)g(r)n(epository)-10
+b(.)45 b(Adding)27 b(font)i(de\002ni-)371 2361 y(tions)k(for)g(all)i
+(supported)30 b(applications)35 b(fr)n(om)e(a)h(map)g(\002le)g
+Fk(foo.map)d Fq(can)j(be)g(as)f(easy)g(as)371 2474 y
+Fk(updmap)52 b(--enable)g(Map)h(foo.map)p Fq(.)42 b(For)27
+b(details,)h(please)g(consult)f(the)g(manual)i(page)f(of)371
+2587 y Fk(updmap)p Fq(.)144 2767 y Fo(dvired)45 b Fq(This)31
+b(script)g(can)i(be)e(used)f(to)g(print)i(documents)d(formatted)i(for)g
+(A4)h(paper)e(2-up)i(\(i.e.)371 2880 y(two)e(logical)h(pages)e(to)h
+(one)f(physical)h(page)g(of)g(paper\))f(by)h(scaling)h(the)f(pages)e
+(to)i(70.7)16 b(\045)371 2993 y(of)31 b(their)f(original)i(size.)52
+b Fk(dvired)31 b Fq(can)g(just)f(be)h(used)e(in)i(the)f(same)h(way)f
+(as)h Fk(dvips)e Fq(\(same)371 3106 y(command)24 b(line)f(options\).)
+144 3287 y Fo(dvi2fax)47 b Fq(This)28 b(script)h(converts)f(DVI)g
+(\002les)h(into)f(F)-7 b(AX)29 b(G3)g(format.)47 b(It)28
+b(uses)g Fk(ghostscript)e Fq(\(see:)371 3400 y Fk
+(http://www.cs.wisc.edu/~gh)o(ost)o(/)p Fq(\))g(which)33
+b(is)e(not)g(part)h(of)g(teT)2831 3421 y(E)2873 3400
+y(X.)55 b(The)31 b(DVI)h(\002le)g(is)371 3512 y(\002rst)d(converted)f
+(to)h(Postscript)f(\(204)22 b Fh(\002)e Fq(196)c(dpi)30
+b(or)f(204)21 b Fh(\002)f Fq(98)c(dpi\))30 b(and)f(then)g(to)g(F)-7
+b(AX)29 b(G3)371 3625 y(using)22 b Fk(ghostscript)e Fq(\()p
+Fk(faxg3)i Fq(device\).)144 3806 y Fo(allcm,)i(allec,)g(allneeded)46
+b Fq(teT)1223 3827 y(E)1266 3806 y(X's)24 b(DVI)f(drivers)g(generate)f
+(missing)h(bitmap)h(fonts)f(on)g(demand)371 3919 y(\(the)29
+b(\002rst)g(time)h(they)e(ar)n(e)i(needed\).)47 b(If)29
+b(you)g(start)g(with)g(a)h(fr)n(esh)g(installation,)i(you)d(don't)371
+4032 y(have)d(any)f(bitmap)g(fonts)f(and)h(the)f(delay)h(caused)f(by)h
+(font)g(generation)e(might)i(be)g(too)f(an-)371 4145
+y(noying)g(for)g(you.)33 b(In)24 b(that)g(case,)h(the)e(thr)n(ee)h
+(scripts)f Fk(allcm,)49 b(allec)f(and)h(allneeded)24
+b Fq(can)371 4258 y(help)32 b(you.)55 b Fk(allcm)33 b
+Fq(and)f Fk(allec)f Fq(cr)n(eate)h(a)h(few)e(DVI)h(\002les)g(\(using)g
+(L)2777 4241 y Fr(A)2815 4258 y Fq(T)2856 4279 y(E)2899
+4258 y(X\))h(which)f(use)f(lots)371 4371 y(of)25 b(fonts)g(at)g
+(various)g(sizes)g(and)g(r)o(un)g(these)e(DVI)i(\002les)g(thr)n(ough)f
+Fk(dvips)p Fq(.)33 b(This)25 b(triggers)e(the)371 4483
+y(generation)d(of)g(the)g(most)f(commonly)i(used)e(Computer)h(Modern)f
+(\()p Fk(allcm)r Fq(\))g(and)i(Eur)n(opean)371 4596 y(Computer)27
+b(Modern)f(\()p Fk(allec)p Fq(\))h(fonts)g(r)n(espectively)-10
+b(.)41 b(Y)-8 b(ou)26 b(might)i(alr)n(eady)g(have)g(DVI)f(\002les)371
+4709 y(and)d(want)g(to)g(generate)e(just)h(the)g(bitmap)i(fonts)e
+(needed)f(by)i(these)e(documents.)30 b(This)24 b(can)371
+4822 y(be)32 b(done)e(by)h(the)f Fk(allneeded)h Fq(script.)53
+b(This)31 b(script)g(will)i(sear)n(ch)e(a)h(given)f(set)f(of)i(dir)n
+(ecto-)371 4935 y(ries)27 b(for)f(DVI)h(\002les)f(and)h(r)o(un)g(them)f
+(thr)n(ough)g Fk(dvips)p Fq(.)39 b(All)27 b(these)f(scripts)f(just)i
+(trigger)e(font)371 5048 y(generation.)58 b(L)907 5031
+y Fr(A)945 5048 y Fq(T)986 5069 y(E)1030 5048 y(X)33
+b(and)g(DVI)g(\002les)g(generated)e(by)i Fk(allcm)r Fq(/)p
+Fk(allec)d Fq(ar)n(e)k(r)n(emoved)e(when)1858 5443 y(6)p
+eop end
+%%Page: 7 7
+TeXDict begin 7 6 bop 371 193 a Fq(the)29 b(pr)n(ogram)h(terminates.)48
+b(Postscript)28 b(output)g(that)h(is)h(generated)d(by)j
+Fk(dvips)e Fq(is)i(sent)e(to)371 306 y Fk(/dev/null)p
+Fq(.)371 456 y(These)18 b(pr)n(ograms)h(accept)g(the)g(command)h(line)g
+(option)e(\223)p Fk(-r)p Fq(\224)i(\(must)f(be)g(the)g(\002rst)g
+(option\))f(to)371 569 y(generate)g(\002les)i(for)g(the)f
+(magni\002cation)i(707)q Fg(=)q Fq(1000)i(which)e(is)e(used)g(by)h
+Fk(dvired)p Fq(.)25 b Fk(allneeded)371 682 y Fq(passes)h(options)g
+(which)j(corr)n(espond)c(to)i(existing)g(\002le)g(or)h(dir)n(ectory)e
+(names)i(to)f Fk(find)g Fq(\(for)371 795 y(locating)19
+b(DVI)e(\002les\).)26 b(All)18 b(other)f(options)f(given)i(to)f(any)g
+(of)h(these)e(thr)n(ee)g(utilities)i(ar)n(e)g(passed)371
+908 y(to)25 b Fk(dvips)p Fq(.)35 b(So,)25 b(by)g(passing)g
+Fk(-D)50 b Fe(NNN)63 b Fk(-mfmode)49 b Fe(some-mode)26
+b Fq(or)f Fk(-P)50 b Fe(some-printer)7 b Fq(,)24 b(you)371
+1021 y(can)k(generate)e(fonts)g(for)h(a)h(speci\002c)f(r)n(esolution)f
+(\()p Fe(NNN)13 b Fq(\))27 b(and)h(mode)e(\()p Fe(some-mode)s
+Fq(\))f(or)i(for)g(a)371 1134 y(speci\002c)c(printer)f(\()p
+Fe(printer)7 b Fq(\).)144 1432 y Fp(2)119 b(Concepts)31
+b(and)f(con\002guration)144 1646 y Fn(2.1)99 b(The)25
+b(T)619 1670 y(E)669 1646 y(X)g(Directory)g(Structure)g(\(TDS\))144
+1823 y Fq(teT)259 1845 y(E)302 1823 y(X's)k(support)e(tr)n(ee)h(with)i
+(fonts,)f(macr)n(os,)j(documentation)c(and)h(other)f(\002les)h(\(fr)n
+(om)h(now)f(on)144 1936 y(called)e(the)f(\223texmf)g(tr)n(ee\224\))h
+(follows)f(a)h(certain)f(str)o(uctur)n(e:)35 b(the)25
+b(T)2425 1958 y(E)2469 1936 y(X)h(Dir)n(ectory)g(Str)o(uctur)n(e)f
+(\(TDS\).)144 2049 y(This)d(is)h(a)g(standar)n(d)f(developed)e(by)j(a)g
+(T)1555 2070 y(E)1598 2049 y(X)g(W)-8 b(orking)21 b(Gr)n(oup)h(of)h
+(TUG.)f(The)f(TDS)i(is)f(de\002ned)f(in)i(a)144 2162
+y(way)d(so)g(that)f(can)i(be)f(used)f(by)h(dif)n(fer)n(ent)g
+(implementations)g(of)g(T)2436 2183 y(E)2480 2162 y(X)g(on)f(dif)n(fer)
+n(ent)h(platforms.)27 b(T)-8 b(o-)144 2275 y(day)e(,)25
+b(several)f(T)684 2296 y(E)728 2275 y(X)g(distributions)g(follow)h
+(this)f(standar)n(d:)32 b(teT)2336 2296 y(E)2379 2275
+y(X,)24 b(T)2528 2296 y(E)2572 2275 y(X)h(Live,)g(fpT)3009
+2296 y(E)3052 2275 y(X)g(and)f(miktex,)144 2388 y(only)e(to)f(mention)h
+(some.)27 b(Y)-8 b(ou)21 b(need)g(to)g(understand)f(this)i(str)o(uctur)
+n(e)f(if)i(you)e(want)h(to)g(build)h(your)144 2501 y(own)29
+b(texmf)g(tr)n(ee)f(\(e.g.,)g(with)h(all)h(your)e(local)j(additions\))e
+(or)g(add)f(\002les)h(into)g(an)h(existing)e(texmf)144
+2614 y(tr)n(ee.)e(The)18 b(list)i(of)f(all)h(texmf)f(tr)n(ees)f
+(\(optionally)h(using)g(some)f(notation)h(called)h(\223brace)g
+(expansion\224)144 2727 y(and)j Fk(!!)f Fq(modi\002ers;)f(the)h
+(kpathsea)g(manual)i(explains)e(this)h(in)g(detail\))g(can)g(be)g
+(obtained)f(by:)326 2840 y Fk(kpsewhich)45 b(-expand-var='$TEXMF')285
+2952 y Fq(T)-8 b(able)29 b(1)g(gives)e(a)i(short)e(overview)h(of)g(the)
+g(TDS.)g(It)f(shows)g(the)h(pr)n(oper)f(location)i(inside)e(the)144
+3065 y(TDS)21 b(tr)n(ee)e(for)i(several)f(kind)g(of)h(\002les.)27
+b(The)20 b(complete)f(documentation)h(for)g(TDS)h(can)g(be)g(accessed)
+144 3178 y(by)27 b Fk(texdoc)46 b(tds)o Fq(.)40 b(If)27
+b(you)f(want)h(to)f(see)f(some)h(examples,)h(just)f(look)g(at)h(the)f
+(main)i(texmf)f(tr)n(ee)f(of)144 3291 y(teT)259 3313
+y(E)302 3291 y(X.)i(It)22 b(has)g(several)h(thousand)e(\002les.)p
+758 3519 2246 8 v 907 3614 a(T)948 3635 y(E)991 3614
+y(X)i(macr)n(os)199 b(tex/)p Fh(h)p Ff(format)p Fh(i)p
+Fq(/)p Fh(h)p Ff(package)p Fh(i)p Fq(/)961 3727 y(font)22
+b(\002les)252 b(fonts/)p Fh(h)p Ff(type)p Fh(i)p Fq(/)p
+Fh(h)p Ff(supplier)p Fh(i)p Fq(/)p Fh(h)p Ff(typeface)p
+Fh(i)p Fq(/)808 3840 y Fl(MET)n(AF)l(ONT)21 b Fq(\002les)99
+b(metafont/)p Fh(h)p Ff(package)p Fh(i)p Fq(/)830 3953
+y(documentation)120 b(doc/)p Fh(h)p Ff(package)p Fh(i)p
+Fq(/)985 4066 y(sour)n(ces)276 b(sour)n(ce/)p Fh(h)p
+Ff(package)p Fh(i)p Fq(/)907 4179 y(B)r Fj(I)r(B)-5 b
+Fq(T)1072 4200 y(E)1116 4179 y(X)22 b(\002les)199 b(bibtex/{bst,bib}/)p
+Fh(h)p Ff(package)p Fh(i)p Fq(/)p 758 4235 V 1355 4392
+a(T)-8 b(able)23 b(1:)28 b(TDS:)23 b(an)g(overview)285
+4585 y(The)f(r)n(eplaceable)i(parts)e(in)h(this)f(table)h(mean:)144
+4773 y Fh(h)p Fd(format)r Fh(i)45 b Fq(The)22 b(name)g(of)h(the)f(T)
+1255 4794 y(E)1299 4773 y(X)g(format,)h(e.g.,)e Fk(latex)g
+Fq(or)h Fk(amstex)p Fq(.)144 4961 y Fh(h)p Fd(package)p
+Fh(i)44 b Fq(The)22 b(name)h(of)g(the)f(package)g(to)g(which)h(the)f
+(\002le)h(belongs,)e(e.g.,)g Fk(babel)g Fq(or)i Fk(seminar)p
+Fq(.)1858 5443 y(7)p eop end
+%%Page: 8 8
+TeXDict begin 8 7 bop 144 193 a Fh(h)p Fd(type)p Fh(i)45
+b Fq(The)17 b(name)i(of)f(the)g(type)f(of)h(a)h(font)f(\002le,)h(e.g.,)
+e Fk(pk)i Fq(\(packed)e(bitmap\),)j Fk(tfm)g Fq(\(tex)d(font)h
+(metric\),)371 306 y Fk(afm)24 b Fq(\(adobe)e(font)h(metric\),)g
+Fk(vf)f Fq(\(virtual)i(font\),)e(or)g Fk(source)f Fq(\()p
+Fl(MET)n(AF)l(ONT)h Fq(sour)n(ce\).)144 489 y Fh(h)p
+Fd(supplier)r Fh(i)45 b Fq(The)22 b(name)g(of)g(the)g(font)g(supplier)f
+(\(to)h(whom)g(the)f(font)h(\002le)g(belongs\),)f(e.g.,)g
+Fk(adobe)g Fq(or)371 602 y Fk(urw)p Fq(.)144 786 y Fh(h)p
+Fd(typeface)p Fh(i)45 b Fq(The)36 b(name)g(of)g(the)g(typeface)f(name)h
+(\(for)h(this)f(font)f(\002le\),)40 b(e.g.,)34 b Fk(times)h
+Fq(or)h Fk(cm)h Fq(\(for)371 899 y(Computer)22 b(Modern\).)285
+1076 y(It)j(is)g(important)g(to)f(know)h(that)f(the)h(default)g(sear)n
+(ch)g(paths)g(in)g(teT)2641 1097 y(E)2684 1076 y(X)g(r)n(ely)g(on)g
+(this)g(dir)n(ectory)144 1189 y(str)o(uctur)n(e.)h(So,)21
+b(if)h(you)f(add)g(a)h(\002le)f(to)g(the)g(wr)n(ong)f(dir)n(ectory)h
+(tr)n(ee,)f(e.g.,)g(a)i(T)-8 b(eX)20 b(macr)n(o)i(somewher)n(e)144
+1302 y(in)h(the)f Fk(fonts)f Fq(subtr)n(ee,)g(that)i(\002le)g(will)g
+(not)f(be)h(found)f(corr)n(ectly)-10 b(.)144 1554 y Fn(2.2)99
+b(Overview)25 b(of)h(the)e(prede\002ned)g(texmf)g(trees)144
+1731 y Fq(As)j(described)f(in)i(the)f(pr)n(evious)g(section,)h(each)g
+(texmf)f(tr)n(ee)f(follows)i(a)g(well)g(de\002ned)e(dir)n(ectory)144
+1844 y(str)o(uctur)n(e.)31 b(This)24 b(section)g(lists)g(all)h(pr)n
+(ede\002ned)d(texmf)i(tr)n(ees)f(and)h(their)g(intended)e(purpose.)30
+b(The)144 1957 y(command)h Fk(texconfig)53 b(conf)29
+b Fq(shows)g(you)g(the)h(values)g(of)g(the)f(variables)j(below)-8
+b(,)31 b(so)f(that)g(you)144 2070 y(can)24 b(easily)e(\002nd)g(out)g
+(how)g(they)g(map)h(to)f(dir)n(ectory)f(names)i(in)g(your)f
+(installation.)144 2270 y Fo(TEXMFCONFIG)43 b Fq(The)32
+b(tr)n(ee)h(speci\002ed)f(by)h(this)h(variable)h(will)g(be)e(used)f(by)
+i(teT)3114 2291 y(E)3157 2270 y(X's)f(utilities)371 2383
+y Fk(texconfig)p Fq(,)20 b Fk(updmap)h Fq(and)i Fk(fmtutil)e
+Fq(to)h(stor)n(e)f(modi\002ed)h(con\002guration)g(data.)144
+2567 y Fo(TEXMFV)-12 b(AR)43 b Fq(The)20 b(tr)n(ee)g(speci\002ed)f(by)i
+(this)f(variable)j(will)f(by)f(used)e(by)i(the)e(utilities)i
+Fk(texconfig)p Fq(,)371 2679 y Fk(updmap)i Fq(and)i Fk(fmtutil)e
+Fq(to)h(stor)n(e)f(\(cached\))j(r)o(untime)e(data)h(such)g(as)f(format)
+h(\002les)g(and)f(gen-)371 2792 y(erated)e(map)h(\002les.)144
+2976 y Fo(TEXMFHOME)43 b Fq(The)23 b(expansion)g(of)h(this)g(variable)h
+(typically)g(depends)c(on)j Fk($HOME)p Fq(,)e(so)i(this)f(dy-)371
+3089 y(namically)34 b(adjusts)c(for)h(each)g(user)f(to)h(an)g
+(individual)i(dir)n(ectory)-10 b(.)52 b(The)30 b(idea)h(is)g(to)g
+(allow)371 3202 y(users)21 b(to)h(stor)n(e)g(their)g(own)g(versions)g
+(of)g(macr)n(os,)h(fonts)f(etc.)28 b(in)23 b(this)f(tr)n(ee.)144
+3385 y Fo(TEXMFSYSCONFIG)41 b Fq(The)32 b(tr)n(ee)f(speci\002ed)g(by)h
+(this)f(variable)j(will)g(be)e(used)e(by)i(the)g(utilities)371
+3498 y Fk(texconfig-sys)p Fq(,)37 b Fk(updmap-sys)d Fq(and)j
+Fk(fmtutil-sys)d Fq(to)i(stor)n(e)f(modi\002ed)h(con\002guration)371
+3611 y(data.)144 3794 y Fo(TEXMSYSFV)-12 b(AR)42 b Fq(The)31
+b(tr)n(ee)f(speci\002ed)g(by)i(this)f(variable)i(will)g(by)e(used)f(by)
+h Fk(texconfig-sys)p Fq(,)371 3907 y Fk(updmap-sys)22
+b Fq(and)j Fk(fmtutil-sys)c Fq(to)j(stor)n(e)g(\(cached\))h(r)o(untime)
+g(data)f(such)h(as)f(format)h(\002les)371 4020 y(and)e(generated)d(map)
+j(\002les.)144 4204 y Fo(TEXMFMAIN)44 b Fq(This)22 b(variable)k
+(speci\002es)c(the)g(texmf)h(tr)n(ee)f(wher)n(e)h(some)f(vital)j(parts)
+d(of)h(the)g(sys-)371 4317 y(tem)35 b(ar)n(e)g(installed,)j(such)c(as)h
+(helper)f(scripts)g(\(e.g.)64 b Fk(web2c/mktexdir)p Fq(\),)34
+b(pool)g(\002les)h(and)371 4430 y(other)22 b(support)e(\002les.)144
+4613 y Fo(TEXMFLOCAL)42 b Fq(This)20 b(variable)i(names)e(a)h(dir)n
+(ectory)e(tr)n(ee)h(which)h(should)e(be)h(used)f(for)h(system-)371
+4726 y(wide)i(installation)i(of)f(additional)g(or)f(updated)f(macr)n(o)
+j(packages,)e(fonts)f(etc.)144 4909 y Fo(TEXMFDIST)43
+b Fq(This)21 b(variable)i(names)e(the)f(dir)n(ectory)g(tr)n(ee)g(which)
+i(holds)e(the)g(macr)n(os,)i(fonts)e(etc.)371 5022 y(as)j(originally)h
+(distributed.)1858 5443 y(8)p eop end
+%%Page: 9 9
+TeXDict begin 9 8 bop 144 193 a Fn(2.3)99 b(The)25 b(\002le)g(name)f
+(database)g(\(ls-R\))144 370 y Fq(texmf)33 b(tr)n(ees)f(can)i(get)e
+(very)g(lar)n(ge)i(and)f(to)f(speed)f(up)i(sear)n(ching)g(in)g(such)g
+(a)h(tr)n(ee,)h(a)e(\002le)g(name)144 483 y(database)24
+b(is)g(used.)30 b(A)23 b(\002le)h(name)g(database)g(exists)e(in)j(the)e
+(r)n(oot)g(of)g(each)i(texmf)e(tr)n(ee)g(and)h(has)f(the)144
+596 y(name)e Fk(ls-R)p Fq(.)f(It)h(should)f(list)h(each)g(\002le)g(in)h
+(the)e(texmf)h(tr)n(ee.)26 b(The)20 b(command)i Fk(texhash)d
+Fq(can)j(be)f(used)144 708 y(to)28 b(build)h(an)g(up-to-date)e(\002le)h
+(name)h(database)g(for)f(each)h(texmf)f(tr)n(ee.)44 b(It)28
+b(should)f(be)i(used)e(after)144 821 y(\002les)21 b(have)h(been)f
+(added)f(to)g(a)i(texmf)f(tr)n(ee.)27 b(However)-7 b(,)20
+b(you)h(don't)f(need)g(to)h(r)o(un)g Fk(texhash)f Fq(for)h(\002les)144
+934 y(added)g(by)i(the)f(automatic)h(font)f(generation)g(or)g(the)g
+Fk(texconfig)f Fq(utility)-10 b(.)144 1189 y Fn(2.4)99
+b(Runtime)25 b(con\002guration)g(\(texmf.cnf)f(\002le\))144
+1366 y Fq(Sear)n(ch)j(paths)f(and)h(other)f(de\002nitions)f(\(e.g.,)h
+(the)g(static)h(sizes)f(of)h(some)f(arrays)h(in)g(T)3161
+1387 y(E)3205 1366 y(X)f(or)h(other)144 1479 y(pr)n(ograms\))22
+b(can)h(be)f(set)f(up)g(in)i(con\002guration)e(\002les)h(named)g
+Fk(texmf.cnf)p Fq(.)j(By)d(changing)g(the)f(de\002-)144
+1592 y(nitions)j(in)h(these)d(con\002guration)i(\002les)g(\(teT)1682
+1613 y(E)1725 1592 y(X's)g(main)h Fk(texmf.cnf)d Fq(is)i
+Fk(web2c/texmf.cnf)d Fq(in)j(the)144 1705 y(main)g(texmf)f(tr)n(ee\),)e
+(the)h(behavior)i(of)f(pr)n(ograms)f(can)h(be)g(changed)f(without)g(r)n
+(ecompiling)h(them.)144 1818 y(Chapters)g(3)h(and)f(4)h(of)g(the)f
+(kpathsea)f(manual)j(\()p Fk(texdoc)46 b(kpathsea)q Fq(\))23
+b(describe)g(the)g(path)g(sear)n(ch-)144 1931 y(ing)i(con\002guration)g
+(in)g(detail.)35 b(Section)25 b(2.5)g(of)g(the)g(W)-8
+b(eb2c)25 b(manual)h(\()p Fk(texdoc)47 b(web2c)n Fq(\))26
+b(describes)144 2043 y(some)c(inter)n(esting)f(r)o(untime)i(parameters)
+e(that)i(you)e(might)i(want)f(to)g(change.)285 2156 y(Some)i(changes)h
+(to)f(the)g(array)h(sizes)f(r)n(equir)n(e)h(you)f(to)g(r)n(ebuild)h
+(the)g(dump)f(\002les)g(that)h(the)f(pr)n(o-)144 2269
+y(gram)e(uses.)k(Run)21 b(the)f(command)i Fk(texconfig)43
+b(init)21 b Fq(to)g(r)n(ebuild)h(all)g(dump)f(\002les)g(after)h(you)e
+(have)144 2382 y(changed)i(one)g(of)h(the)e(array)i(sizes.)285
+2495 y(This)c(implementation)f(of)h(T)1278 2516 y(E)1322
+2495 y(X)f(can)i(r)n(ead)e(and)h(write)f(\002les)h(\(as)g(can)g(every)f
+(implementation)h(of)144 2608 y(T)185 2629 y(E)229 2608
+y(X\))k(and)g(it)h(can)g(also)g(call)h(external)d(commands)i(\(via)h
+(the)d Fk(\\write18)g Fq(str)n(eam\).)30 b(Some)22 b(variables)144
+2721 y(in)32 b(the)g Fk(texmf.cnf)d Fq(\002le)j(contr)n(ol)g(access)g
+(to)f(these)f(featur)n(es.)55 b(The)31 b(possibility)h(to)f(call)j
+(external)144 2834 y(commands)27 b(can)h(be)f(turned)e(on)i(or)g(of)n
+(f)g(\(default)h(is)f(of)n(f\).)42 b(Access)26 b(to)g(\002le)h
+(beginning)g(\223)p Fk(.)p Fq(\224)h(is)f(dis-)144 2947
+y(allowed)g(in)h(r)n(estricted)d(mode)h(\(default)i(for)f(r)n(eading)f
+(\002les\).)42 b(In)26 b(paranoid)h(mode,)g(\002le)h(access)f(is)144
+3060 y(even)d(mor)n(e)f(r)n(estricted)g(and)h(you)f(cannot)h(access)g
+(\002les)g(outside)e(the)h(curr)n(ent)h(dir)n(ectory)f(tr)n(ee)g(\(de-)
+144 3173 y(fault)30 b(for)f(writing)g(\002les\).)47 b(If)30
+b(the)e(\002rst)g(line)i(of)f(a)h(document)e(starts)g(with)h
+Fk(\045&)p Fq(,)h(it)f(can)h(be)g(used)d(to)144 3285
+y(pass)20 b(the)h(name)g(of)g(the)f(format)i(\002le)f(and/or)g(a)g(TCX)
+g(\002le.)28 b(Parsing)21 b(the)f(\002rst)g(line,)i(is)f(an)g
+(extension)144 3398 y(that)h(can)i(be)e(turned)g(on)g(or)g(of)n(f)h
+(\(default)g(is)g(of)n(f\))g(in)g(the)f Fk(texmf.cnf)f
+Fq(\002le.)144 3653 y Fn(2.5)99 b(Using)25 b(Postscript)h(type)g(1)e
+(fonts)144 3830 y Fq(For)j(every)g(font)g(you)g(use)g(with)h(T)1353
+3851 y(E)1397 3830 y(X,)g(a)g(TFM)g(\(T)1874 3851 y(E)1918
+3830 y(X)f(font)h(metric\))g(\002le)g(is)g(needed.)41
+b(T)-8 b(ype)26 b(1)j(fonts)144 3943 y(usually)19 b(do)e(not)h(have)h
+(the)e(same)h(encoding)g(that)g(is)g(used)f(by)h(T)2337
+3964 y(E)2381 3943 y(X,)h(so)e(additional)i(metrics)f(that)g(do)144
+4056 y(some)26 b(r)n(e-encoding)h(\(virtual)i(font)d(\002les\))i(ar)n
+(e)f(often)g(needed.)39 b(For)27 b(a)g(lot)h(of)f(font)g(families,)i
+(these)144 4169 y(font)h(metric)h(\002les)f(and)h(additional)g(map)g
+(\002les)g(that)f(you)g(need)f(\(see)g(below\))i(can)h(be)e(found)g(on)
+144 4282 y(CT)-7 b(AN)26 b(servers)e(in)i(the)f(dir)n(ectory)f
+Fk(fonts)p Fq(.)36 b(If)25 b(support)f(for)h(your)g(fonts)g(cannot)g
+(be)h(found)f(ther)n(e,)144 4395 y(you)d(can)h(use)f(the)g
+Fk(fontinst)e Fq(utility)j(\(documentation:)k Fk(texdoc)46
+b(fontinst)n Fq(\))23 b(to)f(cr)n(eate)g(these.)285 4507
+y(Postscript)29 b(type)f(1)j(fonts)e(can)i(be)f(used)f(by)h
+Fk(dvips)p Fq(,)g Fk(dvipdfm)p Fq(,)g Fk(xdvi)p Fq(,)h
+Fk(gsftopk)p Fq(,)f Fk(ps2pk)g Fq(and)144 4620 y(pdfT)326
+4642 y(E)369 4620 y(X.)f(All)24 b(of)f(these)e(pr)n(ograms)h(r)n(equir)
+n(e)h(that)g(you)f(set)g(up)g(map)i(\002les)e(for)h(these)e(fonts.)28
+b(T)-8 b(o)22 b(ease)144 4733 y(the)27 b(pr)n(ocess)e(of)j(adding)e
+(map)i(\002le)f(entries)f(to)h(the)f(con\002guration)h(\002les)g(that)g
+(ar)n(e)g(used)f(by)h(these)144 4846 y(tools,)21 b(you)h(should)g
+(follow)h(the)f(following)h(steps:)1858 5443 y(9)p eop
+end
+%%Page: 10 10
+TeXDict begin 10 9 bop 280 193 a Fm(\017)46 b Fq(if)19
+b(your)e(fonts)g(alr)n(eady)h(come)g(with)g(a)g(map)h(\002le,)f(put)g
+(that)f(\002le)h(into)g(the)f Fk(fonts/map/dvips/)371
+306 y(misc)22 b Fq(dir)n(ectory)g(in)h(the)f(main)h(texmf)g(tr)n(ee.)
+280 481 y Fm(\017)46 b Fq(otherwise,)34 b(you)f(will)i(need)d(to)g(cr)n
+(eate)i(a)g(map)g(\002le)f(yourself,)i(using)e(the)f(syntax)h(as)g(de-)
+371 594 y(scribed)c(in)g(the)f(dvips)g(manual)i(\()p
+Fk(texdoc)46 b(dvips)o Fq(\);)32 b(make)c(sur)n(e)g(to)g(set)g(up)g
+(these)f(fonts)h(as)371 707 y(\223download)23 b(fonts\224,)e(not)h(as)h
+(\223built)h(in\224)f(fonts.)280 882 y Fm(\017)46 b Fq(r)o(un)24
+b(the)f(command)h Fk(texhash)e Fq(and)h(then)g(make)h(the)e(map)j
+(\002le)e(known)g(to)g Fk(updmap)f Fq(by)h(r)o(un-)371
+995 y(ning)32 b(the)f(command)h Fk(updmap)56 b(--enable)f(Map)i
+(file.map)30 b Fq(\(wher)n(e)h Fk(file.map)e Fq(denotes)371
+1108 y(the)22 b(\002lename)h(of)g(your)e(map)i(\002le\))285
+1264 y(The)h(pr)n(ograms)f Fk(gsftopk)f Fq(and)i Fk(ps2pk)f
+Fq(convert)h(Postscript)e(type)h(1)i(fonts)e(into)h(bitmap)h(fonts)144
+1377 y(and)i(make)f(these)f(fonts)g(accessible)i(to)f(DVI)g(drivers)g
+(that)g(do)g(not)g(dir)n(ectly)g(support)e(Postscript)144
+1490 y(type)33 b(1)i(fonts.)62 b(This)34 b(conversion)g(is)g
+(automatically)i(invoked)e(by)g(the)g Fk(mktexpk)e Fq(script.)63
+b(That)144 1602 y(script)24 b(calls)j Fk(gsftopk)c Fq(by)h(default.)34
+b(If)25 b(you)f(do)g(not)g(have)h(installed)g(the)f Fk(ghostscript)e
+Fq(pr)n(ogram)144 1715 y(\(which)29 b Fk(gsftopk)d Fq(needs\),)h(or)g
+(if)i(you)e(want)h(to)f(use)g Fk(ps2pk)f Fq(for)i(other)e(r)n(easons)h
+(\(e.g.,)h(because)f(it)144 1828 y(is)e(usually)g(faster\))g(you)f
+(just)g(need)g(to)g(de\002ne)f(the)i(variable)i Fk(ps_to_pk)22
+b Fq(to)j Fk(ps2pk)p Fq(.)33 b(This)25 b(variable)144
+1941 y(can)f(be)e(set)g(in)h(your)e(envir)n(onment)h(or)h(in)g(the)f
+Fk(mktex.cnf)e Fq(\002le)j(\(see)e(below\).)144 2190
+y Fn(2.6)99 b(Con\002guration)26 b(\002les)f(maintained)f(by)h
+(texcon\002g)144 2366 y Fq(The)33 b Fk(texconfig)e Fq(utility)j(is)f(a)
+h(user)e(interface)h(for)g(changing)h(the)e(con\002guration)g(of)i(the)
+e(teT)3513 2388 y(E)3556 2366 y(X)144 2479 y(system.)f(The)23
+b(con\002guration)h(is)g(stor)n(ed)f(in)i(several)f(individual)i
+(\002les.)32 b(This)24 b(section)f(documents)144 2592
+y(the)f(names)g(of)g(these)f(\002les,)h(their)g(location)h(in)g(the)e
+(texmf)h(tr)n(ee)g(and)g(their)g(content.)27 b(This)22
+b(explains)144 2705 y(how)30 b Fk(texconfig)f Fq(works)g(and)i(enables)
+f(you)f(to)h(manually)i(con\002gur)n(e)e(parameters)f(which)i(ar)n(e)
+144 2818 y(not)22 b(supported)e(by)i Fk(texconfig)p Fq(.)280
+2993 y Fm(\017)46 b Fk(dvips/config/config.ps)30 b Fq(stor)n(es)k
+(con\002guration)g(information)i(for)g Fk(dvips)p Fq(.)64
+b(The)35 b(de-)371 3106 y(fault)26 b(values)f(ar)n(e:)33
+b(600)17 b(dpi)25 b(r)n(esolution;)g(ljfour)g Fl(MET)n(AF)l(ONT)f
+Fq(mode;)h(A4)g(paper;)g(of)n(fset)g(for)371 3219 y(printing:)j
+(0pt,0pt;)21 b(output)g(goes)g(to)h Fk(lpr)g Fq(command.)280
+3394 y Fm(\017)46 b Fk(tex/generic/config/pdftexc)o(onf)o(ig.t)o(ex)17
+b Fq(This)24 b(\002le)f(sets)f(some)h(defaults)g(for)g(pdfT)3490
+3415 y(E)3533 3394 y(X,)371 3507 y(e.g.)d(the)h(default)g(paper)f
+(size.)27 b(This)21 b(information)h(is)f(dumped)f(into)h(format)g
+(\002les,)g(so)g(if)h(you)371 3620 y(modify)g(this)f(\002le)h(dir)n
+(ectly)g(\(without)f(using)g(texcon\002g\),)g(you)g(have)h(to)f(r)n
+(ebuild)h(the)f(format)371 3732 y(\002les)i(by)f(using)g(the)g(command)
+h Fk(fmtutil)46 b(--all)p Fq(.)280 3908 y Fm(\017)g Fk(xdvi/XDvi)21
+b Fq(This)i(\002le)g(sets)e(some)h(defaults)g(\(e.g.)28
+b(media)c(size,)e(metafont)h(mode\))f(for)h Fk(xdvi)p
+Fq(.)371 4020 y(It)34 b(is)g(r)n(ead)h(via)g(the)f(app-default)g
+(mechanism)h(of)f(X11.)64 b(Y)-8 b(ou)33 b(can)i(override)e(these)g
+(app-)371 4133 y(defaults)18 b(as)g(usual)h(\(i.e.)f(via)h(a)g(\002le)f
+Fk(~/.Xdefaults)e Fq(or)h(with)i(r)n(esour)n(ces)d(managed)i(by)h
+Fk(xrdb)p Fq(\).)280 4308 y Fm(\017)46 b Fk(dvipdfm/config)22
+b Fq(de\002nes)h(the)h(defaults)g(for)h Fk(dvipdfm)p
+Fq(,)e(e.g.)h(the)g(default)h(paper)f(size,)h(the)371
+4421 y(command)f(to)e(convert)g(encapsulated)f(postscript)g(graphics)i
+(into)f(PDF)g(etc.)280 4596 y Fm(\017)46 b Fk(web2c/mktex.cnf)18
+b Fq(This)k(\002le)g(sets)e(the)h(default)h(metafont)f(mode)g(used)f
+(for)i(automatically)371 4709 y(generated)29 b(bitmap)k(fonts,)f(the)e
+(r)n(esolution)h(which)h(is)f(used)f(in)i(scripts)e(\(e.g.)53
+b Fk(mktextfm)p Fq(\))371 4822 y(and)28 b(a)h(list)f(of)g(\223featur)n
+(es\224)g(used)f(for)h(automatic)g(font)g(generation.)43
+b(The)27 b(most)g(important)371 4935 y(\223featur)n(es\224)j(ar)n(e)f
+(described)f(below;)k(for)e(a)f(full)i(list,)f(see)e(section)h(2.2.9.1)
+h(of)f(the)g(kpathsea)371 5048 y(manual)24 b(\()p Fk(texdoc)47
+b(kpathsea)p Fq(\).)1835 5443 y(10)p eop end
+%%Page: 11 11
+TeXDict begin 11 10 bop 371 193 a Fo(appendonlydir)44
+b Fq(Set)18 b(the)g(sticky)g(bit)h(on)g(dir)n(ectories)f(that)g(have)h
+(to)g(be)f(cr)n(eated.)26 b(The)18 b(sticky)571 306 y(bit)29
+b(has)g(the)e(ef)n(fect)i(that)f(a)h(\002le)g(in)g(such)f(a)h(dir)n
+(ectory)e(can)j(only)e(be)g(r)n(emoved)g(by)g(the)571
+419 y(owner)22 b(of)h(that)f(dir)n(ectory)g(or)g(by)g(the)g(owner)g(of)
+g(that)h(\002le.)371 565 y Fo(varfonts)46 b Fq(When)28
+b(this)g(option)g(is)g(enabled,)i(fonts)e(that)g(would)g(otherwise)e
+(be)j(written)e(to)571 678 y(some)k(texmf)g(tr)n(ee)f(go)g(below)i(the)
+e Fk(VARTEXFONTS)e Fq(dir)n(ectory)j(instead.)52 b(The)31
+b(default)571 791 y(value)f(is)g(in)g Fk(/var/tmp/texfonts)p
+Fq(.)43 b(The)28 b(\223Linux)i(File)f(System)f(Standar)n(d\224)h(r)n
+(ecom-)571 904 y(mends)18 b Fk(/var/tex/fonts)p Fq(.)23
+b(The)18 b Fk(varfonts)e Fq(setting)h(in)j Fk(MT_FEATURES)15
+b Fq(is)k(overridden)571 1016 y(by)27 b(the)f(envir)n(onment)g
+(variable)j Fk(USE_VARTEXFONTS)p Fq(:)22 b(if)27 b(set)f(to)g(1,)i(the)
+e(featur)n(e)g(is)h(en-)571 1129 y(abled,)c(and)g(if)g(set)f(to)g(0,)h
+(the)e(featur)n(e)i(is)f(disabled.)371 1276 y Fo(texmfvar)48
+b Fq(For)n(ce)30 b(generated)e(\002les)j(that)f(would)h(go)f(into)g(a)i
+(system)d(tr)n(ee)h(\(as)h(de\002ned)e(by)571 1388 y
+Fk(SYSTEXMF)p Fq(\))23 b(into)h Fk(TEXMFVAR)p Fq(.)e(The)h
+Fk(varfonts)f Fq(featur)n(e)i(takes)f(pr)n(ecedence)g(if)i(also)f(set.)
+571 1501 y(A)i(user)f(can)i(override)e(this)h(setting)e(in)i(either)g
+(dir)n(ection)g(by)f(setting)g Fk(USE_TEXMFVAR)571 1614
+y Fq(to)d(1)i(or)e(0.)280 1802 y Fm(\017)46 b Fk(web2c/updmap.cfg)33
+b Fq(contr)n(ols)k(how)g Fk(updmap)f Fq(generates)f(map)j(\002les)f
+(for)g(all)i(supported)371 1915 y(tools.)27 b(Besides)21
+b(some)g(general)h(parameters,)g(all)i(active)f(map)h(\002les)e(ar)n(e)
+h(listed)f(her)n(e.)280 2102 y Fm(\017)46 b Fk(web2c/fmtutil.cnf)23
+b Fq(This)28 b(\002le)g(de\002nes)d(which)k(format)f(\002les)f(ar)n(e)h
+(built)g(\(and)g(how\))g(and)371 2215 y(which)22 b(\002le)f(can)h(be)f
+(used)f(to)g(customize)h(the)f(hyphenation)g(patterns)f(that)i(ar)n(e)h
+(loaded)e(into)371 2328 y(these)33 b(formats.)63 b(The)34
+b(pr)n(ograms)g Fk(fmtutil)f Fq(and)h Fk(texlinks)f Fq(\(which)i(ar)n
+(e)g(automatically)371 2441 y(called)30 b(if)f(the)e(formats)h(ar)n(e)h
+(set)e(up)h(via)i Fk(texconfig)p Fq(\))c(operate)h(on)g(this)h(\002le.)
+45 b Fk(fmtutil)27 b Fq(can)371 2554 y(be)22 b(used)e(to)h(cr)n(eate)g
+(the)g(format)h(\002les)f(accor)n(ding)h(to)f(the)g(\223r)o(ules\224)h
+(de\002ned)e(in)i Fk(fmtutil.cnf)371 2667 y Fq(\(for)33
+b(a)g(brief)g(description,)h(just)e(call)i Fk(fmtutil)57
+b(--help)p Fq(\).)g(If)32 b(you)g(de\002ne)f(a)i(new)f(format)371
+2780 y(\002le,)i(you)c(usually)i(also)f(need)f(a)i(symbolic)g(link)g
+(with)f(the)g(name)g(for)h(the)e(format)i(to)e(the)371
+2893 y(appr)n(opriate)20 b(T)907 2914 y(E)951 2893 y(X)g(engine)f
+(\(e.g.,)h Fk(latex)f Fh(!)h Fk(pdfetex)p Fq(\).)26 b(T)-8
+b(o)19 b(cr)n(eate)h(these)f(links,)i(just)e(call)j(the)371
+3006 y Fk(texlinks)f Fq(script.)280 3193 y Fm(\017)46
+b Fq(hyphenation)28 b(setup)g(\002les)g(as)i(de\002ned)d(in)j
+Fk(web2c/fmtutil.cnf)p Fq(:)36 b(the)28 b(thir)n(d)h(\002eld)g(of)g
+(the)371 3306 y(\002le)20 b Fk(fmtutil.cnf)e Fq(de\002nes)g(names)h(of)
+h(\002les)g(which)h(can)f(be)g(edited)f(to)g(customize)h(hyphen-)371
+3419 y(ation)28 b(\(for)g(the)f(format)h(which)g(is)g(named)g(in)g(the)
+f(\002rst)g(\002eld\).)43 b(Since)28 b Fk(fmtutil.cnf)d
+Fq(itself)371 3532 y(is)h(a)g(con\002guration)e(\002le,)i(the)f(list)g
+(of)h(\002les)f(in)g(the)g(thir)n(d)g(\002eld)g(might)g(vary)-10
+b(.)37 b(T)-8 b(able)25 b(2)h(shows)371 3645 y(the)32
+b(names)g(of)g(the)g(\002les)g(used)f(in)i(the)e(default)h
+(con\002guration.)57 b(Additional)32 b(\002les)g(\(used)p
+736 3777 2289 8 v 786 3872 a(\002le)23 b(name)1209 b(used)21
+b(by)i(format)p 736 3926 2289 5 v 786 4031 a Fk
+(tex/context/config/cont-)o(usr)o(.tex)93 b Fq(cont-en)786
+4144 y Fk(tex/generic/config/langu)o(age)o(.dat)g Fq(latex,)22
+b(pd\003atex)786 4256 y Fk(tex/lambda/config/langua)o(ge.)o(dat)141
+b Fq(lambda,)24 b(lamed)786 4369 y Fk(tex/plain/config/languag)o(e.d)o
+(ef)189 b Fq(etex,)21 b(pdfetex)p 736 4426 2289 8 v 1083
+4583 a(T)-8 b(able)23 b(2:)28 b(\002les)22 b(for)h(setting)e(up)h
+(hyphenation)371 4796 y(by)32 b(formats)g(that)f(ar)n(e)h(disabled)g
+(in)g(the)f(default)h(con\002guration\))f(ar)n(e:)46
+b Fk(platex/config/)371 4909 y(language.dat)20 b Fq(and)i
+Fk(mex/config/mexconf.tex)p Fq(.)1835 5443 y(11)p eop
+end
+%%Page: 12 12
+TeXDict begin 12 11 bop 144 193 a Fn(2.7)99 b(Automatic)25
+b(font)g(generation)144 370 y Fq(By)c(setting)g(various)h(\223featur)n
+(es\224)g(\(see)f(2.6\))i(the)e(automatic)i(font)e(generation)g(can)h
+(be)g(customized)144 483 y(in)32 b(many)h(ways.)55 b(The)31
+b(tool)g Fk(texconfig)f Fq(of)n(fers)h(support)f(in)j(con\002guring)e
+(and)h(setting)e(up)h(the)144 596 y(dir)n(ectories)22
+b(wher)n(e)g(automatically)i(generated)c(fonts)i(end)g(up.)285
+708 y(In)31 b(the)g(default)g(con\002guration)g(of)g(teT)1676
+730 y(E)1719 708 y(X,)i(all)g(automatically)g(generated)c(fonts)i(end)f
+(up)h(in)144 821 y(the)c(dir)n(ectory)g(tr)n(ee)g(which)i(is)f
+(speci\002ed)f(by)g(the)h Fk(VARTEXFONTS)d Fq(variable.)45
+b(The)28 b(command)g(line)144 934 y(mode)e(of)h Fk(texconfig)e
+Fq(\()p Ff(not)j Fq(the)e(interactive)h(mode\))g(allows)g(you)f(to)h
+(manipulate)h(the)e(path)h(and)144 1047 y(the)22 b(permissions)g(of)h
+(this)g(dir)n(ectory)f(tr)n(ee)g(and)h(also)h(adjusts)e(the)g
+(\223featur)n(es\224)h(for)g(automatic)h(font)144 1160
+y(generation)d(to)h(match)i(the)e(chosen)f(dir)n(ectory)h(permissions:)
+144 1373 y Fo(texcon\002g)h(font)f(vardir)h(DIR)45 b
+Fq(This)31 b(changes)g(the)g(path)g(which)g(is)h(stor)n(ed)d(in)j(the)f
+Fk(VARTEXFONTS)371 1486 y Fq(variable)26 b(to)e Fk(DIR)p
+Fq(.)f(Y)-8 b(ou)22 b(must)i(have)g(write)g(permissions)e(to)h(the)h
+(main)h Fk(texmf.cnf)c Fq(\002le,)j(be-)371 1598 y(cause)f(the)f
+(variable)i(is)f(stor)n(ed)e(ther)n(e.)144 1786 y Fo(texcon\002g)i
+(font)f(rw)46 b Fq(This)16 b(makes)h(the)g Fk(VARTEXFONTS)d
+Fq(dir)n(ectory)i(\(and)i(subtr)n(ees)d Fk(pk)p Fq(,)j
+Fk(tfm)p Fq(,)f Fk(source)p Fq(\))371 1899 y(world)i(writable)i(and)e
+(sets)f(the)h(\223featur)n(es\224)h Fk(appendonlydir)c
+Fq(and)k Fk(varfonts)d Fq(in)j(the)f(con\002g)371 2012
+y(\002le)37 b Fk(mktex.cnf)p Fq(.)66 b(T)-8 b(o)35 b(change)h(the)g
+(global)h Fk(mktex.cnf)d Fq(\002le)i(\(instead)g(of)g(modifying)g(an)
+371 2125 y(individual)25 b(copy\),)c(use)h Fk(texconfig-sys)d
+Fq(instead)j(of)h Fk(texconfig)p Fq(.)144 2312 y Fo(texcon\002g)g(font)
+f(ro)45 b Fq(This)20 b(makes)g(the)f Fk(VARTEXFONTS)e
+Fq(dir)n(ectory)j(\(and)g(subtr)n(ees)e Fk(pk)p Fq(,)i
+Fk(tfm)p Fq(,)g Fk(source)p Fq(\))371 2425 y(writable)34
+b(for)f(the)f(owner)g(only)h(and)g(sets)e(the)h(\223featur)n(es\224)h
+Fk(texmfvar)e Fq(in)j(the)e(con\002g)h(\002le)371 2538
+y Fk(mktex.cnf)p Fq(.)25 b(T)-8 b(o)20 b(change)g(the)f(global)j
+Fk(mktex.cnf)c Fq(\002le)i(\(instead)g(of)h(modifying)f(an)h(individ-)
+371 2651 y(ual)j(copy\),)e(use)f Fk(texconfig-sys)f Fq(instead)h(of)i
+Fk(texconfig)p Fq(.)285 2864 y(The)f(assumption)f(behind)h(the)f
+(manipulations)i(of)f Fk(texconfig)e Fq(is)i(that)g(you)f(set)g(up)h(a)
+h(world-)144 2977 y(writable)33 b Fk(VARTEXFONTS)c Fq(tr)n(ee)i(if)i
+(you)f(want)g(all)i(generated)29 b(fonts)j(\(by)g(all)i(users\))d(to)g
+(be)h(stor)n(ed)144 3090 y(ther)n(e.)25 b(If)19 b(you)e(set)g(the)h
+(global)h Fk(VARTEXFONTS)d Fq(tr)n(ee)h(to)h(r)n(ead-only)-10
+b(,)18 b(then)g(the)f Fk(texmfvar)g Fq(is)h(activated)144
+3202 y(which)33 b(r)n(esults)f(in)h(a)h(user)n(-speci\002c)e(default)g
+(destination)g(for)h(automatically)h(generated)d(fonts)144
+3315 y(\()p Fk($TEXMFVAR/fonts)p Fq(\).)144 3570 y Fn(2.8)99
+b(TCX)26 b(\002les)144 3747 y Fq(TCX)21 b(\(T)417 3768
+y(E)461 3747 y(X)f(character)i(translation\))f(\002les)g(help)f(T)1841
+3768 y(E)1885 3747 y(X)g(support)f(dir)n(ect)i(input)f(of)h(8-bit)h
+(international)144 3860 y(characters)g(if)h(fonts)e(containing)h(those)
+e(characters)i(ar)n(e)h(being)e(used.)26 b(Speci\002cally)-10
+b(,)23 b(they)e(map)h(an)144 3973 y(input)c(\(keyboar)n(d\))g
+(character)h(code)e(to)h(the)g(internal)h(T)2051 3994
+y(E)2094 3973 y(X)f(character)h(code)f(\(a)h(superset)d(of)i(ASCII\).)
+285 4086 y(teT)400 4107 y(E)443 4086 y(X)j(has)f(the)g(TCX)h(\002les)g
+Fk(il1-t1.tcx)d Fq(and)j Fk(il2-t1.tcx)d Fq(which)j(support)e(ISO)h
+(Latin)h(1)h(and)144 4199 y(ISO)k(Latin)g(2,)g(r)n(espectively)-10
+b(,)26 b(with)f(Cork-encoded)f(fonts)h(\(a.k.a.:)34 b(the)25
+b(T1)h(encoding\).)36 b(TCX)26 b(\002les)144 4312 y(for)d(Czech,)g
+(Polish,)f(and)h(Slovak)g(ar)n(e)g(also)g(pr)n(ovided.)285
+4425 y(All)j(TCX)e(\002les)g(that)h(ar)n(e)g(distributed)e(as)h(part)h
+(of)f(teT)2147 4446 y(E)2190 4425 y(X)h(can)g(be)g(found)f(in)h(the)e
+(web2c)j(subdi-)144 4537 y(r)n(ectory)c(of)g(the)g(main)i(texmf)e(tr)n
+(ee;)g(their)g(\002le)h(name)g(extension)d(is)j Fk(.tcx)p
+Fq(.)285 4650 y(Y)-8 b(ou)33 b(can)i(specify)f(a)h(TCX)f(\002le)g(to)g
+(be)g(used)f(for)h(a)g(particular)i(T)2591 4672 y(E)2635
+4650 y(X)e(r)o(un)g(by)g(specifying)f(the)144 4763 y(command-line)19
+b(option)e Fk(-translate-file=)p Fc(tcxfile)12 b Fq(or)17
+b(\(pr)n(eferably\))h(specifying)f(it)h(explicitly)144
+4876 y(in)28 b(the)e(\002rst)g(line)h(of)h(the)e(main)i(document)e
+Fk(\045&)47 b(-translate-file=)p Fc(tcxfile)-6 b Fq(.)42
+b(Note,)26 b(however)-7 b(,)144 4989 y(that)23 b(parsing)f(the)g
+(\002rst)g(line)h(of)f(an)i(input)e(\002le)h(in)g(an)g(extension)e
+(that)h(is)h(disabled)g(by)f(default)h(and)1835 5443
+y(12)p eop end
+%%Page: 13 13
+TeXDict begin 13 12 bop 144 193 a Fq(has)20 b(to)e(be)i(turned)e(on)h
+(via)i(command)f(line)g(switch)f(\()p Fk(-parse-first-line)p
+Fq(\))c(or)k(in)h(the)f Fk(texmf.cnf)144 306 y Fq(\002le)k(\(see)e
+(section)h(2.4\).)285 419 y(When)31 b(pr)n(ocessing)g(a)h(document)f
+(using)g(a)i(TCX)e(\002le,)j(you)d(usually)h(must)f(not)h(use)e(L)3369
+402 y Fr(A)3407 419 y Fq(T)3448 440 y(E)3492 419 y(X's)144
+532 y Fk(inputenc)c Fq(package.)42 b(One)28 b(exception)e(to)h(this)g
+(r)o(ule)h(ar)n(e)g(TCX)g(\002les)f(that)g(map)h(all)h(characters)f(to)
+144 645 y(their)c(original)i(position)d(such)i(as)f Fk(cp8bit.tcx)p
+Fq(,)e Fk(cp227.tcx)h Fq(and)h Fk(natural.tcx)p Fq(.)31
+b(The)24 b(purpose)144 757 y(of)f(these)e(TCX)h(\002les)g(is)h(to)f
+(manipulate)i(the)d(\223printability\224)k(attribute)d(in)h(T)2768
+779 y(E)2812 757 y(X's)f(internal)h(tables.)144 1012
+y Fn(2.9)99 b(Creating)25 b(PDF)g(\002les)144 1189 y
+Fq(If)h(you)f(want)h(to)g(cr)n(eate)g(PDF)g(documents)f(with)h(the)f
+(help)h(of)g(T)2399 1210 y(E)2443 1189 y(X,)g(ther)n(e)f(ar)n(e)i(at)f
+(least)g(thr)n(ee)f(dif-)144 1302 y(fer)n(ent)d(ways)g(to)g(do)g(this)
+258 1487 y(1.)45 b(translate)23 b(your)e(T)996 1508 y(E)1040
+1487 y(X)h(sour)n(ces)g(dir)n(ectly)g(into)h(PDF)f(by)h(using)f(pdfT)
+2707 1508 y(E)2750 1487 y(X.)258 1674 y(2.)45 b(translate)18
+b(DVI)h(\002les)f(generated)e(by)i(T)1684 1695 y(E)1728
+1674 y(X)g(into)g(PDF)h(by)f(using)g(the)f Fk(dvipdfm)i
+Fq(pr)n(ogram)f(\(now)371 1787 y(included)23 b(in)g(teT)967
+1808 y(E)1010 1787 y(X\).)258 1973 y(3.)45 b(translate)28
+b(a)g(Postscript)e(\002le)i(generated)d(by)j(T)1997 1995
+y(E)2041 1973 y(X)f(and)h Fk(dvips)e Fq(into)i(PDF)f(by)h(using)f
+(Adobe)371 2086 y(Acr)n(obat)c(or)g(the)f Fk(ps2pdf)f
+Fq(utility)h(included)h(in)g(ghostscript.)144 2272 y(When)k(using)h
+Fk(ps2pdf)p Fq(,)f(you)g(should)g(make)h(sur)n(e)f(to)h(use)f(at)h
+(least)f(version)h(6.50)h(of)f(ghostscript.)144 2384
+y(Earlier)23 b(versions)f(ar)n(e)h(known)e(to)h(have)h(serious)e(r)n
+(estrictions)h(on)g(cr)n(eating)h(PDF)g(output.)285 2497
+y(No)18 b(matter)g(which)h(appr)n(oach)f(you)g(use,)g(ther)n(e)f(is)i
+(one)e(common)i(r)o(ule)f(when)g(cr)n(eating)g(quality)144
+2610 y(PDF)g(\002les:)25 b(you)16 b(should)h(avoid)h(bitmap)h(fonts.)25
+b(They)16 b(just)h(display)h(very)f(poorly)f(on)h(scr)n(een)g(when)144
+2723 y(used)23 b(in)h(PDF)g(documents)f(\(which)i(is)f(caused)f(by)h
+(poor)f(bitmap)i(r)n(endering)e(of)h(Adobe)f(Acr)n(obat)144
+2836 y(Reader)f(in)h(all)h(versions)d(up)i(to)f(5.x\).)285
+2949 y(Using)k(only)h(the)f(fonts)g(pr)n(ovided)g(by)h(teT)1780
+2970 y(E)1823 2949 y(X,)h(you)e(have)h(mor)n(e)g(choices)g(for)g(which)
+g(fonts)f(to)144 3062 y(use.)h(The)22 b(following)h(typeface)e
+(families)k(ar)n(e)e(included)f(in)h(Postscript)e(type)g(1)i(format:)
+280 3247 y Fm(\017)46 b Fq(Computer)22 b(Modern)g(and)g(the)h(AMS)f
+(fonts)g(\(extended)e(versions)i(with)h(polish,)f(czech)i(and)371
+3360 y(slovak)36 b(and)g(r)o(ussian)g(letters)e(ar)n(e)i(available,)42
+b(too\);)f(a)36 b(special)h(extension)d(to)h(Computer)371
+3473 y(Modern)17 b(pr)n(oviding)i(lots)f(of)g(additional)h(characters)g
+(\(most,)f(but)g(not)g(exclusively)g(accents\))371 3586
+y(ar)n(e)23 b(the)f(Latin)h(Modern)e(fonts)280 3773 y
+Fm(\017)46 b Fq(the)31 b(full)i(set)e(of)g(the)g(35)i(basic)g
+(\223LaserW)-7 b(riter)31 b(fonts\224)g(\(see)f(psnfss)h
+(documentation,)h(sup-)371 3886 y(porting)22 b(other)f(fonts)h(ar)n(e)h
+(pazo,)g(tx/px)e(fonts\))280 4072 y Fm(\017)46 b Fq(Bitstr)n(eam)22
+b(Charter)285 4258 y(The)k(EC)g(fonts)f(ar)n(e)i(not)f(included)g(in)g
+(type)f(1)i(format)f(in)h(teT)2428 4279 y(E)2471 4258
+y(X.)38 b(If)27 b(you)e(have)i(a)f(L)3176 4241 y Fr(A)3214
+4258 y Fq(T)3255 4279 y(E)3299 4258 y(X)g(docu-)144 4371
+y(ment)h(that)g(uses)g(EC)g(fonts,)h(you)f(have)h(at)f(least)h(two)e
+(ways)i(to)e(get)h(ar)n(ound)g(this)g(pr)n(oblem.)43
+b(The)144 4483 y(\002rst)30 b(is)h(to)f(stop)g(using)g(EC)h
+(fonts\227which)f(can)i(in)f(most)f(cases)h(be)f(done)g(by)h(switching)
+f(to)g(the)144 4596 y(Latin)20 b(Modern)e(fonts.)26 b(Usually)-10
+b(,)20 b(the)f(EC)h(fonts)e(ar)n(e)i(activated)h(by)e
+Fk(\\usepackage[T1]{fontenc})144 4709 y Fq(or)k Fk(\\usepackage{t1enc})
+18 b Fq(and)23 b(you)e(just)i(have)g(to)f(add)h Fk
+(\\usepackage{lmodern})p Fq(.)g(The)f(second)144 4822
+y(is)31 b(to)f(use)f(the)h(CM-SUPER)g(T)-8 b(ype)29 b(1)i(fonts,)g(not)
+f(included)g(in)h(teT)2508 4844 y(E)2551 4822 y(X,)h(but)e(available)k
+(on)c(CT)-7 b(AN)144 4935 y(servers)22 b(in)i(the)f(dir)n(ectory)f
+Fk(fonts/ps-type1/cm-super)p Fq(.)i(This)f(package)g(is)h(pr)n(etty)e
+(huge,)g(but)h(it)144 5048 y(contains)g(all)h(EC)f(fonts)e(in)i
+(outline)g(format)f(and)h(much)g(mor)n(e.)1835 5443 y(13)p
+eop end
+%%Page: 14 14
+TeXDict begin 14 13 bop 285 193 a Fq(If)31 b(the)f(Latin)g(Modern)g
+(solution)g(works)f(for)h(you,)i(this)e(is)h(the)f(r)n(ecommended)f
+(one)h(for)g(the)144 306 y(following)23 b(r)n(easons:)280
+493 y Fm(\017)46 b Fq(quality:)40 b(the)28 b(Latin)g(Modern)f(fonts)h
+(have)h(been)e(cr)n(eated)h(by)h(using)e(a)i(better)e(technology)371
+606 y(and)g(they)e(have)h(been)g(car)n(efully)i(hand-optimized)e
+(\(hinting,)h(kerning,)f(accent)g(position-)371 719 y(ing)d(etc.\))280
+907 y Fm(\017)46 b Fq(the)22 b(Latin)h(Modern)e(fonts)h(ar)n(e)h(alr)n
+(eady)g(included)f(in)h(teT)2388 928 y(E)2431 907 y(X)280
+1095 y Fm(\017)46 b Fq(the)22 b(r)n(esulting)g(\002les)g(ar)n(e)h
+(usually)g(much)g(smaller)144 1393 y Fp(3)119 b(Release)30
+b(notes)g(for)f(teT)1443 1421 y(E)1501 1393 y(X)g(2.0)144
+1604 y Fq(Some)e(default)h(settings)e(of)j(\223)p Fk(tex)p
+Fq(,)f(the)g(W)-8 b(eb2C)28 b(implementation)g(of)g(T)2682
+1625 y(E)2726 1604 y(X\224)g(have)h(changed.)43 b(W)-8
+b(e)144 1717 y(determined)18 b(that)i(some)f(extensions)f(wer)n(e)h(in)
+i(fact)g(in)f(con\003ict)h(with)f(the)f(strict)h(de\002nition)f(of)h(T)
+-8 b(eX)144 1830 y(as)23 b(laid)g(down)f(by)h(Knuth.)285
+1943 y(The)g(most)f(notable)i(change)f(is)g(that)g(parsing)g(of)g
+Fk(\045&)g Fq(constr)o(ucts)f(in)i(the)f(\002rst)f(line)i(of)f(an)h
+(input)144 2056 y(\002le)29 b(is)g(now)f(disabled)h(by)f(default)h
+(\226)g(it)g(can)g(be)g(enabled)g(in)g Fk(texmf.cnf)d
+Fq(if)k(you)e(desir)n(e)f(this.)46 b(In)144 2169 y(that)23
+b(case,)g(tex)f(will)i(announce)f(itself)g(as)g(\223T)-8
+b(eXk\224)22 b(and)h(print)g(an)h(additional)f(banner)h(line)f(saying)
+144 2282 y(that)f Fk(\045&)p Fq(-line)h(parsing)f(is)h(enabled.)285
+2395 y(W)-8 b(e)27 b(may)h(encounter)e(mor)n(e)i(places)g(wher)n(e)f
+(the)g(default)g(behaviour)h(is)g(not)f(what)h(it)g(should)144
+2507 y(be,)22 b(and)h(pr)n(oceed)e(to)g(make)i(this)f(optional)g(\(and)
+g(by)h(default)f(of)n(f\))h(in)g(futur)n(e)f(versions)f(of)i(W)-8
+b(eb2C.)144 2806 y Fp(4)119 b(Release)30 b(notes)g(for)f(teT)1443
+2834 y(E)1501 2806 y(X)g(3.0)144 3017 y Fq(This)22 b(section)g
+(brie\003y)h(describes)e(what)i(has)g(changed)f(since)g(the)g(last)h
+(major)g(r)n(elease.)144 3272 y Fn(4.1)99 b(New)25 b(programs)g(/)g
+(font)g(support)g(/)h(macro)e(packages)144 3449 y Fq(T)-8
+b(wo)30 b(pr)n(ograms)g(\(see)f(section)h(1\))h(have)g(been)f(added)f
+(with)i(this)f(r)n(elease:)43 b(Aleph)30 b(and)g(dvipng.)144
+3562 y(Many)g(macr)n(o)i(packages)d(have)h(been)g(added,)g(too.)50
+b(The)29 b(lar)n(gest)h(additions)g(ar)n(e)g(the)f(packages)144
+3675 y(beamer)20 b(and)g(memoir)-7 b(.)27 b(In)20 b(the)f(fonts)g
+(sections,)f(some)h(additions)g(and)h(updates)e(have)j(happened,)144
+3787 y(too.)27 b(The)20 b(lar)n(gest)h(change)h(in)g(this)f(ar)n(ea)h
+(is)g(the)f(addition)g(of)g(the)g(Latin)h(Modern)e(Fonts)g(\()p
+Fk(lmodern)p Fq(\))144 3900 y(in)j(Postscript)e(T)-8
+b(ype)22 b(1)h(format.)28 b(These)22 b(fonts)f(ar)n(e)i(not)g(as)f
+(exhaustive)g(as)h(the)f Fk(cmsuper)f Fq(fonts,)h(but)144
+4013 y(they)j(ar)n(e)i(of)g(very)f(good)f(quality)i(and)g(suf)n
+(\002cient)g(for)f(languages)g(which)h(use)f(Latin)h(characters.)144
+4126 y(Using)f(the)g(Latin)g(Modern)f(Fonts)g(is)i(in)g(most)f(cases)g
+(pr)n(eferable)g(over)g(using)g(the)g Fk(ae)g Fq(fonts)g(\(e.g.)144
+4239 y(PDF)d(\002les)f(with)g(accents)h(ar)n(e)g(sear)n(chable,)g(text)
+f(extraction)g(works)f(better\).)144 4494 y Fn(4.2)99
+b(Changes)25 b(to)h(web2c)280 4671 y Fm(\017)46 b Fq(T)412
+4692 y(E)456 4671 y(X)36 b(now)g(uses)e(the)i(new)f Fk(tex.web)f
+Fq(\(version)i(3.141592\))k(fr)n(om)c(December)g(2002)i(\(\002xed)371
+4784 y Fk(\\xleaders)p Fq(,)20 b(glueset,)h(weir)n(d)h(alignments\).)
+1835 5443 y(14)p eop end
+%%Page: 15 15
+TeXDict begin 15 14 bop 280 193 a Fm(\017)46 b Fq(encT)549
+214 y(E)593 193 y(X)22 b(\(see)g Fk(texdoc)46 b(encdoc-e)n
+Fq(\)\),)23 b(a)h(T)1787 214 y(E)1830 193 y(X)f(extension)e(by)h(Petr)g
+(Ol\232\341k)h(for)g(input)f(r)n(eencod-)371 306 y(ing)33
+b(is)g(now)f(available)k(\(for)c(non)h(Omega)g(based)f(engines\).)56
+b(The)32 b(new)g(functionality)i(is)371 419 y(enabled)28
+b(by)g(setting)f(the)g Fk(-enc)g Fq(switch)h(at)g(format)h(generation)d
+(time.)44 b(It)28 b(de\002nes)e(10)j(new)371 532 y(primitives)22
+b(which)g(can)h(be)e(used)f(to)h(contr)n(ol)g(T)2012
+553 y(E)2056 532 y(X's)g(internal)h(character)g(translation)g(tables)
+371 645 y(and)h(pr)n(oper)e(multibyte)i(input)f(\(e.g.)27
+b(for)22 b(handling)h(UTF-8\).)280 827 y Fm(\017)46 b
+Fq(The)24 b Fk(\\input)e Fq(primitive)j(in)g Fk(tex)f
+Fq(\(and)g Fk(mf)g Fq(and)g Fk(mpost)p Fq(\))f(now)h(accepts)f(double)h
+(quotes)e(con-)371 940 y(taining)h(spaces)f(and)h(other)e(special)i
+(characters.)28 b(T)-8 b(ypical)24 b(examples:)371 1151
+y Fk(\\input)46 b("filename)g(with)g(spaces")142 b(\045)47
+b(plain)371 1263 y(\\input{"filename)d(with)i(spaces"})94
+b(\045)47 b(latex)371 1474 y Fq(See)22 b(the)g(W)-8 b(eb2C)23
+b(manual)h(for)e(mor)n(e:)28 b Fk(texdoc)46 b(web2c)o
+Fq(.)144 1726 y Fn(4.3)99 b(Modi\002cations)26 b(to)f(the)g(directory)h
+(structure)e(and)h(\002le)g(searching)144 1903 y Fo(split)f(of)e(texmf)
+i(trees)48 b Fq(The)25 b(instr)o(uction)h(of)h(installing)g(teT)2230
+1924 y(E)2273 1903 y(X)f(fr)n(om)h(the)f(sour)n(ces)f(that)h(I)g(pr)n
+(ovide)371 2016 y(have)34 b(been)e(changed.)59 b(The)32
+b(unpacked)g(texmf)h(tarball)i(\()p Fk($prefix/share/texmf-dist)p
+Fq(,)371 2129 y(set)f(up)g(as)h Fk($TEXMFDIST)e Fq(in)i
+Fk(texmf.cnf)p Fq(\))e(is)h(no)h(longer)f(mixed)g(with)h(the)f(\002les)
+h(that)f(ar)n(e)371 2242 y(installed)27 b(via)h(\223)p
+Fk(make)52 b(install)p Fq(\224)25 b(fr)n(om)j(building)f(and)g
+(installing)h(the)d(pr)n(ogram)i(sour)n(ces.)371 2355
+y(These)e(\002les)g(\(e.)15 b(g.)37 b(format)27 b(\002les\))f(that)f
+(ar)n(e)i(mor)n(e)e(tied)h(up)f(with)h(the)f(pr)n(ograms)h(end)f(up)g
+(in)371 2467 y(the)d(dir)n(ectory)g Fk($prefix/share/texmf)17
+b Fq(\()p Fk($TEXMFMAIN)p Fq(\).)371 2615 y(So,)k(the)f(content)g(of)h
+(the)f(texmf)g(tarball)j(r)n(emains)f(completely)e(unchanged)g(in)h
+Fk($TEXMFDIST)371 2728 y Fq(and)g(can)h(easily)f(be)f(r)n(eplaced)h
+(with)g(a)g(new)g(version)f(without)g(loosing)g(other)f(r)o(untime)i
+(\002les)371 2841 y(that)i(ar)n(e)g(not)f(pr)n(ovided)f(elsewher)n(e.)
+144 3024 y Fo(changed)h(location)h(for)g(font)g(map)f(\002les)46
+b Fq(Following)34 b(a)h(change)f(intr)n(oduced)f(with)h(version)g(1.1)
+371 3137 y(of)f(the)f(T)684 3158 y(E)728 3137 y(X)g(Dir)n(ectory)h(Str)
+o(uctur)n(e)f(\(see)g Fk(texdoc)46 b(tds)o Fq(\),)36
+b(font)c(map)h(\002les)g(\()p Fk(.map)p Fq(\))f(ar)n(e)h(now)371
+3250 y(only)d(sear)n(ched)g(in)h(subdir)n(ectories)d(of)j
+Fk(fonts/map)d Fq(in)i(each)h Fk(texmf)e Fq(tr)n(ee.)50
+b(The)29 b(subdir)n(ec-)371 3363 y(tories)c(of)i Fk(fontname)p
+Fq(,)e Fk(dvips)g Fq(and)h Fk(pdftex)f Fq(ar)n(e)h(no)g(longer)g(sear)n
+(ched)f(for)h(these)f(\002les.)38 b(The)371 3475 y Fk(texmf)22
+b Fq(tr)n(ees)g(fr)n(om)h(this)g(distribution)g(follows)g(this)f
+(convention,)h(but)f(you)h(might)g(need)e(to)371 3588
+y(r)n(earrange)i(some)e(\002les)i(if)g(you)f(maintain)i(a)f(local)h
+Fk(texmf)e Fq(tr)n(ee.)371 3736 y(W)-5 b(ithin)23 b(the)f
+Fk(fonts/map)e Fq(tr)n(ee)i(the)g(\002les)g(ar)n(e)h(or)n(ganized)g(by)
+f(syntax)g(and)h(package.)k(Known)371 3849 y(map)d(\002le)g(syntaxes)e
+(ar)n(e)i Fk(dvips)e Fq(\(this)h(is)h(the)f(most)g(common)g(one\),)g
+Fk(pdftex)f Fq(\(a)j(superset)c(of)371 3962 y(the)27
+b Fk(dvips)f Fq(syntax,)h(e.)15 b(g.)42 b(the)26 b(psname)h(\002eld)g
+(is)h(optional\),)g Fk(dvipdfm)e Fq(and)h Fk(vtex)p Fq(.)41
+b(If)28 b(some)371 4075 y(\002le)d(is)f(stor)n(ed)f(within)i(the)f
+Fk(fonts/map/dvips)c Fq(subtr)n(ee,)j(this)h(does)f(not)h(mean)h(that)f
+Fk(dvips)371 4188 y Fq(is)j(the)e(only)h(pr)n(ogram)g(that)g(accesses)f
+(these)f(\002les.)38 b(Other)26 b(pr)n(ograms)g(which)g(support)e(the)
+371 4301 y(same)f(syntax)e(can)j(use)d(these)g(\002les)h(as)g(well.)29
+b(It's)21 b(just)h(that)g(the)g(pr)n(ogram)g Fk(dvips)f
+Fq(has)i(given)371 4414 y(its)g(name)g(for)f(this)g(syntax.)371
+4561 y(The)g(next)g(dir)n(ectory)g(level)i(speci\002es)d(the)h(package)
+h(that)f(the)g(map)i(\002le)e(belongs)g(to.)28 b(Exam-)371
+4674 y(ple:)g(the)22 b(\002le)h Fk(charter.map)d Fq(of)j(the)f
+Fk(psnfss)f Fq(package)i(follows)f(the)g(syntax)g(of)h
+Fk(dvips)p Fq(,)e(so)h(it)371 4787 y(is)h(stor)n(ed)e(in)i
+Fk(fonts/map/dvips/psnfss/ch)o(art)o(er.m)o(ap)p Fq(.)371
+4935 y(If)h(you)e(happen)g(to)h(see)f(that)g(some)h(application)h
+(cannot)f(\002nd)g(a)h(map)f(\002le)g(which)h(is)f(stor)n(ed)371
+5048 y(in)28 b(a)g(wr)n(ong)f(location,)i(you)e(have)h(to)f(move)g
+(that)g(\002le)h(to)f(the)f(right)i(location.)43 b(T)-8
+b(ry)26 b(to)h(\002nd)1835 5443 y(15)p eop end
+%%Page: 16 16
+TeXDict begin 16 15 bop 371 193 a Fq(out)33 b(the)f(syntax)h(and)g(the)
+f(package)h(that)g(the)g(\002le)g(belongs)f(to.)59 b(If)33
+b(unsur)n(e,)i(you)d(can)i(al-)371 306 y(ways)c(choose)f
+(\223unknown\224,)j(since)e(the)g(only)g(r)n(estriction)g(for)g(the)g
+(dir)n(ectory)f(tr)n(ee)h(below)371 419 y Fk(fonts/map)17
+b Fq(is)h(that)g(all)i(\002le)f(names)f(ar)n(e)h(unique.)26
+b(The)18 b(pr)n(ecise)g Fk(<syntax>/<package>)c Fq(sub-)371
+532 y(dir)n(ectory)20 b(does)f(not)h(af)n(fect)h(sear)n(ching.)27
+b(Do)21 b(not)f(for)n(get)f(to)h(update)f(the)h(\002lename)h(database)
+371 645 y(\()p Fk(ls-R)p Fq(\))i(by)f(r)o(unning)h(the)e(command)j
+Fk(mktexlsr)c Fq(\(r)n(esp.)27 b Fk(texhash)21 b Fq(which)i(is)g(the)f
+(same\).)144 832 y Fo(changed)g(search)j(path)d(for)h(map)g(\002les)46
+b Fq(Map)18 b(\002les)f(used)f(to)i(be)f(sear)n(ched)g(along)h(the)f
+Fk($TEXCONFIG)371 945 y Fq(variable)36 b(\(\223dvips)e(con\002g\224)g
+(format)g(in)g(terms)f(of)g(kpathsea)g(internals\).)61
+b(This)34 b(has)f(been)371 1058 y(changed)28 b(to)f(the)g
+Fk($TEXFONTMAPS)e Fq(variable)30 b(\(\223map\224)f(format\).)44
+b(The)28 b(new)f(location)i(of)e(the)371 1171 y(font)34
+b(map)g(\002les)g(is)f(included)h(in)g(the)f(new)h(default)f(setting)f
+(of)i Fk($TEXFONTMAPS)p Fq(,)d(but)i(not)371 1284 y(in)j(the)f(default)
+g(setting)f(of)h Fk($TEXCONFIG)p Fq(.)d(The)j(r)n(esult)g(is)g(that)g
+(an)h(old)f(application)i(that)371 1397 y(sear)n(ches)22
+b(font)g(map)i(\002les)e(along)h(the)e(\223dvips)i(con\002g\224)g
+(format)g(will)h(not)d(work.)371 1547 y(For)h(the)g(\223C\224)i(API)e
+(of)h(kpathsea)e(this)h(change)h(means)f(that)g(map)h(\002les)g(should)
+e(be)i(accessed)371 1660 y(using)j Fk(kpse_fontmap_format)c
+Fq(instead)k(of)h Fk(kpse_dvips_config_format)o Fq(.)35
+b(For)25 b(scripts)371 1773 y(that)32 b(use)f(kpsewhich,)h(one)f(has)h
+(to)f(make)h(sur)n(e)f(that)g Fk(--format=map)e Fq(is)j(used)e(to)h
+(sear)n(ch)371 1886 y(font)23 b(map)g(\002les.)144 2073
+y Fo(changed)f(location)h(for)g(font)g(encoding)e(\002les)46
+b Fq(T)-8 b(ogether)21 b(with)i(font)g(map)g(\002les)g(\(see)g
+(above\),)g(the)371 2186 y(font)37 b(encoding)e(\002les)i(have)g(been)f
+(given)h(a)g(new)f(location,)41 b(too.)69 b(The)36 b(new)g(location)i
+(is)371 2299 y Fk(fonts/enc/<syntax>/<packag)o(e>)p Fq(.)46
+b(So,)32 b(if)g(you)e(happen)g(to)g(see)f(some)h(application)i(to)371
+2412 y(fail)25 b(\002nding)d(a)h(font)f(encoding)f(\002le,)i(just)f
+(move)g(it)h(to)f(the)f(right)h(location)i(in)f(the)e(texmf)i(tr)n(ee)
+371 2525 y(and)g(update)e(the)h(\002lename)h(database.)144
+2713 y Fo(omission)g(of)f(\223engine\224)i(directories)47
+b Fq(W)-5 b(ithin)21 b(the)e(texmf)i(tr)n(ees,)e(the)g(dir)n(ectory)g
+(tr)n(ees)g(associated)371 2826 y(with)30 b(the)f(names)h(of)g(T)1184
+2847 y(E)1228 2826 y(X)g(engines)e(\(e.)15 b(g.)50 b
+Fk(etex)p Fq(,)30 b Fk(pdftex)p Fq(,)g Fk(omega)p Fq(,)h
+Fk(mltex)p Fq(\))e(ar)n(e)h(no)g(longer)371 2938 y(sear)n(ched)g(for)g
+(T)943 2960 y(E)987 2938 y(X)g(macr)n(o)h(packages.)50
+b(This)30 b(means)g(that)g(the)g Fk($TEXINPUTS)d Fq(sear)n(ch)k(path)
+371 3051 y(now)22 b(lies)h(completely)f(within)h(the)f
+Fk(tex)g Fq(subtr)n(ee.)371 3202 y(If)31 b(you)f(ar)n(e)h(using)f(the)f
+(above)i(mentioned)e(\223obsolete\224)h(locations)h(for)g(T)2980
+3223 y(E)3023 3202 y(X)g(macr)n(o)g(pack-)371 3315 y(ages,)22
+b(you)g(have)h(to)f(move)g(them)g(into)h(the)e Fk(tex)h
+Fq(dir)n(ectory)g(tr)n(ee.)144 3569 y Fn(4.4)99 b(Changes)25
+b(to)h(texcon\002g)f(/)g(updmap)f(/)i(fmtutil)144 3746
+y Fq(Following)c(the)g(new)h(dir)n(ectory)e(layout,)i(it)g(is)g(desir)n
+(ed)e(not)h(to)g(modify)h(the)f(dir)n(ectory)g(tr)n(ee)g(speci-)144
+3859 y(\002ed)17 b(by)h(the)g Fk($TEXMFDIST)d Fq(variable)20
+b(any)e(mor)n(e.)26 b(This)18 b(makes)g(it)g(necessary)f(to)g(r)n(edir)
+n(ect)h(generated)144 3972 y(output)j(\(e.g.)27 b(map)c(\002les)f(cr)n
+(eated)g(by)h(updmap,)f(updated)f(con\002g)h(\002les\))g(somewher)n(e)f
+(else.)285 4085 y(A)k(new)f(appr)n(oach)h(was)g(taken)e(by)i(the)f
+(implementation)g(in)i(teT)2574 4106 y(E)2617 4085 y(X-3.0:)32
+b(two)24 b(new)g(variables)144 4198 y(have)f(been)f(intr)n(oduced)g(to)
+g(specify)g(wher)n(e)f(to)h(stor)n(e)g(this)g(data:)335
+4361 y(TEXMFCONFIG)98 b(con\002guration)22 b(data)335
+4474 y(TEXMFV)-10 b(AR)272 b(variable)25 b(\(cached\))e(r)o(untime)g
+(data)285 4631 y(If)36 b(a)g(teT)578 4653 y(E)621 4631
+y(X)f(installation)h(is)g(shar)n(ed)f(among)g(several)g(users,)i(each)f
+(of)g(them)e(can)j(now)e(use)144 4744 y(teT)259 4766
+y(E)302 4744 y(X's)23 b(con\002guration)h(tools.)30 b(For)23
+b(each)h(of)g(the)f(thr)n(ee)g(pr)n(ograms,)g(a)h Fk(-sys)f
+Fq(variant)i(exists.)30 b(Call-)144 4857 y(ing)d(this)f(variant,)j
+(e.g.)39 b Fk(texconfig-sys)p Fq(,)24 b(is)j(the)f(same)g(as)h(calling)
+h(the)e(r)n(egular)h(variant,)i(except)1835 5443 y(16)p
+eop end
+%%Page: 17 17
+TeXDict begin 17 16 bop 144 193 a Fq(that)21 b(the)f(variables)j
+(TEXMFCONFIG)c(and)i(TEXMFV)-10 b(AR)19 b(ar)n(e)i(r)n(edir)n(ected)f
+(to)g(TEXMFSYSCON-)144 306 y(FIG)25 b(and)g(TEXMFSYSV)-10
+b(AR)22 b(r)n(espectively)-10 b(.)35 b(This)25 b(means)g(that)g(the)g
+(output)e(tr)n(ees)h(for)h(these)f(com-)144 419 y(mands)f(will)g(be)g
+(TEXMFSYSCONFIG)d(and)j(TEXMFSYSV)-10 b(AR.)285 532 y(The)34
+b(idea)g(behind)g(this)f(is)i(as)f(follows:)50 b(in)35
+b(the)e(default)h(settings)e(of)i(teT)2929 553 y(E)2972
+532 y(X,)j(the)c(variables)144 645 y(TEXMFCONFIG)g(and)i(TEXMFV)-10
+b(AR)32 b(point)h(to)h(dir)n(ectories)g(within)h(the)e(user)7
+b('s)33 b(home)h(dir)n(ec-)144 757 y(tories.)57 b(This)33
+b(means)f(that)h(each)g(user)e(can)j(have)f(his)g(own)f
+(con\002guration,)i(but)f(this)f(makes)g(it)144 870 y(dif)n(\002cult)25
+b(to)f(change)g(the)f(global)i(defaults.)32 b(That's)24
+b(wher)n(e)g(TEXMFSYSCONFIG)e(and)i(TEXMF-)144 983 y(SYSV)-10
+b(AR)19 b(come)i(into)g(play)-10 b(.)27 b(These)19 b(global)j(tr)n(ees)
+e(ar)n(e)h(included)f(in)i(the)e(sear)n(ch)h(paths)f(of)h(all)h(users.)
+144 1096 y(By)29 b(using)h(the)f Fk(-sys)h Fq(variant)h(of)f(the)g
+(tools)f(mentioned)g(above,)j(it)e(becomes)g(easy)f(to)h(adminis-)144
+1209 y(trate)23 b(the)g(global)h(defaults.)31 b(So,)23
+b(if)h(for)g(example,)g(some)e(administrator)i(installs)g(a)g
+(font-package)144 1322 y(that)g(comes)f(with)h(a)g(map)g(\002le)g(in)h
+(a)f(system's)e(tr)n(ee)h(\(e.g.)30 b(TEXMFLOCAL\),)22
+b(then)h(he)h(should)f(use)144 1435 y Fk(updmap-sys)d
+Fq(to)i(add)g(the)g(new)g(map)h(\002le)g(to)f(the)g(global)h
+(con\002guration.)144 1690 y Fn(4.5)99 b(Changes)25 b(to)h(pdfT)1110
+1713 y(E)1158 1690 y(X)280 1867 y Fm(\017)46 b Fq(All)29
+b(parameters)f(pr)n(eviously)f(set)g(thr)n(ough)g(the)h(special)g
+(con\002guration)g(\002le)g Fk(pdftex.cfg)371 1979 y
+Fq(must)g(now)g(be)g(set)f(thr)n(ough)g(primitives;)32
+b Fk(pdftex.cfg)26 b Fq(is)i(no)g(longer)f(supported.)42
+b(Some)371 2092 y(settings)32 b(\(e.g.)60 b(the)33 b(default)g
+(papersize\))g(ar)n(e)h(loaded)f(via)i Fk(pdftexconfig.tex)29
+b Fq(into)k(the)371 2205 y(format)23 b(\002les.)280 2393
+y Fm(\017)46 b Fk(\\pdfmapfile)30 b Fq(and)j Fk(\\pdfmapline)d
+Fq(pr)n(ovide)j(font)f(map)i(support)d(fr)n(om)i(within)g(a)h(docu-)371
+2506 y(ment.)280 2693 y Fm(\017)46 b Fq(Micr)n(otypographic)23
+b(font)f(expansion)f(can)j(be)e(used)g(mor)n(e)g(easily)-10
+b(.)371 2806 y Fk(http://www.ntg.nl/pipermai)o(l/n)o(tg-)t(pd)o(fte)o
+(x/20)o(04-)t(M)o(ay/0)o(005)o(04.h)o(tml)280 2994 y
+Fm(\017)46 b Fq(See)22 b(the)g(pdfT)860 3015 y(E)903
+2994 y(X)g(manual)i(for)f(mor)n(e:)28 b Fk(texdoc)46
+b(pdftex-a)p Fq(.)144 3249 y Fn(4.6)99 b(pdfetex:)30
+b(the)25 b(new)g(default)f(T)1555 3272 y(E)1604 3249
+y(X)i(engine)144 3426 y Fq(teT)259 3447 y(E)302 3426
+y(X)32 b(uses)e Fk(pdfetex)g Fq(for)i(all)h(formats)f(except)e
+(\223good-old\224)h Fk(tex)p Fq(.)55 b(So,)33 b(if)g(you)e(r)o(un)h
+Fk(latex)p Fq(,)g(the)144 3539 y(underlying)26 b(engine)g(will)i(be)f
+Fk(pdfetex)p Fq(.)40 b(Some)26 b(\(br)n(oken\))h(T)2278
+3560 y(E)2322 3539 y(X)g(macr)n(os)g(assume)g(that)g(pdfT)3421
+3560 y(E)3464 3539 y(X)g(is)144 3651 y(r)o(unning)f(in)i(PDF)e
+(generation)f(mode)h(if)h(they)f(detect)e(primitives)j(that)g(pdfT)2880
+3673 y(E)2923 3651 y(X)f(has)h(intr)n(oduced)144 3764
+y(\(e.g.)42 b Fk(\\pdfoutput)p Fq(\).)e(This)27 b(is)h(wr)n(ong,)g
+(since)f(pdfT)1950 3786 y(E)1993 3764 y(X)h(can)g(also)g(be)f(used)f
+(\(and)i(is)g(used\))e(to)h(gen-)144 3877 y(erate)33
+b(DVI)g(output.)58 b(A)33 b(r)n(eliable)i(way)e(of)h(detecting)d(PDF)i
+(output)f(mode)g(is)i(implemented)e(in)144 3990 y Fk(ifpdf.sty)20
+b Fq(which)k(works)d(for)h(plain)i(T)1549 4012 y(E)1593
+3990 y(X)e(as)h(well)g(as)f(L)2107 3973 y Fr(A)2145 3990
+y Fq(T)2186 4012 y(E)2230 3990 y(X.)144 4245 y Fn(4.7)99
+b(Changes)25 b(to)h(xdvik)280 4422 y Fm(\017)46 b Fq(On)30
+b(supported)d(platforms)i(the)g(default)g(toolkit)f(of)i
+Fk(xdvi)e Fq(is)i(now)f(Motif.)48 b(The)29 b(GUIs)g(for)371
+4535 y(both)e(toolkits)f(\(Motif)i(and)f(Xaw\))h(have)f(been)g
+(updated:)35 b(Ther)n(e)27 b(is)g(a)h(page)e(list)i(for)f(easier)371
+4648 y(navigation)36 b(and)f(impr)n(oved)g(menus.)65
+b(The)34 b(Motif)h(version)g(now)f(has)h(a)h(toolbar)f(and)g(a)371
+4761 y(`Pr)n(efer)n(ences')22 b(dialog)h(for)g(advanced)g
+(customizations.)371 4911 y(User)d(pr)n(efer)n(ences)f(that)h(ar)n(e)h
+(set)e(via)j(this)e(dialog,)g(the)g(`Options')g(menu)g(and)h(other)e
+(dialogs)371 5024 y(ar)n(e)i(now)f(saved)g(in)h(a)g(\002le)g
+Fk(~/.xdvirc)p Fq(.)j(This)d(\002le)f(overrides)f(other)g(X)h
+(defaults,)g(but)h(not)e(the)1835 5443 y(17)p eop end
+%%Page: 18 18
+TeXDict begin 18 17 bop 371 193 a Fq(command-line)24
+b(options.)j(\(The)c(option)e(`)p Fk(-q)p Fq(')i(and)g(the)f(X)h(r)n
+(esour)n(ce)f(`)p Fk(.noInitFile)p Fq(')e(can)k(be)371
+306 y(used)e(to)g(disable)h(this)f(featur)n(e\).)280
+493 y Fm(\017)46 b Fq(The)22 b(new)f(GUI)h(elements)e(can)j(be)f
+(selectively)g(toggled)e(via)j(the)e(option)g(or)h(the)f(X)h(r)n(esour)
+n(ce)371 606 y(`)p Fk(-expertmode)p Fq(',)e(which)k(should)d(be)i(used)
+e(instead)h(of)g(`)p Fk(-expert)p Fq('/`)p Fk(-statusline)p
+Fq('.)280 794 y Fm(\017)46 b Fq(The)21 b(functionality)h(of)f
+Fk(oxdvi)f Fq(has)h(been)g(mer)n(ged)f(into)g Fk(xdvi)p
+Fq(;)h Fk(oxdvi)f Fq(no)h(longer)f(exists)g(as)h(a)371
+907 y(separate)h(binary)-10 b(.)280 1095 y Fm(\017)46
+b Fk(Xdvi)33 b Fq(now)g(supports)e(string)i(sear)n(ch)h(and)g(text)e
+(selection)h(in)i(DVI)e(\002les)g(\(menu)h(`Modes)371
+1207 y Fh(!)26 b Fq(T)-8 b(ext)25 b(Selection'\),)h(printing)f(DVI)h
+(\002les)f(and)h(exporting)f(them)g(in)h(PDF)-8 b(,)25
+b(Postscript)g(and)371 1320 y(plain)33 b(text)d(format.)54
+b(Pages)31 b(can)h(be)f(marked)g(with)g(Mouse-2)g(in)h(the)e(page)h
+(list)h(to)e(select)371 1433 y(them)22 b(for)h(printing/saving.)280
+1621 y Fm(\017)46 b Fq(By)32 b(default,)i Fk(xdvi)d Fq(will)j(cr)n
+(eate)e(a)g(backup)h(copy)e(of)h(the)g(DVI)g(\002le)g(so)f(that)h
+(viewing)h(and)371 1734 y(navigating)24 b(still)f(works)e(when)h(the)g
+(DVI)g(\002le)h(is)g(being)f(written)g(by)g(T)2818 1755
+y(E)2862 1734 y(X.)280 1921 y Fm(\017)46 b Fq(Other)33
+b(new)g(featur)n(es)g(include:)50 b(Support)31 b(for)i(color)h
+(specials)g(and)f(color)n(ed)g(hyperlinks)371 2034 y(\(customizable)27
+b(via)f(the)e(`)p Fk(linkstyle)f Fq(option)h(and)h(X)g(r)n(esour)n
+(ce\),)f(a)i(`)p Fk(-watchfile)p Fq(')d(option,)371 2147
+y(a)j(`)p Fk(-unique)p Fq(')d(option)h(for)g(loading)h(new)f(\002les)g
+(into)h(a)g(r)o(unning)g(instance)f(of)h Fk(xdvi)p Fq(,)f(support)371
+2260 y(for)c(hyperr)n(efs)d(`hdvips')j(specials,)g(and)f(a)h(history)e
+(of)h(r)n(ecently)g(viewed)g(\002les)g(via)h(the)f(menu)371
+2373 y(`File)k Fh(!)g Fq(Open)f(Recent'.)144 2628 y Fn(4.8)99
+b(Changes)25 b(to)h(dvipsk)280 2805 y Fm(\017)46 b Fq(The)23
+b(functionality)h(of)g Fk(odvips)e Fq(has)i(been)f(mer)n(ged)f(into)h
+Fk(dvips)p Fq(;)g Fk(odvips)f Fq(no)h(longer)g(exists)371
+2918 y(as)g(a)g(separate)f(binary)-10 b(.)280 3105 y
+Fm(\017)46 b Fq(Fonts)21 b(used)h(in)h(included)f(graphics)h(\002les)f
+(ar)n(e)h(no)f(longer)g(partially)i(downloaded.)144 3360
+y Fn(4.9)99 b(Improved)25 b(documentation)280 3537 y
+Fm(\017)46 b Fq(The)22 b(\002le)g Fk(doc/index.html)c
+Fq(in)k(the)g(distributed)e(texmf)i(tr)n(ee)f(pr)n(ovides)g(a)h(much)h
+(impr)n(oved)371 3650 y(overview)30 b(of)h(the)e(included)h
+(documentation)g(and)g(also)h(pr)n(ovides)e(a)i(sear)n(ch)g(facility)h
+(for)371 3763 y(various)23 b(T)737 3784 y(E)781 3763
+y(X)f(r)n(elated)h(information)g(sour)n(ces.)371 3913
+y(This)g(\002le)f(is)h(generated)e(by)h(a)h(PHP)f(script)h(which)g(is)g
+(included)f(in)h(teT)2829 3934 y(E)2872 3913 y(X)f(as)h(well.)280
+4101 y Fm(\017)46 b Fq(The)20 b(PHP)g(script)g Fk(doc/texdoc.php)d
+Fq(is)k(able)g(to)f(of)n(fer)g(a)i(web)e(interface)g(to)g(the)g
+(information)371 4214 y(pr)n(ovided)i(in)h(texdoctk)e(databases.)144
+4512 y Fp(5)119 b(Resources)144 4723 y Fq(This)32 b(section)g
+(describes)f(wher)n(e)h(you)f(can)j(\002nd)e(further)f(\(or)h(mor)n(e)h
+(up-to-date\))e(material)j(and)144 4836 y(support)21
+b(in)i(the)f(world)g(of)g(T)1145 4857 y(E)1189 4836 y(X.)1835
+5443 y(18)p eop end
+%%Page: 19 19
+TeXDict begin 19 18 bop 144 193 a Fn(5.1)99 b(Helpindex)25
+b(\002le)f(for)h(the)g(documentation)g(tree)144 370 y
+Fq(The)i(\002le)g Fk(index.html)e Fq(in)j(the)e(r)n(oot)h(of)g(teT)1654
+391 y(E)1697 370 y(X's)g(documentation)f(tr)n(ee)h(is)g(a)h(guide)e
+(for)h(the)g(docu-)144 483 y(mentation)20 b(that)h(is)f(included)h(in)g
+(teT)1431 504 y(E)1474 483 y(X.)27 b(It)20 b(is)h(a)g(good)e(point)h
+(to)g(start)g(when)g(you)g(want)g(to)g(br)n(owse)144
+596 y(thr)n(ough)i(the)f(documentation)h(or)g(sear)n(ch)h(for)g(the)e
+(solution)h(of)h(a)g(speci\002c)g(pr)n(oblem.)144 850
+y Fn(5.2)99 b(Internet)24 b(Newsgroups)144 1027 y Fq(If)35
+b(you)f(encounter)f(a)j(pr)n(oblem)f(which)g(might)g(not)f(be)h(teT)
+2292 1049 y(E)2335 1027 y(X)f(speci\002c,)k(but)c(rather)h(a)g(general)
+144 1140 y(pr)n(oblem)f(with)g(T)777 1161 y(E)821 1140
+y(X)f(or)g(L)1057 1123 y Fr(A)1095 1140 y Fq(T)1136 1161
+y(E)1180 1140 y(X)h(\(e.g.,)e(\223How)h(can)i(I)f(format)g(a)g(section)
+f(heading)g(in)h(a)h(dif)n(fer)n(ent)144 1253 y(way?\224\),)24
+b(you)f(should)f(not)g(raise)h(your)g(question)e(on)i(one)g(of)g(the)f
+(mailing)j(lists)e(for)g(teT)3227 1274 y(E)3270 1253
+y(X.)30 b(In)22 b(the)144 1366 y(following)h(newsgr)n(oups,)d(T)1135
+1387 y(E)1178 1366 y(X-r)n(elated)j(matters)e(ar)n(e)i(discussed:)144
+1554 y Fo(comp.text.tex)47 b Fq(General)23 b(things)f(about)g(T)1642
+1575 y(E)1686 1554 y(X.)144 1741 y Fo(news.answers)47
+b Fq(F)-7 b(AQs)22 b(\(also)h(T)1269 1763 y(E)1313 1741
+y(X-r)n(elated)f(F)-7 b(AQs\).)144 1929 y Fo(comp.answers)46
+b Fq(F)-7 b(AQs)22 b(\(also)h(T)1279 1950 y(E)1323 1929
+y(X-r)n(elated)f(F)-7 b(AQs\).)144 2116 y Fo(de.comp.text.tex)47
+b Fq(General)23 b(things)e(about)i(T)1766 2138 y(E)1810
+2116 y(X)f(\(German\).)144 2304 y Fo(fr)-5 b(.comp.text.tex)47
+b Fq(General)23 b(things)f(about)h(T)1731 2325 y(E)1774
+2304 y(X)g(\(Fr)n(ench\).)144 2492 y Fo(comp.fonts)45
+b Fq(Font)21 b(matters.)144 2679 y Fo(comp.programming.literate)46
+b Fq(Literate)21 b(pr)n(ogramming.)144 2934 y Fn(5.3)99
+b(T)417 2958 y(E)467 2934 y(X)25 b(User)f(Groups)144
+3111 y Fq(If)j(you)g(enjoy)f(T)701 3132 y(E)745 3111
+y(X,)h(you)g(can)h(join)f(a)h(T)1496 3132 y(E)1540 3111
+y(X)f(user)f(gr)n(oup)g(to)h(get)f(support)f(and)i(softwar)n(e)g(and)g
+(help)144 3224 y(the)e(T)337 3245 y(E)381 3224 y(X)g(community)h(by)g
+(your)e(membership.)37 b(The)25 b(web)g(site)g(of)h(the)f(T)2704
+3245 y(E)2748 3224 y(X)g(User)g(Gr)n(oup)g(\(TUG\),)144
+3337 y Fk(http://tug.org/)19 b Fq(has)j(the)g(necessary)f(contact)i
+(information)g(for)g(several)f(T)2903 3358 y(E)2947 3337
+y(X)g(user)g(gr)n(oups.)144 3592 y Fn(5.4)99 b(Mailing)25
+b(Lists)144 3769 y Fq(All)f(teT)406 3790 y(E)449 3769
+y(X)f(mailing)h(lists)f(ar)n(e)g(hosted)e(on)i(the)f(same)h(server)f
+(which)i(is)f(managed)g(by)g(Major)n(domo)144 3881 y(softwar)n(e.)50
+b(Administrative)30 b(r)n(equests,)g(e.g.,)f(to)g(\(un\)subscribe)i(or)
+e(to)h(get)f(an)i(ar)n(chive)g(of)g(a)f(list)144 3994
+y(ar)n(e)22 b(handled)f(by)g(the)g(addr)n(ess:)26 b Fk
+(majordomo@dbs.uni-hannov)o(er.)o(de)15 b Fq(T)-8 b(o)21
+b(get)f(a)i(list)g(of)g(available)144 4107 y(commands)32
+b(that)f(the)g(Major)n(domo)g(server)f(understands,)h(just)g(send)f
+(the)h(message)f(\223help\224)i(to)144 4220 y(the)22
+b(server)f(\(in)j(the)e(body)f(of)i(a)g(message,)e(not)h(in)h(the)f
+(header\).)27 b(The)22 b(lists)g(ar)n(e:)144 4408 y Fo(tetex)47
+b Fq(General)25 b(discussions)e(+)i(bug)g(r)n(eports)d(about)j(teT)2154
+4429 y(E)2197 4408 y(X.)33 b(General)25 b(T)2697 4429
+y(E)2741 4408 y(X)f(matters)g(that)g(ar)n(e)h(not)371
+4521 y(teT)486 4542 y(E)529 4521 y(X-speci\002c)k(ar)n(e)h(not)f
+(discussed.)45 b(Especially)30 b(general)e(questions)g(about)h(T)3205
+4542 y(E)3249 4521 y(X)g(should)371 4634 y Ff(not)23
+b Fq(be)g(dir)n(ected)e(to)h(this)h(list;)f(use)g(a)h(newsgr)n(oup)e
+(instead.)144 4821 y Fo(tetex-announce)47 b Fq(This)19
+b(\(moderated,)f(low)i(traf)n(\002c\))g(list)g(is)g(used)e(for)h
+(important)g(announcements)371 4934 y(about)k(teT)739
+4955 y(E)782 4934 y(X,)f(such)g(as)h(new)f(r)n(eleases)g(or)g
+(important)g(updates.)1835 5443 y(19)p eop end
+%%Page: 20 20
+TeXDict begin 20 19 bop 144 193 a Fo(tetex-pretest)49
+b Fq(This)25 b(is)g(used)e(to)h(discuss)g(beta)g(versions)g(of)h(teT)
+2402 214 y(E)2445 193 y(X)f(and)h(to)f(r)n(eport)f(bugs)h(in)h(these)
+371 306 y(versions.)41 b(Bug)26 b(r)n(eports)g(about)h(of)n(\002cial)j
+(\(non-beta\))d(r)n(eleases)g(should)f(not)g(be)i(send)e(her)n(e,)371
+419 y(but)d(to)f(the)g Fk(tetex)f Fq(list.)285 584 y(Some)j(of)h(the)f
+(packages)g(which)h(ar)n(e)g(contained)f(in)h(teT)2242
+606 y(E)2285 584 y(X)f(\(e.g.,)g(Omega)h(and)f(pdfT)3264
+606 y(E)3308 584 y(X\))g(have)144 697 y(special)f(mailing)h(lists)e(or)
+g(web)g(r)n(esour)n(ces)f(on)h(their)g(own.)28 b(The)21
+b(web)h(site)g(of)g(TUG,)h Fk(http://tug.)144 810 y(org/)f
+Fq(has)g(links)h(to)f(many)h(of)g(them.)144 1060 y Fn(5.5)99
+b(Comprehensive)25 b(T)-11 b(eX)25 b(Archive)g(Network)g(\(CT)-9
+b(AN\))144 1237 y Fq(T)h(o)26 b(aid)i(the)f(ar)n(chiving)i(and)e(r)n
+(etrieval)h(of)f(T)1678 1258 y(E)1722 1237 y(X-r)n(elated)f(\002les,)i
+(a)g(TUG)f(\(T)-8 b(eX)26 b(User)g(Gr)n(oup\))h(work-)144
+1350 y(ing)i(gr)n(oup)f(developed)f(the)h(Compr)n(ehensive)g(T)1890
+1371 y(E)1934 1350 y(X)g(Ar)n(chive)i(Network)d(\(CT)-7
+b(AN\).)29 b(Each)g(CT)-7 b(AN)144 1463 y(site)27 b(has)g(identical)i
+(material,)h(and)d(maintains)i(authoritative)e(versions)g(of)g(its)h
+(material.)43 b(These)144 1576 y(collections)32 b(ar)n(e)g(extensive;)i
+(in)e(particular)-7 b(,)35 b(almost)c(everything)f(mentioned)g(in)i
+(this)f(article)i(is)144 1689 y(ar)n(chived)24 b(at)f(the)e(CT)-7
+b(AN)23 b(sites,)e(even)h(if)i(its)e(location)h(isn't)g(explicitly)g
+(stated.)285 1802 y(The)29 b(CT)-7 b(AN)29 b(sites)f(ar)n(e)i(curr)n
+(ently)f Fk(dante.ctan.org)p Fq(,)e Fk(cam.ctan.org)g
+Fq(and)i Fk(tug.ctan.org)p Fq(.)144 1915 y(The)e(or)n(ganization)h(of)f
+(T)1008 1936 y(E)1052 1915 y(X)g(\002les)g(on)g(all)h(these)e(sites)g
+(is)h(identical)h(and)g(starts)e(at)h Fk(/tex-archive)p
+Fq(.)144 2027 y(T)-8 b(o)22 b(r)n(educe)f(network)f(load,)j(please)e
+(use)h(the)f(CT)-7 b(AN)22 b(site)g(or)g(mirr)n(or)h(closest)e(to)h
+(you.)k(A)c(complete)144 2140 y(and)g(curr)n(ent)g(list)g(of)g(CT)-7
+b(AN)21 b(sites)g(and)h(known)f(mirr)n(ors)h(can)h(be)e(obtained)h(by)g
+(using)f(the)g Fk(finger)144 2253 y Fq(utility)32 b(on)g(`user)7
+b(')31 b Fk(ctan@cam.ctan.org)c Fq(\(it)33 b(also)f(works)f(with)h(the)
+f(other)f(CT)-7 b(AN)32 b(hosts\);)j(it)e(is)144 2366
+y(also)23 b(available)j(as)c(\002le)h Fk(help/ctan/CTAN.sites)17
+b Fq(in)23 b(teT)2159 2388 y(E)2202 2366 y(X's)f(documentation)g(tr)n
+(ee.)144 2616 y Fn(5.6)99 b(The)25 b(T)619 2640 y(E)669
+2616 y(X)g(Catalogue)144 2793 y Fq(This)k(catalogue)g(lists)g(many)h(T)
+1251 2815 y(E)1294 2793 y(X,)h(L)1432 2776 y Fr(A)1470
+2793 y Fq(T)1511 2815 y(E)1554 2793 y(X,)f(and)g(r)n(elated)e(packages)
+h(and)g(tools.)46 b(Most)29 b(ar)n(e)g(avail-)144 2906
+y(able)g(worldwide)d(online)i(fr)n(om)g(CT)-7 b(AN,)27
+b(the)g(Compr)n(ehensive)f(T)-8 b(eX)27 b(Ar)n(chive)h(Network.)41
+b(Links)144 3019 y(ar)n(e)19 b(pr)n(ovided)f(in)i(this)f(catalogue)f
+(to)h(available)j(sour)n(ces)c(and)h(documentation.)25
+b(The)18 b(teT)3263 3040 y(E)3306 3019 y(X)h(docu-)144
+3132 y(mentation)h(tr)n(ee)g(contains)g(a)h(version)f(of)g(this)g
+(catalogue)h(in)g Fk(help/Catalogue)p Fq(.)i(The)d(most)f(r)n(ecent)144
+3245 y(online)k(version)f(is)h(available)i(at)1117 3410
+y Fk(http://texcatalogue.sar)o(ovar)o(.or)o(g/)144 3661
+y Fn(5.7)99 b(Frequently)25 b(Asked)f(Questions)i(\(F)-5
+b(AQs\))144 3838 y Fq(Documents)17 b(which)g(list)h(fr)n(equently)e
+(asked)g(questions)g(and)h(their)g(answers)f(\(in)i(short:)24
+b(F)-7 b(AQs\))17 b(ar)n(e)144 3950 y(collections)28
+b(of)h(solutions)d(to)i(many)g(common)h(pr)n(oblems.)44
+b(The)27 b(documentation)h(tr)n(ee)f(of)h(teT)3513 3972
+y(E)3556 3950 y(X)144 4063 y(contains)i(the)g(teT)782
+4085 y(E)825 4063 y(X)g(F)-7 b(AQ)30 b(in)h(the)f(dir)n(ectory)f
+Fk(tetex)g Fq(and)h(the)g(UKTUG)g(F)-7 b(AQ)30 b(in)h(the)f(dir)n
+(ectory)144 4176 y Fk(help/faq/uktug-faq)p Fq(.)23 b(The)f(teT)1344
+4198 y(E)1387 4176 y(X)g(F)-7 b(AQ)23 b(can)g(be)g(r)n(ead)g(by)f(the)g
+(command)h Fk(texconfig)45 b(faq)p Fq(.)144 4470 y Fp(References)144
+4681 y Fq([1])i(Donald)23 b(E.)f(Knuth.)31 b Ff(The)23
+b Fb(MET)n(AF)l(ONT)p Ff(book)p Fq(.)31 b(Addison-W)-8
+b(esley)e(,)19 b(1984.)144 4860 y([2])47 b(Leslie)16
+b(Lamport.)21 b Ff(L)961 4843 y Fa(A)996 4860 y Ff(T)1037
+4882 y(E)1079 4860 y(X:)k(A)18 b(Document)f(Pr)n(eparation)j(System)p
+Fq(.)i(Addison-W)-8 b(esley)e(,)15 b(2nd)j(edition,)296
+4973 y(1994.)1835 5443 y(20)p eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Build/source/texk/tetex/doc/TETEXDOC.tex b/Build/source/texk/tetex/doc/TETEXDOC.tex
new file mode 100644
index 00000000000..4e8ac73223d
--- /dev/null
+++ b/Build/source/texk/tetex/doc/TETEXDOC.tex
@@ -0,0 +1,1134 @@
+% teTeX main documentation file. Thomas Esser, 1999, 2003. public domain.
+
+\documentclass[11pt,a4paper]{article}
+
+% \usepackage[13,14,15]{pagesel}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+% \usepackage{pslatex}
+\usepackage{lmodern}
+\usepackage{palatcm}
+\usepackage{ifpdf}
+
+\usepackage{geometry,mflogo,xspace,texnames,path,booktabs,bm}
+\newcommand{\psext}{ps}
+\newcommand{\pdfext}{pdf}
+\newcommand{\dviext}{dvi}
+
+\ifpdf
+\usepackage[bookmarksopen=true, hypertexnames=false, linktocpage, pdfpagelabels, colorlinks, bookmarks]{hyperref}
+\hypersetup{
+ pdfauthor={Thomas Esser},
+ pdftitle={The teTeX Manual}
+}
+\usepackage{thumbpdf}
+\let\docext=\pdfext
+\else
+\let\docext=\dviext
+\usepackage[bookmarks,hypertex]{hyperref}
+\fi
+
+\newcommand{\dlink}[3]{%
+ \ifpdf
+ \ifx\pdfext#3
+ \href{#1/#2.#3}{\texttt{texdoc #2}}%
+ \else
+ \texttt{texdoc #2}%
+ \fi
+ \else
+ \href{#1/#2.#3}{\mbox{\texttt{texdoc #2}}}%
+ \fi}
+
+\newcommand{\teTeX}{\textrm{te}\TeX\xspace}
+\newcommand{\Linux}{\textrm{Linu}\textsf{X}\xspace}
+% \newcommand{\MF}{\textlogo{Metafont}\xspace}
+\newcommand{\smiley}{\texttt{ :-)}\xspace}
+
+\title{\teTeX{} Manual}
+\author{\href{mailto:te@dbs.uni-hannover.de}{Thomas Esser}}
+\date{January 2005}
+
+% \geometry{scale={0.637,0.637}, top=0.121\paperheight, nohead}
+\usepackage{typearea}
+\begin{document}
+\maketitle
+
+\begin{abstract}
+
+ \teTeX{} is a distribution of \TeX{} and related programs: pdf\TeX,
+ e-\TeX, Omega, Aleph, \LaTeX, Con\TeX{}t, \MF, \MP{}, \texttt{dvips},
+ \texttt{xdvi}, \texttt{dvipdfm}, \texttt{dvipng}, \BibTeX{},
+ \texttt{makeindex} etc.
+
+ \teTeX{} aims to make using and maintaining a \TeX{}
+ system as easy as possible. The programs are built around the
+ \href{http://tug.org/web2c/}{Web2c} distribution by Karl Berry and Olaf
+ Weber. A common part of many programs is \texttt{kpathsea}, a library
+ that provides efficient access by name to files stored hierarchically.
+
+ This document describes how to use and set up the \teTeX{} system.
+ It does not attempt to be a comprehensive guide, instead it tries to
+ give an overview about what software and documentation is contained
+ in the distribution.
+\end{abstract}
+
+\newpage
+\tableofcontents
+
+\newpage
+
+\section{The Components of \teTeX}\label{sec:components}
+
+This document cannot describe all the programs which are part of
+\teTeX{} in detail, but it tries to give you an overview. This section
+describes the packages which form the main components of \teTeX{}.
+
+\subsection{Web2c}
+\href{http://tug.org/web2c/}{Web2c} is a \TeX{} implementation,
+originally for Unix, but also running under Windows, Macintosh,
+DOS, Amiga, and other operating systems. It includes \TeX{} itself and
+the following programs:
+\begin{itemize}
+\item \MF: a font compiler intended to produce typefaces of high
+ quality~\cite{Knuth:1984:M}.
+\item \MP: a program similar to \MF, modified to output Postscript
+ code instead of bitmaps. Documentation for \MP{} is available via
+ the command:
+ \dlink{../../../texmf-dist/doc/metapost/base}{mpman}{\psext}.
+\item \BibTeX: a preprocessor to make bibliographies for \LaTeX. For
+ documentation, see
+ \dlink{../../../texmf-dist/doc/bibtex/base}{btxdoc}{\dviext} and
+ Appendix~B of \cite{Lamport:1994:LDP}.
+\item utilities for converting between different font metric and
+ bitmap formats: \texttt{gftopk}, \texttt{gftodvi}, \texttt{gftype},
+ \texttt{pktogf}, \texttt{pktype}, \texttt{pltotf}, \texttt{tftopl},
+ \texttt{vftovp}, \texttt{vptovf}.
+\item DVI utilities: \texttt{dvicopy, dvitomp, dvitype}.
+\item other tools: \texttt{patgen}, \texttt{pooltype},
+ \texttt{tangle}, \texttt{weave}, \texttt{ctangle}, \texttt{cweave}.
+\end{itemize}
+
+
+The main documentation for \href{http://tug.org/web2c/}{Web2c} is the
+``Web2c manual'' and the ``kpathsea manual''. These can be accessed
+via \dlink{../../../texmf-dist/doc/programs}{web2c}{\docext} and
+\dlink{../../../texmf-dist/doc/programs}{kpathsea}{\docext}
+respectively.
+
+\subsection{\TeX{} extensions: pdf\TeX, e-\TeX{}, Omega, Aleph, enc\TeX}
+Besides the standard \TeX{} program, the
+ following extensions to \TeX{} are included in \teTeX:
+\begin{description}
+\item [pdf\TeX] This can optionally write Acrobat PDF format instead
+ of DVI. The user manual can be accessed by the command
+ \dlink{../../../texmf-dist/doc/pdftex/manual}{pdftex-a}{\pdfext}.
+ The \LaTeX{} hyperref package
+ (\dlink{../../../texmf-dist/doc/latex/hyperref}{manual}{\pdfext})
+ has an option ``pdftex'', which turns on all the program features.
+ In DVI mode, pdf\TeX{} works like the usual \TeX{} with the
+ exception of the availability of additional typographic features.
+
+ In PDF mode, pdf\TeX{} supports graphics inclusion for the following
+ graphic formats:
+ \begin{itemize}
+ \item PNG (portable network graphics)
+ \item PDF (portable document format),
+ \item JPG (jpeg)
+ \item MPS (metapost output)
+ \end{itemize}
+ It does not support EPS (encapsulated postscript), but if you have
+ recent versions of \texttt{ghostscript} (version 5.10 or later) and
+ \texttt{perl} (version 5 or later) installed, you can use the tool
+ \texttt{epstopdf} to convert EPS graphics into PDF. When including a
+ PDF file, pdf\TeX{} is able to access parts of a multi-page file: a
+ complete page or a clipped part of a page. This feature extends
+ pdf\TeX{} beyond its typesetting capabilities into a versatile tool
+ for handling arbitrary generated PDF files.
+
+\item [e-\TeX] adds a small but powerful set of new primitives, and an
+ extension for right to left typesetting. In default mode, e-\TeX{}
+ is 100\,\% compatible with ordinary \TeX. See
+ \dlink{../../../texmf-dist/doc/etex/base}{etex-man}{\docext} for details.
+
+\item [Omega ($\bm \Omega$)] Omega works internally with 16-bit
+ Unicode characters; this allows it to work directly with
+ almost all the world's scripts simultaneously. It also supports
+ dynamically loaded ``$\Omega$ Translation Processes'' (OTPs), which
+ allow the user to define complex transformations to be performed on
+ arbitrary streams of input. Documentation:
+ \dlink{../../../texmf-dist/doc/omega/base}{doc-1.12}{ps}.
+\item [Aleph] is a \TeX{} engine that combines the good features of
+ e\TeX{} and Omega. The \LaTeX{} based format of Aleph is called
+ Lamed.
+\end{description}
+
+
+\subsection{DVI drivers: dvips, dvilj, xdvi, dvipdfm, dvipng}
+For printing and previewing DVI files, you need to use one of the DVI
+drivers that are available:
+\begin{description}
+\item [dvips] This driver converts DVI files into Postscript.
+ Postscript is a page description language that many laser printers
+ directly support. With the help of the utility \texttt{ghostscript},
+ it is possible to view Postscript documents on screen and to print
+ Postscript documents on non-Postscript printers. This version of
+ \texttt{dvips} supports hypertex and partial font downloading. In
+ this release, the search path for config files have been changed:
+ the current directory is no longer searched by default.
+ Additionally, secure mode has been turned on by default. For
+ details, consult the documentation:
+ \dlink{../../../texmf-dist/doc/programs}{dvips}{\dviext}.
+\item [dvilj] This is a family of drivers to support HP LaserJet (and
+ compatible) printers: \texttt{dvilj, dvilj2p, dvilj4, dvilj4l,
+ dvilj6}. These drivers are faster than the \texttt{dvips} +
+ \texttt{ghostscript} alternative (which can also be used to print
+ DVI files on HP LaserJet printers), but they lack a few features
+ like support for virtual fonts, rotated or scaled graphics, etc.
+\item [xdvi] This is a previewer for DVI files under the X~Window
+ System. It has support for Postscript specials through Display
+ Postscript, NeWS and \texttt{ghostscript}. Hypertex support was also
+ added for this version of \texttt{xdvi}. A link can be followed by
+ clicking with Button-1 or Button-2 (open link in a new window) on
+ it. With the help of source specials, xdvi can interact with most
+ editors in some way. For details, visit the
+ \href{http://xdvi.sourceforge.net/inverse-search.html}{project
+ page}.
+\item [dvipdfm] This program can convert dvi files into pdf format,
+ while supporting a rich set of features (via TeX's
+ \textbackslash special scheme): hyperlinks, bookmarks, thumbnails,
+ image inclusion etc. For details consult the documentation
+ \dlink{../../../texmf-dist/doc/programs}{dvipdfm}{\docext} and the
+ \href{http://gaspra.kettering.edu/dvipdfm/}{web page}.
+\item [dvipng] makes PNG and/or GIF graphics from DVI files as obtained
+ from TeX and its relatives. For details, consult the documentation:
+ \dlink{../../../texmf-dist/doc/programs}{dvipng}{\docext}.
+
+\end{description}
+
+
+\subsection{Makeindex}
+\texttt{makeindex} is a general purpose hierarchical index generator;
+it accepts one or more input files (often produced by a text formatter
+such as \TeX{} or \texttt{troff}), sorts the entries, and produces an
+output file which can be formatted. The formats of the input and
+output files are specified in a style file; by default, input is
+assumed to be an \texttt{idx} file, as generated by \LaTeX.
+Documentation: \dlink{../../../texmf-dist/doc/makeindex}{makeindex}{\dviext}
+
+\subsection{Texinfo}
+\texttt{texinfo} is a documentation system. It produces online or
+printed output from a single source. It uses \TeX{} to typeset
+documents for printing (\dlink{../../../texmf-dist/doc/programs}{texinfo}{\dviext}).
+
+
+\subsection{UNIX Scripts / Tools}
+
+If you are using \teTeX{} under UNIX, you can use the following
+scripts. More documentation for a specific tool can either be obtained
+from its UNIX manual page or by running the program with the option
+\texttt{--help}.
+\begin{description}
+\item[texdoc] allows you to easily access documentation included with
+ \teTeX. You only have to remember the file name of the document that
+ you want to access, without the directory part. If you do not
+ specify a file name extension (such as \texttt{.dvi})
+ \texttt{texdoc} will try a few default extensions. After searching
+ the file, \texttt{texdoc} starts an appropriate viewer. The command
+ \texttt{texdoc~--help} gives you a list of available command line
+ options. While \texttt{texdoc} is a fast and efficient tool if you
+ exactly know what you are searching for, it is of limited use if you
+ don't know the exact name of the documentation file.
+\item [texdoctk] This \texttt{perl/tk} based tool allows you to browse
+ through the available documentation by some topics and to search for
+ keywords. It uses a simple database file for its configuration
+ (named \texttt{texdoctk.dat}), which you can customize and extend
+ easily.
+\item[texconfig] allows you to carry out the most common configuration
+ tasks in \teTeX. The program can be used in command mode or in
+ interactive mode. For the interactive mode (which is invoked by
+ calling \texttt{texconfig} without arguments), a curses based
+ utility is used for user interaction (menus, check boxes, \ldots).
+ The command \texttt{texconfig help} shows you a list of available
+ command line options (command mode).
+
+ \verb+texconfig+ can be used to set up \TeX{} format files and their
+ hyphenation patterns, to set up printers (for \verb+dvips+) and for
+ a few other things. It manipulates configuration files to store the
+ configuration changes.
+
+ If the use of \verb+texconfig+ causes a change in some configuration
+ file, \verb+texconfig+ will try to save that file into the texmf
+ tree that is specified by the \verb+TEXMFCONFIG+ variable. Variable
+ (cached) runtime data (such as format files generated by
+ \verb+fmtutil+, map files generated by \verb+updmap+) will be stored
+ in the texmf tree specified by the \verb+TEXMFVAR+ variable.
+\item[updmap] Some tools in \teTeX{} support Postscript Type~1
+ fonts: \texttt{dvips}, \texttt{pdf\TeX}, \texttt{xdvi},
+ \texttt{dvipdfm} and \texttt{gsftopk}, \texttt{ps2pk}. The last two
+ in this list just convert outline fonts into a bitmap format which
+ is helpful for applications that don't directly support outline
+ fonts. In an ideal world, all of these programs would share a common
+ configuration file to set up their outline fonts. The reality is
+ different, however, and each tool needs its own configuration. The
+ \texttt{updmap} utility was developed to generate these
+ configuration files from a central repository. Adding font
+ definitions for all supported applications from a map file
+ \texttt{foo.map} can be as easy as %
+ \verb+updmap --enable Map foo.map+. For details, please consult the
+ manual page of \texttt{updmap}.
+\item[dvired] This script can be used to print documents formatted for
+ A4 paper 2-up (i.e.\@ two logical pages to one physical page of
+ paper) by scaling the pages to 70.7\,\% of their original size.
+ \texttt{dvired} can just be used in the same way as \texttt{dvips}
+ (same command line options).
+\item[dvi2fax] This script converts DVI files into FAX G3 format. It
+ uses \texttt{ghostscript} (see:
+ \url{http://www.cs.wisc.edu/~ghost/}) which is not part of \teTeX{}.
+ The DVI file is first converted to Postscript ($204\times 196$\,dpi
+ or $204\times 98$\,dpi) and then to FAX G3 using
+ \texttt{ghostscript} (\texttt{faxg3} device).
+\item[allcm, allec, allneeded] \teTeX's DVI drivers generate missing
+ bitmap fonts on demand (the first time they are needed). If you
+ start with a fresh installation, you don't have any bitmap fonts and
+ the delay caused by font generation might be too annoying for you.
+ In that case, the three scripts \texttt{allcm, allec and allneeded}
+ can help you. \texttt{allcm} and \texttt{allec} create a few DVI
+ files (using \LaTeX) which use lots of fonts at various sizes and run
+ these DVI files through \texttt{dvips}. This triggers the generation
+ of the most commonly used Computer Modern (\texttt{allcm}) and
+ European Computer Modern (\texttt{allec}) fonts respectively. You
+ might already have DVI files and want to generate just the bitmap
+ fonts needed by these documents. This can be done by the
+ \texttt{allneeded} script. This script will search a given set of
+ directories for DVI files and run them through \texttt{dvips}. All
+ these scripts just trigger font generation. \LaTeX{} and DVI files
+ generated by \texttt{allcm}/\texttt{allec} are removed when the
+ program terminates. Postscript output that is generated by
+ \texttt{dvips} is sent to \texttt{/dev/null}.
+
+ These programs accept the command line option ``\texttt{-r}'' (must
+ be the first option) to generate files for the magnification $707 /
+ 1000$ which is used by \texttt{dvired}. \texttt{allneeded} passes
+ options which correspond to existing file or directory names to
+ \texttt{find} (for locating DVI files). All other options given to
+ any of these three utilities are passed to \texttt{dvips}. So, by
+ passing \texttt{-D \textit{NNN} -mfmode \textit{some-mode}} or
+ \texttt{-P \textit{some-printer}}, you can generate fonts for a
+ specific resolution (\texttt{\textit{NNN}}) and mode
+ (\texttt{\textit{some-mode}}) or for a specific printer
+ (\texttt{\textit{printer}}).
+\end{description}
+
+
+\section{Concepts and configuration}
+
+\subsection{The \TeX{} Directory Structure (TDS)}
+\teTeX{}'s support tree with fonts, macros, documentation and other
+files (from now on called the ``texmf tree'') follows a certain
+structure: the \TeX{} Directory Structure (TDS). This is a standard
+developed by a \TeX{} Working Group of TUG. The TDS is defined in a
+way so that can be used by different implementations of \TeX{} on
+different platforms. Today, several \TeX{} distributions follow this
+standard: \teTeX, \TeX{} Live, fp\TeX{} and miktex, only to mention
+some. You need to understand this structure if you want to build your
+own texmf tree (e.g.,\@ with all your local additions) or add files
+into an existing texmf tree. The list of all texmf trees (optionally
+using some notation called ``brace expansion'' and \verb+!!+
+modifiers; the kpathsea manual
+explains this in detail) can be obtained by:\\
+\null\qquad\verb+kpsewhich -expand-var='$TEXMF'+ %$
+
+
+\def\replaceable#1{{\rmfamily $\langle$\textit{#1}$\rangle$}}
+Table
+\ref{tab:tds} gives a short overview of the TDS. It shows the proper
+location inside the TDS tree for several kind of files. The complete
+documentation for TDS can be accessed by
+\dlink{../../../texmf-dist/doc/help}{tds}{\dviext}. If you want to see some examples, just
+look at the main texmf tree of \teTeX. It has several thousand
+files.\bigskip
+
+\begin{table}[htbp]
+ \centering
+ \begin{tabular}{cl}
+ \toprule
+ \TeX{} macros & tex/\replaceable{format}/\replaceable{package}/\\
+ font files &
+ fonts/\replaceable{type}/\replaceable{supplier}/\replaceable{typeface}/ \\
+ \MF{} files & metafont/\replaceable{package}/ \\
+ documentation & doc/\replaceable{package}/ \\
+ sources & source/\replaceable{package}/\\
+ \BibTeX{} files & bibtex/\{bst,bib\}/\replaceable{package}/\\
+ \bottomrule
+ \end{tabular}
+ \caption{TDS: an overview}
+ \label{tab:tds}
+\end{table}
+
+The replaceable parts in this table mean:
+\begin{description}
+\item[\replaceable{format}] The name of the \TeX{} format, e.g.,\@
+ \texttt{latex} or \texttt{amstex}.
+\item[\replaceable{package}] The name of the package to which the file
+ belongs, e.g.,\@ \texttt{babel} or \texttt{seminar}.
+\item[\replaceable{type}] The name of the type of a font file, e.g.,\@
+ \texttt{pk} (packed bitmap), \texttt{tfm} (tex font metric),
+ \texttt{afm} (adobe font metric), \texttt{vf} (virtual font),
+ or \texttt{source} (\MF{} source).
+\item[\replaceable{supplier}] The name of the font supplier (to whom
+ the font file belongs), e.g.,\@ \texttt{adobe} or \texttt{urw}.
+\item[\replaceable{typeface}] The name of the typeface name (for this
+ font file), e.g.,\@ \texttt{times} or \texttt{cm} (for Computer
+ Modern).
+\end{description}
+
+It is important to know that the default search paths in \teTeX{} rely
+on this directory structure. So, if you add a file to the wrong
+directory tree, e.g.,\@ a TeX macro somewhere in the \texttt{fonts}
+subtree, that file will not be found correctly.
+
+\subsection{Overview of the predefined texmf trees}
+As described in the previous section, each texmf tree follows a well
+defined directory structure. This section lists all predefined texmf
+trees and their intended purpose. The command \verb+texconfig conf+
+shows you the values of the variables below, so that you can easily
+find out how they map to directory names in your installation.
+
+\begin{description}
+\item [TEXMFCONFIG] The tree specified by this variable will be used
+ by te\TeX's utilities \verb+texconfig+, \verb+updmap+ and \verb+fmtutil+
+ to store modified configuration data.
+\item [TEXMFVAR] The tree specified by this variable will by used by
+ the utilities \verb+texconfig+, \verb+updmap+ and \verb+fmtutil+ to
+ store (cached) runtime data such as format files and generated map
+ files.
+\item [TEXMFHOME] The expansion of this variable typically depends on \verb+$HOME+, % $
+ so this dynamically adjusts for each user to an individual
+ directory. The idea is to allow users to store their own versions of
+ macros, fonts etc. in this tree.
+\item [TEXMFSYSCONFIG] The tree specified by this variable will be
+ used by the utilities \verb+texconfig-sys+, \verb+updmap-sys+
+ and \verb+fmtutil-sys+ to store modified configuration data.
+\item [TEXMSYSFVAR] The tree specified by this variable will by used
+ by \verb+texconfig-sys+, \verb+updmap-sys+ and \verb+fmtutil-sys+ to
+ store (cached) runtime data such as format files and generated map
+ files.
+\item [TEXMFMAIN] This variable specifies the texmf tree where some
+ vital parts of the system are installed, such as helper scripts
+ (e.g. \verb+web2c/mktexdir+), pool files and other support files.
+\item [TEXMFLOCAL] This variable names a directory tree which should
+ be used for system-wide installation of additional or updated macro
+ packages, fonts etc.
+\item [TEXMFDIST] This variable names the directory tree which holds
+ the macros, fonts etc. as originally distributed.
+\end{description}
+
+\subsection{The file name database (ls-R)}
+texmf trees can get very large and to speed up searching in such a
+tree, a file name database is used. A file name database exists in the
+root of each texmf tree and has the name \verb+ls-R+. It should list
+each file in the texmf tree. The command \verb+texhash+ can be used to
+build an up-to-date file name database for each texmf tree. It should
+be used after files have been added to a texmf tree. However, you
+don't need to run \verb+texhash+ for files added by the automatic font
+generation or the \texttt{texconfig} utility.
+
+
+\subsection{Runtime configuration (texmf.cnf file)}
+\label{ss:texmfcnf}
+Search paths and other definitions (e.g.,\@ the static sizes of some
+arrays in \TeX{} or other programs) can be set up in configuration
+files named \texttt{texmf.cnf}. By changing the definitions in these
+configuration files (\teTeX's main \texttt{texmf.cnf} is
+\path|web2c/texmf.cnf| in the main texmf tree), the behavior of
+programs can be changed without recompiling them. Chapters 3 and 4 of
+the kpathsea manual (\dlink{../../../texmf-dist/doc/programs}{kpathsea}{\docext}) describe
+the path searching configuration in detail. Section 2.5 of the Web2c
+manual (\dlink{../../../texmf-dist/doc/programs}{web2c}{\docext}) describes some
+interesting runtime parameters that you might want to change.
+
+Some changes to the array sizes require you to rebuild the dump files
+that the program uses. Run the command \verb+texconfig init+ to
+rebuild all dump files after you have changed one of the array sizes.
+
+This implementation of \TeX{} can read and write files (as can every
+implementation of \TeX) and it can also call external commands (via
+the \verb+\write18+ stream). Some variables in the \verb+texmf.cnf+
+file control access to these features. The possibility to call
+external commands can be turned on or off (default is off). Access to
+file beginning ``\verb+.+'' is disallowed in restricted mode (default
+for reading files). In paranoid mode, file access is even more
+restricted and you cannot access files outside the current directory
+tree (default for writing files). If the first line of a document starts with \verb+%&+,
+it can be used to pass the name of the format file and/or a TCX file.
+Parsing the first line, is an extension that can be turned on or off
+(default is off) in the \verb+texmf.cnf+ file.
+
+\subsection{Using Postscript type 1 fonts}
+For every font you use with \TeX, a TFM (\TeX{} font metric) file is
+needed. Type~1 fonts usually do not have the same encoding that is
+used by \TeX{}, so additional metrics that do some re-encoding (virtual
+font files) are often needed. For a lot of font families, these font
+metric files and additional map files that you need (see below) can be
+found on CTAN servers in the directory \path|fonts|. If
+support for your fonts cannot be found there, you can use the
+\verb+fontinst+ utility (documentation:
+\dlink{../../../texmf-dist/doc/fontinst/base}{fontinst}{\dviext}) to create these.
+
+Postscript type 1 fonts can be used by \texttt{dvips}, \texttt{dvipdfm}, \texttt{xdvi},
+\texttt{gsftopk}, \texttt{ps2pk} and pdf\TeX. All of these programs
+require that you set up map files for these fonts. To ease the process
+of adding map file entries to the configuration files that are used by
+these tools, you should follow the following steps:
+\begin{itemize}
+\item if your fonts already come with a map file, put that
+ file into the \path|fonts/map/dvips/misc| directory in the main texmf tree.
+\item otherwise, you will need to create a map file yourself,
+ using the syntax as described in the dvips manual
+ (\dlink{../../../texmf-dist/doc/programs}{dvips}{\dviext}); make sure to set up these fonts
+ as ``download fonts'', not as ``built in'' fonts.
+\item run the command \verb+texhash+ and then make the map file known
+ to \verb+updmap+ by running the command %
+ \verb+updmap --enable Map file.map+ (where %
+ \verb+file.map+ denotes the filename of your map
+ file)
+\end{itemize}
+
+The programs \verb+gsftopk+ and \verb+ps2pk+ convert Postscript type 1
+fonts into bitmap fonts and make these fonts accessible to DVI drivers
+that do not directly support Postscript type 1 fonts. This
+conversion is automatically invoked by the \verb+mktexpk+
+script. That script calls \verb+gsftopk+ by default. If you do not
+have installed the \verb+ghostscript+ program (which \verb+gsftopk+
+needs), or if you want to use \verb+ps2pk+ for other reasons (e.g.,
+because it is usually faster) you just need to define the variable
+\verb+ps_to_pk+ to \verb+ps2pk+. This variable can be set in your
+environment or in the \verb+mktex.cnf+ file (see below).
+
+\subsection{Configuration files maintained by texconfig}
+\label{sec:cfgtexconfig}
+The \texttt{texconfig} utility is a user interface for changing the
+configuration of the \teTeX{} system. The configuration is stored in
+several individual files. This section documents the names of these
+files, their location in the texmf tree and their content. This
+explains how \texttt{texconfig} works and enables you to manually
+configure parameters which are not supported by \texttt{texconfig}.
+
+\begin{itemize}
+\item \path|dvips/config/config.ps| stores configuration information for
+ \texttt{dvips}. The default values are: 600\,dpi resolution; ljfour
+ \MF{} mode; A4 paper; offset for printing: 0pt,0pt; output goes to
+ \texttt{lpr} command.
+\item \path|tex/generic/config/pdftexconfig.tex| This file sets some
+ defaults for pdf\TeX{}, e.g.\@ the default paper size. This
+ information is dumped into format files, so if you modify this file
+ directly (without using texconfig), you have to rebuild the format
+ files by using the command \verb+fmtutil --all+.
+\item \path|xdvi/XDvi| This file sets some defaults (e.g. media size,
+ metafont mode) for \verb+xdvi+. It is read via the app-default
+ mechanism of X11. You can override these app-defaults as usual
+ (i.e.\@ via a file \verb+~/.Xdefaults+ or with resources managed by
+ \verb+xrdb+).
+\item \path|dvipdfm/config| defines the defaults for \verb+dvipdfm+,
+ e.g.\@ the default paper size, the command to convert encapsulated
+ postscript graphics into PDF etc.
+\item \path|web2c/mktex.cnf| This file sets the default metafont mode
+ used for automatically generated bitmap fonts, the resolution which
+ is used in scripts (e.g. \verb+mktextfm+) and a list of ``features''
+ used for automatic font generation. The most important ``features''
+ are described below; for a full list, see section 2.2.9.1 of the
+ kpathsea manual
+ (\dlink{../../../texmf-dist/doc/programs}{kpathsea}{\docext}).
+ \begin{description}
+ \item [appendonlydir] Set the sticky bit on directories that have to
+ be created. The sticky bit has the effect that a file in such a
+ directory can only be removed by the owner of that directory or by
+ the owner of that file.
+ \item [varfonts] When this option is enabled, fonts that would
+ otherwise be written to some texmf tree go below the
+ \verb+VARTEXFONTS+ directory instead. The default value is in
+ \path|/var/tmp/texfonts|. The ``Linux File System Standard''
+ recommends \path|/var/tex/fonts|. The \verb+varfonts+ setting in
+ \verb+MT_FEATURES+ is overridden by the environment variable
+ \verb+USE_VARTEXFONTS+: if set to 1, the feature is enabled, and
+ if set to 0, the feature is disabled.
+ \item [texmfvar] Force generated files that would go into a system
+ tree (as defined by \verb+SYSTEXMF+) into \verb+TEXMFVAR+. The
+ \verb+varfonts+ feature takes precedence if also set. A user can
+ override this setting in either direction by setting
+ \verb+USE_TEXMFVAR+ to 1 or 0.
+ \end{description}
+\item \path|web2c/updmap.cfg| controls how \verb+updmap+ generates map
+ files for all supported tools. Besides some general parameters, all
+ active map files are listed here.
+\item \path|web2c/fmtutil.cnf| This file defines which format files
+ are built (and how) and which file can be used to customize the
+ hyphenation patterns that are loaded into these formats. The
+ programs \verb+fmtutil+ and \verb+texlinks+ (which are automatically
+ called if the formats are set up via \verb+texconfig+) operate on
+ this file. \verb+fmtutil+ can be used to create the format files
+ according to the ``rules'' defined in \verb+fmtutil.cnf+ (for a
+ brief description, just call \verb+fmtutil --help+). If you define a
+ new format file, you usually also need a symbolic link with the name
+ for the format to the appropriate \TeX{} engine (e.g.,
+ \verb+latex+~$\to$~\verb+pdfetex+). To create these links, just call the
+ \verb+texlinks+ script.
+\item hyphenation setup files as defined in \path|web2c/fmtutil.cnf|:
+ the third field of the file \path|fmtutil.cnf| defines names of
+ files which can be edited to customize hyphenation (for the format
+ which is named in the first field). Since \path|fmtutil.cnf| itself
+ is a configuration file, the list of files in the third field might
+ vary. Table~\ref{tab:hyphx} shows the names of the files used in
+ the default configuration.
+ \begin{table}[htbp]
+ \centering
+ \begin{tabular}{ll}
+ \toprule
+ file name & used by format\\
+ \midrule
+ \path|tex/context/config/cont-usr.tex| & cont-en\\
+ \path|tex/generic/config/language.dat| & latex, pdflatex\\
+ \path|tex/lambda/config/language.dat| & lambda, lamed\\
+ \path|tex/plain/config/language.def| & etex, pdfetex\\
+ \bottomrule
+ \end{tabular}
+ \caption{files for setting up hyphenation}
+ \label{tab:hyphx}
+ \end{table}
+ Additional files (used by formats that are disabled in the default
+ configuration) are: \path|platex/config/language.dat| and
+ \path|mex/config/mexconf.tex|.
+\end{itemize}
+
+
+\subsection{Automatic font generation}
+By setting various ``features'' (see \ref{sec:cfgtexconfig}) the
+automatic font generation can be customized in many ways. The tool
+\verb+texconfig+ offers support in configuring and setting up the
+directories where automatically generated fonts end up.
+
+In the default configuration of te\TeX, all automatically generated
+fonts end up in the directory tree which is specified by the
+\verb+VARTEXFONTS+ variable. The command line mode of \verb+texconfig+
+(\emph{not} the interactive mode) allows you to manipulate the path
+and the permissions of this directory tree and also adjusts the
+``features'' for automatic font generation to match the chosen
+directory permissions:
+
+\begin{description}
+\item [texconfig font vardir DIR] This changes the path which is
+ stored in the \verb+VARTEXFONTS+ variable to \verb+DIR+. You must
+ have write permissions to the main \verb+texmf.cnf+ file, because
+ the variable is stored there.
+\item [texconfig font rw] This makes the \verb+VARTEXFONTS+ directory
+ (and subtrees \verb+pk+, \verb+tfm+, \verb+source+) world writable
+ and sets the ``features'' \verb+appendonlydir+ and \verb+varfonts+
+ in the config file \verb+mktex.cnf+. To change the global
+ \verb+mktex.cnf+ file (instead of modifying an individual copy), use
+ \verb+texconfig-sys+ instead of \verb+texconfig+.
+\item [texconfig font ro] This makes the \verb+VARTEXFONTS+ directory
+ (and subtrees \verb+pk+, \verb+tfm+, \verb+source+) writable for the
+ owner only and sets the ``features'' \verb+texmfvar+ in the config
+ file \verb+mktex.cnf+. To change the global \verb+mktex.cnf+ file
+ (instead of modifying an individual copy), use \verb+texconfig-sys+
+ instead of \verb+texconfig+.
+\end{description}
+
+The assumption behind the manipulations of \verb+texconfig+ is that
+you set up a world-writable \verb+VARTEXFONTS+ tree if you want all
+generated fonts (by all users) to be stored there. If you set the
+global \verb+VARTEXFONTS+ tree to read-only, then the \verb+texmfvar+
+is activated which results in a user-specific default destination for
+automatically generated fonts (\verb+$TEXMFVAR/fonts+). % $
+
+\subsection{TCX files}
+TCX (\TeX{} character translation) files help \TeX{} support direct
+input of 8-bit international characters if fonts containing those
+characters are being used. Specifically, they map an input (keyboard)
+character code to the internal \TeX{} character code (a superset of
+ASCII).
+
+\teTeX{} has the TCX files \verb+il1-t1.tcx+ and \verb+il2-t1.tcx+
+which support ISO Latin 1 and ISO Latin 2, respectively, with
+Cork-encoded fonts (a.k.a.: the T1 encoding). TCX files for Czech,
+Polish, and Slovak are also provided.
+
+All TCX files that are distributed as part of \teTeX{} can be found in
+the web2c subdirectory of the main texmf tree; their file name
+extension is \verb+.tcx+.
+
+You can specify a TCX file to be used for a particular \TeX{} run by
+specifying the command-line option
+\hbox{\texttt{-translate-file=\textsl{tcxfile}}} or (preferably)
+specifying it explicitly in the first line of the main document
+\hbox{\texttt{\%\& -translate-file=\textsl{tcxfile}}}. Note, however,
+that parsing the first line of an input file in an extension that is
+disabled by default and has to be turned on via command line switch
+(\verb+-parse-first-line+) or in the \verb+texmf.cnf+ file (see
+section \ref{ss:texmfcnf}).
+
+When processing a document using a TCX file, you usually must not
+use \LaTeX's \verb+inputenc+ package. One exception to this rule are
+TCX files that map all characters to their original position such as
+\verb+cp8bit.tcx+, \verb+cp227.tcx+ and \verb+natural.tcx+. The purpose
+of these TCX files is to manipulate the ``printability'' attribute in
+\TeX's internal tables.
+
+\subsection{Creating PDF files}
+If you want to create PDF documents with the help of \TeX, there are
+at least three different ways to do this
+\begin{enumerate}
+\item translate your \TeX{} sources directly into PDF by using pdf\TeX.
+\item translate DVI files generated by \TeX{} into PDF by using the
+ \texttt{dvipdfm} program (now included in \teTeX).
+\item translate a Postscript file generated by \TeX{} and
+ \texttt{dvips} into PDF by using Adobe Acrobat or
+ the \texttt{ps2pdf} utility included in ghostscript.
+\end{enumerate}
+When using \texttt{ps2pdf}, you should make sure to use at least
+version 6.50 of ghostscript. Earlier versions are known to have
+serious restrictions on creating PDF output.
+
+No matter which approach you use, there is one common rule when creating
+quality PDF files: you should avoid bitmap fonts. They just display
+very poorly on screen when used in PDF documents (which is caused by
+poor bitmap rendering of Adobe Acrobat Reader in all versions up to 5.x).
+
+Using only the fonts provided by \teTeX, you have more choices for
+which fonts to use. The following typeface families are included in
+Postscript type~1 format:
+\begin{itemize}
+\item Computer Modern and the AMS fonts (extended versions with
+ polish, czech and slovak and russian letters are available, too); a
+ special extension to Computer Modern providing lots of additional
+ characters (most, but not exclusively accents) are the Latin Modern
+ fonts
+\item the full set of the 35 basic ``LaserWriter fonts'' (see psnfss
+ documentation, supporting other fonts are pazo, tx/px fonts)
+\item Bitstream Charter
+\end{itemize}
+
+The EC fonts are not included in type 1 format in te\TeX. If
+you have a \LaTeX{} document that uses EC fonts, you have at
+least two ways to get around this problem. The first is to stop
+using EC fonts---which can in most cases be done by switching
+to the Latin Modern fonts. Usually, the EC fonts are activated by
+\verb+\usepackage[T1]{fontenc}+ or \verb+\usepackage{t1enc}+ and you
+just have to add \verb+\usepackage{lmodern}+. The second is to use the
+CM-SUPER Type~1 fonts, not included in \teTeX, but available on CTAN
+servers in the directory \path|fonts/ps-type1/cm-super|. This package is
+pretty huge, but it contains all EC fonts in outline format and much more.
+
+If the Latin Modern solution works for you, this is the recommended
+one for the following reasons:
+\begin{itemize}
+\item quality: the Latin Modern fonts have been created by using a
+ better technology and they have been carefully hand-optimized
+ (hinting, kerning, accent positioning etc.)
+\item the Latin Modern fonts are already included in te\TeX
+\item the resulting files are usually much smaller
+\end{itemize}
+
+\section{Release notes for te\TeX{} 2.0}
+Some default settings of ``\texttt{tex}, the Web2C implementation of
+\TeX'' have changed. We determined that some extensions were in fact
+in conflict with the strict definition of TeX as laid down by Knuth.
+
+The most notable change is that parsing of \verb+%&+ constructs in the
+first line of an input file is now disabled by default -- it can be
+enabled in \texttt{texmf.cnf} if you desire this. In that case, tex
+will announce itself as ``TeXk'' and print an additional banner line
+saying
+that \verb+%&+-line parsing is enabled.
+
+We may encounter more places where the default behaviour is not what
+it should be, and proceed to make this optional (and by default off)
+in future versions of Web2C.
+
+
+\section{Release notes for te\TeX{} 3.0}
+This section briefly describes what has changed since the last major
+release.
+
+\subsection{New programs / font support / macro packages}
+Two programs (see section \ref{sec:components}) have been added with
+this release: Aleph and dvipng. Many macro packages have been added,
+too. The largest additions are the packages beamer and memoir. In the
+fonts sections, some additions and updates have happened, too. The
+largest change in this area is the addition of the Latin Modern Fonts
+(\verb+lmodern+) in Postscript Type 1 format. These fonts are not as
+exhaustive as the \verb+cmsuper+ fonts, but they are of very good
+quality and sufficient for languages which use Latin characters. Using
+the Latin Modern Fonts is in most cases preferable over using the
+\verb+ae+ fonts (e.g. PDF files with accents are searchable, text
+extraction works better).
+
+\subsection{Changes to web2c}
+\begin{itemize}
+\item \TeX{} now uses the new \verb+tex.web+ (version 3.141592) from
+ December 2002 (fixed \verb+\xleaders+, glueset, weird alignments).
+\item enc\TeX{} (see
+ \dlink{../../../texmf-dist/doc/generic/enctex}{encdoc-e}{\dviext})),
+ a \TeX{} extension by Petr Ol\v s\'ak for input reencoding is now
+ available (for non Omega based engines). The new functionality is
+ enabled by setting the \verb+-enc+ switch at format generation time.
+ It defines 10 new primitives which can be used to control \TeX{}'s
+ internal character translation tables and proper multibyte input
+ (e.g. for handling UTF-8).
+\item The \verb+\input+ primitive in \verb+tex+ (and \verb+mf+ and
+ \verb+mpost+) now accepts double quotes containing spaces and other
+ special characters. Typical examples:
+\begin{verbatim}
+\input "filename with spaces" % plain
+\input{"filename with spaces"} % latex
+\end{verbatim}
+See the Web2C manual for more: \dlink{../../../texmf-dist/doc/programs}{web2c}{\docext}.
+\end{itemize}
+
+\subsection{Modifications to the directory structure and file searching}
+\begin{description}
+
+\item [split of texmf trees] The instruction of installing te\TeX{}
+ from the sources that I provide have been changed. The unpacked
+ texmf tarball (\verb+$prefix/share/texmf-dist+, %$
+ set up as \verb+$TEXMFDIST+ %$
+ in \verb+texmf.cnf+) is no longer mixed with the files that are
+ installed via ``\verb+make install+'' from building and installing
+ the program sources. These files (e.\,g. format files) that are more
+ tied up with the programs end up in the directory
+ \verb+$prefix/share/texmf+ (\verb+$TEXMFMAIN+).
+
+ So, the content of the texmf tarball remains completely unchanged
+ in \verb+$TEXMFDIST+ %$
+ and can easily be replaced with a new version without loosing other
+ runtime files that are not provided elsewhere.
+
+\item [changed location for font map files] Following a change
+ introduced with version 1.1 of the \TeX{} Directory Structure (see
+ \dlink{../../../texmf-dist/doc/help}{tds}{\dviext}), font map files
+ (\verb+.map+) are now only searched in subdirectories of
+ \verb+fonts/map+ in each \verb+texmf+ tree. The subdirectories of
+ \verb+fontname+, \verb+dvips+ and \verb+pdftex+ are no longer
+ searched for these files. The \verb+texmf+ trees from this
+ distribution follows this convention, but you might need to
+ rearrange some files if you maintain a local \verb+texmf+ tree.
+
+ Within the \verb+fonts/map+ tree the files are organized by syntax
+ and package. Known map file syntaxes are \verb+dvips+ (this is the
+ most common one), \verb+pdftex+ (a superset of the \verb+dvips+
+ syntax, e.\,g. the psname field is optional), \verb+dvipdfm+ and
+ \verb+vtex+. If some file is stored within the
+ \verb+fonts/map/dvips+ subtree, this does not mean that \verb+dvips+
+ is the only program that accesses these files. Other programs which
+ support the same syntax can use these files as well. It's just that
+ the program \verb+dvips+ has given its name for this syntax.
+
+ The next directory level specifies the package that the map file
+ belongs to. Example: the file \verb+charter.map+ of the
+ \verb+psnfss+ package follows the syntax of \verb+dvips+, so it is
+ stored in \verb+fonts/map/dvips/psnfss/charter.map+.
+
+ If you happen to see that some application cannot find a map file
+ which is stored in a wrong location, you have to move that file to
+ the right location. Try to find out the syntax and the package that
+ the file belongs to. If unsure, you can always choose ``unknown'',
+ since the only restriction for the directory tree below
+ \verb+fonts/map+ is that all file names are unique. The precise
+ \verb+<syntax>/<package>+ subdirectory does not affect searching. Do
+ not forget to update the filename database (\verb+ls-R+) by running
+ the command \verb+mktexlsr+ (resp. \verb+texhash+ which is the
+ same).
+
+\item [changed search path for map files] Map files used to be
+ searched along the \verb+$TEXCONFIG+ % $
+ variable (``dvips config'' format in terms of kpathsea internals).
+ This has been changed to the \verb+$TEXFONTMAPS+ % $
+ variable (``map'' format). The new location of the font map files is
+ included in the new default setting of \verb+$TEXFONTMAPS+, % $
+ but not in the default setting of \verb+$TEXCONFIG+. % $
+ The result is that an old application that searches font map files
+ along the ``dvips config'' format will not work.
+
+ For the ``C'' API of kpathsea this change means that map files
+ should be accessed using \verb+kpse_fontmap_format+ instead of
+ \verb+kpse_dvips_config_format+. For scripts that use kpsewhich, one
+ has to make sure that \verb+--format=map+ is used to search font map
+ files.
+
+\item [changed location for font encoding files] Together with font
+ map files (see above), the font encoding files have been given a new
+ location, too. The new location is
+ \verb+fonts/enc/<syntax>/<package>+. So, if you happen to see some
+ application to fail finding a font encoding file, just move it to
+ the right location in the texmf tree and update the filename
+ database.
+
+\item [omission of ``engine'' directories] Within the texmf trees, the
+ directory trees associated with the names of \TeX{} engines (e.\,g.
+ \verb+etex+, \verb+pdftex+, \verb+omega+, \verb+mltex+) are no
+ longer searched for \TeX{} macro packages. This means that the \verb+$TEXINPUTS+ %$
+ search path now lies completely within the \verb+tex+ subtree.
+
+ If you are using the above mentioned ``obsolete'' locations for
+ \TeX{} macro packages, you have to move them into the \verb+tex+
+ directory tree.
+\end{description}
+
+
+\subsection{Changes to texconfig / updmap / fmtutil}
+\label{sec:texconfig-changes}
+Following the new directory layout, it is desired not to modify
+the directory tree specified by the \verb+$TEXMFDIST+ % $
+variable any more. This makes it necessary to redirect generated
+output (e.g. map files created by updmap, updated config files)
+somewhere else.
+
+A new approach was taken by the implementation in te\TeX-3.0: two new
+variables have been introduced to specify where to store this data:
+\medskip
+
+\begin{tabular}{ll}
+ TEXMFCONFIG & configuration data\\
+ TEXMFVAR & variable (cached) runtime data
+\end{tabular}
+\medskip
+
+If a te\TeX{} installation is shared among several users, each of them
+can now use te\TeX{}'s configuration tools. For each of the three
+programs, a \verb+-sys+ variant exists. Calling this variant, e.g.
+\verb+texconfig-sys+, is the same as calling the regular variant,
+except that the variables TEXMFCONFIG and TEXMFVAR are redirected to
+TEXMFSYSCONFIG and TEXMFSYSVAR respectively. This means that the
+output trees for these commands will be TEXMFSYSCONFIG and
+TEXMFSYSVAR.
+
+The idea behind this is as follows: in the default settings of te\TeX,
+the variables TEXMFCONFIG and TEXMFVAR point to directories within the
+user's home directories. This means that each user can have his own
+configuration, but this makes it difficult to change the global
+defaults. That's where TEXMFSYSCONFIG and TEXMFSYSVAR come into play.
+These global trees are included in the search paths of all users. By
+using the \verb+-sys+ variant of the tools mentioned above, it becomes
+easy to administrate the global defaults. So, if for example, some
+administrator installs a font-package that comes with a map file in a
+system's tree (e.g. TEXMFLOCAL), then he should use \verb+updmap-sys+
+to add the new map file to the global configuration.
+
+
+\subsection{Changes to pdf\TeX{}}
+\begin{itemize}
+\item All parameters previously set through the special configuration
+ file \verb+pdftex.cfg+ must now be set through primitives;
+ \verb+pdftex.cfg+ is no longer supported. Some settings (e.g. the
+ default papersize) are loaded via \verb+pdftexconfig.tex+ into the
+ format files.
+\item \verb+\pdfmapfile+ and \verb+\pdfmapline+ provide font map
+ support from within a document.
+\item Microtypographic font expansion can be used more easily.\\
+ \url{http://www.ntg.nl/pipermail/ntg-pdftex/2004-May/000504.html}
+\item See the pdf\TeX\ manual for more:
+ \dlink{../../../texmf-dist/doc/pdftex/manual}{pdftex-a}{\pdfext}.
+\end{itemize}
+
+\subsection{pdfetex: the new default \TeX{} engine}
+te\TeX{} uses \verb+pdfetex+ for all formats except ``good-old''
+\verb+tex+. So, if you run \verb+latex+, the underlying engine will be
+\verb+pdfetex+. Some (broken) \TeX{} macros assume that pdf\TeX{} is
+running in PDF generation mode if they detect primitives that
+pdf\TeX{} has introduced (e.g. \verb+\pdfoutput+). This is wrong,
+since pdf\TeX{} can also be used (and is used) to generate DVI output.
+A reliable way of detecting PDF output mode is implemented in
+\verb+ifpdf.sty+ which works for plain \TeX{} as well as \LaTeX.
+
+
+\subsection{Changes to xdvik}
+\begin{itemize}
+\item On supported platforms the default toolkit of \verb+xdvi+
+ is now Motif. The GUIs for both toolkits (Motif and Xaw) have
+ been updated: There is a page list for easier navigation and
+ improved menus. The Motif version now has a toolbar and a
+ `Preferences' dialog for advanced customizations.
+
+ User preferences that are set via this dialog, the `Options'
+ menu and other dialogs are now saved in a file
+ \verb+~/.xdvirc+. This file overrides other X defaults, but
+ not the command-line options. (The option `\verb+-q+' and the X resource
+ `\verb+.noInitFile+' can be used to disable
+ this feature).
+
+\item The new GUI elements can be selectively toggled via the
+ option or the X resource `\verb+-expertmode+', which should be
+ used instead of `\verb+-expert+'\slash`\verb+-statusline+'.
+
+\item The functionality of \verb+oxdvi+ has been merged into
+ \verb+xdvi+; \verb+oxdvi+ no longer exists as a separate binary.
+
+\item \verb+Xdvi+ now supports string search and text selection
+ in DVI files (menu `Modes $\rightarrow$ Text Selection'),
+ printing DVI files and exporting them in PDF, Postscript and
+ plain text format. Pages can be marked with Mouse-2 in the
+ page list to select them for printing\slash saving.
+
+\item By default, \verb+xdvi+ will create a backup copy of the
+ DVI file so that viewing and navigating still works when the
+ DVI file is being written by \TeX.
+
+\item Other new features include: Support for color specials and
+ colored hyperlinks (customizable via the `\verb+linkstyle+
+ option and X resource), a `\verb+-watchfile+' option, a
+ `\verb+-unique+' option for loading new files into a running
+ instance of \verb+xdvi+, support for hyperrefs `hdvips'
+ specials, and a history of recently viewed files via the menu
+ `File $\rightarrow$ Open Recent'.
+\end{itemize}
+
+\subsection{Changes to dvipsk}
+\begin{itemize}
+\item The functionality of \verb+odvips+ has been merged into
+ \verb+dvips+; \verb+odvips+ no longer exists as a separate binary.
+\item Fonts used in included graphics files are no longer partially
+ downloaded.
+\end{itemize}
+
+
+\subsection{Improved documentation}
+\begin{itemize}
+\item The file \verb+doc/index.html+ in the distributed texmf tree
+ provides a much improved overview of the included documentation and
+ also provides a search facility for various \TeX{} related
+ information sources.
+
+ This file is generated by a PHP script which is included in te\TeX{}
+ as well.
+\item The PHP script \verb+doc/texdoc.php+ is able to offer a web
+ interface to the information provided in texdoctk databases.
+\end{itemize}
+
+\section{Resources}
+
+This section describes where you can find further (or more up-to-date)
+material and support in the world of \TeX.
+
+
+\subsection{Helpindex file for the documentation tree}
+The file \path+index.html+ in the root of \teTeX's
+documentation tree is a guide for the documentation that is included
+in \teTeX. It is a good point to start when you want to browse through
+the documentation or search for the solution of a specific problem.
+
+\subsection{Internet Newsgroups}
+If you encounter a problem which might not be \teTeX{} specific, but
+rather a general problem with \TeX{} or \LaTeX{} (e.g.,\@ ``How can I
+format a section heading in a different way?''), you should not raise
+your question on one of the mailing lists for \teTeX. In the following
+newsgroups, \TeX-related matters are discussed:
+\begin{description}
+\item [comp.text.tex] General things about \TeX{}.
+\item [news.answers] FAQs (also \TeX-related FAQs).
+\item [comp.answers] FAQs (also \TeX-related FAQs).
+\item [de.comp.text.tex] General things about \TeX{} (German).
+\item [fr.comp.text.tex] General things about \TeX{} (French).
+\item [comp.fonts] Font matters.
+\item [comp.programming.literate] Literate programming.
+\end{description}
+
+\subsection{\TeX{} User Groups}
+If you enjoy \TeX{}, you can join a \TeX{} user group to get support
+and software and help the \TeX{} community by your membership. The web
+site of the \TeX{} User Group (TUG), \path|http://tug.org/| has the
+necessary contact information for several \TeX{} user groups.
+
+
+\subsection{Mailing Lists}
+All \teTeX{} mailing lists are hosted on the same server which is
+managed by Majordomo software. Administrative requests,
+e.g.,\@ to (un)subscribe or to get an archive of a list are handled by
+the address: \path|majordomo@dbs.uni-hannover.de| To get a list
+of available commands that the Majordomo server understands, just send the
+message ``help'' to the server (in the body of a message, not in the
+header). The lists are:
+\begin{description}
+\item[tetex] General discussions + bug reports about \teTeX. General
+ \TeX{} matters that are not \teTeX-specific are not discussed.
+ Especially general questions about \TeX{} should \emph{not} be
+ directed to this list; use a newsgroup instead.
+\item[tetex-announce] This (moderated, low traffic) list is used for
+ important announcements about \teTeX, such as new releases or important
+ updates.
+\item[tetex-pretest] This is used to discuss beta versions of \teTeX{}
+ and to report bugs in these versions. Bug reports about official
+ (non-beta) releases should not be send here, but to the \texttt{tetex}
+ list.
+\end{description}
+
+Some of the packages which are contained in \teTeX{} (e.g.,\@ Omega
+and pdf\TeX) have special mailing lists or web resources on their own.
+The web site of TUG, \path+http://tug.org/+ has links to many of them.
+
+
+\subsection{Comprehensive TeX Archive Network (CTAN)}
+To aid the archiving and retrieval of \TeX{}-related files, a TUG
+(TeX User Group) working group developed the Comprehensive \TeX{}
+Archive Network (CTAN). Each CTAN site has identical material, and
+maintains authoritative versions of its material. These collections
+are extensive; in particular, almost everything mentioned in this
+article is archived at the CTAN sites, even if its location isn't
+explicitly stated.
+
+The CTAN sites are currently \verb|dante.ctan.org|,
+\verb|cam.ctan.org| and \verb|tug.ctan.org|. The organization of
+\TeX{} files on all these sites is identical and starts at
+\path|/tex-archive|. To reduce network load, please use the CTAN site
+or mirror closest to you. A complete and current list of CTAN sites
+and known mirrors can be obtained by using the \verb|finger| utility
+on `user' \verb|ctan@cam.ctan.org| (it also works with the other CTAN
+hosts); it is also available as file \path|help/ctan/CTAN.sites| in
+\teTeX's documentation tree.
+
+
+\subsection{The \TeX{} Catalogue}
+
+This catalogue lists many \TeX, \LaTeX, and related packages and
+tools. Most are available worldwide online from CTAN, the
+Comprehensive TeX Archive Network. Links are provided in this
+catalogue to available sources and documentation. The \teTeX{}
+documentation tree contains a version of this catalogue in
+\path|help/Catalogue|. The most recent online version is available at
+\begin{center}
+\url{http://texcatalogue.sarovar.org/}
+\end{center}
+
+\subsection{Frequently Asked Questions (FAQs)}
+Documents which list frequently asked questions and their answers (in
+short: FAQs) are collections of solutions to many common problems. The
+documentation tree of \teTeX{} contains the \teTeX{} FAQ in the
+directory \path|tetex| and the UKTUG FAQ in the directory
+\path|help/faq/uktug-faq|. The \teTeX{} FAQ can be read by the
+command \verb+texconfig faq+.
+
+\bibliographystyle{plain}
+\bibliography{TETEXDOC}
+
+\end{document}
+\endinput
+% LocalWords: teTeX Esser pdf dvips xdvi dvipdfm makeindex kpathsea texmf DVI
+% LocalWords: Amiga typefaces mpman btxdoc gftopk gftodvi gftype pktogf pktype
+% LocalWords: pltotf tftopl vftovp vptovf dvicopy dvitomp dvitype patgen tex
+% LocalWords: pooltype cnf TeXk behaviour pdftexman hyperref pdftex PNG JPG ps
+% LocalWords: jpeg MPS metapost EPS ghostscript perl epstopdf etex Unicode doc
+% LocalWords: OTPs dvilj hypertex config LaserJet dvi bookmarks thumbnails idx
+% LocalWords: Texinfo texinfo texdoc texdoctk tk dat texconfig updmap gsftopk
+% LocalWords: pk foo dvired dpi faxg allcm allec allneeded NNN mfmode TFM TDS
+% LocalWords: fp miktex tds metafont bibtex bst amstex babel tfm vf dvipng enc
+% LocalWords: afm urw ls TCX CTAN fontinst misc def cont usr ljfour pt lpr app
+% LocalWords: XDvi appendonlydir dosnames fontmaps Fontname nomfdrivers nomode
+% LocalWords: stripsupplier striptypeface varfonts Slovak tcxfile czech slovak
+% LocalWords: russian LaserWriter psnfss pazo tx px Bitstream EC AE Ppdf html
+% LocalWords: preconfigured Helpindex newhelpindex comp Majordomo un tetex faq
+% LocalWords: Catalogue catalogue UKTUG UK francaise TETEXDOC ctangle cweave
+% LocalWords: TEXMFCONFIG te TEXMFVAR TEXMFHOME TEXMFSYSCONFIG TEXMSYSFVAR mex
+% LocalWords: TEXMFMAIN TEXMFLOCAL TEXMFDIST texmfvar fmtutil pdflatex pdfetex
+% LocalWords: platex vardir DIR rw ro kerning glueset encdoc Petr Ol ak UTF
+% LocalWords: reencoding multibyte tarball psname resp API kpsewhich papersize
+% LocalWords: TEXMFSYSVAR Microtypographic xdvik GUIs Xaw hyperrefs hdvips PHP
+% LocalWords: dvipsk
diff --git a/Build/source/texk/tetex/doc/teTeX-FAQ b/Build/source/texk/tetex/doc/teTeX-FAQ
new file mode 100644
index 00000000000..025a668de92
--- /dev/null
+++ b/Build/source/texk/tetex/doc/teTeX-FAQ
@@ -0,0 +1,440 @@
+This is the FAQ for teTeX -- a TeX distribution for UNIX compatible
+systems. If you have questions about some points that remain unclear,
+or if you think that things could be described better, just drop me
+a line. My Email address:
+
+ Thomas Esser <te@dbs.uni-hannover.de>
+
+
+This article includes answers to:
+ 0) Where can I get the teTeX distribution?
+ 1) Is there a mailing list for teTeX?
+ 2) Now that I know that there is a mailing list: is there an archive
+ 6) I added some files in the texmf tree. But they are not found.
+ 7) When running some old dvi files through a dvi driver, I get warnings
+ 8) What is the best method to get pk fonts in a batch job?
+ 9) What to do if I need the fonts for several modes?
+ 10) Can I share the teTeX directory tree between different platforms?
+ 11) After mktexpk and mktextfm successfully generate fonts, kpathsea
+ 12) mktextfm runs Metafont with a mode that I do not like.
+ 14) How about adding program XYY or a macro package ABC to teTeX?
+ 15) I want to keep my files separate from the system's files. What do
+ I need to do to make sure that tex+friends will find my files?
+ 16) How do I deinstall an old version of teTeX?
+ 17) How do I manage to execute the right binaries on each platform?
+ 20) Using the Shrink* Buttons in xdvi, I cannot get back to see the full
+ 21) Which is the right way of using the AMS fonts/macros with LaTeX?
+ 23) Some things do not work properly. What should I do now?
+ 24) I get a error message about "TeX capacity exceeded". What can I do?
+ 25) The scrollbars of xdvi do not make sense to me. How do I move backwards?
+ 26) Is teTeX freely redistributable?
+ 27) dvips, pdftex, dvipdfm and xdvi use the European A4 size as default
+ 28) Why does ghostview display of my texts look so much worse than
+ 29) Metafont does not support the X display.
+ 32) How can I get the Euro currency symbol?
+ 33) Font map files and enc files from my local texmf tree are not
+ found by dvips / pdftex etc.
+ 34) texconfig, updmap and fmtutil just change my personal settings. How
+ can I change global defaults in a multi-user setup?
+
+Answers:
+
+0) Where can I get the teTeX distribution?
+
+ teTeX can be downloaded from CTAN and CTAN mirrors, e.g.:
+ ftp://ftp.dante.de/tex-archive/systems/unix/teTeX/
+ ftp://ftp.tex.ac.uk/tex-archive/systems/unix/teTeX/
+ ftp://ftp.duke.edu/tex-archive/systems/unix/teTeX/
+ ftp://sunsite.auc.dk/pub/tex/ctan/systems/unix/teTeX/
+
+1) Is there a mailing list for teTeX?
+
+ Yes. There is one list for discussion and one (moderated) list for
+ announcements. The discussion list is
+ tetex@dbs.uni-hannover.de
+ and the announcement list is
+ tetex-announce@dbs.uni-hannover.de
+ To subscribe to one of these lists, send a message containing the line
+ subscribe tetex
+ or
+ subscribe tetex-announce
+ resp. to majordomo@dbs.uni-hannover.de . The majordomo server
+ understands a few more commands. To get more help about our
+ server, send a mail with the line 'help' in the body.
+ Note that announcements are posted into both lists, so if you are
+ interested in discussions and announcements, you only need to
+ subscribe to the tetex list.
+
+2) Now that I know that there is a mailing list: is there an archive
+ of the list?
+
+ Yes. Just send a message with the line
+ get tetex archive
+ to majordomo@dbs.uni-hannover.de .
+
+6) I added some files in the texmf tree. But they are not found.
+
+ You need to run texhash to update the ls-R file. See answer to 15)
+ as well...
+
+7) When running some old dvi files through a dvi driver, I get warnings
+ about checksum errors.
+
+ The Postscript fonts are completely rearranged and the tfm files have
+ different checksums. If you have the (La)TeX source of your document,
+ you can get rid of the messages by running the sources through (La)TeX
+ again.
+
+8) What is the best method to get pk fonts in a batch job?
+
+ If you do have lots of dvi files (e.g. the documentation of teTeX),
+ just run the allneeded script on them. It runs all those files
+ through dvips (but output is send to /dev/null and not to a printer),
+ and thus calculates all fonts that are needed to print these files
+ (or preview with the same mode).
+
+ Example:
+ allneeded `kpsexpand '$TEXMFMAIN'`/doc >& /tmp/allneeded.log &
+
+ The above command calculates the pk files for all the installed
+ documentation in a background job.
+
+ If you do not have many dvi files, you can use the allcm and/or
+ allec scripts (allcm is for Computer Modern fonts, and allec for the
+ ec fonts). You need to have LaTeX installed and the scripts calculate
+ the fonts for all sizes and shapes that are used in typical LaTeX
+ documents.
+
+9) What to do if I need the fonts for several modes?
+
+ You only need the modes together with a printer or for previewing. You
+ should add a dvips configuration file for each printer using texconfig
+ and use the most common printing mode for previewing.
+ Then, any of the above scripts in 8) (allneeded, allcm, allec) can be
+ given an argument of the form -P PRINTER (where PRINTER must be a known
+ printer for dvips). This will calculate the fonts with the mode of
+ the printer PRINTER.
+
+ Example:
+ For dvips I have configured the printer lp to have the mode
+ ljfour. To get all ec fonts with ljfour mode, I would enter:
+
+ allec -P lp
+
+ If you do not have a dvips configuration file that corresponds to a
+ specific mode, you can still enter the mode on the command line.
+ Note however, that you should specify the corresponding resolution
+ as well.
+
+ Example:
+ To get all fonts in cx mode (CanonCX mode is used by many 300dpi
+ printers), give the command:
+
+ allcm -D 300 -mode cx
+
+ The flags -D and -mode are directly passed down to dvips.
+
+10) Can I share the teTeX directory tree between different platforms?
+
+ Yes. The only platform-specific directory is $TETEXDIR/bin. If you
+ want to use the same teTeX tree on different platforms, just put
+ the binaries for each platform into a different subdirectory of
+ $prefix/bin, e.g
+ /usr/local/teTeX/bin/i486-linux
+ /usr/local/teTeX/bin/sparc-solaris2.4
+ You can then mount the whole /usr/local/teTeX tree on all machines
+ and share almost all the files between them.
+
+11) After mktexpk and mktextfm successfully generate fonts, kpathsea
+ complains and does not use the newly generated font.
+
+ If you happen to see output like this:
+ ...
+ Transcript written on ecti1000.log.
+ /usr/local/teTeX/texmf/fonts/tfm/jknappen/ec/ecti1000.tfm
+ kpathsea: Appending font creation commands to missfont.log.
+ ...
+ then your shell is probably very broken. This problem is known with
+ the original bash 1.14.3 that has many problems with exit codes and
+ trap handling. Try the following line:
+
+ sh -c 'exit 1'; echo $?
+
+ The buggy bash gives 127 as result. Fixes for these problems have been
+ available e.g. from the internet newsgroup gnu.bash.bug, so not all
+ instances of bash 1.14.3 are broken. Later versions of bash should not
+ have that bug.
+
+12) mktextfm runs Metafont with a mode that I do not like.
+
+ Use texconfig and select a different mode as default mode.
+
+14) How about adding program XYY or a macro package ABC to teTeX?
+
+ Well, there are some things to take into account:
+ - I want to keep the size of the distribution small.
+ - I have only a limited amount of time.
+ - teTeX can be installed with a simple
+ ./configure && make && make install
+ on the most common UNIX platforms. Adding a new program could
+ break the whole thing.
+ Please, think about this before asking me to add something. But if a
+ really useful thing can be added without much effort and disk space
+ usage, I may decide to do that.
+
+ Another possibility is, that things are added to the contrib directory
+ of teTeX.
+
+15) I want to keep my files separate from the system's files. What do
+ I need to do to make sure that tex+friends will find my files?
+
+ If you are a local site administrator, please make use of the texmf
+ tree $TEXMFLOCAL; a single user installation of local additions
+ should go into the texmf tree $HOME/texmf. Mirror the structure
+ of the distributed texmf tree $TEXMFDIST. You can query the system
+ about these locations (TEXMFLOCAL / TEXMFDIST) by running e.g.
+ kpsewhich -var-value TEXMFLOCAL
+
+ The structure of these trees follows the TeX Directory Structure
+ (TDS) standard (revision 1.1). You can view this document by running
+ the command
+ texdoc tds
+
+ The following sections of the uktug faq deal with this topic:
+ $TEXMFDIST/doc/help/faq/uktug-faq/FAQ-instpackages.html
+ $TEXMFDIST/doc/help/faq/uktug-faq/FAQ-wherefiles.html
+ $TEXMFDIST/doc/help/faq/uktug-faq/FAQ-privinst.html
+
+ If texdoc properly knows how to load some html code into your browser,
+ you can view these pages by running e.g.
+ texdoc FAQ-instpackages.html
+
+ One thing mentioned in the uktug faq is so important that I want to
+ repeat here: you should always run the command
+ texhash
+ after you have added some file into a texmf tree.
+
+16) How do I deinstall an old version of teTeX?
+
+ Well, the simple answer is: rm -rf. But there may be some more things
+ you want to do. You may keep a backup of your .pk fonts or of some
+ local files you added to $TEXMF before you remove the old directory
+ tree. Note, however that from teTeX 0.2 to 0.3, there has been an
+ update of the CM fonts (Knuth has updated the Metafont sources). So
+ you may want to remove your old .pk files and have them recreated
+ with the new sources.
+
+ Another problem is, that there may be some symbolic links in
+ /usr/local/{bin,man} (or a similar directory) after you remove the
+ old teTeX directory tree and you may want to remove those links,
+ too. A simple way to do this, is the following:
+
+ cd /usr/local/bin
+ sh -c 'for i in *; do test -s $i || echo $i; done'
+
+ This loop echo'es all files with zero length, especially all stale
+ symbolic links. If you want to remove all files that are shown by the
+ command above, you can do this with:
+
+ sh -c 'for i in *; do test -s $i || rm -f $i; done'
+
+ You can repeat the above steps for other directories, as well
+ (e.g. /usr/local/man/man1 and /usr/local/man/man5).
+
+17) How do I manage to execute the right binaries on each platform?
+
+ Assuming that you have binaries for several platforms installed, your
+ binaries are in $TETEXDIR/bin/PLATFORM. The first thing you can try is
+ to set up your PATH with
+ SYSDIR=`uname -m`-`uname -s`
+ PATH=$TETEXDIR/bin/$SYSDIR:...
+ You may need to rename the PLATFORM directories for this method.
+
+ Another thing that may help is to include a local directory in your
+ PATH (e.g. /usr/local/bin) and create symbolic links for the binaries:
+ linux# ln -sf /usr/local/teTeX/bin/i486-linux/* /usr/local/bin
+ sun# ln -sf /usr/local/teTeX/bin/sparc-solaris2.4/* /usr/local/bin
+ ...
+
+ If you do not like the uname-method for your PATH and the symlink
+ method, you may consider installing a small wrapper program that
+ calls the programs for the right platform. Install the wrapper in
+ $TETEXDIR/bin and create a symbolic link for each binary.
+
+ Here an example:
+ TETEXDIR=/usr/local/teTeX
+ cd $TETEXDIR/bin
+ vi platf_wrapper # see script below ...
+ chmod +x platf_wrapper
+ list=`ls i486-linux` # get a list of programs.
+ for i in $list; do
+ ln -s platf_wrapper $i
+ done
+
+ Tell your users to include $TETEXDIR/bin in their PATH. Make sure
+ that TETEXDIR is either set to an absolute path (e.g. /usr/local/teTeX)
+ or to $SELFAUTODIR (but not $SELFAUTOPARENT), since the programs are
+ now found one directory level earlier.
+
+ Now the sample wrapper. Customize, if you need:
+
+ #!/bin/sh
+
+ # the path to the directories with the subdirs for each platform
+ BINDIR=/usr/local/teTeX/bin
+
+ # export the variable. If we are called again,
+ # we do not need to recalculate.
+ export THIS_PLATFORM
+
+ case "$THIS_PLATFORM" in
+ "")
+ case "`uname -s`" in
+ Linux)
+ THIS_PLATFORM=i486-linux;;
+ SunOS)
+ THIS_PLATFORM=sparc-solaris2.4;;
+ IRIX)
+ THIS_PLATFORM=mips-irix5.3;;
+ *)
+ echo "$0: fatal error: system not detected." >&2
+ exit 1
+ esac;;
+ esac
+
+ exec $BINDIR/$THIS_PLATFORM/`basename $0` "$@"
+
+20) Using the Shrink* Buttons in xdvi, I cannot get back to see the full
+ page on the screen.
+
+ The four buttons can be configured via X resources. Just add
+ them either to your personal X resources (usually ~/.Xdefaults)
+ or to xdvi's global configuration file XDvi which resides in
+ $TEXMFMAIN/xdvi. Such a resource setting might look like this:
+ XDvi*shrinkButton3: 6
+ (This example configures button 3 to do a shrinking by a factor of 6).
+
+
+21) Which is the right way of using the AMS fonts/macros with LaTeX?
+
+ Just \usepackage{amsmath} and/or \usepackage{amsfonts}. Read
+ the documentation in doc/latex/amsmath, doc/latex/amsfonts and
+ doc/latex/amscls included in the distributed texmf tree.
+
+ Do *not* \usepackage{amstex} (amstex.sty is just for compatibility
+ with old documents and only for use in LaTeX's 2.09 compatibility mode).
+
+ Add \usepackage{amssymb} to get full access to all AMS symbols.
+
+23) Some things do not work properly. What should I do now?
+
+ First, make sure that your "environment" is ok and run
+ texconfig confall
+ This gives you an idea about which binaries are found along your
+ PATH and if you have set some environment variables that might
+ confuse teTeX's programs. If in doubt, unset all variables that
+ are set in the "environment variables" section of the output.
+
+ If binaries other than teTeX's are found, then change the definition
+ of your PATH. Put the directory containing teTeX's binaries earlier
+ into your PATH, so that teTeX's binaries are found before any other
+ TeX related stuff.
+
+ Then, your ls-R file might be out of date. Run
+ texhash
+ and see if your problem goes away.
+
+ If your problem is due to old LaTeX209 files that do not work with
+ LaTeX2e, then read $TEXMF/doc/latex/base/clsguide.dvi.
+
+ If you cannot solve your problem by yourself, then
+ a) if you think your problem is a general question about TeX/LaTeX:
+ ask in some Newsgroup, such as comp.text.tex for help, or try to
+ contact a local TeX user group.
+ b) if you think there is a bug in a package contained in teTeX:
+ contact the maintainer of the package with a good bug report. Add my
+ Email address in the Cc field of your bug report, if you want.
+ c) if your problem seems to be teTeX specific (e.g. a problem with
+ one of the binaries or shell-scripts), then report it to the
+ teTeX mailing list (tetex@dbs.uni-hannover.de). Please
+ provide the following information:
+
+ * The version of teTeX you have. For example
+ teTeX version is 3.0
+ (the version information is displayed by running "texconfig conf").
+
+ * The flavor of Unix you are running (Solaris, HP, Linux, etc), and
+ its version. For example
+ The system is Solaris 2.4
+
+ * The output of the command
+ texconfig conf
+
+ * Possibly a *short* TeX file you have problem running, and
+ the whole output of `texcommand filename', say, until the
+ first error.
+
+24) I get a error message about "TeX capacity exceeded". What can I do?
+
+ If there is a constant in the system's texmf.cnf file, just enlarge
+ this (by editing the texmf.cnf file) and run the command
+ texconfig init
+
+25) The scrollbars of xdvi do not make sense to me. How do I move backwards?
+
+ The scrollbars are what one calls Athena scrollbars. To scroll
+ forward, click the left mouse button on the location you would want
+ to scroll to the beginning of the displayed area. To scroll backward,
+ click the right mouse button on where you want to scroll the beginning
+ of the displayed area to. Click the middle mouse button for "dragging"
+ the beginning of the displayed area around.
+
+26) Is teTeX freely redistributable?
+
+ Yes. All parts of teTeX have been classified as being free software.
+
+27) dvips, pdftex, dvipdfm and xdvi use the European A4 size as default
+ papersize. How do I change this to make letterpaper the default?
+
+ Simple answer: use texconfig.
+ texconfig paper letter
+
+28) Why does ghostview display of my texts look so much worse than
+ with xdvi?
+
+ xdvi does antialiasing. If your version of ghostscript is
+ sufficiently new, it has the x11alpha device. Check for this with
+ gs -h
+ If it has, then putting
+ Ghostview*arguments: -sDEVICE=x11alpha
+ in your .Xdefault file (typically) will make ghostview use an
+ anti-aliasing display as well, at the cost of display speed.
+
+29) Metafont does not support the X display.
+ It may be that your Metafont binary is compiled without support for
+ the X windows system. If there exists a mfw binary, that one
+ has the missing X support you need.
+
+32) How can I get the Euro currency symbol?
+
+ In LaTeX, use the marvosym package (documentation: texdoc marvodoc).
+ It provides several Euro symbol by the command \EUR. The variants
+ \EURtm, \EURhv and \EURcr match are designed to be used together
+ with the fonts Times, Helvetica and Courier respectively.
+
+33) Font map files and enc files from my local texmf tree are not found
+ by dvips / pdftex etc.
+
+ With version 1.1 of the TeX Directory Structure, the location for
+ these files was changed. These files are font files and are now
+ stored in fonts/{map,enc}/<syntax>/<package>. So, the solution to
+ your problem is to rearrange these files in your tree and then call
+ the command texhash. More help is given in the release notes section
+ of the teTeX manual (run the command "texdoc TETEXDOC" to read it)
+ and on the web page http://www.tug.org/texlive/mapenc.html.
+
+34) texconfig, updmap and fmtutil just change my personal settings. How
+ can I change global defaults in a multi-user setup?
+
+ Simple answer: use the -sys variant of the tool: texconfig-sys,
+ updmap-sys and fmtutil-sys.
diff --git a/Build/source/texk/tetex/dvi2fax b/Build/source/texk/tetex/dvi2fax
new file mode 100755
index 00000000000..fdfa83211eb
--- /dev/null
+++ b/Build/source/texk/tetex/dvi2fax
@@ -0,0 +1,41 @@
+#!/bin/sh
+# options for dvips are passwd down
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+progname=`basename "$0"`
+help()
+{
+ echo "Usage: $progname [-hi|-lo] file[.dvi] [options for dvips]"
+ echo " -hi: use high fax resolution (204x196) (default)"
+ echo " -lo: use low fax resolution (204x98)"
+ echo
+ echo "Example: $progname foo -l 2"
+}
+
+dvipsconf=dfaxhigh; gsdev=dfaxhigh
+case $1 in
+ -hi) gsdev=dfaxhigh; shift;;
+ -lo) gsdev=dfaxlow; shift;;
+esac
+
+case $# in
+ 0) help >&2
+ exit 1
+ ;;
+esac
+
+NAME=`basename "$1" .dvi`
+dvips "$@" -P$dvipsconf -f |
+ gs -q -dSAFER -sDEVICE=$gsdev -sOutputFile="$NAME-%03d.fax" -sNOPAUSE -
diff --git a/Build/source/texk/tetex/dvi2fax.man b/Build/source/texk/tetex/dvi2fax.man
new file mode 100644
index 00000000000..f7c436d6e33
--- /dev/null
+++ b/Build/source/texk/tetex/dvi2fax.man
@@ -0,0 +1,22 @@
+.TH DVI2FAX 1 "October 30, 1999"
+.\" man page by Jim Van Zandt <jrv@vanzandt.mv.com> -*- nroff -*-
+.SH NAME
+dvi2fax \- convert a TeX DVI file to G3 fax format
+.SH SYNOPSIS
+\fBdvi2fax\fP [\fB-hi\fP|\fB-lo\fP] \fIfile\fP[.dvi] [\fIoptions for dvips\fP]
+.SH DESCRIPTION
+\fBdvi2fax\fP uses \fBdvips\fP(1) to convert a TeX DVI file to PostScript,
+then \fBgs\fP(1) to convert the PostScript to G3 fax file format.
+.SH OPTIONS
+.LP
+.B -hi
+use high fax resolution (204x196 dpi) (default).
+.LP
+.B -lo
+use low fax resolution (204x98).
+.PP
+\fBdvips\fP options can follow the file name.
+.SH EXAMPLE
+Example: dvi2fax foo -l 2
+.SH SEE ALSO
+\fBdvips\fP(1), \fBgs\fP(1).
diff --git a/Build/source/texk/tetex/dvired b/Build/source/texk/tetex/dvired
new file mode 100755
index 00000000000..4eb3586119d
--- /dev/null
+++ b/Build/source/texk/tetex/dvired
@@ -0,0 +1,98 @@
+#!/bin/sh
+#==============================================================================
+# Version: 0.3
+# Module: dvired
+# Purpose: Translate dvi-file into postscript with reduced output size.
+# Two logical pages will be put on onto each physical sheet of
+# paper.
+# System: Linux. UNIX(tm) systems may work as well :-)
+# Requires: pstops (http://www.dcs.ed.ac.uk/home/ajcd/psutils/), dvips
+# Created: 19.11.1992
+# Last Change: 13.08.1999
+# Language: sh
+# Author: Thomas Esser
+# Address: te@dbs.uni-hannover.de
+# Copyright: (c) 1994, 1999 by Thomas Esser
+# Copying: GNU GENERAL PUBLIC LICENSE
+#==============================================================================
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+help()
+{
+ cat <<eof
+
+Usage: dvired [options] file
+
+This programm behaves like dvips, execpt fot the fact that two logical
+pages will be put on onto each physical sheet of paper.
+
+For options see dvips(1). This program only interprets the options
+-o, -P and -f. All other options will directly be passed to dvips.
+
+If your paper is not in A4 format, you need to adjust the dimensions
+in this program.
+
+Examples: (it is assumed that the PRINTER-variable is set)
+ dvired -Plw foo send output to printer lw
+ dvired -o foo.ps foo send output to file foo.ps
+ dvired -pp4-7 foo send 4 output-pages to printer
+ dvired foo -f | ghostview - preview output with ghostview
+eof
+}
+
+case $# in
+0) help ; exit 1 ; ;;
+esac
+
+# This will work for A4 paper.
+paper=a4 ; pstopsopt='2:0(7.44mm,7.44mm)+1(7.44mm,-141.06mm)'
+
+# The following are *UNTESTED*. Please let me know whether they work
+# or not, if you can test them.
+#paper=a3 ; pstopsopt='2:0(7.44mm,7.44mm)+1(7.44mm,-202.56mm)'
+#paper=letter ; pstopsopt='2:0(7.44mm,7.44mm)+1(7.44mm,-132.26mm)'
+#paper=legal ; pstopsopt='2:0(7.44mm,7.44mm)+1(7.44mm,-170.36mm)'
+#paper=ledger ; pstopsopt='2:0(7.44mm,7.44mm)+1(7.44mm,-132.26mm)'
+#paper=tabloid ; pstopsopt='2:0(7.44mm,7.44mm)+1(7.44mm,-208.46mm)'
+
+of=""
+lpr_opt=""
+
+case "$PRINTER" in
+"") dvips_pre="" ;;
+*) dvips_pre="-P$PRINTER" ;;
+esac
+
+dvips_pre="$dvips_pre -t $paper -t landscape"
+
+while [ ! -z "$1" ] ; do
+ case $1 in
+ -P) of="" ; dvips_pre="$dvips_pre -P$2" ; lpr_opt="-P$2"
+ shift ;;
+ -P*) of="" ; dvips_pre="$dvips_pre $1" ; lpr_opt="$1" ;;
+ -o) of="$2"
+ shift ;;
+ -o*) of="`echo $1| sed 's/..//'`" ;;
+ -f) of="-" ;;
+ *) opt="$opt $1"
+ esac
+ shift
+done
+
+case "$of" in
+"") dvips -x707 $dvips_pre $opt -f | pstops -q $pstopsopt | lpr $lpr_opt
+ ;;
+"-") dvips -x707 $dvips_pre $opt -f | pstops -q $pstopsopt
+ ;;
+*) dvips -x707 $dvips_pre $opt -f | pstops -q $pstopsopt > "$of"
+ ;;
+esac
diff --git a/Build/source/texk/tetex/dvired.man b/Build/source/texk/tetex/dvired.man
new file mode 100644
index 00000000000..f76e58087a3
--- /dev/null
+++ b/Build/source/texk/tetex/dvired.man
@@ -0,0 +1,63 @@
+.TH dvired 1 "09/94" "teTeX" "teTeX"
+.SH NAME
+dvired \- print dvi-files
+.SH SYNOPSIS
+.B dvired
+[
+.B options
+]
+.B file
+.SH DESCRIPTION
+.I dvired
+behaves like
+.IR dvips ,
+except for the fact that two logical pages are put onto each physical
+sheet of paper.
+
+For
+.IR options ,
+see
+.IR dvips (1).
+This program only interprets the following options:
+
+.I \-o file
+\- redirect output into
+.I file.
+
+.I \-P printer
+\- direct output to
+.I printer.
+
+.I \-f
+\- direct output to stdout.
+
+Any other option is passed directly to
+.IR dvips .
+
+.SH EXAMPLES
+It is assumed that the PRINTER-variable is set.
+
+.B dvired \-Plw foo
+\- send output to printer
+.IR lw .
+.br
+.B dvired \-o foo.ps foo
+\- send output to file
+.IR foo.ps .
+.br
+.B dvired \-pp4-7 foo
+\- send 4 pages (reduced onto 2 sheets) of
+.I foo
+to the printer.
+.br
+.B dvired foo \-f | ghostview \-
+\- preview output with ghostview.
+
+.SH "SEE ALSO"
+.IR dvips (1)
+.SH BUGS
+.I dvired
+is fixed on A4 paper size. If you want to use it with other paper, you have
+to change the settings within the source.
+.SH AUTHOR
+Thomas Esser <te@dbs.uni-hannover.de>
diff --git a/Build/source/texk/tetex/e2pall b/Build/source/texk/tetex/e2pall
new file mode 100755
index 00000000000..2997f8b1102
--- /dev/null
+++ b/Build/source/texk/tetex/e2pall
@@ -0,0 +1,89 @@
+#!/usr/bin/env perl
+
+# Author: Jody Klymak <jklymak@apl.washington.edu>, publisted by a posting
+# to the pdftex mailinglist.
+
+# recursively finds all your eps files. Looks down \input{fname}.
+# CAVEATS:
+# 1) cannot handle \input{fname} split over more than one line.
+# 1.5) cannot handle multiple \input{} or \includegraphics{} on one line.
+# 2) Must be run from same directory as the Latex file.
+# 3) Does not look down $TEXINPUTS or anything fancy like that...
+# 4) Handling of \include is untested (though I guess its trivial)
+# 5) Assumes *all* your graphics inclusions are [e]ps. But don't
+# fret, because if they are not epstopdf dies anyhow....
+# 6) Does not distinguish between percent (\%) and comment (%).
+
+# Changelog:
+# 20030103 -- Lachlan Andrew <lha@users.sourceforge.net>
+# * Only append '.tex' if $fname doesn't exist.
+# * Correctly handle lines with '}' after the \includegraphics{}
+# * Allow multiple extensions for graphics files. .eps -> .ps -> none
+# (Should try them in the same order as \includegraphics does
+# -- given by \DeclareGraphicsExtensions{}?)
+# * Allow \include the same way as \input
+# * Allow \includegraphics{} to be split over multiple lines
+# * Check that commands begin with '\', and allow spaces before arguments
+
+# EDIT these two lines for your system....
+
+$Eps2PdfCom = "epstopdf";
+$ThisFunCom = "e2pall";
+
+$fname=$ARGV[0];
+
+# check for a *.tex at the end...
+if ((-f "$fname")=="" && $fname !~ /.tex$/){
+ $fname = "$fname.tex";
+}
+
+open(TEXFILE,$fname) or die "Cannot open file $fname";
+# print "Finding *.eps files in $fname\n";
+
+$seekingArg = 0;
+while($line=<TEXFILE>){
+ # truncate $line after % sign....
+ $line=~s/%.*//;
+ # check for /input....
+ if ($line=~/\\input *{([^}]*)}/){
+ print `$ThisFunCom $1`;
+ }
+ # check for /include....
+ if ($line=~/\\include *{([^}]*)}/){
+ print `$ThisFunCom $1`;
+ }
+
+ $base = "";
+ if ($line=~/\\includegraphics.*{([^}]*)}/){
+ $base = $1;
+ }
+ elsif ($seekingArg==1 && ($line=~/{([^}]*)}/)){
+ $base = $1;
+ }
+ elsif ($line=~/\\includegraphics/){
+ $seekingArg = 1;
+ }
+
+ if ($base ne "") {
+ $seekingArg = 0;
+ if ((-f "$base.eps")!="") {
+ $srcfile = "$base.eps";
+ }
+ elsif ((-f "$base.ps")!=""){
+ $srcfile = "$base.ps";
+ }
+ else {
+ $srcfile = $base;
+ }
+ # check that the [e]ps version is newer than the pdf version....
+ if ((-M "$base.pdf")=="" || (-M "$base.pdf") >= (-M "$srcfile")){
+ print "Constructing \t $base.pdf from $srcfile\n";
+ print `$Eps2PdfCom $srcfile`;
+ }
+ else{
+ print "$base.pdf \t is up to date with $srcfile\n";
+ }
+
+ };
+}
+close(TEXFILE);
diff --git a/Build/source/texk/tetex/e2pall.man b/Build/source/texk/tetex/e2pall.man
new file mode 100644
index 00000000000..b102568b53a
--- /dev/null
+++ b/Build/source/texk/tetex/e2pall.man
@@ -0,0 +1,55 @@
+.TH "e2pall" "1" "August 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+e2pall \- convert all EPS files in a LaTeX document to PDF
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBe2pall\fP \fITEXFILE\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBe2pall\fP searches through \fITEXFILE\fP for \eincludegraphics
+commands to find the base names of image files\&. When it finds one,
+\fBe2pall\fP runs \fBepstopdf\fP(1) to create a PDF file from the EPS
+file\&.
+.PP
+\fBe2pall\fP will check to be sure that an existing PDF file is
+up-to-date with the EPS file, and will not run \fBepstopdf\fP(1) if
+the PDF file is newer than the EPS file\&.
+.PP
+.SH "BUGS"
+.PP
+.IP ""
+Seems to be broken
+.IP ""
+Cannot handle \einput{\fIfilename\fP} or
+\eincludegraphics{\fIfilename\fP} split over more than one
+line
+.IP ""
+Must be run from same directory as the LaTeX file
+.IP ""
+Does not look down $TEXINPUTS
+.IP ""
+Cannot handle documents that use \einclude commands
+.IP ""
+Assumes \fIall\fP files included with \eincludegraphics are EPS
+files
+.IP
+.PP
+.SH "SEE ALSO"
+.PP
+\fBepstopdf\fP(1)
+.PP
+.SH "AUTHOR"
+.PP
+\fBe2pall\fP was written by Jody Klymak <jklymak@apl\&.washington\&.edu> and published in a posting to
+the <pdftex@tug\&.org> (mailing list)\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
+.PP
diff --git a/Build/source/texk/tetex/epstopdf b/Build/source/texk/tetex/epstopdf
new file mode 100755
index 00000000000..e7ea5f239df
--- /dev/null
+++ b/Build/source/texk/tetex/epstopdf
@@ -0,0 +1,406 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q'
+ if 0;
+use strict;
+
+# Change by Thomas Esser, Sept. 1998: The above lines allows us to find
+# perl along $PATH rather than guessing a fixed location. The above
+# construction should work with most shells.
+
+# A script to transform an EPS file so that:
+# a) it is guarenteed to start at the 0,0 coordinate
+# b) it sets a page size exactly corresponding to the BoundingBox
+# This means that when Ghostscript renders it, the result needs no
+# cropping, and the PDF MediaBox is correct.
+# c) the result is piped to Ghostscript and a PDF version written
+#
+# It needs a Level 2 PS interpreter.
+# If the bounding box is not right, of course, you have problems...
+#
+# The only thing I have not allowed for is the case of
+# "%%BoundingBox: (atend)", which is more complicated.
+#
+# Sebastian Rahtz, for Elsevier Science
+#
+# now with extra tricks from Hans Hagen's texutil.
+#
+# History
+# 1999/05/06 v2.5 (Heiko Oberdiek)
+# * New options: --hires, --exact, --filter, --help.
+# * Many cosmetics: title, usage, ...
+# * New code for debug, warning, error
+# * Detecting of cygwin perl
+# * Scanning for %%{Hires,Exact,}BoundingBox.
+# * Scanning only the header in order not to get a wrong
+# BoundingBox of an included file.
+# * (atend) supported.
+# * uses strict; (earlier error detecting).
+# * changed first comment from '%!PS' to '%!';
+# * corrected (atend) pattern: '\s*\(atend\)'
+# * using of $bbxpat in all BoundingBox cases,
+# correct the first white space to '...Box:\s*$bb...'
+# * corrected first line (one line instead of two before 'if 0;';
+# 2000/11/05 v2.6 (Heiko Oberdiek)
+# * %%HiresBoundingBox corrected to %%HiResBoundingBox
+# 2001/03/05 v2.7 (Heiko Oberdiek)
+# * Newline before grestore for the case that there is no
+# whitespace at the end of the eps file.
+# 2002/02/18 v2.8draft (Gerben Wierda)
+# * Handle different eol styles transparantly
+# * Applied fix from Peder Axensten for Freehand bug
+# 2002/02/21 v2.8draft (Gerben Wierda)
+# * Fixed bug where last line of buffer was not copied out (ugh!)
+# 2003/04/22 v2.9draft (Gerben Wierda)
+# * Fixed bug where with cr-eol files everything up to the first %!
+# * in the first 2048 bytes was gobbled (double ugh!)
+# 2004/03/17 v2.9.1draft (Gerben Wierda)
+# * No autorotate page
+# 2005/09/29 v2.9.2draft (Gerben Wierda)
+# * Quote OutFilename
+# 2005/10/01 v2.9.3draft (Gerben Wierda)
+# * Quote OutFilename
+#
+
+### program identification
+my $program = "epstopdf";
+my $filedate="2003/04/20";
+my $fileversion="2.9.3draft";
+my $copyright = "Copyright 1998-2002 by Sebastian Rahtz et al.";
+my $title = "\U$program\E $fileversion, $filedate - $copyright\n";
+
+### ghostscript command name
+my $GS = "gs";
+$GS = "gswin32c" if $^O eq 'MSWin32';
+$GS = "gswin32c" if $^O =~ /cygwin/;
+
+### options
+$::opt_help=0;
+$::opt_debug=0;
+$::opt_compress=1;
+$::opt_gs=1;
+$::opt_hires=0;
+$::opt_exact=0;
+$::opt_filter=0;
+$::opt_outfile="";
+
+### usage
+my @bool = ("false", "true");
+my $usage = <<"END_OF_USAGE";
+${title}Syntax: $program [options] <eps file>
+Options:
+ --help: print usage
+ --outfile=<file>: write result to <file>
+ --(no)filter: read standard input (default: $bool[$::opt_filter])
+ --(no)gs: run ghostscript (default: $bool[$::opt_gs])
+ --(no)compress: use compression (default: $bool[$::opt_compress])
+ --(no)hires: scan HiResBoundingBox (default: $bool[$::opt_hires])
+ --(no)exact: scan ExactBoundingBox (default: $bool[$::opt_exact])
+ --(no)debug: debug informations (default: $bool[$::opt_debug])
+Examples for producing 'test.pdf':
+ * $program test.eps
+ * produce postscript | $program --filter >test.pdf
+ * produce postscript | $program -f -d -o=test.pdf
+Example: look for HiResBoundingBox and produce corrected PostScript:
+ * $program -d --nogs -hires test.ps>testcorr.ps
+END_OF_USAGE
+
+### process options
+use Getopt::Long;
+GetOptions (
+ "help!",
+ "debug!",
+ "filter!",
+ "compress!",
+ "gs!",
+ "hires!",
+ "exact!",
+ "outfile=s",
+) or die $usage;
+
+### help functions
+sub debug {
+ print STDERR "* @_\n" if $::opt_debug;
+}
+sub warning {
+ print STDERR "==> Warning: @_!\n";
+}
+sub error {
+ die "$title!!! Error: @_!\n";
+}
+sub errorUsage {
+ die "$usage\n!!! Error: @_!\n";
+}
+
+### option help
+die $usage if $::opt_help;
+
+### get input filename
+my $InputFilename = "";
+if ($::opt_filter) {
+ @ARGV == 0 or
+ die errorUsage "Input file cannot be used with filter option";
+ $InputFilename = "-";
+ debug "Input file: standard input";
+}
+else {
+ @ARGV > 0 or die errorUsage "Input filename missing";
+ @ARGV < 2 or die errorUsage "Unknown option or too many input files";
+ $InputFilename = $ARGV[0];
+ -f $InputFilename or error "'$InputFilename' does not exist";
+ debug "Input filename:", $InputFilename;
+}
+
+### option compress
+my $GSOPTS = "";
+$GSOPTS = "-dUseFlateCompression=false " unless $::opt_compress;
+
+### option BoundingBox types
+my $BBName = "%%BoundingBox:";
+!($::opt_hires and $::opt_exact) or
+ error "Options --hires and --exact cannot be used together";
+$BBName = "%%HiResBoundingBox:" if $::opt_hires;
+$BBName = "%%ExactBoundingBox:" if $::opt_exact;
+debug "BoundingBox comment:", $BBName;
+
+### option outfile
+my $OutputFilename = $::opt_outfile;
+if ($OutputFilename eq "") {
+ if ($::opt_gs) {
+ $OutputFilename = $InputFilename;
+ if (!$::opt_filter) {
+ $OutputFilename =~ s/\.[^\.]*$//;
+ $OutputFilename .= ".pdf";
+ }
+ }
+ else {
+ $OutputFilename = "-"; # standard output
+ }
+}
+if ($::opt_filter) {
+ debug "Output file: standard output";
+}
+else {
+ debug "Output filename:", $OutputFilename;
+}
+
+### option gs
+if ($::opt_gs) {
+ debug "Ghostscript command:", $GS;
+ debug "Compression:", ($::opt_compress) ? "on" : "off";
+}
+
+### open input file
+open(IN,"<$InputFilename") or error "Cannot open",
+ ($::opt_filter) ? "standard input" : "'$InputFilename'";
+binmode IN;
+
+### open output file
+if ($::opt_gs) {
+ my $pipe = "$GS -q -sDEVICE=pdfwrite $GSOPTS -dAutoRotatePages=/None" .
+ " -sOutputFile='$OutputFilename' - -c quit";
+ debug "Ghostscript pipe:", $pipe;
+ open(OUT,"|$pipe") or error "Cannot open Ghostscript for piped input";
+}
+else {
+ open(OUT,">$OutputFilename") or error "Cannot write '$OutputFilename";
+}
+
+# reading a cr-eol file on a lf-eol system makes it impossible to parse
+# the header and besides it will read the intire file into yor line by line
+# scalar. this is also true the other way around.
+
+### scan a block, try to determine eol style
+
+my $buf;
+my $buflen;
+my @bufarray;
+my @parsedbufarray; # for mytell/myseek
+my $bufarraypos;
+
+# We assume 2048 is big enough.
+my $EOLSCANBUFSIZE = 2048;
+
+$buflen = read( IN, $buf, $EOLSCANBUFSIZE);
+if ($buflen > 0) {
+ my $crlfpos;
+ my $lfpos;
+ my $crpos;
+
+ # remove binary junk before header
+ # if there is no header, we assume the file starts with ascii style and
+ # we look for a eol style anyway, to prevent possible loading of the
+ # entire file
+ if ($buf =~ /%!/) {
+ # throw away binary junk before %!
+ $buf =~ s/(.*?)%!/%!/o;
+ }
+ $lfpos = index( $buf, "\n");
+ $crpos = index( $buf, "\r");
+ $crlfpos = index( $buf, "\r\n");
+
+ if ($crpos > 0 and ($lfpos == -1 or $lfpos > $crpos+1)) {
+ # The first eol was a cr and it was not immediately followed by a lf
+ $/ = "\r";
+ debug "The first eol character was a CR ($crpos) and not immediately followed by a LF ($lfpos)";
+ }
+
+ # Now we have set the correct eol-character. Get one more line and add
+ # it to our buffer. This will make the buffer contain an entire line
+ # at the end. Then split the buffer in an array. We will draw lines from
+ # that array until it is empty, then move again back to <IN>
+ $buf .= <IN> unless eof( IN);
+ $buflen = length( $buf);
+
+ # Some extra magic is needed here: if we set $/ to \r, Perl's re engine
+ # still thinks eol is \n in regular expressions (not very nice) so we
+ # cannot split on ^, but have to split on \r and reappend those.
+ if ($/ eq "\r") {
+ @bufarray = split( /\r/ms, $buf);
+ grep( $_ .= "\r", @bufarray);
+ }
+ else {
+ @bufarray = split( /^/ms, $buf);
+ }
+}
+
+### getline
+sub getline {
+ if ($#bufarray >= 0) {
+ $_ = shift( @bufarray);
+ unshift( @parsedbufarray, $_); # for myseek and mytell
+ $bufarraypos += length( $_);
+ }
+ else {
+ $_ = <IN>;
+ }
+ return( defined( $_));
+}
+
+### mytell and myseek, work on <IN> only
+sub mytell {
+ if ($#bufarray) {
+ return $bufarraypos;
+ }
+ else {
+ return tell( IN);
+ }
+}
+
+sub myseek {
+ my $pos = shift;
+ if ($pos < $buflen) {
+ # We were still parsing the array, reset to the end of buf and
+ # move to the right line in the array.
+ # Now, move stuff from the @parsedbufarray until we are back at $pos
+ my $tmpline;
+ while ($pos > 0) {
+ # we test on parsedbufarray to prevent an infinite loop on
+ # a programming error (DEVELOP only)
+ die "Programming error 1\n" unless $#parsedbufarray;
+ $tmpline = pop( @parsedbufarray);
+ $pos -= length( $tmpline);
+ push( @bufarray, $tmpline);
+ }
+ return seek( IN, $buflen, 0);
+ }
+ else {
+ return seek( IN, $pos, 0);
+ }
+}
+
+### scan first line
+my $header = 0;
+getline();
+if (/%!/) {
+ # throw away binary junk before %!
+ s/(.*)%!/%!/o;
+}
+$header = 1 if /^%/;
+debug "Scanning header for BoundingBox";
+print OUT;
+
+### variables and pattern for BoundingBox search
+my $bbxpatt = '[0-9eE\.\-]';
+ # protect backslashes: "\\" gets '\'
+my $BBValues = "\\s*($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)";
+my $BBCorrected = 0;
+
+sub CorrectBoundingBox {
+ my ($llx, $lly, $urx, $ury) = @_;
+ debug "Old BoundingBox:", $llx, $lly, $urx, $ury;
+ my ($width, $height) = ($urx - $llx, $ury - $lly);
+ my ($xoffset, $yoffset) = (-$llx, -$lly);
+ debug "New BoundingBox: 0 0", $width, $height;
+ debug "Offset:", $xoffset, $yoffset;
+
+ print OUT "%%BoundingBox: 0 0 $width $height\n";
+ print OUT "<< /PageSize [$width $height] >> setpagedevice\n";
+ print OUT "gsave $xoffset $yoffset translate\n";
+}
+
+### scan header
+if ($header) {
+ HEADER: while (getline()) {
+ ### Fix for freehand bug ### by Peder Axensten
+ next HEADER if(!/\S/);
+
+ ### end of header
+ if (!/^%/ or /^%%EndComments/) {
+ print OUT;
+ last;
+ }
+
+ ### BoundingBox with values
+ if (/^$BBName$BBValues/) {
+ CorrectBoundingBox $1, $2, $3, $4;
+ $BBCorrected = 1;
+ last;
+ }
+
+ ### BoundingBox with (atend)
+ if (/^$BBName\s*\(atend\)/) {
+ debug $BBName, "(atend)";
+ if ($::opt_filter) {
+ warning "Cannot look for BoundingBox in the trailer",
+ "with option --filter";
+ last;
+ }
+ my $pos = mytell();
+ debug "Current file position:", $pos;
+
+ # looking for %%BoundingBox
+ while (getline()) {
+ # skip over included documents
+ if (/^%%BeginDocument/) {
+ while (getline()) {
+ last if /^%%EndDocument/;
+ }
+ }
+ if (/^$BBName$BBValues/) {
+ CorrectBoundingBox $1, $2, $3, $4;
+ $BBCorrected = 1;
+ last;
+ }
+ }
+
+ # go back
+ myseek( $pos) or error "Cannot go back to line '$BBName (atend)'";
+ last;
+ }
+
+ # print header line
+ print OUT;
+ }
+}
+
+### print rest of file
+while (getline()) {
+ print OUT;
+}
+
+### close files
+close(IN);
+print OUT "\ngrestore\n" if $BBCorrected;
+close(OUT);
+warning "BoundingBox not found" unless $BBCorrected;
+debug "Ready.";
+;
diff --git a/Build/source/texk/tetex/epstopdf.man b/Build/source/texk/tetex/epstopdf.man
new file mode 100644
index 00000000000..451e5a3ca1e
--- /dev/null
+++ b/Build/source/texk/tetex/epstopdf.man
@@ -0,0 +1,54 @@
+.TH EPSTOPDF 1 "October 30, 1999"
+.\" man page by Jim Van Zandt <jrv@vanzandt.mv.com> -*- nroff -*-
+.SH NAME
+epstopdf \- convert an EPS file to PDF
+.SH SYNOPSIS
+\fBepstopdf\fP [\fIoptions\fP] \fIepsfile\fP
+.SH DESCRIPTION
+\fBepstopdf\fP transforms the Encapsulated PostScript file
+\fIepsfile\fP so that it is guaranteed to start at the 0,0 coordinate,
+and it sets a page size exactly corresponding to the BoundingBox.
+This means that when Ghostscript renders it, the result needs no
+cropping, and the PDF MediaBox is correct. The result is piped to
+Ghostscript and a PDF version written.
+.P
+If the bounding box is not right, of course, you have problems...
+.SH OPTIONS
+.IP "\fB--outfile\fP=\fIfile\fP"
+write result to \fIfile\fP instead of standard output.
+.IP "\fB--\fP[\fBno\fP]\fBfilter\fP"
+read standard input (default: --nofilter).
+.IP "\fB--\fP[\fBno\fP]\fBgs\fP"
+run ghostscript (default: --gs).
+.IP "\fB--\fP[\fBno\fP]\fBcompress\fP"
+use compression (default: --compress).
+.IP "\fB--\fP[\fBno\fP]\fBhires\fP"
+scan HiresBoundingBox (default: --nohires).
+.IP "\fB--\fP[\fBno\fP]\fBexact\fP"
+scan ExactBoundingBox (default: --noexact).
+.IP "\fB--\fP[\fBno\fP]\fBdebug\fP"
+debug informations (default: --nodebug).
+.IP "\fB--help\fP
+print usage
+.SH EXAMPLE
+Examples for producing "test.pdf":
+.nf
+
+epstopdf test.eps
+produce postscript | epstopdf --filter >test.pdf
+produce postscript | epstopdf -f -d -o=test.pdf
+
+.fi
+Example: look for HiresBoundingBox and produce corrected PostScript:
+.nf
+
+epstopdf -d --nogs -hires test.ps>testcorr.ps
+.fi
+.SH BUGS
+The only thing I have not allowed for is the case of
+"%%BoundingBox: (atend)", which is more complicated.
+.SH SEE ALSO
+\fBgs\fP(1).
+.SH AUTHOR
+Sebastian Rahtz, for Elsevier Science.
+Now with extra tricks from Hans Hagen's texutil.
diff --git a/Build/source/texk/tetex/epstopdf.rc b/Build/source/texk/tetex/epstopdf.rc
new file mode 100644
index 00000000000..99ef407d765
--- /dev/null
+++ b/Build/source/texk/tetex/epstopdf.rc
@@ -0,0 +1,32 @@
+/* epstopdf.rc: version number -*- C++ -*-
+
+ Copyright (C) 1996-2003 Fabrice Popineau <fabrice.popineau@supelec.fr>
+
+ This file 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, or (at your
+ option) any later version.
+
+ This file 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 file; if not, write to the Free Software
+ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#include <texlive-version.h>
+
+#define VER_FILEVERSION TEXLIVE_MAJOR_VERSION,TEXLIVE_MINOR_VERSION,TEXLIVE_BETA_NUMBER,TEXLIVE_ALPHA_NUMBER
+#define VER_FILEVERSION_STR TEXLIVE_PRODUCTVERSION_STR " epstopdf 2.7"
+
+#define VER_INTERNALNAME_STR "epstopdf"
+#define VER_ORIGINALFILENAME_STR "epstopdf.exe"
+
+#define VER_FILEDESCRIPTION_STR "EPS-to-PDF Converter"
+
+#include <texlive.version>
+
+/* epstopdf.rc ends here */
diff --git a/Build/source/texk/tetex/fdf2tex.man b/Build/source/texk/tetex/fdf2tex.man
new file mode 100644
index 00000000000..d306652f34a
--- /dev/null
+++ b/Build/source/texk/tetex/fdf2tex.man
@@ -0,0 +1,31 @@
+.TH FDF2TEX "1" "May 2004" "teTeX " "ConTeXt"
+.SH NAME
+fdf2tex \- Convert PDF formular data (FDF) into something (Con)TeX(t) can
+handle
+.PP
+.SH "SYNOPSIS"
+\fBfdf2tex\fP \fIinfile\fP [ \fIoutfile\fP ]
+.PP
+\fBfdf2tan\fP \fIinfile\fP
+.PP
+.SH DESCRIPTION
+.PP
+Converts PDF formular data (FDF) into something (Con)TeX(t) can
+handle. These commands are usually called indirectly during ConTeXt
+file processing.
+.HP
+.SH "BUGS"
+.PP
+Probably none - all errors are in this manpage
+.PP
+.SH "SEE ALSO"
+.PP
+\fBtexexec\fP(1)\&.
+.PP
+The TeXExec manual, \fImtexexec\&.pdf\fP\&.
+.PP
+.SH "AUTHOR"
+.IP
+This manual page was written by Frank Küster <frank@kuesterei\&.ch>,
+for the Debian GNU/Linux system\&. It may be used and modified by
+others without contacting the author\&.
diff --git a/Build/source/texk/tetex/fmtutil b/Build/source/texk/tetex/fmtutil
new file mode 100755
index 00000000000..c8daaf8e112
--- /dev/null
+++ b/Build/source/texk/tetex/fmtutil
@@ -0,0 +1,883 @@
+#!/bin/sh
+
+###############################################################################
+# fmtutil: utility to maintain format files.
+#
+# Thomas Esser, public domain.
+#
+# Commands:
+# --all recreate all format files
+# --missing create all missing format files
+# --refresh recreate only existing format files
+# --byfmt formatname (re)create format for `formatname'
+# --byhyphen hyphenfile (re)create formats that depend on `hyphenfile'
+# --enablefmt formatname enable formatname in config file
+# --disablefmt formatname disable formatname in config file
+# --listcfg list (enabled and disabled) configurations,
+# filtered to available formats
+# --catcfg output the content of the config file
+# --showhyphen formatname print name of hyphenfile for format `formatname'
+# --edit edit fmtutil.cnf file
+# --version show version info
+# --help show this message
+#
+# Options:
+# --cnffile file set configfile for fmtutil
+# --fmtdir directory set destination directory for format files
+###############################################################################
+
+###############################################################################
+# program history:
+# Fr Apr 8 19:15:05 CEST 2005 cleanup now has an argument for the return code
+# So Mär 27 18:52:06 CEST 2005 honor $TMPDIR, $TEMP and $TMP, not just $TMP
+# Sa Jan 15 18:13:46 CET 2005 avoid multiple variable assignments in one statement
+# Di Jan 11 11:42:36 CET 2005 fix --byhyphen with relative hyphenfile
+# Fr Dez 31 16:51:29 CET 2004 option catcfg added (for being called by texconfig)
+# Do Dez 30 21:53:27 CET 2004 rename variable verbose to verboseFlag
+# Sa Dez 25 12:44:23 CET 2004 implementation adopted for teTeX-3.0 (tcfmgr)
+# Do Okt 28 11:09:36 CEST 2004 added --refresh
+# Fr Sep 17 19:25:28 CEST 2004 save $0 in a variable before calling a function
+# Sun May 9 23:24:06 CEST 2004 changes for new web2c: format names
+# are now *.fmt, nothing else, disable
+# "plain" symlinks
+# Thu May 6 14:16:19 CEST 2004: "mv ...</dev/null" to avoid interaction.
+# Sun Mar 21 19:44:36 CET 2004: support aleph
+# Thu Dec 25 22:11:53 CET 2003: add version string
+# Thu Dec 25 12:56:14 CET 2003: new listcfg_loop lists only supported formats
+# Sun Dec 21 10:25:37 CET 2003 "mktexfmt pdflatex" did not work (if called
+# as mktexfmt, an extention was mandatory)
+# Mon Sep 15 13:07:31 CEST 2003 add tmpdir to TEXINPUTS
+# Sun Aug 3 11:09:46 CEST 2003 special case for mptopdf
+# Sun Apr 20 10:27:09 CEST 2003 allow " " as well as tab in config file
+# Wed Feb 19 21:14:52 CET 2003 add eomega support
+# Sat Feb 15 22:01:35 CET 2003 let mf-nowin work without mf
+# Wed Dec 25 09:47:44 CET 2002 bugfix for localized pool files
+# Fri Oct 25 02:29:06 CEST 2002: now more careful about find_hyphenfile()
+# Tue Oct 22 22:46:48 CEST 2002: -jobname, oft extension
+# Fri Oct 4 22:33:17 CEST 2002: add more cli stuff: enablefmt
+# disablefmt listcfg
+# Sun Jul 7 21:28:37 CEST 2002: look at log file for possible problems,
+# and issue a warning
+# Tue Jun 4 21:52:57 CEST 2002: trap / cleanup code from updmap
+# Tue Jun 4 19:32:44 CEST 2002: be smarter about stdout / stderr
+# Tue Apr 9 22:46:34 CEST 2002: pass -progname=mpost for metafun
+# Tue Apr 2 00:37:39 CEST 2002: added mktexfmt functionality
+# Tue Jun 5 14:45:57 CEST 2001: added support for mf / mpost
+###############################################################################
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+progname=fmtutil
+argv0=$0
+version=1112981053 # seconds since `00:00:00 1970-01-01 UTC'
+ # date '+%s' (with GNU date)
+
+cnf=fmtutil.cnf # name of the config file
+export PATH
+
+###############################################################################
+# cleanup()
+# clean up the temp area and exit with proper exit status
+###############################################################################
+cleanup()
+{
+ rc=$1
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { cd / && rm -rf "$tmpdir"; }
+ (exit $rc); exit $rc
+}
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+setupTmpDir()
+{
+ $needsCleanup && return
+
+ trap 'cleanup 1' 1 2 3 7 13 15
+ needsCleanup=true
+ (umask 077; mkdir "$tmpdir") \
+ || abort "could not create directory \`$tmpdir'"
+}
+
+###############################################################################
+# configReplace(file, pattern, line)
+# The first line in file that matches pattern gets replaced by line.
+# line will be added at the end of the file if pattern does not match.
+###############################################################################
+configReplace()
+{
+ file=$1; pat=$2; line=$3
+
+ if grep "$pat" "$file" >/dev/null; then
+ ed "$file" >/dev/null 2>&1 <<-eof
+ /$pat/
+ c
+ $line
+ .
+ w
+ q
+eof
+ else
+ echo "$line" >> $file
+ fi
+}
+
+###############################################################################
+# setmatch(match)
+# setting the "match state" to true or false. Used to see if there was at
+# least one match.
+###############################################################################
+setmatch()
+{
+ match=$1
+}
+
+###############################################################################
+# getmatch()
+# return success if there was at least one match.
+###############################################################################
+getmatch()
+{
+ test "x$match" = xtrue
+}
+
+###############################################################################
+# initTexmfMain()
+# get $MT_TEXMFMAIN from $TEXMFMAIN
+###############################################################################
+initTexmfMain()
+{
+ case $MT_TEXMFMAIN in
+ "") MT_TEXMFMAIN=`kpsewhich --var-value=TEXMFMAIN`;;
+ esac
+ export MT_TEXMFMAIN
+}
+
+###############################################################################
+# cache_vars()
+# locate files / kpathsea variables and export variables to environment
+# this speeds up future calls to e.g. mktexupd
+###############################################################################
+cache_vars()
+{
+ : ${MT_VARTEXFONTS=`kpsewhich --expand-var='$VARTEXFONTS' | sed 's%^!!%%'`}
+ : ${MT_MKTEXNAM=`kpsewhich --format='web2c files' mktexnam`}
+ : ${MT_MKTEXNAM_OPT=`kpsewhich --format='web2c files' mktexnam.opt`}
+ : ${MT_MKTEXDIR=`kpsewhich --format='web2c files' mktexdir`}
+ : ${MT_MKTEXDIR_OPT=`kpsewhich --format='web2c files' mktexdir.opt`}
+ : ${MT_MKTEXUPD=`kpsewhich --format='web2c files' mktexupd`}
+ : ${MT_MKTEX_CNF=`kpsewhich --format='web2c files' mktex.cnf`}
+ : ${MT_MKTEX_OPT=`kpsewhich --format='web2c files' mktex.opt`}
+ export MT_VARTEXFONTS MT_MKTEXNAM MT_MKTEXNAM_OPT MT_MKTEXDIR
+ export MT_MKTEXDIR_OPT MT_MKTEXUPD MT_MKTEX_CNF MT_MKTEX_OPT
+}
+
+###############################################################################
+# help()
+# display help message and exit
+###############################################################################
+help()
+{
+ cat <<'eof'
+Usage: fmtutil [option] ... cmd [argument]
+
+Valid options:
+ --cnffile file
+ --fmtdir directory
+ --quiet (not implemented, just for compatibility)
+ --test (not implemented, just for compatibility)
+ --dolinks (not implemented, just for compatibility)
+ --force (not implemented, just for compatibility)
+
+Valid commands:
+ --all recreate all format files
+ --missing create all missing format files
+ --refresh recreate only existing format files
+ --byfmt formatname (re)create format for `formatname'
+ --byhyphen hyphenfile (re)create formats that depend on `hyphenfile'
+ --enablefmt formatname enable formatname in config file
+ --disablefmt formatname disable formatname in config file
+ --listcfg list (enabled and disabled) configurations,
+ filtered to available formats
+ --catcfg output the content of the config file
+ --showhyphen formatname print name of hyphenfile for format `formatname'
+ --edit edit fmtutil.cnf file
+ --version show version info
+ --help show this message
+eof
+ cleanup 0
+}
+
+version()
+{
+ cat <<eof
+$progname version $version.
+eof
+ cleanup 0
+}
+
+###############################################################################
+# abort(errmsg)
+# print `errmsg' to stderr and exit with error code 1
+###############################################################################
+abort()
+{
+ echo "$progname: $1." >&2
+ cleanup 1
+}
+
+###############################################################################
+# verboseMsg(msg)
+# print `msg' to stderr is $verbose is true
+###############################################################################
+verboseMsg() {
+ $verboseFlag && verbose echo ${1+"$@"}
+}
+
+###############################################################################
+# byebye()
+# report any failures and exit the program
+###############################################################################
+byebye()
+{
+ if $has_errors; then
+ {
+ cat <<eof
+
+###############################################################################
+$progname: Error! Not all formats have been built successfully.
+Visit the log files in directory
+ $destdir
+for details.
+###############################################################################
+
+This is a summary of all \`failed' messages and warnings:
+$log_failure_msg
+eof
+ } >&2
+ cleanup 1
+ else
+ cleanup 0
+ fi
+}
+
+###############################################################################
+# init_log_failure()
+# reset the list of failure messages
+###############################################################################
+init_log_failure()
+{
+ log_failure_msg=
+ has_errors=false
+}
+
+###############################################################################
+# log_failure(errmsg)
+# report and save failure message `errmsg'
+###############################################################################
+log_failure()
+{
+ echo "Error: $@" >&2
+ if test -z "$log_failure_msg"; then
+ log_failure_msg="$@"
+ else
+ OLDIFS=$IFS; IFS=
+ log_failure_msg="$log_failure_msg
+$@"
+ IFS=$OLDIFS
+ fi
+ has_errors=true
+}
+
+###############################################################################
+# verbose (cmd)
+# execute cmd. Redirect output depending on $mktexfmtMode.
+###############################################################################
+verbose()
+{
+ $mktexfmtMode && ${1+"$@"} >&2 || ${1+"$@"}
+}
+
+###############################################################################
+# mktexdir(args)
+# call mktexdir script, disable all features (to prevent sticky directories)
+###############################################################################
+mktexdir()
+{
+ initTexmfMain
+ MT_FEATURES=none "$MT_TEXMFMAIN/web2c/mktexdir" "$@" >&2
+}
+
+###############################################################################
+# tcfmgr(args)
+# call tcfmgr script
+###############################################################################
+tcfmgr()
+{
+ initTexmfMain
+ "$MT_TEXMFMAIN/texconfig/tcfmgr" "$@"
+}
+
+###############################################################################
+# mktexupd(args)
+# call mktexupd script
+###############################################################################
+mktexupd()
+{
+ initTexmfMain
+ "$MT_TEXMFMAIN/web2c/mktexupd" "$@"
+}
+
+###############################################################################
+# main()
+# parse commandline arguments, initialize variables,
+# switch into temp. direcrory, execute desired command
+###############################################################################
+main()
+{
+ destdir= # global variable: where do we put the format files?
+ cnf_file= # global variable: full name of the config file
+ cmd= # desired action from command line
+ needsCleanup=false
+ need_find_hyphenfile=false
+ cfgparam=
+ cfgmaint=
+ tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$
+ verboseFlag=true
+
+ # mktexfmtMode: if called as mktexfmt, set to true. Will echo the generated
+ # filename after successful generation to stdout then (and nothing else).
+ mktexfmtMode=false
+ case $argv0 in
+ mktexfmt|*/mktexfmt)
+ mktexfmtMode=true
+ fullfmt=$1; shift
+ case $fullfmt in
+ *.fmt|*.mem|*.base)
+ set x --byfmt `echo $fullfmt | sed 's@\.[a-z]*$@@'` ${1+"$@"}; shift
+ ;;
+ *.*)
+ abort "unknown format type: $fullfmt"
+ ;;
+ "")
+ help
+ ;;
+ *)
+ set x --byfmt $fullfmt; shift
+ ;;
+ esac
+ ;;
+ esac
+
+ while
+ case $1 in
+ --cnffile)
+ shift; cnf_file=$1; cfgparam=1;;
+ --cnffile=*)
+ cnf_file=`echo "$1" | sed 's/--cnffile=//'`; cfgparam=1; shift ;;
+ --fmtdir)
+ shift; destdir=$1;;
+ --fmtdir=*)
+ destdir=`echo "$1" | sed 's/--fmtdir=//'`; shift ;;
+ --all|-a)
+ cmd=all;;
+ --edit|-e)
+ cmd=edit; cfgmaint=1;;
+ --missing|-m)
+ cmd=missing;;
+ --refresh|-r)
+ cmd=refresh;;
+ --byfmt|-f)
+ shift; cmd=byfmt; arg=$1;;
+ --byfmt=*)
+ cmd=byfmt; arg=`echo "$1" | sed 's/--byfmt=//'`; shift ;;
+ --byhyphen|-h)
+ shift; cmd=byhyphen; arg=$1;;
+ --byhyphen=*)
+ cmd=byhyphen; arg=`echo "$1" | sed 's/--byhyphen=//'`; shift ;;
+ --showhyphen|-s)
+ shift; cmd=showhyphen; arg=$1;;
+ --showhyphen=*)
+ cmd=showhyphen; arg=`echo "$1" | sed 's/--showhyphen=//'`; shift ;;
+ --help|-help)
+ cmd=help;;
+ --version)
+ cmd=version;;
+ --enablefmt)
+ shift; cmd=enablefmt; arg=$1; cfgmaint=1;;
+ --enablefmt=*)
+ cmd=enablefmt; arg=`echo "$1" | sed 's/--enablefmt=//'`; cfgmaint=1; shift;;
+ --disablefmt)
+ shift; cmd=disablefmt; arg=$1; cfgmaint=1;;
+ --disablefmt=*)
+ cmd=disablefmt; arg=`echo "$1" | sed 's/--disablefmt=//'`; cfgmaint=1; shift;;
+ --catcfg)
+ cmd=catcfg;;
+ --listcfg)
+ cmd=listcfg;;
+ --quiet|-q)
+ verboseFlag=false;;
+ --test|--dolinks|--force)
+ ;;
+ "") break;;
+ *) abort "$progname: unknown option \`$1'. Try $progname --help for help";;
+ esac
+ do test $# -gt 0 && shift; done
+
+ case "$cmd" in
+ help|"") help;;
+ version) version;;
+ esac
+
+ if test -n "$cfgparam"; then
+ test -f "$cnf_file" || abort "config file \`$cnf_file' not found"
+ fi
+
+ if test -n "$cfgmaint"; then
+ if test -z "$cfgparam"; then
+ setupTmpDir
+ co=`tcfmgr --tmp $tmpdir --cmd co --file $cnf`
+ test $? = 0 || cleanup 1
+ set x $co; shift
+ id=$1; cnf_file=$3; orig=$4
+ verboseMsg "$progname: initial config file is \`$orig'"
+ fi
+ else
+ if test -z "$cfgparam"; then
+ cnf_file=`tcfmgr --cmd find --file $cnf`
+ test -f "$cnf_file" || abort "config file \`$cnf' not found"
+ fi
+ fi
+
+ # showhyphen and edit do not need any temp. directory, so do it here:
+ case "$cmd" in
+ showhyphen)
+ show_hyphen_file "$arg"
+ cleanup $?
+ ;;
+ edit)
+ ${VISUAL-${EDITOR-vi}} $cnf_file
+ ;;
+ enablefmt|disablefmt)
+ $cmd $arg
+ ;;
+ catcfg)
+ grep -v '^ *#' "$cnf_file" | sed 's@^ *@@; s@ *$@@' | grep . | sort
+ cleanup $?
+ ;;
+ listcfg)
+ listcfg_loop
+ cleanup $?
+ ;;
+ esac
+
+ if test -n "$cfgmaint"; then
+ if test -z "$cfgparam"; then
+ ci=`tcfmgr --tmp $tmpdir --cmd ci --id $id`
+ if test $? = 0; then
+ if test -n "$ci"; then
+ verboseMsg "$progname: configuration file updated: \`$ci'"
+ else
+ verboseMsg "$progname: configuration file unchanged."
+ fi
+ else
+ abort "failed to update configuration file."
+ fi
+ fi
+ cleanup $?
+ fi
+
+ # set up destdir:
+ if test -z "$destdir"; then
+ : ${MT_TEXMFVAR=`kpsewhich -var-value=TEXMFVAR`}
+ destdir=$MT_TEXMFVAR/web2c
+ fi
+ test -d "$destdir" || mktexdir "$destdir" >/dev/null 2>&1
+ test -d "$destdir" || abort "format directory \`$destdir' does not exist"
+ test -w "$destdir" || abort "format directory \`$destdir' is not writable"
+
+ thisdir=`pwd`
+
+ : ${KPSE_DOT=$thisdir}
+ export KPSE_DOT
+
+ # due to KPSE_DOT, we don't search the current directory, so include
+ # it explicitly for formats that \write and later on \read
+ TEXINPUTS="$tmpdir:$TEXINPUTS"; export TEXINPUTS
+
+ setupTmpDir
+ cd "$tmpdir" || cleanup 1
+
+ # make local paths absolute:
+ case "$destdir" in
+ /*) ;;
+ *) destdir="$thisdir/$destdir";;
+ esac
+ case "$cnf_file" in
+ /*) ;;
+ *) cnf_file="$thisdir/$cnf_file";;
+ esac
+
+ cache_vars
+ init_log_failure
+ # execute the desired command:
+ case "$cmd" in
+ all)
+ recreate_all;;
+ missing)
+ create_missing;;
+ refresh)
+ recreate_existing;;
+ byfmt)
+ create_one_format "$arg";;
+ byhyphen)
+ recreate_by_hyphenfile "$arg";;
+ esac
+
+ # install the log files and format files:
+ for i in *.log; do
+ test -f "$i" || continue
+ rm -f "$destdir/$i"
+
+ # We don't want user-interaction for the following "mv" command:
+ mv "$i" "$destdir/$i" </dev/null
+ done
+ for i in *.fmt *.mem *.base; do
+ test -f "$i" || continue
+ rm -f "$destdir/$i"
+
+ # We don't want user-interaction for the following "mv" command:
+ if mv "$i" "$destdir/$i" </dev/null; then
+ verboseMsg "$progname: $destdir/$i installed."
+ $mktexfmtMode && echo "$destdir/$i"
+ fi
+ mktexupd "$destdir" "$i"
+ done
+
+ byebye
+}
+
+###############################################################################
+# parse_line(config_line) sets global variables:
+# format: name of the format, e.g. pdflatex
+# engine: name of the TeX engine, e.g. tex, etex, pdftex
+# texargs: flags for initex and name of the ini file (e.g. -mltex frlatex.ini)
+# fmtfile: name of the format file (without directory, but with extension)
+#
+# Support for building internationalized formats sets:
+# pool: base name of pool file (to support translated pool files)
+# tcx: translation file used when creating the format
+#
+# Example (for fmtutil.cnf):
+# mex-pl tex mexconf.tex nls=tex-pl,il2-pl mex.ini
+#
+# The nls parameter (pool,tcx) can only be specified as the first argument
+# inside the 4th field in fmtutil.cnf.
+#
+# exit code: returns error code if the ini file is not installed
+###############################################################################
+parse_line()
+{
+ case $1 in
+ '#!') disabled=true; shift;;
+ *) disabled=false;;
+ esac
+ format=$1
+ engine=$2
+ hyphenation=$3
+ shift; shift; shift
+
+ # handle nls support: pool + tcx
+ pool=; tcx=
+ case $1 in
+ nls=*)
+ pool=`echo $1 | sed 's@nls=@@; s@,.*@@'`
+ tcx=`echo $1 | sed 's@nls=[^,]*@@; s@^,@@'`
+ shift # nls stuff is not handled by the engine directly,
+ # so we shift this away
+ ;;
+ esac
+
+ texargs="$@"
+
+ eval lastarg=\$$#
+ inifile=`echo $lastarg | sed 's%^\*%%'`
+
+ case "$engine" in
+ mpost) fmtfile="$format.mem"; kpsefmt=mpost;;
+ mf|mfw|mf-nowin) fmtfile="$format.base"; kpsefmt=mf;;
+ *) fmtfile="$format.fmt"; kpsefmt=tex;;
+ esac
+
+ # See if we can find $inifile for return code:
+ kpsewhich -progname=$format -format=$kpsefmt $inifile >/dev/null 2>&1
+}
+
+###############################################################################
+# find_hyphenfile(format, hyphenation) searches for hyphenation along
+# searchpath of format
+# exit code: returns error is file is not found
+###############################################################################
+find_hyphenfile()
+{
+ format="$1"; hyphenation="$2"
+ case $hyphenation in
+ -) ;;
+ *) kpsewhich -progname="$format" -format=tex "$hyphenation";;
+ esac
+}
+
+###############################################################################
+# find_info_for_name(format)
+# Look up the config line for format `format' and call parse_line to set
+# global variables.
+###############################################################################
+find_info_for_name()
+{
+ format="$1"
+
+ # set x `awk '$1 == format {print; exit}' format="$format" "$cnf_file"`; shift
+ set x `egrep "^$format( | )" "$cnf_file" | sed q`; shift
+ test $# = 0 && abort "no info for format \`$format'"
+ parse_line "$@"
+}
+
+###############################################################################
+# run_initex()
+# Calls initex. Assumes that global variables are set by parse_line.
+###############################################################################
+run_initex()
+{
+
+ # install a pool file and set tcx flag if requested in lang= option:
+ rm -f *.pool
+ poolfile=
+ tcxflag=
+ test -n "$pool" \
+ && poolfile=`(kpsewhich -progname=$engine $pool.pool) 2>/dev/null`
+ if test -n "$poolfile" && test -f "$poolfile"; then
+ verboseMsg "$progname: attempting to create localized format using pool=$pool and tcx=$tcx."
+ cp "$poolfile" $engine.pool
+ test -n "$tcx" && tcxflag=-translate-file=$tcx
+ localpool=true
+ else
+ localpool=false
+ fi
+
+ jobswitch="-jobname=$format"
+ case "$format" in
+ metafun) prgswitch=-progname=mpost;;
+ mptopdf|cont-??) prgswitch=-progname=context;;
+ *) prgswitch=-progname=$format;;
+ esac
+
+ rm -f $fmtfile
+ verboseMsg "$progname: running \`$engine -ini $tcxflag $jobswitch $prgswitch $texargs' ..."
+
+ # run in a subshell to get a local effect of TEXPOOL manipulation:
+ (
+ # If necessary, set TEXPOOL. Use absolute path, because of KPSE_DOT.
+ $localpool && { TEXPOOL="`pwd`:$TEXPOOL"; export TEXPOOL; }
+ verbose $engine -ini $tcxflag $jobswitch $prgswitch $texargs
+ ) </dev/null
+
+ if test -f $fmtfile; then
+ grep '^! ' $format.log >/dev/null 2>&1 &&
+ log_failure "\`$engine -ini $tcxflag $jobswitch $prgswitch $texargs' possibly failed."
+ else
+ log_failure "\`$engine -ini $tcxflag $jobswitch $prgswitch $texargs' failed"
+ fi
+}
+
+###############################################################################
+# recreate_loop(hyphenfile)
+# for each line in config file: check match-condition and recreate format
+# if there is a match
+###############################################################################
+recreate_loop()
+{
+ OIFS=$IFS
+ IFS='
+'
+ set `echo x; sed '/^#/d; /^[ ]*$/d' "$cnf_file"`; shift
+ IFS=$OIFS
+ for line
+ do
+ parse_line $line || continue
+ check_match || continue
+ echo; echo
+ run_initex
+ done
+}
+
+###############################################################################
+# listcfg_loop()
+# prints all format definitions in config files (enabled and disabled ones)
+# for supported formats (i.e. for those which have an existing ini file)
+###############################################################################
+listcfg_loop()
+{
+ OIFS=$IFS
+ IFS='
+'
+ set `echo x; sed '/^#$/d; /^#[^!]/d; /^[ ]*$/d' "$cnf_file"`; shift
+ IFS=$OIFS
+ for line
+ do
+ parse_line $line && echo "$line"
+ done
+}
+
+###############################################################################
+# check_match()
+# recreate all formats
+###############################################################################
+check_match()
+{
+ $need_find_hyphenfile && \
+ this_hyphenfile=`find_hyphenfile "$format" "$hyphenation"`
+
+ eval $match_cmd && setmatch true
+}
+
+###############################################################################
+# create_one_format(fmtname)
+# (re)create the format file for the format `fmtname'
+###############################################################################
+create_one_format()
+{
+ fmtname=$1
+
+ find_info_for_name $fmtname || abort "format \`$fmtname' not available"
+ run_initex
+}
+
+###############################################################################
+# create_missing()
+# create all missing format files
+###############################################################################
+create_missing()
+{
+ # match_cmd='test ! -f $destdir/$fmtfile'
+ match_cmd='test ! -f "`kpsewhich -progname=$format $fmtfile`"'
+ recreate_loop
+}
+
+###############################################################################
+# recreate_existing()
+# recreate only existing format files
+###############################################################################
+recreate_existing()
+{
+ match_cmd='test -f "`kpsewhich -progname=$format $fmtfile`"'
+ recreate_loop
+}
+
+###############################################################################
+# recreate_all()
+# recreate all formats
+###############################################################################
+recreate_all()
+{
+ match_cmd=true
+ recreate_loop
+}
+
+###############################################################################
+# recreate_by_hyphenfile(hyphenfile)
+# recreate all formats that depend on hyphenfile
+###############################################################################
+recreate_by_hyphenfile()
+{
+ hyphenfile=$1
+
+ case $hyphenfile in
+ /*)
+ :
+ ;;
+ ./*)
+ hyphenfile="$KPSE_DOT/"`echo "$hyphenfile" | sed 's@..@@'`
+ ;;
+ *)
+ hyphenfile="$KPSE_DOT/$hyphenfile"
+ ;;
+ esac
+ need_find_hyphenfile=true
+ match_cmd="test x\$this_hyphenfile = x$hyphenfile"
+
+ # No match before the loop:
+ setmatch false
+
+ recreate_loop
+
+ # Now check if there was at least one match:
+ getmatch || abort "no format depends on \`$hyphenfile'"
+}
+
+
+###############################################################################
+# show_hyphen_file(format)
+# prints full name of the hyphenfile for format
+#
+# exit code: returns error code if the ini file is not installed or if
+# the hyphen file cannot be found
+###############################################################################
+show_hyphen_file()
+{
+ fmtname=$1
+
+ find_info_for_name "$fmtname" || abort "no info for format \`$fmtname'"
+ if test "x$hyphenation" = x-; then
+ echo -
+ cleanup 0
+ fi
+ find_hyphenfile "$format" "$hyphenation" \
+ || abort "hyphenfile \`$hyphenation' not found"
+}
+
+###############################################################################
+# disablefmt(format)
+# disables format in configuration file
+###############################################################################
+disablefmt()
+{
+ grep "^$1[ ]" $cnf_file >/dev/null || { (exit 0); return 0; }
+
+ ed $cnf_file >/dev/null 2>&1 <<-eof
+ /^$1[ ]/s/^/#! /
+ w
+ q
+eof
+ (exit 0); return 0
+}
+
+###############################################################################
+# enablefmt(format)
+# enables format in configuration file
+###############################################################################
+enablefmt()
+{
+ grep "^#![ ]*$1[ ]" $cnf_file >/dev/null || { (exit 0); return 0; }
+ ed $cnf_file >/dev/null 2>&1 <<-eof
+ /^#![ ]*$1[ ]/s/..[ ]*//
+ w
+ q
+eof
+ (exit 0); return 0
+}
+
+main ${1+"$@"}
+cleanup 0
diff --git a/Build/source/texk/tetex/fmtutil-sys b/Build/source/texk/tetex/fmtutil-sys
new file mode 100755
index 00000000000..bfb52f94e1f
--- /dev/null
+++ b/Build/source/texk/tetex/fmtutil-sys
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# fmtutil-sys: Thomas Esser, public domain.
+
+# wrapper script for fmtutil with TEXMFVAR and TEXMFCONFIG set to
+# TEXMFSYSVAR / TEXMFSYSCONFIG
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+export PATH
+
+v=`kpsewhich -var-value TEXMFSYSVAR`
+c=`kpsewhich -var-value TEXMFSYSCONFIG`
+
+TEXMFVAR="$v"
+TEXMFCONFIG="$c"
+export TEXMFVAR TEXMFCONFIG
+
+exec fmtutil ${1+"$@"}
diff --git a/Build/source/texk/tetex/fmtutil.cnf.5 b/Build/source/texk/tetex/fmtutil.cnf.5
new file mode 100644
index 00000000000..7c5aeb905d2
--- /dev/null
+++ b/Build/source/texk/tetex/fmtutil.cnf.5
@@ -0,0 +1,75 @@
+.TH "fmtutil\&.cnf" "5" "October 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+fmtutil\&.cnf \- configuration file for fmtutil
+.PP
+.SH "DESCRIPTION"
+.PP
+The \fIfmtutil\&.cnf\fP file contains the configuration information
+for \fBfmtutil\fP(8)\&. Each line contains the name of the format
+(e\&.g\&., ``tex\'\', ``latex\'\', ``omega\'\'), the name of the engine that
+is used by that format (e\&.g\&., ``tex\'\', ``etex\'\', ``omega\'\'), the pattern
+file (e\&.g\&., \fIlanguage\&.dat\fP, \fIlanguage\&.def\fP), and any
+arguments (name of an \fI\&.ini\fP file)\&.
+.PP
+Fields are separated by whitespace\& and complete lines can be commented
+out with ``#\'\'\&. The ``pattern file\'\' field cannot be used to
+define a file that is used while building the format\&.
+It tells \fBfmtutil\fP which file the
+format creation procedure reads\& and it has an effect to the options
+\fI--showhyphen\fP and \fI--byhyphen\fP\&.
+If the format has no way to
+customize hyphenation, a ``-\'\' can be used to indicate this\&.
+.PP
+.SH "NOTES"
+.PP
+The \fBtex\fP(1) and \fBamstex\fP(1) formats always load
+\fIhyphen\&.tex\fP\&. No customization by a pattern file is available
+for these formats\&. Therefore, the pattern-file field for the
+\fBtex\fP and \fBamstex\fP is usually indicated to be empty (``-\'\')\&.
+.PP
+You can, however, build customized formats on top of plain
+\fBtex\fP(1) or \fBamstex\fP(1) by using \fIbplain\&.tex\fP instead of
+\fIplain\&.tex\fP (b for the \fIBabel\fP system). See, for example,
+the \fIbplain\&.ini\fP file for the bplain format)\&.
+.PP
+\fBetex\fP(1) loads \fIlanguage\&.def\fP, not
+\fIlanguage\&.dat\fP\&.
+.PP
+Symbolic links to the correct engines (e\&.g\&., bplain -> tex)
+are generated by the \fBtexlinks\fP(8) script\&. Remember to run
+\fBtexlinks\fP(8) if you run \fBfmtutil\fP(8) yourself, rather
+than using the FORMATS option in \fBtexconfig\fP(8)\&.
+.PP
+.SH "FILES"
+.PP
+.IP "\fIfmtutil\&.cnf\fP"
+default configuration file
+.IP "\fIlanguage\&.dat\fP"
+hyphenation pattern file
+.IP "\fIlanguage\&.def\fP"
+hyphenation pattern file
+.PP
+.SH "SEE ALSO"
+.PP
+\fBamstex\fP(1), \fBetex\fP(1), \fBfmtutil\fP(8),
+\fBtex\fP(1), \fBtexconfig\fP(8), \fBtexlinks\fP(8)\&.
+.PP
+Web page: <http://tug\&.org/teTeX/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to <tetex@dbs\&.uni-hannover\&.de> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fIfmtutil\&.cnf\fP was written by Thomas Esser
+<te@dbs\&.uni-hannover\&.de>, and is Copyright 1998,
+1999 but released into the public domain\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/fmtutil.man b/Build/source/texk/tetex/fmtutil.man
new file mode 100644
index 00000000000..dfb96086a74
--- /dev/null
+++ b/Build/source/texk/tetex/fmtutil.man
@@ -0,0 +1,80 @@
+.TH "fmtutil" "8" "February 2005" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+fmtutil \- utility for maintaining TeX format files
+.PP
+fmtutil-sys \- utility for maintaining TeX format files system\-wide
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBfmtutil\fP [ \fIOPTION\fP\&.\&.\&. ] \fICOMMAND\fP
+.PP
+\fBfmtutil-sys\fP [ \fIOPTION\fP\&.\&.\&. ] \fICOMMAND\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBfmtutil\fP is used to create or recreate format and hyphenation
+files or show information about format files\&.
+.PP
+\fICOMMAND\fP is one of:
+.PP
+.IP "\fB--all\fP"
+recreate all format files
+.IP "\fB--byfmt\fP \fIformatname\fP"
+(re)create the format for
+format \fIformatname\fP
+.IP "\fB--byhyphen\fP \fIhyphenfile\fP"
+(re)create formats that
+depend on the hyphenation file
+\fIhyphenfile\fP
+.IP "\fB--help\fP"
+print a summary of commands and options
+.IP "\fB--missing\fP"
+create any missing format files
+.IP "\fB--showhyphen\fP \fIformatname\fP"
+print the name of the
+hyphenation file for the format
+\fIformatname\fP
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB--cnffile\fP \fIfile\fP"
+specify the configuration
+\fIfile\fP \fBfmtutil\fP should use
+.IP "\fB--dolinks\fP"
+(not implemented, just for compatibility)
+.IP "\fB--fmtdir\fP \fIdirectory\fP"
+set the destination
+directory for format files generated by
+\fBfmtutil\fP to \fIdirectory\fP
+.IP "\fB--force\fP"
+(not implemented, just for compatibility)
+.IP "\fB--quiet\fP"
+(not implemented, just for compatibility)
+.IP "\fB--test\fP"
+(not implemented, just for compatibility)
+.PP
+.SH "FILES"
+.PP
+.IP "\fIfmtutil\&.cnf\fP"
+default configuration file
+.PP
+.SH "SEE ALSO"
+.PP
+\fBkpsewhich\fP(1)
+.PP
+Web page: <http://tug\&.org/teTeX/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to <tetex@dbs\&.uni-hannover\&.de> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBfmtutil\fP was written by Thomas Esser
+<te@dbs\&.uni-hannover\&.de> and is Copyright 1998 Thomas
+Esser\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system and later slightly adapted for the teTeX 3 release\&.
diff --git a/Build/source/texk/tetex/fontinst b/Build/source/texk/tetex/fontinst
new file mode 100755
index 00000000000..7d1271517ad
--- /dev/null
+++ b/Build/source/texk/tetex/fontinst
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+tex -progname=fontinst \&tex ${1+"$@"}
diff --git a/Build/source/texk/tetex/fontinst.bat b/Build/source/texk/tetex/fontinst.bat
new file mode 100644
index 00000000000..fe9be9b7187
--- /dev/null
+++ b/Build/source/texk/tetex/fontinst.bat
@@ -0,0 +1,2 @@
+@echo off
+tex -progname=fontinst -fmt=tex %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Build/source/texk/tetex/fontinst.man b/Build/source/texk/tetex/fontinst.man
new file mode 100644
index 00000000000..b907280d90d
--- /dev/null
+++ b/Build/source/texk/tetex/fontinst.man
@@ -0,0 +1,45 @@
+.TH "fontinst" "1" "May 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+fontinst \- utility to run TeX as fontinst
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBfontinst\fP \fIpackage\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBfontinst\fP runs \fBtex\fP(1) with the \fB--progname\fP flag set to
+pretend to be the program fontinst (affecting Karl Berry paths)\&.
+.PP
+Typing
+.PP
+\f(CWfontinst fontinst\&.sty\fP
+.PP
+will start \fBtex\fP(1) and give the user an interactive prompt
+(\f(CW*\fP) where fontinst commands can be typed (such as
+\f(CW\elatinfamily{ptm}{}\ebye\fP)\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBtex\fP(1)
+.PP
+The fontinst manual, \fIfontinst\&.tex\fP\&.
+.PP
+Web page: <http://tug\&.org/applications/fontinst/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to tex-fonts@tug\&.org (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+Thomas Esser
+<te@dbs\&.uni-hannover\&.de>
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/kpsetool b/Build/source/texk/tetex/kpsetool
new file mode 100755
index 00000000000..463097fd4a9
--- /dev/null
+++ b/Build/source/texk/tetex/kpsetool
@@ -0,0 +1,118 @@
+#!/bin/sh
+
+# kpsetool. Script to make teTeX-style kpsetool, kpsexpand and kpsepath
+# available. Web2C's kpsewhich offers a superset of the functionality.
+# For compatibilty with old versions of teTeX, this script provides the
+# old command line interface of kpsetool, kpsexpand and kpsepath. All the
+# real work is done inside Web2C's kpsewhich.
+# Thomas Esser <te@dbs.uni-hannover.de>, Mar 1997, public domain.
+
+export PATH
+
+usage="
+Usage: kpsexpand [options] string
+Usage: kpsetool -w [options] pathtype filename
+Usage: kpsepath [options] pathtype
+
+Valid options are the following:
+ -n progname : pretend to be progname to kpathsea
+ -m mode : set Metafont mode
+ -w : locate files (similar to kpsewhich)
+ -p : act like kpsepath
+ -v : act like kpsexpand
+
+Valid pathtypes are:
+ gf : generic font bitmap
+ pk : packed bitmap font
+ base : Metafont memory dump
+ bib : BibTeX bibliography source
+ bst : BibTeX style files
+ cnf : Kpathsea runtime configuration files
+ fmt : TeX memory dump
+ mem : MetaPost memory dump
+ mf : Metafont source
+ mfpool : Metafont program strings
+ mp : MetaPost source
+ mppool : MetaPost program strings
+ mpsupport : MetaPost support files
+ pict : Other kinds of figures
+ tex : TeX source
+ texpool : TeX program strings
+ tfm : TeX font metrics
+ vf : virtual font
+ dvips_config : dvips config files
+ dvips_header : dvips header files
+ troff_font : troff fonts
+"
+
+action=kpsexpand
+case $0 in
+ */kpsewhich) action=kpsewhich;;
+ */kpsepath) action=kpsepath;;
+esac
+
+progname=`echo $0 | sed 's@.*/@@'`
+flags=''
+
+while true; do
+ case x"$1" in
+ x-n)
+ if test $# = 1; then
+ echo "$progname: missing argument for -n."
+ echo "$usage"; exit 1
+ else
+ flags="$flags -progname=$2"; shift; shift
+ fi;;
+ x-m)
+ if test $# = 1; then
+ echo "$progname: missing argument for -m."
+ echo "$usage"; exit 1
+ else
+ flags="$flags -mode=$2"; shift; shift
+ fi;;
+ x-w) action=kpsewhich; shift;;
+ x-p) action=kpsepath; shift;;
+ x-v) action=kpsexpand; shift;;
+ *) break;;
+ esac
+done
+
+case "$action" in
+ kpsewhich|kpsepath)
+ case "$1" in
+ gf) format='gf';;
+ pk) format='pk';;
+ base) format='.base';;
+ bib) format='.bib';;
+ bst) format='.bst';;
+ cnf) format='.cnf';;
+ fmt) format='.fmt';;
+ mem) format='.mem';;
+ mf) format='.mf';;
+ mfpool) format='.pool';;
+ mp) format='.mp';;
+ mppool) format='.pool';;
+ mpsupport) format='MetaPost support';;
+ pict) format='.eps';;
+ tex) format='.tex';;
+ texpool) format='.pool';;
+ tfm) format='.tfm';;
+ vf) format='.vf';;
+ dvips_config) format='dvips config';;
+ dvips_header) format='.pro';;
+ troff_font) format='Troff fonts';;
+ *) echo "$progname: $1: unknown format"; echo "$usage"; exit 1;;
+ esac
+ shift;;
+esac
+
+case "$action" in
+ kpsewhich)
+ test $# = 1 || { echo "$progname: missing filename"; echo "$usage"; exit 1; }
+ kpsewhich $flags -format="$format" "$1";;
+ kpsepath)
+ kpsewhich $flags -show-path="$format";;
+ kpsexpand)
+ test $# = 1 || { echo "$progname: missing string"; echo "$usage"; exit 1; }
+ kpsewhich $flags -expand-var="$1";;
+esac
diff --git a/Build/source/texk/tetex/kpsetool.man b/Build/source/texk/tetex/kpsetool.man
new file mode 100644
index 00000000000..addd9b08344
--- /dev/null
+++ b/Build/source/texk/tetex/kpsetool.man
@@ -0,0 +1,106 @@
+.TH "kpsetool" "1" "September 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+kpsetool \- script to make teTeX-style \fBkpsetool\fP,
+\fBkpsexpand\fP, and \fBkpsepath\fP available
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBkpsetool \fP [ \fIOPTIONS\fP\&.\&.\&. ] \fICOMMAND\fP
+.PP
+\fBkpsexpand\fP [ \fIOPTIONS\fP\&.\&.\&. ] \fISTRING\fP
+.PP
+\fBkpsepath\fP [ \fIOPTIONS\fP\&.\&.\&. ] \fIPATHTYPE\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBkpsetool\fP is a Bourne shell script that makes a teTeX-style
+\fBkpsetool\fP, \fBkpsexpand\fP, and \fBkpsepath\fP available\&.
+\fBkpsetool\fP uses \fBweb2c\fP\'s (new) \fBkpsexpand\fP binary, so the
+syntax for \fBkpsexpand\fP is incompatible with teTeX\'s as of version
+0\&.4\&.
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB-m\fP \fImode\fP"
+set Metafont mode
+.IP "\fB-n\fP \fIprogname\fP"
+pretend to be \fIprogname\fP to kpathsea
+.IP "\fB-p\fP"
+act like \fBkpsepath\fP(1)
+.IP "\fB-v\fP"
+act like \fBkpsexpand\fP(1)
+.IP "\fB-w\fP"
+act like \fBkpsewhich\fP(1)
+.PP
+.SH "USAGE"
+.PP
+\fIPATHTYPE\fP can be
+.PP
+.IP "\fBbase\fP"
+Metafont memory dump
+.IP "\fBbib\fP"
+BibTeX bibliography source
+.IP "\fBbst\fP"
+BibTeX style files
+.IP "\fBcnf\fP"
+Kpathsea runtime configuration files
+.IP "\fBdvips_config\fP"
+dvips config files
+.IP "\fBdvips_header\fP"
+dvips header files
+.IP "\fBfmt\fP"
+TeX memory dump
+.IP "\fBgf\fP"
+generic font bitmap
+.IP "\fBmem\fP"
+MetaPost memory dump
+.IP "\fBmf\fP"
+Metafont source
+.IP "\fBmfpool\fP"
+Metafont program strings
+.IP "\fBmp\fP"
+MetaPost source
+.IP "\fBmppool\fP"
+MetaPost program strings
+.IP "\fBmpsupport\fP"
+MetaPost support files
+.IP "\fBpict\fP"
+Other kinds of figures
+.IP "\fBpk\fP"
+packed bitmap font
+.IP "\fBtex\fP"
+TeX source
+.IP "\fBtexpool\fP"
+TeX program strings
+.IP "\fBtfm\fP"
+TeX font metrics
+.IP "\fBtroff_font\fP"
+troff fonts
+.IP "\fBvf\fP"
+virtual font
+.PP
+.SH "SEE ALSO"
+.PP
+\fBkpsewhich\fP(1)
+.PP
+\fIKpathsea: A library for path searching\fP (info or DVI file)
+.PP
+Web page: <http://tug\&.org/teTeX/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to <tetex@dbs\&.uni-hannover\&.de> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBkpsetool\fP was written by Thomas Esser
+<te@dbs\&.uni-hannover\&.de> in March, 1997\&. \fBkpsetool\fP
+is in the public domain\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/kpsewhere b/Build/source/texk/tetex/kpsewhere
new file mode 100755
index 00000000000..51088ee80d6
--- /dev/null
+++ b/Build/source/texk/tetex/kpsewhere
@@ -0,0 +1,63 @@
+#!/bin/sh
+#
+# Thomas Esser, Hans Fredrik Nordhaug, 2003, 2004.
+# Public domain.
+#
+# kpsewhere is an extension to kpsewhich (as where is for which in tcsh).
+# The intention is to provide a way to check for conflicts/shadowed
+# files.
+#
+# Original version by Hans Fredrik Nordhaug <hans.fredrik@nordhaug.no>
+#
+# Bugs / limitations:
+# conflicts/shadowed files whithin each texmf tree are not found.
+#
+
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+help='Usage: kpsewhere [OPTION]... [FILENAME]...
+ Expanding kpsewhich to iterate over each texmf tree listed in $TEXMF
+ separately.
+
+ See kpsewhich for help on options.
+
+ --help show this help'
+
+options=
+while
+ case $1 in
+ -h|-help|--help)
+ echo "$help" >&2
+ exit 0;;
+ -*) options="${options} '${1}'";;
+ *) break;;
+ esac
+do shift; done
+
+case $# in
+ 0)
+ echo "$help" >&2
+ exit 1
+ ;;
+esac
+
+IFS=':'
+for file
+do
+ for path in `kpsewhich --expand-path='$TEXMF'`
+ do
+ eval TEXMF=\$path kpsewhich $options \"\$file\"
+ done
+done
+exit 0
diff --git a/Build/source/texk/tetex/kpsewhere.man b/Build/source/texk/tetex/kpsewhere.man
new file mode 100644
index 00000000000..76700ed33fe
--- /dev/null
+++ b/Build/source/texk/tetex/kpsewhere.man
@@ -0,0 +1,50 @@
+.TH "kpsewhere" "1" "March 2004" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+kpsewhere \- Expanding \fBkpsewhich\fP to separately iterate over each
+texmf tree listed in $TEXMF.
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBkpsewhere \fP [ \fIkpsewhich-OPTIONS\fP\&.\&.\&. ] \fICOMMAND\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBkpsewhere\fP is an extension to \fBkpsewhich\fP (as \fBwhere\fP is
+for \fBwhich\fP in tcsh). The intention is to provide a way to check
+for conflicts/shadowed files. It will, however, only find \fBone\fP
+file per TEXMF tree.
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB-h|--help\fP"
+show a short help message
+.IP "\fB\&*\fP"
+all other options are directly handed to kpsewhich
+.PP
+.SH "SEE ALSO"
+.PP
+\fBkpsewhich\fP(1)
+.PP
+\fIKpathsea: A library for path searching\fP (info or DVI file)
+.PP
+Web page: <http://tug\&.org/teTeX/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to <tetex@dbs\&.uni-hannover\&.de> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBkpsewhere\fP was written by Hans Fredrik Nordhaug
+<hans\&.fredrik@nordhaug\&.no>, additions by
+Thomas Esser
+<te@dbs\&.uni-hannover\&.de>, in 2003 and 2004\&. \fBkpsewhere\fP
+is in the public domain\&.
+.PP
+This manual page was written by Frank Küster <frank@kuesterei\&.ch>,
+for the Debian GNU/Linux system\&. It is also in the public domain
+and may be used and changed by others without contacting the author\&.
+Any mistakes or omissions in the manual page are my fault; inquiries
+about or corrections to this manual page should be directed to me (and
+not to the primary author)\&.
diff --git a/Build/source/texk/tetex/latex.info b/Build/source/texk/tetex/latex.info
new file mode 100644
index 00000000000..05e8a79a75c
--- /dev/null
+++ b/Build/source/texk/tetex/latex.info
@@ -0,0 +1,4309 @@
+This is latex.info, produced by makeinfo version 4.7 from latex2e.texi.
+
+INFO-DIR-SECTION TeX
+START-INFO-DIR-ENTRY
+* LaTeX2e: (latex). LaTeXe help 1.6.
+END-INFO-DIR-ENTRY
+
+ This file documents LaTeX2e, a document preparation system. LaTeX2e
+is a macro package for TeX.
+
+ This is edition 1.6 of the LaTeX2e documentation, and is for the
+Texinfo that is distributed as part of Version 19 of GNU Emacs. It uses
+version 2.134 or later of the texinfo.tex input file.
+
+ This is translated from LATEX.HLP v1.0a in the VMS Help Library. The
+pre-translation version was written by George D. Greenwade of Sam
+Houston State University.
+
+ The LaTeX 2.09 version was written by Stephen Gilmore
+<stg@dcs.ed.ac.uk>.
+
+ The LaTeX2e version was adapted from this by Torsten Martinsen
+<bullestock@dk-online.dk>.
+
+ Copyright 1988,1994 Free Software Foundation, Inc. Copyright
+1994-1996 Torsten Martinsen.
+
+ Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that the sections entitled "Distribution" and "General
+Public License" may be included in a translation approved by the author
+instead of in the original English.
+
+
+File: latex.info, Node: Top, Next: Overview, Prev: (dir), Up: (dir)
+
+ LaTeX2e is a document preparation system implemented as a macro
+package for Donald E. Knuth's TeX typesetting program.
+
+ LaTeX was originally conceived by Leslie Lamport.
+
+ This is edition 1.6 of the LaTeX2e documentation.
+
+* Menu:
+
+
+* Overview:: What is LaTeX?
+* Commands:: Commands within a LaTeX document.
+* Parameters:: The command line.
+* Command Index:: An alphabetical list of LaTeX commands.
+* Concept Index:: An alphabetical list of concepts.
+
+
+File: latex.info, Node: Overview, Next: Commands, Prev: Top, Up: Top
+
+1 Overview of LaTeX and Local Guide
+***********************************
+
+The LaTeX command typesets a file of text using the TeX program and the
+LaTeX Macro package for TeX. To be more specific, it processes an input
+file containing the text of a document with interspersed commands that
+describe how the text should be formatted. It produces at least three
+files as output:
+
+ 1. A "Device Independent", or `.dvi' file. This contains commands that
+ can be translated into commands for a variety of output devices.
+ You can view the output of LaTeX by using a program such as `xdvi',
+ which actually uses the `.dvi' file.
+
+ 2. A "transcript" or `.log' file that contains summary information and
+ diagnostic messages for any errors discovered in the input file.
+
+ 3. An "auxiliary" or `.aux' file. This is used by LaTeX itself, for
+ things such as sectioning.
+
+ For a description of what goes on inside TeX, you should consult
+`The TeXbook' by Donald E. Knuth, ISBN 0-201-13448-9, published jointly
+by the American Mathematical Society and Addison-Wesley Publishing
+Company.
+
+ For a description of LaTeX, you should consult:
+
+ `LaTeX: A Document Preparation System', by Leslie Lamport,
+Addison-Wesley Publishing Company, 2nd edition, 1994.
+
+ `The LaTeX Companion', by Michel Goossens, Frank Mittelbach, and
+Alexander Samarin, Addison-Wesley, 1994.
+
+
+File: latex.info, Node: Commands, Next: Parameters, Prev: Overview, Up: Top
+
+2 Commands
+**********
+
+A LaTeX command begins with the command name, which consists of a `\'
+followed by either (a) a string of letters or (b) a single non-letter.
+Arguments contained in square brackets, `[]', are optional while
+arguments contained in braces, `{}', are required.
+
+ NOTE: LaTeX is case sensitive. Enter all commands in lower
+case unless explicitly directed to do otherwise.
+
+* Menu:
+
+* Counters:: Internal counters used by LaTeX.
+* Cross References:: Automatic referencing.
+* Definitions:: Define your own commands etc.
+* Document Classes:: Some of the various classes available.
+* Environments:: Such as enumerate & itemize.
+* Footnotes:: How to produce footnotes.
+* Layout:: Controlling the page layout.
+* Lengths:: The length commands.
+* Letters:: The letter class.
+* Line & Page Breaking:: How to insert pagebreaks etc.
+* Making Paragraphs:: Paragraph commands.
+* Margin Notes:: Putting remarks in the margin.
+* Math Formulae:: How to create mathematical formulae.
+* Modes:: Paragraph, Math or LR modes.
+* Page Styles:: Various styles of page layout.
+* Sectioning:: How to section properly.
+* Spaces & Boxes:: All the associated commands.
+* Special Characters:: Special reserved characters.
+* Splitting the Input:: Dealing with big files by splitting.
+* Starting & Ending:: The formal start & end layouts.
+* Table of Contents:: How to create a table of contents.
+* Terminal Input/Output:: User interaction.
+* Typefaces:: Such as bold, italics etc.
+
+
+File: latex.info, Node: Counters, Next: Cross References, Prev: Commands, Up: Commands
+
+2.1 Counters
+============
+
+Everything LaTeX numbers for you has a counter associated with it. The
+name of the counter is the same as the name of the environment or
+command that produces the number, except with no `\'. (enumi - enumiv
+are used for the nested enumerate environment.) Below is a list of the
+counters used in LaTeX's standard document classes to control numbering.
+
+ part paragraph figure enumi
+ chapter subparagraph table enumii
+ section page footnote enumiii
+ subsection equation mpfootnote enumiv
+ subsubsection
+
+* Menu:
+
+* \addtocounter:: Add a quantity to a counter.
+* \alph:: Print value of a counter using letters.
+* \arabic:: Print value of a counter using numerals.
+* \fnsymbol:: Print value of a counter using symbols.
+* \newcounter:: Define a new counter.
+* \refstepcounter:: Add to counter, resetting subsidiary counters.
+* \roman:: Print value of a counter using roman numerals.
+* \setcounter:: Set the value of a counter.
+* \stepcounter:: Add to counter, resetting subsidiary counters.
+* \usecounter:: Use a specified counter in a list environment.
+* \value:: Use the value of a counter in an expression.
+
+
+File: latex.info, Node: \addtocounter, Next: \alph, Prev: Counters, Up: Counters
+
+2.1.1 \addtocounter
+-------------------
+
+`\addtocounter{counter}{value}'
+
+ The `\addtocounter' command increments the `counter' by the amount
+specified by the `value' argument. The `value' argument can be
+negative.
+
+
+File: latex.info, Node: \alph, Next: \arabic, Prev: \addtocounter, Up: Counters
+
+2.1.2 \alph
+-----------
+
+`\alph{counter}'
+
+ This command causes the value of the `counter' to be printed in
+alphabetic characters. The `\alph' command uses lower case alphabetic
+alphabetic characters, i.e., `a, b, c...' while the `\Alph' command
+uses upper case alphabetic characters, i.e., `A, B, C...'.
+
+
+File: latex.info, Node: \arabic, Next: \fnsymbol, Prev: \alph, Up: Counters
+
+2.1.3 \arabic
+-------------
+
+`\arabic{counter}'
+
+ The `\arabic' command causes the value of the `counter' to be
+printed in Arabic numbers, i.e., `3'.
+
+
+File: latex.info, Node: \fnsymbol, Next: \newcounter, Prev: \arabic, Up: Counters
+
+2.1.4 \fnsymbol
+---------------
+
+`\fnsymbol{counter}'
+
+ The `\fnsymbol' command causes the value of the `counter' to be
+printed in a specific sequence of nine symbols that can be used for
+numbering footnotes.
+
+ NB. `counter' must have a value between 1 and 9 inclusive.
+
+
+File: latex.info, Node: \newcounter, Next: \refstepcounter, Prev: \fnsymbol, Up: Counters
+
+2.1.5 \newcounter
+-----------------
+
+`\newcounter{foo}[counter]'
+
+ The `\newcounter' command defines a new counter named `foo'. The
+counter is initialized to zero.
+
+ The optional argument `[counter]' causes the counter `foo' to be
+reset whenever the counter named in the optional argument is
+incremented.
+
+
+File: latex.info, Node: \refstepcounter, Next: \roman, Prev: \newcounter, Up: Counters
+
+2.1.6 \refstepcounter
+---------------------
+
+`\refstepcounter{counter}'
+
+ The `\refstepcounter' command works like `\stepcounter' *Note
+\stepcounter::, except it also defines the current `\ref' value to be
+the result of `\thecounter'.
+
+
+File: latex.info, Node: \roman, Next: \stepcounter, Prev: \refstepcounter, Up: Counters
+
+2.1.7 \roman
+------------
+
+`\roman{counter}'
+
+ This command causes the value of the `counter' to be printed in
+Roman numerals. The `\roman' command uses lower case Roman numerals,
+i.e., `i, ii, iii...', while the `\Roman' command uses upper case Roman
+numerals, i.e., `I, II, III...'.
+
+
+File: latex.info, Node: \stepcounter, Next: \setcounter, Prev: \roman, Up: Counters
+
+2.1.8 \stepcounter
+------------------
+
+`\stepcounter{counter}'
+
+ The `\stepcounter' command adds one to the `counter' and resets all
+subsidiary counters.
+
+
+File: latex.info, Node: \setcounter, Next: \usecounter, Prev: \stepcounter, Up: Counters
+
+2.1.9 \setcounter
+-----------------
+
+`\setcounter{counter}{value}'
+
+ The `\setcounter' command sets the value of the `counter' to that
+specified by the `value' argument.
+
+
+File: latex.info, Node: \usecounter, Next: \value, Prev: \setcounter, Up: Counters
+
+2.1.10 \usecounter
+------------------
+
+`\usecounter{counter}'
+
+ The `\usecounter' command is used in the second argument of the
+`list' environment to allow the counter specified to be used to number
+the list items.
+
+
+File: latex.info, Node: \value, Prev: \usecounter, Up: Counters
+
+2.1.11 \value
+-------------
+
+`\value{counter}'
+
+ The `\value' command produces the value of the `counter' named in
+the mandatory argument. It can be used where LaTeX expects an integer
+or number, such as the second argument of a `\setcounter' or
+`\addtocounter' command, or in:
+
+ \hspace{\value{foo}\parindent}
+
+ It is useful for doing arithmetic with counters.
+
+
+File: latex.info, Node: Cross References, Next: Definitions, Prev: Counters, Up: Commands
+
+2.2 Cross References
+====================
+
+One reason for numbering things like figures and equations is to refer
+the reader to them, as in "See Figure 3 for more details."
+
+* Menu:
+
+* \label:: Assign a symbolic name to a piece of text.
+* \pageref:: Refer to a page number.
+* \ref:: Refer to a section, figure or similar.
+
+
+File: latex.info, Node: \label, Next: \pageref, Prev: Cross References, Up: Cross References
+
+2.2.1 \label
+------------
+
+`\label{key}'
+
+ A `\label' command appearing in ordinary text assigns to the `key'
+the number of the current sectional unit; one appearing inside a
+numbered environment assigns that number to the `key'.
+
+ A `key' can consist of any sequence of letters, digits, or
+punctuation characters. Upper and lowercase letters are different.
+
+ To avoid accidentally creating two labels with the same name, it is
+common to use labels consisting of a prefix and a suffix separated by a
+colon. The prefixes conventionally used are
+
+ * `cha' for chapters
+
+ * `sec' for lower-level sectioning commands
+
+ * `fig' for figures
+
+ * `tab' for tables
+
+ * `eq' for equations
+
+ Thus, a label for a figure would look like `fig:bandersnatch'.
+
+
+File: latex.info, Node: \pageref, Next: \ref, Prev: \label, Up: Cross References
+
+2.2.2 \pageref
+--------------
+
+`\pageref{key}'
+
+ The `\pageref' command produces the page number of the place in the
+text where the corresponding `\label' command appears. ie. where
+`\label{key}' appears.
+
+
+File: latex.info, Node: \ref, Prev: \pageref, Up: Cross References
+
+2.2.3 \ref
+----------
+
+`\ref{key}'
+
+ The `\ref' command produces the number of the sectional unit,
+equation number, ... of the corresponding `\label' command.
+
+
+File: latex.info, Node: Definitions, Next: Document Classes, Prev: Cross References, Up: Commands
+
+2.3 Definitions
+===============
+
+* Menu:
+
+* \newcommand:: Define a new command.
+* \newenvironment:: Define a new environment.
+* \newtheorem:: Define a new theorem-like environment.
+* \newfont:: Define a new font name.
+
+
+File: latex.info, Node: \newcommand, Next: \newenvironment, Prev: Definitions, Up: Definitions
+
+2.3.1 \newcommand
+-----------------
+
+ \newcommand{cmd}[args]{definition}
+ \newcommand{cmd}[args][default]{definition}
+ \renewcommand{cmd}[args]{definition}
+ \renewcommand{cmd}[args][default]{definition}
+
+ These commands define (or redefine) a command.
+
+`cmd'
+ A command name beginning with a `\'. For `\newcommand' it must
+ not be already defined and must not begin with `\end'; for
+ `\renewcommand' it must already be defined.
+
+`args'
+ An integer from 1 to 9 denoting the number of arguments of the
+ command being defined. The default is for the command to have no
+ arguments.
+
+`def'
+ If this optional parameter is present, it means that the command's
+ first argument is optional. The default value of the optional
+ argument is `def'.
+
+`definition'
+ The text to be substituted for every occurrence of `cmd'; a
+ parameter of the form `#n' in `cmd' is replaced by the text of the
+ nth argument when this substitution takes place.
+
+
+
+File: latex.info, Node: \newenvironment, Next: \newtheorem, Prev: \newcommand, Up: Definitions
+
+2.3.2 \newenvironment
+---------------------
+
+ \newenvironment{nam}[args]{begdef}{enddef}
+ \newenvironment{nam}[args][default]{begdef}{enddef}
+ \renewenvironment{nam}[args]{begdef}{enddef}
+
+ These commands define or redefine an environment.
+
+`nam'
+ The name of the environment. For `\newenvironment' there must be
+ no currently defined environment by that name, and the command
+ `\nam' must be undefined. For `\renewenvironment' the environment
+ must already be defined.
+
+`args'
+ An integer from 1 to 9 denoting the number of arguments of the
+ newly-defined environment. The default is no arguments.
+
+`default'
+ If this is specified, the first argument is optional, and `default'
+ gives the default value for that argument.
+
+`begdef'
+ The text substituted for every occurrence of `\begin{nam}'; a
+ parameter of the form `#n' in `cmd' is replaced by the text of the
+ nth argument when this substitution takes place.
+
+`enddef'
+ The text substituted for every occurrence of `\end{nam}'. It may
+ not contain any argument parameters.
+
+
+
+File: latex.info, Node: \newtheorem, Next: \newfont, Prev: \newenvironment, Up: Definitions
+
+2.3.3 \newtheorem
+-----------------
+
+ \newtheorem{env_name}{caption}[within]
+ \newtheorem{env_name}[numbered_like]{caption}
+
+ This command defines a theorem-like environment.
+
+`env_name'
+ The name of the environment to be defined. A string of letters.
+ It must not be the name of an existing environment or counter.
+
+`caption'
+ The text printed at the beginning of the environment, right before
+ the number. This may simply say "Theorem", for example.
+
+`within'
+ The name of an already defined counter, usually of a sectional
+ unit. Provides a means of resetting the new theorem counter
+ *within* the sectional unit.
+
+`numbered_like'
+ The name of an already defined theorem-like environment.
+
+
+ The `\newtheorem' command may have at most one optional argument.
+
+
+File: latex.info, Node: \newfont, Prev: \newtheorem, Up: Definitions
+
+2.3.4 \newfont
+--------------
+
+`\newfont{cmd}{font_name}'
+
+ Defines the command name `cmd', which must not be currently defined,
+to be a declaration that selects the font named `font_name' to be the
+current font.
+
+
+File: latex.info, Node: Document Classes, Next: Environments, Prev: Definitions, Up: Commands
+
+2.4 Document Classes
+====================
+
+Valid LaTeX document classes include:
+
+ * article
+
+ * report
+
+ * letter
+
+ * book
+
+ * slides
+
+ Other document classes are often available. *Note Overview::, for
+details. They are selected with the following command:
+
+ `\documentclass [options] {class}'
+
+ All the standard classes (except slides) accept the following options
+for selecting the typeface size (10 pt is default):
+
+ 10pt, 11pt, 12pt
+
+ All classes accept these options for selecting the paper size
+(default is letter):
+
+ a4paper, a5paper, b5paper, letterpaper, legalpaper, executivepaper
+
+ Miscellaneous options:
+
+ * landscape -- selects landscape format. Default is portrait.
+
+ * titlepage, notitlepage -- selects if there should be a separate
+ title page.
+
+ * leqno -- equation number on left side of equations. Default is
+ right side.
+
+ * fleqn -- displayed formulas flush left. Default is centred.
+
+ * openbib -- use "open" bibliography format.
+
+ * draft, final -- mark/do not mark overfull boxes with a rule.
+ Default is final.
+
+ These options are not available with the slides class:
+
+ * oneside, twoside -- selects one- or twosided layout. Default is
+ oneside, except for the book class.
+
+ * openright, openany -- determines if a chapter should start on a
+ right-hand page. Default is openright for book.
+
+ * onecolumn, twocolumn -- one or two columns. Defaults to one column.
+
+ The slides class offers the option `clock' for printing the time at
+the bottom of each note.
+
+ If you specify more than one option, they must be separated by a
+comma.
+
+ Additional packages are loaded by a
+
+ `\usepackage[options]{pkg}'
+
+ command. If you specify more than one package, they must be
+separated by a comma.
+
+ Any options given in the `\documentclass' command that are unknown
+by the selected document class are passed on to the packages loaded with
+`\usepackage'.
+
+
+File: latex.info, Node: Layout, Next: Lengths, Prev: Footnotes, Up: Commands
+
+2.5 Layout
+==========
+
+Miscellaneous commands for controlling the general layout of the page.
+
+* Menu:
+
+* \flushbottom:: Make all text pages the same height.
+* \onecolumn:: Use one-column layout.
+* \raggedbottom:: Allow text pages of differing height.
+* \twocolumn:: Use two-column layout.
+
+
+File: latex.info, Node: \flushbottom, Next: \onecolumn, Up: Layout
+
+2.5.1 \flushbottom
+------------------
+
+The `\flushbottom' declaration makes all text pages the same height,
+adding extra vertical space when necessary to fill out the page.
+
+ This is the standard if twocolumn mode is selected.
+
+
+File: latex.info, Node: \onecolumn, Next: \raggedbottom, Prev: \flushbottom, Up: Layout
+
+2.5.2 \onecolumn
+----------------
+
+The `\onecolumn' declaration starts a new page and produces
+single-column output.
+
+
+File: latex.info, Node: \raggedbottom, Next: \twocolumn, Prev: \onecolumn, Up: Layout
+
+2.5.3 \raggedbottom
+-------------------
+
+The `\raggedbottom' declaration makes all pages the height of the text
+on that page. No extra vertical space is added.
+
+
+File: latex.info, Node: \twocolumn, Prev: \raggedbottom, Up: Layout
+
+2.5.4 \twocolumn
+----------------
+
+`\twocolumn[text]'
+
+ The `\twocolumn' declaration starts a new page and produces
+two-column output. If the optional `text' argument is present, it is
+typeset in one-column mode.
+
+
+File: latex.info, Node: Environments, Next: Footnotes, Prev: Document Classes, Up: Commands
+
+2.6 Environments
+================
+
+LaTeX provides a number of different paragraph-making environments.
+Each environment begins and ends in the same manner.
+
+ \begin{environment-name}
+ .
+ .
+ .
+ \end{environment-name}
+
+* Menu:
+
+* array:: Math arrays.
+* center:: Centred lines.
+* description:: Labelled lists.
+* enumerate:: Numbered lists.
+* eqnarray:: Sequences of aligned equations.
+* equation:: Displayed equation.
+* figure:: Floating figures.
+* flushleft:: Flushed left lines.
+* flushright:: Flushed right lines.
+* itemize:: Bulleted lists.
+* letter:: Letters.
+* list:: Generic list environment.
+* minipage:: Miniature page.
+* picture:: Picture with text, arrows, lines and circles.
+* quotation:: Indented environment with paragraph indentation.
+* quote:: Indented environment with no paragraph indentation.
+* tabbing:: Align text arbitrarily.
+* table:: Floating tables.
+* tabular:: Align text in columns.
+* thebibliography:: Bibliography or reference list.
+* theorem:: Theorems, lemmas, etc.
+* titlepage:: For hand crafted title pages.
+* verbatim:: Simulating typed input.
+* verse:: For poetry and other things.
+
+
+File: latex.info, Node: array, Next: center, Prev: Environments, Up: Environments
+
+2.6.1 array
+-----------
+
+ \begin{array}{col1col2...coln}
+ column 1 entry & column 2 entry ... & column n entry \\
+ .
+ .
+ .
+ \end{array}
+
+ Math arrays are produced with the array environment. It has a single
+mandatory argument describing the number of columns and the alignment
+within them. Each column, `coln', is specified by a single letter that
+tells how items in that row should be formatted.
+
+ * `c' -- for centred
+
+ * `l' -- for flush left
+
+ * `r' -- for flush right
+
+ Column entries must be separated by an `&'. Column entries may
+include other LaTeX commands. Each row of the array must be terminated
+with the string `\\'.
+
+ Note that the `array' environment can only be used in math mode, so
+normally it is used inside an `equation' environment.
+
+
+File: latex.info, Node: center, Next: description, Prev: array, Up: Environments
+
+2.6.2 center
+------------
+
+ \begin{center}
+ Text on line 1 \\
+ Text on line 2 \\
+ .
+ .
+ .
+ \end{center}
+
+ The `center' environment allows you to create a paragraph consisting
+of lines that are centred within the left and right margins on the
+current page. Each line must be terminated with the string `\\'.
+
+* Menu:
+
+* \centering:: The declaration form of the `center' environment.
+
+
+File: latex.info, Node: \centering, Up: center
+
+2.6.2.1 \centering
+..................
+
+This declaration corresponds to the `center' environment. This
+declaration can be used inside an environment such as `quote' or in a
+`parbox'. The text of a figure or table can be centred on the page by
+putting a `\centering' command at the beginning of the figure or table
+environment.
+
+ Unlike the `center' environment, the `\centering' command does not
+start a new paragraph; it simply changes how LaTeX formats paragraph
+units. To affect a paragraph unit's format, the scope of the
+declaration must contain the blank line or `\end' command (of an
+environment like quote) that ends the paragraph unit.
+
+
+File: latex.info, Node: description, Next: enumerate, Prev: center, Up: Environments
+
+2.6.3 description
+-----------------
+
+ \begin{description}
+ \item [label] First item
+ \item [label] Second item
+ .
+ .
+ .
+ \end{description}
+
+ The `description' environment is used to make labelled lists. The
+`label' is bold face and flushed right.
+
+
+File: latex.info, Node: enumerate, Next: eqnarray, Prev: description, Up: Environments
+
+2.6.4 enumerate
+---------------
+
+ \begin{enumerate}
+ \item First item
+ \item Second item
+ .
+ .
+ .
+ \end{enumerate}
+
+ The `enumerate' environment produces a numbered list. Enumerations
+can be nested within one another, up to four levels deep. They can also
+be nested within other paragraph-making environments.
+
+ Each item of an enumerated list begins with an `\item' command.
+There must be at least one `\item' command within the environment.
+
+ The `enumerate' environment uses the `enumi' through `enumiv'
+counters (*note Counters::). The type of numbering can be changed by
+redefining `\theenumi' etc.
+
+
+File: latex.info, Node: eqnarray, Next: equation, Prev: enumerate, Up: Environments
+
+2.6.5 eqnarray
+--------------
+
+ \begin{eqnarray}
+ math formula 1 \\
+ math formula 2 \\
+ .
+ .
+ .
+ \end{eqnarray}
+
+ The `eqnarray' environment is used to display a sequence of
+equations or inequalities. It is very much like a three-column `array'
+environment, with consecutive rows separated by `\\' and consecutive
+items within a row separated by an `&'.
+
+ An equation number is placed on every line unless that line has a
+`\nonumber' command.
+
+ The command `\lefteqn' is used for splitting long formulas across
+lines. It typesets its argument in display style flush left in a box of
+zero width.
+
+
+File: latex.info, Node: equation, Next: figure, Prev: eqnarray, Up: Environments
+
+2.6.6 equation
+--------------
+
+ \begin{equation}
+ math formula
+ \end{equation}
+
+ The `equation' environment centres your equation on the page and
+places the equation number in the right margin.
+
+
+File: latex.info, Node: figure, Next: flushleft, Prev: equation, Up: Environments
+
+2.6.7 figure
+------------
+
+ \begin{figure}[placement]
+
+ body of the figure
+
+ \caption{figure title}
+ \end{figure}
+
+ Figures are objects that are not part of the normal text, and are
+usually "floated" to a convenient place, like the top of a page.
+Figures will not be split between two pages.
+
+ The optional argument `[placement]' determines where LaTeX will try
+to place your figure. There are four places where LaTeX can possibly
+put a float:
+
+ 1. `h' (Here) - at the position in the text where the figure
+ environment appears.
+
+ 2. `t' (Top) - at the top of a text page.
+
+ 3. `b' (Bottom) - at the bottom of a text page.
+
+ 4. `p' (Page of floats) - on a separate float page, which is a page
+ containing no text, only floats.
+
+ The standard report and article classes use the default placement
+`tbp'.
+
+ The body of the figure is made up of whatever text, LaTeX commands,
+etc. you wish. The `\caption' command allows you to title your figure.
+
+
+File: latex.info, Node: flushleft, Next: flushright, Prev: figure, Up: Environments
+
+2.6.8 flushleft
+---------------
+
+ \begin{flushleft}
+ Text on line 1 \\
+ Text on line 2 \\
+ .
+ .
+ .
+ \end{flushleft}
+
+ The `flushleft' environment allows you to create a paragraph
+consisting of lines that are flushed left, to the left-hand margin.
+Each line must be terminated with the string `\\'.
+
+* Menu:
+
+* \raggedright:: The declaration form of the `flushleft' environment.
+
+
+File: latex.info, Node: \raggedright, Up: flushleft
+
+2.6.8.1 \raggedright
+....................
+
+This declaration corresponds to the `flushleft' environment. This
+declaration can be used inside an environment such as `quote' or in a
+`parbox'.
+
+ Unlike the `flushleft' environment, the `\raggedright' command does
+not start a new paragraph; it simply changes how LaTeX formats
+paragraph units. To affect a paragraph unit's format, the scope of the
+declaration must contain the blank line or `\end' command (of an
+environment like quote) that ends the paragraph unit.
+
+
+File: latex.info, Node: flushright, Next: itemize, Prev: flushleft, Up: Environments
+
+2.6.9 flushright
+----------------
+
+ \begin{flushright}
+ Text on line 1 \\
+ Text on line 2 \\
+ .
+ .
+ .
+ \end{flushright}
+
+ The `flushright' environment allows you to create a paragraph
+consisting of lines that are flushed right, to the right-hand margin.
+Each line must be terminated with the string `\\'.
+
+* Menu:
+
+* \raggedleft:: The declaration form of the `flushright' environment.
+
+
+File: latex.info, Node: \raggedleft, Up: flushright
+
+2.6.9.1 \raggedleft
+...................
+
+This declaration corresponds to the `flushright' environment. This
+declaration can be used inside an environment such as `quote' or in a
+`parbox'.
+
+ Unlike the `flushright' environment, the `\raggedleft' command does
+not start a new paragraph; it simply changes how LaTeX formats
+paragraph units. To affect a paragraph unit's format, the scope of the
+declaration must contain the blank line or `\end' command (of an
+environment like quote) that ends the paragraph unit.
+
+
+File: latex.info, Node: itemize, Next: letter, Prev: flushright, Up: Environments
+
+2.6.10 itemize
+--------------
+
+ \begin{itemize}
+ \item First item
+ \item Second item
+ .
+ .
+ .
+ \end{itemize}
+
+ The `itemize' environment produces a "bulleted" list. Itemizations
+can be nested within one another, up to four levels deep. They can also
+be nested within other paragraph-making environments.
+
+ Each item of an `itemized' list begins with an `\item' command.
+There must be at least one `\item' command within the environment.
+
+ The `itemize' environment uses the `itemi' through `itemiv' counters
+(*note Counters::). The type of numbering can be changed by redefining
+`\theitemi' etc.
+
+
+File: latex.info, Node: letter, Next: list, Prev: itemize, Up: Environments
+
+2.6.11 letter
+-------------
+
+This environment is used for creating letters. *Note Letters::.
+
+
+File: latex.info, Node: list, Next: minipage, Prev: letter, Up: Environments
+
+2.6.12 list
+-----------
+
+The `list' environment is a generic environment which is used for
+defining many of the more specific environments. It is seldom used in
+documents, but often in macros.
+
+ \begin{list}{label}{spacing}
+ \item First item
+ \item Second item
+ .
+ .
+ .
+ \end{list}
+
+ The `{label}' argument specifies how items should be labelled. This
+argument is a piece of text that is inserted in a box to form the
+label. This argument can and usually does contain other LaTeX commands.
+
+ The `{spacing}' argument contains commands to change the spacing
+parameters for the list. This argument will most often be null, i.e.,
+`{}'. This will select all default spacing which should suffice for
+most cases.
+
+
+File: latex.info, Node: minipage, Next: picture, Prev: list, Up: Environments
+
+2.6.13 minipage
+---------------
+
+ \begin{minipage}[position]{width}
+ text
+ \end{minipage}
+
+ The `minipage' environment is similar to a `\parbox' command. It
+takes the same optional `position' argument and mandatory `width'
+argument. You may use other paragraph-making environments inside a
+minipage.
+
+ Footnotes in a `minipage' environment are handled in a way that is
+particularly useful for putting footnotes in figures or tables. A
+`\footnote' or `\footnotetext' command puts the footnote at the bottom
+of the minipage instead of at the bottom of the page, and it uses the
+`mpfootnote' counter instead of the ordinary `footnote' counter *Note
+Counters::.
+
+ NOTE: Don't put one minipage inside another if you are using
+footnotes; they may wind up at the bottom of the wrong minipage.
+
+
+File: latex.info, Node: picture, Next: quotation, Prev: minipage, Up: Environments
+
+2.6.14 picture
+--------------
+
+ \begin{picture}(width,height)(x offset,y offset)
+ .
+ .
+ picture commands
+ .
+ .
+ \end{picture}
+
+ The `picture' environment allows you to create just about any kind
+of picture you want containing text, lines, arrows and circles. You
+tell LaTeX where to put things in the picture by specifying their
+coordinates. A coordinate is a number that may have a decimal point and
+a minus sign -- a number like `5', `2.3' or `-3.1416'. A coordinate
+specifies a length in multiples of the unit length `\unitlength', so if
+`\unitlength' has been set to `1cm', then the coordinate 2.54 specifies
+a length of 2.54 centimetres. You can change the value of
+`\unitlength' anywhere you want, using the `\setlength' command, but
+strange things will happen if you try changing it inside the picture
+environment.
+
+ A position is a pair of coordinates, such as `(2.4,-5)', specifying
+the point with x-coordinate `2.4' and y-coordinate `-5'. Coordinates
+are specified in the usual way with respect to an origin, which is
+normally at the lower-left corner of the picture. Note that when a
+position appears as an argument, it is not enclosed in braces; the
+parentheses serve to delimit the argument.
+
+ The `picture' environment has one mandatory argument, which is a
+`position'. It specifies the size of the picture. The environment
+produces a rectangular box with width and height determined by this
+argument's x- and y-coordinates.
+
+ The `picture' environment also has an optional `position' argument,
+following the `size' argument, that can change the origin. (Unlike
+ordinary optional arguments, this argument is not contained in square
+brackets.) The optional argument gives the coordinates of the point at
+the lower-left corner of the picture (thereby determining the origin).
+For example, if `\unitlength' has been set to `1mm', the command
+ \begin{picture}(100,200)(10,20)
+ produces a picture of width 100 millimetres and height 200
+millimetres, whose lower-left corner is the point (10,20) and whose
+upper-right corner is therefore the point (110,220). When you first
+draw a picture, you will omit the optional argument, leaving the origin
+at the lower-left corner. If you then want to modify your picture by
+shifting everything, you just add the appropriate optional argument.
+
+ The environment's mandatory argument determines the nominal size of
+the picture. This need bear no relation to how large the picture
+really is; LaTeX will happily allow you to put things outside the
+picture, or even off the page. The picture's nominal size is used by
+LaTeX in determining how much room to leave for it.
+
+ Everything that appears in a picture is drawn by the `\put' command.
+The command
+ \put (11.3,-.3){...}
+ puts the object specified by `...' in the picture, with its
+reference point at coordinates (11.3,-.3). The reference points for
+various objects will be described below.
+
+ The `\put' command creates an "LR box". You can put anything in the
+text argument of the `\put' command that you'd put into the argument of
+an `\mbox' and related commands. When you do this, the reference point
+will be the lower left corner of the box.
+
+ Picture commands:
+
+* Menu:
+
+* \circle:: Draw a circle.
+* \dashbox:: Draw a dashed box.
+* \frame:: Draw a frame around an object.
+* \framebox (picture):: Draw a box with a frame around it.
+* \line:: Draw a straight line.
+* \linethickness:: Set the line thickness.
+* \makebox (picture):: Draw a box of the specified size.
+* \multiput:: Draw multiple instances of an object.
+* \oval:: Draw an ellipse.
+* \put:: Place an object at a specified place.
+* \shortstack:: Make a pile of objects.
+* \vector:: Draw a line with an arrow.
+
+
+File: latex.info, Node: \circle, Next: \dashbox, Up: picture
+
+2.6.14.1 \circle
+................
+
+`\circle[*]{diameter}'
+
+ The `\circle' command produces a circle with a diameter as close to
+the specified one as possible. If the `*'-form of the command is used,
+LaTeX draws a solid circle.
+
+ Note that only circles up to 40 pt can be drawn.
+
+
+File: latex.info, Node: \dashbox, Next: \frame, Prev: \circle, Up: picture
+
+2.6.14.2 \dashbox
+.................
+
+Draws a box with a dashed line.
+
+ `\dashbox{dash_length}(width,height){...}'
+
+ The `\dashbox' has an extra argument which specifies the width of
+each dash. A dashed box looks best when the `width' and `height' are
+multiples of the `dash_length'.
+
+
+File: latex.info, Node: \frame, Next: \framebox (picture), Prev: \dashbox, Up: picture
+
+2.6.14.3 \frame
+...............
+
+`\frame{...}'
+
+ The `\frame' command puts a rectangular frame around the object
+specified in the argument. The reference point is the bottom left
+corner of the frame. No extra space is put between the frame and the
+object.
+
+
+File: latex.info, Node: \framebox (picture), Next: \line, Prev: \frame, Up: picture
+
+2.6.14.4 \framebox
+..................
+
+`\framebox(width,height)[position]{...}'
+
+ The `\framebox' command is exactly the same as the `\makebox'
+command, except that it puts a frame around the outside of the box that
+it creates.
+
+ The `framebox' command produces a rule of thickness `\fboxrule', and
+leaves a space `\fboxsep' between the rule and the contents of the box.
+
+
+File: latex.info, Node: \line, Next: \linethickness, Prev: \framebox (picture), Up: picture
+
+2.6.14.5 \line
+..............
+
+`\line(x slope,y slope){length}'
+
+ The `\line' command draws a line of the specified `length' and
+`slope'.
+
+ Note that LaTeX can only draw lines with slope = x/y, where x and y
+have integer values from -6 through 6.
+
+
+File: latex.info, Node: \linethickness, Next: \makebox (picture), Prev: \line, Up: picture
+
+2.6.14.6 \linethickness
+.......................
+
+`\linethickness{dimension}'
+
+ Declares the thickness of horizontal and vertical lines in a picture
+environment to be `dimension', which must be a positive length. It does
+not affect the thickness of slanted lines and circles, or the quarter
+circles drawn by `\oval' to form the corners of an oval.
+
+
+File: latex.info, Node: \makebox (picture), Next: \multiput, Prev: \linethickness, Up: picture
+
+2.6.14.7 \makebox
+.................
+
+`\makebox(width,height)[position]{...}'
+
+ The `\makebox' command for the picture environment is similar to the
+normal `\makebox' command except that you must specify a `width' and
+`height' in multiples of `\unitlength'.
+
+ The optional argument, `[position]', specifies the quadrant that
+your text appears in. You may select up to two of the following:
+
+ * `t' - Moves the item to the top of the rectangle
+
+ * `b' - Moves the item to the bottom
+
+ * `l' - Moves the item to the left
+
+ * `r' - Moves the item to the right
+
+ *Note \makebox::.
+
+
+File: latex.info, Node: \multiput, Next: \oval, Prev: \makebox (picture), Up: picture
+
+2.6.14.8 \multiput
+..................
+
+`\multiput(x coord,y coord)(delta x,delta y){number of copies}{object}'
+
+ The `\multiput' command can be used when you are putting the same
+object in a regular pattern across a picture.
+
+
+File: latex.info, Node: \oval, Next: \put, Prev: \multiput, Up: picture
+
+2.6.14.9 \oval
+..............
+
+`\oval(width,height)[portion]'
+
+ The `\oval' command produces a rectangle with rounded corners. The
+optional argument, `[portion]', allows you to select part of the oval.
+
+ * `t' - Selects the top portion
+
+ * `b' - Selects the bottom portion
+
+ * `r' - Selects the right portion
+
+ * `l' - Selects the left portion
+
+ Note that the "corners" of the oval are made with quarter circles
+with a maximum radius of 20 pt, so large "ovals" will look more like
+boxes with rounded corners.
+
+
+File: latex.info, Node: \put, Next: \shortstack, Prev: \oval, Up: picture
+
+2.6.14.10 \put
+..............
+
+`\put(x coord,y coord){ ... }'
+
+ The `\put' command places the item specified by the mandatory
+argument at the given coordinates.
+
+
+File: latex.info, Node: \shortstack, Next: \vector, Prev: \put, Up: picture
+
+2.6.14.11 \shortstack
+.....................
+
+`\shortstack[position]{... \\ ... \\ ...}'
+
+ The `\shortstack' command produces a stack of objects. The valid
+positions are:
+
+ * `r' - Moves the objects to the right of the stack
+
+ * `l' - Moves the objects to the left of the stack
+
+ * `c' - Moves the objects to the centre of the stack (default)
+
+
+File: latex.info, Node: \vector, Prev: \shortstack, Up: picture
+
+2.6.14.12 \vector
+.................
+
+`\vector(x slope,y slope){length}'
+
+ The `\vector' command draws a line with an arrow of the specified
+length and slope. The `x' and `y' values must lie between -4 and +4,
+inclusive.
+
+
+File: latex.info, Node: quotation, Next: quote, Prev: picture, Up: Environments
+
+2.6.15 quotation
+----------------
+
+ \begin{quotation}
+ text
+ \end{quotation}
+
+ The margins of the `quotation' environment are indented on the left
+and the right. The text is justified at both margins and there is
+paragraph indentation. Leaving a blank line between text produces a new
+paragraph.
+
+
+File: latex.info, Node: quote, Next: tabbing, Prev: quotation, Up: Environments
+
+2.6.16 quote
+------------
+
+ \begin{quote}
+ text
+ \end{quote}
+
+ The margins of the `quote' environment are indented on the left and
+the right. The text is justified at both margins. Leaving a blank line
+between text produces a new paragraph.
+
+
+File: latex.info, Node: tabbing, Next: table, Prev: quote, Up: Environments
+
+2.6.17 tabbing
+--------------
+
+ \begin{tabbing}
+ text \= more text \= still more text \= last text \\
+ second row \> \> more \\
+ .
+ .
+ .
+ \end{tabbing}
+
+ The `tabbing' environment provides a way to align text in columns.
+It works by setting tab stops and tabbing to them much the way you do
+with an ordinary typewriter.
+
+ It is best suited for cases where the width of each column is
+constant and known in advance.
+
+ This environment can be broken across pages, unlike the `tabular'
+environment.
+
+ The following commands can be used inside a `tabbing' enviroment:
+
+`\='
+ Sets a tab stop at the current position.
+
+`\>'
+ Advances to the next tab stop.
+
+`\<'
+ This command allows you to put something to the left of the local
+ margin without changing the margin. Can only be used at the start
+ of the line.
+
+`\+'
+ Moves the left margin of the next and all the following commands
+ one tab stop to the right.
+
+`\-'
+ Moves the left margin of the next and all the following commands
+ one tab stop to the left.
+
+`\''
+ Moves everything that you have typed so far in the current column,
+ i.e. everything from the most recent `\>', `\<', `\'', `\\', or
+ `\kill' command, to the right of the previous column, flush
+ against the current column's tab stop.
+
+`\`'
+ Allows you to put text flush right against any tab stop, including
+ tab stop 0. However, it can't move text to the right of the last
+ column because there's no tab stop there. The `\`' command moves
+ all the text that follows it, up to the `\\' or `\end{tabbing}'
+ command that ends the line, to the right margin of the tabbing
+ environment. There must be no `\>' or `\'' command between the
+ `\`' and the command that ends the line.
+
+`\kill'
+ Sets tab stops without producing text. Works just like `\\'
+ except that it throws away the current line instead of producing
+ output for it. The effect of any `\=', `\+' or `\-' commands in
+ that line remain in effect.
+
+`\pushtabs'
+ Saves all current tab stop positions. Useful for temporarily
+ changing tab stop positions in the middle of a `tabbing'
+ environment.
+
+`\poptabs'
+ Restores the tab stop positions saved by the last `\pushtabs'.
+
+`\a'
+ In a `tabbing' environment, the commands `\=', `\'' and `\`' do
+ not produce accents as normal. Instead, the commands `\a=', `\a''
+ and `\a`' are used.
+
+ This example typesets a Pascal function in a traditional format:
+
+ \begin{tabbing}
+ function \= fact(n : integer) : integer;\\
+ \> begin \= \+ \\
+ \> if \= n $>$ 1 then \+ \\
+ fact := n * fact(n-1) \- \\
+ else \+ \\
+ fact := 1; \-\- \\
+ end;\\
+ \end{tabbing}
+
+
+File: latex.info, Node: table, Next: tabular, Prev: tabbing, Up: Environments
+
+2.6.18 table
+------------
+
+ \begin{table}[placement]
+
+ body of the table
+
+ \caption{table title}
+ \end{table}
+
+ Tables are objects that are not part of the normal text, and
+are usually "floated" to a convenient place, like the top of a
+page. Tables will not be split between two pages.
+
+ The optional argument `[placement]' determines where LaTeX will try
+to place your table. There are four places where LaTeX can possibly put
+a float:
+
+ * `h' : Here - at the position in the text where the table
+ environment appears.
+
+ * `t' : Top - at the top of a text page.
+
+ * `b' : Bottom - at the bottom of a text page.
+
+ * `p' : Page of floats - on a separate float page, which is a page
+ containing no text, only floats.
+
+ The standard `report' and `article' classes use the default
+placement `[tbp]'.
+
+ The body of the table is made up of whatever text, LaTeX commands,
+etc., you wish. The `\caption' command allows you to title your table.
+
+
+File: latex.info, Node: tabular, Next: thebibliography, Prev: table, Up: Environments
+
+2.6.19 tabular
+--------------
+
+ \begin{tabular}[pos]{cols}
+ column 1 entry & column 2 entry ... & column n entry \\
+ .
+ .
+ .
+ \end{tabular}
+
+ or
+
+ \begin{tabular*}{width}[pos]{cols}
+ column 1 entry & column 2 entry ... & column n entry \\
+ .
+ .
+ .
+ \end{tabular*}
+
+ These environments produce a box consisting of a sequence of rows of
+items, aligned vertically in columns. The mandatory and optional
+arguments consist of:
+
+`width'
+ Specifies the width of the `tabular*' environment. There must be
+ rubber space between columns that can stretch to fill out the
+ specified width.
+
+`pos'
+ Specifies the vertical position; default is alignment on the
+ centre of the environment.
+
+ * `t' - align on top row
+
+ * `b' - align on bottom row
+
+`cols'
+ Specifies the column formatting. It consists of a sequence of the
+ following specifiers, corresponding to the sequence of columns and
+ intercolumn material.
+
+ * `l' - A column of left-aligned items.
+
+ * `r' - A column of right-aligned items.
+
+ * `c' - A column of centred items.
+
+ * `|' - A vertical line the full height and depth of the
+ environment.
+
+ * `@{text}' - This inserts `text' in every row. An @-expression
+ suppresses the intercolumn space normally inserted between
+ columns; any desired space between the inserted text and the
+ adjacent items must be included in text. An
+ `\extracolsep{wd}' command in an @-expression causes an extra
+ space of width `wd' to appear to the left of all subsequent
+ columns, until countermanded by another `\extracolsep'
+ command. Unlike ordinary intercolumn space, this extra space
+ is not suppressed by an @-expression. An `\extracolsep'
+ command can be used only in an @-expression in the `cols'
+ argument.
+
+ * `p{wd}' - Produces a column with each item typeset in a
+ parbox of width `wd', as if it were the argument of a
+ `\parbox[t]{wd}' command. However, a `\\' may not appear in
+ the item, except in the following situations:
+ 1. inside an environment like `minipage', `array', or
+ `tabular'.
+
+ 2. inside an explicit `\parbox'.
+
+ 3. in the scope of a `\centering', `\raggedright', or
+ `\raggedleft' declaration. The latter declarations must
+ appear inside braces or an environment when used in a
+ `p'-column element.
+
+ * `*{num}{cols}' - Equivalent to `num' copies of `cols', where
+ `num' is any positive integer and `cols' is any list of
+ column-specifiers, which may contain another `*-expression'.
+
+
+
+ These commands can be used inside a `tabular' environment:
+
+* Menu:
+
+* \cline:: Draw a horizontal line spanning some columns.
+* \hline:: Draw a horizontal line spanning all columns.
+* \multicolumn:: Make an item spanning several columns.
+* \vline:: Draw a vertical line.
+
+
+File: latex.info, Node: \cline, Next: \hline, Up: tabular
+
+2.6.19.1 \cline
+...............
+
+`\cline{i-j}'
+
+ The `\cline' command draws horizontal lines across the columns
+specified, beginning in column `i' and ending in column `j', which are
+identified in the mandatory argument.
+
+
+File: latex.info, Node: \hline, Next: \multicolumn, Prev: \cline, Up: tabular
+
+2.6.19.2 \hline
+...............
+
+The `\hline' command will draw a horizontal line the width of the
+table. It's most commonly used to draw a line at the top, bottom, and
+between the rows of the table.
+
+
+File: latex.info, Node: \multicolumn, Next: \vline, Prev: \hline, Up: tabular
+
+2.6.19.3 \multicolumn
+.....................
+
+`\multicolumn{cols}{pos}{text}'
+
+ The `\multicolumn' is used to make an entry that spans several
+columns. The first mandatory argument, `cols', specifies the number of
+columns to span. The second mandatory argument, `pos', specifies the
+formatting of the entry; `c' for centred, `l' for flushleft, `r' for
+flushright. The third mandatory argument, `text', specifies what text
+is to make up the entry.
+
+
+File: latex.info, Node: \vline, Prev: \multicolumn, Up: tabular
+
+2.6.19.4 \vline
+...............
+
+The `\vline' command will draw a vertical line extending the full
+height and depth of its row. An `\hfill' command can be used to move
+the line to the edge of the column. It can also be used in an
+@-expression.
+
+
+File: latex.info, Node: thebibliography, Next: theorem, Prev: tabular, Up: Environments
+
+2.6.20 thebibliography
+----------------------
+
+ \begin{thebibliography}{widest-label}
+ \bibitem[label]{cite_key}
+ .
+ .
+ .
+ \end{thebibliography}
+
+ The `thebibliography' environment produces a bibliography or
+reference list. In the `article' class, this reference list is
+labelled "References"; in the `report' class, it is labelled
+"Bibliography".
+
+ * `widest-label': Text that, when printed, is approximately as wide
+ as the widest item label produces by the `\bibitem' commands.
+
+* Menu:
+
+* \bibitem:: Specify a bibliography item.
+* \cite:: Refer to a bibliography item.
+* \nocite:: Include an item in the bibliography.
+* Using BibTeX:: Automatic generation of bibliographies.
+
+
+File: latex.info, Node: \bibitem, Next: \cite, Up: thebibliography
+
+2.6.20.1 \bibitem
+.................
+
+`\bibitem[label]{cite_key}'
+
+ The `\bibitem' command generates an entry labelled by `label'. If
+the `label' argument is missing, a number is generated as the `label',
+using the `enumi' counter. The `cite_key' is any sequence of letters,
+numbers, and punctuation symbols not containing a comma. This command
+writes an entry on the `.aux' file containing `cite_key' and the item's
+`label'. When this `.aux' file is read by the `\begin{document}'
+command, the item's `label' is associated with `cite_key', causing the
+reference to `cite_key' by a `\cite' command to produce the associated
+`label'.
+
+
+File: latex.info, Node: \cite, Next: \nocite, Prev: \bibitem, Up: thebibliography
+
+2.6.20.2 \cite
+..............
+
+`\cite[text]{key_list}'
+
+ The `key_list' argument is a list of citation keys. This command
+generates an in-text citation to the references associated with the keys
+in `key_list' by entries on the `.aux' file read by the
+`\begin{document}' command.
+
+ The optional `text' argument will appear after the citation, i.e.
+`\cite[p. 2]{knuth}' might produce `[Knuth, p. 2]'.
+
+
+File: latex.info, Node: \nocite, Next: Using BibTeX, Prev: \cite, Up: thebibliography
+
+2.6.20.3 \nocite
+................
+
+`\nocite{key_list}'
+
+ The `\nocite' command produces no text, but writes `key_list', which
+is a list of one or more citation keys, on the `.aux' file.
+
+
+File: latex.info, Node: Using BibTeX, Prev: \nocite, Up: thebibliography
+
+2.6.20.4 Using BibTeX
+.....................
+
+If you use the BibTeX program by Oren Patashnik (highly recommended if
+you need a bibliography of more than a couple of titles) to maintain
+your bibliography, you don't use the `thebibliography' environment.
+Instead, you include the lines
+
+ \bibliographystyle{style}
+ \bibliography{bibfile}
+
+ where `style' refers to a file `style.bst', which defines how your
+citations will look. The standard styles distributed with BibTeX are:
+
+`alpha'
+ Sorted alphabetically. Labels are formed from name of author and
+ year of publication.
+
+`plain'
+ Sorted alphabetically. Labels are numeric.
+
+`unsrt'
+ Like `plain', but entries are in order of citation.
+
+`abbrv'
+ Like `plain', but more compact labels.
+
+ In addition, numerous other BibTeX style files exist tailored to the
+demands of various publications.
+
+ The argument to `\bibliography' refers to the file `bibfile.bib',
+which should contain your database in BibTeX format. Only the entries
+referred to via `\cite' and `\nocite' will be listed in the
+bibliography.
+
+
+File: latex.info, Node: theorem, Next: titlepage, Prev: thebibliography, Up: Environments
+
+2.6.21 theorem
+--------------
+
+ \begin{theorem}
+ theorem text
+ \end{theorem}
+
+ The `theorem' environment produces "Theorem x" in boldface followed
+by your theorem text.
+
+
+File: latex.info, Node: titlepage, Next: verbatim, Prev: theorem, Up: Environments
+
+2.6.22 titlepage
+----------------
+
+ \begin{titlepage}
+ text
+ \end{titlepage}
+
+ The `titlepage' environment creates a title page, i.e. a page with
+no printed page number or heading. It also causes the following page
+to be numbered page one. Formatting the title page is left to you. The
+`\today' command comes in handy for title pages.
+
+ Note that you can use the `\maketitle' (*note \maketitle::) command
+to produce a standard title page.
+
+
+File: latex.info, Node: verbatim, Next: verse, Prev: titlepage, Up: Environments
+
+2.6.23 verbatim
+---------------
+
+ \begin{verbatim}
+ text
+ \end{verbatim}
+
+ The `verbatim' environment is a paragraph-making environment that
+gets LaTeX to print exactly what you type in. It turns LaTeX into a
+typewriter with carriage returns and blanks having the same effect that
+they would on a typewriter.
+
+* Menu:
+
+* \verb:: The macro form of the `verbatim' environment.
+
+
+File: latex.info, Node: \verb, Up: verbatim
+
+2.6.23.1 \verb
+..............
+
+`\verb char literal_text char'
+
+ `\verb*char literal_text char'
+
+ Typesets `literal_text' exactly as typed, including special
+characters and spaces, using a typewriter (`\tt') type style. There
+may be no space between `\verb' or `\verb*' and `char' (space is shown
+here only for clarity). The `*-form' differs only in that spaces are
+printed as a special character.
+
+
+File: latex.info, Node: verse, Prev: verbatim, Up: Environments
+
+2.6.24 verse
+------------
+
+ \begin{verse}
+ text
+ \end{verse}
+
+ The `verse' environment is designed for poetry, though you may find
+other uses for it.
+
+ The margins are indented on the left and the right. Separate the
+lines of each stanza with `\\', and use one or more blank lines to
+separate the stanzas.
+
+
+File: latex.info, Node: Footnotes, Next: Layout, Prev: Environments, Up: Commands
+
+2.7 Footnotes
+=============
+
+Footnotes can be produced in one of two ways. They can be produced
+with one command, the `\footnote' command. They can also be produced
+with two commands, the `\footnotemark' and the `\footnotetext'
+commands. See the specific command for information on why you would
+use one over the other.
+
+* Menu:
+
+* \footnote:: Insert a footnote.
+* \footnotemark:: Insert footnote mark only.
+* \footnotetext:: Insert footnote text only.
+
+
+File: latex.info, Node: \footnote, Next: \footnotemark, Prev: Footnotes, Up: Footnotes
+
+2.7.1 \footnote
+---------------
+
+`\footnote[number]{text}'
+
+ The `\footnote' command places the numbered footnote `text' at the
+bottom of the current page. The optional argument, `number', is used
+to change the default footnote number. This command can only be used
+in outer paragraph mode; i.e., you cannot use it in sectioning commands
+like `\chapter', in figures, tables or in a `tabular' environment.
+
+
+File: latex.info, Node: \footnotemark, Next: \footnotetext, Prev: \footnote, Up: Footnotes
+
+2.7.2 \footnotemark
+-------------------
+
+The `\footnotemark' command puts the footnote `number' in the text.
+This command can be used in inner paragraph mode. The text of the
+footnote is supplied by the `\footnotetext' command.
+
+ This command can be used to produce several consecutive footnote
+markers referring to the same footnote by using
+
+ `\footnotemark[\value{footnote}]'
+
+ after the first `\footnote' command.
+
+
+File: latex.info, Node: \footnotetext, Prev: \footnotemark, Up: Footnotes
+
+2.7.3 \footnotetext
+-------------------
+
+`\footnotetext[number]{text}'
+
+ The `\footnotetext' command produces the `text' to be placed at the
+bottom of the page. This command can come anywhere after the
+`\footnotemark' command. The `\footnotetext' command must appear in
+outer paragraph mode.
+
+ The optional argument, `number', is used to change the default
+footnote number.
+
+
+File: latex.info, Node: Lengths, Next: Letters, Prev: Layout, Up: Commands
+
+2.8 Lengths
+===========
+
+A `length' is a measure of distance. Many LaTeX commands take a length
+as an argument.
+
+* Menu:
+
+* \newlength:: Define a new length.
+* \setlength:: Set the value of a length.
+* \addtolength:: Add a quantity to a length.
+* \settodepth:: Set a length to the depth of something.
+* \settoheight:: Set a length to the height of something.
+* \settowidth:: Set a length to the width of something.
+* Predefined lengths:: Lengths that are, like, predefined.
+
+
+File: latex.info, Node: \newlength, Next: \setlength, Prev: Lengths, Up: Lengths
+
+2.8.1 \newlength
+----------------
+
+`\newlength{\gnat}'
+
+ The `\newlength' command defines the mandatory argument, `\gnat', as
+a `length' command with a value of `0in'. An error occurs if a `\gnat'
+command already exists.
+
+
+File: latex.info, Node: \setlength, Next: \addtolength, Prev: \newlength, Up: Lengths
+
+2.8.2 \setlength
+----------------
+
+`\setlength{\gnat}{length}'
+
+ The `\setlength' command is used to set the value of a `length'
+command. The `length' argument can be expressed in any terms of length
+LaTeX understands, i.e., inches (`in'), millimetres (`mm'), points
+(`pt'), etc.
+
+
+File: latex.info, Node: \addtolength, Next: \settodepth, Prev: \setlength, Up: Lengths
+
+2.8.3 \addtolength
+------------------
+
+`\addtolength{\gnat}{length}'
+
+ The `\addtolength' command increments a "length command" by the
+amount specified in the `length' argument. It can be a negative amount.
+
+
+File: latex.info, Node: \settodepth, Next: \settoheight, Prev: \addtolength, Up: Lengths
+
+2.8.4 \settodepth
+-----------------
+
+`\settodepth{\gnat}{text}'
+
+ The `\settodepth' command sets the value of a `length' command equal
+to the depth of the `text' argument.
+
+
+File: latex.info, Node: \settoheight, Next: \settowidth, Prev: \settodepth, Up: Lengths
+
+2.8.5 \settoheight
+------------------
+
+`\settoheight{\gnat}{text}'
+
+ The `\settoheight' command sets the value of a `length' command
+equal to the height of the `text' argument.
+
+
+File: latex.info, Node: \settowidth, Next: Predefined lengths, Prev: \settoheight, Up: Lengths
+
+2.8.6 \settowidth
+-----------------
+
+`\settowidth{\gnat}{text}'
+
+ The `\settowidth' command sets the value of a `length' command equal
+to the width of the `text' argument.
+
+
+File: latex.info, Node: Predefined lengths, Prev: \settowidth, Up: Lengths
+
+2.8.7 Predefined lengths
+------------------------
+
+`\width'
+
+ `\height'
+
+ `\depth'
+
+ `\totalheight'
+
+ These length parameters can be used in the arguments of the
+box-making commands *Note Spaces & Boxes::. They specify the natural
+width etc. of the text in the box. `\totalheight' equals `\height' +
+`\depth'. To make a box with the text stretched to double the natural
+size, e.g., say
+
+ `\makebox[2\width]{Get a stretcher}'
+
+
+File: latex.info, Node: Letters, Next: Line & Page Breaking, Prev: Lengths, Up: Commands
+
+2.9 Letters
+===========
+
+You can use LaTeX to typeset letters, both personal and business. The
+`letter' document class is designed to make a number of letters at
+once, although you can make just one if you so desire.
+
+ Your `.tex' source file has the same minimum commands as the other
+document classes, i.e., you must have the following commands as a
+minimum:
+
+ \documentclass{letter}
+ \begin{document}
+ ... letters ...
+ \end{document}
+
+ Each letter is a `letter' environment, whose argument is the name
+and address of the recipient. For example, you might have:
+
+ \begin{letter}{Mr. Joe Smith\\ 2345 Princess St.
+ \\ Edinburgh, EH1 1AA}
+ ...
+ \end{letter}
+
+ The letter itself begins with the `\opening' command. The text of
+the letter follows. It is typed as ordinary LaTeX input. Commands that
+make no sense in a letter, like `\chapter', do not work. The letter
+closes with a `\closing' command.
+
+ After the `closing', you can have additional material. The `\cc'
+command produces the usual "cc: ...". There's also a similar `\encl'
+command for a list of enclosures. With both these commands, use `\\' to
+separate the items.
+
+ These commands are used with the `letter' class:
+
+* Menu:
+
+* \address:: Your return address.
+* \cc:: Cc list.
+* \closing:: Saying goodbye.
+* \encl:: List of enclosed material.
+* \location:: Your organisation's address.
+* \makelabels:: Making address labels.
+* \name:: Your name, for the return address.
+* \opening:: Saying hello.
+* \ps:: Adding a postscript.
+* \signature:: Your signature.
+* \startbreaks:: Allow page breaks.
+* \stopbreaks:: Disallow page breaks.
+* \telephone:: Your phone number.
+
+
+File: latex.info, Node: \address, Next: \cc, Prev: Letters, Up: Letters
+
+2.9.1 \address
+--------------
+
+`\address{Return address}'
+
+ The return address, as it should appear on the letter and the
+envelope. Separate lines of the address should be separated by `\\'
+commands. If you do not make an `\address' declaration, then the
+letter will be formatted for copying onto your organisation's standard
+letterhead. (*Note Overview::, for details on your local
+implementation). If you give an `\address' declaration, then the
+letter will be formatted as a personal letter.
+
+
+File: latex.info, Node: \cc, Next: \closing, Prev: \address, Up: Letters
+
+2.9.2 \cc
+---------
+
+`\cc{Kate Schechter\\Rob McKenna}'
+
+ Generate a list of other persons the letter was sent to. Each name is
+printed on a separate line.
+
+
+File: latex.info, Node: \closing, Next: \encl, Prev: \cc, Up: Letters
+
+2.9.3 \closing
+--------------
+
+`\closing{text}'
+
+ The letter closes with a `\closing' command, i.e.,
+ \closing{Best Regards,}
+
+
+File: latex.info, Node: \encl, Next: \location, Prev: \closing, Up: Letters
+
+2.9.4 \encl
+-----------
+
+`\encl{CV\\Certificates}'
+
+ Generate a list of enclosed material.
+
+
+File: latex.info, Node: \location, Next: \makelabels, Prev: \encl, Up: Letters
+
+2.9.5 \location
+---------------
+
+`\location{address}'
+
+ This modifies your organisation's standard address. This only
+appears if the `firstpage' pagestyle is selected.
+
+
+File: latex.info, Node: \makelabels, Next: \name, Prev: \location, Up: Letters
+
+2.9.6 \makelabels
+-----------------
+
+`\makelabels{number}'
+
+ If you issue this command in the preamble, LaTeX will create a sheet
+of address labels. This sheet will be output before the letters.
+
+
+File: latex.info, Node: \name, Next: \opening, Prev: \makelabels, Up: Letters
+
+2.9.7 \name
+-----------
+
+`\name{June Davenport}'
+
+ Your name, used for printing on the envelope together with the return
+address.
+
+
+File: latex.info, Node: \opening, Next: \ps, Prev: \name, Up: Letters
+
+2.9.8 \opening
+--------------
+
+`\opening{text}'
+
+ The letter begins with the `\opening' command. The mandatory
+argument, `text', is whatever text you wish to start your letter, i.e.,
+ \opening{Dear Joe,}
+
+
+File: latex.info, Node: \ps, Next: \signature, Prev: \opening, Up: Letters
+
+2.9.9 \ps
+---------
+
+`\ps'
+
+ Use this command before a postscript.
+
+
+File: latex.info, Node: \signature, Next: \startbreaks, Prev: \ps, Up: Letters
+
+2.9.10 \signature
+-----------------
+
+`\signature{Harvey Swick}'
+
+ Your name, as it should appear at the end of the letter underneath
+the space for your signature. Items that should go on separate lines
+should be separated by `\\' commands.
+
+
+File: latex.info, Node: \startbreaks, Next: \stopbreaks, Prev: \signature, Up: Letters
+
+2.9.11 \startbreaks
+-------------------
+
+`\startbreaks'
+
+ Used after a `\stopbreaks' command to allow page breaks again.
+
+
+File: latex.info, Node: \stopbreaks, Next: \telephone, Prev: \startbreaks, Up: Letters
+
+2.9.12 \stopbreaks
+------------------
+
+`\stopbreaks'
+
+ Inhibit page breaks until a `\startbreaks' command occurs.
+
+
+File: latex.info, Node: \telephone, Prev: \stopbreaks, Up: Letters
+
+2.9.13 \telephone
+-----------------
+
+`\telephone{number}'
+
+ This is your telephone number. This only appears if the `firstpage'
+pagestyle is selected.
+
+
+File: latex.info, Node: Line & Page Breaking, Next: Making Paragraphs, Prev: Letters, Up: Commands
+
+2.10 Line & Page Breaking
+=========================
+
+The first thing LaTeX does when processing ordinary text is to
+translate your input file into a string of glyphs and spaces. To
+produce a printed document, this string must be broken into lines, and
+these lines must be broken into pages. In some environments, you do the
+line breaking yourself with the `\\' command, but LaTeX usually does it
+for you.
+
+* Menu:
+
+* \\:: Start a new line.
+* \- (hyphenation):: Insert explicit hyphenation.
+* \cleardoublepage:: Start a new right-hand page.
+* \clearpage:: Start a new page.
+* \enlargethispage:: Enlarge the current page a bit.
+* \fussy:: Be fussy about line breaking.
+* \hyphenation:: Tell LaTeX how to hyphenate a word.
+* \linebreak:: Break the line.
+* \newline:: Break the line prematurely.
+* \newpage:: Start a new page.
+* \nolinebreak:: Don't break the current line.
+* \nopagebreak:: Don't make a page break here.
+* \pagebreak:: Please make a page break here.
+* \sloppy:: Be sloppy about line breaking.
+
+
+File: latex.info, Node: \\, Next: \- (hyphenation), Prev: Line & Page Breaking, Up: Line & Page Breaking
+
+2.10.1 \\
+---------
+
+`\\[*][extra-space]'
+
+ The `\\' command tells LaTeX to start a new line. It has an
+optional argument, `extra-space', that specifies how much extra
+vertical space is to be inserted before the next line. This can be a
+negative amount.
+
+ The `\\*' command is the same as the ordinary `\\' command except
+that it tells LaTeX not to start a new page after the line.
+
+
+File: latex.info, Node: \- (hyphenation), Next: \cleardoublepage, Prev: \\, Up: Line & Page Breaking
+
+2.10.2 \-
+---------
+
+The `\-' command tells LaTeX that it may hyphenate the word at that
+point. LaTeX is very good at hyphenating, and it will usually find all
+correct hyphenation points. The `\-' command is used for the
+exceptional cases.
+
+ Note that when you insert `\-' commands in a word, the word will
+only be hyphenated at those points and not at any of the hyphenation
+points that LaTeX might otherwise have chosen.
+
+
+File: latex.info, Node: \cleardoublepage, Next: \clearpage, Prev: \- (hyphenation), Up: Line & Page Breaking
+
+2.10.3 \cleardoublepage
+-----------------------
+
+The `\cleardoublepage' command ends the current page and causes all
+figures and tables that have so far appeared in the input to be printed.
+In a two-sided printing style, it also makes the next page a right-hand
+(odd-numbered) page, producing a blank page if necessary.
+
+
+File: latex.info, Node: \clearpage, Next: \enlargethispage, Prev: \cleardoublepage, Up: Line & Page Breaking
+
+2.10.4 \clearpage
+-----------------
+
+The `\clearpage' command ends the current page and causes all figures
+and tables that have so far appeared in the input to be printed.
+
+
+File: latex.info, Node: \enlargethispage, Next: \fussy, Prev: \clearpage, Up: Line & Page Breaking
+
+2.10.5 \enlargethispage
+-----------------------
+
+`\enlargethispage{size}'
+
+ `\enlargethispage*{size}'
+
+ Enlarge the `\textheight' for the current page by the specified
+amount; e.g. `\enlargethispage{\baselineskip}' will allow one
+additional line.
+
+ The starred form tries to squeeze the material together on the page
+as much as possible. This is normally used together with an explicit
+`\pagebreak'.
+
+
+File: latex.info, Node: \fussy, Next: \hyphenation, Prev: \enlargethispage, Up: Line & Page Breaking
+
+2.10.6 \fussy
+-------------
+
+`\fussy'
+
+ This declaration (which is the default) makes TeX more fussy about
+line breaking. This can avoids too much space between words, but may
+produce overfull boxes.
+
+ This command cancels the effect of a previous `\sloppy' command.
+*Note \sloppy::
+
+
+File: latex.info, Node: \hyphenation, Next: \linebreak, Prev: \fussy, Up: Line & Page Breaking
+
+2.10.7 \hyphenation
+-------------------
+
+`\hyphenation{words}'
+
+ The `\hyphenation' command declares allowed hyphenation points,
+where `words' is a list of words, separated by spaces, in which each
+hyphenation point is indicated by a `-' character.
+
+
+File: latex.info, Node: \linebreak, Next: \newline, Prev: \hyphenation, Up: Line & Page Breaking
+
+2.10.8 \linebreak
+-----------------
+
+`\linebreak[number]'
+
+ The `\linebreak' command tells LaTeX to break the current line at
+the point of the command. With the optional argument, `number', you
+can convert the `\linebreak' command from a demand to a request. The
+number must be a number from 0 to 4. The higher the number, the more
+insistent the request is.
+
+ The `\linebreak' command causes LaTeX to stretch the line so it
+extends to the right margin.
+
+
+File: latex.info, Node: \newline, Next: \newpage, Prev: \linebreak, Up: Line & Page Breaking
+
+2.10.9 \newline
+---------------
+
+The `\newline' command breaks the line right where it is. It can only
+be used in paragraph mode.
+
+
+File: latex.info, Node: \newpage, Next: \nolinebreak, Prev: \newline, Up: Line & Page Breaking
+
+2.10.10 \newpage
+----------------
+
+The `\newpage' command ends the current page.
+
+
+File: latex.info, Node: \nolinebreak, Next: \nopagebreak, Prev: \newpage, Up: Line & Page Breaking
+
+2.10.11 \nolinebreak
+--------------------
+
+`\nolinebreak[number]'
+
+ The `\nolinebreak' command prevents LaTeX from breaking the current
+line at the point of the command. With the optional argument,
+`number', you can convert the `\nolinebreak' command from a demand to a
+request. The number must be a number from 0 to 4. The higher the
+number, the more insistent the request is.
+
+
+File: latex.info, Node: \nopagebreak, Next: \pagebreak, Prev: \nolinebreak, Up: Line & Page Breaking
+
+2.10.12 \nopagebreak
+--------------------
+
+`\nopagebreak[number]'
+
+ The `\nopagebreak' command prevents LaTeX from breaking the current
+page at the point of the command. With the optional argument,
+`number', you can convert the `\nopagebreak' command from a demand to a
+request. The number must be a number from 0 to 4. The higher the
+number, the more insistent the request is.
+
+
+File: latex.info, Node: \pagebreak, Next: \sloppy, Prev: \nopagebreak, Up: Line & Page Breaking
+
+2.10.13 \pagebreak
+------------------
+
+`\pagebreak[number]'
+
+ The `\pagebreak' command tells LaTeX to break the current page at
+the point of the command. With the optional argument, `number', you
+can convert the `\pagebreak' command from a demand to a request. The
+number must be a number from 0 to 4. The higher the number, the more
+insistent the request is.
+
+
+File: latex.info, Node: \sloppy, Prev: \pagebreak, Up: Line & Page Breaking
+
+2.10.14 \sloppy
+---------------
+
+`\sloppy'
+
+ This declaration makes TeX less fussy about line breaking. This can
+prevent overfull boxes, but may leave too much space between words.
+
+ Lasts until a `\fussy' command is issued. *Note \fussy::.
+
+
+File: latex.info, Node: Making Paragraphs, Next: Margin Notes, Prev: Line & Page Breaking, Up: Commands
+
+2.11 Making Paragraphs
+======================
+
+A paragraph is ended by one or more completely blank lines -- lines not
+containing even a `%'. A blank line should not appear where a new
+paragraph cannot be started, such as in math mode or in the argument of
+a sectioning command.
+
+* Menu:
+
+* \indent:: Indent this paragraph.
+* \noindent:: Do not indent this paragraph.
+* \par:: Another way of writing a blank line.
+
+
+File: latex.info, Node: \indent, Next: \noindent, Prev: Making Paragraphs, Up: Making Paragraphs
+
+2.11.1 \indent
+--------------
+
+`\indent'
+
+ This produces a horizontal space whose width equals the width of the
+paragraph indentation. It is used to add paragraph indentation where it
+would otherwise be suppressed.
+
+
+File: latex.info, Node: \noindent, Next: \par, Prev: \indent, Up: Making Paragraphs
+
+2.11.2 \noindent
+----------------
+
+`\noindent'
+
+ When used at the beginning of the paragraph, it suppresses the
+paragraph indentation. It has no effect when used in the middle of a
+paragraph.
+
+
+File: latex.info, Node: \par, Prev: \noindent, Up: Making Paragraphs
+
+2.11.3 \par
+-----------
+
+Equivalent to a blank line; often used to make command or environment
+definitions easier to read.
+
+
+File: latex.info, Node: Margin Notes, Next: Math Formulae, Prev: Making Paragraphs, Up: Commands
+
+2.12 Margin Notes
+=================
+
+The command `\marginpar[left]{right}' creates a note in the margin.
+The first line will be at the same height as the line in the text where
+the `\marginpar' occurs.
+
+ When you only specify the mandatory argument `right', the text will
+be placed
+
+ * in the right margin for one-sided layout
+
+ * in the outside margin for two-sided layout
+
+ * in the nearest margin for two-column layout.
+
+ By issuing the command `\reversemarginpar', you can force the
+marginal notes to go into the opposite (inside) margin.
+
+ When you specify both arguments, `left' is used for the left margin,
+and `right' is used for the right margin.
+
+ The first word will normally not be hyphenated; you can enable
+hyphenation by prefixing the first word with a `\hspace{0pt}' command.
+
+
+File: latex.info, Node: Math Formulae, Next: Modes, Prev: Margin Notes, Up: Commands
+
+2.13 Math Formulae
+==================
+
+There are three environments that put LaTeX in math mode:
+
+`math'
+ For Formulae that appear right in the text.
+
+`displaymath'
+ For Formulae that appear on their own line.
+
+`equation'
+ The same as the displaymath environment except that it adds an
+ equation number in the right margin.
+
+ The `math' environment can be used in both paragraph and LR mode,
+but the `displaymath' and `equation' environments can be used only in
+paragraph mode. The `math' and `displaymath' environments are used so
+often that they have the following short forms:
+
+ \(...\) instead of \begin{math}...\end{math}
+
+ \[...\] instead of \begin{displaymath}...\end{displaymath}
+
+ In fact, the `math' environment is so common that it has an even
+shorter form:
+
+ $ ... $ instead of \(...\)
+
+* Menu:
+
+* Subscripts & Superscripts:: Also known as exponent or index.
+* Math Symbols:: Various mathematical squiggles.
+* Spacing in Math Mode:: Thick, medium, thin and negative spaces.
+* Math Miscellany:: Stuff that doesn't fit anywhere else.
+
+
+File: latex.info, Node: Subscripts & Superscripts, Next: Math Symbols, Prev: Math Formulae, Up: Math Formulae
+
+2.13.1 Subscripts & Superscripts
+--------------------------------
+
+To get an expression exp to appear as a subscript, you just type
+`_{'exp`}'. To get exp to appear as a superscript, you type
+`^{'exp`}'. LaTeX handles superscripted superscripts and all of that
+stuff in the natural way. It even does the right thing when something
+has both a subscript and a superscript.
+
+
+File: latex.info, Node: Math Symbols, Next: Spacing in Math Mode, Prev: Subscripts & Superscripts, Up: Math Formulae
+
+2.13.2 Math Symbols
+-------------------
+
+LaTeX provides almost any mathematical symbol you're likely to need. The
+commands for generating them can be used only in math mode. For
+example, if you include `$\pi$' in your source, you will get the symbol
+"pi" in your output.
+
+
+File: latex.info, Node: Spacing in Math Mode, Next: Math Miscellany, Prev: Math Symbols, Up: Math Formulae
+
+2.13.3 Spacing in Math Mode
+---------------------------
+
+In a `math' environment, LaTeX ignores the spaces you type and puts in
+the spacing that it thinks is best. LaTeX formats mathematics the way
+it's done in mathematics texts. If you want different spacing, LaTeX
+provides the following four commands for use in math mode:
+
+ 1. `\;' - a thick space
+
+ 2. `\:' - a medium space
+
+ 3. `\,' - a thin space
+
+ 4. `\!' - a negative thin space
+
+
+File: latex.info, Node: Math Miscellany, Prev: Spacing in Math Mode, Up: Math Formulae
+
+2.13.4 Math Miscellany
+----------------------
+
+`\cdots'
+ Produces a horizontal ellipsis where the dots are raised to the
+ centre of the line.
+
+`\ddots'
+ Produces a diagonal ellipsis.
+
+`\frac{num}{den}'
+ Produces the fraction `num' divided by `den'.
+
+`\ldots'
+ Produces an ellipsis. This command works in any mode, not just
+ math mode.
+
+`\overbrace{text}'
+ Generates a brace over text.
+
+`\overline{text}'
+ Causes the argument text to be overlined.
+
+`\sqrt[root]{arg}'
+ Produces the square root of its argument. The optional argument,
+ `root', determines what root to produce, i.e., the cube root of
+ `x+y' would be typed as `$\sqrt[3]{x+y}$'.
+
+`\underbrace{text}'
+ Generates text with a brace underneath.
+
+`\underline{text}'
+ Causes the argument text to be underlined. This command can also
+ be used in paragraph and LR modes.
+
+`\vdots'
+ Produces a vertical ellipsis.
+
+
+
+File: latex.info, Node: Modes, Next: Page Styles, Prev: Math Formulae, Up: Commands
+
+2.14 Modes
+==========
+
+When LaTeX is processing your input text, it is always in one of three
+modes:
+
+ * Paragraph mode
+
+ * Math mode
+
+ * Left-to-right mode, called LR mode for short
+
+ LaTeX changes mode only when it goes up or down a staircase to a
+different level, though not all level changes produce mode changes.
+Mode changes occur only when entering or leaving an environment, or when
+LaTeX is processing the argument of certain text-producing commands.
+
+ "Paragraph mode" is the most common; it's the one LaTeX is in when
+processing ordinary text. In that mode, LaTeX breaks your text into
+lines and breaks the lines into pages. LaTeX is in "math mode" when
+it's generating a mathematical formula. In "LR mode", as in paragraph
+mode, LaTeX considers the output that it produces to be a string of
+words with spaces between them. However, unlike paragraph mode, LaTeX
+keeps going from left to right; it never starts a new line in LR mode.
+Even if you put a hundred words into an `\mbox', LaTeX would keep
+typesetting them from left to right inside a single box, and then
+complain because the resulting box was too wide to fit on the line.
+
+ LaTeX is in LR mode when it starts making a box with an `\mbox'
+command. You can get it to enter a different mode inside the box - for
+example, you can make it enter math mode to put a formula in the box.
+There are also several text-producing commands and environments for
+making a box that put LaTeX in paragraph mode. The box make by one of
+these commands or environments will be called a `parbox'. When LaTeX
+is in paragraph mode while making a box, it is said to be in "inner
+paragraph mode". Its normal paragraph mode, which it starts out in, is
+called "outer paragraph mode".
+
+
+File: latex.info, Node: Page Styles, Next: Sectioning, Prev: Modes, Up: Commands
+
+2.15 Page Styles
+================
+
+The `\documentclass' command determines the size and position of the
+page's head and foot. The page style determines what goes in them.
+
+* Menu:
+
+* \maketitle:: Generate a title page.
+* \pagenumbering:: Set the style used for page numbers.
+* \pagestyle:: Change the headings/footings style.
+* \thispagestyle:: Change the headings/footings style for this page.
+
+
+File: latex.info, Node: \maketitle, Next: \pagenumbering, Prev: Page Styles, Up: Page Styles
+
+2.15.1 \maketitle
+-----------------
+
+`\maketitle'
+
+ The `\maketitle' command generates a title on a separate title page
+- except in the `article' class, where the title normally goes at the
+top of the first page. Information used to produce the title is
+obtained from the following declarations:
+
+ *Note Page Styles::, for the commands to give the information.
+
+* Menu:
+
+* \author:: Who wrote this stuff?
+* \date:: The date the document was created.
+* \thanks:: A special form of footnote.
+* \title:: How to set the document title.
+
+
+File: latex.info, Node: \author, Next: \date, Prev: \maketitle, Up: \maketitle
+
+2.15.2 \author
+--------------
+
+`\author{names}'
+
+ The `\author' command declares the author(s), where `names' is a
+list of authors separated by `\and' commands. Use `\\' to separate
+lines within a single author's entry - for example, to give the
+author's institution or address.
+
+
+File: latex.info, Node: \date, Next: \thanks, Prev: \author, Up: \maketitle
+
+2.15.3 \date
+------------
+
+`\date{text}'
+
+ The `\date' command declares text to be the document's date. With
+no `\date' command, the current date is used.
+
+
+File: latex.info, Node: \thanks, Next: \title, Prev: \date, Up: \maketitle
+
+2.15.4 \thanks
+--------------
+
+`\thanks{text}'
+
+ The `\thanks' command produces a `\footnote' to the title.
+
+
+File: latex.info, Node: \title, Prev: \thanks, Up: \maketitle
+
+2.15.5 \title
+-------------
+
+`\title{text}'
+
+ The `\title' command declares `text' to be the title. Use `\\' to
+tell LaTeX where to start a new line in a long title.
+
+
+File: latex.info, Node: \pagenumbering, Next: \pagestyle, Prev: \maketitle, Up: Page Styles
+
+2.15.6 \pagenumbering
+---------------------
+
+`\pagenumbering{num_style}'
+
+ Specifies the style of page numbers. Possible values of `num_style'
+are:
+
+ * `arabic' - Arabic numerals
+
+ * `roman' - Lowercase Roman numerals
+
+ * `Roman' - Uppercase Roman numerals
+
+ * `alph' - Lowercase letters
+
+ * `Alph' - Uppercase letters
+
+
+File: latex.info, Node: \pagestyle, Next: \thispagestyle, Prev: \pagenumbering, Up: Page Styles
+
+2.15.7 \pagestyle
+-----------------
+
+`\pagestyle{option}'
+
+ The `\pagestyle' command changes the style from the current page on
+throughout the remainder of your document.
+
+ The valid options are:
+
+ * `plain' - Just a plain page number.
+
+ * `empty' - Produces empty heads and feet - no page numbers.
+
+ * `headings' - Puts running headings on each page. The document
+ style specifies what goes in the headings.
+
+ * `myheadings' - You specify what is to go in the heading with the
+ `\markboth' or the `\markright' commands.
+
+* Menu:
+
+* \markboth:: Set left and right headings.
+* \markright:: Set right heading only.
+
+
+File: latex.info, Node: \markboth, Next: \markright, Prev: \pagestyle, Up: \pagestyle
+
+2.15.8 \markboth
+----------------
+
+ \markboth{left head}{right head}
+
+ The `\markboth' command is used in conjunction with the page style
+`myheadings' for setting both the left and the right heading. You
+should note that a "left-hand heading" is generated by the last
+`\markboth' command before the end of the page, while a "right-hand
+heading" is generated by the first `\markboth' or `\markright' that
+comes on the page if there is one, otherwise by the last one before the
+page.
+
+
+File: latex.info, Node: \markright, Prev: \markboth, Up: \pagestyle
+
+2.15.9 \markright
+-----------------
+
+ \markright{right head}
+
+ The `\markright' command is used in conjunction with the page style
+`myheadings' for setting the right heading, leaving the left heading
+unchanged. You should note that a "left-hand heading" is generated by
+the last `\markboth' command before the end of the page, while a
+"right-hand heading" is generated by the first `\markboth' or
+`\markright' that comes on the page if there is one, otherwise by the
+last one before the page.
+
+
+File: latex.info, Node: \thispagestyle, Prev: \pagestyle, Up: Page Styles
+
+2.15.10 \thispagestyle
+----------------------
+
+`\thispagestyle{option}'
+
+ The `\thispagestyle' command works in the same manner as the
+`\pagestyle' command except that it changes the style for the current
+page only.
+
+
+File: latex.info, Node: Sectioning, Next: Spaces & Boxes, Prev: Page Styles, Up: Commands
+
+2.16 Sectioning
+===============
+
+Sectioning commands provide the means to structure your text into units.
+
+ * `\part'
+
+ * `\chapter' (report and book class only)
+
+ * `\section'
+
+ * `\subsection'
+
+ * `\subsubsection'
+
+ * `\paragraph'
+
+ * `\subparagraph'
+
+ All sectioning commands take the same general form, i.e.,
+
+ `\chapter[optional]{title}'
+
+ In addition to providing the heading in the text, the mandatory
+argument of the sectioning command can appear in two other places:
+
+ 1. The table of contents
+
+ 2. The running head at the top of the page
+
+ You may not want the same thing to appear in these other two places
+as appears in the text heading. To handle this situation, the
+sectioning commands have an `optional' argument that provides the text
+for these other two purposes.
+
+ All sectioning commands have `*'-forms that print a title, but do
+not include a number and do not make an entry in the table of contents.
+
+ `\appendix'
+
+ The `\appendix' command changes the way sectional units are
+numbered. The `\appendix' command generates no text and does not
+affect the numbering of parts. The normal use of this command is
+something like
+
+ \chapter{The First Chapter}
+ ...
+ \appendix
+ \chapter{The First Appendix}
+
+
+File: latex.info, Node: Spaces & Boxes, Next: Special Characters, Prev: Sectioning, Up: Commands
+
+2.17 Spaces & Boxes
+===================
+
+All the predefined length parameters (*note Predefined lengths::) can be
+used in the arguments of the box-making commands.
+
+* Menu:
+
+Horizontal space
+* \dotfill:: Stretchable horizontal dots.
+* \hfill:: Stretchable horizontal space.
+* \hrulefill:: Stretchable horizontal rule.
+* \hspace:: Fixed horizontal space.
+Vertical space
+* \addvspace:: Fixed vertical space.
+* \bigskip:: Fixed vertical space.
+* \medskip:: Fixed vertical space.
+* \smallskip:: Fixed vertical space.
+* \vfill:: Stretchable vertical space.
+* \vspace:: Fixed vertical space.
+Boxes
+* \fbox:: Framebox.
+* \framebox:: Framebox, adjustable position.
+* lrbox:: An environment like \sbox.
+* \makebox:: Box, adjustable position.
+* \mbox:: Box.
+* \newsavebox:: Declare a name for saving a box.
+* \parbox:: Box with text in paragraph mode.
+* \raisebox:: Raise or lower text.
+* \rule:: Lines and squares.
+* \savebox:: Like \makebox, but save the text for later use.
+* \sbox:: Like \mbox, but save the text for later use.
+* \usebox:: Print saved text.
+
+
+File: latex.info, Node: \dotfill, Next: \hfill, Up: Spaces & Boxes
+
+2.17.1 \dotfill
+---------------
+
+The `\dotfill' command produces a "rubber length" that produces dots
+instead of just spaces.
+
+
+File: latex.info, Node: \hfill, Next: \hrulefill, Prev: \dotfill, Up: Spaces & Boxes
+
+2.17.2 \hfill
+-------------
+
+The `\hfill' fill command produces a "rubber length" which can stretch
+or shrink horizontally. It will be filled with spaces.
+
+
+File: latex.info, Node: \hrulefill, Next: \hspace, Prev: \hfill, Up: Spaces & Boxes
+
+2.17.3 \hrulefill
+-----------------
+
+The `\hrulefill' fill command produces a "rubber length" which can
+stretch or shrink horizontally. It will be filled with a horizontal
+rule.
+
+
+File: latex.info, Node: \hspace, Next: \addvspace, Prev: \hrulefill, Up: Spaces & Boxes
+
+2.17.4 \hspace
+--------------
+
+`\hspace[*]{length}'
+
+ The `\hspace' command adds horizontal space. The length of the
+space can be expressed in any terms that LaTeX understands, i.e.,
+points, inches, etc. You can add negative as well as positive space
+with an `\hspace' command. Adding negative space is like backspacing.
+
+ LaTeX removes horizontal space that comes at the end of a line. If
+you don't want LaTeX to remove this space, include the optional `*'
+argument. Then the space is never removed.
+
+
+File: latex.info, Node: \addvspace, Next: \bigskip, Prev: \hspace, Up: Spaces & Boxes
+
+2.17.5 \addvspace
+-----------------
+
+`\addvspace{length}'
+
+ The `\addvspace' command normally adds a vertical space of height
+length. However, if vertical space has already been added to the same
+point in the output by a previous `\addvspace' command, then this
+command will not add more space than needed to make the natural length
+of the total vertical space equal to `length'.
+
+
+File: latex.info, Node: \bigskip, Next: \medskip, Prev: \addvspace, Up: Spaces & Boxes
+
+2.17.6 \bigskip
+---------------
+
+The `\bigskip' command is equivalent to `\vspace{bigskipamount}' where
+`bigskipamount' is determined by the document class.
+
+
+File: latex.info, Node: \medskip, Next: \smallskip, Prev: \bigskip, Up: Spaces & Boxes
+
+2.17.7 \medskip
+---------------
+
+The `\medskip' command is equivalent to `\vspace{medskipamount}' where
+`medskipamount' is determined by the document class.
+
+
+File: latex.info, Node: \smallskip, Next: \vfill, Prev: \medskip, Up: Spaces & Boxes
+
+2.17.8 \smallskip
+-----------------
+
+`\smallskip'
+
+ The `\smallskip' command is equivalent to `\vspace{smallskipamount}'
+where `smallskipamount' is determined by the document class.
+
+
+File: latex.info, Node: \vfill, Next: \vspace, Prev: \smallskip, Up: Spaces & Boxes
+
+2.17.9 \vfill
+-------------
+
+The `\vfill' fill command produces a rubber length which can stretch or
+shrink vertically.
+
+
+File: latex.info, Node: \vspace, Next: \fbox, Prev: \vfill, Up: Spaces & Boxes
+
+2.17.10 \vspace
+---------------
+
+`\vspace[*]{length}'
+
+ The `\vspace' command adds vertical space. The length of the space
+can be expressed in any terms that LaTeX understands, i.e., points,
+inches, etc. You can add negative as well as positive space with an
+`\vspace' command.
+
+ LaTeX removes vertical space that comes at the end of a page. If you
+don't want LaTeX to remove this space, include the optional `*'
+argument. Then the space is never removed.
+
+
+File: latex.info, Node: \fbox, Next: \framebox, Prev: \vspace, Up: Spaces & Boxes
+
+2.17.11 \fbox
+-------------
+
+`\fbox{text}'
+
+ The `\fbox' command is exactly the same as the `\mbox' command,
+except that it puts a frame around the outside of the box that it
+creates.
+
+
+File: latex.info, Node: \framebox, Next: lrbox, Prev: \fbox, Up: Spaces & Boxes
+
+2.17.12 \framebox
+-----------------
+
+`\framebox[width][position]{text}'
+
+ The `\framebox' command is exactly the same as the `\makebox'
+command, except that it puts a frame around the outside of the box that
+it creates.
+
+ The framebox command produces a rule of thickness `\fboxrule', and
+leaves a space `\fboxsep' between the rule and the contents of the box.
+
+
+File: latex.info, Node: lrbox, Next: \makebox, Prev: \framebox, Up: Spaces & Boxes
+
+2.17.13 lrbox
+-------------
+
+`\begin{lrbox}{cmd} text \end{lrbox}'
+
+ This is the environment form of `\sbox'.
+
+ The text inside the environment is saved in the box `cmd', which
+must have been declared with `\newsavebox'.
+
+
+File: latex.info, Node: \makebox, Next: \mbox, Prev: lrbox, Up: Spaces & Boxes
+
+2.17.14 \makebox
+----------------
+
+`\makebox[width][position]{text}'
+
+ The `\makebox' command creates a box just wide enough to contain the
+`text' specified. The width of the box is specified by the optional
+`width' argument. The position of the text within the box is
+determined by the optional `position' argument.
+
+ * `c' -- centred (default)
+
+ * `l' -- flushleft
+
+ * `r' -- flushright
+
+ * `s' -- stretch from left to right margin. The text must contain
+ stretchable space for this to work.
+
+ *Note \makebox (picture)::.
+
+
+File: latex.info, Node: \mbox, Next: \newsavebox, Prev: \makebox, Up: Spaces & Boxes
+
+2.17.15 \mbox
+-------------
+
+`\mbox{text}'
+
+ The `\mbox' command creates a box just wide enough to hold the text
+created by its argument.
+
+ Use this command to prevent text from being split across lines.
+
+
+File: latex.info, Node: \newsavebox, Next: \parbox, Prev: \mbox, Up: Spaces & Boxes
+
+2.17.16 \newsavebox
+-------------------
+
+`\newsavebox{cmd}'
+
+ Declares `cmd', which must be a command name that is not already
+defined, to be a bin for saving boxes.
+
+
+File: latex.info, Node: \parbox, Next: \raisebox, Prev: \newsavebox, Up: Spaces & Boxes
+
+2.17.17 \parbox
+---------------
+
+`\parbox[position][height][inner-pos]{width}{text}'
+
+ A `parbox' is a box whose contents are created in `paragraph' mode.
+The `\parbox' has two mandatory arguments:
+
+ * `width' - specifies the width of the parbox, and
+
+ * `text' - the text that goes inside the parbox.
+
+ LaTeX will position a `parbox' so its centre lines up with the
+centre of the text line. The optional position argument allows you to
+line up either the top or bottom line in the parbox (default is top).
+
+ If the height argument is not given, the box will have the natural
+height of the text.
+
+ The inner-pos argument controls the placement of the text inside the
+box. If it is not specified, position is used.
+
+ * `t' -- text is placed at the top of the box.
+
+ * `c' -- text is centred in the box.
+
+ * `b' -- text is placed at the bottom of the box.
+
+ * `s' -- stretch vertically. The text must contain vertically
+ stretchable space for this to work.
+
+ A `\parbox' command is used for a parbox containing a small piece of
+text, with nothing fancy inside. In particular, you shouldn't use any
+of the paragraph-making environments inside a `\parbox' argument. For
+larger pieces of text, including ones containing a paragraph-making
+environment, you should use a `minipage' environment *Note minipage::.
+
+
+File: latex.info, Node: \raisebox, Next: \rule, Prev: \parbox, Up: Spaces & Boxes
+
+2.17.18 \raisebox
+-----------------
+
+`\raisebox{distance}[extend-above][extend-below]{text}'
+
+ The `\raisebox' command is used to raise or lower text. The first
+mandatory argument specifies how high the text is to be raised (or
+lowered if it is a negative amount). The text itself is processed in
+`LR mode'.
+
+ Sometimes it's useful to make LaTeX think something has a different
+size than it really does - or a different size than LaTeX would
+normally think it has. The `\raisebox' command lets you tell LaTeX how
+tall it is.
+
+ The first optional argument, `extend-above', makes LaTeX think that
+the text extends above the line by the amount specified. The second
+optional argument, `extend-below', makes LaTeX think that the text
+extends below the line by the amount specified.
+
+
+File: latex.info, Node: \rule, Next: \savebox, Prev: \raisebox, Up: Spaces & Boxes
+
+2.17.19 \rule
+-------------
+
+`\rule[raise-height]{width}{thickness}'
+
+ The `\rule' command is used to produce horizontal lines. The
+arguments are defined as follows:
+
+ * `raise-height' - specifies how high to raise the rule (optional)
+
+ * `width' - specifies the length of the rule (mandatory)
+
+ * `thickness' - specifies the thickness of the rule (mandatory)
+
+
+File: latex.info, Node: \savebox, Next: \sbox, Prev: \rule, Up: Spaces & Boxes
+
+2.17.20 \savebox
+----------------
+
+ \savebox{cmd}[width][pos]{text}
+
+ This command typeset `text' in a box just as for `\makebox'.
+However, instead of printing the resulting box, it saves it in bin
+`cmd', which must have been declared with `\newsavebox'.
+
+
+File: latex.info, Node: \sbox, Next: \usebox, Prev: \savebox, Up: Spaces & Boxes
+
+2.17.21 \sbox
+-------------
+
+`\sbox{text}'
+
+ This commands typeset `text' in a box just as for `\mbox'. However,
+instead of printing the resulting box, it saves it in bin `cmd', which
+must have been declared with `\newsavebox'.
+
+
+File: latex.info, Node: \usebox, Prev: \sbox, Up: Spaces & Boxes
+
+2.17.22 \usebox
+---------------
+
+`\usebox{cmd}'
+
+ Prints the box most recently saved in bin `cmd' by a `\savebox'
+command.
+
+
+File: latex.info, Node: Special Characters, Next: Splitting the Input, Prev: Spaces & Boxes, Up: Commands
+
+2.18 Special Characters
+=======================
+
+The following characters play a special role in LaTeX and are called
+"special printing characters", or simply "special characters".
+
+ # $ % & ~ _ ^ \ { }
+
+ Whenever you put one of these special characters into your file, you
+are doing something special. If you simply want the character to be
+printed just as any other letter, include a `\' in front of the
+character. For example, `\$' will produce `$' in your output.
+
+ One exception to this rule is the `\' itself because `\\' has its
+own special meaning. A `\' is produced by typing `$\backslash$' in
+your file.
+
+ Also, `\~' means `place a tilde accent over the following letter',
+so you will probably want to use `\verb' instead.
+
+ In addition, you can access any character of a font once you know its
+number by using the `\symbol' command. For example, the character used
+for displaying spaces in the `\verb*' command has the code decimal 32,
+so it can be typed as `\symbol{32}'.
+
+ You can also specify octal numbers with `'' or hexadecimal numbers
+with `"', so the previous example could also be written as
+`\symbol{'40}' or `\symbol{"20}'.
+
+
+File: latex.info, Node: Splitting the Input, Next: Starting & Ending, Prev: Special Characters, Up: Commands
+
+2.19 Splitting the Input
+========================
+
+A large document requires a lot of input. Rather than putting the whole
+input in a single large file, it's more efficient to split it into
+several smaller ones. Regardless of how many separate files you use,
+there is one that is the root file; it is the one whose name you type
+when you run LaTeX.
+
+* Menu:
+
+* \include:: Conditionally include a file.
+* \includeonly:: Determine which files are included.
+* \input:: Unconditionally include a file.
+
+
+File: latex.info, Node: \include, Next: \includeonly, Prev: Splitting the Input, Up: Splitting the Input
+
+2.19.1 \include
+---------------
+
+`\include{file}'
+
+ The `\include' command is used in conjunction with the
+`\includeonly' command for selective inclusion of files. The `file'
+argument is the first name of a file, denoting `file.tex'. If `file'
+is one the file names in the file list of the `\includeonly' command or
+if there is no `\includeonly' command, the `\include' command is
+equivalent to
+
+ \clearpage \input{file} \clearpage
+
+ except that if the file `file.tex' does not exist, then a warning
+message rather than an error is produced. If the file is not in the
+file list, the `\include' command is equivalent to `\clearpage'.
+
+ The `\include' command may not appear in the preamble or in a file
+read by another `\include' command.
+
+
+File: latex.info, Node: \includeonly, Next: \input, Prev: \include, Up: Splitting the Input
+
+2.19.2 \includeonly
+-------------------
+
+`\includeonly{'file_list`}'
+
+ The `\includeonly' command controls which files will be read in by
+an `\include' command. file_list should be a comma-separated list of
+filenames. Each filename must match exactly a filename specified in a
+`\include' command. This command can only appear in the preamble.
+
+
+File: latex.info, Node: \input, Prev: \includeonly, Up: Splitting the Input
+
+2.19.3 \input
+-------------
+
+`\input{file}'
+
+ The `\input' command causes the indicated `file' to be read and
+processed, exactly as if its contents had been inserted in the current
+file at that point. The file name may be a complete file name with
+extension or just a first name, in which case the file `file.tex' is
+used.
+
+
+File: latex.info, Node: Starting & Ending, Next: Table of Contents, Prev: Splitting the Input, Up: Commands
+
+2.20 Starting & Ending
+======================
+
+Your input file must contain the following commands as a minimum:
+
+ \documentclass{class}
+ \begin{document}
+ ... your text goes here ...
+ \end{document}
+
+ where the `class' selected is one of the valid classes for LaTeX.
+*Note Document Classes::, (and *note Overview::), for details of the
+various document classes available locally.
+
+ You may include other LaTeX commands between the `\documentclass'
+and the `\begin{document}' commands (i.e., in the `preamble').
+
+
+File: latex.info, Node: Table of Contents, Next: Terminal Input/Output, Prev: Starting & Ending, Up: Commands
+
+2.21 Table of Contents
+======================
+
+A table of contents is produced with the `\tableofcontents' command.
+You put the command right where you want the table of contents to go;
+LaTeX does the rest for you. It produces a heading, but it does not
+automatically start a new page. If you want a new page after the table
+of contents, include a `\newpage' command after the `\tableofcontents'
+command.
+
+ There are similar commands `\listoffigures' and `\listoftables' for
+producing a list of figures and a list of tables, respectively.
+Everything works exactly the same as for the table of contents.
+
+ NOTE: If you want any of these items to be generated, you cannot have
+the `\nofiles' command in your document.
+
+* Menu:
+
+* \addcontentsline:: Add an entry to table of contents etc.
+* \addtocontents:: Add text directly to table of contents file etc.
+
+
+File: latex.info, Node: \addcontentsline, Next: \addtocontents, Prev: Table of Contents, Up: Table of Contents
+
+2.21.1 \addcontentsline
+-----------------------
+
+`\addcontentsline{file}{sec_unit}{entry}'
+
+ The `\addcontentsline' command adds an entry to the specified list
+or table where:
+
+ * `file' is the extension of the file on which information is to be
+ written: `toc' (table of contents), `lof' (list of figures), or
+ `lot' (list of tables).
+
+ * `sec_unit' controls the formatting of the entry. It should be one
+ of the following, depending upon the value of the file argument:
+ 1. `toc' -- the name of the sectional unit, such as part or
+ subsection.
+
+ 2. `lof' -- figure
+
+ 3. `lot' -- table
+
+ * `entry' is the text of the entry.
+
+
+File: latex.info, Node: \addtocontents, Prev: \addcontentsline, Up: Table of Contents
+
+2.21.2 \addtocontents
+---------------------
+
+`\addtocontents{file}{text}'
+
+ The `\addtocontents' command adds text (or formatting commands)
+directly to the file that generates the table of contents or list of
+figures or tables.
+
+ * `file' is the extension of the file on which information is to be
+ written: `toc' (table of contents), `lof' (list of figures), or
+ `lot' (list of tables).
+
+ * `text' is the information to be written.
+
+
+File: latex.info, Node: Terminal Input/Output, Next: Typefaces, Prev: Table of Contents, Up: Commands
+
+2.22 Terminal Input/Output
+==========================
+
+* Menu:
+
+* \typein:: Read text from the terminal.
+* \typeout:: Write text to the terminal.
+
+
+File: latex.info, Node: \typein, Next: \typeout, Up: Terminal Input/Output
+
+2.22.1 \typein
+--------------
+
+`\typein[cmd]{msg}'
+
+ Prints `msg' on the terminal and causes LaTeX to stop and wait for
+you to type a line of input, ending with return. If the `cmd' argument
+is missing, the typed input is processed as if it had been included in
+the input file in place of the `\typein' command. If the `cmd'
+argument is present, it must be a command name. This command name is
+then defined or redefined to be the typed input.
+
+
+File: latex.info, Node: \typeout, Prev: \typein, Up: Terminal Input/Output
+
+2.22.2 \typeout
+---------------
+
+`\typeout{msg}'
+
+ Prints `msg' on the terminal and in the `log' file. Commands in
+`msg' that are defined with `\newcommand' or `\renewcommand' are
+replaced by their definitions before being printed.
+
+ LaTeX's usual rules for treating multiple spaces as a single space
+and ignoring spaces after a command name apply to `msg'. A `\space'
+command in `msg' causes a single space to be printed. A `^^J' in `msg'
+prints a newline.
+
+
+File: latex.info, Node: Typefaces, Prev: Terminal Input/Output, Up: Commands
+
+2.23 Typefaces
+==============
+
+The `typeface' is specified by giving the "size" and "style". A
+typeface is also called a "font".
+
+* Menu:
+
+* Styles:: Select roman, italics etc.
+* Sizes:: Select point size.
+* Low-level font commands:: Commands for wizards.
+
+
+File: latex.info, Node: Styles, Next: Sizes, Prev: Typefaces, Up: Typefaces
+
+2.23.1 \Styles
+--------------
+
+The following type style commands are supported by LaTeX.
+
+ These commands are used like `\textit{italics text}'. The
+corresponding command in parenthesis is the "declaration form", which
+takes no arguments. The scope of the declaration form lasts until the
+next type style command or the end of the current group.
+
+ The declaration forms are cumulative; i.e., you can say
+`\sffamily\bfseries' to get sans serif boldface.
+
+ You can also use the environment form of the declaration forms; e.g.
+`\begin{ttfamily}...\end{ttfamily}'.
+
+`\textrm (\rmfamily)'
+ Roman.
+
+`\textit (\itshape)'
+
+`\emph'
+ Emphasis (toggles between \textit and \textrm).
+
+`\textmd (\mdseries)'
+ Medium weight (default). The opposite of boldface.
+
+`\textbf (\bfseries)'
+ Boldface.
+
+`\textup (\upshape)'
+ Upright (default). The opposite of slanted.
+
+`\textsl (\slshape)'
+ Slanted.
+
+`\textsf (\sffamily)'
+ Sans serif.
+
+`\textsc (\scshape)'
+ Small caps.
+
+`\texttt (\ttfamily)'
+ Typewriter.
+
+`\textnormal (\normalfont)'
+ Main document font.
+
+`\mathrm'
+ Roman, for use in math mode.
+
+`\mathbf'
+ Boldface, for use in math mode.
+
+`\mathsf'
+ Sans serif, for use in math mode.
+
+`\mathtt'
+ Typewriter, for use in math mode.
+
+`\mathit'
+ Italics, for use in math mode, e.g. variable names with several
+ letters.
+
+`\mathnormal'
+ For use in math mode, e.g. inside another type style declaration.
+
+`\mathcal'
+ `Calligraphic' letters, for use in math mode.
+
+ In addition, the command `\mathversion{bold}' can be used for
+switching to bold letters and symbols in formulas.
+`\mathversion{normal}' restores the default.
+
+
+File: latex.info, Node: Sizes, Next: Low-level font commands, Prev: Styles, Up: Typefaces
+
+2.23.2 Sizes
+------------
+
+The following standard type size commands are supported by LaTeX.
+
+ The commands as listed here are "declaration forms". The scope of the
+declaration form lasts until the next type style command or the end of
+the current group.
+
+ You can also use the environment form of these commands; e.g.
+`\begin{tiny}...\end{tiny}'.
+
+`\tiny'
+
+`\scriptsize'
+
+`\footnotesize'
+
+`\small'
+
+`\normalsize'
+ (default)
+
+`\large'
+
+`\Large'
+
+`\LARGE'
+
+`\huge'
+
+`\Huge'
+
+
+File: latex.info, Node: Low-level font commands, Prev: Sizes, Up: Typefaces
+
+2.23.3 Low-level font commands
+------------------------------
+
+These commands are primarily intended for writers of macros and
+packages. The commands listed here are only a subset of the available
+ones. For full details, you should consult Chapter 7 of `The LaTeX
+Companion'.
+
+`\fontencoding{enc}'
+ Select font encoding. Valid encodings include `OT1' and `T1'.
+
+`\fontfamily{family}'
+ Select font family. Valid families include:
+
+ * `cmr' for Computer Modern Roman
+
+ * `cmss' for Computer Modern Sans Serif
+
+ * `cmtt' for Computer Modern Typewriter
+
+ and numerous others.
+
+`\fontseries{series}'
+ Select font series. Valid series include:
+
+ * `m' Medium (normal)
+
+ * `b' Bold
+
+ * `c' Condensed
+
+ * `bc' Bold condensed
+
+ * `bx' Bold extended
+
+ and various other combinations.
+
+`\fontshape{shape}'
+ Select font shape. Valid shapes are:
+
+ * `n' Upright (normal)
+
+ * `it' Italic
+
+ * `sl' Slanted (oblique)
+
+ * `sc' Small caps
+
+ * `ui' Upright italics
+
+ * `ol' Outline
+
+ The two last shapes are not available for most font families.
+
+`\fontsize{size}{skip}'
+ Set font size. The first parameter is the font size to switch to;
+ the second is the `\baselineskip' to use. The unit of both
+ parameters defaults to pt. A rule of thumb is that the
+ baselineskip should be 1.2 times the font size.
+
+`\selectfont'
+ The changes made by calling the four font commands described above
+ do not come into effect until `\selectfont' is called.
+
+`\usefont{enc}{family}{series}{shape}'
+ Equivalent to calling `\fontencoding', `\fontfamily',
+ `\fontseries' and `\fontshape' with the given parameters, followed
+ by `\selectfont'.
+
+
+File: latex.info, Node: Parameters, Next: Concept Index, Prev: Commands, Up: Top
+
+3 Parameters
+************
+
+The input file specification indicates the file to be formatted; TeX
+uses `.tex' as a default file extension. If you omit the input file
+entirely, TeX accepts input from the terminal. You specify command
+options by supplying a string as a parameter to the command; e.g.
+
+ `latex ``\scrollmode\input foo.tex'''
+
+ will process `foo.tex' without pausing after every error.
+
+ Output files are always created in the current directory. When you
+fail to specify an input file name, TeX bases the output names on the
+file specification associated with the logical name TEX_OUTPUT,
+typically `texput.log'.
+
+
+File: latex.info, Node: Concept Index, Next: Command Index, Prev: Parameters, Up: Top
+
+Concept Index
+*************
+
+
+* Menu:
+
+* Accessing any character of a font: Special Characters. (line 23)
+* Aligning Equations: eqnarray. (line 6)
+* Appendix, creating: Sectioning. (line 41)
+* Arrays, math: array. (line 6)
+* article class: Document Classes. (line 6)
+* Author, for titlepage: \author. (line 6)
+* Bibliography, creating (automatically): Using BibTeX. (line 6)
+* Bibliography, creating (manually): thebibliography. (line 6)
+* BibTeX, using: Using BibTeX. (line 6)
+* book class: Document Classes. (line 6)
+* Boxes: Spaces & Boxes. (line 6)
+* Cc list: \cc. (line 6)
+* Centering text: \centering. (line 6)
+* Centering text, environment for: center. (line 6)
+* Characters, reserved: Special Characters. (line 6)
+* Characters, special: Special Characters. (line 6)
+* Classes of document: Document Classes. (line 6)
+* Commands, defining new ones: \newcommand. (line 6)
+* Computer programs, typesetting: verbatim. (line 6)
+* Counters, a list of: Counters. (line 6)
+* Counters, creating: \newcounter. (line 6)
+* Counters, getting the value of: \value. (line 6)
+* Counters, setting: \setcounter. (line 6)
+* Creating letters: Letters. (line 6)
+* Creating pictures: picture. (line 6)
+* Creating tables: table. (line 6)
+* Cross referencing: Cross References. (line 6)
+* Cross referencing using page number: \pageref. (line 6)
+* Cross referencing using section number: \ref. (line 6)
+* Date, for titlepage: \date. (line 6)
+* Defining a new command: \newcommand. (line 6)
+* Defining new environments: \newenvironment. (line 6)
+* Defining new fonts: \newfont. (line 6)
+* Defining new theorems: \newtheorem. (line 6)
+* Displaying quoted text: quote. (line 6)
+* Displaying quoted text with paragraph indentation: quotation.
+ (line 6)
+* Document Classes: Document Classes. (line 6)
+* Enclosed material: \encl. (line 6)
+* Ending & Starting: Starting & Ending. (line 6)
+* Enlarge current page: \enlargethispage. (line 6)
+* Environments: Environments. (line 6)
+* Environments, defining: \newenvironment. (line 6)
+* Equations, aligning: eqnarray. (line 6)
+* Equations, environment for: equation. (line 6)
+* exponent: Math Formulae. (line 32)
+* Figures, footnotes in: minipage. (line 6)
+* Flushing a page: \clearpage. (line 6)
+* Font commands, low-level: Low-level font commands.
+ (line 6)
+* Font Sizes: Sizes. (line 6)
+* Font Styles: Styles. (line 6)
+* Fonts: Typefaces. (line 6)
+* Fonts, new commands for: \newfont. (line 6)
+* Footnotes in figures: minipage. (line 6)
+* Footnotes, creating: Footnotes. (line 6)
+* Formatting Text: \centering. (line 6)
+* Formulae, environment for: equation. (line 6)
+* Formulae, maths: Math Formulae. (line 6)
+* Global options: Document Classes. (line 75)
+* Greek letters: Math Symbols. (line 6)
+* Hyphenation, defining: \hyphenation. (line 6)
+* Hyphenation, forcing: \- (hyphenation). (line 6)
+* Indent, forcing: \indent. (line 6)
+* Indent, suppressing: \noindent. (line 6)
+* Input file, splitting: Splitting the Input. (line 6)
+* Input/Output: Terminal Input/Output.
+ (line 6)
+* Inserting figures: figure. (line 6)
+* Justification, ragged left: \raggedleft. (line 6)
+* Justification, ragged right: \raggedright. (line 6)
+* Labelled lists, creating: description. (line 6)
+* LaTeX overview: Overview. (line 6)
+* Layout commands: Layout. (line 3)
+* Left-justifying text: \raggedright. (line 6)
+* Left-justifying text, environment for: flushleft. (line 6)
+* Left-to-right mode: Modes. (line 6)
+* Lengths, adding to: \addtolength. (line 6)
+* Lengths, defining a new: \newlength. (line 6)
+* Lengths, defining and using: Lengths. (line 6)
+* Lengths, predefined: Predefined lengths. (line 6)
+* Lengths, setting value of: \setlength. (line 6)
+* letter class: Document Classes. (line 6)
+* Letters: Letters. (line 6)
+* Letters, ending: \closing. (line 6)
+* Letters, starting: \opening. (line 6)
+* Line Breaking: Line & Page Breaking. (line 6)
+* Line breaks: \linebreak. (line 6)
+* Lines in tables: tabular. (line 6)
+* Lining text up in columns using tab stops: tabbing. (line 6)
+* Lining text up in tables: tabular. (line 6)
+* Lists of items: itemize. (line 6)
+* Lists of items, generic: list. (line 6)
+* Lists of items, numbered: enumerate. (line 6)
+* Loading additional packages: Document Classes. (line 71)
+* Low-level font commands: Low-level font commands.
+ (line 6)
+* LR mode: Modes. (line 6)
+* Making a title page: titlepage. (line 6)
+* Making paragraphs: Making Paragraphs. (line 6)
+* Margin Notes: Margin Notes. (line 6)
+* Math Formulae: Math Formulae. (line 6)
+* Math mode: Modes. (line 6)
+* Math mode, entering: Math Formulae. (line 6)
+* Math mode, spacing: Spacing in Math Mode. (line 6)
+* Maths Miscellany: Math Miscellany. (line 6)
+* Maths symbols: Math Symbols. (line 6)
+* Minipage, creating a: minipage. (line 6)
+* Modes: Modes. (line 6)
+* Multicolumn text: \twocolumn. (line 6)
+* New line, starting: \\. (line 6)
+* New line, starting (paragraph mode): \newline. (line 6)
+* New Page: \newpage. (line 6)
+* Notes in the margin: Margin Notes. (line 6)
+* Options, global: Document Classes. (line 75)
+* Overview of LaTeX: Overview. (line 6)
+* Packages, loading: Document Classes. (line 71)
+* Page break, forcing: \pagebreak. (line 6)
+* Page Breaking: Line & Page Breaking. (line 6)
+* Page Formatting: Line & Page Breaking. (line 6)
+* Page numbering: \pagenumbering. (line 6)
+* Page styles: Page Styles. (line 6)
+* Paragraph mode: Modes. (line 6)
+* Paragraph, starting a new: \par. (line 6)
+* Paragraphs: Making Paragraphs. (line 6)
+* Pictures, creating: picture. (line 6)
+* Poetry, an environment for: verse. (line 6)
+* Predefined lengths: Predefined lengths. (line 6)
+* Programs, typesetting: verbatim. (line 6)
+* Quoted text with paragraph indentation, displaying: quotation.
+ (line 6)
+* Quoted text, displaying: quote. (line 6)
+* Ragged left text: \raggedleft. (line 6)
+* Ragged left text, environment for: flushright. (line 6)
+* Ragged right text: \raggedright. (line 6)
+* Ragged right text, environment for: flushleft. (line 6)
+* Remarks in the margin: Margin Notes. (line 6)
+* report class: Document Classes. (line 6)
+* Reserved Characters: Special Characters. (line 6)
+* Right-justifying text: \raggedleft. (line 6)
+* Right-justifying text, environment for: flushright. (line 6)
+* Sectioning: Sectioning. (line 6)
+* Simulating typed text: verbatim. (line 6)
+* Sizes of text: Sizes. (line 6)
+* Space, inserting vertical: \addvspace. (line 6)
+* Spaces: Spaces & Boxes. (line 6)
+* Spacing, within Math mode: Spacing in Math Mode. (line 6)
+* Special Characters: Special Characters. (line 6)
+* Splitting the input file: Splitting the Input. (line 6)
+* Starting & Ending: Starting & Ending. (line 6)
+* Starting on a right-hand page: \cleardoublepage. (line 6)
+* Styles of text: Styles. (line 6)
+* Styles, page: Page Styles. (line 6)
+* Subscript: Subscripts & Superscripts.
+ (line 6)
+* Superscript: Subscripts & Superscripts.
+ (line 6)
+* Symbols: Math Symbols. (line 6)
+* Tab stops, using: tabbing. (line 6)
+* Table of Contents, creating: Table of Contents. (line 6)
+* Tables, creating: table. (line 6)
+* Terminal Input/Output: Terminal Input/Output.
+ (line 6)
+* Thanks, for titlepage: \thanks. (line 6)
+* Theorems, defining: \newtheorem. (line 6)
+* Theorems, typesetting: theorem. (line 6)
+* Title making: \maketitle. (line 6)
+* Title pages, creating: titlepage. (line 6)
+* Title, for titlepage: \title. (line 6)
+* Typed text, simulating: verbatim. (line 6)
+* Typeface Sizes: Sizes. (line 6)
+* Typeface Styles: Styles. (line 6)
+* Typefaces: Typefaces. (line 6)
+* Using BibTeX: Using BibTeX. (line 6)
+* Variables, a list of: Counters. (line 6)
+* Verbatim text: \verb. (line 6)
+* Vertical space, inserting: \addvspace. (line 6)
+
+
+File: latex.info, Node: Command Index, Prev: Concept Index, Up: Top
+
+Command Index
+*************
+
+
+* Menu:
+
+* $: Math Formulae. (line 6)
+* \!: Spacing in Math Mode. (line 11)
+* \' (tabbing): tabbing. (line 46)
+* \(: Math Formulae. (line 6)
+* \): Math Formulae. (line 6)
+* \+: tabbing. (line 38)
+* \,: Spacing in Math Mode. (line 11)
+* \- (hyphenation): \- (hyphenation). (line 6)
+* \- (tabbing): tabbing. (line 42)
+* \;: Spacing in Math Mode. (line 11)
+* \<: tabbing. (line 33)
+* \=: tabbing. (line 27)
+* \>: tabbing. (line 30)
+* \[: Math Formulae. (line 6)
+* \\: \\. (line 6)
+* \]: Math Formulae. (line 6)
+* \` (tabbing): tabbing. (line 52)
+* \a: tabbing. (line 75)
+* \addcontentsline: \addcontentsline. (line 6)
+* \address: \address. (line 6)
+* \addtocontents: \addtocontents. (line 6)
+* \addtocounter: \addtocounter. (line 6)
+* \addtolength: \addtolength. (line 6)
+* \addvspace: \addvspace. (line 6)
+* \Alph: \alph. (line 6)
+* \alph: \alph. (line 6)
+* \appendix: Sectioning. (line 41)
+* \arabic: \arabic. (line 6)
+* \author: \author. (line 6)
+* \backslash: Special Characters. (line 23)
+* \begin: Environments. (line 6)
+* \bfseries: Styles. (line 31)
+* \bibitem: \bibitem. (line 6)
+* \bibliography: Using BibTeX. (line 6)
+* \bibliographystyle: Using BibTeX. (line 6)
+* \bigskip: \bigskip. (line 6)
+* \caption: figure. (line 13)
+* \cc: \cc. (line 6)
+* \cdots: Math Miscellany. (line 7)
+* \centering: \centering. (line 6)
+* \chapter: Sectioning. (line 6)
+* \circle: \circle. (line 6)
+* \cite: \cite. (line 6)
+* \cleardoublepage: \cleardoublepage. (line 6)
+* \clearpage: \clearpage. (line 6)
+* \cline: \cline. (line 6)
+* \closing: \closing. (line 6)
+* \COLON: Spacing in Math Mode. (line 11)
+* \dashbox: \dashbox. (line 6)
+* \date: \date. (line 6)
+* \ddots: Math Miscellany. (line 11)
+* \depth: Predefined lengths. (line 10)
+* \documentclass: Document Classes. (line 6)
+* \dotfill: \dotfill. (line 6)
+* \emph: Styles. (line 25)
+* \encl: \encl. (line 6)
+* \end: Environments. (line 6)
+* \enlargethispage: \enlargethispage. (line 6)
+* \fbox: \fbox. (line 6)
+* \flushbottom: \flushbottom. (line 6)
+* \fnsymbol: \fnsymbol. (line 6)
+* \fontencoding: Low-level font commands.
+ (line 12)
+* \fontfamily: Low-level font commands.
+ (line 15)
+* \fontseries: Low-level font commands.
+ (line 26)
+* \fontshape: Low-level font commands.
+ (line 41)
+* \fontsize: Low-level font commands.
+ (line 58)
+* \footnote: \footnote. (line 6)
+* \footnotemark: \footnotemark. (line 6)
+* \footnotesize: Sizes. (line 20)
+* \footnotetext: \footnotetext. (line 6)
+* \frac: Math Miscellany. (line 14)
+* \frame: \frame. (line 6)
+* \framebox <1>: \framebox. (line 6)
+* \framebox: \framebox (picture). (line 6)
+* \fussy: \fussy. (line 6)
+* \height: Predefined lengths. (line 8)
+* \hfill: \hfill. (line 6)
+* \hline: \hline. (line 6)
+* \hrulefill: \hrulefill. (line 6)
+* \hspace: \hspace. (line 6)
+* \Huge: Sizes. (line 35)
+* \huge: Sizes. (line 33)
+* \hyphenation: \hyphenation. (line 6)
+* \include: \include. (line 6)
+* \includeonly: \includeonly. (line 6)
+* \indent: \indent. (line 6)
+* \input: \input. (line 6)
+* \item: itemize. (line 6)
+* \itshape: Styles. (line 23)
+* \kill: tabbing. (line 61)
+* \label: \label. (line 6)
+* \LARGE: Sizes. (line 31)
+* \Large: Sizes. (line 29)
+* \large: Sizes. (line 27)
+* \ldots: Math Miscellany. (line 17)
+* \lefteqn: eqnarray. (line 22)
+* \line: \line. (line 6)
+* \linebreak: \linebreak. (line 6)
+* \linethickness: \linethickness. (line 6)
+* \listoffigures: Table of Contents. (line 13)
+* \listoftables: Table of Contents. (line 13)
+* \location: \location. (line 6)
+* \makebox: \makebox. (line 6)
+* \makebox (picture): \makebox (picture). (line 6)
+* \makelabels: \makelabels. (line 6)
+* \maketitle: \maketitle. (line 6)
+* \markboth: \markboth. (line 6)
+* \markright: \markright. (line 6)
+* \mathbf: Styles. (line 55)
+* \mathcal: Styles. (line 71)
+* \mathit: Styles. (line 64)
+* \mathnormal: Styles. (line 68)
+* \mathrm: Styles. (line 52)
+* \mathsf: Styles. (line 58)
+* \mathtt: Styles. (line 61)
+* \mathversion: Styles. (line 73)
+* \mbox: \mbox. (line 6)
+* \mdseries: Styles. (line 28)
+* \medskip: \medskip. (line 6)
+* \multicolumn: \multicolumn. (line 6)
+* \multiput: \multiput. (line 6)
+* \name: \name. (line 6)
+* \newcommand: \newcommand. (line 6)
+* \newcounter: \newcounter. (line 6)
+* \newenvironment: \newenvironment. (line 6)
+* \newfont: \newfont. (line 6)
+* \newlength: \newlength. (line 6)
+* \newline: \newline. (line 6)
+* \newpage: \newpage. (line 6)
+* \newsavebox: \newsavebox. (line 6)
+* \newtheorem: \newtheorem. (line 6)
+* \nocite: \nocite. (line 6)
+* \nofiles: Table of Contents. (line 18)
+* \noindent: \noindent. (line 6)
+* \nolinebreak: \nolinebreak. (line 6)
+* \nopagebreak: \nopagebreak. (line 6)
+* \normalfont: Styles. (line 49)
+* \normalsize: Sizes. (line 24)
+* \onecolumn: \onecolumn. (line 6)
+* \opening: \opening. (line 6)
+* \oval: \oval. (line 6)
+* \overbrace: Math Miscellany. (line 21)
+* \overline: Math Miscellany. (line 24)
+* \pagebreak: \pagebreak. (line 6)
+* \pagenumbering: \pagenumbering. (line 6)
+* \pageref: \pageref. (line 6)
+* \pagestyle: \pagestyle. (line 6)
+* \par: \par. (line 6)
+* \paragraph: Sectioning. (line 6)
+* \parbox: \parbox. (line 6)
+* \poptabs: tabbing. (line 72)
+* \ps: \ps. (line 6)
+* \pushtabs: tabbing. (line 67)
+* \put: \put. (line 6)
+* \raggedbottom: \raggedbottom. (line 6)
+* \raggedleft: \raggedleft. (line 6)
+* \raggedright: \raggedright. (line 6)
+* \raisebox: \raisebox. (line 6)
+* \ref: \ref. (line 6)
+* \refstepcounter: \refstepcounter. (line 6)
+* \rmfamily: Styles. (line 20)
+* \Roman: \roman. (line 6)
+* \roman: \roman. (line 6)
+* \rule: \rule. (line 6)
+* \savebox: \savebox. (line 6)
+* \sbox: \sbox. (line 6)
+* \scriptsize: Sizes. (line 18)
+* \scshape: Styles. (line 43)
+* \selectfont: Low-level font commands.
+ (line 64)
+* \setcounter: \setcounter. (line 6)
+* \setlength: \setlength. (line 6)
+* \settodepth: \settodepth. (line 6)
+* \settoheight: \settoheight. (line 6)
+* \settowidth: \settowidth. (line 6)
+* \sffamily: Styles. (line 40)
+* \shortstack: \shortstack. (line 6)
+* \signature: \signature. (line 6)
+* \sloppy: \sloppy. (line 6)
+* \slshape: Styles. (line 37)
+* \small: Sizes. (line 22)
+* \smallskip: \smallskip. (line 6)
+* \sqrt: Math Miscellany. (line 27)
+* \startbreaks: \startbreaks. (line 6)
+* \stepcounter: \stepcounter. (line 6)
+* \stopbreaks: \stopbreaks. (line 6)
+* \subparagraph: Sectioning. (line 6)
+* \subsection: Sectioning. (line 6)
+* \subsubsection: Sectioning. (line 6)
+* \symbol: Special Characters. (line 23)
+* \tableofcontents: Table of Contents. (line 6)
+* \telephone: \telephone. (line 6)
+* \textbf: Styles. (line 31)
+* \textit: Styles. (line 23)
+* \textmd: Styles. (line 28)
+* \textnormal: Styles. (line 49)
+* \textrm: Styles. (line 20)
+* \textsc: Styles. (line 43)
+* \textsf: Styles. (line 40)
+* \textsl: Styles. (line 37)
+* \texttt: Styles. (line 46)
+* \textup: Styles. (line 34)
+* \thanks: \thanks. (line 6)
+* \thispagestyle: \thispagestyle. (line 6)
+* \tiny: Sizes. (line 16)
+* \title: \title. (line 6)
+* \today: titlepage. (line 13)
+* \totalheight: Predefined lengths. (line 12)
+* \ttfamily: Styles. (line 46)
+* \twocolumn: \twocolumn. (line 6)
+* \typein: \typein. (line 6)
+* \typeout: \typeout. (line 6)
+* \underbrace: Math Miscellany. (line 32)
+* \underline: Math Miscellany. (line 35)
+* \upshape: Styles. (line 34)
+* \usebox: \usebox. (line 6)
+* \usecounter: \usecounter. (line 6)
+* \usefont: Low-level font commands.
+ (line 68)
+* \usepackage: Document Classes. (line 68)
+* \value: \value. (line 6)
+* \vdots: Math Miscellany. (line 39)
+* \vector: \vector. (line 6)
+* \verb: \verb. (line 6)
+* \vfill: \vfill. (line 6)
+* \vline: \vline. (line 6)
+* \vspace: \vspace. (line 6)
+* \width: Predefined lengths. (line 6)
+* ^: Subscripts & Superscripts.
+ (line 6)
+* _: Subscripts & Superscripts.
+ (line 6)
+* array: array. (line 6)
+* center: center. (line 6)
+* description: description. (line 6)
+* enumerate: enumerate. (line 6)
+* eqnarray: eqnarray. (line 6)
+* equation: equation. (line 6)
+* figure: figure. (line 6)
+* flushleft: flushleft. (line 6)
+* flushright: flushright. (line 6)
+* itemize: itemize. (line 6)
+* letter: letter. (line 6)
+* list: list. (line 6)
+* lrbox: lrbox. (line 6)
+* minipage: minipage. (line 6)
+* picture: picture. (line 6)
+* quotation: quotation. (line 6)
+* quote: quote. (line 6)
+* tabbing: tabbing. (line 6)
+* table: table. (line 6)
+* tabular: tabular. (line 6)
+* thebibliography: thebibliography. (line 6)
+* theorem: theorem. (line 6)
+* titlepage: titlepage. (line 6)
+* verbatim: verbatim. (line 6)
+* verse: verse. (line 6)
+
+
+
+Tag Table:
+Node: Top1653
+Node: Overview2255
+Node: Commands3711
+Node: Counters5316
+Node: \addtocounter6763
+Node: \alph7070
+Node: \arabic7466
+Node: \fnsymbol7702
+Node: \newcounter8066
+Node: \refstepcounter8474
+Node: \roman8807
+Node: \stepcounter9191
+Node: \setcounter9439
+Node: \usecounter9708
+Node: \value10016
+Node: Cross References10466
+Node: \label10901
+Node: \pageref11765
+Node: \ref12061
+Node: Definitions12296
+Node: \newcommand12651
+Node: \newenvironment13756
+Node: \newtheorem14961
+Node: \newfont15869
+Node: Document Classes16160
+Node: Layout18210
+Node: \flushbottom18616
+Node: \onecolumn18919
+Node: \raggedbottom19132
+Node: \twocolumn19387
+Node: Environments19677
+Node: array21042
+Node: center21930
+Node: \centering22448
+Node: description23150
+Node: enumerate23528
+Node: eqnarray24270
+Node: equation24999
+Node: figure25300
+Node: flushleft26377
+Node: \raggedright26891
+Node: flushright27465
+Node: \raggedleft27980
+Node: itemize28553
+Node: letter29282
+Node: list29459
+Node: minipage30294
+Node: picture31191
+Node: \circle35158
+Node: \dashbox35509
+Node: \frame35880
+Node: \framebox (picture)36235
+Node: \line36702
+Node: \linethickness37053
+Node: \makebox (picture)37501
+Node: \multiput38195
+Node: \oval38516
+Node: \put39118
+Node: \shortstack39364
+Node: \vector39801
+Node: quotation40095
+Node: quote40499
+Node: tabbing40848
+Node: table43876
+Node: tabular44958
+Node: \cline48169
+Node: \hline48457
+Node: \multicolumn48744
+Node: \vline49281
+Node: thebibliography49598
+Node: \bibitem50456
+Node: \cite51168
+Node: \nocite51662
+Node: Using BibTeX51944
+Node: theorem53126
+Node: titlepage53411
+Node: verbatim53967
+Node: \verb54456
+Node: verse54909
+Node: Footnotes55306
+Node: \footnote55874
+Node: \footnotemark56378
+Node: \footnotetext56902
+Node: Lengths57363
+Node: \newlength57970
+Node: \setlength58283
+Node: \addtolength58660
+Node: \settodepth58965
+Node: \settoheight59236
+Node: \settowidth59511
+Node: Predefined lengths59788
+Node: Letters60309
+Node: \address62243
+Node: \cc62824
+Node: \closing63063
+Node: \encl63274
+Node: \location63451
+Node: \makelabels63709
+Node: \name63993
+Node: \opening64211
+Node: \ps64501
+Node: \signature64653
+Node: \startbreaks64983
+Node: \stopbreaks65201
+Node: \telephone65412
+Node: Line & Page Breaking65640
+Node: \\66876
+Node: \- (hyphenation)67377
+Node: \cleardoublepage67913
+Node: \clearpage68350
+Node: \enlargethispage68639
+Node: \fussy69152
+Node: \hyphenation69549
+Node: \linebreak69903
+Node: \newline70468
+Node: \newpage70699
+Node: \nolinebreak70883
+Node: \nopagebreak71373
+Node: \pagebreak71865
+Node: \sloppy72334
+Node: Making Paragraphs72662
+Node: \indent73202
+Node: \noindent73525
+Node: \par73812
+Node: Margin Notes74011
+Node: Math Formulae74922
+Node: Subscripts & Superscripts76164
+Node: Math Symbols76655
+Node: Spacing in Math Mode77052
+Node: Math Miscellany77611
+Node: Modes78636
+Node: Page Styles80476
+Node: \maketitle80981
+Node: \author81638
+Node: \date82007
+Node: \thanks82249
+Node: \title82442
+Node: \pagenumbering82680
+Node: \pagestyle83112
+Node: \markboth83869
+Node: \markright84452
+Node: \thispagestyle85027
+Node: Sectioning85326
+Node: Spaces & Boxes86691
+Node: \dotfill88102
+Node: \hfill88302
+Node: \hrulefill88551
+Node: \hspace88822
+Node: \addvspace89428
+Node: \bigskip89905
+Node: \medskip90157
+Node: \smallskip90409
+Node: \vfill90686
+Node: \vspace90898
+Node: \fbox91449
+Node: \framebox91725
+Node: lrbox92178
+Node: \makebox92494
+Node: \mbox93123
+Node: \newsavebox93424
+Node: \parbox93684
+Node: \raisebox95114
+Node: \rule95992
+Node: \savebox96452
+Node: \sbox96801
+Node: \usebox97121
+Node: Special Characters97318
+Node: Splitting the Input98618
+Node: \include99266
+Node: \includeonly100130
+Node: \input100576
+Node: Starting & Ending100985
+Node: Table of Contents101639
+Node: \addcontentsline102626
+Node: \addtocontents103418
+Node: Terminal Input/Output103958
+Node: \typein104237
+Node: \typeout104767
+Node: Typefaces105313
+Node: Styles105701
+Node: Sizes107466
+Node: Low-level font commands108045
+Node: Parameters109901
+Node: Concept Index110622
+Node: Command Index123628
+
+End Tag Table
diff --git a/Build/source/texk/tetex/latex2e.texi b/Build/source/texk/tetex/latex2e.texi
new file mode 100644
index 00000000000..04a71735a65
--- /dev/null
+++ b/Build/source/texk/tetex/latex2e.texi
@@ -0,0 +1,5260 @@
+\input texinfo @c -*-texinfo-*-
+
+@c TODO More math symbols
+
+
+@c $Id: latex2e.texi,v 1.216 1996/04/23 10:39:54 torsten Exp $
+
+@tex
+\gdef\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em%
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX\kern.125em}}
+\gdef\LaTeXe{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em%
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX\kern.125em
+ 2${}_{\textstyle\varepsilon}$}}
+@end tex
+
+@comment %**start of header (This is for running Texinfo on a region.)
+@setfilename latex.info
+@ifinfo
+@settitle LaTeX2e help 1.6
+@end ifinfo
+@iftex
+@settitle @LaTeXe help 1.6
+@end iftex
+@dircategory TeX
+@direntry
+* LaTeX2e: (latex). LaTeXe help 1.6.
+@end direntry
+@comment %**end of header (This is for running Texinfo on a region.)
+
+@iftex
+@finalout
+@end iftex
+
+@copying
+This file documents LaTeX2e, a document preparation system. LaTeX2e is a
+macro package for TeX.
+
+This is edition 1.6 of the LaTeX2e documentation, and is for the Texinfo
+that is distributed as part of Version 19 of GNU Emacs. It uses version
+2.134 or later of the texinfo.tex input file.
+
+This is translated from LATEX.HLP v1.0a in the VMS Help Library. The
+pre-translation version was written by George D. Greenwade of Sam
+Houston State University.
+
+The LaTeX 2.09 version was written by Stephen Gilmore <stg@@dcs.ed.ac.uk>.
+
+The LaTeX2e version was adapted from this by Torsten Martinsen
+<bullestock@@dk-online.dk>.
+
+Copyright 1988,1994 Free Software Foundation, Inc.
+Copyright 1994-1996 Torsten Martinsen.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+@end ignore
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the sections entitled ``Distribution'' and ``General Public
+License'' may be included in a translation approved by the author instead
+of in the original English.
+@end copying
+
+@c setchapternewpage odd
+@titlepage
+@sp 11
+
+
+
+@comment A hack to get the LaTeX logo to appear big in the title.
+
+@tex
+\font\tempA = cmr10 scaled \magstep4
+\font\tempB = cmr8 scaled \magstep4
+\centerline{\tempA L\kern-.36em\raise.3ex\hbox{\tempB A}\kern-.15em%
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX\kern.15em
+ 2${}_{\textstyle\varepsilon}$}
+@end tex
+@sp 2
+@center The macro package for @TeX
+@sp 2
+@center by
+@center Leslie Lamport et al.
+@sp 2
+@center Edition 1.6
+@sp 2
+@center December 1994
+
+@comment Include the Distribution inside the titlepage environment so
+@comment that headings are turned off.
+
+@page
+@vskip 0pt plus 1filll
+
+This is edition 1.6 of the LaTeX2e documentation, and is for the Texinfo
+that is distributed as part of Version 19 of GNU Emacs. It uses version
+2.134 or later of the @file{texinfo.tex} input file.
+
+This is translated from LATEX.HLP v1.0a in the VMS Help Library.
+This pre-translation version was written by George D. Greenwade of
+Sam Houston State University. It has been edited to this form by Paul
+Nothard of Edinburgh University.
+
+The original (latex.texi and latex2.texi) was distributed by
+Stephen Gilmore <stg@@dcs.ed.ac.uk>, August 26th 1993.
+
+Version 1.1 was made by Piet van Oostrum <piet@@cs.ruu.nl> on Dec 14,
+1993 by merging and cleaning up latex.texi and latex2.texi.
+
+Versions 1.2 trough 1.6 by Torsten Martinsen <bullestock@@dk-online.dk>.
+
+@sp 2
+
+This Texinfo file may be copied and distributed in accordance with the
+usual copying permissions of the Free Software Foundation. These
+permissions are given in the General Public License section of the ``GNU
+Emacs Manual''. This software comes with NO WARRANTY.
+
+@sp 2
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+@end titlepage
+
+@c The name of the `Command Index' node must NOT be altered
+@c if ltx-help.el is to work
+
+@node Top, Overview, (dir), (dir)
+
+LaTeX2e is a document preparation system implemented as a macro package
+for Donald E. Knuth's TeX typesetting program.
+
+LaTeX was originally conceived by Leslie Lamport.
+
+This is edition 1.6 of the LaTeX2e documentation.
+
+@menu
+
+* Overview:: What is LaTeX?
+* Commands:: Commands within a LaTeX document.
+* Parameters:: The command line.
+* Command Index:: An alphabetical list of LaTeX commands.
+* Concept Index:: An alphabetical list of concepts.
+
+@end menu
+
+@comment ****************************************
+@comment ************** OVERVIEW ****************
+@comment ****************************************
+
+@comment LEVEL1
+@node Overview, Commands, Top, Top
+@comment node-name, next, previous, up
+
+@chapter Overview of LaTeX and Local Guide
+@cindex Overview of LaTeX
+@cindex LaTeX overview
+
+The LaTeX command typesets a file of text using the TeX program and the
+LaTeX Macro package for TeX. To be more specific, it processes an input
+file containing the text of a document with interspersed commands that
+describe how the text should be formatted. It produces at least three
+files as output:
+
+@enumerate
+@item
+A ``Device Independent'', or @file{.dvi} file. This contains commands that
+can be translated into commands for a variety of output devices. You
+can view the output of LaTeX by using a program such as @code{xdvi},
+which actually uses the @file{.dvi} file.
+@item
+A ``transcript'' or @file{.log} file that contains summary information and
+diagnostic messages for any errors discovered in the input file.
+@item
+An ``auxiliary'' or @file{.aux} file. This is used by LaTeX itself, for
+things such as sectioning.
+@end enumerate
+
+For a description of what goes on inside TeX, you should consult
+@cite{The TeXbook} by Donald E. Knuth, ISBN 0-201-13448-9, published
+jointly by the American Mathematical Society and Addison-Wesley
+Publishing Company.
+
+For a description of LaTeX, you should consult:
+
+@cite{LaTeX: A Document Preparation System}, by Leslie Lamport,
+Addison-Wesley Publishing Company, 2nd edition, 1994.
+
+@cite{The LaTeX Companion}, by Michel Goossens, Frank Mittelbach, and
+Alexander Samarin, Addison-Wesley, 1994.
+
+
+@comment ****************************************
+@comment ************** COMMANDS ****************
+@comment ****************************************
+
+@comment LEVEL1
+@node Commands, Parameters, Overview, Top
+@comment node-name, next, previous, up
+@chapter Commands
+
+A LaTeX command begins with the command name, which consists of a
+@code{\} followed by either (a) a string of letters or (b) a single
+non-letter. Arguments contained in square brackets, @code{[]}, are
+optional while arguments contained in braces, @code{@{@}}, are required.
+
+NOTE: LaTeX is case sensitive. Enter all commands in lower case
+unless explicitly directed to do otherwise.
+
+@menu
+* Counters:: Internal counters used by LaTeX.
+* Cross References:: Automatic referencing.
+* Definitions:: Define your own commands etc.
+* Document Classes:: Some of the various classes available.
+* Environments:: Such as enumerate & itemize.
+* Footnotes:: How to produce footnotes.
+* Layout:: Controlling the page layout.
+* Lengths:: The length commands.
+* Letters:: The letter class.
+* Line & Page Breaking:: How to insert pagebreaks etc.
+* Making Paragraphs:: Paragraph commands.
+* Margin Notes:: Putting remarks in the margin.
+* Math Formulae:: How to create mathematical formulae.
+* Modes:: Paragraph, Math or LR modes.
+* Page Styles:: Various styles of page layout.
+* Sectioning:: How to section properly.
+* Spaces & Boxes:: All the associated commands.
+* Special Characters:: Special reserved characters.
+* Splitting the Input:: Dealing with big files by splitting.
+* Starting & Ending:: The formal start & end layouts.
+* Table of Contents:: How to create a table of contents.
+* Terminal Input/Output:: User interaction.
+* Typefaces:: Such as bold, italics etc.
+@end menu
+
+
+@comment ***************************************
+@comment **** Command's LEVEL2 Starts Here. ****
+@comment ***************************************
+
+@comment *************************
+@comment ******* Counters ********
+@comment *************************
+
+@comment LEVEL2
+@node Counters, Cross References, Commands, Commands
+@comment node-name, next, previous, up
+@section Counters
+@cindex Counters, a list of
+@cindex Variables, a list of
+
+Everything LaTeX numbers for you has a counter associated with it. The
+name of the counter is the same as the name of the environment or
+command that produces the number, except with no @code{\}. (enumi -
+enumiv are used for the nested enumerate environment.) Below is a list
+of the counters used in LaTeX's standard document classes to control
+numbering.
+
+@example
+ part paragraph figure enumi
+ chapter subparagraph table enumii
+ section page footnote enumiii
+ subsection equation mpfootnote enumiv
+ subsubsection
+@end example
+
+@menu
+* \addtocounter:: Add a quantity to a counter.
+* \alph:: Print value of a counter using letters.
+* \arabic:: Print value of a counter using numerals.
+* \fnsymbol:: Print value of a counter using symbols.
+* \newcounter:: Define a new counter.
+* \refstepcounter:: Add to counter, resetting subsidiary counters.
+* \roman:: Print value of a counter using roman numerals.
+* \setcounter:: Set the value of a counter.
+* \stepcounter:: Add to counter, resetting subsidiary counters.
+* \usecounter:: Use a specified counter in a list environment.
+* \value:: Use the value of a counter in an expression.
+@end menu
+
+
+@comment *******************
+@comment ** \addtocounter **
+@comment *******************
+
+@comment LEVEL3
+@node \addtocounter, \alph, Counters, Counters
+@comment node-name, next, previous, up
+@subsection \addtocounter
+@findex \addtocounter
+
+@code{\addtocounter@{counter@}@{value@}}
+
+The @code{\addtocounter} command increments the @code{counter} by the
+amount specified by the @code{value} argument. The @code{value}
+argument can be negative.
+
+
+@comment ************
+@comment ** \alph ***
+@comment ************
+
+@comment LEVEL3
+@node \alph, \arabic, \addtocounter, Counters
+@comment node-name, next, previous, up
+@subsection \alph
+@findex \alph
+@findex \Alph
+
+@code{\alph@{counter@}}
+
+This command causes the value of the @code{counter} to be printed in
+alphabetic characters. The @code{\alph} command uses lower case
+alphabetic alphabetic characters, i.e., @code{a, b, c...} while the
+@code{\Alph} command uses upper case alphabetic characters, i.e.,
+@code{A, B, C...}.
+
+
+@comment **************
+@comment ** \arabic ***
+@comment **************
+
+@comment LEVEL3
+@node \arabic, \fnsymbol, \alph, Counters
+@comment node-name, next, previous, up
+@subsection \arabic
+@findex \arabic
+
+@code{\arabic@{counter@}}
+
+The @code{\arabic} command causes the value of the @code{counter} to be
+printed in Arabic numbers, i.e., @code{3}.
+
+
+@comment ***************
+@comment ** \fnsymbol **
+@comment ***************
+
+@comment LEVEL3
+@node \fnsymbol, \newcounter, \arabic, Counters
+@comment node-name, next, previous, up
+@subsection \fnsymbol
+@findex \fnsymbol
+
+@code{\fnsymbol@{counter@}}
+
+The @code{\fnsymbol} command causes the value of the @code{counter} to
+be printed in a specific sequence of nine symbols that can be used for
+numbering footnotes.
+
+@iftex
+eg. From 1-9:
+@tex
+$\ast$ $\dagger$ $\ddagger$ $\S$ $\P$ $\parallel$ $\ast \ast$ $\dagger
+\dagger$ $\ddagger \ddagger$
+@end tex
+@end iftex
+
+
+NB. @code{counter} must have a value between 1 and 9 inclusive.
+
+
+@comment *****************
+@comment ** \newcounter **
+@comment *****************
+
+@comment LEVEL3
+@node \newcounter, \refstepcounter, \fnsymbol, Counters
+@comment node-name, next, previous, up
+@subsection \newcounter
+@findex \newcounter
+@cindex Counters, creating
+
+@code{\newcounter@{foo@}[counter]}
+
+The @code{\newcounter} command defines a new counter named @code{foo}.
+The counter is initialized to zero.
+
+The optional argument @code{[counter]} causes the counter @code{foo} to
+be reset whenever the counter named in the optional argument is
+incremented.
+
+
+@comment *****************
+@comment ** \refstepcounter **
+@comment *****************
+
+@comment LEVEL3
+@node \refstepcounter, \roman, \newcounter, Counters
+@comment node-name, next, previous, up
+@subsection \refstepcounter
+@findex \refstepcounter
+
+@code{\refstepcounter@{counter@}}
+
+The @code{\refstepcounter} command works like @code{\stepcounter}
+@xref{\stepcounter}, except it also defines the current @code{\ref}
+value to be the result of @code{\thecounter}.
+
+@comment ************
+@comment ** \roman **
+@comment ************
+
+@comment LEVEL3
+@node \roman, \stepcounter, \refstepcounter, Counters
+@comment node-name, next, previous, up
+@subsection \roman
+@findex \roman
+@findex \Roman
+
+@code{\roman@{counter@}}
+
+This command causes the value of the @code{counter} to be printed in
+Roman numerals. The @code{\roman} command uses lower case Roman
+numerals, i.e., @code{i, ii, iii...}, while the @code{\Roman} command
+uses upper case Roman numerals, i.e., @code{I, II, III...}.
+
+
+@comment *****************
+@comment ** \stepcounter **
+@comment *****************
+
+@comment LEVEL3
+@node \stepcounter, \setcounter, \roman, Counters
+@comment node-name, next, previous, up
+@subsection \stepcounter
+@findex \stepcounter
+
+@code{\stepcounter@{counter@}}
+
+The @code{\stepcounter} command adds one to the @code{counter} and
+resets all subsidiary counters.
+
+
+@comment *****************
+@comment ** \setcounter **
+@comment *****************
+
+@comment LEVEL3
+@node \setcounter, \usecounter, \stepcounter, Counters
+@comment node-name, next, previous, up
+@subsection \setcounter
+@findex \setcounter
+@cindex Counters, setting
+
+@code{\setcounter@{counter@}@{value@}}
+
+The @code{\setcounter} command sets the value of the @code{counter} to
+that specified by the @code{value} argument.
+
+
+@comment *****************
+@comment ** \usecounter **
+@comment *****************
+
+@comment LEVEL3
+@node \usecounter, \value, \setcounter, Counters
+@comment node-name, next, previous, up
+@subsection \usecounter
+@findex \usecounter
+
+@code{\usecounter@{counter@}}
+
+The @code{\usecounter} command is used in the second argument of the
+@code{list} environment to allow the counter specified to be used to
+number the list items.
+
+
+@comment ************
+@comment ** \value **
+@comment ************
+
+@comment LEVEL3
+@node \value, , \usecounter, Counters
+@comment node-name, next, previous, up
+@subsection \value
+@findex \value
+@cindex Counters, getting the value of
+
+@code{\value@{counter@}}
+
+The @code{\value} command produces the value of the @code{counter} named
+in the mandatory argument. It can be used where LaTeX expects an
+integer or number, such as the second argument of a @code{\setcounter}
+or @code{\addtocounter} command, or in:
+
+@example
+ \hspace@{\value@{foo@}\parindent@}
+@end example
+
+It is useful for doing arithmetic with counters.
+
+@page
+
+@comment *************************
+@comment **** Cross References ***
+@comment *************************
+
+@comment LEVEL2
+@node Cross References, Definitions, Counters, Commands
+@comment node-name, next, previous, up
+@section Cross References
+@cindex Cross referencing
+
+One reason for numbering things like figures and equations is to refer
+the reader to them, as in ``See Figure 3 for more details.''
+
+@menu
+* \label:: Assign a symbolic name to a piece of text.
+* \pageref:: Refer to a page number.
+* \ref:: Refer to a section, figure or similar.
+@end menu
+
+@comment *************************
+@comment **** \label *************
+@comment *************************
+
+@comment LEVEL3
+@node \label, \pageref, Cross References, Cross References
+@comment node-name, next, previous, up
+@subsection \label
+@findex \label
+
+@code{\label@{key@}}
+
+A @code{\label} command appearing in ordinary text assigns to the
+@code{key} the number of the current sectional unit; one appearing
+inside a numbered environment assigns that number to the @code{key}.
+
+A @code{key} can consist of any sequence of letters, digits, or
+punctuation characters. Upper and lowercase letters are different.
+
+To avoid accidentally creating two labels with the same name, it is
+common to use labels consisting of a prefix and a suffix separated by a
+colon. The prefixes conventionally used are
+
+@itemize @bullet
+@item
+@code{cha}
+for chapters
+@item
+@code{sec}
+for lower-level sectioning commands
+@item
+@code{fig}
+for figures
+@item
+@code{tab}
+for tables
+@item
+@code{eq}
+for equations
+@end itemize
+
+Thus, a label for a figure would look like @code{fig:bandersnatch}.
+
+
+@comment *************************
+@comment **** \pageref ***********
+@comment *************************
+
+@comment LEVEL3
+@node \pageref, \ref, \label, Cross References
+@comment node-name, next, previous, up
+@subsection \pageref
+@findex \pageref
+@cindex Cross referencing using page number
+
+@code{\pageref@{key@}}
+
+The @code{\pageref} command produces the page number of the place in the
+text where the corresponding @code{\label} command appears. ie. where
+@code{\label@{key@}} appears.
+
+
+@comment *************************
+@comment **** \ref ***************
+@comment *************************
+
+@comment LEVEL3
+@node \ref, , \pageref, Cross References
+@comment node-name, next, previous, up
+@subsection \ref
+@findex \ref
+@cindex Cross referencing using section number
+
+@code{\ref@{key@}}
+
+The @code{\ref} command produces the number of the sectional unit,
+equation number, ... of the corresponding @code{\label} command.
+
+@page
+
+@comment *************************
+@comment **** Definitions ********
+@comment *************************
+
+@comment LEVEL2
+@node Definitions, Document Classes, Cross References , Commands
+@comment node-name, next, previous, up
+@section Definitions
+
+@menu
+* \newcommand:: Define a new command.
+* \newenvironment:: Define a new environment.
+* \newtheorem:: Define a new theorem-like environment.
+* \newfont:: Define a new font name.
+@end menu
+
+
+@comment *************************
+@comment **** \newcommand ********
+@comment *************************
+
+@comment LEVEL3
+@node \newcommand, \newenvironment, Definitions, Definitions
+@comment node-name, next, previous, up
+@subsection \newcommand
+@findex \newcommand
+@cindex Commands, defining new ones
+@cindex Defining a new command
+
+@example
+ \newcommand@{cmd@}[args]@{definition@}
+ \newcommand@{cmd@}[args][default]@{definition@}
+ \renewcommand@{cmd@}[args]@{definition@}
+ \renewcommand@{cmd@}[args][default]@{definition@}
+@end example
+
+These commands define (or redefine) a command.
+
+@table @code
+@item cmd
+A command name beginning with a @code{\}. For @code{\newcommand} it
+must not be already defined and must not begin with @code{\end}; for
+@code{\renewcommand} it must already be defined.
+
+@item args
+An integer from 1 to 9 denoting the number of arguments of the command
+being defined. The default is for the command to have no arguments.
+
+@item def
+If this optional parameter is present, it means that the command's first
+argument is optional. The default value of the optional argument is
+@code{def}.
+
+@item definition
+The text to be substituted for every occurrence of @code{cmd}; a
+parameter of the form @code{#n} in @code{cmd} is replaced by the text of
+the nth argument when this substitution takes place.
+
+@end table
+
+@comment *************************
+@comment **** \newenvironment ****
+@comment *************************
+
+@comment LEVEL3
+@node \newenvironment, \newtheorem, \newcommand, Definitions
+@comment node-name, next, previous, up
+@subsection \newenvironment
+@findex \newenvironment
+@cindex Environments, defining
+@cindex Defining new environments
+
+@example
+ \newenvironment@{nam@}[args]@{begdef@}@{enddef@}
+ \newenvironment@{nam@}[args][default]@{begdef@}@{enddef@}
+ \renewenvironment@{nam@}[args]@{begdef@}@{enddef@}
+@end example
+
+These commands define or redefine an environment.
+
+@table @code
+@item nam
+The name of the environment. For @code{\newenvironment} there must be
+no currently defined environment by that name, and the command
+@code{\nam} must be undefined. For @code{\renewenvironment} the
+environment must already be defined.
+
+@item args
+An integer from 1 to 9 denoting the number of arguments of
+the newly-defined environment. The default is no arguments.
+
+@item default
+If this is specified, the first argument is optional, and @code{default}
+gives the default value for that argument.
+
+@item begdef
+The text substituted for every occurrence of @code{\begin@{nam@}}; a
+parameter of the form @code{#n} in @code{cmd} is replaced by the text of
+the nth argument when this substitution takes place.
+
+@item enddef
+The text substituted for every occurrence of @code{\end@{nam@}}. It may
+not contain any argument parameters.
+
+@end table
+
+
+@comment *************************
+@comment **** \newtheorem ********
+@comment *************************
+
+@comment LEVEL3
+@node \newtheorem, \newfont, \newenvironment, Definitions
+@comment node-name, next, previous, up
+@subsection \newtheorem
+@findex \newtheorem
+@cindex Theorems, defining
+@cindex Defining new theorems
+
+@example
+ \newtheorem@{env_name@}@{caption@}[within]
+ \newtheorem@{env_name@}[numbered_like]@{caption@}
+@end example
+
+This command defines a theorem-like environment.
+
+@table @code
+@item env_name
+The name of the environment to be defined. A string of letters. It must
+not be the name of an existing environment or counter.
+
+@item caption
+The text printed at the beginning of the environment, right before the
+number. This may simply say ``Theorem'', for example.
+
+@item within
+The name of an already defined counter, usually of a sectional unit.
+Provides a means of resetting the new theorem counter @strong{within}
+the sectional unit.
+
+@item numbered_like
+The name of an already defined theorem-like environment.
+
+@end table
+
+The @code{\newtheorem} command may have at most one optional argument.
+
+
+@comment *************************
+@comment **** \newfont ***********
+@comment *************************
+
+@comment LEVEL3
+@node \newfont, , \newtheorem, Definitions
+@comment node-name, next, previous, up
+@subsection \newfont
+@findex \newfont
+@cindex Fonts, new commands for
+@cindex Defining new fonts
+
+@code{\newfont@{cmd@}@{font_name@}}
+
+Defines the command name @code{cmd}, which must not be currently
+defined, to be a declaration that selects the font named
+@code{font_name} to be the current font.
+
+@page
+
+@comment *************************
+@comment **** Document Classes ****
+@comment *************************
+
+@comment LEVEL2
+@node Document Classes, Environments, Definitions, Commands
+@comment node-name, next, previous, up
+@section Document Classes
+@cindex Document Classes
+@cindex Classes of document
+@cindex article class
+@cindex report class
+@cindex book class
+@cindex letter class
+@findex \documentclass
+
+Valid LaTeX document classes include:
+
+@itemize @bullet
+@item
+article
+@item
+report
+@item
+letter
+@item
+book
+@item
+slides
+@end itemize
+
+Other document classes are often available. @xref{Overview}, for details.
+They are selected with the following command:
+
+@code{\documentclass [options] @{class@}}
+
+All the standard classes (except slides) accept the following options
+for selecting the typeface size (10 pt is default):
+
+10pt, 11pt, 12pt
+
+All classes accept these options for selecting the paper size (default
+is letter):
+
+a4paper, a5paper, b5paper, letterpaper, legalpaper, executivepaper
+
+Miscellaneous options:
+
+@itemize @bullet
+@item
+landscape --- selects landscape format. Default is portrait.
+@item
+titlepage, notitlepage --- selects if there should be a separate title
+page.
+@item
+leqno --- equation number on left side of equations. Default is right side.
+@item
+fleqn --- displayed formulas flush left. Default is centred.
+@item
+openbib --- use ``open'' bibliography format.
+@item
+draft, final --- mark/do not mark overfull boxes with a rule.
+Default is final.
+@end itemize
+
+These options are not available with the slides class:
+
+@itemize @bullet
+@item
+oneside, twoside --- selects one- or twosided layout. Default is
+oneside, except for the book class.
+@item
+openright, openany --- determines if a chapter should start on a
+right-hand page. Default is openright for book.
+@item
+onecolumn, twocolumn --- one or two columns. Defaults to one column.
+@end itemize
+
+The slides class offers the option @code{clock} for printing the time at
+the bottom of each note.
+
+If you specify more than one option, they must be separated by a comma.
+
+Additional packages are loaded by a
+
+@code{\usepackage[options]@{pkg@}}
+@findex \usepackage
+
+command. If you specify more than one package, they must be separated by
+a comma.
+@cindex Packages, loading
+@cindex Loading additional packages
+
+Any options given in the @code{\documentclass} command that are unknown
+by the selected document class are passed on to the packages loaded with
+@code{\usepackage}.
+@cindex Global options
+@cindex Options, global
+
+@node Layout, Lengths, Footnotes, Commands
+@comment node-name, next, previous, up
+@cindex Layout commands
+
+@section Layout
+
+Miscellaneous commands for controlling the general layout of the page.
+
+@menu
+* \flushbottom:: Make all text pages the same height.
+* \onecolumn:: Use one-column layout.
+* \raggedbottom:: Allow text pages of differing height.
+* \twocolumn:: Use two-column layout.
+@end menu
+
+
+@comment *************************
+@comment **** \flushbottom *******
+@comment *************************
+
+@comment LEVEL3
+@node \flushbottom, \onecolumn, , Layout
+@comment node-name, next, previous, up
+@subsection \flushbottom
+@findex \flushbottom
+
+The @code{\flushbottom} declaration makes all text pages the same
+height, adding extra vertical space when necessary to fill out the page.
+
+This is the standard if twocolumn mode is selected.
+
+
+@comment *************************
+@comment **** \onecolumn *********
+@comment *************************
+
+@comment LEVEL3
+@node \onecolumn, \raggedbottom, \flushbottom, Layout
+@comment node-name, next, previous, up
+@subsection \onecolumn
+@findex \onecolumn
+
+The @code{\onecolumn} declaration starts a new page and produces
+single-column output.
+
+
+@comment *************************
+@comment **** \raggedbottom ******
+@comment *************************
+
+@comment LEVEL3
+@node \raggedbottom, \twocolumn, \onecolumn, Layout
+@comment node-name, next, previous, up
+@subsection \raggedbottom
+@findex \raggedbottom
+
+The @code{\raggedbottom} declaration makes all pages the height of the
+text on that page. No extra vertical space is added.
+
+@comment *************************
+@comment **** \twocolumn *********
+@comment *************************
+
+@comment LEVEL3
+@node \twocolumn, , \raggedbottom, Layout
+@comment node-name, next, previous, up
+@subsection \twocolumn
+@findex \twocolumn
+@cindex Multicolumn text
+
+@code{\twocolumn[text]}
+
+The @code{\twocolumn} declaration starts a new page and produces
+two-column output. If the optional @code{text} argument is present, it
+is typeset in one-column mode.
+
+
+@page
+
+@comment *************************
+@comment **** Environments *******
+@comment *************************
+
+@comment LEVEL2
+@node Environments, Footnotes, Document Classes, Commands
+@comment node-name, next, previous, up
+@section Environments
+@cindex Environments
+@findex \begin
+@findex \end
+
+LaTeX provides a number of different paragraph-making environments.
+Each environment begins and ends in the same manner.
+
+@example
+ \begin@{environment-name@}
+ .
+ .
+ .
+ \end@{environment-name@}
+@end example
+
+@menu
+* array:: Math arrays.
+* center:: Centred lines.
+* description:: Labelled lists.
+* enumerate:: Numbered lists.
+* eqnarray:: Sequences of aligned equations.
+* equation:: Displayed equation.
+* figure:: Floating figures.
+* flushleft:: Flushed left lines.
+* flushright:: Flushed right lines.
+* itemize:: Bulleted lists.
+* letter:: Letters.
+* list:: Generic list environment.
+* minipage:: Miniature page.
+* picture:: Picture with text, arrows, lines and circles.
+* quotation:: Indented environment with paragraph indentation.
+* quote:: Indented environment with no paragraph indentation.
+* tabbing:: Align text arbitrarily.
+* table:: Floating tables.
+* tabular:: Align text in columns.
+* thebibliography:: Bibliography or reference list.
+* theorem:: Theorems, lemmas, etc.
+* titlepage:: For hand crafted title pages.
+* verbatim:: Simulating typed input.
+* verse:: For poetry and other things.
+@end menu
+
+
+@comment *************************
+@comment **** array **************
+@comment *************************
+
+@comment LEVEL3
+@node array, center, Environments, Environments
+@comment node-name, next, previous, up
+@subsection array
+@cindex Arrays, math
+@findex array
+
+@example
+\begin@{array@}@{col1col2...coln@}
+column 1 entry & column 2 entry ... & column n entry \\
+ .
+ .
+ .
+\end@{array@}
+@end example
+
+Math arrays are produced with the array environment. It has a single
+mandatory argument describing the number of columns and the alignment
+within them. Each column, @code{coln}, is specified by a single letter
+that tells how items in that row should be formatted.
+
+@itemize @bullet
+@item
+@code{c} --- for centred
+@item
+@code{l} --- for flush left
+@item
+@code{r} --- for flush right
+@end itemize
+
+Column entries must be separated by an @code{&}. Column entries may
+include other LaTeX commands. Each row of the array must be terminated
+with the string @code{\\}.
+
+Note that the @code{array} environment can only be used in math mode, so
+normally it is used inside an @code{equation} environment.
+
+
+@comment *************************
+@comment **** center *************
+@comment *************************
+
+@comment LEVEL3
+@node center, description, array, Environments
+@comment node-name, next, previous, up
+@subsection center
+@findex center
+@cindex Centering text, environment for
+
+@example
+ \begin@{center@}
+ Text on line 1 \\
+ Text on line 2 \\
+ .
+ .
+ .
+ \end@{center@}
+@end example
+
+The @code{center} environment allows you to create a paragraph consisting of
+lines that are centred within the left and right margins on the current
+page. Each line must be terminated with the string @code{\\}.
+
+@menu
+* \centering:: The declaration form of the @code{center} environment.
+@end menu
+
+@comment *****************
+@comment ** \centering ***
+@comment *****************
+
+@comment LEVEL4
+@node \centering, , , center
+@comment node-name, next, previous, up
+@subsubsection \centering
+@findex \centering
+@cindex Centering text
+@cindex Formatting Text
+
+This declaration corresponds to the @code{center} environment. This
+declaration can be used inside an environment such as @code{quote} or in
+a @code{parbox}. The text of a figure or table can be centred on the
+page by putting a @code{\centering} command at the beginning of the
+figure or table environment.
+
+Unlike the @code{center} environment, the @code{\centering} command does
+not start a new paragraph; it simply changes how LaTeX formats paragraph
+units. To affect a paragraph unit's format, the scope of the
+declaration must contain the blank line or @code{\end} command (of an
+environment like quote) that ends the paragraph unit.
+
+
+@comment *************************
+@comment **** description ********
+@comment *************************
+
+@comment LEVEL3
+@node description, enumerate, center, Environments
+@comment node-name, next, previous, up
+@subsection description
+@findex description
+@cindex Labelled lists, creating
+
+@example
+ \begin@{description@}
+ \item [label] First item
+ \item [label] Second item
+ .
+ .
+ .
+ \end@{description@}
+@end example
+
+The @code{description} environment is used to make labelled lists. The
+@code{label} is bold face and flushed right.
+
+
+@comment *************************
+@comment **** enumerate **********
+@comment *************************
+
+@comment LEVEL3
+@node enumerate, eqnarray, description, Environments
+@comment node-name, next, previous, up
+@subsection enumerate
+@findex enumerate
+@cindex Lists of items, numbered
+
+@example
+ \begin@{enumerate@}
+ \item First item
+ \item Second item
+ .
+ .
+ .
+ \end@{enumerate@}
+@end example
+
+The @code{enumerate} environment produces a numbered list. Enumerations
+can be nested within one another, up to four levels deep. They can also
+be nested within other paragraph-making environments.
+
+Each item of an enumerated list begins with an @code{\item} command.
+There must be at least one @code{\item} command within the environment.
+
+The @code{enumerate} environment uses the @code{enumi} through
+@code{enumiv} counters (@pxref{Counters}). The type of numbering can be
+changed by redefining @code{\theenumi} etc.
+
+@comment *************************
+@comment **** eqnarray ***********
+@comment *************************
+
+@comment LEVEL3
+@node eqnarray, equation, enumerate, Environments
+@comment node-name, next, previous, up
+@subsection eqnarray
+@findex eqnarray
+@cindex Equations, aligning
+@cindex Aligning Equations
+
+@example
+ \begin@{eqnarray@}
+ math formula 1 \\
+ math formula 2 \\
+ .
+ .
+ .
+ \end@{eqnarray@}
+@end example
+
+The @code{eqnarray} environment is used to display a sequence of
+equations or inequalities. It is very much like a three-column
+@code{array} environment, with consecutive rows separated by @code{\\}
+and consecutive items within a row separated by an @code{&}.
+
+An equation number is placed on every line unless that line has a
+@code{\nonumber} command.
+
+@findex \lefteqn
+
+The command @code{\lefteqn} is used for splitting long formulas across
+lines. It typesets its argument in display style flush left in a box of
+zero width.
+
+
+@comment *************************
+@comment **** equation ***********
+@comment *************************
+
+@comment LEVEL3
+@node equation, figure, eqnarray, Environments
+@comment node-name, next, previous, up
+@subsection equation
+@findex equation
+@cindex Equations, environment for
+@cindex Formulae, environment for
+
+@example
+ \begin@{equation@}
+ math formula
+ \end@{equation@}
+@end example
+
+The @code{equation} environment centres your equation on the page and places
+the equation number in the right margin.
+
+@comment *************************
+@comment **** figure *************
+@comment *************************
+
+@comment LEVEL3
+@node figure, flushleft, equation, Environments
+@comment node-name, next, previous, up
+@subsection figure
+@findex figure
+@cindex Inserting figures
+
+@example
+ \begin@{figure@}[placement]
+
+ body of the figure
+
+ \caption@{figure title@}
+ \end@{figure@}
+@end example
+
+@findex \caption
+Figures are objects that are not part of the normal text, and are
+usually ``floated'' to a convenient place, like the top of a page.
+Figures will not be split between two pages.
+
+The optional argument @code{[placement]} determines where LaTeX will try
+to place your figure. There are four places where LaTeX can possibly
+put a float:
+
+@enumerate
+@item
+@code{h} (Here) - at the position in the text where the figure
+environment appears.
+@item
+@code{t} (Top) - at the top of a text page.
+@item
+@code{b} (Bottom) - at the bottom of a text page.
+@item
+@code{p} (Page of floats) - on a separate float page, which is a page
+containing no text, only floats.
+@end enumerate
+
+The standard report and article classes use the default placement
+@code{tbp}.
+
+The body of the figure is made up of whatever text, LaTeX commands, etc.
+you wish. The @code{\caption} command allows you to title your figure.
+
+
+@comment *************************
+@comment **** flushleft **********
+@comment *************************
+
+@comment LEVEL3
+@node flushleft, flushright, figure, Environments
+@comment node-name, next, previous, up
+@subsection flushleft
+@findex flushleft
+@cindex Left-justifying text, environment for
+@cindex Ragged right text, environment for
+
+@example
+ \begin@{flushleft@}
+ Text on line 1 \\
+ Text on line 2 \\
+ .
+ .
+ .
+ \end@{flushleft@}
+@end example
+
+The @code{flushleft} environment allows you to create a paragraph
+consisting of lines that are flushed left, to the left-hand margin.
+Each line must be terminated with the string @code{\\}.
+
+@menu
+* \raggedright:: The declaration form of the @code{flushleft} environment.
+@end menu
+
+@comment *****************
+@comment * \raggedright **
+@comment *****************
+
+@comment LEVEL4
+@node \raggedright, , , flushleft
+@comment node-name, next, previous, up
+@subsubsection \raggedright
+@findex \raggedright
+@cindex Ragged right text
+@cindex Left-justifying text
+@cindex Justification, ragged right
+
+This declaration corresponds to the @code{flushleft} environment. This
+declaration can be used inside an environment such as @code{quote} or in
+a @code{parbox}.
+
+Unlike the @code{flushleft} environment, the @code{\raggedright} command
+does not start a new paragraph; it simply changes how LaTeX formats
+paragraph units. To affect a paragraph unit's format, the scope of the
+declaration must contain the blank line or @code{\end} command (of an
+environment like quote) that ends the paragraph unit.
+
+
+@comment *************************
+@comment **** flushright *********
+@comment *************************
+
+@comment LEVEL3
+@node flushright, itemize, flushleft, Environments
+@comment node-name, next, previous, up
+@subsection flushright
+@findex flushright
+@cindex Ragged left text, environment for
+@cindex Right-justifying text, environment for
+
+@example
+ \begin@{flushright@}
+ Text on line 1 \\
+ Text on line 2 \\
+ .
+ .
+ .
+ \end@{flushright@}
+@end example
+
+The @code{flushright} environment allows you to create a paragraph
+consisting of lines that are flushed right, to the right-hand margin.
+Each line must be terminated with the string @code{\\}.
+
+@menu
+* \raggedleft:: The declaration form of the @code{flushright} environment.
+@end menu
+
+@comment *****************
+@comment * \raggedleft ***
+@comment *****************
+
+@comment LEVEL4
+@node \raggedleft, , , flushright
+@comment node-name, next, previous, up
+@subsubsection \raggedleft
+@findex \raggedleft
+@cindex Ragged left text
+@cindex Justification, ragged left
+@cindex Right-justifying text
+
+This declaration corresponds to the @code{flushright} environment. This
+declaration can be used inside an environment such as @code{quote} or in
+a @code{parbox}.
+
+Unlike the @code{flushright} environment, the @code{\raggedleft} command
+does not start a new paragraph; it simply changes how LaTeX formats
+paragraph units. To affect a paragraph unit's format, the scope of the
+declaration must contain the blank line or @code{\end} command (of an
+environment like quote) that ends the paragraph unit.
+
+@comment *************************
+@comment **** itemize ************
+@comment *************************
+
+@comment LEVEL3
+@node itemize, letter, flushright, Environments
+@comment node-name, next, previous, up
+@subsection itemize
+@findex itemize
+@findex \item
+@cindex Lists of items
+
+@example
+ \begin@{itemize@}
+ \item First item
+ \item Second item
+ .
+ .
+ .
+ \end@{itemize@}
+@end example
+
+The @code{itemize} environment produces a ``bulleted'' list. Itemizations
+can be nested within one another, up to four levels deep. They can also
+be nested within other paragraph-making environments.
+
+Each item of an @code{itemized} list begins with an @code{\item} command.
+There must be at least one @code{\item} command within the environment.
+
+The @code{itemize} environment uses the @code{itemi} through
+@code{itemiv} counters (@pxref{Counters}). The type of numbering can be
+changed by redefining @code{\theitemi} etc.
+
+@comment *************************
+@comment **** letter ************
+@comment *************************
+
+@comment LEVEL3
+@node letter, list, itemize, Environments
+@comment node-name, next, previous, up
+@subsection letter
+@findex letter
+
+This environment is used for creating letters. @xref{Letters}.
+
+@comment *************************
+@comment **** list ***************
+@comment *************************
+
+
+@comment LEVEL3
+@node list, minipage, letter, Environments
+@comment node-name, next, previous, up
+@subsection list
+@findex list
+@cindex Lists of items, generic
+
+The @code{list} environment is a generic environment which is used for
+defining many of the more specific environments. It is seldom used in
+documents, but often in macros.
+
+@example
+ \begin@{list@}@{label@}@{spacing@}
+ \item First item
+ \item Second item
+ .
+ .
+ .
+ \end@{list@}
+@end example
+
+The @code{@{label@}} argument specifies how items should be labelled.
+This argument is a piece of text that is inserted in a box to form the
+label. This argument can and usually does contain other LaTeX commands.
+
+The @code{@{spacing@}} argument contains commands to change the spacing
+parameters for the list. This argument will most often be null, i.e.,
+@code{@{@}}. This will select all default spacing which should suffice
+for most cases.
+
+
+@comment *************************
+@comment **** minipage ***********
+@comment *************************
+
+@comment LEVEL3
+@node minipage, picture, list, Environments
+@comment node-name, next, previous, up
+@subsection minipage
+@findex minipage
+@cindex Footnotes in figures
+@cindex Figures, footnotes in
+@cindex Minipage, creating a
+
+@example
+ \begin@{minipage@}[position]@{width@}
+ text
+ \end@{minipage@}
+@end example
+
+The @code{minipage} environment is similar to a @code{\parbox} command.
+It takes the same optional @code{position} argument and mandatory
+@code{width} argument. You may use other paragraph-making environments
+inside a minipage.
+
+Footnotes in a @code{minipage} environment are handled in a way that is
+particularly useful for putting footnotes in figures or tables. A
+@code{\footnote} or @code{\footnotetext} command puts the footnote at
+the bottom of the minipage instead of at the bottom of the page, and it
+uses the @code{mpfootnote} counter instead of the ordinary
+@code{footnote} counter @xref{Counters}.
+
+NOTE: Don't put one minipage inside another if you are using footnotes;
+they may wind up at the bottom of the wrong minipage.
+
+
+@comment *************************
+@comment **** picture ************
+@comment *************************
+
+@comment LEVEL3
+@node picture, quotation, minipage, Environments
+@comment node-name, next, previous, up
+@subsection picture
+@findex picture
+@cindex Creating pictures
+@cindex Pictures, creating
+
+@example
+ \begin@{picture@}(width,height)(x offset,y offset)
+ .
+ .
+ picture commands
+ .
+ .
+ \end@{picture@}
+@end example
+
+The @code{picture} environment allows you to create just about any kind
+of picture you want containing text, lines, arrows and circles. You
+tell LaTeX where to put things in the picture by specifying their
+coordinates. A coordinate is a number that may have a decimal point and
+a minus sign --- a number like @code{5}, @code{2.3} or @code{-3.1416}. A
+coordinate specifies a length in multiples of the unit length
+@code{\unitlength}, so if @code{\unitlength} has been set to @code{1cm},
+then the coordinate 2.54 specifies a length of 2.54 centimetres. You
+can change the value of @code{\unitlength} anywhere you want, using the
+@code{\setlength} command, but strange things will happen if you try
+changing it inside the picture environment.
+
+A position is a pair of coordinates, such as @code{(2.4,-5)}, specifying
+the point with x-coordinate @code{2.4} and y-coordinate @code{-5}.
+Coordinates are specified in the usual way with respect to an origin,
+which is normally at the lower-left corner of the picture. Note that
+when a position appears as an argument, it is not enclosed in braces;
+the parentheses serve to delimit the argument.
+
+The @code{picture} environment has one mandatory argument, which is a
+@code{position}. It specifies the size of the picture. The environment
+produces a rectangular box with width and height determined by this
+argument's x- and y-coordinates.
+
+The @code{picture} environment also has an optional @code{position}
+argument, following the @code{size} argument, that can change the
+origin. (Unlike ordinary optional arguments, this argument is not
+contained in square brackets.) The optional argument gives the
+coordinates of the point at the lower-left corner of the picture
+(thereby determining the origin). For example, if @code{\unitlength}
+has been set to @code{1mm}, the command
+@example
+ \begin@{picture@}(100,200)(10,20)
+@end example
+produces a picture of width 100 millimetres and height 200
+millimetres, whose lower-left corner is the point (10,20) and whose
+upper-right corner is therefore the point (110,220). When you first
+draw a picture, you will omit the optional argument, leaving the origin
+at the lower-left corner. If you then want to modify your picture by
+shifting everything, you just add the appropriate optional argument.
+
+The environment's mandatory argument determines the nominal size of the
+picture. This need bear no relation to how large the picture really is;
+LaTeX will happily allow you to put things outside the picture, or even
+off the page. The picture's nominal size is used by LaTeX in determining
+how much room to leave for it.
+
+Everything that appears in a picture is drawn by the @code{\put}
+command. The command
+@example
+ \put (11.3,-.3)@{...@}
+@end example
+puts the object specified by @code{...} in the picture, with its
+reference point at coordinates (11.3,-.3). The reference points for
+various objects will be described below.
+
+The @code{\put} command creates an @dfn{LR box}. You can put anything
+in the text argument of the @code{\put} command that you'd put into the
+argument of an @code{\mbox} and related commands. When you do this, the
+reference point will be the lower left corner of the box.
+
+Picture commands:
+@menu
+* \circle:: Draw a circle.
+* \dashbox:: Draw a dashed box.
+* \frame:: Draw a frame around an object.
+* \framebox (picture):: Draw a box with a frame around it.
+* \line:: Draw a straight line.
+* \linethickness:: Set the line thickness.
+* \makebox (picture):: Draw a box of the specified size.
+* \multiput:: Draw multiple instances of an object.
+* \oval:: Draw an ellipse.
+* \put:: Place an object at a specified place.
+* \shortstack:: Make a pile of objects.
+* \vector:: Draw a line with an arrow.
+@end menu
+
+
+@comment *****************
+@comment *** \circle *****
+@comment *****************
+
+@comment LEVEL4
+@node \circle, \dashbox, , picture
+@comment node-name, next, previous, up
+@subsubsection \circle
+@findex \circle
+
+@code{\circle[*]@{diameter@}}
+
+The @code{\circle} command produces a circle with a diameter as close to
+the specified one as possible. If the @code{*}-form of the command is
+used, LaTeX draws a solid circle.
+
+Note that only circles up to 40 pt can be drawn.
+
+
+@comment *****************
+@comment *** \dashbox ****
+@comment *****************
+
+@comment LEVEL4
+@node \dashbox, \frame, \circle, picture
+@comment node-name, next, previous, up
+@subsubsection \dashbox
+@findex \dashbox
+
+Draws a box with a dashed line.
+
+@code{\dashbox@{dash_length@}(width,height)@{...@}}
+
+The @code{\dashbox} has an extra argument which specifies the width of
+each dash. A dashed box looks best when the @code{width} and
+@code{height} are multiples of the @code{dash_length}.
+
+
+@comment *****************
+@comment *** \frame ******
+@comment *****************
+
+@comment LEVEL4
+@node \frame, \framebox (picture), \dashbox, picture
+@comment node-name, next, previous, up
+@subsubsection \frame
+@findex \frame
+
+@code{\frame@{...@}}
+
+The @code{\frame} command puts a rectangular frame around the object
+specified in the argument. The reference point is the bottom left
+corner of the frame. No extra space is put between the frame and the
+object.
+
+
+@comment **************************
+@comment *** \framebox (picture) **
+@comment **************************
+
+@comment LEVEL4
+@node \framebox (picture), \line, \frame, picture
+@comment node-name, next, previous, up
+@subsubsection \framebox
+@findex \framebox
+
+@code{\framebox(width,height)[position]@{...@}}
+
+The @code{\framebox} command is exactly the same as the @code{\makebox}
+command, except that it puts a frame around the outside of the box that
+it creates.
+
+The @code{framebox} command produces a rule of thickness
+@code{\fboxrule}, and leaves a space @code{\fboxsep} between the rule
+and the contents of the box.
+
+@comment *****************
+@comment *** \line *******
+@comment *****************
+
+@comment LEVEL4
+@node \line, \linethickness, \framebox (picture), picture
+@comment node-name, next, previous, up
+@subsubsection \line
+@findex \line
+
+@code{\line(x slope,y slope)@{length@}}
+
+The @code{\line} command draws a line of the specified @code{length} and
+@code{slope}.
+
+Note that LaTeX can only draw lines with slope = x/y, where x and y
+have integer values from -6 through 6.
+
+@comment ******************
+@comment * \linethickness *
+@comment ******************
+
+@comment LEVEL4
+@node \linethickness, \makebox (picture), \line, picture
+@comment node-name, next, previous, up
+@subsubsection \linethickness
+@findex \linethickness
+
+@code{\linethickness@{dimension@}}
+
+Declares the thickness of horizontal and vertical lines in a picture
+environment to be @code{dimension}, which must be a positive length. It
+does not affect the thickness of slanted lines and circles, or the
+quarter circles drawn by @code{\oval} to form the corners of an oval.
+
+
+@comment *************************
+@comment *** \makebox (picture) **
+@comment *************************
+
+@comment LEVEL4
+@node \makebox (picture), \multiput, \linethickness, picture
+@comment node-name, next, previous, up
+@subsubsection \makebox
+@findex \makebox (picture)
+
+@code{\makebox(width,height)[position]@{...@}}
+
+The @code{\makebox} command for the picture environment is similar to
+the normal @code{\makebox} command except that you must specify a
+@code{width} and @code{height} in multiples of @code{\unitlength}.
+
+The optional argument, @code{[position]}, specifies the quadrant that
+your text appears in. You may select up to two of the following:
+
+@itemize @bullet
+@item
+@code{t} - Moves the item to the top of the rectangle
+@item
+@code{b} - Moves the item to the bottom
+@item
+@code{l} - Moves the item to the left
+@item
+@code{r} - Moves the item to the right
+@end itemize
+
+@xref{\makebox}.
+
+@comment *****************
+@comment *** \multiput ***
+@comment *****************
+
+@comment LEVEL4
+@node \multiput, \oval, \makebox (picture), picture
+@comment node-name, next, previous, up
+@subsubsection \multiput
+@findex \multiput
+
+@code{\multiput(x coord,y coord)(delta x,delta y)@{number of copies@}@{object@}}
+
+The @code{\multiput} command can be used when you are putting the same
+object in a regular pattern across a picture.
+
+
+@comment *****************
+@comment *** \oval *****
+@comment *****************
+
+@comment LEVEL4
+@node \oval, \put, \multiput, picture
+@comment node-name, next, previous, up
+@subsubsection \oval
+@findex \oval
+
+@code{\oval(width,height)[portion]}
+
+The @code{\oval} command produces a rectangle with rounded corners. The
+optional argument, @code{[portion]}, allows you to select part of the
+oval.
+
+@itemize @bullet
+@item
+@code{t} - Selects the top portion
+@item
+@code{b} - Selects the bottom portion
+@item
+@code{r} - Selects the right portion
+@item
+@code{l} - Selects the left portion
+@end itemize
+
+Note that the ``corners'' of the oval are made with quarter circles with
+a maximum radius of 20 pt, so large ``ovals'' will look more like boxes
+with rounded corners.
+
+
+@comment *****************
+@comment *** \put ********
+@comment *****************
+
+@comment LEVEL4
+@node \put, \shortstack, \oval, picture
+@comment node-name, next, previous, up
+@subsubsection \put
+@findex \put
+
+@code{\put(x coord,y coord)@{ ... @}}
+
+The @code{\put} command places the item specified by the mandatory
+argument at the given coordinates.
+
+
+@comment *****************
+@comment *** \shortstack *
+@comment *****************
+
+@comment LEVEL4
+@node \shortstack, \vector, \put, picture
+@comment node-name, next, previous, up
+@subsubsection \shortstack
+@findex \shortstack
+
+@code{\shortstack[position]@{... \\ ... \\ ...@}}
+
+The @code{\shortstack} command produces a stack of objects. The valid
+positions are:
+
+@itemize @bullet
+@item
+@code{r} - Moves the objects to the right of the stack
+@item
+@code{l} - Moves the objects to the left of the stack
+@item
+@code{c} - Moves the objects to the centre of the stack (default)
+@end itemize
+
+
+@comment *****************
+@comment *** \vector *****
+@comment *****************
+
+@comment LEVEL4
+@node \vector, , \shortstack, picture
+@comment node-name, next, previous, up
+@subsubsection \vector
+@findex \vector
+
+@code{\vector(x slope,y slope)@{length@}}
+
+The @code{\vector} command draws a line with an arrow of the specified
+length and slope. The @code{x} and @code{y} values must lie between -4
+and +4, inclusive.
+
+
+@comment *************************
+@comment **** quotation **********
+@comment *************************
+
+@comment LEVEL3
+@node quotation, quote, picture, Environments
+@comment node-name, next, previous, up
+@subsection quotation
+@findex quotation
+@cindex Quoted text with paragraph indentation, displaying
+@cindex Displaying quoted text with paragraph indentation
+
+@example
+ \begin@{quotation@}
+ text
+ \end@{quotation@}
+@end example
+
+The margins of the @code{quotation} environment are indented on the left
+and the right. The text is justified at both margins and there is
+paragraph indentation. Leaving a blank line between text produces a new
+paragraph.
+
+
+@comment *************************
+@comment **** quote **************
+@comment *************************
+
+@comment LEVEL3
+@node quote, tabbing, quotation, Environments
+@comment node-name, next, previous, up
+@subsection quote
+@findex quote
+@cindex Quoted text, displaying
+@cindex Displaying quoted text
+
+@example
+ \begin@{quote@}
+ text
+ \end@{quote@}
+@end example
+
+The margins of the @code{quote} environment are indented on the left and
+the right. The text is justified at both margins. Leaving a blank line
+between text produces a new paragraph.
+
+
+@comment *************************
+@comment **** tabbing ************
+@comment *************************
+
+@comment LEVEL3
+@node tabbing, table, quote, Environments
+@comment node-name, next, previous, up
+@subsection tabbing
+@findex tabbing
+@cindex Tab stops, using
+@cindex Lining text up in columns using tab stops
+
+@example
+ \begin@{tabbing@}
+ text \= more text \= still more text \= last text \\
+ second row \> \> more \\
+ .
+ .
+ .
+ \end@{tabbing@}
+@end example
+
+The @code{tabbing} environment provides a way to align text in columns.
+It works by setting tab stops and tabbing to them much the way you do
+with an ordinary typewriter.
+
+It is best suited for cases where the width of each column is constant
+and known in advance.
+
+This environment can be broken across pages, unlike the @code{tabular}
+environment.
+
+The following commands can be used inside a @code{tabbing} enviroment:
+
+@table @code
+@item \=
+@findex \=
+
+Sets a tab stop at the current position.
+
+@item \>
+@findex \>
+
+Advances to the next tab stop.
+
+@item \<
+@findex \<
+
+This command allows you to put something to the left of the
+local margin without changing the margin.
+Can only be used at the start of the line.
+
+@item \+
+@findex \+
+
+Moves the left margin of the next and all the
+following commands one tab stop to the right.
+
+@item \-
+@findex \- (tabbing)
+
+Moves the left margin of the next and all the
+following commands one tab stop to the left.
+
+@item \'
+@findex \' (tabbing)
+
+Moves everything that you have typed so far in the
+current column, i.e. everything from the most recent @code{\>},
+@code{\<}, @code{\'}, @code{\\}, or @code{\kill} command, to the right
+of the previous column, flush against the current column's tab stop.
+
+@item \`
+@findex \` (tabbing)
+
+Allows you to put text flush right against any tab stop, including tab
+stop 0. However, it can't move text to the right of the last column
+because there's no tab stop there. The @code{\`} command moves all the
+text that follows it, up to the @code{\\} or @code{\end@{tabbing@}}
+command that ends the line, to the right margin of the tabbing
+environment. There must be no @code{\>} or @code{\'} command between
+the @code{\`} and the command that ends the line.
+
+@item \kill
+@findex \kill
+
+Sets tab stops without producing
+text. Works just like @code{\\} except that it throws away the
+current line instead of producing output for it. The effect of any
+@code{\=}, @code{\+} or @code{\-} commands in that line remain in
+effect.
+
+@item \pushtabs
+@findex \pushtabs
+
+Saves all current tab stop positions. Useful for
+temporarily changing tab stop positions in the middle of a
+@code{tabbing} environment.
+
+@item \poptabs
+@findex \poptabs
+
+Restores the tab stop positions saved by the last @code{\pushtabs}.
+
+@item \a
+@findex \a
+
+In a @code{tabbing} environment, the commands @code{\=}, @code{\'} and
+@code{\`} do not produce accents as normal. Instead, the commands
+@code{\a=}, @code{\a'} and @code{\a`} are used.
+@end table
+
+
+This example typesets a Pascal function in a traditional format:
+
+@example
+ \begin@{tabbing@}
+ function \= fact(n : integer) : integer;\\
+ \> begin \= \+ \\
+ \> if \= n $>$ 1 then \+ \\
+ fact := n * fact(n-1) \- \\
+ else \+ \\
+ fact := 1; \-\- \\
+ end;\\
+ \end@{tabbing@}
+@end example
+
+
+
+@comment *************************
+@comment **** table **************
+@comment *************************
+
+@comment LEVEL3
+@node table, tabular, tabbing, Environments
+@comment node-name, next, previous, up
+@subsection table
+@findex table
+@cindex Tables, creating
+@cindex Creating tables
+
+@example
+ \begin@{table@}[placement]
+
+ body of the table
+
+ \caption@{table title@}
+ \end@{table@}
+@end example
+
+Tables are objects that are not part of the normal text, and are
+usually ``floated'' to a convenient place, like the top of a page.
+Tables will not be split between two pages.
+
+The optional argument @code{[placement]} determines where LaTeX will try
+to place your table. There are four places where LaTeX can possibly put
+a float:
+
+
+@itemize @bullet
+@item
+@code{h} : Here - at the position in the text where the table
+environment appears.
+@item
+@code{t} : Top - at the top of a text page.
+@item
+@code{b} : Bottom - at the bottom of a text page.
+@item
+@code{p} : Page of floats - on a separate float page, which is a page
+containing no text, only floats.
+@end itemize
+
+The standard @code{report} and @code{article} classes use the default
+placement @code{[tbp]}.
+
+The body of the table is made up of whatever text, LaTeX commands, etc.,
+you wish. The @code{\caption} command allows you to title your table.
+
+
+@comment *************************
+@comment **** tabular ************
+@comment *************************
+
+@comment LEVEL3
+@node tabular, thebibliography, table, Environments
+@comment node-name, next, previous, up
+@subsection tabular
+@findex tabular
+@cindex Lines in tables
+@cindex Lining text up in tables
+
+@example
+ \begin@{tabular@}[pos]@{cols@}
+ column 1 entry & column 2 entry ... & column n entry \\
+ .
+ .
+ .
+ \end@{tabular@}
+@end example
+
+ or
+
+@example
+ \begin@{tabular*@}@{width@}[pos]@{cols@}
+ column 1 entry & column 2 entry ... & column n entry \\
+ .
+ .
+ .
+ \end@{tabular*@}
+@end example
+
+These environments produce a box consisting of a sequence of rows of
+items, aligned vertically in columns. The mandatory and optional
+arguments consist of:
+
+@table @code
+@item width
+Specifies the width of the @code{tabular*} environment. There must be
+rubber space between columns that can stretch to fill out the specified
+width.
+@item pos
+Specifies the vertical position; default is alignment on the centre of
+the environment.
+
+@itemize @bullet
+@item
+@code{t} - align on top row
+@item
+@code{b} - align on bottom row
+@end itemize
+
+@item cols
+Specifies the column formatting. It consists of a sequence of the
+following specifiers, corresponding to the sequence of columns and
+intercolumn material.
+
+@itemize @bullet
+
+@item
+@code{l} - A column of left-aligned items.
+@item
+@code{r} - A column of right-aligned items.
+@item
+@code{c} - A column of centred items.
+@item
+@code{|} - A vertical line the full height and depth of the environment.
+@item
+@code{@@@{text@}} - This inserts @code{text} in every row. An @@-expression
+suppresses the intercolumn space normally inserted between columns; any
+desired space between the inserted text and the adjacent items must be
+included in text. An @code{\extracolsep@{wd@}} command in an
+@@-expression causes an extra space of width @code{wd} to appear to the
+left of all subsequent columns, until countermanded by another
+@code{\extracolsep} command. Unlike ordinary intercolumn space, this
+extra space is not suppressed by an @@-expression. An
+@code{\extracolsep} command can be used only in an @@-expression in the
+@code{cols} argument.
+@item
+@code{p@{wd@}} - Produces a column with each item typeset in a parbox of
+width @code{wd}, as if it were the argument of a @code{\parbox[t]@{wd@}}
+command. However, a @code{\\} may not appear in the item, except in the
+following situations:
+@enumerate
+@item
+inside an environment like @code{minipage}, @code{array}, or @code{tabular}.
+@item
+inside an explicit @code{\parbox}.
+@item
+in the scope of a @code{\centering}, @code{\raggedright}, or @code{\raggedleft}
+declaration. The latter declarations must appear inside braces or an
+environment when used in a @code{p}-column element.
+@end enumerate
+@item
+@code{*@{num@}@{cols@}} - Equivalent to @code{num} copies of
+@code{cols}, where @code{num} is any positive integer and @code{cols} is
+any list of column-specifiers, which may contain another
+@code{*-expression}.
+
+@end itemize
+
+@end table
+
+These commands can be used inside a @code{tabular} environment:
+
+@menu
+* \cline:: Draw a horizontal line spanning some columns.
+* \hline:: Draw a horizontal line spanning all columns.
+* \multicolumn:: Make an item spanning several columns.
+* \vline:: Draw a vertical line.
+@end menu
+
+
+@comment *****************
+@comment *** \cline ****
+@comment *****************
+
+@comment LEVEL4
+@node \cline, \hline, , tabular
+@comment node-name, next, previous, up
+@subsubsection \cline
+@findex \cline
+
+@code{\cline@{i-j@}}
+
+The @code{\cline} command draws horizontal lines across the columns
+specified, beginning in column @code{i} and ending in column @code{j},
+which are identified in the mandatory argument.
+
+@comment *****************
+@comment *** \hline ****
+@comment *****************
+
+@comment LEVEL4
+@node \hline, \multicolumn, \cline, tabular
+@comment node-name, next, previous, up
+@subsubsection \hline
+@findex \hline
+
+The @code{\hline} command will draw a horizontal line the width of the
+table. It's most commonly used to draw a line at the top, bottom, and
+between the rows of the table.
+
+@comment *****************
+@comment ** \multicolumn *
+@comment *****************
+
+@comment LEVEL4
+@node \multicolumn, \vline, \hline, tabular
+@comment node-name, next, previous, up
+@subsubsection \multicolumn
+@findex \multicolumn
+
+@code{\multicolumn@{cols@}@{pos@}@{text@}}
+
+The @code{\multicolumn} is used to make an entry that spans several
+columns. The first mandatory argument, @code{cols}, specifies the
+number of columns to span. The second mandatory argument, @code{pos},
+specifies the formatting of the entry; @code{c} for centred, @code{l}
+for flushleft, @code{r} for flushright. The third mandatory argument,
+@code{text}, specifies what text is to make up the entry.
+
+@comment *****************
+@comment *** \vline ****
+@comment *****************
+@comment LEVEL4
+@node \vline, , \multicolumn, tabular
+@comment node-name, next, previous, up
+@subsubsection \vline
+@findex \vline
+
+The @code{\vline} command will draw a vertical line extending the full
+height and depth of its row. An @code{\hfill} command can be used to
+move the line to the edge of the column. It can also be used in an
+@@-expression.
+
+
+@comment *************************
+@comment **** thebibliography ****
+@comment *************************
+
+@comment LEVEL3
+@node thebibliography, theorem, tabular, Environments
+@comment node-name, next, previous, up
+@subsection thebibliography
+@findex thebibliography
+@cindex Bibliography, creating (manually)
+
+@example
+ \begin@{thebibliography@}@{widest-label@}
+ \bibitem[label]@{cite_key@}
+ .
+ .
+ .
+ \end@{thebibliography@}
+@end example
+
+The @code{thebibliography} environment produces a bibliography or
+reference list. In the @code{article} class, this reference list is
+labelled ``References''; in the @code{report} class, it is labelled
+``Bibliography''.
+
+@itemize @bullet
+@item
+@code{widest-label}: Text that, when printed, is approximately as wide
+as the widest item label produces by the @code{\bibitem} commands.
+@end itemize
+
+@menu
+* \bibitem:: Specify a bibliography item.
+* \cite:: Refer to a bibliography item.
+* \nocite:: Include an item in the bibliography.
+* Using BibTeX:: Automatic generation of bibliographies.
+@end menu
+
+
+@comment *****************
+@comment *** \bibitem ****
+@comment *****************
+@comment LEVEL4
+@node \bibitem, \cite, , thebibliography
+@comment node-name, next, previous, up
+@subsubsection \bibitem
+@findex \bibitem
+
+@code{\bibitem[label]@{cite_key@}}
+
+The @code{\bibitem} command generates an entry labelled by @code{label}.
+If the @code{label} argument is missing, a number is generated as the
+@code{label}, using the @code{enumi} counter. The @code{cite_key} is
+any sequence of letters, numbers, and punctuation symbols not containing
+a comma. This command writes an entry on the @file{.aux} file
+containing @code{cite_key} and the item's @code{label}. When this
+@file{.aux} file is read by the @code{\begin@{document@}} command, the
+item's @code{label} is associated with @code{cite_key}, causing the
+reference to @code{cite_key} by a @code{\cite} command to produce the
+associated @code{label}.
+
+
+@comment *****************
+@comment *** \cite *******
+@comment *****************
+@comment LEVEL4
+@node \cite, \nocite, \bibitem, thebibliography
+@comment node-name, next, previous, up
+@subsubsection \cite
+@findex \cite
+
+@code{\cite[text]@{key_list@}}
+
+The @code{key_list} argument is a list of citation keys. This command
+generates an in-text citation to the references associated with the keys
+in @code{key_list} by entries on the @file{.aux} file read by the
+@code{\begin@{document@}} command.
+
+The optional @code{text} argument will appear after the citation,
+i.e. @code{\cite[p. 2]@{knuth@}} might produce `[Knuth, p. 2]'.
+
+
+@comment *****************
+@comment *** \nocite *****
+@comment *****************
+@comment LEVEL4
+@node \nocite, Using BibTeX, \cite, thebibliography
+@comment node-name, next, previous, up
+@subsubsection \nocite
+@findex \nocite
+
+@code{\nocite@{key_list@}}
+
+The @code{\nocite} command produces no text, but writes @code{key_list},
+which is a list of one or more citation keys, on the @file{.aux} file.
+
+
+@comment **********************
+@comment *** Using BibTeX *****
+@comment **********************
+@comment LEVEL4
+@node Using BibTeX, , \nocite, thebibliography
+@comment node-name, next, previous, up
+@subsubsection Using BibTeX
+@cindex Using BibTeX
+@cindex BibTeX, using
+@cindex Bibliography, creating (automatically)
+@findex \bibliographystyle
+@findex \bibliography
+
+If you use the BibTeX program by Oren Patashnik (highly recommended if
+you need a bibliography of more than a couple of titles) to maintain
+your bibliography, you don't use the @code{thebibliography}
+environment. Instead, you include the lines
+
+@example
+ \bibliographystyle@{style@}
+ \bibliography@{bibfile@}
+@end example
+
+where @code{style} refers to a file @code{style.bst}, which defines how
+your citations will look. The standard styles distributed with BibTeX
+are:
+
+@table @code
+@item alpha
+Sorted alphabetically. Labels are formed from name of author and year of
+publication.
+@item plain
+Sorted alphabetically. Labels are numeric.
+@item unsrt
+Like @code{plain}, but entries are in order of citation.
+@item abbrv
+Like @code{plain}, but more compact labels.
+@end table
+
+In addition, numerous other BibTeX style files exist tailored to the
+demands of various publications.
+
+The argument to @code{\bibliography} refers to the file
+@code{bibfile.bib}, which should contain your database in BibTeX
+format. Only the entries referred to via @code{\cite} and @code{\nocite}
+will be listed in the bibliography.
+
+
+@comment *************************
+@comment **** theorem ************
+@comment *************************
+
+@comment LEVEL3
+@node theorem, titlepage, thebibliography, Environments
+@comment node-name, next, previous, up
+@subsection theorem
+@findex theorem
+@cindex Theorems, typesetting
+
+@example
+ \begin@{theorem@}
+ theorem text
+ \end@{theorem@}
+@end example
+
+The @code{theorem} environment produces ``Theorem x'' in boldface followed
+by your theorem text.
+
+
+@comment *************************
+@comment **** titlepage **********
+@comment *************************
+
+@comment LEVEL3
+@node titlepage, verbatim, theorem, Environments
+@comment node-name, next, previous, up
+@subsection titlepage
+@findex titlepage
+@cindex Making a title page
+@cindex Title pages, creating
+
+@example
+ \begin@{titlepage@}
+ text
+ \end@{titlepage@}
+@end example
+
+The @code{titlepage} environment creates a title page, i.e. a page with no
+printed page number or heading. It also causes the following page to be
+numbered page one. Formatting the title page is left to you. The
+@code{\today} command comes in handy for title pages.
+@findex \today
+
+Note that you can use the @code{\maketitle} (@pxref{\maketitle}) command to
+produce a standard title page.
+
+
+@comment *************************
+@comment **** verbatim ***********
+@comment *************************
+
+@comment LEVEL3
+@node verbatim, verse, titlepage, Environments
+@comment node-name, next, previous, up
+@subsection verbatim
+@findex verbatim
+@cindex Simulating typed text
+@cindex Typed text, simulating
+@cindex Programs, typesetting
+@cindex Computer programs, typesetting
+
+@example
+ \begin@{verbatim@}
+ text
+ \end@{verbatim@}
+@end example
+
+The @code{verbatim} environment is a paragraph-making environment that
+gets LaTeX to print exactly what you type in. It turns LaTeX into a
+typewriter with carriage returns and blanks having the same effect that
+they would on a typewriter.
+
+@menu
+* \verb:: The macro form of the @code{verbatim} environment.
+@end menu
+
+@comment *****************
+@comment *** \verb *******
+@comment *****************
+@comment LEVEL4
+@node \verb, , , verbatim
+@comment node-name, next, previous, up
+@subsubsection \verb
+@findex \verb
+@cindex Verbatim text
+
+
+@code{\verb char literal_text char}
+
+@code{\verb*char literal_text char}
+
+Typesets @code{literal_text} exactly as typed, including special
+characters and spaces, using a typewriter (@code{\tt}) type style.
+There may be no space between @code{\verb} or @code{\verb*} and
+@code{char} (space is shown here only for clarity). The @code{*-form}
+differs only in that spaces are printed
+@ifinfo
+as a special character.
+@end ifinfo
+@iftex
+as `\verb*| |'.
+@end iftex
+
+
+@comment *************************
+@comment **** verse **************
+@comment *************************
+
+@comment LEVEL3
+@node verse, , verbatim, Environments
+@comment node-name, next, previous, up
+@subsection verse
+@findex verse
+@cindex Poetry, an environment for
+
+@example
+ \begin@{verse@}
+ text
+ \end@{verse@}
+@end example
+
+The @code{verse} environment is designed for poetry, though you may find
+other uses for it.
+
+The margins are indented on the left and the right. Separate the lines
+of each stanza with @code{\\}, and use one or more blank lines to
+separate the stanzas.
+
+
+@page
+
+@comment ************************************
+@comment **** LEVEL2 Starts Here again. ****
+@comment ************************************
+
+
+@comment *************************
+@comment **** Footnotes **********
+@comment *************************
+
+@comment LEVEL2
+@node Footnotes, Layout, Environments, Commands
+@comment node-name, next, previous, up
+@section Footnotes
+@cindex Footnotes, creating
+
+Footnotes can be produced in one of two ways. They can be
+produced with one command, the @code{\footnote} command. They can also
+be produced with two commands, the @code{\footnotemark} and the
+@code{\footnotetext} commands. See the specific command for information
+on why you would use one over the other.
+
+@menu
+* \footnote:: Insert a footnote.
+* \footnotemark:: Insert footnote mark only.
+* \footnotetext:: Insert footnote text only.
+@end menu
+
+
+@comment **********************
+@comment **** \footnote *******
+@comment **********************
+
+@comment LEVEL3
+@node \footnote, \footnotemark, Footnotes, Footnotes
+@comment node-name, next, previous, up
+@subsection \footnote
+@findex \footnote
+
+@code{\footnote[number]@{text@}}
+
+The @code{\footnote} command places the numbered footnote @code{text} at
+the bottom of the current page. The optional argument, @code{number},
+is used to change the default footnote number. This command can only be
+used in outer paragraph mode; i.e., you cannot use it in sectioning
+commands like @code{\chapter}, in figures, tables or in a @code{tabular}
+environment.
+
+
+
+@comment **********************
+@comment **** \footnotemark ***
+@comment **********************
+
+@comment LEVEL3
+@node \footnotemark, \footnotetext, \footnote, Footnotes
+@comment node-name, next, previous, up
+@subsection \footnotemark
+@findex \footnotemark
+
+The @code{\footnotemark} command puts the footnote @code{number} in the
+text. This command can be used in inner paragraph mode. The text of
+the footnote is supplied by the @code{\footnotetext} command.
+
+This command can be used to produce several consecutive footnote markers
+referring to the same footnote by using
+
+@code{\footnotemark[\value@{footnote@}]}
+
+after the first @code{\footnote} command.
+
+
+@comment **********************
+@comment **** \footnotetext ***
+@comment **********************
+
+@comment LEVEL3
+@node \footnotetext, , \footnotemark, Footnotes
+@comment node-name, next, previous, up
+@subsection \footnotetext
+@findex \footnotetext
+
+@code{\footnotetext[number]@{text@}}
+
+The @code{\footnotetext} command produces the @code{text} to be placed
+at the bottom of the page. This command can come anywhere after the
+@code{\footnotemark} command. The @code{\footnotetext} command must
+appear in outer paragraph mode.
+
+The optional argument, @code{number}, is used to change the default
+footnote number.
+
+@page
+
+@comment *************************
+@comment ******* Lengths *********
+@comment *************************
+
+@comment LEVEL2
+@node Lengths, Letters, Layout, Commands
+@comment node-name, next, previous, up
+@section Lengths
+@cindex Lengths, defining and using
+
+A @code{length} is a measure of distance. Many LaTeX commands take a
+length as an argument.
+
+@menu
+* \newlength:: Define a new length.
+* \setlength:: Set the value of a length.
+* \addtolength:: Add a quantity to a length.
+* \settodepth:: Set a length to the depth of something.
+* \settoheight:: Set a length to the height of something.
+* \settowidth:: Set a length to the width of something.
+* Predefined lengths:: Lengths that are, like, predefined.
+@end menu
+
+
+@comment **********************
+@comment **** \newlength ******
+@comment **********************
+
+@comment LEVEL3
+@node \newlength, \setlength, Lengths, Lengths
+@comment node-name, next, previous, up
+@subsection \newlength
+@findex \newlength
+@cindex Lengths, defining a new
+
+@code{\newlength@{\gnat@}}
+
+The @code{\newlength} command defines the mandatory argument,
+@code{\gnat}, as a @code{length} command with a value of @code{0in}. An
+error occurs if a @code{\gnat} command already exists.
+
+
+@comment **********************
+@comment **** \setlength ******
+@comment **********************
+
+@comment LEVEL3
+@node \setlength, \addtolength, \newlength, Lengths
+@comment node-name, next, previous, up
+@subsection \setlength
+@findex \setlength
+@cindex Lengths, setting value of
+
+@code{\setlength@{\gnat@}@{length@}}
+
+The @code{\setlength} command is used to set the value of a
+@code{length} command. The @code{length} argument can be expressed in
+any terms of length LaTeX understands, i.e., inches (@code{in}),
+millimetres (@code{mm}), points (@code{pt}), etc.
+
+
+@comment **********************
+@comment **** \addtolength ****
+@comment **********************
+
+@comment LEVEL3
+@node \addtolength, \settodepth, \setlength, Lengths
+@comment node-name, next, previous, up
+@subsection \addtolength
+@findex \addtolength
+@cindex Lengths, adding to
+
+@code{\addtolength@{\gnat@}@{length@}}
+
+The @code{\addtolength} command increments a ``length command'' by the
+amount specified in the @code{length} argument. It can be a negative
+amount.
+
+@comment **********************
+@comment **** \settodepth *****
+@comment **********************
+
+@comment LEVEL3
+@node \settodepth, \settoheight, \addtolength, Lengths
+@comment node-name, next, previous, up
+@subsection \settodepth
+@findex \settodepth
+
+@code{\settodepth@{\gnat@}@{text@}}
+
+The @code{\settodepth} command sets the value of a @code{length} command
+equal to the depth of the @code{text} argument.
+
+
+@comment **********************
+@comment **** \settoheight *****
+@comment **********************
+
+@comment LEVEL3
+@node \settoheight, \settowidth, \settodepth, Lengths
+@comment node-name, next, previous, up
+@subsection \settoheight
+@findex \settoheight
+
+@code{\settoheight@{\gnat@}@{text@}}
+
+The @code{\settoheight} command sets the value of a @code{length} command
+equal to the height of the @code{text} argument.
+
+
+@comment **********************
+@comment **** \settowidth *****
+@comment **********************
+
+@comment LEVEL3
+@node \settowidth, Predefined lengths, \settoheight, Lengths
+@comment node-name, next, previous, up
+@subsection \settowidth
+@findex \settowidth
+
+@code{\settowidth@{\gnat@}@{text@}}
+
+The @code{\settowidth} command sets the value of a @code{length} command
+equal to the width of the @code{text} argument.
+
+
+@comment *****************************
+@comment **** Predefined lengths *****
+@comment *****************************
+
+@comment LEVEL3
+@node Predefined lengths, , \settowidth, Lengths
+@comment node-name, next, previous, up
+@subsection Predefined lengths
+@cindex Lengths, predefined
+@cindex Predefined lengths
+
+@code{\width}
+@findex \width
+
+@code{\height}
+@findex \height
+
+@code{\depth}
+@findex \depth
+
+@code{\totalheight}
+@findex \totalheight
+
+These length parameters can be used in the arguments of the box-making
+commands @xref{Spaces & Boxes}. They specify the natural width etc. of
+the text in the box. @code{\totalheight} equals @code{\height} +
+@code{\depth}. To make a box with the text stretched to double the
+natural size, e.g., say
+
+@code{\makebox[2\width]@{Get a stretcher@}}
+
+
+@comment *************************
+@comment ******* Letters *********
+@comment *************************
+
+@comment LEVEL2
+@node Letters, Line & Page Breaking, Lengths, Commands
+@comment node-name, next, previous, up
+@section Letters
+@cindex Letters
+@cindex Creating letters
+
+You can use LaTeX to typeset letters, both personal and business. The
+@code{letter} document class is designed to make a number of letters at
+once, although you can make just one if you so desire.
+
+Your @file{.tex} source file has the same minimum commands as the other
+document classes, i.e., you must have the following commands as a
+minimum:
+
+@example
+ \documentclass@{letter@}
+ \begin@{document@}
+ ... letters ...
+ \end@{document@}
+@end example
+
+Each letter is a @code{letter} environment, whose argument is the name
+and address of the recipient. For example, you might have:
+
+@example
+ \begin@{letter@}@{Mr. Joe Smith\\ 2345 Princess St.
+ \\ Edinburgh, EH1 1AA@}
+ ...
+ \end@{letter@}
+@end example
+
+The letter itself begins with the @code{\opening} command. The text of
+the letter follows. It is typed as ordinary LaTeX input. Commands that
+make no sense in a letter, like @code{\chapter}, do not work. The letter
+closes with a @code{\closing} command.
+
+After the @code{closing}, you can have additional material. The
+@code{\cc} command produces the usual ``cc: ...''. There's also a similar
+@code{\encl} command for a list of enclosures. With both these commands,
+use @code{\\} to separate the items.
+
+These commands are used with the @code{letter} class:
+
+@menu
+* \address:: Your return address.
+* \cc:: Cc list.
+* \closing:: Saying goodbye.
+* \encl:: List of enclosed material.
+* \location:: Your organisation's address.
+* \makelabels:: Making address labels.
+* \name:: Your name, for the return address.
+* \opening:: Saying hello.
+* \ps:: Adding a postscript.
+* \signature:: Your signature.
+* \startbreaks:: Allow page breaks.
+* \stopbreaks:: Disallow page breaks.
+* \telephone:: Your phone number.
+@end menu
+
+
+@comment **************
+@comment ** \address **
+@comment **************
+
+@comment LEVEL4
+@node \address, \cc, Letters, Letters
+@comment node-name, next, previous, up
+@subsection \address
+@findex \address
+
+@code{\address@{Return address@}}
+
+The return address, as it should appear on the letter and the envelope.
+Separate lines of the address should be separated by @code{\\} commands.
+If you do not make an @code{\address} declaration, then the letter will
+be formatted for copying onto your organisation's standard letterhead.
+(@xref{Overview}, for details on your local implementation). If you
+give an @code{\address} declaration, then the letter will be formatted
+as a personal letter.
+
+
+
+@comment *************
+@comment ** \cc ******
+@comment *************
+
+@comment LEVEL3
+@node \cc, \closing, \address, Letters
+@comment node-name, next, previous, up
+@subsection \cc
+@findex \cc
+@cindex Cc list
+
+@code{\cc@{Kate Schechter\\Rob McKenna@}}
+
+Generate a list of other persons the letter was sent to. Each name is
+printed on a separate line.
+
+@comment ******************
+@comment ** \closing ******
+@comment ******************
+
+@comment LEVEL3
+@node \closing, \encl, \cc, Letters
+@comment node-name, next, previous, up
+@subsection \closing
+@findex \closing
+@cindex Letters, ending
+
+@code{\closing@{text@}}
+
+The letter closes with a @code{\closing} command, i.e.,
+@example
+ \closing@{Best Regards,@}
+@end example
+
+
+@comment ******************
+@comment ** \encl ******
+@comment ******************
+
+@comment LEVEL3
+@node \encl, \location, \closing, Letters
+@comment node-name, next, previous, up
+@subsection \encl
+@findex \encl
+@cindex Enclosed material
+
+@code{\encl@{CV\\Certificates@}}
+
+Generate a list of enclosed material.
+
+
+@comment **************
+@comment * \location **
+@comment **************
+
+@comment LEVEL4
+@node \location, \makelabels, \encl, Letters
+@comment node-name, next, previous, up
+@subsection \location
+@findex \location
+
+@code{\location@{address@}}
+
+This modifies your organisation's standard address. This only appears
+if the @code{firstpage} pagestyle is selected.
+
+@comment **************
+@comment * \makelabels *
+@comment **************
+
+@comment LEVEL4
+@node \makelabels, \name, \location, Letters
+@comment node-name, next, previous, up
+@subsection \makelabels
+@findex \makelabels
+
+@code{\makelabels@{number@}}
+
+If you issue this command in the preamble, LaTeX will create a sheet of
+address labels. This sheet will be output before the letters.
+
+
+@comment ******************
+@comment ** \name ******
+@comment ******************
+
+@comment LEVEL3
+@node \name, \opening, \makelabels, Letters
+@comment node-name, next, previous, up
+@subsection \name
+@findex \name
+
+@code{\name@{June Davenport@}}
+
+Your name, used for printing on the envelope together with the return
+address.
+
+
+@comment ******************
+@comment ** \opening ******
+@comment ******************
+
+@comment LEVEL3
+@node \opening, \ps, \name, Letters
+@comment node-name, next, previous, up
+@subsection \opening
+@findex \opening
+@cindex Letters, starting
+
+@code{\opening@{text@}}
+
+The letter begins with the @code{\opening} command. The mandatory
+argument, @code{text}, is whatever text you wish to start your letter,
+i.e.,
+@example
+ \opening@{Dear Joe,@}
+@end example
+
+
+@comment ******************
+@comment ** \ps ******
+@comment ******************
+
+@comment LEVEL3
+@node \ps, \signature, \opening, Letters
+@comment node-name, next, previous, up
+@subsection \ps
+@findex \ps
+
+@code{\ps}
+
+Use this command before a postscript.
+
+
+@comment **************
+@comment * \signature *
+@comment **************
+
+@comment LEVEL4
+@node \signature, \startbreaks, \ps, Letters
+@comment node-name, next, previous, up
+@subsection \signature
+@findex \signature
+
+@code{\signature@{Harvey Swick@}}
+
+Your name, as it should appear at the end of the letter underneath the
+space for your signature. Items that should go on separate lines should
+be separated by @code{\\} commands.
+
+
+@comment ******************
+@comment ** \startbreaks ******
+@comment ******************
+
+@comment LEVEL3
+@node \startbreaks, \stopbreaks, \signature, Letters
+@comment node-name, next, previous, up
+@subsection \startbreaks
+@findex \startbreaks
+
+@code{\startbreaks}
+
+Used after a @code{\stopbreaks} command to allow page breaks again.
+
+
+@comment ******************
+@comment ** \stopbreaks ******
+@comment ******************
+
+@comment LEVEL3
+@node \stopbreaks, \telephone, \startbreaks, Letters
+@comment node-name, next, previous, up
+@subsection \stopbreaks
+@findex \stopbreaks
+
+@code{\stopbreaks}
+
+Inhibit page breaks until a @code{\startbreaks} command occurs.
+
+
+@comment **************
+@comment * \telephone *
+@comment **************
+
+@comment LEVEL4
+@node \telephone, , \stopbreaks, Letters
+@comment node-name, next, previous, up
+@subsection \telephone
+@findex \telephone
+
+@code{\telephone@{number@}}
+
+This is your telephone number. This only appears if the
+@code{firstpage} pagestyle is selected.
+
+
+@page
+
+@comment *************************
+@comment * Line & Page Breaking **
+@comment *************************
+
+@comment LEVEL2
+@node Line & Page Breaking, Making Paragraphs, Letters, Commands
+@comment node-name, next, previous, up
+@section Line & Page Breaking
+@cindex Page Breaking
+@cindex Line Breaking
+@cindex Page Formatting
+
+The first thing LaTeX does when processing ordinary text is to
+translate your input file into a string of glyphs and spaces. To
+produce a printed document, this string must be broken into lines, and
+these lines must be broken into pages. In some environments, you do the
+line breaking yourself with the @code{\\} command, but LaTeX usually
+does it for you.
+
+@menu
+* \\:: Start a new line.
+* \- (hyphenation):: Insert explicit hyphenation.
+* \cleardoublepage:: Start a new right-hand page.
+* \clearpage:: Start a new page.
+* \enlargethispage:: Enlarge the current page a bit.
+* \fussy:: Be fussy about line breaking.
+* \hyphenation:: Tell LaTeX how to hyphenate a word.
+* \linebreak:: Break the line.
+* \newline:: Break the line prematurely.
+* \newpage:: Start a new page.
+* \nolinebreak:: Don't break the current line.
+* \nopagebreak:: Don't make a page break here.
+* \pagebreak:: Please make a page break here.
+* \sloppy:: Be sloppy about line breaking.
+@end menu
+
+
+@comment ******************
+@comment ****** \\ ********
+@comment ******************
+
+@comment LEVEL3
+@node \\, \- (hyphenation), Line & Page Breaking, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \\
+@findex \\
+@cindex New line, starting
+
+@code{\\[*][extra-space]}
+
+The @code{\\} command tells LaTeX to start a new line. It has an
+optional argument, @code{extra-space}, that specifies how much extra
+vertical space is to be inserted before the next line. This can be a
+negative amount.
+
+The @code{\\*} command is the same as the ordinary @code{\\} command
+except that it tells LaTeX not to start a new page after the line.
+
+
+@comment **********************
+@comment ** \- (hyphenation) **
+@comment **********************
+
+@comment LEVEL3
+@node \- (hyphenation), \cleardoublepage, \\, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \-
+@findex \- (hyphenation)
+@cindex Hyphenation, forcing
+
+The @code{\-} command tells LaTeX that it may hyphenate the word at that
+point. LaTeX is very good at hyphenating, and it will usually find all
+correct hyphenation points. The @code{\-} command is used for the
+exceptional cases.
+
+Note that when you insert @code{\-} commands in a word, the word will
+only be hyphenated at those points and not at any of the hyphenation
+points that LaTeX might otherwise have chosen.
+
+
+@comment ********************
+@comment * \cleardoublepage *
+@comment ********************
+
+@comment LEVEL3
+@node \cleardoublepage, \clearpage, \- (hyphenation), Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \cleardoublepage
+@findex \cleardoublepage
+@cindex Starting on a right-hand page
+
+The @code{\cleardoublepage} command ends the current page and causes all
+figures and tables that have so far appeared in the input to be printed.
+In a two-sided printing style, it also makes the next page a right-hand
+(odd-numbered) page, producing a blank page if necessary.
+
+
+@comment ******************
+@comment ** \clearpage ****
+@comment ******************
+
+@comment LEVEL3
+@node \clearpage, \enlargethispage, \cleardoublepage, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \clearpage
+@findex \clearpage
+@cindex Flushing a page
+
+The @code{\clearpage} command ends the current page and causes all
+figures and tables that have so far appeared in the input to be printed.
+
+
+@comment ******************
+@comment ** \enlargethispage **
+@comment ******************
+
+@comment LEVEL3
+@node \enlargethispage, \fussy, \clearpage, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \enlargethispage
+@findex \enlargethispage
+@cindex Enlarge current page
+
+@code{\enlargethispage@{size@}}
+
+@code{\enlargethispage*@{size@}}
+
+Enlarge the @code{\textheight} for the current page by the specified
+amount; e.g. @code{\enlargethispage@{\baselineskip@}} will allow one
+additional line.
+
+The starred form tries to squeeze the material together on the page as
+much as possible. This is normally used together with an explicit
+@code{\pagebreak}.
+
+@node \fussy, \hyphenation, \enlargethispage, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \fussy
+@findex \fussy
+
+@code{\fussy}
+
+This declaration (which is the default) makes TeX more fussy about line
+breaking. This can avoids too much space between words, but may produce
+overfull boxes.
+
+This command cancels the effect of a previous @code{\sloppy} command. @ref{\sloppy}
+
+
+@comment ******************
+@comment ** \hyphenation **
+@comment ******************
+
+@comment LEVEL3
+@node \hyphenation, \linebreak, \fussy, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \hyphenation
+@findex \hyphenation
+@cindex Hyphenation, defining
+
+@code{\hyphenation@{words@}}
+
+The @code{\hyphenation} command declares allowed hyphenation points,
+where @code{words} is a list of words, separated by spaces, in which
+each hyphenation point is indicated by a @code{-} character.
+
+
+@comment ******************
+@comment ** \linebreak ****
+@comment ******************
+
+@comment LEVEL3
+@node \linebreak, \newline, \hyphenation, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \linebreak
+@findex \linebreak
+@cindex Line breaks
+
+@code{\linebreak[number]}
+
+The @code{\linebreak} command tells LaTeX to break the current line at
+the point of the command. With the optional argument, @code{number},
+you can convert the @code{\linebreak} command from a demand to a
+request. The number must be a number from 0 to 4. The higher the
+number, the more insistent the request is.
+
+The @code{\linebreak} command causes LaTeX to stretch the line so it
+extends to the right margin.
+
+@comment ******************
+@comment ** \newline ******
+@comment ******************
+
+@comment LEVEL3
+@node \newline, \newpage, \linebreak, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \newline
+@findex \newline
+@cindex New line, starting (paragraph mode)
+
+The @code{\newline} command breaks the line right where it is. It can
+only be used in paragraph mode.
+
+
+@comment ******************
+@comment ** \newpage ******
+@comment ******************
+
+@comment LEVEL3
+@node \newpage, \nolinebreak, \newline, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \newpage
+@findex \newpage
+@cindex New Page
+
+The @code{\newpage} command ends the current page.
+
+
+@comment ******************
+@comment * \nolinebreak ***
+@comment ******************
+
+@comment LEVEL3
+@node \nolinebreak, \nopagebreak, \newpage, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \nolinebreak
+@findex \nolinebreak
+
+@code{\nolinebreak[number]}
+
+The @code{\nolinebreak} command prevents LaTeX from breaking the current
+line at the point of the command. With the optional argument,
+@code{number}, you can convert the @code{\nolinebreak} command from a
+demand to a request. The number must be a number from 0 to 4. The
+higher the number, the more insistent the request is.
+
+@comment ******************
+@comment ** \nopagebreak **
+@comment ******************
+
+@comment LEVEL3
+@node \nopagebreak, \pagebreak, \nolinebreak, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \nopagebreak
+@findex \nopagebreak
+
+@code{\nopagebreak[number]}
+
+The @code{\nopagebreak} command prevents LaTeX from breaking the current
+page at the point of the command. With the optional argument,
+@code{number}, you can convert the @code{\nopagebreak} command from a
+demand to a request. The number must be a number from 0 to 4. The
+higher the number, the more insistent the request is.
+
+@comment ******************
+@comment ** \pagebreak ****
+@comment ******************
+
+@comment LEVEL3
+@node \pagebreak, \sloppy, \nopagebreak, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \pagebreak
+@findex \pagebreak
+@cindex Page break, forcing
+
+@code{\pagebreak[number]}
+
+The @code{\pagebreak} command tells LaTeX to break the current page at
+the point of the command. With the optional argument, @code{number},
+you can convert the @code{\pagebreak} command from a demand to a
+request. The number must be a number from 0 to 4. The higher the
+number, the more insistent the request is.
+
+@node \sloppy, , \pagebreak, Line & Page Breaking
+@comment node-name, next, previous, up
+@subsection \sloppy
+@findex \sloppy
+
+@code{\sloppy}
+
+This declaration makes TeX less fussy about line breaking. This can
+prevent overfull boxes, but may leave too much space between words.
+
+Lasts until a @code{\fussy} command is issued. @ref{\fussy}.
+
+@page
+
+@comment *************************
+@comment *** Making Paragraphs ***
+@comment *************************
+
+@comment LEVEL2
+@node Making Paragraphs, Margin Notes, Line & Page Breaking, Commands
+@comment node-name, next, previous, up
+@section Making Paragraphs
+@cindex Making paragraphs
+@cindex Paragraphs
+
+A paragraph is ended by one or more completely blank lines --- lines not
+containing even a @code{%}. A blank line should not appear where a new
+paragraph cannot be started, such as in math mode or in the argument of
+a sectioning command.
+
+@menu
+* \indent:: Indent this paragraph.
+* \noindent:: Do not indent this paragraph.
+* \par:: Another way of writing a blank line.
+@end menu
+
+@comment ******************
+@comment ** \indent *******
+@comment ******************
+
+@comment LEVEL3
+@node \indent, \noindent, Making Paragraphs, Making Paragraphs
+@comment node-name, next, previous, up
+@subsection \indent
+@findex \indent
+@cindex Indent, forcing
+
+@code{\indent}
+
+This produces a horizontal space whose width equals the width of the
+paragraph indentation. It is used to add paragraph indentation where it
+would otherwise be suppressed.
+
+@comment ******************
+@comment ** \noindent *****
+@comment ******************
+
+@comment LEVEL3
+@node \noindent, \par, \indent, Making Paragraphs
+@comment node-name, next, previous, up
+@subsection \noindent
+@findex \noindent
+@cindex Indent, suppressing
+
+@code{\noindent}
+
+When used at the beginning of the paragraph, it suppresses the paragraph
+indentation. It has no effect when used in the middle of a paragraph.
+
+
+@comment ******************
+@comment ** \par **********
+@comment ******************
+
+@comment LEVEL3
+@node \par, , \noindent, Making Paragraphs
+@comment node-name, next, previous, up
+@subsection \par
+@findex \par
+@cindex Paragraph, starting a new
+
+Equivalent to a blank line; often used to make command or environment
+definitions easier to read.
+
+
+@page
+
+@comment ********************
+@comment *** Margin Notes ***
+@comment ********************
+
+@comment LEVEL2
+@node Margin Notes, Math Formulae, Making Paragraphs, Commands
+@comment node-name, next, previous, up
+@section Margin Notes
+@cindex Margin Notes
+@cindex Notes in the margin
+@cindex Remarks in the margin
+
+The command @code{\marginpar[left]@{right@}} creates a note in the margin.
+The first line will be at the same height as the line in the text where
+the @code{\marginpar} occurs.
+
+When you only specify the mandatory argument @code{right}, the text will
+be placed
+
+@itemize @bullet
+@item
+in the right margin for one-sided layout
+@item
+in the outside margin for two-sided layout
+@item
+in the nearest margin for two-column layout.
+@end itemize
+
+By issuing the command @code{\reversemarginpar}, you can force the marginal
+notes to go into the opposite (inside) margin.
+
+When you specify both arguments, @code{left} is used for the left
+margin, and @code{right} is used for the right margin.
+
+The first word will normally not be hyphenated; you can enable
+hyphenation by prefixing the first word with a @code{\hspace@{0pt@}}
+command.
+
+
+
+@comment *************************
+@comment **** Math Formulae ******
+@comment *************************
+
+@comment LEVEL2
+@node Math Formulae, Modes, Margin Notes, Commands
+@comment node-name, next, previous, up
+@section Math Formulae
+@cindex Math Formulae
+@cindex Formulae, maths
+@cindex Math mode, entering
+@findex \(
+@findex \)
+@findex \[
+@findex \]
+@findex $
+
+There are three environments that put LaTeX in math mode:
+
+@table @code
+@item math
+For Formulae that appear right in the text.
+@item displaymath
+For Formulae that appear on their own line.
+@item equation
+The same as the displaymath environment except that it adds an equation
+number in the right margin.
+@end table
+
+The @code{math} environment can be used in both paragraph and LR mode,
+but the @code{displaymath} and @code{equation} environments can be used
+only in paragraph mode. The @code{math} and @code{displaymath}
+environments are used so often that they have the following short forms:
+
+@example
+ \(...\) instead of \begin@{math@}...\end@{math@}
+
+ \[...\] instead of \begin@{displaymath@}...\end@{displaymath@}
+@end example
+
+In fact, the @code{math} environment is so common that it has an even
+shorter form:
+
+@example
+ $ ... $ instead of \(...\)
+@end example
+
+@cindex exponent
+
+@menu
+* Subscripts & Superscripts:: Also known as exponent or index.
+* Math Symbols:: Various mathematical squiggles.
+* Spacing in Math Mode:: Thick, medium, thin and negative spaces.
+* Math Miscellany:: Stuff that doesn't fit anywhere else.
+@end menu
+
+@comment *****************************
+@comment * Subscripts & Superscripts *
+@comment *****************************
+
+@comment LEVEL3
+@node Subscripts & Superscripts, Math Symbols, Math Formulae, Math Formulae
+@comment node-name, next, previous, up
+@subsection Subscripts & Superscripts
+@cindex Superscript
+@cindex Subscript
+@findex _
+@findex ^
+
+To get an expression @i{exp} to appear as a subscript, you just type
+@code{_@{}@i{exp}@code{@}}. To get @i{exp} to appear as a superscript, you type
+@code{^@{}@i{exp}@code{@}}. LaTeX handles superscripted superscripts and all of
+that stuff in the natural way. It even does the right thing when
+something has both a subscript and a superscript.
+
+
+@comment ******************
+@comment ** Math Symbols **
+@comment ******************
+
+@comment LEVEL3
+@node Math Symbols, Spacing in Math Mode, Subscripts & Superscripts, Math Formulae
+@comment node-name, next, previous, up
+@subsection Math Symbols
+@cindex Maths symbols
+@cindex Symbols
+@cindex Greek letters
+
+@ifinfo
+LaTeX provides almost any mathematical symbol you're likely to need. The
+commands for generating them can be used only in math mode. For
+example, if you include @code{$\pi$} in your source, you will get the
+symbol ``pi'' in your output.
+@end ifinfo
+
+@iftex
+LaTeX provides almost any mathematical symbol you're likely to need. The
+commands for generating them can be used only in math mode. For
+example, if you include @code{$\pi$} in your source, you will get the
+symbol
+@tex
+$\pi$
+@end tex
+in your output.
+@end iftex
+
+@comment ************************
+@comment * Spacing in Math Mode *
+@comment ************************
+
+@comment LEVEL3
+@node Spacing in Math Mode, Math Miscellany, Math Symbols, Math Formulae
+@comment node-name, next, previous, up
+@subsection Spacing in Math Mode
+@cindex Spacing, within Math mode
+@cindex Math mode, spacing
+
+
+In a @code{math} environment, LaTeX ignores the spaces you type and puts
+in the spacing that it thinks is best. LaTeX formats mathematics the
+way it's done in mathematics texts. If you want different spacing,
+LaTeX provides the following four commands for use in math mode:
+
+@findex \;
+@findex \COLON
+@findex \,
+@findex \!
+
+@enumerate
+@item
+@code{\;} - a thick space
+@item
+@code{\:} - a medium space
+@item
+@code{\,} - a thin space
+@item
+@code{\!} - a negative thin space
+@end enumerate
+
+
+@comment *******************
+@comment * Math Miscellany *
+@comment *******************
+
+@comment LEVEL3
+@node Math Miscellany, , Spacing in Math Mode, Math Formulae
+@comment node-name, next, previous, up
+@subsection Math Miscellany
+@cindex Maths Miscellany
+
+@table @code
+
+@item \cdots
+@findex \cdots
+Produces a horizontal ellipsis where the dots are raised to the centre
+of the line.
+
+@iftex
+eg.
+@tex
+$\cdots$
+@end tex
+@end iftex
+
+@item \ddots
+@findex \ddots
+Produces a diagonal ellipsis.
+
+@iftex
+eg.
+@tex
+$\ddots$
+@end tex
+@end iftex
+
+@item \frac@{num@}@{den@}
+@findex \frac
+Produces the fraction @code{num} divided by @code{den}.
+
+@iftex
+eg.
+@tex
+${1}\over{4}$
+@end tex
+@end iftex
+
+@item \ldots
+@findex \ldots
+Produces an ellipsis. This command works in
+any mode, not just math mode.
+
+@iftex
+eg.
+@tex
+$\ldots$
+@end tex
+@end iftex
+
+@item \overbrace@{text@}
+@findex \overbrace
+Generates a brace over text.
+
+@iftex
+eg.
+@tex
+$\overbrace{x+\cdots+x}^{k \rm\;times}$
+@end tex
+@end iftex
+
+@item \overline@{text@}
+@findex \overline
+Causes the argument text to be overlined.
+
+@iftex
+eg.
+@tex
+$\overline{x}$
+@end tex
+@end iftex
+
+@item \sqrt[root]@{arg@}
+@findex \sqrt
+Produces the square root of its argument. The
+optional argument, @code{root}, determines what root to produce, i.e.,
+the cube root of @code{x+y} would be typed as @code{$\sqrt[3]@{x+y@}$}.
+
+@iftex
+eg.
+@tex
+$\sqrt{x-1}$
+@end tex
+@end iftex
+
+@item \underbrace@{text@}
+@findex \underbrace
+Generates text with a brace underneath.
+
+@iftex
+eg.
+@tex
+$\underbrace{x+y+z}_{>\,0}$
+@end tex
+@end iftex
+
+@item \underline@{text@}
+@findex \underline
+Causes the argument text to be underlined.
+This command can also be used in paragraph and LR modes.
+
+@iftex
+eg.
+@tex
+$\underline{z}$
+@end tex
+@end iftex
+
+@item \vdots
+@findex \vdots
+Produces a vertical ellipsis.
+
+@iftex
+eg.
+@tex
+$\vdots$
+@end tex
+@end iftex
+
+@end table
+
+
+@page
+
+@comment *************************
+@comment ******* Modes ***********
+@comment *************************
+
+@comment LEVEL2
+@node Modes, Page Styles, Math Formulae, Commands
+@comment node-name, next, previous, up
+@section Modes
+@cindex Modes
+@cindex Paragraph mode
+@cindex Math mode
+@cindex Left-to-right mode
+@cindex LR mode
+
+
+When LaTeX is processing your input text, it is always in one of three
+modes:
+
+@itemize @bullet
+@item
+Paragraph mode
+@item
+Math mode
+@item
+Left-to-right mode, called LR mode for short
+@end itemize
+
+LaTeX changes mode only when it goes up or down a staircase to a
+different level, though not all level changes produce mode changes.
+Mode changes occur only when entering or leaving an environment, or when
+LaTeX is processing the argument of certain text-producing commands.
+
+``Paragraph mode'' is the most common; it's the one LaTeX is in when
+processing ordinary text. In that mode, LaTeX breaks your text into
+lines and breaks the lines into pages. LaTeX is in ``math mode'' when
+it's generating a mathematical formula. In ``LR mode'', as in paragraph
+mode, LaTeX considers the output that it produces to be a string of
+words with spaces between them. However, unlike paragraph mode, LaTeX
+keeps going from left to right; it never starts a new line in LR mode.
+Even if you put a hundred words into an @code{\mbox}, LaTeX would keep
+typesetting them from left to right inside a single box, and then
+complain because the resulting box was too wide to fit on the line.
+
+LaTeX is in LR mode when it starts making a box with an @code{\mbox}
+command. You can get it to enter a different mode inside the box - for
+example, you can make it enter math mode to put a formula in the box.
+There are also several text-producing commands and environments for
+making a box that put LaTeX in paragraph mode. The box make by one of
+these commands or environments will be called a @code{parbox}. When
+LaTeX is in paragraph mode while making a box, it is said to be in
+``inner paragraph mode''. Its normal paragraph mode, which it starts out
+in, is called ``outer paragraph mode''.
+
+@page
+
+@comment *************************
+@comment ***** Page Styles *******
+@comment *************************
+
+@comment LEVEL2
+@node Page Styles, Sectioning, Modes, Commands
+@comment node-name, next, previous, up
+@section Page Styles
+@cindex Styles, page
+@cindex Page styles
+
+The @code{\documentclass} command determines the size and position of
+the page's head and foot. The page style determines what goes in them.
+
+@menu
+* \maketitle:: Generate a title page.
+* \pagenumbering:: Set the style used for page numbers.
+* \pagestyle:: Change the headings/footings style.
+* \thispagestyle:: Change the headings/footings style for this page.
+@end menu
+
+
+@comment ******************
+@comment ** \maketitle ****
+@comment ******************
+
+@comment LEVEL3
+@node \maketitle, \pagenumbering, Page Styles, Page Styles
+@comment node-name, next, previous, up
+@subsection \maketitle
+@cindex Title making
+@findex \maketitle
+
+@code{\maketitle}
+
+The @code{\maketitle} command generates a title on a separate title page
+- except in the @code{article} class, where the title normally goes at
+the top of the first page. Information used to produce the title is
+obtained from the following declarations:
+
+@xref{Page Styles}, for the commands to give the information.
+
+@menu
+* \author:: Who wrote this stuff?
+* \date:: The date the document was created.
+* \thanks:: A special form of footnote.
+* \title:: How to set the document title.
+@end menu
+
+
+@comment ***********
+@comment * \author *
+@comment ***********
+
+@comment LEVEL4
+@node \author, \date, \maketitle, \maketitle
+@comment node-name, next, previous, up
+@subsection \author
+@findex \author
+@cindex Author, for titlepage
+
+@code{\author@{names@}}
+
+The @code{\author} command declares the author(s), where @code{names} is
+a list of authors separated by @code{\and} commands. Use @code{\\} to
+separate lines within a single author's entry -- for example, to give
+the author's institution or address.
+
+
+@comment ***********
+@comment ** \date **
+@comment ***********
+
+@comment LEVEL4
+@node \date, \thanks, \author, \maketitle
+@comment node-name, next, previous, up
+@subsection \date
+@findex \date
+@cindex Date, for titlepage
+
+@code{\date@{text@}}
+
+The @code{\date} command declares @i{text} to be the document's date. With
+no @code{\date} command, the current date is used.
+
+
+@comment ***********
+@comment * \thanks *
+@comment ***********
+
+@comment LEVEL4
+@node \thanks, \title, \date, \maketitle
+@comment node-name, next, previous, up
+@subsection \thanks
+@findex \thanks
+@cindex Thanks, for titlepage
+
+@code{\thanks@{text@}}
+
+The @code{\thanks} command produces a @code{\footnote} to the title.
+
+
+@comment ***********
+@comment * \title **
+@comment ***********
+
+@comment LEVEL4
+@node \title, , \thanks, \maketitle
+@comment node-name, next, previous, up
+@subsection \title
+@findex \title
+@cindex Title, for titlepage
+
+@code{\title@{text@}}
+
+
+The @code{\title} command declares @code{text} to be the title. Use
+@code{\\} to tell LaTeX where to start a new line in a long title.
+
+
+@comment ******************
+@comment * \pagenumbering *
+@comment ******************
+
+@comment LEVEL3
+@node \pagenumbering, \pagestyle, \maketitle, Page Styles
+@comment node-name, next, previous, up
+@subsection \pagenumbering
+@findex \pagenumbering
+@cindex Page numbering
+
+@code{\pagenumbering@{num_style@}}
+
+Specifies the style of page numbers. Possible values of @code{num_style} are:
+
+@itemize @bullet
+@item
+@code{arabic} - Arabic numerals
+@item
+@code{roman} - Lowercase Roman numerals
+@item
+@code{Roman} - Uppercase Roman numerals
+@item
+@code{alph} - Lowercase letters
+@item
+@code{Alph} - Uppercase letters
+@end itemize
+
+
+@comment ******************
+@comment ** \pagestyle ****
+@comment ******************
+
+@comment LEVEL3
+@node \pagestyle, \thispagestyle, \pagenumbering, Page Styles
+@comment node-name, next, previous, up
+@subsection \pagestyle
+@findex \pagestyle
+
+@code{\pagestyle@{option@}}
+
+The @code{\pagestyle} command changes the style from the current page on
+throughout the remainder of your document.
+
+The valid options are:
+
+@itemize @bullet
+@item
+@code{plain} - Just a plain page number.
+@item
+@code{empty} - Produces empty heads and feet - no page numbers.
+@item
+@code{headings} - Puts running headings on each page. The document
+style specifies what goes in the headings.
+@item
+@code{myheadings} - You specify what is to go in the heading with the
+@code{\markboth} or the @code{\markright} commands.
+@end itemize
+
+@menu
+* \markboth:: Set left and right headings.
+* \markright:: Set right heading only.
+@end menu
+
+
+@comment ***************
+@comment ** \markboth **
+@comment ***************
+
+@comment LEVEL4
+@node \markboth, \markright, \pagestyle, \pagestyle
+@comment node-name, next, previous, up
+@subsection \markboth
+@findex \markboth
+
+@example
+\markboth@{left head@}@{right head@}
+@end example
+
+The @code{\markboth} command is used in
+conjunction with the page style @code{myheadings} for setting
+both the left and the right heading. You should note that a ``left-hand
+heading'' is generated by the last @code{\markboth} command before the
+end of the page, while a ``right-hand heading'' is generated by the first
+@code{\markboth} or @code{\markright} that comes on the page if there is
+one, otherwise by the last one before the page.
+
+
+@comment ****************
+@comment ** \markright **
+@comment ****************
+
+@comment LEVEL4
+@node \markright, , \markboth, \pagestyle
+@comment node-name, next, previous, up
+@subsection \markright
+@findex \markright
+
+@example
+\markright@{right head@}
+@end example
+
+
+The @code{\markright} command is used in conjunction with the page style
+@code{myheadings} for setting the right heading, leaving the left
+heading unchanged. You should note that a ``left-hand heading'' is
+generated by the last @code{\markboth} command before the end of the
+page, while a ``right-hand heading'' is generated by the first
+@code{\markboth} or @code{\markright} that comes on the page if there is
+one, otherwise by the last one before the page.
+
+@comment ******************
+@comment * \thispagestyle *
+@comment ******************
+
+@comment LEVEL3
+@node \thispagestyle, , \pagestyle, Page Styles
+@comment node-name, next, previous, up
+@subsection \thispagestyle
+@findex \thispagestyle
+
+@code{\thispagestyle@{option@}}
+
+The @code{\thispagestyle} command works in the same manner as the
+@code{\pagestyle} command except that it changes the style for the
+current page only.
+
+
+@page
+
+@comment *************************
+@comment ***** Sectioning ********
+@comment *************************
+
+@comment LEVEL2
+@node Sectioning, Spaces & Boxes, Page Styles, Commands
+@comment node-name, next, previous, up
+@section Sectioning
+@cindex Sectioning
+@findex \chapter
+@findex \subsubsection
+@findex \subsection
+@findex \paragraph
+@findex \subparagraph
+
+Sectioning commands provide the means to structure your text into units.
+
+@itemize @bullet
+@item
+@code{\part}
+@item
+@code{\chapter} (report and book class only)
+@item
+@code{\section}
+@item
+@code{\subsection}
+@item
+@code{\subsubsection}
+@item
+@code{\paragraph}
+@item
+@code{\subparagraph}
+@end itemize
+
+All sectioning commands take the same general form, i.e.,
+
+@code{\chapter[optional]@{title@}}
+
+In addition to providing the heading in the text, the mandatory argument
+of the sectioning command can appear in two other places:
+
+@enumerate
+@item
+The table of contents
+@item
+The running head at the top of the page
+@end enumerate
+
+You may not want the same thing to appear in these other two places as
+appears in the text heading. To handle this situation, the sectioning
+commands have an @code{optional} argument that provides the text for
+these other two purposes.
+
+All sectioning commands have @code{*}-forms that print a @i{title},
+but do not include a number and do not make an entry in the table of
+contents.
+
+@findex \appendix
+@cindex Appendix, creating
+
+@code{\appendix}
+
+The @code{\appendix} command changes the way sectional units are
+numbered. The @code{\appendix} command generates no text and does not
+affect the numbering of parts.
+The normal use of this command is something like
+
+@example
+\chapter@{The First Chapter@}
+@dots{}
+\appendix
+\chapter@{The First Appendix@}
+@end example
+
+
+@page
+
+@comment *************************
+@comment **** Spaces & Boxes *****
+@comment *************************
+
+@comment LEVEL2
+@node Spaces & Boxes, Special Characters, Sectioning, Commands
+@comment node-name, next, previous, up
+@section Spaces & Boxes
+@cindex Spaces
+@cindex Boxes
+
+All the predefined length parameters (@pxref{Predefined lengths}) can be
+used in the arguments of the box-making commands.
+
+@menu
+Horizontal space
+* \dotfill:: Stretchable horizontal dots.
+* \hfill:: Stretchable horizontal space.
+* \hrulefill:: Stretchable horizontal rule.
+* \hspace:: Fixed horizontal space.
+Vertical space
+* \addvspace:: Fixed vertical space.
+* \bigskip:: Fixed vertical space.
+* \medskip:: Fixed vertical space.
+* \smallskip:: Fixed vertical space.
+* \vfill:: Stretchable vertical space.
+* \vspace:: Fixed vertical space.
+Boxes
+* \fbox:: Framebox.
+* \framebox:: Framebox, adjustable position.
+* lrbox:: An environment like \sbox.
+* \makebox:: Box, adjustable position.
+* \mbox:: Box.
+* \newsavebox:: Declare a name for saving a box.
+* \parbox:: Box with text in paragraph mode.
+* \raisebox:: Raise or lower text.
+* \rule:: Lines and squares.
+* \savebox:: Like \makebox, but save the text for later use.
+* \sbox:: Like \mbox, but save the text for later use.
+* \usebox:: Print saved text.
+@end menu
+
+
+@comment ***************
+@comment ** \dotfill ***
+@comment ***************
+
+@comment LEVEL3
+@node \dotfill, \hfill, , Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \dotfill
+@findex \dotfill
+
+The @code{\dotfill} command produces a ``rubber length'' that produces dots
+instead of just spaces.
+
+
+@comment ***************
+@comment ** \hfill *****
+@comment ***************
+
+@comment LEVEL3
+@node \hfill, \hrulefill, \dotfill, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \hfill
+@findex \hfill
+
+The @code{\hfill} fill command produces a ``rubber length'' which can
+stretch or shrink horizontally. It will be filled with spaces.
+
+
+@comment ****************
+@comment ** \hrulefill **
+@comment ****************
+
+@comment LEVEL3
+@node \hrulefill, \hspace, \hfill, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \hrulefill
+@findex \hrulefill
+
+The @code{\hrulefill} fill command produces a ``rubber length'' which can
+stretch or shrink horizontally. It will be filled with a horizontal
+rule.
+
+
+@comment ***************
+@comment ** \hspace ****
+@comment ***************
+
+@comment LEVEL3
+@node \hspace, \addvspace, \hrulefill, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \hspace
+@findex \hspace
+
+@code{\hspace[*]@{length@}}
+
+
+The @code{\hspace} command adds horizontal space. The length of the
+space can be expressed in any terms that LaTeX understands, i.e.,
+points, inches, etc. You can add negative as well as positive space
+with an @code{\hspace} command. Adding negative space is like
+backspacing.
+
+LaTeX removes horizontal space that comes at the end of a line. If you
+don't want LaTeX to remove this space, include the optional @code{*}
+argument. Then the space is never removed.
+
+
+@comment ****************
+@comment ** \addvspace **
+@comment ****************
+
+@comment LEVEL3
+@node \addvspace, \bigskip, \hspace, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \addvspace
+@findex \addvspace
+@cindex Vertical space, inserting
+@cindex Space, inserting vertical
+
+@code{\addvspace@{length@}}
+
+The @code{\addvspace} command normally adds a vertical space of height
+length. However, if vertical space has already been added to the same
+point in the output by a previous @code{\addvspace} command, then this
+command will not add more space than needed to make the natural length
+of the total vertical space equal to @code{length}.
+
+
+@comment ***************
+@comment ** \bigskip ***
+@comment ***************
+
+@comment LEVEL3
+@node \bigskip, \medskip, \addvspace, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \bigskip
+@findex \bigskip
+
+The @code{\bigskip} command is equivalent to
+@code{\vspace@{bigskipamount@}} where @code{bigskipamount} is determined
+by the document class.
+
+
+@comment ***************
+@comment ** \medskip ***
+@comment ***************
+
+@comment LEVEL3
+@node \medskip, \smallskip, \bigskip, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \medskip
+@findex \medskip
+
+The @code{\medskip} command is equivalent to
+@code{\vspace@{medskipamount@}} where @code{medskipamount} is determined
+by the document class.
+
+
+@comment ****************
+@comment ** \smallskip **
+@comment ****************
+
+@comment LEVEL3
+@node \smallskip, \vfill, \medskip, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \smallskip
+@findex \smallskip
+
+@code{\smallskip}
+
+The @code{\smallskip} command is equivalent to
+@code{\vspace@{smallskipamount@}} where @code{smallskipamount} is
+determined by the document class.
+
+
+@comment ***************
+@comment ** \vfill *****
+@comment ***************
+
+@comment LEVEL3
+@node \vfill, \vspace, \smallskip, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \vfill
+@findex \vfill
+
+The @code{\vfill} fill command produces a rubber length which can
+stretch or shrink vertically.
+
+
+@comment ***************
+@comment ** \vspace ****
+@comment ***************
+
+@comment LEVEL3
+@node \vspace, \fbox, \vfill, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \vspace
+@findex \vspace
+
+@code{\vspace[*]@{length@}}
+
+The @code{\vspace} command adds vertical space. The length of the space
+can be expressed in any terms that LaTeX understands, i.e., points,
+inches, etc. You can add negative as well as positive space with an
+@code{\vspace} command.
+
+LaTeX removes vertical space that comes at the end of a page. If you
+don't want LaTeX to remove this space, include the optional @code{*}
+argument. Then the space is never removed.
+
+
+@comment ***************
+@comment ** \fbox ******
+@comment ***************
+
+@comment LEVEL3
+@node \fbox, \framebox, \vspace, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \fbox
+@findex \fbox
+
+@code{\fbox@{text@}}
+
+The @code{\fbox} command is exactly the same as the @code{\mbox}
+command, except that it puts a frame around the outside of the box that
+it creates.
+
+
+@comment ***************
+@comment ** \framebox **
+@comment ***************
+
+@comment LEVEL3
+@node \framebox, lrbox, \fbox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \framebox
+@findex \framebox
+
+@code{\framebox[width][position]@{text@}}
+
+The @code{\framebox} command is exactly the same as the @code{\makebox}
+command, except that it puts a frame around the outside of the box that
+it creates.
+
+The framebox command produces a rule of thickness @code{\fboxrule}, and
+leaves a space @code{\fboxsep} between the rule and the contents of the
+box.
+
+
+@comment ***************
+@comment ** lrbox ****
+@comment ***************
+
+@comment LEVEL3
+@node lrbox, \makebox, \framebox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection lrbox
+@findex lrbox
+
+@code{\begin@{lrbox@}@{cmd@} text \end@{lrbox@}}
+
+This is the environment form of @code{\sbox}.
+
+The text inside the environment is saved in the box @code{cmd}, which
+must have been declared with @code{\newsavebox}.
+
+
+@comment **************
+@comment ** \makebox **
+@comment **************
+
+@comment LEVEL3
+@node \makebox, \mbox, lrbox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \makebox
+@findex \makebox
+
+@code{\makebox[width][position]@{text@}}
+
+The @code{\makebox} command creates a box just wide enough to contain
+the @code{text} specified. The width of the box is specified by the
+optional @code{width} argument. The position of the text within the box
+is determined by the optional @code{position} argument.
+
+@itemize @bullet
+@item
+@code{c} --- centred (default)
+@item
+@code{l} --- flushleft
+@item
+@code{r} --- flushright
+@item
+@code{s} --- stretch from left to right margin. The text must contain
+stretchable space for this to work.
+@end itemize
+
+@xref{\makebox (picture)}.
+
+
+@comment ***************
+@comment ** \mbox ******
+@comment ***************
+
+@comment LEVEL3
+@node \mbox, \newsavebox, \makebox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \mbox
+@findex \mbox
+
+@code{\mbox@{text@}}
+
+The @code{\mbox} command creates a box just wide enough to hold the text
+created by its argument.
+
+Use this command to prevent text from being split across lines.
+
+
+@comment ****************
+@comment ** \newsavebox *
+@comment ****************
+
+@comment LEVEL3
+@node \newsavebox, \parbox, \mbox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \newsavebox
+@findex \newsavebox
+
+@code{\newsavebox@{cmd@}}
+
+Declares @code{cmd}, which must be a command name that is not already
+defined, to be a bin for saving boxes.
+
+
+@comment ***************
+@comment ** \parbox ****
+@comment ***************
+
+@comment LEVEL3
+@node \parbox, \raisebox, \newsavebox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \parbox
+@findex \parbox
+
+@code{\parbox[position][height][inner-pos]@{width@}@{text@}}
+
+A @code{parbox} is a box whose contents are created in @code{paragraph}
+mode. The @code{\parbox} has two mandatory arguments:
+
+@itemize @bullet
+@item
+@code{width} - specifies the width of the parbox, and
+@item
+@code{text} - the text that goes inside the parbox.
+@end itemize
+
+
+LaTeX will position a @code{parbox} so its centre lines up with the centre of
+the text line. The optional @i{position} argument allows you
+to line up either the top or bottom line in the parbox (default is top).
+
+If the @i{height} argument is not given, the box will have the natural
+height of the text.
+
+The @i{inner-pos} argument controls the placement of the text inside the
+box. If it is not specified, @i{position} is used.
+
+@itemize @bullet
+@item
+@code{t} --- text is placed at the top of the box.
+@item
+@code{c} --- text is centred in the box.
+@item
+@code{b} --- text is placed at the bottom of the box.
+@item
+@code{s} --- stretch vertically. The text must contain
+vertically stretchable space for this to work.
+@end itemize
+
+A @code{\parbox} command is used for a parbox containing a small piece
+of text, with nothing fancy inside. In particular, you shouldn't use
+any of the paragraph-making environments inside a @code{\parbox}
+argument. For larger pieces of text, including ones containing a
+paragraph-making environment, you should use a @code{minipage}
+environment @xref{minipage}.
+
+
+@comment ***************
+@comment ** \raisebox **
+@comment ***************
+
+@comment LEVEL3
+@node \raisebox, \rule, \parbox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \raisebox
+@findex \raisebox
+
+@code{\raisebox@{distance@}[extend-above][extend-below]@{text@}}
+
+The @code{\raisebox} command is used to raise or lower text. The first
+mandatory argument specifies how high the text is to be raised (or
+lowered if it is a negative amount). The text itself is processed in
+@code{LR mode}.
+
+
+Sometimes it's useful to make LaTeX think something has a different
+size than it really does - or a different size than LaTeX would
+normally think it has. The @code{\raisebox} command lets you tell
+LaTeX how tall it is.
+
+The first optional argument, @code{extend-above}, makes LaTeX think
+that the text extends above the line by the amount specified. The
+second optional argument, @code{extend-below}, makes LaTeX think that
+the text extends below the line by the amount specified.
+
+
+@comment ***************
+@comment ** \rule ******
+@comment ***************
+
+@comment LEVEL3
+@node \rule, \savebox, \raisebox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \rule
+@findex \rule
+
+@code{\rule[raise-height]@{width@}@{thickness@}}
+
+The @code{\rule} command is used to produce horizontal lines. The
+arguments are defined as follows:
+
+@itemize @bullet
+@item
+@code{raise-height} - specifies how high to raise the rule (optional)
+@item
+@code{width} - specifies the length of the rule (mandatory)
+@item
+@code{thickness} - specifies the thickness of the rule (mandatory)
+@end itemize
+
+
+@comment ***************
+@comment ** \savebox ***
+@comment ***************
+
+@comment LEVEL3
+@node \savebox, \sbox, \rule, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \savebox
+@findex \savebox
+
+@example
+ \savebox@{cmd@}[width][pos]@{text@}
+@end example
+
+This command typeset @code{text} in a box just as for @code{\makebox}.
+However, instead of printing the resulting box, it saves it in bin
+@code{cmd}, which must have been declared with @code{\newsavebox}.
+
+
+@comment ***************
+@comment ** \sbox ******
+@comment ***************
+
+@comment LEVEL3
+@node \sbox, \usebox, \savebox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \sbox
+@findex \sbox
+
+@code{\sbox@{text@}}
+
+This commands typeset @code{text} in a box just as for @code{\mbox}.
+However, instead of printing the resulting box, it saves it in bin
+@code{cmd}, which must have been declared with @code{\newsavebox}.
+
+
+@comment ***************
+@comment ** \usebox ****
+@comment ***************
+
+@comment LEVEL3
+@node \usebox, , \sbox, Spaces & Boxes
+@comment node-name, next, previous, up
+@subsection \usebox
+@findex \usebox
+
+@code{\usebox@{cmd@}}
+
+Prints the box most recently saved in bin @code{cmd} by a
+@code{\savebox} command.
+
+
+
+@page
+
+@comment *************************
+@comment ** Special Characters ***
+@comment *************************
+
+@comment LEVEL2
+@node Special Characters, Splitting the Input, Spaces & Boxes, Commands
+@comment node-name, next, previous, up
+@section Special Characters
+@cindex Special Characters
+@cindex Characters, special
+@cindex Reserved Characters
+@cindex Characters, reserved
+
+The following characters play a special role in LaTeX and are called
+``special printing characters'', or simply ``special characters''.
+
+@example
+ # $ % & ~ _ ^ \ @{ @}
+@end example
+
+Whenever you put one of these special characters into your file, you are
+doing something special. If you simply want the character to be printed
+just as any other letter, include a @code{\} in front of the character.
+For example, @code{\$} will produce @code{$} in your output.
+
+One exception to this rule is the @code{\} itself because @code{\\} has
+its own special meaning. A @code{\} is produced by typing
+@code{$\backslash$} in your file.
+
+Also, @code{\~} means `place a tilde accent over the following letter',
+so you will probably want to use @code{\verb} instead.
+
+@findex \backslash
+@findex \symbol
+@cindex Accessing any character of a font
+
+In addition, you can access any character of a font once you know its
+number by using the @code{\symbol} command. For example, the character
+used for displaying spaces in the @code{\verb*} command has the code
+decimal 32, so it can be typed as @code{\symbol@{32@}}.
+
+You can also specify octal numbers with @code{'} or hexadecimal numbers
+with @code{"}, so the previous example could also be written as
+@code{\symbol@{'40@}} or @code{\symbol@{"20@}}.
+
+
+@comment *************************
+@comment ** Splitting the Input **
+@comment *************************
+
+@comment LEVEL2
+@node Splitting the Input, Starting & Ending, Special Characters, Commands
+@comment node-name, next, previous, up
+@section Splitting the Input
+@cindex Splitting the input file
+@cindex Input file, splitting
+
+
+A large document requires a lot of input. Rather than putting the whole
+input in a single large file, it's more efficient to split it into
+several smaller ones. Regardless of how many separate files you use,
+there is one that is the root file; it is the one whose name you type
+when you run LaTeX.
+
+@menu
+* \include:: Conditionally include a file.
+* \includeonly:: Determine which files are included.
+* \input:: Unconditionally include a file.
+@end menu
+
+
+@comment ***************
+@comment ** \include ***
+@comment ***************
+
+@comment LEVEL3
+@node \include, \includeonly, Splitting the Input, Splitting the Input
+@comment node-name, next, previous, up
+@subsection \include
+@findex \include
+
+@code{\include@{file@}}
+
+The @code{\include} command is used in conjunction with the
+@code{\includeonly} command for selective inclusion of files. The
+@code{file} argument is the first name of a file, denoting
+@file{file.tex}. If @code{file} is one the file names in the file list
+of the @code{\includeonly} command or if there is no @code{\includeonly}
+command, the @code{\include} command is equivalent to
+
+@example
+\clearpage \input@{file@} \clearpage
+@end example
+
+except that if the file @file{file.tex} does not exist, then a warning
+message rather than an error is produced. If the file is not in the
+file list, the @code{\include} command is equivalent to @code{\clearpage}.
+
+The @code{\include} command may not appear in the preamble or in a file
+read by another @code{\include} command.
+
+
+@comment *******************
+@comment ** \includeonly ***
+@comment *******************
+
+@comment LEVEL3
+@node \includeonly, \input, \include, Splitting the Input
+@comment node-name, next, previous, up
+@subsection \includeonly
+@findex \includeonly
+
+@code{\includeonly@{}@i{file_list}@code{@}}
+
+The @code{\includeonly} command controls which files will be read in by
+an @code{\include} command. @i{file_list} should be a comma-separated
+list of filenames. Each filename must match exactly a filename specified
+in a @code{\include} command. This command can only appear in the
+preamble.
+
+@comment ***************
+@comment ** \input *****
+@comment ***************
+
+@comment LEVEL3
+@node \input, , \includeonly, Splitting the Input
+@comment node-name, next, previous, up
+@subsection \input
+@findex \input
+
+@code{\input@{file@}}
+
+The @code{\input} command causes the indicated @code{file} to be read and
+processed, exactly as if its contents had been inserted in the current
+file at that point. The file name may be a complete file name with
+extension or just a first name, in which case the file @file{file.tex}
+is used.
+
+
+@page
+
+@comment *************************
+@comment *** Starting & Ending ***
+@comment *************************
+
+@comment LEVEL2
+@node Starting & Ending, Table of Contents, Splitting the Input, Commands
+@comment node-name, next, previous, up
+@section Starting & Ending
+@cindex Starting & Ending
+@cindex Ending & Starting
+
+Your input file must contain the following commands as a minimum:
+
+@example
+ \documentclass@{class@}
+ \begin@{document@}
+ ... your text goes here ...
+ \end@{document@}
+@end example
+
+where the @code{class} selected is one of the valid classes for LaTeX.
+@xref{Document Classes}, (and @pxref{Overview}), for details of the
+various document classes available locally.
+
+You may include other LaTeX commands between the @code{\documentclass}
+and the @code{\begin@{document@}} commands (i.e., in the `preamble').
+
+@page
+
+@comment *************************
+@comment *** Table of Contents ***
+@comment *************************
+
+@comment LEVEL2
+@node Table of Contents, Terminal Input/Output, Starting & Ending, Commands
+@comment node-name, next, previous, up
+@section Table of Contents
+@cindex Table of Contents, creating
+
+
+A table of contents is produced with the
+@code{\tableofcontents}
+@findex \tableofcontents
+command. You put the command right where you want the table of contents
+to go; LaTeX does the rest for you. It produces a heading, but it does
+not automatically start a new page. If you want a new page after the
+table of contents, include a @code{\newpage} command after the
+@code{\tableofcontents} command.
+
+There are similar commands
+@code{\listoffigures}
+@findex \listoffigures
+and
+@code{\listoftables}
+@findex \listoftables
+ for producing a list of figures and a list of tables, respectively.
+Everything works exactly the same as for the table of contents.
+
+NOTE: If you want any of these items to be generated, you cannot have
+the
+@code{\nofiles}
+@findex \nofiles
+command in your document.
+
+@menu
+* \addcontentsline:: Add an entry to table of contents etc.
+* \addtocontents:: Add text directly to table of contents file etc.
+@end menu
+
+
+@comment ********************
+@comment * \addcontentsline *
+@comment ********************
+
+@comment LEVEL3
+@node \addcontentsline, \addtocontents, Table of Contents, Table of Contents
+@comment node-name, next, previous, up
+@subsection \addcontentsline
+@findex \addcontentsline
+
+@code{\addcontentsline@{file@}@{sec_unit@}@{entry@}}
+
+The @code{\addcontentsline} command adds an entry to the specified list
+or table where:
+
+@itemize @bullet
+@item
+@code{file} is the extension of the file on which information is to be
+written: @code{toc} (table of contents), @code{lof} (list of figures),
+or @code{lot} (list of tables).
+@item
+@code{sec_unit} controls the formatting of the entry. It should be one
+of the following, depending upon the value of the file argument:
+@enumerate
+@item
+@code{toc} --- the name of the sectional unit, such as part or subsection.
+@item
+@code{lof} --- figure
+@item
+@code{lot} --- table
+@end enumerate
+@item
+@code{entry} is the text of the entry.
+@end itemize
+
+
+@comment ******************
+@comment * \addtocontents *
+@comment ******************
+
+@comment LEVEL3
+@node \addtocontents, , \addcontentsline, Table of Contents
+@comment node-name, next, previous, up
+@subsection \addtocontents
+@findex \addtocontents
+
+@code{\addtocontents@{file@}@{text@}}
+
+The @code{\addtocontents} command adds text (or formatting commands) directly
+to the file that generates the table of contents or list of figures or
+tables.
+
+@itemize @bullet
+@item
+@code{file} is the extension of the file on which information is to be
+written: @code{toc} (table of contents), @code{lof} (list of figures),
+or @code{lot} (list of tables).
+@item
+@code{text} is the information to be written.
+@end itemize
+
+
+@page
+
+@comment *************************
+@comment * Terminal Input/Output *
+@comment *************************
+
+@comment LEVEL2
+@node Terminal Input/Output, Typefaces, Table of Contents, Commands
+@comment node-name, next, previous, up
+@section Terminal Input/Output
+@cindex Input/Output
+@cindex Terminal Input/Output
+
+@menu
+* \typein:: Read text from the terminal.
+* \typeout:: Write text to the terminal.
+@end menu
+
+
+@comment **************
+@comment * \typein ****
+@comment **************
+
+@comment LEVEL3
+@node \typein, \typeout, , Terminal Input/Output
+@comment node-name, next, previous, up
+@subsection \typein
+@findex \typein
+
+@code{\typein[cmd]@{msg@}}
+
+
+Prints @code{msg} on the terminal and causes LaTeX to stop and wait for
+you to type a line of input, ending with return. If the @code{cmd}
+argument is missing, the typed input is processed as if it had been
+included in the input file in place of the @code{\typein} command. If
+the @code{cmd} argument is present, it must be a command name. This
+command name is then defined or redefined to be the typed input.
+
+
+@comment **************
+@comment * \typeout ***
+@comment **************
+
+@comment LEVEL3
+@node \typeout, , \typein, Terminal Input/Output
+@comment node-name, next, previous, up
+@subsection \typeout
+@findex \typeout
+
+@code{\typeout@{msg@}}
+
+Prints @code{msg} on the terminal and in the @code{log} file. Commands
+in @code{msg} that are defined with @code{\newcommand} or
+@code{\renewcommand} are replaced by their definitions before being
+printed.
+
+
+LaTeX's usual rules for treating multiple spaces as
+a single space and ignoring spaces after a command name apply to
+@code{msg}. A @code{\space} command in @code{msg} causes a single space
+to be printed. A @code{^^J} in @code{msg} prints a newline.
+
+
+@page
+
+@comment *************************
+@comment ***** Typefaces *********
+@comment *************************
+
+@comment LEVEL2
+@node Typefaces, , Terminal Input/Output, Commands
+@comment node-name, next, previous, up
+@section Typefaces
+@cindex Typefaces
+@cindex Fonts
+
+The @code{typeface} is specified by giving the ``size'' and ``style''. A
+typeface is also called a ``font''.
+
+@menu
+* Styles:: Select roman, italics etc.
+* Sizes:: Select point size.
+* Low-level font commands:: Commands for wizards.
+@end menu
+
+
+@comment **************
+@comment ** Styles ****
+@comment **************
+
+@comment LEVEL3
+@node Styles, Sizes, Typefaces, Typefaces
+@comment node-name, next, previous, up
+@subsection \Styles
+@cindex Font Styles
+@cindex Typeface Styles
+@cindex Styles of text
+
+
+The following type style commands are supported by LaTeX.
+
+These commands are used like @code{\textit@{italics text@}}. The
+corresponding command in parenthesis is the ``declaration form'', which
+takes no arguments. The scope of the declaration form lasts until the
+next type style command or the end of the current group.
+
+The declaration forms are cumulative; i.e., you can say
+@code{\sffamily\bfseries} to get sans serif boldface.
+
+You can also use the environment form of the declaration forms; e.g.
+@code{\begin@{ttfamily@}...\end@{ttfamily@}}.
+
+@table @code
+@item \textrm (\rmfamily)
+@findex \textrm
+@findex \rmfamily
+Roman.
+@item \textit (\itshape)
+@findex \textit
+@findex \itshape
+@item \emph
+@findex \emph
+Emphasis (toggles between \textit and \textrm).
+@item \textmd (\mdseries)
+@findex \textmd
+@findex \mdseries
+Medium weight (default). The opposite of boldface.
+@item \textbf (\bfseries)
+@findex \textbf
+@findex \bfseries
+Boldface.
+@item \textup (\upshape)
+@findex \textup
+@findex \upshape
+Upright (default). The opposite of slanted.
+@item \textsl (\slshape)
+@findex \textsl
+@findex \slshape
+Slanted.
+@item \textsf (\sffamily)
+@findex \textsf
+@findex \sffamily
+Sans serif.
+@item \textsc (\scshape)
+@findex \textsc
+@findex \scshape
+Small caps.
+@item \texttt (\ttfamily)
+@findex \texttt
+@findex \ttfamily
+Typewriter.
+@item \textnormal (\normalfont)
+@findex \textnormal
+@findex \normalfont
+Main document font.
+@item \mathrm
+@findex \mathrm
+Roman, for use in math mode.
+@item \mathbf
+@findex \mathbf
+Boldface, for use in math mode.
+@item \mathsf
+@findex \mathsf
+Sans serif, for use in math mode.
+@item \mathtt
+@findex \mathtt
+Typewriter, for use in math mode.
+@item \mathit
+@findex \mathit
+Italics, for use in math mode, e.g. variable names with several letters.
+@item \mathnormal
+@findex \mathnormal
+For use in math mode, e.g. inside another type style declaration.
+@item \mathcal
+@findex \mathcal
+`Calligraphic' letters, for use in math mode.
+@end table
+
+In addition, the command
+@code{\mathversion@{bold@}}
+@findex \mathversion
+can be used for switching to bold letters and symbols in
+formulas. @code{\mathversion@{normal@}} restores the default.
+
+
+@comment **************
+@comment ** Sizes *****
+@comment **************
+
+@comment LEVEL3
+@node Sizes, Low-level font commands, Styles, Typefaces
+@comment node-name, next, previous, up
+@subsection Sizes
+@cindex Font Sizes
+@cindex Typeface Sizes
+@cindex Sizes of text
+
+
+The following standard type size commands are supported by LaTeX.
+
+The commands as listed here are "declaration forms". The scope of the
+declaration form lasts until the next type style command or the end of
+the current group.
+
+You can also use the environment form of these commands; e.g.
+@code{\begin@{tiny@}...\end@{tiny@}}.
+
+@table @code
+@item \tiny
+@findex \tiny
+
+@item \scriptsize
+@findex \scriptsize
+
+@item \footnotesize
+@findex \footnotesize
+
+@item \small
+@findex \small
+
+@item \normalsize
+@findex \normalsize
+(default)
+
+@item \large
+@findex \large
+
+@item \Large
+@findex \Large
+
+@item \LARGE
+@findex \LARGE
+
+@item \huge
+@findex \huge
+
+@item \Huge
+@findex \Huge
+@end table
+
+
+@comment ********************************
+@comment ** Low-level font commands *****
+@comment ********************************
+
+@comment LEVEL3
+@node Low-level font commands, , Sizes, Typefaces
+@comment node-name, next, previous, up
+@subsection Low-level font commands
+@cindex Low-level font commands
+@cindex Font commands, low-level
+
+These commands are primarily intended for writers of macros and
+packages. The commands listed here are only a subset of the available
+ones. For full details, you should consult Chapter 7 of @cite{The LaTeX
+Companion}.
+
+
+@table @code
+@item \fontencoding@{enc@}
+@findex \fontencoding
+Select font encoding. Valid encodings include @code{OT1} and @code{T1}.
+
+@item \fontfamily@{family@}
+@findex \fontfamily
+Select font family. Valid families include:
+
+@itemize @bullet
+@item @code{cmr} for Computer Modern Roman
+@item @code{cmss} for Computer Modern Sans Serif
+@item @code{cmtt} for Computer Modern Typewriter
+@end itemize
+
+and numerous others.
+
+@item \fontseries@{series@}
+@findex \fontseries
+Select font series. Valid series include:
+
+@itemize @bullet
+@item @code{m} Medium (normal)
+@item @code{b} Bold
+@item @code{c} Condensed
+@item @code{bc} Bold condensed
+@item @code{bx} Bold extended
+@end itemize
+
+and various other combinations.
+
+@item \fontshape@{shape@}
+@findex \fontshape
+Select font shape. Valid shapes are:
+
+@itemize @bullet
+@item @code{n} Upright (normal)
+@item @code{it} Italic
+@item @code{sl} Slanted (oblique)
+@item @code{sc} Small caps
+@item @code{ui} Upright italics
+@item @code{ol} Outline
+@end itemize
+
+The two last shapes are not available for most font families.
+
+@item \fontsize@{size@}@{skip@}
+@findex \fontsize
+Set font size. The first parameter is the font size to switch to; the
+second is the @code{\baselineskip} to use. The unit of both parameters
+defaults to pt. A rule of thumb is that the baselineskip should be 1.2
+times the font size.
+
+@item \selectfont
+@findex \selectfont
+The changes made by calling the four font commands described above do
+not come into effect until @code{\selectfont} is called.
+
+@item \usefont@{enc@}@{family@}@{series@}@{shape@}
+@findex \usefont
+Equivalent to calling @code{\fontencoding}, @code{\fontfamily},
+@code{\fontseries} and @code{\fontshape} with the given parameters, followed by @code{\selectfont}.
+@end table
+
+
+
+
+@page
+@comment ****************************************
+@comment ************* PARAMETERS ***************
+@comment ****************************************
+
+@comment LEVEL1
+@node Parameters, Concept Index, Commands, Top
+@comment node-name, next, previous, up
+@chapter Parameters
+
+
+The input file specification indicates the file to be formatted; TeX
+uses @file{.tex} as a default file extension. If you omit the input file
+entirely, TeX accepts input from the terminal. You specify command
+options by supplying a string as a parameter to the command; e.g.
+
+@code{latex ``\scrollmode\input foo.tex''}
+
+will process @file{foo.tex} without pausing after every error.
+
+Output files are always created in the current directory. When you fail
+to specify an input file name, TeX bases the output names on the file
+specification associated with the logical name TEX_OUTPUT, typically
+@code{texput.log}.
+
+@page
+
+
+@comment ***************************
+@comment ******* INDICES ********
+@comment ***************************
+
+@comment LEVEL1
+@node Concept Index, Command Index, Parameters, Top
+@comment node-name, next, previous, up
+@unnumbered Concept Index
+
+@printindex cp
+
+@comment LEVEL1
+@node Command Index, , Concept Index, Top
+@comment node-name, next, previous, up
+@unnumbered Command Index
+
+@printindex fn
+
+@contents
+
+@bye
diff --git a/Build/source/texk/tetex/makempy.man b/Build/source/texk/tetex/makempy.man
new file mode 100644
index 00000000000..02cae248c54
--- /dev/null
+++ b/Build/source/texk/tetex/makempy.man
@@ -0,0 +1,60 @@
+.TH makempy "1" "May 2004" "teTeX " "ConTeXt"
+.SH NAME
+makempy \- Helper script for conversion of (PDF or PostScript) text to
+\fBMetapost\fP graphics
+.PP
+.SH "SYNOPSIS"
+\fBmakempy\fP \fIfilenam\fP
+.PP
+.SH DESCRIPTION
+.PP
+\fBmakempy\fP takes \fBMetapost\fP output files (*\&.mpo) and
+translates them to *\&.mpy files. In order to include text as a
+graphic into a file typeset with (Con)TeX(t), you extract the text
+from Postscript of PDF files using \fBpdftops\fP and \fBpstoedit\fP,
+creating a Metapost input file.
+.PP
+This file can then be processed by \fBmakempy\fP. The \fBmakempy\fP
+script does its work without user intervention. When it deduces that
+there are no changes, it will not run at all, otherwise it will report
+its steps and/or encountered error.
+.SH "OPTIONS"
+.IP
+.IP "\fB--help\fP"
+returns some basic help information
+.IP
+.IP "\fB--silent\fP"
+don t report status messages
+.IP
+.IP "\fB--force\fP"
+always process the file (no checksum test)
+.IP
+.IP "\fB--noclean\fP"
+don t remove temporary files when finished
+.IP
+.IP "\fB--acrobat\fP"
+use ACROBAT for conversion (only unix)
+.IP
+.IP "\fB--pdftops\fP"
+use PDFTOPS for conversion
+.IP
+.IP "\fB--ghostscript\fP"
+use GHOSTSCRIPT for conversion
+.IP
+.SH "VARIABLES"
+.PP
+When set, the environment variables GS and GS_PROG will be used to
+identify GHOSTSCRIPT. If needed, the names of the other programs that
+are used can be set with PDFTOPS, ACROREAD and PSTOEDIT.
+.HP
+.SH "SEE ALSO"
+.PP
+\fBtexexec\fP(1)\&.
+.PP
+The makempy manual, \fImmakempy\&.pdf\fP\&.
+.PP
+.SH "AUTHOR"
+.IP
+This manual page was written by Frank Küster <frank@kuesterei\&.ch>,
+for the Debian GNU/Linux system\&. It may be used and modified by
+others without contacting the author\&.
diff --git a/Build/source/texk/tetex/mkocp.man b/Build/source/texk/tetex/mkocp.man
new file mode 100644
index 00000000000..c35c967225e
--- /dev/null
+++ b/Build/source/texk/tetex/mkocp.man
@@ -0,0 +1,50 @@
+.TH "mkocp" "1" "September 2000" "Omega" "Omega"
+.PP
+.SH "NAME"
+mkocp \- frontend to \fBotp2ocp\fP(1)
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBmkocp\fP \fIOTPFILE\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBmkocp\fP is used to create or recreate Omega Compiled Process files
+(binary) from Omega Translation Process (text) files\&.
+.PP
+Omega Translation Processes are used to translate one character set to
+another and to choose between characters with one or more
+context-sensitive variants\&. OTPs could also be used to change the
+case or hyphenation of text\&.
+.PP
+OTPs are defined in text files, and compiled into binary code (OCPs)
+using \fBmkocp\fP (this script) or directly with \fBotp2ocp\fP(1)\&.
+.PP
+.SH "FILES"
+.IP "\fIOTPFILE\fP"
+An Omega Typesetting Process filter file\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBomega\fP(1), \fBotp2ocp\fP(1)\&.
+.PP
+\fIDraft Manual for the Omega System\fP (\fIomega-manual\&.dvi\fP)\&.
+.PP
+Web page: <http://www\&.gutenberg\&.eu\&.org/omega/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to <omega@ens\&.fr> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBmkocp\fP is part of Omega\&. The primary authors of Omega are John Plaice
+<plaice@cse\&.unsw\&.edu\&.au> and Yannis Haralambous
+<yannis@fluxus-virus\&.com>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/mkofm.man b/Build/source/texk/tetex/mkofm.man
new file mode 100644
index 00000000000..9c38a4301a6
--- /dev/null
+++ b/Build/source/texk/tetex/mkofm.man
@@ -0,0 +1,33 @@
+.TH "mkofm" "1" "September 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+mkofm \- front end to \fBmktextfm\fP(1)
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBmkofm\fP \fIARGS\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBmkofm\fP takes all \fIARGS\fP and passes them to
+\fBmktextfm\fP(1)\&. For more information about appropriate
+arguments, see \fBmktextfm\fP(1)\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBmktextfm\fP(1)
+.PP
+.SH "BUGS"
+.PP
+None known\&.
+.PP
+.SH "AUTHOR"
+.PP
+Author unknown\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/ofm2opl.man b/Build/source/texk/tetex/ofm2opl.man
new file mode 100644
index 00000000000..adc4de3ec3c
--- /dev/null
+++ b/Build/source/texk/tetex/ofm2opl.man
@@ -0,0 +1,91 @@
+.TH "ofm2opl" "1" "September 2000" "Omega" "Omega"
+.PP
+.SH "NAME"
+ofm2opl \- convert Omega and TeX font-metric files to
+property-list files
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBofm2opl\fP [ \fIOPTION\fP\&.\&.\&. ] \fIOFMNAME\fP[\&.ofm] [
+\fIOPLFILE\fP[\&.opl] ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBofm2opl\fP translates a binary Omega Font Metrics file,
+\fIOFMNAME\fP, into a human-readable property-list form\&. The
+program writes to standard output (by default) or to a file specified
+as \fIOPLFILE\fP\&.
+.PP
+The program also works with TeX TFM files, producing TeX PL files\&.
+(\fBofm2opl\fP is based on the WEB source code for \fBtftopl\fP(1)\&.)
+.PP
+.SH "OPTIONS"
+.PP
+.IP
+.IP "\fB-charcode-format=\fP\fITYPE\fP"
+output character codes
+according to \fITYPE\fP,
+which can be either `hex\&'
+or `ascii\&'\&. Default is
+`hex\&'\&. ascii specifes all
+ASCII letters and digits;
+hex gets you everything
+else\&.
+.IP
+.IP "\fB-help\fP"
+display a brief summary of syntax and options
+.IP "\fB-verbose\fP"
+display progress reports
+.IP "\fB-version\fP"
+output version information and exit
+.IP
+.PP
+.SH "FILES"
+.PP
+.IP "\fIOFMNAME\fP"
+an Omega Font Metric file
+.IP "\fIOPLFILE\fP"
+an Omega Property List file
+.PP
+.SH "BUGS"
+.PP
+None known, but report any found to <omega@ens\&.fr> (mailing list)\&. You may also want to
+check to see if the same bug is present in \fBpltotf\fP(1)\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBomega\fP(1), \fBopl2ofm\fP(1), \fBpltotf\fP(1),
+\fBtftopl\fP(1)\&.
+.PP
+\fIDraft Manual for the Omega System\fP (\fIomega-manual\&.dvi\fP)\&.
+.PP
+Web page: <http://www\&.gutenberg\&.eu\&.org/omega/>
+.PP
+.SH "AUTHOR"
+.PP
+According to the WEB documentation:
+.PP
+.RS
+The first \fBTFtoPL\fP program was designed by Leo Guibas in the
+summer of 1978\&. Contributions by Frank Liang, Doug Wyatt, and Lyle
+Ramshaw also had a significant effect on the evolution of the present
+code\&.
+.PP
+Extensions for an enhanced ligature mechanism were added by D\&.E\&. Knuth
+in 1989\&.
+.PP
+Extensions to handle extended font metric files (``OFM\&'\&') were added
+by John Plaice in December 1995 and January 1996, resulting in the new
+program \fBOFM2OPL\fP\&.
+.RE
+.PP
+The primary authors of Omega are John Plaice
+<plaice@cse\&.unsw\&.edu\&.au> and Yannis Haralambous
+<yannis@fluxus-virus\&.com>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/opl2ofm.man b/Build/source/texk/tetex/opl2ofm.man
new file mode 100644
index 00000000000..425ff8e0adc
--- /dev/null
+++ b/Build/source/texk/tetex/opl2ofm.man
@@ -0,0 +1,74 @@
+.TH "opl2ofm" "1" "September 2000" "Omega" "Omega"
+.PP
+.SH "NAME"
+opl2ofm \- convert Omega and TeX property-list files to
+font-metric files
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBopl2ofm\fP [ \fIOPTION\fP\&.\&.\&. ] \fIOPLFILE\fP[\&.opl] [
+\fIOFMFILE\fP[\&.ofm] ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBopl2ofm\fP translates a property-list format file, \fIOPLFILE\fP,
+into the binary Omega Font Metric format\&. The program writes to
+standard output (by default) or to a file specified as
+\fIOFMFILE\fP\&.
+.PP
+The program also works with TeX PL files, producing TeX TFM files\&.
+(\fBopl2ofm\fP is based on the WEB source code for \fBpltotf\fP(1)\&.)
+.PP
+.SH "OPTIONS"
+.PP
+.IP
+.IP "\fB-help\fP"
+display a brief summary of syntax and options
+.IP "\fB-verbose\fP"
+display progress reports
+.IP "\fB-version\fP"
+output version information and exit
+.IP
+.PP
+.SH "BUGS"
+.PP
+None known, but report any found to <omega@ens\&.fr> (mailing list)\&. You should also
+check to see if the bug is present in \fBpltotf\fP(1)\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBomega\fP(1), \fBofm2opl\fP(1), \fBpltotf\fP(1),
+\fBtftopl\fP(1)\&.
+.PP
+\fIDraft Manual for the Omega System\fP (\fIomega-manual\&.dvi\fP)\&.
+.PP
+Web page: <http://www\&.gutenberg\&.eu\&.org/omega/>
+.PP
+.SH "AUTHOR"
+.PP
+According to the WEB documentation:
+.PP
+.RS
+The first \fBPLtoTF\fP program was designed by Leo Guibas in the
+summer of 1978\&. Contributions by Frank Liang, Doug Wyatt, and Lyle
+Ramshaw also had a significant effect on the evolution of the present
+code\&.
+.PP
+Extensions for an enhanced ligature mechanism were added by D\&.E\&. Knuth
+in 1989\&.
+.PP
+Extensions to handle extended font metric files (``OFM\&'\&') were added
+by John Plaice in December 1995 and January 1996, resulting in the new
+program \fBOPL2OFM\fP\&.
+.RE
+.PP
+The primary authors of Omega are John Plaice
+<plaice@cse\&.unsw\&.edu\&.au> and Yannis Haralambous
+<yannis@fluxus-virus\&.com>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/otp2ocp.man b/Build/source/texk/tetex/otp2ocp.man
new file mode 100644
index 00000000000..c111acc49d3
--- /dev/null
+++ b/Build/source/texk/tetex/otp2ocp.man
@@ -0,0 +1,41 @@
+.TH "otp2ocp" "1" "September 2000" "Omega" "Omega"
+.PP
+.SH "NAME"
+otp2ocp \- convert Omega Translation Process files to Omega
+Compiled Process files
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBotp2ocp\fP \fIOTPFILE\fP[\&.otp] [ \fIOCPFILE\fP[\&.ocp] ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBotp2ocp\fP is used to create or recreate Omega Compiled Process
+files (binary) from Omega Translation Process (text) files\&.
+.PP
+Omega Translation Processes are rules used to translate one character
+set to another and to choose between characters with one or more
+context-sensitive variants\&. OTPs could also be used to change the
+case or hyphenation of text\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBmkocp\fP(1), \fBomega\fP(1)\&.
+.PP
+\fIDraft Manual for the Omega System\fP (\fIomega-manual\&.dvi\fP)\&.
+.PP
+Web page: <http://www\&.gutenberg\&.eu\&.org/omega/>
+.PP
+.SH "AUTHOR"
+.PP
+The primary authors of Omega are John Plaice
+<plaice@cse\&.unsw\&.edu\&.au> and Yannis Haralambous
+<yannis@fluxus-virus\&.com>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
+.PP
diff --git a/Build/source/texk/tetex/outocp.man b/Build/source/texk/tetex/outocp.man
new file mode 100644
index 00000000000..ee803d9be67
--- /dev/null
+++ b/Build/source/texk/tetex/outocp.man
@@ -0,0 +1,44 @@
+.TH "outocp" "1" "September 2000" "Omega" "Omega"
+.PP
+.SH "NAME"
+outocp \- debug an OCP file
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBoutocp\fP \fIOCPFILE\fP[\&.ocp]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBoutocp\fP is used for debugging Omega Compiled Translation Process
+(OCP) files\&. It generates some statistics about the OCP file, and
+then runs through the states that the file defines\&.
+.PP
+Omega Translation Processes are rules used to translate one character
+set to another and to choose between characters with one or more
+context-sensitive variants\&. OTPs could also be used to change the
+case or hyphenation of text\&.
+.PP
+.SH "BUGS"
+.PP
+None known, but report any found to <omega@ens\&.fr> (mailing list)\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBocp2otp\fP(1), \fBotp2ocp\fP(1), \fBomega\fP(1)\&.
+.PP
+\fIDraft Manual for the Omega System\fP (\fIomega-manual\&.dvi\fP)\&.
+.PP
+Web page: <http://www\&.gutenberg\&.eu\&.org/omega/>
+.PP
+.SH "AUTHOR"
+.PP
+The primary authors of Omega are John Plaice
+<plaice@cse\&.unsw\&.edu\&.au> and Yannis Haralambous
+<yannis@fluxus-virus\&.com>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/ovf2ovp.man b/Build/source/texk/tetex/ovf2ovp.man
new file mode 100644
index 00000000000..86fbbb56dd9
--- /dev/null
+++ b/Build/source/texk/tetex/ovf2ovp.man
@@ -0,0 +1,87 @@
+.TH "ovf2ovp" "1" "September 2000" "Omega" "Omega"
+.PP
+.SH "NAME"
+ovf2ovp \- convert a virtual font file and its associated
+font metric file into property-list format
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBovf2ovp\fP [ \fIOPTION\fP\&.\&.\&. ] \fIOVFNAME\fP[\&.ovf] [ [
+\fIOFMNAME\fP[\&.ofm] ] [ \fIOVPFILE\fP[\&.ovp] ] ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBovf2ovp\fP translates a virtual font (OVF) file, \fIOVFNAME\fP,
+and its companion font metric (OFM) file, \fIOFMNAME\fP, into a
+human-readable property-list format\&. The program writes to standard
+output (by default) or to a file specified as \fIOVPNAME\fP\&.
+.PP
+The program also works with TeX VF and TFM files, producing TeX VP
+files\&. (\fBovf2ovp\fP is based on the WEB source code for
+\fBvftovp\fP(1)\&.)
+.PP
+.SH "OPTIONS"
+.PP
+.IP
+.IP "\fB-charcode-format=\fP\fITYPE\fP"
+output character codes
+according to \fITYPE\fP, which can be either `hex\&' or `ascii\&'\&.
+Default is `hex\&'\&. ascii specifes all ASCII letters and digits; hex
+gets you everything else\&.
+.IP
+.IP "\fB-help\fP"
+display a brief summary of syntax and options
+.IP "\fB-verbose\fP"
+display progress reports
+.IP "\fB-version\fP"
+output version information and exit
+.IP
+.PP
+.SH "FILES"
+.PP
+.IP "\fIOVPFILE\fP"
+Omega Virtual Property List file
+.IP "\fIOFMNAME\fP"
+Omega Font Metric file
+.IP "\fIOVFNAME\fP"
+Omega Virtual Font file
+.PP
+.SH "BUGS"
+.PP
+None known, but report any found to <omega@ens\&.fr> (mailing list)\&. You should also
+check to see if the bug is also in \fBvftovp\fP(1)\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBomega\fP(1), \fBofm2opl\fP(1), \fBovp2ovf\fP(1),
+\fBpltotf\fP(1), \fBtftopl\fP(1), \fBvftovp\fP(1),
+\fBvptovf\fP(1)
+.PP
+\fIDraft Manual for the Omega System\fP (\fIomega-manual\&.dvi\fP)\&.
+.PP
+Web page: <http://www\&.gutenberg\&.eu\&.org/omega/>
+.PP
+.SH "AUTHOR"
+.PP
+According to the WEB documentation:
+.PP
+.RS
+\fBVFtoVP\fP is an extended version of the program \fBTFtoPL\fP,
+which is part of the standard tex()ware library\&. The idea of a
+virtual font was inspired by the work of David R\&. Fuchs who designed a
+similar set of conventions in 1984 while developing a device driver
+for ArborText, Inc\&. He wrote a somewhat similar program called
+\fBAMFtoXPL\fP\&.
+.RE
+.PP
+The primary authors of Omega are John Plaice
+<plaice@cse\&.unsw\&.edu\&.au> and Yannis Haralambous
+<yannis@fluxus-virus\&.com>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
+.PP
diff --git a/Build/source/texk/tetex/ovp2ovf.man b/Build/source/texk/tetex/ovp2ovf.man
new file mode 100644
index 00000000000..2793db27eda
--- /dev/null
+++ b/Build/source/texk/tetex/ovp2ovf.man
@@ -0,0 +1,78 @@
+.TH "ovp2ovf" "1" "September 2000" "Omega" "Omega"
+.PP
+.SH "NAME"
+ovp2ovf \- convert a virtual property-list file into a
+virtual font file and its associated font metric file
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBovp2ovf\fP [ \fIOPTION\fP\&.\&.\&. ] \fIOVPFILE\fP[\&.ovp] [ [
+\fIOVFFILE\fP[\&.ovf] ] [ \fIOFMFILE\fP[\&.ofm] ] ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBovp2ovf\fP translates a human-readable virtual property list (OVP)
+file, \fIOVPFILE\fP, into a virtual font (OVF) file, \fIOVFFILE\fP
+and its companion font metric (OFM) file, \fIOFMFILE\fP\&.
+.PP
+The program also works with TeX VP files, producing VF and TFM files\&.
+(\fBovp2ovf\fP is based on the WEB source code for \fBvptovf\fP(1)\&.)
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB-help\fP"
+display a brief summary of syntax and options
+.IP "\fB-verbose\fP"
+display progress reports
+.IP "\fB-version\fP"
+output version information and exit
+.IP
+.PP
+.SH "FILES"
+.IP "\fIOFMFILE\fP"
+Omega Font Metric file
+.IP "\fIOVFFILE\fP"
+Omega Virtual Font file
+.IP "\fIOVPFILE\fP"
+Omega Virtual Property List file
+.PP
+.SH "BUGS"
+.PP
+None known, but report any found to <omega@ens\&.fr> (mailing list)\&. You should also
+check to see if the bug is in \fBvptovf\fP(1)\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBomega\fP(1), \fBofm2opl\fP(1), \fBovf2ovp\fP(1),
+\fBpltotf\fP(1), \fBtftopl\fP(1), \fBvftovp\fP(1),
+\fBvptovf\fP(1)
+.PP
+\fIDraft Manual for the Omega System\fP (\fIomega-manual\&.dvi\fP)\&.
+.PP
+Web page: <http://www\&.gutenberg\&.eu\&.org/omega/>
+.PP
+.SH "AUTHOR"
+.PP
+According to the WEB documentation:
+.PP
+.RS
+\fBVPtoVF\fP is an extended version of the program \fBPLtoTF\fP,
+which is part of the standard TeXware library\&. \fBOVP2OVF\fP is an
+extended version of \fBVPtoVF\fP that allows much larger fonts\&. The
+idea of a virtual font was inspired by the work of David R\&. Fuchs who
+designed a similar set of conventions in 1984 while developing a
+device driver for ArborText, Inc\&. He wrote a somewhat similar program
+called \fBPLFONT\fP\&.
+.RE
+.PP
+The primary authors of Omega are John Plaice
+<plaice@cse\&.unsw\&.edu\&.au> and Yannis Haralambous
+<yannis@fluxus-virus\&.com>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
+.PP
diff --git a/Build/source/texk/tetex/pdfetex-pl.pool b/Build/source/texk/tetex/pdfetex-pl.pool
new file mode 100644
index 00000000000..a481c6f2eeb
--- /dev/null
+++ b/Build/source/texk/tetex/pdfetex-pl.pool
@@ -0,0 +1,1652 @@
+02.2
+15wielko¶æ bufora
+13wielko¶æ puli
+14liczba napisów
+03???
+13m2d5c2l5x2v5i
+25Koniec pliku z terminala!
+02!
+43(Jest ju¿ 100 b³êdów; spróbuj jeszcze raz.)
+02?
+72<Enter> -- dalej, S -- kontynuacja z przewijaniem komunikatów o b³êdach,
+57R -- kontynuacja bez zatrzymywania, Q -- bez komunikatów,
+21I -- aby co¶ wpisaæ,
+33E -- aby przej¶æ do edycji pliku,
+711 lub ... lub 9 -- aby pomin±æ od 1 do 9 nastêpnych leksemów z wej¶cia,
+57H -- aby otrzymaæ pomoc, X -- aby przerwaæ przetwarzanie.
+17OK, przechodzê w
+09batchmode
+11nonstopmode
+10scrollmode
+03...
+06wpisz>
+45Zgodnie z ¿yczeniem usun±³em fragment tekstu.
+50Mo¿esz teraz usun±æ wiêcej tekstu albo wpisaæ co¶.
+43Niestety nie potrafiê pomóc w tej sytuacji.
+43Mo¿e powiniene¶ poprosiæ o pomoc cz³owieka?
+32Niestety, pomog³em ile mog³em...
+58B³±d móg³ wyst±piæ zanim zauwa¿y³em jakiekolwiek problemy.
+48Je¶li wszystko zawiod³o, zajrzyj do podrêcznika.
+02 (
+20Zatrzymanie awaryjne
+38Niestety przekroczono pojemno¶æ TeXa [
+48Je¶li naprawdê potrzebujesz wiêkszej pojemno¶ci,
+52to mo¿esz poprosiæ czarodzieja, aby mnie powiêkszy³.
+25To nie mo¿e siê zdarzyæ (
+64To mnie dobi³o. Poka¿ to komu¶, kto potrafi co¶ takiego naprawiæ
+31Nie mogê spe³niæ Twoich wymagañ
+61Prawdobodobnie jeden z Twoich b³êdów bardzo mnie uszkodzi³...
+76w rzeczy samej, jestem ledwie przytomny. Popraw b³êdy i spróbuj jeszcze raz.
+10Przerwanie
+16Kto¶ mnie wo³a³?
+53Mo¿esz wpisaæ polecenia dla mnie (np. `I\showlists'),
+53chyba, ¿e chcesz przerwaæ przetwarzanie wpisuj±c `X'.
+13Logarithm of
+23 has been replaced by 0
+48Since I don't take logs of non-positive numbers,
+52I'm zeroing this one. Proceed, with fingers crossed.
+69wielko¶æ podstawowej pamiêci (na pude³ka, klej, leksemy, znaki, etc.)
+25lista `AVAIL' zamazana w
+32lista `double-AVAIL' zamazana w
+24Pozycja `doubly free' w
+20Niepoprawna flaga w
+17Nowa `busy locs':
+05LINK(
+05INFO(
+02[]
+09ZAMAZANE.
+07kolizja
+03fil
+06 plus
+07 minus
+03 []
+41£±cze uszkodzone, przerywam wy¶wietlanie.
+04etc.
+04kern
+14 (left margin)
+15 (right margin)
+19Nieznany typ wêz³a!
+05unset
+04box(
+02)x
+14, przesuniête
+08 kolumn)
+16, rozci±gniêcie
+13, skurczenie
+17, klej wstawiony
+02-
+03< -
+05rule(
+06insert
+23, naturalnego rozmiaru
+14; rozdzielono(
+26); koszt wstawki ruchomej
+04glue
+09nonscript
+05mskip
+02mu
+00
+08leaders
+14 (dla akcentu)
+05mkern
+03end
+05begin
+04math
+02on
+03off
+11, otoczone
+11 (ligatura
+08penalty
+13discretionary
+11 zamieniam
+04mark
+07vadjust
+05 pre
+09opró¿niam
+07kopiujê
+12tryb pionowy
+12tryb poziomy
+29eksponowany tryb matematyczny
+07no mode
+23wewnêtrzny tryb pionowy
+23wewnêtrzny tryb poziomy
+17tryb matematyczny
+19' w trybie pionowym
+19' w trybie poziomym
+37' w trybie matematycznym eksponowanym
+12' in no mode
+31' w wewnêtrznym trybie pionowym
+31' w wewnêtrznym trybie poziomym
+24' w trybie matematycznym
+39liczba jednocze¶nie konstruowanych list
+04###
+22 rozpoczêto w wierszu
+07 (jêzyk
+10:hyphenmin
+20 (procedura \output)
+26### ostatnich przyczynków:
+10prevdepth
+09pominiêto
+11, prevgraf
+13 wierszy(-ów)
+07 wiersz
+12spacefactor
+16, bie¿±cy jêzyk
+27to bêdzie mianownikiem dla:
+08lineskip
+12baselineskip
+07parskip
+16abovedisplayskip
+16belowdisplayskip
+21abovedisplayshortskip
+21belowdisplayshortskip
+08leftskip
+09rightskip
+07topskip
+12splittopskip
+07tabskip
+09spaceskip
+10xspaceskip
+11parfillskip
+10thinmuskip
+09medmuskip
+11thickmuskip
+30[nieznany parametr dla kleju!]
+04skip
+06muskip
+02pt
+06output
+08everypar
+09everymath
+12everydisplay
+09everyhbox
+09everyvbox
+08everyjob
+07everycr
+07errhelp
+12pdfpagesattr
+11pdfpageattr
+16pdfpageresources
+09pdfpkmode
+04toks
+04ETC.
+03box
+04void
+12bie¿±cy font
+08textfont
+10scriptfont
+16scriptscriptfont
+07catcode
+06lccode
+06uccode
+06sfcode
+08mathcode
+12pretolerance
+09tolerance
+11linepenalty
+13hyphenpenalty
+15exhyphenpenalty
+11clubpenalty
+12widowpenalty
+19displaywidowpenalty
+13brokenpenalty
+12binoppenalty
+10relpenalty
+17predisplaypenalty
+18postdisplaypenalty
+16interlinepenalty
+20doublehyphendemerits
+19finalhyphendemerits
+11adjdemerits
+03mag
+15delimiterfactor
+09looseness
+04time
+03day
+05month
+04year
+14showboxbreadth
+12showboxdepth
+08hbadness
+08vbadness
+07pausing
+13tracingonline
+13tracingmacros
+12tracingstats
+17tracingparagraphs
+12tracingpages
+13tracingoutput
+16tracinglostchars
+15tracingcommands
+15tracingrestores
+06uchyph
+13outputpenalty
+13maxdeadcycles
+09hangafter
+15floatingpenalty
+10globaldefs
+03fam
+10escapechar
+17defaulthyphenchar
+15defaultskewchar
+11endlinechar
+11newlinechar
+08language
+13lefthyphenmin
+14righthyphenmin
+14holdinginserts
+17errorcontextlines
+13charsubdefmin
+13charsubdefmax
+17tracingcharsubdef
+08mubytein
+09mubyteout
+09mubytelog
+10specialout
+16pdfadjustspacing
+16pdfprotrudechars
+15pdftracingfonts
+09pdfoutput
+16pdfcompresslevel
+16pdfdecimaldigits
+12pdfmovechars
+18pdfimageresolution
+15pdfpkresolution
+16pdfuniqueresname
+28pdfoptionalwaysusepdfpagebox
+31pdfoptionpdfinclusionerrorlevel
+15pdfminorversion
+15pdfforcepagebox
+22pdfinclusionerrorlevel
+08pdfgamma
+13pdfimagegamma
+15pdfimagehicolor
+18pdfimageapplygamma
+10pdfpxdimen
+38[nieznany parametr ca³kowitoliczbowy!]
+24pdfoptionpdfminorversion
+05count
+07delcode
+09parindent
+12mathsurround
+13lineskiplimit
+05hsize
+05vsize
+08maxdepth
+13splitmaxdepth
+11boxmaxdepth
+05hfuzz
+05vfuzz
+18delimitershortfall
+18nulldelimiterspace
+11scriptspace
+14predisplaysize
+12displaywidth
+13displayindent
+12overfullrule
+10hangindent
+07hoffset
+07voffset
+16emergencystretch
+10pdfhorigin
+10pdfvorigin
+12pdfpagewidth
+13pdfpageheight
+13pdflinkmargin
+13pdfdestmargin
+15pdfthreadmargin
+18pdffirstlineheight
+16pdflastlinedepth
+17pdfeachlineheight
+16pdfeachlinedepth
+33[nieznany parameter dla wymiaru!]
+05dimen
+06EQUIV(
+15nie rozwiniête:
+13rozmiar hasza
+06csname
+09endcsname
+11NIEMO¯LIWE.
+14NIEISTNIEJ¡CY.
+06accent
+07advance
+15afterassignment
+10aftergroup
+10begingroup
+04char
+09delimiter
+06divide
+09endmubyte
+08endgroup
+11expandafter
+04font
+09fontdimen
+06halign
+05hrule
+12ignorespaces
+10mathaccent
+08mathchar
+10mathchoice
+08multiply
+07noalign
+10noboundary
+08noexpand
+04omit
+08parshape
+07penalty
+08prevgraf
+07radical
+04read
+05relax
+06setbox
+03the
+06valign
+07vcenter
+05vrule
+62Liczba elementów do odtworzenia po zakoñczeniu sk³adania grupy
+19poziomów grupowania
+20zmieniam przypisanie
+08zmieniam
+02na
+18globalnie zmieniam
+14bie¿±cy poziom
+09zachowujê
+09odtwarzam
+05SAVE(
+24Niezgodne powiêkszenie (
+02);
+38 poprzednia warto¶æ zostanie zachowana
+57Mogê u¿yæ tylko jednego powiêkszenia na zadanie. Tak wiêc
+63skorzystam z powiêkszenia podanego ju¿ wcze¶niej w tym zadaniu.
+44Nieprawid³owe powiêkszenie zmieniono na 1000
+61Wspó³czynnik powiêkszenia musi siê zawieraæ miêdzy 1 i 32768.
+05B£¡D.
+02->
+20znak pocz±tku grupy
+17znak koñca grupy
+35znak pocz±tku trybu matematycznego
+34znak wprowadzaj±cy parametr makra
+21znak indeksu górnego
+21znak indeksu dolnego
+29koniec szablonu kolumn tabeli
+13znak odstêpu
+07litera
+05znak
+25[nieznany kod polecenia!]
+02:
+08(poziom
+24Wymykaj±ca siê definicja
+23Wymykaj±cy siê argument
+23Wymykaj±cy siê nag³ówek
+20Wymykaj±cy siê tekst
+03<*>
+08<wpisz>
+08<czytam
+02w.
+11<argument>
+10<szablon>
+19<ostatnio czytane>
+24<do ponownego czytania>
+18<tekst wstawiony>
+09<output>
+11<everypar>
+12<everymath>
+15<everydisplay>
+12<everyhbox>
+12<everyvbox>
+11<everyjob>
+10<everycr>
+07<mark>
+11<everyeof>
+08<write>
+26wielko¶æ stosu wej¶ciowego
+05write
+38(nie wolno przeplataæ szablonów tabel)
+29jednocze¶nie czytanych plików
+03par
+14Niezakoñczone
+34; pominiêto ca³y tekst od wiersza
+54W pominiêtym tek¶cie wyst±pi³o niedozwolone polecenie.
+61Taki b³±d siê pojawia, je¶li napisa³e¶ `\if...' i zapomnia³e¶
+53o koñcz±cym `\fi'. Wstawi³em `\fi' -- mo¿e to pomo¿e.
+55Podczas pomijania tekstu warunkowego skoñczy³ siê plik.
+17Plik siê skoñczy³
+33Napotka³em niedozwolone polecenie
+04 of
+43Podejrzewam, ¿e zapomnia³e¶ o `}' i dlatego
+55czyta³em za miejscem, w którym chcia³e¶, abym skoñczy³.
+53Spróbujê z tego wybrn±æ, lecz je¶li b³±d jest powa¿ny
+41to napisz `E' lub `X' i popraw swój plik.
+31 podczas przegl±dania definicji
+28 podczas przegl±dania u¿ycia
+30 podczas przegl±dania nag³ówka
+28 podczas przegl±dania tekstu
+39Wiersz tekstu zawiera niedozwolony znak
+66W³a¶nie natkn±³em siê na dziwny symbol, którego nie mogê odczytaæ.
+53Kontynuuj, a ja zapomnê, ¿e to w ogóle siê wydarzy³o.
+36(Wpisz polecenie lub powiedz `\end')
+44*** (zadanie przerwa³em nie znalaz³szy \end)
+02=>
+25Niezdefiniowane polecenie
+70Na koñcu wiersza (z komunikatem o b³êdzie) powy¿ej widnieje polecenie,
+60którego nigdy nie \def-iniowano. Je¶li przekrêci³e¶ pisowniê
+42(np. `hobx'), to napisz `I' oraz popraw j±
+44(np. `I\hbox'). W przeciwnym razie kontynuuj
+53a ja zapomnê, ¿e natrafi³em na co¶ niezdefiniowanego.
+20Wstawiono brakuj±ce
+01
+43Polecenie oznaczone <do ponownego czytania>
+53nie powininno wyst±piæ pomiêdzy \csname i \endcsname.
+05input
+08endinput
+07topmark
+09firstmark
+07botmark
+14splitfirstmark
+12splitbotmark
+35wielko¶æ stosu na argumenty poleceñ
+09Argument
+26 zawiera nadmiarowy znak }
+47Napotka³em `}', który z niczym nie tworzy pary.
+64Taki b³±d mo¿e byæ spowodowany na przyk³ad przez `\def\a#1{...}'
+59i potem `\a}'. Je¶li bêdziesz kontynuowa³, to `\par', który
+45wstawi³em, wymusi komunikat o wymykaj±cym siê
+57argumencie, co mo¿e byæ w istocie ¼ród³em problemu. Je¶li
+57ten nawias by³ zbêdny, to wpisz `2' w celu pominiêcia go.
+37Akapit siê skoñczy³ zanim zakoñczono
+01
+67Mam wra¿enie, ¿e zapomnia³e¶ o `}', co zmmusi³o mnie do u¿ycia tego
+58polecenia do zbyt du¿ej ilo¶ci tekstu. Jak z tego wybrn±æ?
+56Mam zamiar zapomnieæ o ca³ej sprawie i byæ dobrej my¶li.
+07U¿ycie
+24 nie odpowiada definicji
+51Je¶li powiesz, np. `\def\a1{...}', to zawsze musisz
+43wstawiæ `1' po `\a', poniewa¿ nazwy poleceñ
+49sk³adaj± siê tylko z liter. Za tym makrem brakuje
+44wymaganych znaków, dlatego to makro pomijam.
+02<-
+21Wstawiono brakuj±cy {
+44Wstawi³em lewy nawias, bo jest tu konieczny.
+47Byæ mo¿e teraz zechcesz co¶ usun±æ lub wstawiæ,
+44tak abym móg³ znale¼æ pasuj±cy prawy nawias.
+52(Je¶li wci±¿ nie wiesz, o co chodzi, to wpisz `I}'.)
+29Niezgodne jednostki dla kleju
+60Przyjmujê ¿e 1mu=1pt, je¶li te jednostki zostan± zamienione.
+37Brakowa³o liczby, u¿yjê warto¶ci zero
+47W tym miejsu powinna byæ liczba; wstawi³em `0'.
+46(Je¶li nie widzisz, sk±d liczba w tym miejscu,
+61to zajrzyj do skorowidza w `The TeXbook'' pod `weird error'.)
+11spacefactor
+09prevdepth
+10deadcycles
+15insertpenalties
+02wd
+02ht
+02dp
+11lastpenalty
+08lastkern
+08lastskip
+11inputlineno
+07badness
+13pdftexversion
+10pdflastobj
+12pdflastxform
+13pdflastximage
+18pdflastximagepages
+12pdflastannot
+11pdflastxpos
+11pdflastypos
+09pdfretval
+23pdflastximagecolordepth
+14pdfelapsedtime
+13pdfrandomseed
+14pdfshellescape
+12Niew³a¶ciwe
+69Warto¶æ parametru \spacefactor jest dostêpna tylko w trybie poziomym;
+38\prevdepth -- tylko w trybie pionowym.
+53¯aden z tych parametrów nie ma sensu wewn±trz \write.
+45Pomijam, co napisa³e¶ i u¿ywam warto¶ci zero.
+16Nie mo¿na u¿yæ `
+05' po
+26Niepoprawny numer rejestru
+51Numer rejestru musi byæ liczb± z przedzia³u 0..255.
+22Zamieni³em to na zero.
+21Niepoprawny kod znaku
+46Kod znaku musi byæ liczb± z przedzia³u 0..255.
+18Niepoprawna liczba
+47Poniewa¿ oczekiwa³em liczby z przedzia³u 0..15,
+23Niepoprawny `matchchar'
+48`matchar' musi byæ liczb± z przedzia³u 0..32767.
+28Niepoprawny kod ogranicznika
+58Kod ogranicznika musi byæ liczb± z przedzia³u 0..2^{27}-1.
+30Niew³a¶ciwa sta³a alfabetyczna
+51Po znaku ` powinno wyst±piæ jednoznakowe polecenie.
+25W istocie wstawiam tu \0.
+14Za du¿a liczba
+662147483647='17777777777="7FFFFFFF jest najwiêksz± znan± mi liczb±.
+41Dlatego u¿yjê w³a¶nie jej zamiast Twojej.
+04true
+29Niepoprawna jednostka miary (
+20zamieniona na filll)
+52filll jest najwiêksz± jednostk± miary, któr± znammm.
+02em
+02ex
+02px
+13wstawiono mu)
+56Jedyn± jednostk± miary dla kleju matematycznego jest mu.
+50Najlepszym sposobem na poprawienie tego b³êdu jest
+57usuniêcie nieprawid³owych jednostek; np. w celu usuniêcia
+58dwóch liter wpisz `2'. (Por. Rozdzia³ 27 w `The TeXbook'.)
+02in
+02pc
+02cm
+02mm
+02bp
+02dd
+02cc
+02nd
+02nc
+02sp
+13wstawiono pt)
+48Znane mi jednostki miary to: em, ex, in, pt, pc,
+58cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one!
+59Przyjmê, ¿e chcia³e¶ napisaæ pt, czyli punkt typograficzny.
+16Wymiar zbyt du¿y
+44Mogê u¿ywaæ wymiarów a¿ do oko³o 5,79 metra.
+49Kontynuj, a ja wstawiê najwiêkszy mo¿liwy wymiar.
+04plus
+05minus
+05width
+06height
+05depth
+06number
+12romannumeral
+06string
+07meaning
+08fontname
+14pdftexrevision
+12pdftexbanner
+11pdffontname
+13pdffontobjnum
+11pdffontsize
+10pdfpageref
+14leftmarginkern
+15rightmarginkern
+12pdfxformname
+15pdfescapestring
+13pdfescapename
+12pdfescapehex
+14pdfunescapehex
+15pdfcreationdate
+14pdffilemoddate
+11pdffilesize
+12pdfmdfivesum
+11pdffiledump
+08pdfmatch
+12pdflastmatch
+09pdfstrcmp
+17pdfuniformdeviate
+16pdfnormaldeviate
+07jobname
+12eTeXrevision
+23invalid font identifier
+07pageref
+19invalid page number
+10marginkern
+25a non-empty hbox expected
+04file
+06offset
+15Bad file offset
+45A file offset must be between 0 and 2^{31}-1,
+06length
+15Bad dump length
+45A dump length must be between 0 and 2^{31}-1,
+05icase
+08subcount
+16Bad match number
+43Since I expected zero or a positive number,
+04 at
+64Gdzie siê podzia³ lewy nawias? Napisa³e¶ co¶ w rodzaju `\def\a},
+47co ja zamierzam zinterpretowaæ jako `\def\a{}'.
+40Doliczy³em siê ju¿ dziewiêciu parametrów
+36Zamierzam pomin±æ dodatkowe znaki #.
+34Parametry nale¿y numerowaæ kolejno
+45Wstawi³em cyfrê, która powinna wyst±piæ po #.
+44Aby usun±æ tê, której Ty u¿y³e¶, napisz `1'.
+32Z³y numer argumentu w definicji
+45Zamierza³e¶ napisaæ ## zamiast #, nieprawda¿?
+46A mo¿e gdzie¶ wcze¶niej nie wpisa³e¶ znaku } i
+66wszystko siê pomiesza³o? Zamierzam przyj±æ, ¿e mia³e¶ na my¶li ##.
+66*** (w trybie non-stop u¿ycie \read z terminala jest niedozwolone)
+27Plik skoñczy³ siê wewn±trz
+49W poleceniu \read wyst±pi³y niesparowane nawiasy.
+02if
+05ifcat
+05ifnum
+05ifdim
+05ifodd
+07ifvmode
+07ifhmode
+07ifmmode
+07ifinner
+06ifvoid
+06ifhbox
+06ifvbox
+03ifx
+05ifeof
+06iftrue
+07iffalse
+06ifcase
+06unless
+02fi
+02or
+04else
+11Nadmiarowe
+37Pomijam to; brak odpowiadaj±cego \if.
+06{true}
+07{false}
+25Wstawiono brakuj±cy = do
+42Brak oczekiwanego znaku `<', `=', lub `>'.
+06{case
+04.fmt
+23nazwê pliku wej¶ciowego
+24Nie mogê znale¼æ pliku `
+25Nie mogê pisaæ do pliku `
+02'.
+04.tex
+11Wpisz inn±
+65*** (b³±d operacji plikowej w trybie non-stop; zadanie przerwano)
+04.dvi
+23nazwê pliku wyj¶ciowego
+06texput
+04.fls
+04.log
+02**
+28nazwa pliku ze sprawozdaniem
+02
+08nullfont
+05Font
+08 scaled
+52 nie jest dostêpny: Niepoprawny plik metryczny (TFM)
+58 nie jest dostêpny: Nie znaleziono pliku metrycznego (TFM)
+61Nie uda³o mi siê za³adowaæ danych metrycznych dla tego fontu,
+37wiêc pomijam specyfikacjê tego fontu.
+65[Czarodzieje mog± naprawiaæ pliki TFM przy pomocy TFtoPL/PLtoTF.]
+33Spróbuj wyspecyfikowaæ nowy font;
+70np. `I\font<ta sama nazwa fontu>=<zastêpcza nazwa pliku metrycznego>'.
+33 nie wprowadzono z braku miejsca.
+30Tego fontu nie bêdê móg³ u¿yæ,
+54poniewa¿ moja pamiêæ na dane o znakach jest zbyt ma³a.
+56Je¶li utkn±³e¶, popro¶ czarodzieja, aby mnie powiêkszy³.
+74Albo spróbuj `I\font<ta sama nazwa fontu>=<nazwa ju¿ za³adowanego fontu>'.
+16Brak nazwy fontu
+43Spodziewa³em siê polecenia, którego bie¿±ce
+49znaczenie by³o by zdefiniowane przy pomocy \font.
+10 ma tylko
+23 parametrów `fontdimen'
+49Aby zwiêkszyæ liczbê parametrów fontu, powiniene¶
+50u¿yæ \fontdimen bezpo¶rednio po za³adowaniu fontu.
+21dane metryczne fontów
+23Brakuj±cy znak: Nie ma
+10 w foncie
+12 TeX output
+08vlistout
+35Gotowe pude³ko wysy³am do pliku DVI
+29Wykorzystanie pamiêci przed:
+05 po:
+20; do wykorzystania:
+52Nie mogê wys³aæ strony do pliku DVI, bo jest za du¿a
+63W³a¶nie utworzona strona ma wiêcej ni¿ 5,48 metra wysoko¶ci lub
+69wiêcej ni¿ 5,48 metra szeroko¶ci. Podejrzewam, ¿e co¶ posz³o nie tak.
+29Usun±³em nastêpuj±ce pude³ko:
+27Nie z³o¿y³em ¿adnej strony.
+26Wynik sk³adu zapisa³em do
+10 stron(-y)
+07 strona
+02,
+13 bajty(-ów)).
+05dummy
+30PDF memory size (pdf_mem_size)
+17PDF output buffer
+38pdfTeX error (illegal pdfminorversion)
+44The pdfminorversion must be between 0 and 9.
+20I changed this to 4.
+05setup
+72\pdfminorversion cannot be changed after data is written to the pdf file
+04.pdf
+18/Length
+20/Filter /FlateDecode
+02>>
+06stream
+09endstream
+12pdfTeX error
+14pdfTeX warning
+04PDF:
+04pdf:
+04SRC:
+04src:
+24Non-PDF special ignored!
+07direct:
+05page:
+08literal1
+06tokens
+53tokens_to_string() called while selector = new_string
+10arithmetic
+15divided by zero
+14number too big
+081 0 0 1
+03 cm
+04)]TJ
+03 Td
+02/F
+03 Tf
+02BT
+02ET
+05[]0 d
+030 J
+02 w
+020
+02 m
+02 l
+04 0 m
+05 re f
+07/Rect [
+27number of destination names
+27indirect objects table size
+06 0 obj
+06endobj
+09 0 obj <<
+09>> endobj
+04 0 R
+02()
+40command cannot be used with virtual font
+39maximum internal font number (font_max)
+46number of words of font memory (font_mem_size)
+14font expansion
+28uninitialized pdf_font_elink
+12invalid step
+13invalid limit
+10autoexpand
+68this font has been expanded by another font so it cannot be used now
+48font has been expanded with different parameters
+36Primitive \pdfmovechars is obsolete.
+15 in local font
+17 in virtual font
+12.vf ignored.
+17checksum mismatch
+20design size mismatch
+21POST command expected
+29Error in processing VF font (
+06.vf):
+30, virtual font will be ignored
+03.vf
+20PRE command expected
+13wrong id byte
+26checksum mismatch in font
+11.vf ignored
+29design size mismatch in font
+22invalid character code
+22negative packet length
+22packet length too long
+33character width mismatch in font
+40more PUSHs than POPs in character packet
+46invalid packet length or DVI command in packet
+20too many local fonts
+20undefined local font
+25string of negative length
+23virtual font stack size
+33more POPs than PUSHs in character
+20improver DVI command
+02vf
+19invalid number size
+36max level recursion of virtual fonts
+19invalid DVI command
+11pdfvlistout
+71\pdfoutput can only be changed before anything is written to the output
+14/Type /XObject
+14/Subtype /Form
+07/BBox [
+040 0
+11/FormType 1
+21/Matrix [1 0 0 1 0 0]
+09Resources
+05 0 0
+07 0 0 cm
+09/Font <<
+05 0 R
+12/XObject <<
+03/Fm
+03/Im
+15/ProcSet [ /PDF
+06 /Text
+08 /ImageB
+08 /ImageC
+08 /ImageI
+02 ]
+11/Type /Page
+08Contents
+15/MediaBox [0 0
+06Parent
+10/Annots [
+05/B [
+04ext5
+30cannot open file for embedding
+02<<
+18flush_whatsit_node
+19link(p) is not null
+12/Type /Annot
+14/Subtype /Link
+03/A
+60destination has been already written (this shouldn't happen)
+03/D
+05/XYZ
+04null
+04/Fit
+06/FitH
+06/FitV
+05/FitB
+07/FitBH
+07/FitBV
+06/FitR
+17unknown dest type
+15/Type /Outlines
+05First
+04Last
+05Count
+05Title
+04Prev
+04Next
+04dest
+05name{
+03num
+64 has been referenced but does not exist, replaced by a fixed one
+10 0 R /Fit]
+05Page
+40 has been referenced but does not exist!
+12/Type /Pages
+07/Kids [
+05Dests
+08/Names [
+09/Limits [
+14/Type /Catalog
+05Pages
+07Threads
+08Outlines
+05Names
+10OpenAction
+08/Creator
+09/Producer
+13/CreationDate
+07Creator
+03TeX
+15PTEX.Fullbanner
+19/Producer (pdfeTeX-
+04xref
+09 65535 f
+09 00000 f
+09 00000 n
+07trailer
+03<<
+04Size
+04Root
+04Info
+03 >>
+09startxref
+05%%EOF
+02to
+06spread
+76using fonts with different step of expansion in one paragraph is not allowed
+77using fonts with different limit of expansion in one paragraph is not allowed
+17invalid node type
+14margin kerning
+37invalid pointer to marginal char node
+13Niewype³nione
+12Rozci±gniête
+16 \hbox (licho¶æ
+41) powsta³o w trakcie wykonywania \output.
+25) w akapicie w wierszach
+23) w tabeli w wierszach
+02--
+20) wykryto w wierszu
+20Przepe³nione \hbox (
+14pt za szerokie
+25¦ci¶niête \hbox (licho¶æ
+05vpack
+16 \vbox (licho¶æ
+20Przepe³nione \vbox (
+13pt za wysokie
+25¦ci¶niête \vbox (licho¶æ
+02{}
+12displaystyle
+09textstyle
+11scriptstyle
+17scriptscriptstyle
+14Nieznany styl!
+07mathord
+06mathop
+07mathbin
+07mathrel
+08mathopen
+09mathclose
+09mathpunct
+09mathinner
+08overline
+09underline
+04left
+05right
+06middle
+06limits
+08nolimits
+16u³amek, grubo¶æ
+18= warto¶æ domy¶lna
+19, lewy-ogranicznik
+20, prawy-ogranicznik
+29 nie jest zdefiniowany (znak
+50We w³a¶nie zakoñczonym wzorze matematycznym u¿y³e¶
+73wymienionego wy¿ej znaku z rodziny, której nie zdefiniowano. Na przyk³ad,
+67format `plain' nie pozwala u¿ywaæ \it i \sl w indeksach. Kontynuuj,
+51a ja spróbujê zapomnieæ, ¿e ten znak by³ potrzebny.
+06mlist1
+06mlist2
+06mlist3
+640234000122*4000133**3**344*0400400*000000234000111*1111112341011
+06mlist4
+12 wewn±trz $$
+58W matematyce eksponowanej mo¿na u¿yæ uk³adu tabelarycznego
+60(np. \eqalignno), je¶li oprócz niego pomiêdzy $$ nic nie ma.
+58Dlatego usun±³em formu³y poprzedzaj±ce uk³ad tabelaryczny.
+04span
+02cr
+04crcr
+11endtemplate
+26znak ustawiania tabulacji
+55Wstawiono brakuj±cy # w szablonie uk³adu tabelarycznego
+60W szablonie \halign lub \valign, pomiêdzy znakami & powinien
+42wyst±piæ jeden znak #. Ty go nie wpisa³e¶,
+39wiêc jeden wstawi³em; mo¿e to zadzia³a.
+61Dozwolony jest tylko jeden znak # na jedn± pozycjê tabulacji.
+72Wstawi³e¶ wiêcej ni¿ jeden. Opuszczam wszystkie za wyj±tkiem pierwszego.
+04endv
+51Nadmiarowy znak ustawiania tabulacji zamieniono na
+47Wpisa³e¶ wiêcej znaków \span lub & ni¿ by³o ich
+53w nag³ówku w³a¶nie realizowanego \halign lub \valign.
+48Zak³adam, ¿e chcia³e¶ w tym miejscu napisaæ \cr.
+09256 spans
+06align1
+06align0
+56Napotka³em nieskoñczenie kurczliwy klej wewn±trz akapitu
+38W³a¶nie zakoñczony akapit zawiera klej
+58o nieskoñczonej kurczliwo¶ci, np. `\hskip 0pt minus 1fil'.
+62Taki klej nie powinien tutaj wyst±piæ -- umo¿liwia on z³o¿enie
+66ka¿dego akapitu w jednym wierszu. Mo¿emy bezpiecznie jechaæ dalej,
+58poniewa¿ zamieni³em nieskoñczon± kurczliwo¶æ na skoñczon±.
+09push_node
+14stack overflow
+08pop_node
+32stack underflow (internal error)
+05disc1
+05disc2
+02@@
+07: line
+03 t=
+06 -> @@
+07 via @@
+03 b=
+03 p=
+03 d=
+10@firstpass
+11@secondpass
+14@emergencypass
+06akapit
+05disc3
+05disc4
+25w trakcie ³amania wiersza
+05HYPH(
+11hyphenation
+19 zostanie pominiêty
+70Wyj±tki przenoszenia wyrazów mog± byæ zapisane tylko przy pomocy liter
+42i dywizów. Wybaczam ten b³±d. Kontynuujmy.
+18To nie jest litera
+45Litery w \hyphenation powinny mieæ \lccode>0.
+50Kontynuuj, a ja pominê znak wczytany przed chwil±.
+36wyj±tki od wzorców dzielenia wyrazów
+55pamiêæ na `kody operacji' we wzorcach dzielenia wyrazów
+74pamiêæ na `kody operacji' we wzorcach dzielenia wyrazów dla jednego jêzyka
+26pamiêæ na wzorce dzielenia
+12Za pó¼no na
+08patterns
+56Wszystkie wzorce trzeba podaæ przed rozpoczêciem sk³adu.
+04¬le
+19(Patrz Appendix H.)
+18To nie jest litera
+28Powtórzony wzorzec dzielenia
+07wycinam
+09vertbreak
+75Pude³ko, które próbujê podzieliæ, zawiera klej o nieskoñczonej kurczliwo¶ci
+46Pude³ko dzielone przy pomocy `\vsplit' zawiera
+69nieskoñczenie kurczliwy klej, np. `\vss' lub `\vskip 0pt minus 1fil'.
+71Taki klej nie powinien tutaj wyst±piæ; mo¿esz bezpiecznie jechaæ dalej,
+06vsplit
+08 wymaga
+04vbox
+45Pude³ko, które próbujesz podzieliæ, to \hbox.
+69Takiego pude³ka nie mogê podzieliæ, dlatego pozostawiam je bez zmian.
+08pagegoal
+09pagetotal
+11pagestretch
+14pagefilstretch
+15pagefillstretch
+16pagefilllstretch
+10pageshrink
+09pagedepth
+04fill
+05filll
+19### bie¿±ca strona:
+33 (od³o¿ono do nastêpnego \output)
+19ca³kowita wysoko¶æ
+19 docelowa wysoko¶æ
+15 sumuje siê do
+03, #
+16 mo¿na podzieliæ
+21%% docelowa wysoko¶æ=
+23, maksymalna g³êboko¶æ=
+47Wstawki mo¿na umieszczaæ tylko w pude³ku `vbox'
+36No, no: Próbujesz wstawiæ \insert do
+35rejestru \box, który zawiera \hbox.
+45Kontynuuj, a ja pominê jego obecn± zawarto¶æ.
+06strona
+64Na bie¿±cej stronie znaleziono klej o nieskoñczonej kurczliwo¶ci
+66Strona przygotowana do wys³ania do pliku DVI zawiera nieskoñczenie
+03 g=
+03 c=
+47Klej o nieskoñczonej kurczliwo¶ci wstawiono ze
+57Klej pochodz±cy ze wstawek, który koryguje ³amanie stron,
+57powinien mieæ skoñczon± kurczliwo¶æ. Mo¿emy jechaæ dalej,
+12% podzielono
+04 do
+19255 nie jest pró¿ny
+68Nie nale¿y u¿ywaæ rejestru \box255 poza procedur± wyj¶cia (\output).
+16Pêtla wyj¶cia --
+25 kolejnych ja³owych cykli
+69Wnioskujê, ¿e twoja procedura \output jest b³êdna, poniewa¿ nigdy nie
+65dochodzi do wykonania \shipout. Wykonam wiêc \shipout\box255 sam.
+59Nastêpnym razem zwiêksz \maxdeadcycles, a bêdê cierpliwszy!
+46Procedura wyj¶cia zawiera niesparowane nawiasy
+74Twoja pokrêtna procedura wyj¶cia zawiera problematyczne nawiasy { i/lub }.
+58Nie bardzo potrafiê sobie z tym poradziæ; ¿yczê szczê¶cia.
+45Procedura wyj¶cia nie u¿y³a ca³ej zawarto¶ci
+72Polecenia w \output powinny doprowadziæ do opró¿nienia rejestru \box255,
+36na przyk³ad przez `\shipout\box255'.
+45Kontynuuj, a ja pominê jego obecn± zawarto¶æ.
+21Wstawiono brakuj±cy $
+60Wstawi³em znak pocz±tku/koñca matematyki, poniewa¿ s±dzê, ¿e
+56taki znak opu¶ci³e¶. Kontynuuj trzymaj±c za mnie kciuki.
+73Niestety nie zaprogramowano mnie, jak mam sobie radziæ w takiej sytuacji;
+34Bêdê udawa³, ¿e o to nie prosi³e¶.
+55Je¶li jeste¶ w niew³a¶ciwym trybie, mo¿e uda siê wróciæ
+55do w³a¶ciwego je¶li wpiszesz `I}' lub `I$' lub `I\par'.
+04dump
+05hskip
+04hfil
+05hfill
+03hss
+07hfilneg
+05vskip
+04vfil
+05vfill
+03vss
+07vfilneg
+33Wpisa³em co¶, o czym zapomnia³e¶.
+34(Patrz <tekst wstawiony> powy¿ej.)
+56Przy odrobinie szczê¶cia, to mo¿e mnie odblokowaæ. Je¶li
+60o niczym nie zapomnia³e¶, to spróbuj teraz wpisaæ `2'; wtedy
+66zapomnê zarówno to, co wpisa³em, jak i to, co spowodowa³o problem.
+06right.
+56Wszystko siê popl±ta³o, ale chyba najgorsze ju¿ za nami.
+18Za du¿o nawiasów }
+37Zamkn±³e¶ wiêcej grup ni¿ otworzy³e¶.
+58Takie g³upstwa s± zazwyczaj nieszkodliwe, jed¼ wiêc dalej.
+12prawy nawias
+32Zbêdny nawias }, lub zapomniano
+53Usun±³em symbol zamykaj±cy grupê, poniewa¿ wydaje siê
+67zbêdny (tak jak w `$x}$'). Mo¿liwe jednak, ¿e nawias by³ potrzebny,
+70a zapomnia³e¶ o czym¶ innym (tak jak w `\hbox{$x}'). W takim przypadku
+64sposobem na wybrniêcie jest dodanie zarówno zapomnianego tekstu,
+52jak i tego, co w³a¶nie usun±³em. Np. wpisuj±c `I$}'.
+08moveleft
+09moveright
+05raise
+05lower
+04copy
+07lastbox
+04vtop
+04hbox
+07shipout
+07leaders
+08cleaders
+08xleaders
+36Brak odpowiedniego kleju po \leaders
+67Powiniene¶ napisaæ `\leaders <pude³ko lub linia><hskip lub vskip>'.
+53Znalaz³em <pude³ko lub liniê> bez odpowiedniego kleju
+54<hskip lub vskip>, wiêc pomijam to polecenie \leaders.
+40Niestety ten \lastbox pozostanie pró¿ny.
+59Niestety zwykle nie mogê zabieraæ rzeczy z bie¿±cej strony.
+35Dlatego \lastbox pozostanie pró¿ny.
+24Wstawiono brakuj±ce `to'
+54Czytam polecenie `\vsplit<numer pude³ka> to <wymiar>'.
+36Teraz bêdê chcia³ zobaczyæ <wymiar>.
+27Tutaj powinno byæ <pude³ko>
+69Oczekiwa³em, ¿e zobaczê \hbox albo \vbox, albo \copy, albo \box, albo
+42co¶ w tym rodzaju. Dlatego na wyj¶ciu mo¿e
+58czego¶ brakowaæ. Próbuj dalej; mo¿esz naprawiæ to pó¼niej.
+06indent
+08noindent
+09quitvmode
+29' tutaj za wyj±tkiem \leaders
+70Poziom± liniê wstawiamy do pude³ka `hbox' lub do uk³adu tabelarycznego
+56za pomoc± \leaders lub \hrulefill (patrz `The TeXbook').
+11Nie mo¿esz
+60Zamieniam na \insert0; pude³ko o numerze 255 jest wyj±tkiem.
+03pre
+28Spróbuj `I\vskip-\lastskip'.
+27Spróbuj `I\kern-\lastkern'.
+48Zapewne mo¿esz to wymusiæ na procedurze wyj¶cia.
+09unpenalty
+06unkern
+06unskip
+06unhbox
+07unhcopy
+06unvbox
+07unvcopy
+38Niezgodne listy nie mog± byæ `unboxed'
+46Nic z tego, Pandoro. (Ty przebieg³a diablico.)
+56Nigdy nie otwieram \hbox w trybie pionowym i vice versa.
+53Nie mogê te¿ otwieraæ pude³ek w trybie matematycznym.
+25Niepoprawny matematyczny
+66We wzorach matematycznych trzecia czê¶æ w poleceniu \discretionary
+36musi byæ pusta. Dlatego j± usun±³em.
+44Za d³uga lista z elementami dyskrecjonalnymi
+72Jej -- Nie przysz³o mi na my¶l, ¿e ktokolwiek dotrze a¿ do tego miejsca.
+71Czy naprawdê potrzebujesz tak d³ugiej listy elementów dyskrecjonalnych.
+44Niepoprawna lista elementów dyskrecjonalnych
+66Na li¶cie dyskrecjonalnej mog± wyst±piæ tylko pude³ka i podciêcia.
+45Nastêpuj±c± podlistê dyskrecjonaln± usuniêto:
+28Wstawiono brakuj±cy nawias }
+50Wstawi³em to, co wydaje siê konieczne, by poprawiæ
+42ustawienia tabulacji dla bie¿±cej kolumny.
+56Spróbuj jechaæ dalej; jest spora szansa, ¿e to zadzia³a.
+25Niew³a¶ciwie umieszczono
+67Nie wiem, dlaczego chcia³by¶ umie¶ciæ znak tabulacji w tym miejscu.
+55Je¶li chcia³e¶ umie¶ciæ znak `&', to wpisz teraz `I\&'.
+50Ale je¶li jeden z wcze¶niejszych prawych nawiasów,
+56przedwcze¶nie zakoñczy³ poprzednie ustawianie tabulacji,
+55to na pewno pojawi siê wiele b³êdów. Dlatego proponujê,
+60aby¶ w celu obejrzenia tego, co da siê uratowaæ, wpisa³ `S'.
+70albo \cr, albo \span teraz. Je¶li co¶ podobnego do prawego nawiasu `}'
+57Polecenie \noalign mo¿na wpisaæ tylko po \cr wystêpuj±cym
+61w ustawianiu tabulacji. Kontynuuj, a ja pominê ten przypadek.
+63Polecenie \omit mo¿na wpisaæ tylko po znaku tabulacji lub \cr z
+65Zgadujê, ¿e w tym miejscu chcia³e¶ zakoñczyæ ustawianie tabulacji
+50I'm ignoring this, since I wasn't doing a \mubyte.
+48Pomijam to, poniewa¿ nie zajmowa³em siê \csname.
+04eqno
+05leqno
+13displaylimits
+68Polecenie typu `limits' powinno wyst±piæ za operatorem matematycznym
+58Pomijam ¼le umiejscowione polecenie \limits lub \nolimits.
+35Brakuj±cy ogranicznik (wstawiono .)
+53Spodziewa³em siê zobaczyæ w tym miejscu `(', `\{' lub
+65co¶ w tym rodzaju. Je¶li wpisa³e¶, na przyk³ad, `{' zamiast `\{',
+52to w celu sparowania nawiasów powiniene¶ usun±æ `{',
+52wpisuj±c teraz `1'. W innych przypadkach, kontynuuj.
+51Ogranicznikami mog± byæ znaki których \delcode jest
+70nieujemny, albo mo¿esz u¿yæ polecenia `\delimiter <kod ogranicznika>'.
+07U¿ywaj
+35 do akcentów w trybie matematycznym
+52Zamieniam \accent na \mathaccent; ¿ycz mi szczê¶cia.
+73(Akcenty we wzorach matematycznych to nie to samo, co akcenty w tek¶cie.)
+22Podwojony indeks górny
+42Traktujê `x^1^2' w istocie jako `x^1{}^2'.
+22Podwojony indeks dolny
+42Traktujê `x_1_2' w istocie jako `x_1{}_2'.
+05above
+04over
+04atop
+15abovewithdelims
+14overwithdelims
+14atopwithdelims
+69Niejednoznaczno¶æ -- potrzebna jeszcze jedna para nawiasów klamrowych
+37Pomijam ten u³amek, poniewa¿ nie wiem
+46czy konstrukcja, taka jak `x \over y \over z',
+57oznacza `{x \over y} \over z', czy `x \over {y \over z}'.
+50I'm ignoring a \middle that had no matching \left.
+41Pomijam \right bez odpowiadaj±cego \left.
+69Pomin±³em wzór matematyczny: niekompletne fonty grupy matematycznej 2
+65Niestety nie mogê sk³adaæ matematyki, gdy w fontach: \textfont 2,
+51\scriptfont 2 lub \scriptscriptfont 2 brak których¶
+55z warto¶ci \fontdimen wymaganych dla fontu z symbolami.
+69Pomin±³em wzór matematyczny: niekompletne fonty grupy matematycznej 3
+65Niestety nie mogê sk³adaæ matematyki, gdy w fontach: \textfont 3,
+62\scriptfont 3 lub \scriptscriptfont 3 brak których¶ z warto¶ci
+65\fontdimen wymaganych dla fontu z symbolami w ró¿nych rozmiarach.
+41$$ powinno koñczyæ matematykê eksponowan±
+72Przypuszczalnie ostatnio przeczytany `$' pasuje do poprzedzaj±cego `$$'.
+55Dlatego za³o¿ê, ¿e napisa³e¶ `$$' w obydwu przypadkach.
+07display
+22Wstawiono brakuj±ce $$
+04long
+05outer
+06global
+03def
+04gdef
+04edef
+04xdef
+06prefix
+31Nie mo¿esz u¿yæ przedrostka z `
+56Bêdê udawaæ, ¿e nie napisa³e¶ \long, \outer lub \global.
+07' lub `
+05' z `
+61Bêdê udawaæ, ¿e nie napisa³e¶ w tym miejscu \long ani \outer.
+29Wstawiono brakuj±ce polecenie
+41Pisz `\def\cs{...}', a nie `\def cs{...}'
+59Musia³em uzupe³niæ Twoj± definicjê o niedostêpne polecenie.
+60Mam nadziejê, ¿e dziêki temu uda mi siê wypl±taæ z k³opotów.
+52Mo¿esz zrêcznie wybrn±æ z tego b³êdu, je¶li bêdziesz
+45uwa¿a³; patrz æwiczenie 27.2 w `The TeXbook'.
+12inaccessible
+03let
+09futurelet
+06mubyte
+09noconvert
+61not appear in <byte sequence> between \mubyte and \endmubyte.
+27The empty <byte sequence>,
+08 ignored
+22The <byte sequence> in
+62\mubyte <token> <byte sequence>\endmubyte should not be empty.
+07chardef
+11mathchardef
+08countdef
+08dimendef
+07skipdef
+09muskipdef
+07toksdef
+10charsubdef
+27Nowe podstawienie za znak:
+03 =
+46Powiniene¶ by³ napisaæ `\read<number> to \cs'.
+27Teraz zamierzam szukaæ \cs.
+08xordcode
+08xchrcode
+08xprncode
+19Nieprawid³owy kod (
+43); kod powinien byæ liczb± z przedzia³u 0..
+15); co najwy¿ej
+44U¿yjê liczby 0 zamiast nieprawid³owego kodu.
+02by
+58Przepe³nienie w trakcie wykonywania operacji arytmetycznej
+47Nie mogê dokoñczyæ tego mno¿enia lub dzielenia,
+34poniewa¿ wynik jest poza zakresem.
+48Zapominam, co napisa³e¶, i niczego nie zmieniam.
+73Niestety w matematyce eksponowanej nie mo¿esz napisaæ \setbox po \halign,
+53ani miêdzy poleceniem \accent i znakiem akcentowanym.
+24Z³y wspó³czynnik odstêpu
+67Prawid³owy wspó³czynnik powinien byæ liczb± z przedzia³u 1..32767.
+53W tym miejscu dopuszczalne s± tylko liczby nieujemne.
+42Tylko INITEX mo¿e czytaæ wzorce dzielenia.
+10hyphenchar
+08skewchar
+06lpcode
+06rpcode
+06efcode
+14pdfnoligatures
+07tagcode
+04FONT
+02at
+06scaled
+26Niew³a¶ciwy rozmiar `at' (
+23pt), zamieniono na 10pt
+60Radzê sobie tylko z fontami w rozmiarach dodatnich, które s±
+62mniejsze ni¿ 2048pt. Dlatego zamieni³em podany wymiar na 10pt.
+12select font
+13errorstopmode
+06openin
+07closein
+07message
+10errmessage
+36(To by³ inny komunikat \errmessage.)
+59Ten komunikat o b³êdzie wygenerowa³o polecenie \errmessage.
+50Dlatego nie mogê podaæ wyczerpuj±cego wyja¶nienia.
+70Wyobra¼ sobie, ¿e jeste¶ Herkulesem Poirot: zbadaj wszystkie poszlaki,
+62i dojd¼ prawdy dziêki metodzie i przymiotom swojego intelektu.
+09lowercase
+09uppercase
+04show
+07showbox
+07showthe
+09showlists
+72To nie jest komunikat o b³êdzie; Wypisujê co¶, u¿ywaj±c polecenia \show.
+59Je¶li mam wy¶wietliæ wiêcej szczegó³ów, to wpisz `I\show..'
+58(np. \show\cs, \showthe\count10, \showbox255, \showlists).
+63Wpisz te¿ `I\tracingonline=1\show...', a na terminalu i w pliku
+53ze sprawozdaniem znajdziesz zawarto¶æ pude³ek i list.
+02>
+09undefined
+09protected
+05makro
+17outer endtemplate
+06> \box
+02OK
+33 (porównaj plik ze sprawozdaniem)
+09 (INITEX)
+50Wewn±trz grupy nie wolno wykonywaæ polecenia \dump
+37G³o¶ne ,,NIE'' wszystkim `{...\dump}'
+27 napisy o ³±cznej d³ugo¶ci
+59 zrzucone pozycje pamiêci; aktualne wykorzystanie pamiêci:
+23 poleceñ wieloznakowych
+33 s³ów(-owa) danych o fontach dla
+21 wprowadzonych fontów
+17 wprowadzony font
+05\font
+34 wyj±tki(-ów) od wzorców dzielenia
+29 wyj±tek od wzorców dzielenia
+31Struktura `trie' jest d³ugo¶ci
+06 i ma
+04 ops
+03 op
+03 z
+12 dla jêzyka
+09 (format=
+22nazwa pliku z formatem
+25Pocz±tek zrzutu do pliku
+63 ==> Fatal error occurred, the output PDF file is not finished!
+26Sprawozdanie zapisa³em do
+02 )
+13end wyst±pi³
+27wewn±trz grupy na poziomie
+06kiedy
+11 w wierszu
+19 by³ niezakoñczony)
+58(dodatkowe informacje znajdziesz w pliku ze sprawozdaniem)
+33(tylko INITEX mo¿e wykonaæ \dump)
+35odpluskwianie # (-1 aby zakoñczyæ):
+07openout
+08closeout
+07special
+09immediate
+11setlanguage
+13pdffontexpand
+10pdfliteral
+06pdfobj
+09pdfrefobj
+08pdfxform
+11pdfrefxform
+09pdfximage
+12pdfrefximage
+08pdfannot
+12pdfstartlink
+10pdfendlink
+10pdfoutline
+07pdfdest
+09pdfthread
+14pdfstartthread
+12pdfendthread
+10pdfsavepos
+07pdfinfo
+10pdfcatalog
+08pdfnames
+15pdfincludechars
+11pdffontattr
+10pdfmapfile
+10pdfmapline
+10pdftrailer
+13pdfresettimer
+16pdfsetrandomseed
+24[nieznane rozszerzenie!]
+04ext1
+32used while \pdfoutput is not set
+45used while \pdfoutput is not set; ignoring it
+11\pdfliteral
+06direct
+07\pdfobj
+13reserveobjnum
+09useobjnum
+35invalid object number being ignored
+04attr
+29cannot find referenced object
+10\pdfrefobj
+09\pdfxform
+09resources
+40\pdfxform cannot be used with a void box
+12\pdfrefxform
+34too large image resolution ignored
+24invalid image dimensions
+08mediabox
+07cropbox
+08bleedbox
+07trimbox
+06artbox
+05named
+10colorspace
+82Primitive \pdfoptionalwaysusepdfpagebox is obsolete; use \pdfforcepagebox instead.
+92Primitive \pdfoptionpdfinclusionerrorlevel is obsolete; use \pdfinclusionerrorlevel instead.
+34pdfTeX warning (image inclusion):
+28\pdfforcepagebox is in use (
+10\pdfximage
+13\pdfrefximage
+04user
+04goto
+06thread
+19action type missing
+40only GoTo action can be used with `page'
+28page number must be positive
+04name
+55`goto' option cannot be used with both `file' and `num'
+31num identifier must be positive
+23identifier type missing
+09newwindow
+11nonewwindow
+68`newwindow'/`nonewwindow' must be used with `goto' and `file' option
+09\pdfannot
+21invalid object number
+13\pdfstartlink
+45\pdfstartlink cannot be used in vertical mode
+11\pdfendlink
+43\pdfendlink cannot be used in vertical mode
+11\pdfoutline
+38destination with the same identifier (
+02)
+08\pdfdest
+03xyz
+04zoom
+05fitbh
+05fitbv
+04fitb
+04fith
+04fitv
+04fitr
+03fit
+24destination type missing
+04ext4
+40has been already used, duplicate ignored
+10\pdfthread
+15\pdfstartthread
+13\pdfendthread
+11\pdfsavepos
+08\pdfinfo
+11\pdfcatalog
+10openaction
+23duplicate of openaction
+09\pdfnames
+11\pdftrailer
+16\pdfincludechars
+12\pdffontattr
+11\pdfmapfile
+11\pdfmapline
+08/Title (
+12destination
+08/R [0 0
+06/I <<
+12 (hyphenmin
+07 direct
+08literal2
+05 attr
+07 stream
+05 file
+07pdflink
+07 action
+05 user
+10 goto name
+09 goto num
+12 thread name
+11 thread num
+10displaying
+19unknown action type
+05 name
+04 num
+05 zoom
+08unknown!
+10wihajster?
+04ext2
+04ext3
+08endwrite
+07system(
+04)...
+09clobbered
+08executed
+08disabled
+44Polecenie write zawiera niesparowane nawiasy
+66Na tej stronie znalaz³em polecenie \write, które ma mniej { ni¿ }.
+23nazwa pliku wyj¶ciowego
+08\openout
+04 = `
+54`\pdfobj reserveobjnum' cannot be used with \immediate
+03/F
+11/NewWindow
+05true
+06false
+13/S /GoTo /D [
+14/S /GoToR /D [
+09/S /GoTo
+10/S /GoToR
+11/S /Thread
+37annotations cannot be inside an XForm
+42link annotations cannot be inside an XForm
+40link annotations can be inside hbox only
+35invalid stack of link nesting level
+66\pdfendlink ended up in different nesting level than \pdfstartlink
+33threads cannot be inside an XForm
+70\pdfendthread ended up in different nesting level than \pdfstartthread
+38destinations cannot be inside an XForm
+03 Do
+31\pdfstartlink ended up in vlist
+29\pdfendlink ended up in vlist
+33\pdfstartthread ended up in hlist
+31\pdfendthread ended up in hlist
+12lastnodetype
+11eTeXversion
+64Nic z tego, ta opcjonalna w³a¶ciwo¶æ e-TeXa zosta³a zablokowana.
+08everyeof
+14tracingassigns
+13tracinggroups
+10tracingifs
+17tracingscantokens
+14tracingnesting
+19predisplaydirection
+11lastlinefit
+15savingvdiscards
+15savinghyphcodes
+12bottom level
+05semi
+06simple
+09adjusted
+03no
+05align
+04disc
+07 choice
+06 shift
+05 left
+15 grupa (poziom
+11 w wierszu
+12rozpoczynam
+10opuszczam
+17currentgrouplevel
+16currentgrouptype
+14currentiflevel
+13currentiftype
+15currentifbranch
+10fontcharwd
+10fontcharht
+10fontchardp
+10fontcharic
+14parshapelength
+14parshapeindent
+13parshapedimen
+10showgroups
+11align entry
+10showtokens
+10unexpanded
+10detokenize
+07showifs
+22 rozpoczêto w wierszu
+41brak rozpoczêtych instrukcji warunkowych
+11### poziom
+15interactionmode
+30Niepoprawny tryb konwersacyjny
+47Poprawne tryby to: 0=batch, 1=nonstop, 2=scroll
+52i 3=errorstop. Kontynuuj, a ja pominê ten przypadek.
+11TeXXeTstate
+06beginL
+04endL
+06beginR
+04endR
+09, display
+03LR1
+32problematyczne \endL lub \endR (
+12 brakuj±cy,
+11 nadmiarowy
+03LR2
+03LR3
+03LR4
+10scantokens
+02(
+08readline
+09ifdefined
+08ifcsname
+10iffontchar
+09' przed `
+20Ostrze¿enie: koniec
+14 w innym pliku
+31Ostrze¿enie: koniec pliku, gdy
+19 jest niezakoñczony
+07numexpr
+07dimexpr
+08glueexpr
+06muexpr
+46Nie wiem jak obliczyæ warto¶æ tego wyra¿enia,
+33W wyra¿eniu wstawiono brakuj±cy )
+52Brak oczekiwanego znaku `+', `-', `*', `/', or `)'.
+16gluestretchorder
+15glueshrinkorder
+11gluestretch
+10glueshrink
+08mutoglue
+08gluetomu
+05marks
+08topmarks
+10firstmarks
+08botmarks
+15splitfirstmarks
+13splitbotmarks
+53Numer rejestru musi byæ liczb± z przedzia³u 0..32767.
+03 s=
+03 a=
+12pagediscards
+13splitdiscards
+18interlinepenalties
+13clubpenalties
+14widowpenalties
+21displaywidowpenalties
+16podstawienie za
+42Brakuj±cy znak: niekompletne podstawienie
+28U¿yjê podstawienia za znak:
+*478737653
diff --git a/Build/source/texk/tetex/ps2frag b/Build/source/texk/tetex/ps2frag
new file mode 100755
index 00000000000..b8e673be087
--- /dev/null
+++ b/Build/source/texk/tetex/ps2frag
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+tty -s && {
+ echo
+ echo "Warning: the ps2frag script is not needed with this version of psfrag."
+ echo "Please read the manpage ps2frag(1) and the documentation of the"
+ echo "psfrag package."
+ echo
+} >&2
+
+exit 0
diff --git a/Build/source/texk/tetex/ps2frag.man b/Build/source/texk/tetex/ps2frag.man
new file mode 100644
index 00000000000..b572c5733c1
--- /dev/null
+++ b/Build/source/texk/tetex/ps2frag.man
@@ -0,0 +1,41 @@
+.TH ps2frag 1 "Feb 95" TeXware
+.SH NAME
+ps2frag - obsolete shell script for the PSfrag system.
+.SH IMPORTANT NOTICE
+The new PSfrag system no longer requires the ps2frag script; instead, it
+handles the processing entirely within TeX/LaTeX and DVIPS. I'm sure you
+will agree that never needing to run ps2frag again is a nice convenience!
+.P
+However, there are two significant differences in the way this new version
+of PSfrag works. Please make yourself aware of them:
+.P
+1) XDvi is no longer able to determine where your PSfrag replacements
+should
+go, so instead it lines them up in a vertical list to the left of the
+figure. This allows you to confirm that they have been typeset properly, at
+least. However, to confirm that PSfrag
+.B positions
+your replacements properly, you will have to view the PostScript
+version of your file with a viewer like GhostView, or print it out.
+This seems to be the
+only disadvantage to the elimination of the pre-processing step.
+.P
+2) If you embed '\\tex' commands inside your figures, you now need to
+explicitly _tell_ PSfrag to process these commands. To do so, use
+\\usepackage[scanall]{psfrag}
+instead of
+\\usepackage{psfrag}
+at the beginning of your LaTeX file.
+.P
+If you only use '\\tex' commands in a small number of figures, then a
+more efficient might be to turn on '\\tex'-scanning only for those
+figures. To do that, add the command '\\psfragscanon' immediately before
+each relevant \\includegraphics or \\epsfbox command.
+.P
+.SH NOTES
+See the PSfrag documentation for further information.
+.SH "SEE ALSO"
+dvips(1), gs(1), ghostview(1), latex(1)
+.SH AUTHORS
+.IP psfrag@rascals.stanford.edu
+The PSfrag maintainer's mailing list.
diff --git a/Build/source/texk/tetex/ps4pdf b/Build/source/texk/tetex/ps4pdf
new file mode 100644
index 00000000000..81f254a3735
--- /dev/null
+++ b/Build/source/texk/tetex/ps4pdf
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+# Copyright (C) 2004, Thomas Esser. Public domain.
+
+# First, work around bugs/limitations in some shells on some systems:
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+###############################################################################
+# cleanup()
+# clean up the temp area and exit with proper exit status
+###############################################################################
+cleanup()
+{
+ rc=$1
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; }
+
+ # set exit code in a portable way; see the autoconf manual for details:
+ (exit $rc); exit $rc
+}
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+setupTmpDir()
+{
+ $needsCleanup && return
+
+ trap 'cleanup 1' 1 2 3 7 13 15
+ needsCleanup=true
+ (umask 077; mkdir "$tmpdir") \
+ || abort "could not create directory \`$tmpdir'"
+}
+###############################################################################
+# myexec(args)
+# execute the command given as "args"; abort on error; redirect messages to
+# log in "silent" mode; redirect stdin (</dev/null) in silent mode
+###############################################################################
+myexec()
+{
+ if $silent; then
+ echo "$0: running $@"
+ "$@" >$log 2>&1 </dev/null
+ rc=$?
+ else
+ "$@"
+ rc=$?
+ fi
+ if test $rc != 0; then
+ echo "$0: command $@ returned with code $rc"
+ cat <$log
+ cleanup $rc
+ fi
+}
+
+# some initializations
+progname=pdflatexps
+silent=true # default setting; change if you like
+needsCleanup=false
+tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/.$progname$$
+log=$tmpdir/log
+version="1.0"
+
+# look for optional things first
+while
+ case $1 in
+ --help|-h) echo "$0 [-v|-q] file"
+ echo "Process LaTeX document containing PSforPDF macros."
+ exit 0;;
+ --version) echo "$progname version $version"; exit 0;;
+ -q) silent=true;;
+ -v) silent=false;;
+ -*) echo "$progname: unknown option $1 ignored";;
+ *) break;;
+ esac
+do
+ shift
+done
+# remaining option: filename
+file=$1
+
+# jobname von TeX: Verzeichnisse entfernen, evtl. vorhandene Extension
+# entfernen.
+job=`echo "x$1" | sed 's@x@@; s@.*/@@; s@\.[^.]*$@@'`
+
+setupTmpDir
+myexec latex "$file"
+myexec dvips -Ppdf -o "$job-pics.ps" "$job.dvi"
+myexec ps2pdf -dAutoRotatePages=/None "$job-pics.ps" "$job-pics.pdf"
+myexec pdflatex "$file"
+
+cleanup 0
diff --git a/Build/source/texk/tetex/pslatex b/Build/source/texk/tetex/pslatex
new file mode 100755
index 00000000000..4badef0ec12
--- /dev/null
+++ b/Build/source/texk/tetex/pslatex
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# Copyright 1994 David Carlisle
+# This file may be redistributed and/or modified under the terms of the
+# LaTeX Project Public License distributed from CTAN archives in directory
+# macros/latex/base/lppl.txt; either version 1 of the License, or (at
+# your option) any later version.
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+# we want to be able to use options to latex:
+while :; do
+ case $1 in
+ -*)
+ latexoptions="$latexoptions \"$1\""
+ shift;;
+ *)
+ break;;
+ esac
+done
+
+echo
+echo "*************************************"
+echo "* Using LaTeX, with pslatex package *"
+echo "*************************************"
+echo
+
+# messing around with \PSLATEXTMP is for AUCTeX which calls
+# documents via latex \nonstopmode \input{file}
+
+latex $latexoptions \
+ "\AtBeginDocument{\RequirePackage{pslatex}}"\
+ "\def\PSLATEXTMP{\futurelet\PSLATEXTMP\PSLATEXTMPB}"\
+ "\def\PSLATEXTMPB{\ifx\PSLATEXTMP\nonstopmode\else\input\fi}"\
+ "\PSLATEXTMP" ${1+"$@"}
diff --git a/Build/source/texk/tetex/pslatex.man b/Build/source/texk/tetex/pslatex.man
new file mode 100644
index 00000000000..c206596a6a0
--- /dev/null
+++ b/Build/source/texk/tetex/pslatex.man
@@ -0,0 +1,44 @@
+.TH "pslatex" "1" "September 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+pslatex \- utility to typeset LaTeX files using PostScript fonts
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBpslatex\fP [\fILATEXARGS\fP] \fILATEXFILE\fP[\&.tex]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBpslatex\fP allows you to typeset a LaTeX source file using basic
+Adobe Type 1 PostScript fonts (Times, Helvetica, and Courier)
+\fIwithout\fP editing the file to load the necessary packages\&.
+.PP
+It takes any arguments that \fBlatex\fP(1) can take\&.
+.PP
+.SH "OPTIONS"
+.PP
+None\&.
+.PP
+.SH "FILES"
+.PP
+Many\&. See the readme file for \fIpslatex\&.sty\fP\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBlatex\fP(1), \fI\fITEXMF\fP/latex/pslatex/00readme\&.txt\fP
+.PP
+.SH "BUGS"
+.PP
+None known\&. Report any found to the author\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBpslatex\fP was written by David Carlisle
+<david@dcarlisle\&.demon\&.co\&.uk>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/rubibtex b/Build/source/texk/tetex/rubibtex
new file mode 100755
index 00000000000..373e6e1194d
--- /dev/null
+++ b/Build/source/texk/tetex/rubibtex
@@ -0,0 +1,110 @@
+#!/bin/sh
+
+# rubibtex, based on the original version contained in the t2 bundle.
+# Thomas Esser, Public Domain.
+
+progname=rubibtex
+tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$
+job=$1
+backup="$tmpdir/orig.aux"
+
+case $job in
+ "")
+ echo "usage: $progname file" >&2
+ exit 1
+esac
+
+if test ! -f "$job.aux"; then
+ echo "$progname: file \`$job.aux' does not exist." >&2
+ exit 1
+fi
+
+trap '
+ rm -rf "$tmpdir"
+ exit 1
+' 1 2 3 7 13 15
+(umask 077; mkdir "$tmpdir") \
+ || { echo "$progname: could not create directory \`$tmpdir'" >&2; exit 1; }
+
+cat <"$job.aux" >"$backup" || {
+ echo "$progname: could not create backup of file \`$job.aux' as \`$backup'." >&2
+ rm -rf "$tmpdir"
+ exit 1
+}
+
+sed '
+ /^\\citation/ {
+ s/\\IeC {\\CYRA }/á/g
+ s/\\IeC {\\CYRB }/â/g
+ s/\\IeC {\\CYRV }/÷/g
+ s/\\IeC {\\CYRG }/ç/g
+ s/\\IeC {\\CYRD }/ä/g
+ s/\\IeC {\\CYRE }/å/g
+ s/\\IeC {\\CYRYO }/³/g
+ s/\\IeC {\\CYRZH }/ö/g
+ s/\\IeC {\\CYRZ }/ú/g
+ s/\\IeC {\\CYRI }/é/g
+ s/\\IeC {\\CYRISHRT }/ê/g
+ s/\\IeC {\\CYRK }/ë/g
+ s/\\IeC {\\CYRL }/ì/g
+ s/\\IeC {\\CYRM }/í/g
+ s/\\IeC {\\CYRN }/î/g
+ s/\\IeC {\\CYRO }/ï/g
+ s/\\IeC {\\CYRP }/ð/g
+ s/\\IeC {\\CYRR }/ò/g
+ s/\\IeC {\\CYRS }/ó/g
+ s/\\IeC {\\CYRT }/ô/g
+ s/\\IeC {\\CYRU }/õ/g
+ s/\\IeC {\\CYRF }/æ/g
+ s/\\IeC {\\CYRH }/è/g
+ s/\\IeC {\\CYRC }/ã/g
+ s/\\IeC {\\CYRCH }/þ/g
+ s/\\IeC {\\CYRSH }/û/g
+ s/\\IeC {\\CYRSHCH }/ý/g
+ s/\\IeC {\\CYRHRDSN }/ÿ/g
+ s/\\IeC {\\CYRERY }/ù/g
+ s/\\IeC {\\CYRSFTSN }/ø/g
+ s/\\IeC {\\CYREREV }/ü/g
+ s/\\IeC {\\CYRYU }/à/g
+ s/\\IeC {\\CYRYA }/ñ/g
+ s/\\IeC {\\cyra }/Á/g
+ s/\\IeC {\\cyrb }/Â/g
+ s/\\IeC {\\cyrv }/×/g
+ s/\\IeC {\\cyrg }/Ç/g
+ s/\\IeC {\\cyrd }/Ä/g
+ s/\\IeC {\\cyre }/Å/g
+ s/\\IeC {\\cyryo }/£/g
+ s/\\IeC {\\cyrzh }/Ö/g
+ s/\\IeC {\\cyrz }/Ú/g
+ s/\\IeC {\\cyri }/É/g
+ s/\\IeC {\\cyrishrt }/Ê/g
+ s/\\IeC {\\cyrk }/Ë/g
+ s/\\IeC {\\cyrl }/Ì/g
+ s/\\IeC {\\cyrm }/Í/g
+ s/\\IeC {\\cyrn }/Î/g
+ s/\\IeC {\\cyro }/Ï/g
+ s/\\IeC {\\cyrp }/Ð/g
+ s/\\IeC {\\cyrr }/Ò/g
+ s/\\IeC {\\cyrs }/Ó/g
+ s/\\IeC {\\cyrt }/Ô/g
+ s/\\IeC {\\cyru }/Õ/g
+ s/\\IeC {\\cyrf }/Æ/g
+ s/\\IeC {\\cyrh }/È/g
+ s/\\IeC {\\cyrc }/Ã/g
+ s/\\IeC {\\cyrch }/Þ/g
+ s/\\IeC {\\cyrsh }/Û/g
+ s/\\IeC {\\cyrshch }/Ý/g
+ s/\\IeC {\\cyrhrdsn }/ß/g
+ s/\\IeC {\\cyrery }/Ù/g
+ s/\\IeC {\\cyrsftsn }/Ø/g
+ s/\\IeC {\\cyrerev }/Ü/g
+ s/\\IeC {\\cyryu }/À/g
+ s/\\IeC {\\cyrya }/Ñ/g
+ }
+' <"$backup" >"$job.aux"
+
+bibtex "$job"
+
+cat "$backup" > "$job.aux"
+rm -rf "$tmpdir"
+exit 0
diff --git a/Build/source/texk/tetex/rubibtex.man b/Build/source/texk/tetex/rubibtex.man
new file mode 100644
index 00000000000..0142072a769
--- /dev/null
+++ b/Build/source/texk/tetex/rubibtex.man
@@ -0,0 +1,63 @@
+.TH "rubibtex" "1" "October 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+rubibtex \- make a bibliography for (La)TeX using Russian
+letters as item names
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBrubibtex\fP \fIBASENAME\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBrubibtex\fP is used to run \fBbibtex\fP(1) on auxiliary files with
+Russian characters in item names (citation keys)\&. It is part of the
+T2 package\&.
+.PP
+\fBrubibtex\fP copies the auxiliary file to \fI/tmp\fP, uses
+\fBsed\fP(1) to convert Cyrillic character commands to their 8-bit
+ASCII equivalents; runs \fBbibtex\fP(1) on the modified file; and
+finally moves the original auxiliary file back (overwriting the
+modified file)\&.
+.PP
+\fBrubibtex\fP assumes that the \fBbibtex\fP(1) database (\f(CWbib\fP)
+files are encoded with the KOI8-R encoding\&.
+.PP
+.SH "FILES"
+.PP
+.IP
+.IP "\fIbasename\&.aux\fP"
+LaTeX auxiliary file
+.IP
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to the authors\&.
+.PP
+.SH "COPYRIGHT"
+.PP
+The T2 package is Copyright 1997-1999 Werner Lemberg, Vladimir
+Volovich and any individual authors listed elsewhere in package files\&.
+.PP
+It may be distributed under the conditions of the LaTeX Project Public
+License, either version 1\&.1 of this license or (at your option) any
+later version\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBbibtex\fP(1), \fBsed\fP(1),
+<ftp://ftp\&.vsu\&.ru/pub/tex/T2/README>\&.
+.PP
+.SH "AUTHOR"
+.PP
+Werner Lemberg
+<wl@gnu\&.org>, Vladimir Volovich
+<TeX@vvv\&.vsu\&.ru>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
+.PP
diff --git a/Build/source/texk/tetex/rumakeindex b/Build/source/texk/tetex/rumakeindex
new file mode 100755
index 00000000000..b7b0c072729
--- /dev/null
+++ b/Build/source/texk/tetex/rumakeindex
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+BASE=`basename "$1" .idx`
+IDX=$BASE.idx
+IND=$BASE.ind
+ILG=$BASE.ilg
+
+sed '
+/^\\indexentry{/ {
+s/\\IeC {\\CYRA }/¾/g
+s/\\IeC {\\cyra }/¿/g
+s/\\IeC {\\CYRB }/À/g
+s/\\IeC {\\cyrb }/Á/g
+s/\\IeC {\\CYRV }/Â/g
+s/\\IeC {\\cyrv }/Ã/g
+s/\\IeC {\\CYRG }/Ä/g
+s/\\IeC {\\cyrg }/Å/g
+s/\\IeC {\\CYRD }/Æ/g
+s/\\IeC {\\cyrd }/Ç/g
+s/\\IeC {\\CYRE }/È/g
+s/\\IeC {\\cyre }/É/g
+s/\\IeC {\\CYRYO }/Ê/g
+s/\\IeC {\\cyryo }/Ë/g
+s/\\IeC {\\CYRZH }/Ì/g
+s/\\IeC {\\cyrzh }/Í/g
+s/\\IeC {\\CYRZ }/Î/g
+s/\\IeC {\\cyrz }/Ï/g
+s/\\IeC {\\CYRI }/Ð/g
+s/\\IeC {\\cyri }/Ñ/g
+s/\\IeC {\\CYRISHRT }/Ò/g
+s/\\IeC {\\cyrishrt }/Ó/g
+s/\\IeC {\\CYRK }/Ô/g
+s/\\IeC {\\cyrk }/Õ/g
+s/\\IeC {\\CYRL }/Ö/g
+s/\\IeC {\\cyrl }/×/g
+s/\\IeC {\\CYRM }/Ø/g
+s/\\IeC {\\cyrm }/Ù/g
+s/\\IeC {\\CYRN }/Ú/g
+s/\\IeC {\\cyrn }/Û/g
+s/\\IeC {\\CYRO }/Ü/g
+s/\\IeC {\\cyro }/Ý/g
+s/\\IeC {\\CYRP }/Þ/g
+s/\\IeC {\\cyrp }/ß/g
+s/\\IeC {\\CYRR }/à/g
+s/\\IeC {\\cyrr }/á/g
+s/\\IeC {\\CYRS }/â/g
+s/\\IeC {\\cyrs }/ã/g
+s/\\IeC {\\CYRT }/ä/g
+s/\\IeC {\\cyrt }/å/g
+s/\\IeC {\\CYRU }/æ/g
+s/\\IeC {\\cyru }/ç/g
+s/\\IeC {\\CYRF }/è/g
+s/\\IeC {\\cyrf }/é/g
+s/\\IeC {\\CYRH }/ê/g
+s/\\IeC {\\cyrh }/ë/g
+s/\\IeC {\\CYRC }/ì/g
+s/\\IeC {\\cyrc }/í/g
+s/\\IeC {\\CYRCH }/î/g
+s/\\IeC {\\cyrch }/ï/g
+s/\\IeC {\\CYRSH }/ð/g
+s/\\IeC {\\cyrsh }/ñ/g
+s/\\IeC {\\CYRSHCH }/ò/g
+s/\\IeC {\\cyrshch }/ó/g
+s/\\IeC {\\CYRHRDSN }/ô/g
+s/\\IeC {\\cyrhrdsn }/õ/g
+s/\\IeC {\\CYRERY }/ö/g
+s/\\IeC {\\cyrery }/÷/g
+s/\\IeC {\\CYRSFTSN }/ø/g
+s/\\IeC {\\cyrsftsn }/ù/g
+s/\\IeC {\\CYREREV }/ú/g
+s/\\IeC {\\cyrerev }/û/g
+s/\\IeC {\\CYRYU }/ü/g
+s/\\IeC {\\cyryu }/ý/g
+s/\\IeC {\\CYRYA }/þ/g
+s/\\IeC {\\cyrya }/ÿ/g
+}' $IDX | makeindex -t $ILG | tr '¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' \
+ 'áÁâÂ÷×çÇäÄåų£öÖúÚéÉêÊëËìÌíÍîÎïÏðÐòÒóÓôÔõÕæÆèÈãÃþÞûÛýÝÿßùÙøØüÜàÀñÑ' > $IND
diff --git a/Build/source/texk/tetex/rumakeindex.man b/Build/source/texk/tetex/rumakeindex.man
new file mode 100644
index 00000000000..0fb271841d0
--- /dev/null
+++ b/Build/source/texk/tetex/rumakeindex.man
@@ -0,0 +1,63 @@
+.TH "rumakeindex" "1" "September 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+rumakeindex \- process a LaTeX index using Russian Cyrillic
+characters
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBrumakeindex\fP \fIbasename\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBrumakeindex\fP is used to run \fBmakeindex\fP(1) on \f(CWidx\fP files
+that use Russian characters\&. It is part of the T2 package\&.
+.PP
+\fBrumakeindex\fP runs \fBsed\fP(1) on the \f(CWidx\fP file to convert
+Cyrillic character commands to 8-bit ASCII characters; pipes the
+results through \fBmakeindex\fP(1); and then through \fBtr\fP(1)
+to do some final conversions\&. The results are placed in a KOI8-R
+encoded \f(CWind\fP file\&.
+.PP
+.SH "FILES"
+.PP
+.IP
+.IP "\fIbasename\&.idx\fP"
+LaTeX index entry file
+.IP "\fIbasename\&.ilg\fP"
+LaTeX index log file
+.IP "\fIbasename\&.ind\fP"
+LaTeX processed index file
+.IP
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to the authors\&.
+.PP
+.SH "COPYRIGHT"
+.PP
+The T2 package is Copyright 1997-1999 Werner Lemberg, Vladimir
+Volovich and any individual authors listed elsewhere in package files\&.
+.PP
+It may be distributed under the conditions of the LaTeX Project Public
+License, either version 1\&.1 of this license or (at your option) any
+later version\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBmakeindex\fP(1), \fBsed\fP(1), \fBtr\fP(1),
+<ftp://ftp\&.vsu\&.ru/pub/tex/T2/README>\&.
+.PP
+.SH "AUTHOR"
+.PP
+Werner Lemberg
+<wl@gnu\&.org>, Vladimir Volovich
+<TeX@vvv\&.vsu\&.ru>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
+.PP
diff --git a/Build/source/texk/tetex/tcfmgr b/Build/source/texk/tetex/tcfmgr
new file mode 100755
index 00000000000..fcbf45e520c
--- /dev/null
+++ b/Build/source/texk/tetex/tcfmgr
@@ -0,0 +1,385 @@
+#!/bin/sh
+
+# invoke the right shell:
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+progname=tcfmgr
+
+abort()
+{
+ echo "$progname: $@." >&2
+ (exit 1); exit 1
+}
+
+mktexupd()
+{
+ setupMktexupd
+ $TFC_MKTEXUPD "$@" >&2
+}
+
+# call mktexdir script, disable all features (to prevent sticky directories)
+mktexdir()
+{
+ setupMktexDir
+ MT_FEATURES=none $TFC_MKTEXDIR "$@" >&2
+}
+
+setupMap()
+{
+ case $setupMapOK in
+ "") : ;;
+ *) (exit 0); return 0;;
+ esac
+
+ case $TFC_MAP in
+ "") TFC_MAP=`(kpsewhich -progname=texconfig -format='other text files' tcfmgr.map) 2>/dev/null`;;
+ esac
+
+ case $TFC_MAP in
+ "") abort "config file \`tcfmgr.map' (usually in \$TEXMFMAIN/texconfig) not found";;
+ esac
+
+ if test ! -f "$TFC_MAP"; then
+ abort "config file \`TFC_MAP' does not exist"
+ fi
+ setupMapOK=true
+}
+
+setupTemp()
+{
+ case $setupTempOK in
+ "") : ;;
+ *) (exit 0); return 0;;
+ esac
+
+ case $TFC_TEMP in
+ "") TFC_TEMP=${TEMPDIR-/tmp};;
+ esac
+
+ if test ! -d "$TFC_TEMP"; then
+ abort "temp directory \`$TFC_TEMP' does not exist"
+ fi
+
+ if test ! -w "$TFC_TEMP"; then
+ abort "temp directory \`$TFC_TEMP' is not writable"
+ fi
+ setupTempOK=true
+}
+
+setupTexmfConfig()
+{
+ case $TFC_TEXMFCONFIG in
+ "") TFC_TEXMFCONFIG=`(kpsewhich -var-value=TEXMFCONFIG) 2>/dev/null`;;
+ *) (exit 0); return 0;;
+ esac
+ case $TFC_TEXMFCONFIG in
+ "") abort "variable \$TEXMFCONFIG is not defined in texmf.cnf";;
+ esac
+}
+
+setupMktexDir()
+{
+ case $TFC_MKTEXDIR in
+ "") TFC_MKTEXDIR=`(kpsewhich --format='web2c files' mktexdir) 2>/dev/null`;;
+ esac
+
+ case $TFC_MKTEXDIR in
+ "") abort "program mktexdir (usually in \$TEXMFMAIN/web2c) not found";;
+ esac
+}
+
+setupMktexupd()
+{
+ case $TFC_MKTEXUPD in
+ "") TFC_MKTEXUPD=`(kpsewhich --format='web2c files' mktexupd) 2>/dev/null`;;
+ esac
+
+ case $TFC_MKTEXUPD in
+ "") abort "program mktexupd (usually in \$TEXMFMAIN/web2c) not found";;
+ esac
+}
+
+writableCheck()
+{
+ setupTexmfConfig
+ if test ! -d "$TFC_TEXMFCONFIG"; then
+ mktexdir "$TFC_TEXMFCONFIG" >/dev/null 2>&1
+ if test ! -d "$TFC_TEXMFCONFIG"; then
+ msg="Directory TEXMFCONFIG=\`$TFC_TEXMFCONFIG' does not exist"
+ (exit 1); return 1
+ fi
+ fi
+
+ case "$relDir" in
+ "") get_info;;
+ esac
+ if test -f "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE" \
+ && test -w "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE"
+ then
+ (exit 0); return 0
+ fi
+
+ if test -d "$TFC_TEXMFCONFIG/$relDir"; then
+ if test -w "$TFC_TEXMFCONFIG/$relDir"; then
+ (exit 0); return 0
+ else
+ msg="Directory \`$TFC_TEXMFCONFIG/$relDir' is not writable"
+ (exit 1); return 1
+ fi
+ else
+ # we assume that a "mkdir -p" would work if the top-level
+ # $TFC_TEXMFCONFIG is writable
+ if test -w "$TFC_TEXMFCONFIG"; then
+ (exit 0); return 0
+ else
+ msg="Directory \`$TFC_TEXMFCONFIG' is not writable"
+ (exit 1); return 1
+ fi
+ fi
+}
+
+get_info()
+{
+ case "$TFC_FILE" in
+ "") abort "missing --file option or empty argument";;
+ esac
+ setupMap
+ # prepare + get info
+ IFS=$TAB
+ # set -- x `(awk '$1 == file' file=$TFC_FILE <$TFC_MAP) 2>/dev/null`; shift
+ set -- x `(grep "^$TFC_FILE[ ]" $TFC_MAP) 2>/dev/null`; shift
+ IFS=$STD_IFS
+
+ # assign results
+ file="$1"
+ relDir="$2"
+ kpseFormat="$3"
+ kpseProgArg="$4"
+
+ # sanity checks
+ case $file in
+ "") abort "no info for file \`$TFC_FILE' in map \`$TFC_MAP'";;
+ esac
+
+ case $relDir in
+ -) abort "no known standard location for file \`$TFC_FILE' in map \`$TFC_MAP'";;
+ esac
+
+ case $kpseProgArg in
+ -) kpseProgArg=kpsewhich;;
+ esac
+}
+
+check_out()
+{
+ if $createEmptyFile; then
+ :
+ else
+ case "$orig" in
+ "")
+ get_info
+ orig=`(kpsewhich -format="$kpseFormat" -progname="$kpseProgArg" "$TFC_FILE") 2>/dev/null`
+ ;;
+ *)
+ test -f "$orig" || orig=
+ esac
+
+ case $orig in
+ "") abort "file \`$TFC_FILE' not found";;
+ esac
+ fi
+
+ # writableCheck needs to get a valid relDir, so it calls get_info if necessary
+ if writableCheck; then
+ : ok
+ else
+ cat >&2 <<eof
+
+There was a problem finding a proper place to store configuration data.
+The message was:
+ $msg
+
+To overcome such problems, set up the environment variable TEXMFCONFIG to
+point to a directory tree that is writable to you, e.g.
+ TEXMFCONFIG=\$HOME/texmf; export TEXMFCONFIG
+or
+ setenv TEXMFCONFIG \$HOME/texmf
+eof
+ (exit 1); exit 1
+ fi
+
+ setupTemp
+ : ${TFC_ID=tfc$$}
+ for d in "$TFC_TEMP/$TFC_ID" "$TFC_TEMP/$TFC_ID/in" "$TFC_TEMP/$TFC_ID/out"; do
+ (umask 077; mkdir "$d") || abort "could not create directory \`$d'"
+ done
+
+ if $createEmptyFile; then
+ (umask 022
+ > "$TFC_TEMP/$TFC_ID/in/$TFC_FILE"
+ > "$TFC_TEMP/$TFC_ID/out/$TFC_FILE")
+ else
+ cp "$orig" "$TFC_TEMP/$TFC_ID/in/$TFC_FILE" \
+ || abort "copy \`$orig' -> \`$TFC_TEMP/$TFC_ID/in/$TFC_FILE' failed"
+
+ cp "$orig" "$TFC_TEMP/$TFC_ID/out/$TFC_FILE" \
+ || abort "copy \`$orig' -> \`$TFC_TEMP/$TFC_ID/out/$TFC_FILE' failed"
+
+ chmod u+w "$TFC_TEMP/$TFC_ID/out/$TFC_FILE"
+ fi
+
+ cat >"$TFC_TEMP/$TFC_ID/relDir" <<eof
+$relDir
+eof
+
+ cat > "$TFC_TEMP/$TFC_ID/file" <<eof
+$TFC_FILE
+eof
+
+ echo "$TFC_ID $TFC_TEMP/$TFC_ID/in/$TFC_FILE $TFC_TEMP/$TFC_ID/out/$TFC_FILE $orig"
+}
+
+check_in()
+{
+ setupTemp
+
+ if test ! -d "$TFC_TEMP/$TFC_ID"; then
+ abort "directory \`$TFC_TEMP/$TFC_ID' does not exist. Perhaps missing arg --id"
+ fi
+
+ case "$TFC_FILE" in
+ "") TFC_FILE=`(cat "$TFC_TEMP/$TFC_ID/file") 2>/dev/null`;;
+ esac
+
+ for f in "$TFC_TEMP/$TFC_ID/relDir" "$TFC_TEMP/$TFC_ID/file" "$TFC_TEMP/$TFC_ID/in/$TFC_FILE" "$TFC_TEMP/$TFC_ID/out/$TFC_FILE"; do
+ if test ! -f "$f"; then
+ abort "Oops! file \`$f' does not exist"
+ fi
+ done
+
+ if (cmp "$TFC_TEMP/$TFC_ID/in/$TFC_FILE" "$TFC_TEMP/$TFC_ID/out/$TFC_FILE") >/dev/null 2>&1; then
+ (exit 0); return 0
+ fi
+
+ setupTexmfConfig
+ relDir=`cat "$TFC_TEMP/$TFC_ID/relDir"`
+ if test ! -d "$TFC_TEXMFCONFIG/$relDir"; then
+ setupMktexDir
+ mktexdir "$TFC_TEXMFCONFIG/$relDir" || abort "could not create directory \`$TFC_TEXMFCONFIG/$relDir'"
+ fi
+
+ if test -f "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE"; then
+ needsLSRUpdate=false
+ test -w "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE" || rm -f "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE"
+ else
+ needsLSRUpdate=true
+ fi
+
+ if test -f "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE"; then
+ cat <"$TFC_TEMP/$TFC_ID/out/$TFC_FILE" >"$TFC_TEXMFCONFIG/$relDir/$TFC_FILE" ||
+ abort "failed to write new file \`$TFC_TEXMFCONFIG/$relDir/$TFC_FILE'"
+ else
+ cp "$TFC_TEMP/$TFC_ID/out/$TFC_FILE" "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE" ||
+ abort "failed to copy \`$TFC_TEMP/$TFC_ID/out/$TFC_FILE' to \`$TFC_TEXMFCONFIG/$relDir/$TFC_FILE'"
+ chmod 644 "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE" 2>/dev/null
+ fi
+ if $needsLSRUpdate; then
+ mktexupd "$TFC_TEXMFCONFIG/$relDir" "$TFC_FILE"
+ fi
+ echo "$TFC_TEXMFCONFIG/$relDir/$TFC_FILE"
+ (exit 0); return 0
+}
+
+find_file()
+{
+ get_info
+ kpsewhich -format="$kpseFormat" -progname="$kpseProgArg" "$TFC_FILE"
+}
+
+help()
+{
+ cat <<eof
+Usage: $progname [option] ...
+
+Valid options:
+ --reldir specify directory relative to texmf root
+ --infile specify input file
+ --emptyinfile create an empty input file
+ --map specify map file
+ --texmfconfig texmf tree for config files
+ --mktexdir full path of mktexdir
+ --mktexupd full path of mktexupd
+ --tmp temp directory
+ --id identity string (generated when running command co)
+ --file specify configuration entry from map file
+ --cmd command to execute
+ --help display this help
+
+Valid commands (--cmd) are:
+ co check out
+ ci check in
+ find look up source for file
+ mapfile display path name of map file
+eof
+}
+
+show_map()
+{
+ setupMap
+ echo "$TFC_MAP"
+}
+
+TAB=' '
+SPACE=' '
+NL='
+'
+createEmptyFile=false
+
+STD_IFS="$TAB$SPACE$NL"
+while
+ case $1 in
+ --reldir) relDir=$2; shift;;
+ --infile) orig=$2; shift;;
+ --emptyinfile) createEmptyFile=true;;
+ --map) TFC_MAP=$2; shift;;
+ --texmfconfig)
+ TFC_TEXMFCONFIG=$2; shift;;
+ --mktexdir)
+ TFC_MKTEXDIR=$2;;
+ --mktexupd)
+ TFC_MKTEXUPD=$2;;
+ --tmp) TFC_TEMP=$2; shift;;
+ --id) TFC_ID=$2; shift;;
+ --file)TFC_FILE=$2; shift;;
+ --cmd) TFC_CMD=$2; shift;;
+ --help) TFC_CMD=help;;
+ "") break;;
+ *) abort "unknown option \`$1'; try $progname --help"; (exit 1); exit 1;;
+ esac
+do test $# -gt 0 && shift; done
+
+case $TFC_CMD in
+ ci) check_in;;
+ co) check_out;;
+ find) find_file;;
+ mapfile) show_map;;
+ help) help;;
+ "")
+ abort "no command; try $progname --help"; (exit 1); exit 1;;
+ *)
+ abort "unknown command \`$TFC_CMD'; try $progname --help"; (exit 1); exit 1;;
+esac
diff --git a/Build/source/texk/tetex/tcfmgr.map b/Build/source/texk/tetex/tcfmgr.map
new file mode 100644
index 00000000000..b15c3416dbf
--- /dev/null
+++ b/Build/source/texk/tetex/tcfmgr.map
@@ -0,0 +1,10 @@
+# file rel dir search path progname
+dvipdfmx.cfg dvipdfm/config other text files dvipdfm
+config dvipdfm/config other text files dvipdfm
+config.ps dvips/config dvips config -
+modes.mf metafont/misc .mf -
+pdftexconfig.tex tex/generic/config .tex -
+fmtutil.cnf web2c web2c files -
+mktex.cnf web2c web2c files -
+updmap.cfg web2c web2c files -
+XDvi xdvi other text files xdvi
diff --git a/Build/source/texk/tetex/texconfig b/Build/source/texk/tetex/texconfig
new file mode 100755
index 00000000000..633ba7e807d
--- /dev/null
+++ b/Build/source/texk/tetex/texconfig
@@ -0,0 +1,1412 @@
+#!/bin/sh
+
+# TeX-Config version 3.0
+# Thomas Esser, te@dbs.uni-hannover.de. Public domain.
+
+# invoke the right shell:
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+# initializations...
+progname=texconfig
+
+# the version string
+version=1118467711 # seconds since `00:00:00 1970-01-01 UTC'
+ # date '+%s' (with GNU date)
+
+envVars="
+ AFMFONTS BIBINPUTS BSTINPUTS CMAPFONTS CWEBINPUTS ENCFONTS GFFONTS
+ GLYPHFONTS INDEXSTYLE LIGFONTS MFBASES MFINPUTS MFPOOL MFTINPUTS
+ MISCFONTS MPINPUTS MPMEMS MPPOOL MPSUPPORT OCPINPUTS OFMFONTS
+ OPENTYPEFONTS OPLFONTS OTPINPUTS OVFFONTS OVPFONTS PDFTEXCONFIG PKFONTS
+ PSHEADERS SFDFONTS T1FONTS T1INPUTS T42FONTS TEXBIB TEXCONFIG TEXDOCS
+ TEXFONTMAPS TEXFONTS TEXFORMATS TEXINDEXSTYLE TEXINPUTS TEXMFCNF
+ TEXMFDBS TEXMFINI TEXMFSCRIPTS TEXPICTS TEXPKS TEXPOOL TEXPSHEADERS
+ TEXSOURCES TFMFONTS TRFONTS TTFONTS VFFONTS WEB2C WEBINPUTS
+"
+tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/tctmp.$$
+needsCleanup=false
+lastUpdatedFile=
+
+###############################################################################
+# setupFMT(void)
+# find a suitable version of fmt / adjust
+###############################################################################
+setupFMT()
+{
+ case $FMT in
+ "")
+ FMT=fmt
+ test ! -x /bin/fmt && test ! -f /usr/bin/fmt &&
+ { test -x /bin/adjust || test -x /usr/bin/adjust; } && FMT=adjust
+ ;;
+ *)
+ return
+ ;;
+ esac
+}
+
+###############################################################################
+# myFmt(args)
+# run $FMT
+###############################################################################
+myFmt()
+{
+ setupFMT
+ $FMT ${1+"$@"}
+}
+
+###############################################################################
+# echoShowVariable(args ...)
+# show environment variables which names are as args and their values
+###############################################################################
+echoShowVariable()
+{
+ for esv
+ do
+ var=$esv
+ eval val=\"\${$var+=}\${$var- is unset}\"
+ echo "$var$val"
+ done | grep -v 'is unset$'
+}
+
+###############################################################################
+# echoShowKpseVariable(args ...)
+# show kpathsea variables which names are as args and their values
+###############################################################################
+echoShowKpseVariable()
+{
+ for eskv
+ do
+ var=$eskv
+ val=`kpsewhich -var-value="$eskv"`
+ echo "$var=$val"
+ done
+}
+
+###############################################################################
+# echoLocateBinary(args ...)
+# show where programs actually exist
+###############################################################################
+echoLocateBinary()
+{
+ for elb
+ do
+ elbLoc=`checkForBinary "$elb"`
+ case $elbLoc in
+ "") echo "$elb: not found";;
+ *) echo "$elb: $elbLoc";;
+ esac
+ done
+}
+
+###############################################################################
+# echoLocateCfgfile(args ...)
+# show where programs actually exist
+###############################################################################
+echoLocateCfgfile()
+{
+ for elc
+ do
+ case $elc in
+ texmf.cnf) elcLoc=`kpsewhich $elc`;;
+ *) elcLoc=`tcfmgr --cmd find --file "$elc"`;;
+ esac
+ case $elcLoc in
+ "") echo "$elc: not found";;
+ *) echo "$elcLoc";;
+ esac
+ done
+}
+
+###############################################################################
+# checkForBinary(prog)
+# echo full path of prog
+###############################################################################
+checkForBinary()
+{
+ cfbBinary=$1
+
+ OLDIFS=$IFS
+ IFS=:
+ set x `echo "$PATH" | sed 's/^:/.:/; s/:$/:./; s/::/:.:/g'`; shift
+ found=false
+ for pathElem
+ do
+ case $pathElem in
+ "") continue;;
+ *) test -f "$pathElem/$cfbBinary" && { echo "$pathElem/$cfbBinary"; found=true; break; }
+ esac
+ done
+ IFS=$OLDIFS
+ case $found in
+ true) (exit 0); return 0;;
+ false) (exit 1); return 1;;
+ esac
+}
+
+###############################################################################
+# findDialogProg(void)
+# Some systems have their own dialog. Use it then and do not use
+# faked TERM and TERMINFO variables when calling that dialog.
+###############################################################################
+findDialogProg()
+{
+ { u=`uname -s`; } 2>/dev/null
+ case "$u" in
+ FreeBSD|Linux|cygwin*|CYGWIN*)
+ test -f /usr/bin/whiptail && DIALOG_PROG=/usr/bin/whiptail
+ test -f /usr/bin/dialog && DIALOG_PROG=/usr/bin/dialog
+ test -f /bin/dialog && DIALOG_PROG=/bin/dialog
+ ;;
+ esac
+}
+
+###############################################################################
+# runDialog(args)
+# call either tcdialog or $DIALOG_PROG
+###############################################################################
+runDialog()
+{
+ test -z "$NO_CLEAR" && tty -s && clear
+ case "$DIALOG_PROG" in
+ "")
+ TERM=$DIALOG_TERM TERMINFO=$DIALOG_TERMINFO \
+ tcdialog --title "$progname setup utility" ${1+"$@"};;
+ *)
+ $DIALOG_PROG --title "$progname setup utility" ${1+"$@"};;
+ esac
+}
+
+
+###############################################################################
+# cleanup()
+# clean up the temp area and exit with proper exit status
+###############################################################################
+cleanup()
+{
+ rc=$1
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { cd / && rm -rf "$tmpdir"; }
+ (exit $rc); exit $rc
+}
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+setupTmpDir()
+{
+ case $needsCleanup in
+ true) return;;
+ esac
+
+ trap 'cleanup 1' 1 2 3 7 13 15
+ needsCleanup=true
+ (umask 077; mkdir "$tmpdir") \
+ || abort "could not create directory \`$tmpdir'"
+}
+
+###############################################################################
+# setupTexmfmain()
+# get value for MT_TEXMFMAIN (with caching)
+###############################################################################
+setupTexmfmain()
+{
+ case $MT_TEXMFMAIN in
+ "") MT_TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`;;
+ *) return;;
+ esac
+}
+
+###############################################################################
+# setupTexmfmain()
+# get value for MT_TEXMFMAIN (with caching)
+###############################################################################
+setupTexmfdist()
+{
+ case $MT_TEXMFDIST in
+ "") MT_TEXMFDIST=`kpsewhich -var-value=TEXMFDIST`;;
+ *) return;;
+ esac
+}
+
+###############################################################################
+# setupTexmfvar()
+# get value for MT_TEXMFVAR (with caching)
+###############################################################################
+setupTexmfvar()
+{
+ case $MT_TEXMVAR in
+ "") MT_TEXMVAR=`kpsewhich -var-value=TEXMFVAR`;;
+ *) return;;
+ esac
+}
+
+###############################################################################
+# setupSystexmf()
+# get value for MT_SYSTEXMF (with caching)
+###############################################################################
+setupSystexmf()
+{
+ case $MT_SYSTEXMF in
+ "") MT_SYSTEXMF=`kpsewhich -var-value=SYSTEXMF`;;
+ *) return;;
+ esac
+}
+
+###############################################################################
+# abort(errmsg)
+# print `errmsg' to stderr and exit with error code 1
+###############################################################################
+abort()
+{
+ echo "$progname: $1." >&2
+ cleanup 1
+}
+
+###############################################################################
+# mktexdir(args)
+# call mktexdir script, disable all features (to prevent sticky directories)
+###############################################################################
+mktexdir()
+{
+ setupTexmfmain
+ MT_FEATURES=none "$MT_TEXMFMAIN/web2c/mktexdir" "$@" >&2
+}
+
+###############################################################################
+# tcfmgr(args)
+# call tcfmgr script
+###############################################################################
+tcfmgr()
+{
+ setupTexmfmain
+ "$MT_TEXMFMAIN/texconfig/tcfmgr" "$@"
+}
+
+###############################################################################
+# mktexupd(args)
+# call mktexupd script
+###############################################################################
+mktexupd()
+{
+ setupTexmfmain
+ "$MT_TEXMFMAIN/web2c/mktexupd" "$@"
+}
+
+###############################################################################
+# getRelDir(file)
+# matches file against SYSTEXMF. Returns relative directory of file within
+# a texmf tree in variable relPart.
+###############################################################################
+getRelDir()
+{
+ file=$1
+ relPart=
+
+ setupSystexmf
+ OLDIFS=$IFS
+ IFS='
+'
+ set x `echo "$MT_SYSTEXMF" | tr : '
+'`; shift
+ IFS=$OLDIFS
+
+ # now loop over all components of SYSTEXMF
+ for dir
+ do
+ test -n "$dir" || continue
+ case "$file" in
+ $dir/*)
+ relPart=`echo "$file" | sed "s%$dir/*%%"`
+ break
+ ;;
+ esac
+ done
+
+ # now check for success / failure
+ case $relPart in
+ ""|$file)
+ # empty or full filename -> getRelDir failed!
+ (exit 1); return 1
+ ;;
+ *)
+ # relPart should just have the "dirname" part:
+ relPart=`echo "$relPart" | sed 's%/*[^/]*$%%'`
+ (exit 0); return 0
+ ;;
+ esac
+}
+
+###############################################################################
+# configReplace(file, pattern, line)
+# The first line in file that matches pattern gets replaced by line.
+# line will be added at the end of the file if pattern does not match.
+###############################################################################
+configReplace()
+{
+ configReplaceFile=$1; configReplacePat=$2; configReplaceLine=$3
+
+ if grep "$configReplacePat" "$configReplaceFile" >/dev/null; then
+ ed "$configReplaceFile" >/dev/null 2>&1 <<-eof
+ /$configReplacePat/c
+ $configReplaceLine
+ .
+ w
+ q
+eof
+ else
+ echo "$configReplaceLine" >> $configReplaceFile
+ fi
+}
+
+###############################################################################
+# fmgrConfigReplace (file regex value)
+# replaces line matching regex by value in file
+###############################################################################
+fmgrConfigReplace()
+{
+ fmgrConfigReplaceChanged=false
+
+ moreArgs=""
+ while
+ case $1 in
+ --*) moreArgs="$moreArgs $1 $2";;
+ *) break;;
+ esac
+ do shift; shift; done
+ fmgrConfigReplaceFile=$1
+ fmgrConfigReplaceRegex=$2
+ fmgrConfigReplaceValue=$3
+
+ setupTmpDir
+ co=`tcfmgr $moreArgs --tmp $tmpdir --cmd co --file $fmgrConfigReplaceFile`
+ if test $? != 0; then
+ echo "$progname: fmgrConfigReplace co failed for \`$fmgrConfigReplaceFile'" >&2
+ (exit 1); return 1
+ fi
+ set x $co; shift
+ fmgrConfigReplaceID=$1; fmgrConfigReplaceCfgFile=$3; fmgrConfigReplaceOrigFile=$4
+ configReplace "$fmgrConfigReplaceCfgFile" "$fmgrConfigReplaceRegex" "$fmgrConfigReplaceValue"
+ ci=`tcfmgr --tmp $tmpdir --cmd ci --id "$fmgrConfigReplaceID"`
+ if test $? != 0; then
+ echo "$progname: fmgrConfigReplace ci failed for \`$fmgrConfigReplaceFile'" >&2
+ (exit 1); return 1
+ fi
+ case $ci in
+ "") :;;
+ $lastUpdatedFile)
+ fmgrConfigReplaceChanged=true;;
+ *) echo "$progname: updated configuration saved as file \`$ci'" >&2
+ fmgrConfigReplaceChanged=true
+ lastUpdatedFile=$ci;;
+ esac
+ (exit 0); return 0
+}
+
+###############################################################################
+# setupDvipsPaper(paper)
+# rearranges config.ps to make paper the first paper definition
+###############################################################################
+setupDvipsPaper()
+{
+ setupDvipsPaperChanged=false
+ setupDvipsPaperFile=config.ps
+ setupDvipsPaperDftPaper=$1
+
+ setupTmpDir
+ co=`tcfmgr --tmp $tmpdir --cmd co --file $setupDvipsPaperFile`
+ if test $? != 0; then
+ echo "$progname: setupDvipsPaper co failed for \`$setupDvipsPaperFile'" >&2
+ (exit 1); return 1
+ fi
+ set x $co; shift
+ setupDvipsPaperID=$1; setupDvipsPaperCfgFile=$3; setupDvipsPaperOrigFile=$4
+
+ ed "$setupDvipsPaperCfgFile" > /dev/null 2>&1 <<-eof
+ /@ /ka
+ \$a
+ @
+ .
+ /@ $setupDvipsPaperDftPaper /;/@ /-1m'a-1
+ \$d
+ w
+ q
+eof
+
+ ci=`tcfmgr --tmp $tmpdir --cmd ci --id "$setupDvipsPaperID"`
+ if test $? != 0; then
+ echo "$progname: setupDvipsPaper ci failed for \`$setupDvipsPaperFile'" >&2
+ (exit 1); return 1
+ fi
+ case $ci in
+ "") :;;
+ $lastUpdatedFile)
+ setupDvipsPaperChanged=true;;
+ *) echo "$progname: updated configuration saved as file \`$ci'" >&2
+ setupDvipsPaperChanged=true
+ lastUpdatedFile=$ci;;
+ esac
+ (exit 0); return 0
+}
+
+###############################################################################
+# setupModesMfFile(void)
+# find modes.mf file (with caching)
+###############################################################################
+setupModesMfFile()
+{
+ case $modesMfFile in
+ "")
+ modesMfFile=`tcfmgr --cmd find --file modes.mf`
+ ;;
+ *)
+ return
+ ;;
+ esac
+}
+
+###############################################################################
+# locateConfigPsFile(void)
+# find config.ps file (with caching)
+###############################################################################
+locateConfigPsFile()
+{
+ case $configPsFile in
+ "")
+ configPsFile=`tcfmgr --cmd find --file config.ps`
+ ;;
+ *)
+ return
+ ;;
+ esac
+}
+
+###############################################################################
+# listMfModes(file)
+# list modes from modes.mf file
+###############################################################################
+listMfModes()
+{
+ grep mode_def "$modesMfFile" |
+ sed -e "s/mode_def //" \
+ -e "s/ .*%[^ ]* / '/" \
+ -e "s/\$/' /" |
+ egrep -v "^(help|%)" | sort
+}
+
+###############################################################################
+# listDvipsPapers(void)
+# list paper definitions from config.ps
+###############################################################################
+listDvipsPapers()
+{
+ grep '@ ' $configPsFile | sed "s/..//;s/ / '/;s/\$/' /"
+}
+
+###############################################################################
+# getFormatsForHyphen(void)
+# list all formats which have customizable hyphenation
+###############################################################################
+getFormatsForHyphen()
+{
+ fmtutil --catcfg | awk '$3 != "-" {print $1}' | sort
+}
+
+###############################################################################
+# getRes(mode)
+# print resolution (both X and Y axis) to metafont mode
+###############################################################################
+getRes()
+{
+ getResMode=$1
+ (
+ cd $tmpdir
+ cat >mftmp.mf <<-'eof'
+ let myexit = primitive_end_;
+ mode_setup;
+ string xdpi;
+ xdpi := decimal round pixels_per_inch;
+ message "XDPI = " & xdpi;
+ string ydpi;
+ ydpi := decimal round (pixels_per_inch * aspect_ratio);
+ message "YDPI = " & ydpi;
+ fontmaking := 0;
+ myexit;
+eof
+ mf '\mode='"$getResMode"'; \input ./mftmp' </dev/null \
+ | awk '$1 == "XDPI" || $1 == "YDPI" { print $3 }'
+ )
+}
+
+###############################################################################
+# checkElemInList(elem, list)
+# check if element exists in list
+###############################################################################
+checkElemInList()
+{
+ checkElemInListElem=$1; shift
+ checkElemInListFound=false
+ for checkElemInListIter
+ do
+ case "x$checkElemInListElem" in
+ x$checkElemInListIter)
+ checkElemInListFound=true
+ break
+ ;;
+ esac
+ done
+ case $checkElemInListFound in
+ true) (exit 0); return 0;;
+ esac
+ (exit 1); return 1
+}
+
+
+###############################################################################
+# tcBatch(args)
+# handle batch mode
+###############################################################################
+tcBatch()
+{
+ help="Usage: $progname conf
+ $progname dvipdfmx paper PAPER
+ $progname dvipdfm paper PAPER
+ $progname dvips [options]
+ $progname faq
+ $progname font vardir DIR
+ $progname font ro
+ $progname font rw
+ $progname formats
+ $progname hyphen FORMAT
+ $progname init [format]
+ $progname mode MODE
+ $progname paper PAPER
+ $progname pdftex [options]
+ $progname rehash
+ $progname xdvi paper PAPER
+
+Get more help with
+ $progname dvipdfmx paper
+ $progname dvipdfm paper
+ $progname dvips
+ $progname font
+ $progname mode
+ $progname paper
+ $progname pdftex
+ $progname xdvi paper"
+
+ case $1 in
+ # texconfig conf
+ conf|confall)
+ setupTexmfmain
+ setupTexmfdist
+ echo '=========================== version information =========================='
+ if test -f $MT_TEXMFMAIN/release-tetex-src.txt; then
+ echo "teTeX-src release: `cat $MT_TEXMFMAIN/release-tetex-src.txt`"
+ else
+ echo "teTeX-src release: (info not available)"
+ fi
+ if test -f $MT_TEXMFDIST/release-tetex-texmf.txt; then
+ echo "teTeX-texmf release: `cat $MT_TEXMFDIST/release-tetex-texmf.txt`"
+ else
+ echo "teTeX-texmf release: (info not available)"
+ fi
+ echo
+ echo '==================== binaries found by searching $PATH ==================='
+ echo "PATH=$PATH"
+ echoLocateBinary kpsewhich updmap fmtutil texconfig tex pdfetex mktexpk dvips dvipdfm
+ echo
+ echo '=========================== active config files =========================='
+ echoLocateCfgfile texmf.cnf updmap.cfg fmtutil.cnf config.ps mktex.cnf XDvi pdftexconfig.tex config | sort +1
+ echo
+ echo '============================= font map files ============================='
+ for m in psfonts.map pdftex.map ps2pk.map dvipdfm.map; do
+ echo "$m: `kpsewhich $m`"
+ done
+ echo
+ echo '=========================== kpathsea variables ==========================='
+ echoShowKpseVariable TEXMFMAIN TEXMFDIST TEXMFLOCAL TEXMFSYSVAR TEXMFSYSCONFIG TEXMFVAR TEXMFCONFIG TEXMFHOME VARTEXFONTS TEXMF SYSTEXMF TEXMFDBS WEB2C TEXPSHEADERS TEXCONFIG ENCFONTS TEXFONTMAPS
+
+ echo
+ echo '==== kpathsea variables (from environment only; ok if no output here) ===='
+ echoShowVariable $envVars
+ ;;
+
+ # texconfig dvipdfm
+ dvipdfm)
+ help="Usage: $progname dvipdfm paper PAPER
+
+Valid PAPER settings:
+ letter legal ledger tabloid a4 a3"
+ case $2 in
+ # texconfig dvipdfm paper
+ paper-list)
+ for p in letter legal ledger tabloid a4 a3; do echo $p; done
+ ;;
+ paper)
+ case $3 in
+ letter|legal|ledger|tabloid|a4|a3)
+ fmgrConfigReplace config '^p' "p $3";;
+ "") echo "$help" >&2; rc=1;;
+ *)
+ echo "$progname: unknown PAPER \`$3' given as argument for \`$progname dvipdfm paper'" >&2
+ echo "$progname: try \`$progname dvipdfm paper' for help" >&2
+ rc=1 ;;
+ esac ;;
+ # texconfig dvipdfm ""
+ "")
+ echo "$help" >&2; rc=1 ;;
+ # texconfig dvipdfm <unknown>
+ *)
+ echo "$progname: unknown option \`$2' given as argument for \`$progname dvipdfm'" >&2
+ echo "$progname: try \`$progname dvipdfm' for help" >&2
+ rc=1
+ ;;
+ esac
+ ;;
+
+ # texconfig dvipdfmx
+ dvipdfmx)
+ help="Usage: $progname dvipdfmx paper PAPER
+
+Valid PAPER settings:
+ letter legal ledger tabloid a4 a3"
+ case $2 in
+ # texconfig dvipdfmx paper
+ paper-list)
+ for p in letter legal ledger tabloid a4 a3; do echo $p; done
+ ;;
+ paper)
+ case $3 in
+ letter|legal|ledger|tabloid|a4|a3)
+ fmgrConfigReplace dvipdfmx.cfg '^p' "p $3";;
+ "") echo "$help" >&2; rc=1;;
+ *)
+ echo "$progname: unknown PAPER \`$3' given as argument for \`$progname dvipdfmx paper'" >&2
+ echo "$progname: try \`$progname dvipdfmx paper' for help" >&2
+ rc=1 ;;
+ esac ;;
+ # texconfig dvipdfmx ""
+ "")
+ echo "$help" >&2; rc=1 ;;
+ # texconfig dvipdfmx <unknown>
+ *)
+ echo "$progname: unknown option \`$2' given as argument for \`$progname dvipdfmx'" >&2
+ echo "$progname: try \`$progname dvipdfmx' for help" >&2
+ rc=1
+ ;;
+ esac
+ ;;
+
+ # texconfig dvips
+ dvips)
+ shift
+ help="Usage: $progname dvips add PRINTER
+ $progname dvips del PRINTER
+ $progname dvips paper PAPER
+ $progname dvips [-P PRINTER] mode MODE
+ $progname dvips [-P PRINTER] offset OFFSET
+ $progname dvips [-P PRINTER] printcmd CMD"
+ case $1 in
+ -P)
+ case $2 in
+ "")
+ echo "$progname: missing arg for parameter -P" >&2
+ rc=1; (exit $rc); return $rc
+ ;;
+ *)
+ otherPrinter=true
+ otherPrinterName=$2
+ otherPrinterFile=`kpsewhich -format='dvips config' "config.$otherPrinterName"`
+ case $otherPrinterFile in
+ "")
+ echo "$progname: configuration file \`config.$otherPrinterName' for printer \`$otherPrinterName' not found" >&2
+ rc=1; (exit $rc); return $rc
+ ;;
+ *) shift; shift;;
+ esac
+ ;;
+ esac
+ ;;
+ *)
+ otherPrinter=false
+ ;;
+ esac
+ case $otherPrinter in
+ true)
+ tcBatchDvipsPrinter=$otherPrinterName
+ moreFmgrArgs="--reldir dvips/config --infile $otherPrinterFile"
+ ;;
+ *)
+ tcBatchDvipsPrinter=ps
+ ;;
+ esac
+ case $1 in
+ add)
+ case $2 in
+ "")
+ echo "Usage: $progname dvips add PRINTER" >&2
+ rc=1
+ ;;
+ *)
+ printerName=$2
+ pFile=`kpsewhich -format='dvips config' "config.$printerName"`
+ case $pFile in
+ "")
+ setupTmpDir
+ tcfRet=`tcfmgr --emptyinfile --reldir dvips/config --cmd co --tmp $tmpdir --file "config.$printerName"`
+ if test $? != 0; then
+ echo "$progname: failed to add new configuration file \`config.$printerName'" >&2
+ rc=1
+ else
+ set x $tcfRet; shift
+ tcBatchDvipsAddID=$1; tcBatchDvipsAddFile=$3
+ echo "% file config.$printerName; added by texconfig" > "$tcBatchDvipsAddFile"
+ tcfRet=`tcfmgr --tmp $tmpdir --id "$tcBatchDvipsAddID" --cmd ci`
+ if test $? != 0; then
+ echo "$progname: failed to add new configuration file \`config.$printerName'" >&2
+ rc=1
+ else
+ echo "$progname: file $tcfRet added" >&2
+ fi
+ fi
+ ;;
+ *)
+ echo "$progname: configuration file for printer \`$printerName' already exists (\`$pFile')" >&2
+ rc=1
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ del)
+ case $2 in
+ "")
+ echo "Usage: $progname dvips del PRINTER" >&2
+ rc=1
+ ;;
+ *)
+ printerName=$2
+ pFile=`kpsewhich -format='dvips config' "config.$printerName"`
+ case $pFile in
+ "")
+ echo "$progname: configuration file for printer \`$printerName' (config.$printerName) not found" >&2
+ rc=1
+ ;;
+ *)
+ if rm "$pFile"; then
+ echo "$progname: file \`$pFile' removed" >&2
+ else
+ echo "$progname: failed to remove file \`$pFile'" >&2
+ rc=1
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ paper-list)
+ locateConfigPsFile
+ listDvipsPapers
+ ;;
+ paper)
+ case $2 in
+ "")
+ echo "Usage: $progname dvips paper PAPER" >&2
+ echo >&2; echo "Valid PAPER settings:" >&2
+ locateConfigPsFile
+ listDvipsPapers | sed 's@ .*@@; s@^@ @' | myFmt
+ rc=1
+ ;;
+ *)
+ tcBatchDvipsPaper=$2
+ locateConfigPsFile
+ case "$configPsFile" in
+ "")
+ echo "$progname: file config.ps not found" >&2; rc=1
+ ;;
+ *)
+ if grep "@ $tcBatchDvipsPaper " $configPsFile >/dev/null 2>&1; then
+ setupDvipsPaper "$tcBatchDvipsPaper"
+ else
+ echo "$progname: paper \`$tcBatchDvipsPaper' not found in file \`$configPsFile'" >&2; rc=1
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ mode)
+ case $2 in
+ "")
+ echo "Usage: $progname dvips mode MODE
+
+Valid MODE settings:"
+ setupModesMfFile
+ listMfModes | sed 's@ .*@@; s@^@ @' | myFmt
+ rc=1
+ ;;
+ *)
+ tcBatchDvipsMode=$2
+ setupTmpDir
+ setupModesMfFile
+ if checkElemInList "$tcBatchDvipsMode" `listMfModes | sed 's@ .*@@'`; then
+ set x `getRes "$tcBatchDvipsMode"`; shift
+ resX=$1; resY=$2
+ fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^M' "M $tcBatchDvipsMode"
+ fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^D' "D $resX"
+ fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^X' "X $resX"
+ fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^Y' "Y $resY"
+ else
+ echo "$progname: unknown MODE \`$tcBatchDvipsMode' given as argument for \`$progname dvips mode'" >&2
+ echo "$progname: try \`$progname dvips mode' for help" >&2
+ rc=1
+ fi
+ ;;
+ esac
+ ;;
+ offset)
+ offset=$2
+ case $offset in
+ "")
+ echo "Usage: $progname dvips offset OFFSET"
+ rc=1
+ ;;
+ *)
+ fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^O' "O $offset"
+ esac
+ ;;
+ printcmd)
+ printcmd=$2
+ case $printcmd in
+ "")
+ echo "Usage: $progname dvips printcmd CMD"
+ rc=1
+ ;;
+ -)
+ fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^o' o
+ ;;
+ *)
+ fmgrConfigReplace $moreFmgrArgs config.$tcBatchDvipsPrinter '^o' "o |$printcmd"
+ ;;
+ esac
+ ;;
+ "")
+ echo "$help" >&2; rc=1
+ ;;
+ *)
+ echo "$progname: unknown option \`$1' given as argument for \`$progname dvips'" >&2
+ echo "$progname: try \`$progname dvips' for help" >&2
+ rc=1
+ ;;
+ esac
+ ;;
+
+ faq)
+ setupTexmfmain
+ if test -f $MT_TEXMFMAIN/doc/tetex/teTeX-FAQ; then
+ <$MT_TEXMFMAIN/doc/tetex/teTeX-FAQ eval ${PAGER-more}
+ else
+ echo "$progname: faq not found (usually in \$TEXMFMAIN/doc/tetex/teTeX-FAQ)" >&2
+ rc=1
+ fi
+ ;;
+
+ # handle "texconfig font"
+ font)
+ help="Usage: $progname font vardir DIR
+ $progname font ro
+ $progname font rw
+
+The vardir option changes the VARTEXFONTS variable in the texmf.cnf file.
+
+The rw option makes the VARTEXFONTS directory (and subtrees pk, tfm,
+source) world writable and sets the features appendonlydir:varfonts
+in mktex.cnf.
+
+The ro option makes the VARTEXFONTS directory (and subtrees pk, tfm,
+source) writable for the owner only and sets the feature texmfvar in
+mktex.cnf.
+
+For more information about these \`features', consult the teTeX manual
+(e.g. by running \`texdoc TETEXDOC')."
+
+ case $2 in
+ vardir)
+ case $3 in
+ "")
+ echo "$help" >&2
+ rc=1
+ ;;
+ *)
+ tcBatchFontVardir=$3
+ tfc=`kpsewhich texmf.cnf`
+ if test -n "$tfc"; then
+ if test -w "$tfc"; then
+ configReplace "$tfc" '^VARTEXFONTS' "VARTEXFONTS = $tcBatchFontVardir"
+ else
+ echo "$progname: setting up vardir failed. Reason: no permission to write file \`$tfc'" >&2
+ rc=1
+ fi
+ else
+ echo "$progname: setting up vardir failed. Reason: failed to find file texmf.cnf" >&2
+ rc=1
+ fi
+ ;;
+ esac
+ ;;
+ rw)
+ MT_VARTEXFONTS=`kpsewhich -var-value VARTEXFONTS`
+ if test -z "$MT_VARTEXFONTS"; then
+ echo "$progname: failed to set \`font rw'; reason: could not determine VARTEXFONTS variable." >&2; rc=1
+ return
+ fi
+ test -d "$MT_VARTEXFONTS" || mktexdir "$MT_VARTEXFONTS"
+ if test ! -d "$MT_VARTEXFONTS"; then
+ echo "$progname: failed to set \`font rw'; reason: directory \`$MT_VARTEXFONTS' does not exist." >&2; rc=1
+ return
+ fi
+ chmod 1777 "$MT_VARTEXFONTS" || {
+ echo "$progname: failed to modify permissions in \`$MT_VARTEXFONTS'." >&2; rc=1
+ return;
+ }
+ (
+ cd "$MT_VARTEXFONTS" || exit
+ echo "$progname: modifying permissions in \`$MT_VARTEXFONTS' ..." >&2
+ for d in pk tfm source; do
+ test -d "$d" && find $d -type d -exec chmod 1777 '{}' \;
+ done
+ echo "$progname: all permissions set." >&2
+ )
+ setupTmpDir
+ fmgrConfigReplace mktex.cnf '^: ..MT_FEATURES=' ": \${MT_FEATURES=appendonlydir:varfonts}"
+ ;;
+ ro)
+ MT_VARTEXFONTS=`kpsewhich -var-value VARTEXFONTS`
+ if test -z "$MT_VARTEXFONTS"; then
+ echo "$progname: failed to set \`font ro'; reason: could not determine VARTEXFONTS variable." >&2; rc=1
+ return
+ fi
+ test -d "$MT_VARTEXFONTS" || mktexdir "$MT_VARTEXFONTS"
+ if test ! -d "$MT_VARTEXFONTS"; then
+ echo "$progname: failed to set \`font ro'; reason: directory \`$MT_VARTEXFONTS' does not exist." >&2; rc=1
+ return
+ fi
+ chmod 755 "$MT_VARTEXFONTS" || {
+ echo "$progname: failed to modify permissions in \`$MT_VARTEXFONTS'." >&2; rc=1
+ return;
+ }
+ (
+ cd "$MT_VARTEXFONTS" || exit
+ echo "$progname: modifying permissions in \`$MT_VARTEXFONTS' ..." >&2
+ for d in pk tfm source; do
+ test -d "$d" && find "$d" -type d -exec chmod 755 '{}' \;
+ done
+ echo "$progname: all permissions set." >&2
+ )
+ setupTmpDir
+ fmgrConfigReplace mktex.cnf '^: ..MT_FEATURES=' ": \${MT_FEATURES=texmfvar}"
+ ;;
+ "") echo "$help" >&2; rc=1;;
+ *) echo "$progname: unknown option \`$2' given as argument for \`$progname font'" >&2
+ echo "$progname: try \`$progname font' for help" >&2
+ rc=1
+ ;;
+ esac
+ ;;
+
+ formats)
+ setupTmpDir
+ echo "$progname: analyzing old configuration..." >&2
+ fmtutil --catcfg > $tmpdir/pre
+ fmtutil --edit
+ echo "$progname: analyzing new configuration..." >&2
+ fmtutil --catcfg > $tmpdir/post
+
+ if cmp $tmpdir/pre $tmpdir/post >/dev/null 2>&1; then
+ echo "$progname: no new/updated formats available ..." >&2
+ else
+ echo "$progname: updating formats ..." >&2
+ comm -13 $tmpdir/pre $tmpdir/post > $tmpdir/addOrChange
+ for i in `awk '{print $1}' $tmpdir/addOrChange`; do
+ fmtutil --byfmt "$i" || rc=1
+ done
+ texlinks --multiplatform || rc=1
+ fi
+ ;;
+ help)
+ echo "$help"
+ ;;
+
+ # "hyphen FORMAT"
+ hyphen)
+ tcBatchHyphenFormat=$2
+ formatsForHyphen=`getFormatsForHyphen`
+ formatsForHyphenFmt=`echo "$formatsForHyphen" | myFmt | sed 's@^@ @'`
+ help="Usage: $progname hyphen FORMAT
+
+Valid FORMATs are:
+$formatsForHyphenFmt"
+ case $tcBatchHyphenFormat in
+ "")
+ echo "$help" >&2; rc=1
+ ;;
+ *)
+ if checkElemInList "$tcBatchHyphenFormat" $formatsForHyphen; then
+
+ tcBatchHyphenFile=`fmtutil --showhyphen "$tcBatchHyphenFormat"`
+ case $tcBatchHyphenFile in
+ "")
+ echo "$progname: could not find hyphen setup file for format \`$tcBatchHyphenFormat'" >&2
+ rc=1
+ return
+ ;;
+ esac
+
+ getRelDir "$tcBatchHyphenFile"
+ case $relPart in
+ "")
+ # edit tcBatchHyphenFile directly
+ tcBatchHFID=
+ setupTmpDir
+ tcBatchHFEdit=$tcBatchHyphenFile
+ tcBatchHFOrig=$tmpdir/hforig
+ cp "$tcBatchHyphenFile" "$tcBatchHFOrig"
+ ;;
+ *)
+ # use tcfmgr
+ tcBatchHyphenFileBasename=`echo "$tcBatchHyphenFile" | sed 's@.*/@@'`
+ setupTmpDir
+ co=`tcfmgr --tmp $tmpdir --cmd co --file "$tcBatchHyphenFileBasename" --reldir "$relPart" --infile "$tcBatchHyphenFile"`
+ if test $? != 0; then
+ echo "$progname: failed to check out file \`$tcBatchHyphenFile'" >&2
+ rc=1
+ return 1
+ else
+ set x $co; shift
+ tcBatchHFID=$1; tcBatchHFEdit=$3; tcBatchHFOrig=$4
+ fi
+ ;;
+ esac
+ ${VISUAL-${EDITOR-vi}} "$tcBatchHFEdit"
+ if cmp "$tcBatchHFEdit" "$tcBatchHFOrig" >/dev/null 2>&1; then
+ echo "$progname: configuration unchanged." >&2
+ else
+ case $tcBatchHFID in
+ "")
+ tcBatchHFOut=$tcBatchHFEdit
+ echo "$progname: updated configuration saved as file \`$tcBatchHFOut'" >&2
+ lastUpdatedFile=$ci
+ ;;
+ *)
+ ci=`tcfmgr --tmp $tmpdir --cmd ci --id "$tcBatchHFID"`
+ if test $? != 0; then
+ echo "$progname: failed to check in file \`$tcBatchHyphenFileBasename'" >&2
+ rc=1
+ return
+ else
+ tcBatchHFOut=$ci
+ echo "$progname: updated configuration saved as file \`$tcBatchHFOut'" >&2
+ lastUpdatedFile=$ci
+ fi
+ ;;
+ esac
+ fmtutil --byhyphen "$tcBatchHFOut"
+ fi
+ else
+ echo "$progname: invalid format \`$tcBatchHyphenFormat' specified as argument for \`$progname hyphen'" >&2
+ echo "$progname: for getting help, try \`$progname hyphen'" >&2
+ rc=1
+ fi
+ ;;
+ esac
+ ;;
+
+ hyphen-list)
+ getFormatsForHyphen
+ ;;
+
+ init)
+ case $2 in
+ "")
+ fmtutil --all || rc=1
+ texlinks --multiplatform || rc=1
+ updmap || rc=1
+ ;;
+ *)
+ fmtutil --byfmt "$2" || rc=1
+ ;;
+ esac
+ ;;
+
+ mode-list)
+ setupModesMfFile
+ listMfModes
+ ;;
+
+ mode)
+ case $2 in
+ "")
+ echo "Usage: $progname mode MODE
+
+Valid MODE settings:"
+ setupModesMfFile
+ listMfModes | sed 's@ .*@@; s@^@ @' | myFmt
+ rc=1
+ ;;
+ *)
+ tcBatchMode=$2
+ setupModesMfFile
+ if checkElemInList $tcBatchMode `listMfModes | sed 's@ .*@@'`; then
+
+ # modify mktex.cnf
+ setupTmpDir
+ fmgrConfigReplace mktex.cnf '^: ..MODE=' ": \${MODE=$tcBatchMode}"
+ set x `getRes "$tcBatchMode"`; shift
+ tcBatchRes=$1
+ fmgrConfigReplace mktex.cnf '^: ..BDPI=' ": \${BDPI=$tcBatchRes}"
+
+ if checkForBinary dvips >/dev/null && tcfmgr --cmd find --file config.ps >/dev/null 2>&1; then
+ tcBatch dvips mode "$tcBatchMode"
+ fi
+ if checkForBinary pdfetex >/dev/null && tcfmgr --cmd find --file pdftexconfig.tex >/dev/null 2>&1; then
+ tcBatch pdftex mode "$tcBatchMode"
+ fi
+ else
+ echo "$progname: unknown mode \`$tcBatchMode' specified as argument for \`$progname mode'" >&2; rc=1
+ fi
+ ;;
+ esac
+ ;;
+
+ paper)
+ help="Usage: $progname paper PAPER
+
+Valid PAPER settings:
+ letter a4"
+
+ p=$2; pXdvi=$2; pDvips=$2
+ case $2 in
+ a4)
+ pDvips=A4size
+ ;;
+ letter)
+ pDvips=letterSize
+ pXdvi=us
+ ;;
+ "") echo "$help" >&2; rc=1; return;;
+ *)
+ echo "$progname: unknown PAPER \`$2' given as argument for \`$progname paper'" >&2
+ echo "$progname: try \`$progname paper' for help" >&2
+ rc=1
+ return;;
+ esac
+ if checkForBinary dvips >/dev/null && tcfmgr --cmd find --file config.ps >/dev/null 2>&1; then
+ tcBatch dvips paper $pDvips
+ fi
+ if checkForBinary dvipdfm >/dev/null && tcfmgr --cmd find --file config >/dev/null 2>&1; then
+ tcBatch dvipdfm paper $p
+ fi
+ if checkForBinary dvipdfmx >/dev/null && tcfmgr --cmd find --file dvipdfmx.cfg >/dev/null 2>&1; then
+ tcBatch dvipdfmx paper $p
+ fi
+ if checkForBinary xdvi >/dev/null && tcfmgr --cmd find --file XDvi >/dev/null 2>&1; then
+ tcBatch xdvi paper $pXdvi
+ fi
+ if checkForBinary pdfetex >/dev/null && tcfmgr --cmd find --file pdftexconfig.tex >/dev/null 2>&1; then
+ tcBatch pdftex paper $p
+ fi
+ ;;
+
+ pdftex)
+ help="Usage: $progname pdftex paper PAPER
+
+Valid PAPER settings:
+ a4 letter"
+ case $2 in
+
+ mode)
+ case $3 in
+ "")
+ echo "Usage: $progname pdftex mode MODE"
+ rc=1
+ ;;
+ *)
+ tcBatchPdftexMode=$3
+ setupTmpDir
+ setupModesMfFile
+ if checkElemInList "$tcBatchPdftexMode" `listMfModes | sed 's@ .*@@'`; then
+ set x `getRes "$tcBatchPdftexMode"`; shift
+ fmgrConfigReplace pdftexconfig.tex 'pdfpkresolution' "\\pdfpkresolution=$1"
+ if $fmgrConfigReplaceChanged; then
+ fmtutil --all
+ fi
+ else
+ echo "$progname: unknown MODE \`$tcBatchPdftexMode' given as argument for \`$progname pdftex mode'" >&2
+ rc=1
+ fi
+ ;;
+ esac
+ ;;
+
+ paper)
+ case $3 in
+ letter)
+ w="8.5 true in"; h="11 true in"
+ setupTmpDir
+ fmgrConfigReplace pdftexconfig.tex pdfpagewidth '\pdfpagewidth='"$w"
+ wChanged=$fmgrConfigReplaceChanged
+ fmgrConfigReplace pdftexconfig.tex pdfpageheight '\pdfpageheight='"$h"
+ if $wChanged || $fmgrConfigReplaceChanged; then
+ fmtutil --all
+ fi
+ ;;
+ a4)
+ w="210 true mm"; h="297 true mm"
+ fmgrConfigReplace pdftexconfig.tex pdfpagewidth '\pdfpagewidth='"$w"
+ wChanged=$fmgrConfigReplaceChanged
+ fmgrConfigReplace pdftexconfig.tex pdfpageheight '\pdfpageheight='"$h"
+ if $wChanged || $fmgrConfigReplaceChanged; then
+ fmtutil --all
+ fi
+ ;;
+ "") echo "$help" >&2; rc=1;;
+ *)
+ echo "$progname: unknown PAPER \`$3' given as argument for \`$progname pdftex paper'" >&2
+ echo "$progname: try \`$progname pdftex paper' for help" >&2
+ rc=1 ;;
+ esac ;;
+ "")
+ echo "$help" >&2; rc=1;;
+ *)
+ echo "$progname: unknown option \`$2' given as argument for \`$progname pdftex'" >&2
+ echo "$progname: try \`$progname pdftex' for help" >&2
+ rc=1
+ ;;
+ esac
+ ;;
+
+ rehash)
+ mktexlsr
+ ;;
+
+ # handle "xdvi paper PAPER"
+ xdvi)
+ tcBatchXdviPapers='us "8.5x11"
+usr "11x8.5"
+legal "8.5x14"
+foolscap "13.5x17.0"
+a1 "59.4x84.0cm"
+a2 "42.0x59.4cm"
+a3 "29.7x42.0cm"
+a4 "21.0x29.7cm"
+a5 "14.85x21.0cm"
+a6 "10.5x14.85cm"
+a7 "7.42x10.5cm"
+a1r "84.0x59.4cm"
+a2r "59.4x42.0cm"
+a3r "42.0x29.7cm"
+a4r "29.7x21.0cm"
+a5r "21.0x14.85cm"
+a6r "14.85x10.5cm"
+a7r "10.5x7.42cm"
+b1 "70.6x100.0cm"
+b2 "50.0x70.6cm"
+b3 "35.3x50.0cm"
+b4 "25.0x35.3cm"
+b5 "17.6x25.0cm"
+b6 "13.5x17.6cm"
+b7 "8.8x13.5cm"
+b1r "100.0x70.6cm"
+b2r "70.6x50.0cm"
+b3r "50.0x35.3cm"
+b4r "35.3x25.0cm"
+b5r "25.0x17.6cm"
+b6r "17.6x13.5cm"
+b7r "13.5x8.8cm"
+c1 "64.8x91.6cm"
+c2 "45.8x64.8cm"
+c3 "32.4x45.8cm"
+c4 "22.9x32.4cm"
+c5 "16.2x22.9cm"
+c6 "11.46x16.2cm"
+c7 "8.1x11.46cm"
+c1r "91.6x64.8cm"
+c2r "64.8x45.8cm"
+c3r "45.8x32.4cm"
+c4r "32.4x22.9cm"
+c5r "22.9x16.2cm"
+c6r "16.2x11.46cm"
+c7r "11.46x8.1cm"'
+ help="Usage: $progname xdvi paper PAPER
+
+Valid PAPER settings:
+ a1 a1r a2 a2r a3 a3r a4 a4r a5 a5r a6 a6r a7 a7r
+ b1 b1r b2 b2r b3 b3r b4 b4r b5 b5r b6 b6r b7 b7r
+ c1 c1r c2 c2r c3 c3r c4 c4r c5 c5r c6 c6r c7 c7r
+ foolscap legal us usr"
+ case $2 in
+ paper-list)
+ echo "$tcBatchXdviPapers"
+ ;;
+ paper)
+ case $3 in
+ a1|a1r|a2|a2r|a3|a3r|a4|a4r|a5|a5r|a6|a6r|a7|a7r|b1|b1r|b2|b2r|b3|b3r|b4|b4r|b5|b5r|b6|b6r|b7|b7r|c1|c1r|c2|c2r|c3|c3r|c4|c4r|c5|c5r|c6|c6r|c7|c7r|foolscap|legal|us|usr)
+ fmgrConfigReplace XDvi paper: "*paper: $3"
+ ;;
+ "") echo "$help" >&2; rc=1;;
+ *)
+ echo "$progname: unknown PAPER \`$3' given as argument for \`$progname xdvi paper'" >&2
+ echo "$progname: try \`$progname xdvi paper' for help" >&2
+ rc=1 ;;
+ esac ;;
+ "")
+ echo "$help" >&2; rc=1;;
+ *)
+ echo "$progname: unknown option \`$2' given as argument for \`$progname xdvi'" >&2
+ echo "$progname: try \`$progname xdvi' for help" >&2
+ rc=1
+ ;;
+ esac
+ ;;
+ *)
+ echo "$progname: unknown option \`$1' given as argument for \`$progname'" >&2
+ echo "$progname: try \`$progname help' for help" >&2
+ rc=1
+ esac
+}
+
+###############################################################################
+# tcInteractive(void)
+# handle interactive mode
+###############################################################################
+tcInteractive()
+{
+ texconfig-dialog
+}
+
+###############################################################################
+# main()
+###############################################################################
+rc=0
+case $# in
+ 0) tcInteractive;;
+ *) tcBatch "$@";;
+esac
+
+cleanup $rc
diff --git a/Build/source/texk/tetex/texconfig-dialog b/Build/source/texk/tetex/texconfig-dialog
new file mode 100755
index 00000000000..76e1f51eea6
--- /dev/null
+++ b/Build/source/texk/tetex/texconfig-dialog
@@ -0,0 +1,495 @@
+#!/bin/sh
+
+# TeX-Config version 3.0
+# Thomas Esser, te@dbs.uni-hannover.de. Public domain.
+
+# invoke the right shell:
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+# the version string
+version=1112981053 # seconds since `00:00:00 1970-01-01 UTC'
+ # date '+%s' (with GNU date)
+
+: ${PAGER=more}
+progname=texconfig-dialog
+tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/tcdtmp.$$
+log=$tmpdir/log
+tmpmenu=$tmpdir/tmpmenu
+needsCleanup=false
+
+###############################################################################
+# cleanup()
+# clean up the temp area and exit with proper exit status
+###############################################################################
+cleanup()
+{
+ rc=$1
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { cd / && rm -rf "$tmpdir"; }
+ termCtl reset
+ (exit $rc); exit $rc
+}
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+setupTmpDir()
+{
+ case $needsCleanup in
+ true) return;;
+ esac
+
+ trap 'cleanup 1' 1 2 3 7 13 15
+ needsCleanup=true
+ (umask 077; mkdir "$tmpdir") \
+ || abort "could not create directory \`$tmpdir'"
+}
+
+###############################################################################
+# abort(errmsg)
+# print `errmsg' to stderr and exit with error code 1
+###############################################################################
+abort()
+{
+ echo "$progname: $1." >&2
+ cleanup 1
+}
+
+logexec()
+{
+ (echo; echo ">>> Executing \`$@' <<<") >> $log
+ "$@" 2>&1 | tee -a $log
+}
+
+###############################################################################
+# runDialog(args, ...)
+# execute the right dialog program with the right default parameters
+###############################################################################
+runDialog()
+{
+ termCtl clear
+ if test -n "$DIALOG_PROG"; then
+ $DIALOG_PROG --title "TeX setup utility" ${1+"$@"}
+ runDialogRc=$?
+ else
+ TERM=$DIALOG_TERM TERMINFO=$DIALOG_TERMINFO \
+ tcdialog --title "TeX setup utility" ${1+"$@"}
+ runDialogRc=$?
+ fi
+ termCtl clear
+ (exit $runDialogRc)
+ return $runDialogRc
+}
+
+###############################################################################
+# findDialog(void)
+# Some systems have their own dialog. Use it then and do not use
+# faked TERM and TERMINFO variables when calling that dialog.
+###############################################################################
+findDialog()
+{
+ { u=`uname -s`; } 2>/dev/null
+ case "$u" in
+ FreeBSD|Linux|cygwin*|CYGWIN*)
+ test -f /usr/bin/whiptail && DIALOG_PROG=/usr/bin/whiptail
+ test -f /usr/bin/dialog && DIALOG_PROG=/usr/bin/dialog
+ test -f /bin/dialog && DIALOG_PROG=/bin/dialog
+ ;;
+ esac
+ case $DIALOG_PROG in
+ "")
+ : ${DIALOG_TERMINFO=$TEXMFMAIN/texconfig}
+ : ${DIALOG_TERM=generic}
+ esac
+}
+
+###############################################################################
+# mktexdir(args)
+# call mktexdir script, disable all features (to prevent sticky directories)
+###############################################################################
+mktexdir()
+{
+ MT_FEATURES=none "$TEXMFMAIN/web2c/mktexdir" "$@" >&2
+}
+
+###############################################################################
+# termCtl(arg)
+# some convenience utilities for terminal control
+###############################################################################
+termCtl()
+{
+ case $1 in
+ clear)
+ test -n "$NO_CLEAR" && return
+ tty >/dev/null 2>&1 && clear
+ ;;
+ reset)
+ test -n "$NO_CLEAR" && return
+ reset 2>/dev/null
+ stty sane 2>/dev/null
+ reset 2>/dev/null
+ termCtl clear
+ ;;
+ readln)
+ echo
+ echo "press return to continue..."
+ read a
+ ;;
+ esac
+}
+
+###############################################################################
+# menuMain(void)
+# the main menu
+###############################################################################
+menuMain()
+{
+ cat <<-'eof'
+ The interactive texconfig utility will be started now. Make sure
+ your screen has at least 24 rows and 80 columns. If texconfig
+ crashes now, you can still set up your teTeX system using the
+ batch mode of texconfig. Try 'texconfig help' to get a list
+ of options.
+
+ The interactive mode works best with a real vt100 terminal or
+ inside an xterm window.
+eof
+ termCtl readln
+
+ while :; do
+ logMessage='view logfile'
+
+ runDialog \
+ --menu "
+Hint: all output of external commands (e.g. tex) is logged into
+a file. You can look at this file using "LOG". If cursor keys make
+trouble, you may have more luck with +/- and TAB.
+" \
+ 23 80 14 \
+ EXIT 'exit' \
+ PAPER 'default paper: A4 or letter (us)' \
+ MODE 'default metafont mode and resolution' \
+ REHASH 'rebuild filename databases' \
+ FORMATS 'edit format definitions' \
+ HYPHENATION 'customize hyphenation' \
+ DVIPS 'dvips configuration' \
+ FAQ 'view frequently asked questions + answers' \
+ CONF 'show configuration' \
+ LOG "$logMessage" \
+ 2>"$tmpmenu" || break
+
+ case `cat "$tmpmenu"` in
+ EXIT)
+ break
+ ;;
+ PAPER)
+ menuPaper
+ ;;
+ MODE)
+ menuMode
+ ;;
+ REHASH)
+ logexec texconfig rehash
+ termCtl readln
+ ;;
+ FORMATS)
+ texconfig formats
+ termCtl readln
+ ;;
+ HYPHENATION)
+ menuHyphenation
+ ;;
+ DVIPS)
+ menuDvips
+ ;;
+ FAQ)
+ texconfig faq
+ termCtl readln
+ ;;
+ CONF)
+ logexec texconfig conf
+ termCtl readln
+ ;;
+ LOG)
+ <"$log" eval $PAGER
+ termCtl readln
+ ;;
+ esac
+ done
+}
+
+menuGetMode()
+{
+ # we need eval to get the command line right... :-(
+ eval \
+ runDialog \
+ --menu \""
+Chosse a mode to be used when metafont generates font bitmaps. The resolution is the most important point, but there might
+be differences between modes of the same resolution. See the comments in the file modes.mf for more details.
+\"" \
+ 23 80 14 \
+ `texconfig mode-list` 2>"$tmpmenu"
+}
+
+menuMode()
+{
+ menuGetMode
+ mode=`cat "$tmpmenu"`
+
+ if test -n "$mode"; then
+ logexec texconfig mode "$mode"
+ termCtl readln
+ fi
+}
+
+menuDvips()
+{
+ menuDvipsDest=ps
+
+ while :; do
+ case $menuDvipsDest in
+ ps)
+ menuDvipsPrinterOpt=
+ menuDvipsMsg="
+dvips GLOBAL section. Define the most common default settings (config.ps).
+To define settings for a specific printer, first ADD a printer definition,
+then CHANGE it.
+"
+ ;;
+ *)
+ menuDvipsPrinterOpt="-P $menuDvipsDest"
+ menuDvipsMsg="
+dvips settings for printer $menuDvipsDest (config.$menuDvipsDest). Define
+local settings for this printer. To switch back to global settings mode,
+select GLOBAL.
+"
+ ;;
+ esac
+
+ runDialog \
+ --menu "$menuDvipsMsg
+You can use dvips for non PostScript printers, if you can setup your
+printing system to convert PostScript to a format that your printer can
+handle. Maybe, you can use GhostScript to do the conversion (if your
+printer is supported)." \
+ 23 80 9 \
+ RETURN 'back to the main menu' \
+ DEST 'define default destination of the generated Postscript' \
+ MODE 'change metafont mode/resolution' \
+ OFFSET 'shift output by some offset' \
+ PAPER 'define the default paper' \
+ GLOBAL 'change global settings (config.ps)' \
+ CHANGE 'change printer settings (config.$PRINTER)' \
+ ADD 'add a printer configuration' \
+ DEL 'remove a printer configuration' \
+ 2>"$tmpmenu" || break
+
+ menuDvipsAns=`cat "$tmpmenu"`
+ case $menuDvipsAns in
+ RETURN)
+ break
+ ;;
+ DEST)
+ runDialog --inputbox "Enter the command to print.
+
+In general, you need a command like 'lpr' or 'lpr -Pfoo'.
+
+NOTE: If you just press return, printing will be disabled and the output saved to a file by default.
+" 23 80 2>"$tmpmenu"
+ if test $? = 0; then
+ menuDvipsAns=`cat "$tmpmenu"`
+ case $menuDvipsAns in
+ "")
+ menuDvipsPrintOpt=-
+ ;;
+ *)
+ menuDvipsPrintOpt=$menuDvipsAns
+ ;;
+ esac
+ logexec texconfig dvips $menuDvipsPrinterOpt printcmd "$menuDvipsPrintOpt"
+ termCtl readln
+ fi
+ ;;
+ MODE)
+ menuGetMode
+ mode=`cat "$tmpmenu"`
+
+ if test -n "$mode"; then
+ logexec texconfig dvips $menuDvipsPrinterOpt mode "$mode"
+ termCtl readln
+ fi
+ ;;
+ OFFSET)
+ runDialog --inputbox "Enter a dimension pair (a rightwards offset and a downwards
+offset), e.g. 2mm,-0.5in (right 2mm and up .5in):" 23 80 2>"$tmpmenu"; menuDvipsAns=`cat "$tmpmenu"`
+ case $menuDvipsAns in
+ "") : ;;
+ *)
+ logexec texconfig dvips $menuDvipsPrinterOpt offset "$menuDvipsAns"
+ termCtl readln
+ ;;
+ esac
+ ;;
+ PAPER)
+ eval runDialog \
+ --menu \'\\n\\nChoose the default papersize definition for dvips.\\n\\n\' \
+ 23 80 8 `texconfig dvips paper-list` \
+ 2>"$tmpmenu"
+ paper=`cat "$tmpmenu"`
+ if test -n "$paper"; then
+ logexec texconfig dvips paper "$paper"
+ termCtl readln
+ fi
+ ;;
+ GLOBAL)
+ menuDvipsDest=ps
+ ;;
+ CHANGE)
+ runDialog --inputbox "Printer name (for future settings of DEST / MODE / OFFSET)" 23 80 2>"$tmpmenu"
+ menuDvipsAns=`cat $tmpmenu`
+ case $menuDvipsAns in
+ "") : ;;
+ *) menuDvipsDest=$menuDvipsAns;;
+ esac
+ ;;
+ ADD)
+ runDialog --inputbox "Printer name (for printer to add)" 23 80 2>"$tmpmenu"
+ menuDvipsAns=`cat $tmpmenu`
+ case $menuDvipsAns in
+ "") : ;;
+ *)
+ logexec texconfig dvips add $menuDvipsAns
+ termCtl readln
+ ;;
+ esac
+ ;;
+ DEL)
+ runDialog --inputbox "Printer name (for printer to delete)" 23 80 2>"$tmpmenu"
+ menuDvipsAns=`cat $tmpmenu`
+ case $menuDvipsAns in
+ "") : ;;
+ *)
+ logexec texconfig dvips del $menuDvipsAns
+ termCtl readln
+ ;;
+ esac
+ ;;
+ esac
+ done
+}
+
+menuPaper()
+{
+ runDialog \
+ --menu "
+Select your default paper format.
+" \
+ 23 80 14 \
+ RETURN 'return to the main menu' \
+ A4 'ISO A4 (210x297mm)' \
+ LETTER 'US (8.5x11in)' 2>"$tmpmenu"
+
+ p=`cat "$tmpmenu"`
+ case $p in
+ A4)
+ logexec texconfig paper a4
+ termCtl readln
+ ;;
+ LETTER)
+ logexec texconfig paper letter
+ termCtl readln
+ ;;
+ esac
+}
+
+menuHyphenation()
+{
+ runDialog \
+ --menu "
+Choose format to set up hyphenation for.
+" \
+ 23 80 14 \
+ `texconfig hyphen-list | sed 's@\(.*\)@\1 \1@'` 2>"$tmpmenu"
+ p=`cat "$tmpmenu"`
+ case $p in
+ "")
+ return
+ ;;
+ *)
+ texconfig hyphen "$p"
+ termCtl readln
+ esac
+}
+
+# main()
+
+case $1 in
+ help|--help)
+ cat <<-eof
+ Usage: $progname [--help|--version]
+eof
+ exit 0
+ ;;
+ --version)
+ cat <<-eof
+ $progname version $version.
+eof
+ exit 0
+ ;;
+esac
+
+
+: ${TEXMFCONFIG=`kpsewhich -var-value=TEXMFCONFIG`}
+: ${TEXMFVAR=`kpsewhich -var-value=TEXMFVAR`}
+: ${TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`}
+export TEXMFCONFIG TEXMFVAR TEXMFMAIN
+
+setupTmpDir
+echo "$progname: started `date`" > $log
+findDialog
+
+test -d "$TEXMFCONFIG" \
+ || mktexdir "$TEXMFCONFIG" >/dev/null 2>&1 \
+ || echo "$progname: directory \`$TEXMFCONFIG' (from TEXMFCONFIG variable) does not exist and cannot be created" >&2
+
+canWriteConfig=false
+if test -d "$TEXMFCONFIG"; then
+ if test -w "$TEXMFCONFIG"; then
+ canWriteConfig=true
+ else
+ echo "$progname: directory \`$TEXMFCONFIG' (from TEXMFCONFIG variable) is not writable."
+ echo "$progname: configuration data cannot be changed." >&2
+ fi
+fi
+
+test -d "$TEXMFVAR" \
+ || mktexdir "$TEXMFVAR" >/dev/null 2>&1 \
+ || echo "$progname: directory \`$TEXMFVAR' (from TEXMFVAR variable) does not exist and cannot be created" >&2
+
+canWriteVardata=false
+if test -d "$TEXMFVAR"; then
+ if test -w "$TEXMFVAR"; then
+ canWriteVardata=true
+ else
+ echo "$progname: directory \`$TEXMFVAR' (from TEXMFVAR variable) is not writable."
+ echo "$progname: cached variable runtime data files cannot be written." >&2
+ fi
+fi
+
+menuMain
+cleanup 0
diff --git a/Build/source/texk/tetex/texconfig-sys b/Build/source/texk/tetex/texconfig-sys
new file mode 100755
index 00000000000..9d193722416
--- /dev/null
+++ b/Build/source/texk/tetex/texconfig-sys
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# texconfig-sys: Thomas Esser, public domain.
+
+# wrapper script for texconfig with TEXMFVAR and TEXMFCONFIG set to
+# TEXMFSYSVAR / TEXMFSYSCONFIG
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+v=`kpsewhich -var-value TEXMFSYSVAR`
+c=`kpsewhich -var-value TEXMFSYSCONFIG`
+
+TEXMFVAR="$v"
+TEXMFCONFIG="$c"
+export TEXMFVAR TEXMFCONFIG
+
+exec texconfig ${1+"$@"}
diff --git a/Build/source/texk/tetex/texconfig.man b/Build/source/texk/tetex/texconfig.man
new file mode 100644
index 00000000000..30cb0ea7e90
--- /dev/null
+++ b/Build/source/texk/tetex/texconfig.man
@@ -0,0 +1,27 @@
+.TH texconfig 1 "February 2005" "teTeX" "teTeX"
+.SH NAME
+texconfig \- configures teTeX
+.LP
+texconfig-sys \- configures teTeX system\-wide
+.SH SYNOPSIS
+.B texconfig
+.LP
+.B texconfig-sys
+.SH DESCRIPTION
+.I texconfig
+allows to configure and maintain
+.I teTeX
+in an easy and convenient manner. It uses the
+.I dialog
+program to draw nice input boxes. After answering the dialoges, the
+appropriate files are changed automatically and all necessary
+steps are involved to apply the new settings.
+.SH "SEE ALSO"
+.IR dialog (1),
+.IR initex (1),
+.IR mf (1),
+.IR vi (1),
+.IR EDITOR
+environment-variable.
+.SH AUTHOR
+Thomas Esser <te@dbs.uni-hannover.de>
diff --git a/Build/source/texk/tetex/texdoc b/Build/source/texk/tetex/texdoc
new file mode 100755
index 00000000000..f66b3c855de
--- /dev/null
+++ b/Build/source/texk/tetex/texdoc
@@ -0,0 +1,206 @@
+#!/bin/sh
+#
+# Thomas Esser, David Aspinall, Simon Wilkinson.
+# Public domain.
+#
+# Simple script to attempt to find documentation for tex files.
+# Uses kpsewhich to find a .dvi, .pdf or .ps file along the
+# 'TeX system documentation' ($TEXDOCS, default: $TEXMF/doc) search path.
+#
+# Original version by David Aspinall <da@dcs.ed.ac.uk>
+#
+# This version rewritten for use with bash 2 and teTeX under Linux by
+# Simon Wilkinson <sxw@dcs.ed.ac.uk>
+#
+# Changes for web2c-7.2 resp. teTeX-0.9 and portability fixes by
+# Thomas Esser <te@dbs.uni-hannover.de>, Jun 14 1998
+#
+# Support for compressed documentation implemented by adopting changes
+# made by debian. Thomas Esser, Dec. 2004.
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+needsCleanup=false
+progname=texdoc
+tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+setupTmpDir()
+{
+ $needsCleanup && return
+
+ trap 'cleanup --force' 1 2 3 7 13 15
+ needsCleanup=true
+ mkdir "$tmpdir" || abort "could not create directory \`$tmpdir'"
+}
+
+###############################################################################
+# abort(errmsg)
+# print `errmsg' to stderr and exit with error code 1
+###############################################################################
+abort()
+{
+ warn "$progname: $1."
+ cleanup
+ (exit 1)
+ exit 1
+}
+
+###############################################################################
+# cleanup()
+# clean up the temp area
+###############################################################################
+cleanup()
+{
+ case $1 in
+ --force)
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; }
+ ;;
+ *) # directory might not be empty if some other viewer is still
+ # running, so be quiet about it
+ rmdir $tmpdir >/dev/null 2>&1;;
+ esac
+}
+
+
+# Viewing programs, according to filename extension. (You can
+# override or add to them by setting environment variables).
+# MacOS X: does not have X11 by default, so give dvi a low priority
+case `(uname -s) 2>/dev/null` in
+ Darwin)
+ : ${TEXDOCVIEW_dvi='(open %s >/dev/console 2>&1 || xdvi %s &) || echo "Method for opening %s did not work"'}
+ : ${TEXDOCVIEW_ps='open %s'}
+ : ${TEXDOCVIEW_pdf='open %s'}
+ : ${TEXDOCVIEW_html='open %s'}
+ : ${TEXDOCVIEW_txt="open -a TextEdit.app %s"}
+ : ${TEXDOCVIEW_="open -a TextEdit.app %s"} # no extension, default to pager
+ extlist='.pdf .ps .txt .dvi .html'
+ ;;
+ *)
+ : ${TEXDOCVIEW_dvi='(xdvi %s) &'}
+ : ${TEXDOCVIEW_pdf='(acroread %s) &'}
+ : ${TEXDOCVIEW_ps='(gv %s) &'}
+ : ${TEXDOCVIEW_html='mozilla -remote openURL'"'(%s)'"' 2>/dev/null || mozilla %s &'}
+ : ${TEXDOCVIEW_txt="${PAGER-more} %s"}
+ : ${TEXDOCVIEW_="${PAGER-more} %s"} # no extension, default to pager
+ extlist='.dvi .dvi.gz .dvi.bz2 .pdf .pdf.gz .pdf.bz2 .ps .ps.gz .ps.bz2 .txt .txt.gz .txt.bz2 .html'
+
+ # Commands run to uncompress files, according to filename extension.
+ : ${TEXDOCUNZIP_gz='gzip -d -c'}
+ : ${TEXDOCUNZIP_bz2='bzip2 -d -c'}
+ ;;
+esac
+
+mode=viewer
+help='Usage: texdoc [OPTION]... [NAME]...
+ Search for NAME in the TeX documentation and start a viewer.
+
+ --help show this help
+ -v verbose mode: show viewer command
+ -l just list all matching files. Do not start a viewer.
+ -s search the disk. remaining arguments will be passed
+ as egrep patterns to filter the find output.'
+
+verbosemode=false
+while
+ case $1 in
+ -s) mode=search; shift; break;;
+ -l) mode=list;;
+ -v) verbosemode=true;;
+ *-help)
+ echo "$help" >&2
+ exit 1;;
+ -*) echo "texdoc: option $1 not recognized" 1>&2;;
+ *) break;;
+ esac
+do shift; done
+
+case $# in
+ 0)
+ echo "$help" >&2
+ exit 1
+ ;;
+esac
+
+for name
+do
+ case $mode in
+ search)
+ find `kpsewhich --expand-path='$TEXMF/doc' | tr : ' '` -type f -print |
+ egrep $name
+ continue
+ ;;
+ esac
+
+ case $name in
+ texdoc)
+ man texdoc; continue;;
+ esac
+
+ found=false
+ for ext in "" $extlist; do
+
+ filename=`kpsewhich -format='TeX system documentation' $name$ext 2>/dev/null`
+ test -z "$filename" && continue
+ found=true
+
+ if test $mode = list; then
+ echo $filename
+ else
+ dir=`echo $filename | sed 's%/[^/]*$%%'`
+ ext=`echo $filename | sed -n 's%.*\.\([^/]*\)$%\1%p'`
+
+ eval uncompress="\$TEXDOCUNZIP_$ext"
+ if test -n "$uncompress"
+ then
+ ext=`echo $filename | sed -e "s|\\.$ext\$||" | sed 's%.*\.%%'`
+ fi
+ viewer=\$"TEXDOCVIEW_$ext"
+ if test -n "$uncompress"; then
+ src=`echo "$filename" | sed -e 's%.*/%%' -e 's%\.[^.]*$%%'`
+
+ # only one viewer per file, if the same file is given more
+ # than once
+ test -f "$tmpdir/$src" && break
+
+ setupTmpDir
+ eval "$uncompress $filename > $tmpdir/$src"
+ filename=$tmpdir/$src
+ viewer=`eval echo $viewer | sed -e "s|%s|$filename; rm -f $filename; cleanup|"`
+ else
+ viewer=`eval echo $viewer | sed -e "s|%s|$filename|g"`
+ fi
+
+ if test -z "$viewer"
+ then
+ echo "Don't know how to view file type $ext" 1>&2
+ echo "(matching file was $filename)" 1>&2
+ else
+ $verbosemode && echo $viewer
+ test -n "$dir" && test -d "$dir" && cd "$dir"
+ eval $viewer
+ break # just stop after the first usable extension
+ fi
+ fi
+
+ done
+ $found || echo "Can't find documentation for \`$name'" 1>&2
+done
+
+cleanup
+(exit 0)
+exit 0
diff --git a/Build/source/texk/tetex/texdoc.man b/Build/source/texk/tetex/texdoc.man
new file mode 100644
index 00000000000..9d680c35b0d
--- /dev/null
+++ b/Build/source/texk/tetex/texdoc.man
@@ -0,0 +1,94 @@
+.\" EX and EE are used for displays that are pure code
+.de EX
+.nf
+.ft CW
+.in +5
+..
+.de EE
+.in -5
+.ft R
+.fi
+..
+.TH "texdoc" "1" "September 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+texdoc \- Utility to look up TeX documentation
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBtexdoc\fP [ \fIOPTION\fP \&.\&.\&. ] \fINAME\fP [ \&.\&.\&. ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBtexdoc\fP seaches for \fINAME\fP in the TeX documentation and
+starts an appropriate viewer\&.
+.PP
+\fINAME\fP should be the name of a command or package in the teTeX
+distribution\&.
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB--help\fP"
+Display a brief summary of options\&.
+.IP
+.IP "\fB-l\fP"
+List matching files\&. Does not start a viewer\&.
+.IP "\fB-v\fP"
+Sets verbose mode\&. Shows the command being used to
+display the documentation\&.
+.PP
+.SH "ENVIRONMENT"
+.PP
+.IP "\fB$TEXDOCVIEW_dvi\fP"
+DVI viewer\&. Defaults to \fBxdvi\fP(1)\&.
+.IP "\fB$TEXDOCVIEW_pdf\fP"
+PDF viewer\&. Defaults to \fBacroread\fP(1)\&.
+.IP "\fB$TEXDOCVIEW_ps\fP"
+PostScript viewer\&. Defaults to
+\fBghostview\fP(1)\&.
+.IP "\fB$TEXDOCVIEW_html\fP"
+HTML viewer\&. Defaults to \fBnetscape\fP(1)\&.
+.IP "\fB$TEXDOCVIEW_txt\fP"
+Text viewer\&. Defaults to \fB$PAGER-more\fP\&.
+.PP
+The environment variables should be set with a ``%s\&'\&' as a placeholder
+for the name of the file\&. For example,
+.PP
+.EX
+hostname% setenv TEXDOCVIEW_pdf "gv %s"
+.EE
+.PP
+or
+.PP
+.EX
+hostname$ TEXDOCVIEW_html="mozilla %s"
+
+hostname$ export TEXDOCVIEW_html
+.EE
+.PP
+.SH "SEE ALSO"
+.PP
+\fBacroread\fP(1), \fBgv\fP(1), \fBkpsewhich\fP(1),
+\fBless\fP(1), \fBmore\fP(1), \fBxdvi\fP(1)
+.PP
+Web page: <http://tug\&.org/teTeX/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to <tetex@dbs\&.uni-hannover\&.de> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBtexdoc\fP was written by Thomas Esser
+<te@dbs\&.uni-hannover\&.de>, David Aspinall
+<da@dcs\&.ed\&.ac\&.uk>, and
+Simon Wilkinson
+<sxw@dcs\&.ed\&.ac\&.uk> during 1998 and 1999\&. \fBtexdoc\fP is in the public
+domain\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/texdoctk b/Build/source/texk/tetex/texdoctk
new file mode 100755
index 00000000000..c8f60e28bf6
--- /dev/null
+++ b/Build/source/texk/tetex/texdoctk
@@ -0,0 +1,1794 @@
+#!/usr/bin/env perl
+# We started with a hack provided by Thomas Esser. This expression replaces
+# the unix specific line \type {#!/usr/local/bin/perl -w}.
+###############################################################################
+# texdoctk v.0.6.0 (Nov 5, 2004) - GUI for TeX documentation access
+# Copyright (C) 2000-2004 Thomas Ruedas
+# This program is provided under the GNU Public License; see the file
+# README.texdoctk for details about requirements, installation, configuration,
+# and the full disclaimer.
+###############################################################################
+use strict;
+use Tk;
+use Getopt::Long;
+Getopt::Long::config('bundling');
+use File::Basename;
+
+my $IsWin32 = ($^O =~ /MSWin32/i);
+
+#if ($IsWin32) {
+# use Win32::Registry;
+# use Win32::API;
+#}
+
+# initialization of some internal variables
+$|=1;
+my $quiet=1;
+my $autoview;
+my $xfmt_viewer=1,
+my @tdcolors;
+my %butcol;
+my $srchentry;
+my $srchflag=0;
+my $tmpfno;
+# system variables
+my ($texmfmain,$texmfdist,$texmfdoc,$texmflocal,$texmfhome,
+ $texdocpath,$distdocpath,$docdocpath,$localdocpath,$homedocpath,
+ $datadir,
+ $dvi_viewer,$dvips_conv,$ps_viewer,$pdf_viewer,
+ $pdfps_conv,$html_viewer,$htmlps_conv,$htmlps_redir,
+ $txt_viewer,$txtps_conv,$txtps_redir,$print_cmd);
+
+# defaults: unix values
+my $qq="'";
+my $HomeEnv=$ENV{HOME};
+my $TeXDocRcDefaults="texdocrc.defaults";
+my $TempDir; $TempDir=$ENV{TMPDIR} or $TempDir="/tmp";
+my $CmdConsole="xterm -e ";
+
+if ($IsWin32) {
+ $qq = "\"";
+ $HomeEnv = &GetHomeDir;
+ chomp $HomeEnv;
+ $TeXDocRcDefaults = "texdocrc-win32.defaults";
+ $TempDir = &GetTempPath;
+ $CmdConsole = "command /c ";
+}
+
+my $myrc="${HomeEnv}/.texdocrc"; # optional personal settings file
+
+my ($line,@dummy);
+my @tmpfiles;
+# read system-wide defaults from texdocrc.defaults
+my $sysrc=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} ${TeXDocRcDefaults}`;
+my $database=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk.dat`;
+my $locdatabase=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk-local.dat`;
+my $homedatabase=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk-pers.dat`;
+chomp $locdatabase;
+chomp $homedatabase;
+chomp $sysrc;
+&readrc($sysrc,1);
+@dummy=split("/",$sysrc);
+pop @dummy;
+$datadir=join('/',@dummy);
+# possibly use personal settings instead of defaults
+if (-e $myrc) { &readrc($myrc,2); }
+# command line options
+GetOptions('v'=>\$quiet,'a'=>\$autoview);
+my $special=0;
+my @button;
+$button[17]="Miscellaneous";
+my (@packname,@topic,@doc,@keywords,@maxind,%stydoc);
+# read database file
+my $i=-1;
+my $j;
+open(DATABASE,"$database") || &fatalmsg("Couldn't open database $database.\n");
+while ($line = <DATABASE>) {
+ LINETYPE: {
+ ($line =~ /^\@/) && do { # category
+ ++$i;
+ if ($i == $#button) {
+ pop @button;
+ push @button,(substr($line,1,-1));
+ $special=1;
+ } else {
+ $button[$i]=substr($line,1,-1);
+ }
+ $j=0;
+ last LINETYPE;
+ };
+ ($line =~ /^(#|$)/) && do { # comment or empty line
+ last LINETYPE;
+ };
+# list item
+ @dummy=split(";",$line);
+ $packname[$i][$j]=$dummy[0];
+ $topic[$i][$j]=$dummy[1];
+ $doc[$i][$j]=$dummy[2];
+ $keywords[$i][$j]=$dummy[3];
+ if ($doc[$i][$j] =~ /sty$/ && $keywords[$i][$j]) {
+ $stydoc{"$doc[$i][$j]"}=substr($keywords[$i][$j],1,1);
+ unless ($stydoc{"$doc[$i][$j]"} =~ /^\d$/) {
+ $stydoc{"$doc[$i][$j]"}=0;
+ }
+ }
+ $maxind[$i]=$j;
+ ++$j;
+ };
+}
+close(DATABASE);
+# Read site-local and user's database(s) if it/they exist(s)
+foreach my $dbfile ($locdatabase,$homedatabase) {
+ if (-e "$dbfile") {
+ open(DATABASE,"$dbfile") ||
+ print "Couldn't open additional database $dbfile.\n";
+ $i=17; # local/user: if no category is specified in database, add to "Misc"
+ while ($line = <DATABASE>) {
+ LINETYPE: {
+ ($line =~ /^\@/) && do { # category
+ $i=&arrindex(@button,substr($line,1,-1));
+ if ($i >= $#button) {
+ $i=$#button;
+ pop @button;
+ push @button,(substr($line,1,-1));
+ $special=1;
+ }
+ last LINETYPE;
+ };
+ ($line =~ /^(#|$)/) && do { # comment or empty line
+ last LINETYPE;
+ };
+# list item
+ @dummy=split(";",$line);
+ $j=&arrindex(@{$packname[$i]},$dummy[0]);
+ if ($j > $#{$packname[$i]}) {
+ $packname[$i][$j]=$dummy[0];
+ $topic[$i][$j]=$dummy[1];
+ $doc[$i][$j]=$dummy[2];
+ $keywords[$i][$j]=$dummy[3];
+ if ($doc[$i][$j] =~ /sty$/ && $keywords[$i][$j]) {
+ $stydoc{"$doc[$i][$j]"}=substr($keywords[$i][$j],1,1);
+ unless ($stydoc{"$doc[$i][$j]"} =~ /^\d$/) {
+ $stydoc{"$doc[$i][$j]"}=0;
+ }
+ }
+ $maxind[$i]=$j;
+ ++$j;
+ }
+ };
+ }
+ close(DATABASE);
+ $special=1 if ($i == 17 && $j > 0);
+ }
+}
+
+# Tk
+# hash table for toplevel windows; used to avoid multiple calls of same window
+my %tlwins;
+my %buttonlist;
+# create frames for main window: commands on top, frame for buttons below
+my $main=new MainWindow;
+$tlwins{'mainwindow'}{'addr'}=$main;
+$main->resizable(0,0);
+$main->title("TeX Documentation Browser");
+$main->bind('all','<Control-q>'=>\&clean_exit);
+$main->bind('all','<Control-m>'=>sub { $main->raise(); });
+$main->bind('all','<Control-h>'=>\&helptext);
+$main->bind('all','<Control-s>'=>sub { $main->raise(); &mksrch; });
+$main->bind('all','<Control-t>'=>\&settings);
+my $cmdframe=$main->Frame(-background=>"#ffcc99");
+my $buttonframe=$main->Frame;
+$cmdframe->pack(-side=>'top',-fill=>'x');
+$buttonframe->pack(-side=>'bottom');
+# normal cursor
+my $defcursor=$main->cget(-cursor);
+# make buttons for command frame
+my $Qbut=$cmdframe->Button(-text=>'Quit',%butcol,
+ -command=>\&clean_exit)->pack(-side=>'left');
+$tlwins{'mainwindow'}{'buttons'}[0]=$Qbut;
+# define common default font for labels and text explicitly
+my $deffont=$Qbut->cget(-font);
+# ensure readability on high-res screens (suggested by R.Kotucha)
+$deffont='Helvetica -16 bold' if &x_resolution > 1200;
+$Qbut->configure(-font=>$deffont);
+$tlwins{'mainwindow'}{'buttons'}[1]=$cmdframe->Button(-text=>'Search',
+ -font=>$deffont,%butcol,
+ -command=>\&mksrch
+ )->pack(-side=>'left');
+$tlwins{'mainwindow'}{'buttons'}[2]=$cmdframe->Button(-text=>'Help/About',
+ -font=>$deffont,%butcol,
+ -command=>\&helptext
+ )->pack(-side=>'right');
+$tlwins{'mainwindow'}{'buttons'}[3]=$cmdframe->Button(-text=>'Settings',
+ -font=>$deffont,%butcol,
+ -command=>\&settings
+ )->pack(-side=>'right');
+# make buttons for category button frame
+my $lbut=0;
+my $l;
+foreach (@button) { $l=length $_; $lbut=$l if ( $l > $lbut) }
+my @catg;
+my ($i2,$i3);
+my $nbutt=scalar @button;
+my $ncols=$nbutt/3-1;
+foreach (0..$ncols) {
+ $i=$_;
+ $i2=$i+$nbutt/3;
+ $i3=$i+2*$nbutt/3;
+ $catg[$i]=$buttonframe->Button(-text=>$button[$i],
+ -font=>$deffont,%butcol,
+ -width=>$lbut,
+ -command=>[\&tpslct,$i,\@dummy])->grid
+ ($catg[$i2]=$buttonframe->Button(-text=>$button[$i2],
+ -font=>$deffont,%butcol,
+ -width=>$lbut,
+ -command=>[\&tpslct,$i2,\@dummy]),
+ $catg[$i3]=$buttonframe->Button(-text=>$button[$i3],
+ -font=>$deffont,%butcol,
+ -width=>$lbut,
+ -command=>[\&tpslct,$i3,\@dummy]));
+}
+# disable last button (lower right) if no local specials are found in list
+my $ncat;
+if ($special == 0) {
+ $catg[$#button]->configure(-state=>'disabled');
+ $ncat=$nbutt-1;
+} else {
+ $ncat=$nbutt;
+}
+for ($i=0,$j=4; $i<@catg; ++$i,++$j) {
+ $tlwins{'mainwindow'}{'buttons'}[$j]=$catg[$i];
+}
+MainLoop;
+
+########## SUBROUTINES ########################################################
+# toplevel for selecting a topic of a category for viewing or printing
+sub tpslct {
+ my($opt,@srchitems)=@_;
+ my (@lbitems,@lbdocs,$dspselect,$docselect,$wtitle);
+ if ($opt >= 0) {
+# main window buttons
+# see if toplevel window is already there
+ if (Exists($tlwins{$opt}{'addr'})) {
+ $tlwins{$opt}{'addr'}->deiconify();
+ $tlwins{$opt}{'addr'}->raise();
+ return;
+ }
+ for ($j=0; $j <= $maxind[$opt]; ++$j) {
+ push @lbitems,$topic[$opt][$j];
+ push @lbdocs,$doc[$opt][$j];
+ }
+ $wtitle=$button[$opt];
+ } else {
+# search results
+ my $spec_wtitle=shift @srchitems;
+ for ($j=0; $j < $#srchitems; $j+=2) {
+ my $k=$j+1;
+ push @lbitems,$topic[$srchitems[$j]][$srchitems[$k]];
+ push @lbdocs,$doc[$srchitems[$j]][$srchitems[$k]];
+ }
+ $wtitle="Search results for $spec_wtitle";
+ }
+# toplevel window of category $opt with two frames
+ my $tpwin=$main->Toplevel(-title=>$wtitle);
+ $tlwins{$opt}{'addr'}=$tpwin;
+ my $tpdsp=$tpwin->Frame(-relief=>'groove')->pack(-side=>'top');
+ my $tpslc=$tpwin->Frame()->pack(-side=>'top');
+# selection frame with listbox and buttons
+# label for listbox
+ my $tplabel=$tpslc->Label(-text=>'Topics',
+ -font=>$deffont)->pack(-anchor=>'w',
+ -side=>'top');
+# listbox with optional scrollbar
+ my $tplist=$tpslc->Scrolled("Listbox",
+ -font=>$deffont,
+ -scrollbars=>'osoe',
+# -height=>0,
+ -width=>0,
+ -selectmode=>'single',
+ -exportselection=>0,
+ -cursor=>'hand2')->pack(-side=>'left',
+ -fill=>'y',
+ -expand=>1);
+ $tplist->insert('end',@lbitems); # fill topics into listbox
+# buttons frame
+ my $tpbframe=$tpslc->Frame(-borderwidth=>8);
+ $tpbframe->pack(-side=>'right');
+# make buttons for command frame
+ my $n_buttons = 0;
+ $tlwins{$opt}{'buttons'}[$n_buttons++]=
+ $tpbframe->Button(-text=>'View',
+ -font=>$deffont,%butcol,
+ -command=>sub{ &viewslc($docselect,$tpbframe);},
+ -width=>6)->pack(-side=>'top');
+ if (! $IsWin32) {
+ $tlwins{$opt}{'buttons'}[$n_buttons++]=
+ $tpbframe->Button(-text=>'Print',
+ -font=>$deffont,%butcol,
+ -command=>sub{ &prtslc($docselect,$tpbframe);},
+ -width=>6)->pack(-side=>'top');
+ }
+ $tlwins{$opt}{'buttons'}[$n_buttons++]=
+ $tpbframe->Button(-text=>'Cancel',
+ -font=>$deffont,%butcol,
+ -command=>sub{ destroy $tpwin; undef $tlwins{$opt};},
+ -width=>6)->pack(-side=>'bottom');
+# if only 1 item is in the list (most likely in search results), select it
+ if (scalar @lbitems == 1) {
+ $tplist->selectionSet(0);
+ $dspselect=$lbitems[0];
+ $docselect=$lbdocs[0];
+ &viewslc($docselect,$tpbframe)
+ if ($autoview && $wtitle =~ /^Search results/);
+ }
+# display frame
+ my $dsplabel=$tpdsp->Label(-text=>'Selection:',
+ -font=>$deffont)->pack(-anchor=>'w',,
+ -fill=>'x',
+ -side=>'left');
+ my $dspslc=$tpdsp->Label(-textvariable=>\$dspselect,
+ -font=>$deffont,
+ -borderwidth=>2)->pack(-anchor=>'w',
+ -fill=>'x',
+ -side=>'right');
+# handle selection; only one selection possible
+ $tplist->bind('<Button-1>'=>sub{my ($slctind)=$tplist->curselection();
+ $dspselect=$lbitems[$slctind];
+ $docselect=$lbdocs[$slctind];});
+# key bindings
+ $tplist->bind('<Double-Button-1>'=>sub{
+ &viewslc($docselect,$tpbframe);});
+ $tpwin->bind('<Control-v>'=>sub{
+ &viewslc($docselect,$tpbframe);});
+ $tpwin->bind('<Control-p>'=>sub{
+ &prtslc($docselect,$tpbframe);});
+ $tpwin->bind('<Control-c>'=>sub{destroy $tpwin; undef $tlwins{$opt};});
+ $tplist->bind('<Button-3>'=>sub{
+ if ($docselect) {
+ &showpath($docselect,$tpbframe);
+ } else {
+ &popmsg(2,"No selection;\nuse left mouse button.",$tpbframe);
+ }});
+}
+
+# view document selected in listbox
+sub viewslc {
+ my($slc,$parframe)=@_;
+ my $viewer;
+ my $itype=-1;
+ my $browser=0;
+ my $styflag=0;
+ unless (defined $slc) {
+ &popmsg(2,"No selection was made.",$parframe);
+ return;
+ }
+ $parframe->configure(-cursor=>'watch');
+ chomp $slc;
+ my @dummy=split('\.',$slc);
+ DOC_FORMAT: { # determine document type
+ ($dummy[-1] =~ /dvi/) && do { $viewer=$dvi_viewer; last DOC_FORMAT; };
+ ($dummy[-1] =~ /ps/) && do { $viewer=$ps_viewer; last DOC_FORMAT; };
+ ($dummy[-1] =~ /pdf/) && do { $viewer=$pdf_viewer; last DOC_FORMAT; };
+ ($dummy[-1] =~ /txt/ || $dummy[-1] =~ /faq$/) && do {
+ $viewer=($txt_viewer eq "TDK_OWN" ||
+ $txt_viewer =~ /xterm/) ?
+ $txt_viewer : "${CmdConsole} $txt_viewer";
+ last DOC_FORMAT;
+ };
+ ($dummy[-1] =~ /README/i || $dummy[-2] =~ /\/README$/i) && do {
+ $viewer=($txt_viewer eq "TDK_OWN" ||
+ $txt_viewer =~ /xterm/) ?
+ $txt_viewer : "${CmdConsole} $txt_viewer";
+ last DOC_FORMAT;
+ };
+ ($dummy[-1] =~ /htm/) && do {
+ $viewer=$html_viewer;
+ if ($html_viewer =~ /netscape/i) { # check if Netscape is open
+ my $lockfile="${HomeEnv}/.netscape/lock";
+ $browser=1 if (-e $lockfile || -l $lockfile);
+ } elsif ($html_viewer =~ /mozilla/i) { # check if Mozilla is open
+ my $mozcheck=
+ `mozilla -remote 'openFile($texmfmain/doc/index.html)'`;
+ $browser=1 unless ($?);
+ }
+ last DOC_FORMAT;
+ };
+# some packages have no normal documentation but useful info in the .sty
+ ($dummy[-1] =~ /sty$/) && do {
+ $viewer=($txt_viewer eq "TDK_OWN" ||
+ $txt_viewer =~ /xterm/) ?
+ $txt_viewer : "${CmdConsole} $txt_viewer";
+ $slc="../tex/$slc"; # .sty files are in ${tex,local}docpath/../tex/
+ $styflag=1;
+ last DOC_FORMAT;
+ };
+ $parframe->configure(-cursor=>$defcursor);
+ if ($xfmt_viewer != 1) {
+ &popmsg(2,"$dummy[-1]: not a known document format",$parframe);
+ return;
+ }
+ };
+ if ($viewer eq "") {
+ if ($xfmt_viewer == 1) {
+ &popmsg(-1,'Unknown format; assuming plain text.',$parframe);
+ $viewer=($txt_viewer eq "TDK_OWN" ||
+ $txt_viewer =~ /xterm/) ?
+ $txt_viewer : "${CmdConsole} $txt_viewer";
+ } else {
+ &popmsg(2,"$dummy[-1]: no viewer available/specified for this format",
+ $parframe);
+ $parframe->configure(-cursor=>$defcursor);
+ return;
+ }
+ }
+# build complete path and start viewer if file exists
+ my $slcdoc;
+ $slcdoc=&finddoc($slcdoc,$slc,$parframe);
+ if ($slcdoc ne "") {
+# change to doc directory in case there are pictures
+ my $docpath=substr($slcdoc,0,(rindex($slcdoc,'/',(length $slcdoc))));
+ chomp $slcdoc;
+ chdir ($docpath);
+# try to get doc out of .sty file
+ if ($styflag) {
+ &popmsg(-1,'Trying to extract documentation out of .sty file;
+might be cluttered with program comments.',
+ $parframe);
+ $slcdoc=&stripsty($slcdoc,substr($slc,7));
+ }
+# for text files use built-in text viewer if set
+ if ($IsWin32) {
+ if ($viewer eq "TDK_OWN") {
+ &ShellExecute('open', $slcdoc);
+ $parframe->configure(-cursor=>$defcursor);
+ return;
+ }
+ else {
+ system("$viewer $slcdoc");
+ }
+ }
+ else {
+ if ($viewer eq "TDK_OWN") {
+ &textview($slcdoc);
+ $parframe->configure(-cursor=>$defcursor);
+ return;
+ }
+ if ($quiet == 0) { # show messages
+ if ($browser == 0) { # normal viewers or new Netscape/Mozilla
+ system("$viewer $slcdoc &");
+ } else { # open doc in existing Netscape/Mozilla window
+ system("$viewer -remote 'openFile($slcdoc)' &");
+ &popmsg(-1,"Opening document in existing $viewer window.",
+ $parframe);
+ }
+ } else { # viewer messages written to /dev/null instead of terminal
+ if ($browser == 0) { # normal viewers or new Netscape/Mozilla
+ system("perl -we 'use strict; \
+my \$dump=\"\"; \
+open(NULL,\">/dev/null\"); \
+open (VIEWQ,\"$viewer $slcdoc |\"); \
+while (\$dump=<VIEWQ>) { print NULL \$dump; } \
+close(VIEWQ); \
+close(NULL);' &");
+ } else { # open doc in existing window (Netscape or Mozilla)
+ # not quiet; I didn't get an inline perl call like in
+ # the other branch working
+ system("$viewer -remote 'openFile($slcdoc)' &");
+ &popmsg(-1,"Opening document in existing $viewer window.",
+ $parframe);
+ }
+ }
+ }
+ }
+ $parframe->configure(-cursor=>$defcursor);
+}
+
+# Tk widget for text document
+sub textview {
+ my($txtfile)=@_;
+# see if toplevel window with this file is already there
+ if (Exists($tlwins{$txtfile}{'addr'})) {
+ $tlwins{$txtfile}{'addr'}->deiconify();
+ $tlwins{$txtfile}{'addr'}->raise();
+ return;
+ }
+ my $tfv_tk=$main->Toplevel(-title=>"Text file viewer");
+ $tfv_tk->resizable(0,1);
+ $tlwins{$txtfile}{'addr'}=$tfv_tk;
+ $tfv_tk->Label(-text=>"File: $txtfile",
+ -font=>$deffont,
+ -relief=>'ridge',
+ -borderwidth=>3)->pack(-side=>'top',
+ -fill=>'x',
+ -ipady=>10,
+ -anchor=>'s');
+ my $txtbody=$tfv_tk->Scrolled("Text",
+ -relief=>'flat',
+ -font=>$deffont,
+ -height=>20,
+ -width=>80,
+ -scrollbars=>"e")->pack(-side=>'top',
+ -fill=>'y',
+ -expand=>1);
+ open(TXTFILE,"$txtfile");
+ while (<TXTFILE>) { $txtbody->insert('end',$_); }
+ close(TXTFILE);
+ $txtbody->configure(-state=>'disabled');
+ $tlwins{$txtfile}{'buttons'}[0]=
+ $tfv_tk->Button(-text=>'Close',
+ -font=>$deffont,%butcol,
+ -command=>sub{ destroy $tfv_tk;
+ undef $tlwins{$txtfile};
+ })->pack(-side=>'bottom',
+ -fill=>'x');
+ $tfv_tk->bind('<Control-c>'=>sub{destroy $tfv_tk;
+ undef $tlwins{$txtfile};
+ });
+}
+
+# print document selected in listbox
+sub prtslc {
+ my($slc,$parframe)=@_;
+ $tmpfno=&randname;
+ my $pstmpfile="${TempDir}/texdoc_$tmpfno.ps";
+ push @tmpfiles,$pstmpfile;
+ my $status;
+ chomp $slc;
+ unless (defined $slc) {
+ &popmsg(2,"No selection was made.",$parframe);
+ return;
+ }
+ if ($print_cmd eq "") {
+ &popmsg(2,"No printer specified.",$parframe);
+ return;
+ }
+# build complete path and check existence of file
+ my @dummy=split('\.',$slc);
+ if ($dummy[-1] =~ /sty$/) {
+ $slc="../tex/$slc"; # .sty files are in ${tex,local,home}docpath/../tex
+ }
+ my $slcdoc;
+ $slcdoc=&finddoc($slcdoc,$slc,$parframe);
+ return if ($slcdoc eq "");
+# change to doc directory in case there are pictures
+ my $docpath=substr($slcdoc,0,(rindex($slcdoc,'/',(length $slcdoc))));
+ chdir ($docpath);
+ DOC_FORMAT: { # determine document type
+# convert dvi files to ps before printing
+ ($dummy[-1] =~ /dvi/) && do {
+ if ($dvips_conv eq "") {
+ &popmsg(2,"No converter available for dvi->ps conversion.",
+ $parframe);
+ return;
+ }
+ &popmsg(-1,"Converting dvi to ps for printing and sending file to print...",$parframe);
+ $status=system("$dvips_conv $slcdoc -o $pstmpfile");
+ if ($status != 0) {
+ &popmsg(2,"Error: Conversion dvi->ps failed!",$parframe);
+ }
+ last DOC_FORMAT;
+ };
+# PostScript is printed directly
+ ($dummy[-1] =~ /ps/) && do {
+ &popmsg(-1,"Sending file to $print_cmd...",$parframe);
+ $pstmpfile=$slcdoc;
+ last DOC_FORMAT;
+ };
+# convert pdf files to ps before printing
+ ($dummy[-1] =~ /pdf/) && do {
+ if ($pdfps_conv eq "") {
+ &popmsg(2,"No converter available for pdf->ps conversion.",
+ $parframe);
+ return;
+ }
+ &popmsg(-1,"Converting pdf to ps for printing and sending file to print...",$parframe);
+ system("$pdfps_conv $slcdoc $pstmpfile");
+ last DOC_FORMAT;
+ };
+# convert html files to ps before printing
+ ($dummy[-1] =~ /htm/) && do {
+ if ($htmlps_conv eq "") {
+ &popmsg(2,"No converter available for html->ps conversion.",
+ $parframe);
+ return;
+ }
+ &popmsg(-1,"Converting html to ps for printing and sending file to print...",$parframe);
+ my $htmlps_redir_sign=($htmlps_redir == 1) ? ">" :"";
+ system("$htmlps_conv $slcdoc $htmlps_redir_sign $pstmpfile");
+ last DOC_FORMAT;
+ };
+# convert txt files to ps before printing
+ ($dummy[-1] =~ /txt/ || $dummy[-1] =~ /faq$/
+ || $dummy[-1] =~ /README/i) && do {
+ if ($txtps_conv eq "") {
+ &popmsg(2,"No converter available for txt->ps conversion.",
+ $parframe);
+ return;
+ }
+ &popmsg(-1,"Converting txt to ps for printing and sending file to print...",$parframe);
+ my $txtps_redir_sign=($txtps_redir == 1) ? ">" :"";
+ system("$txtps_conv $slcdoc $txtps_redir_sign $pstmpfile");
+ last DOC_FORMAT;
+ };
+# convert extracted comments from sty files to ps before printing
+ ($dummy[-1] =~ /sty$/) && do {
+ if ($txtps_conv eq "") {
+ &popmsg(2,"No converter available for sty(txt)->ps conversion.",
+ $parframe);
+ return;
+ }
+ &popmsg(-1,"Converting sty(txt) to ps for printing and sending file to print...",$parframe);
+# try to get doc out of .sty file
+ &popmsg(-1,'Trying to extract documentation out of .sty file;
+might be cluttered with program comments.',
+ $parframe);
+ $slcdoc=&stripsty($slcdoc,substr($slc,7));
+ my $txtps_redir_sign=($txtps_redir == 1) ? ">" :"";
+ system("$txtps_conv $slcdoc $txtps_redir_sign $pstmpfile");
+ last DOC_FORMAT;
+ };
+ &popmsg(2,"$dummy[-1]: cannot print document format",$parframe);
+ return;
+ };
+ system("$print_cmd $pstmpfile");
+}
+
+# test existence and search a documentation which is not in specified place
+sub finddoc {
+ my($slcdoc,$slc,$parframe)=@_;
+ my ($dummy,$status);
+ SLCDOCFIND: foreach ($texdocpath,$distdocpath,$docdocpath) {
+ $slcdoc="$_/$slc";
+ if (-e $slcdoc) {
+# found where it should be
+ return $slcdoc;
+ } else {
+# see if the documentation file is in the local doc tree...
+ my @srchslcdoc=($slcdoc);
+ if ($localdocpath) {
+ push @srchslcdoc,"$localdocpath/$slc";
+ return $srchslcdoc[-1] if (-e $srchslcdoc[-1]);
+ }
+# ... or the user's doc tree...
+ if ($homedocpath) {
+ push @srchslcdoc,"$homedocpath/$slc";
+ return $srchslcdoc[-1] if (-e $srchslcdoc[-1]);
+ }
+# ... otherwise proceed with searching
+ $status=-1;
+# see if the documentation file is compressed
+ CMPREND: foreach my $cmprtype ("gz","bz2","zip") {
+ foreach (@srchslcdoc) {
+ $dummy="$_.$cmprtype";
+ if (-e $dummy) { # yes, it is compressed
+ $tmpfno=&randname;
+ my $rawname=basename($slc,"");
+ $slcdoc="${TempDir}/texdoc_$tmpfno$rawname";
+ push @tmpfiles,$slcdoc;
+ my ($dcmp,$dcmp_opt);
+ COMPRESS: { # determine compression type
+ ($cmprtype eq "gz") && do {
+ $dcmp="gzip";
+ $dcmp_opt="-cd";
+ last COMPRESS;
+ };
+ ($cmprtype eq "bz2") && do {
+ $dcmp="bzip2";
+ $dcmp_opt="-cd";
+ last COMPRESS;
+ };
+ ($cmprtype eq "zip") && do {
+ $dcmp="zip";
+ $dcmp_opt="-p";
+ last COMPRESS;
+ };
+ };
+# try to decompress
+ $status=system("$dcmp $dcmp_opt $dummy > $slcdoc");
+ if ($status != 0) { # failure
+ &popmsg(2,
+ "$dcmp: Couldn't decompress file, cancelling.",
+ $parframe);
+ $slcdoc="";
+ return $slcdoc;
+ }
+# last CMPREND; does not work, what we need is:
+ return $slcdoc;
+ }
+ }
+ }
+ }
+ }
+ if ($status != 0) {
+ $parframe->configure(-cursor=>'watch');
+# try to find it elsewhere with kpsewhich
+ my $rawname=basename($slc,"");
+ $slcdoc=($slcdoc =~ /\.sty$/) ?
+ `kpsewhich $rawname` :
+ `kpsewhich --format=${qq}TeX system documentation${qq} $rawname`;
+ if ($slcdoc eq "") { # nothing found; cancel
+ &popmsg(2,"$rawname not found, cancelling.",$parframe);
+ $slcdoc="";
+ }
+ $parframe->configure(-cursor=>$defcursor);
+ }
+ return $slcdoc;
+}
+
+# determine existence and show paths of files (Button-3)
+sub showpath {
+ my ($docselect,$tpbframe)=@_;
+ my $found=0;
+ if ($docselect =~ /\.sty$/) {
+ STYPATH: foreach my $fullpath ("$texmfmain/tex/$docselect",
+ "$texmfdist/tex/$docselect",
+ "$texmflocal/tex/$docselect",
+ "$texmfhome/tex/$docselect") {
+ if (-e $fullpath) {
+ &popmsg(0,"Selected file:\n$fullpath",$tpbframe);
+ $found=1;
+ last STYPATH;
+ }
+ }
+ if (!$found) {
+ &popmsg(2,"Selected file:\n$docselect\ndoes not exist.",$tpbframe) }
+ } else {
+ DOCPATH: foreach my $fullpath ("$texdocpath/$docselect",
+ "$distdocpath/$docselect",
+ "$docdocpath/$docselect",
+ "$localdocpath/$docselect",
+ "$homedocpath/$docselect") {
+ foreach ('','.gz','.bz2','.zip') {
+ my $fullpathext="$fullpath$_";
+ if (-e $fullpathext) {
+ &popmsg(0,"Selected file:\n$fullpathext",$tpbframe);
+ $found=1;
+ last DOCPATH;
+ }
+ }
+ }
+ if (!$found) {
+ &popmsg(2,"Selected file:\n$docselect\ndoes not exist (neither in normal form nor compressed).",$tpbframe) }
+ }
+}
+
+# make or destroy search entry widget
+sub mksrch {
+ if ($srchflag == 1) {
+ destroy $srchentry;
+ $srchflag=0;
+ } else {
+# get the search string
+ $srchentry=$cmdframe->Entry(-cursor=>'xterm',
+ -font=>$deffont,
+ -width=>20,
+ -takefocus=>1)->pack(-side=>'left');
+ $srchentry->focus();
+ $srchentry->bind('<Return>'=>[\&srchstr, $srchentry]);
+ $srchflag=1;
+# key binding
+ $srchentry->bind('<Control-c>'=>sub{destroy $srchentry; $srchflag=0;});
+ }
+}
+
+# search a string in @packname, @topic and @keywords
+sub srchstr {
+ my ($i,$j,$string);
+ my (@results,@reslist);
+ $main->configure(-cursor=>'watch');
+ $string=$srchentry->get();
+# search
+ if ($string) {
+ for ($i=0; $i<$ncat; ++$i) {
+ for ($j=0; $j<$maxind[$i]+1; ++$j) {
+ SRCH: {
+ ($topic[$i][$j] =~ /$string/i) && do {
+ push @results,($i,$j);
+ last SRCH;
+ };
+ (defined $keywords[$i][$j]) && do {
+ if ($keywords[$i][$j] =~ /$string/i) {
+ push @results,($i,$j);
+ last SRCH;
+ }
+ };
+ ($packname[$i][$j] =~ /$string/i) && do {
+ push @results,($i,$j);
+ last SRCH;
+ };
+ };
+ }
+ }
+ } else { # return full database
+ $string='all database entries';
+ for ($i=0; $i<$ncat; ++$i) {
+ for ($j=0; $j<$maxind[$i]+1; ++$j) { push @results,($i,$j); }
+ }
+ }
+# destroy entry widget and show results
+ destroy $srchentry;
+ $srchflag=0;
+ if (scalar @results == 0) {
+ &popmsg(0,"Search for $string: no matches found.",$cmdframe);
+ } else {
+# cancel multiple entries
+ my ($omit,$pack1,$pack2);
+ @reslist=($results[0],$results[1]);
+ for ($i=0; $i<$#results; $i+=2) {
+ $omit=0;
+ $pack1=$packname[$results[$i]][$results[$i+1]];
+ for ($j=0; $j<$#reslist; $j+=2) {
+ $pack2=$packname[$reslist[$j]][$reslist[$j+1]];
+ if ($pack1 eq $pack2) { $omit=1; last; }
+ }
+ if ($omit == 0) { push @reslist,($results[$i],$results[$i+1]); }
+ }
+ unshift @reslist,$string;
+ &tpslct(-1,@reslist);
+ }
+ $main->configure(-cursor=>$defcursor);
+}
+
+# extract documentation of .sty files; a flag in the @keywords array shows
+# where the doc is located:
+# -0-: no specific place; -1-: at end, behind \endinput; -2-: at beginning,
+# terminated by %%%%%%; -3-: at beginning, terminated with blank line
+sub stripsty {
+ my ($slcdoc,$slc)=@_;
+ my @stydoc;
+ $tmpfno=&randname;
+ my $tmpslcdoc="${TempDir}/texdoc_$tmpfno.txt";
+ push @tmpfiles,$tmpslcdoc;
+ open (STY,"$slcdoc");
+ LOC: {
+ ($stydoc{$slc} == 0) && do { # no specific place, suck in everything :-(
+ while ($line = <STY>) { push @stydoc,$line if ($line =~ /^%/); }
+ last LOC;
+ };
+ ($stydoc{$slc} == 1) && do { # at end, behind \endinput
+ while ($line = <STY>) {
+ last if ($line =~ /^\s*\\endinput/ && !($line =~ /^%/));
+ }
+ while ($line = <STY>) { push @stydoc,$line; }
+ last LOC;
+ };
+ ($stydoc{$slc} == 2) && do { # up to a certain %%%%%%%, hopefully the 1st
+ for (my $i=0; $i<9; ++$i) { $stydoc[$i]=<STY>; } # after the 8th line
+ while ($line = <STY>) {
+ last if ($line =~ /^%{4,}/);
+ push @stydoc,$line;
+ }
+ last LOC;
+ };
+ ($stydoc{$slc} == 3) && do { # up to 1st blank/apparently empty line
+ while ($line = <STY>) {
+ last if ($line =~ /^\s*$/);
+ push @stydoc,$line;
+ }
+ last LOC;
+ };
+ };
+ close(STY);
+ open(TMPSTY,">$tmpslcdoc");
+ foreach (@stydoc) { print TMPSTY $_; }
+ close(TMPSTY);
+ return $tmpslcdoc;
+}
+
+# pop up a note or an error or warning message toplevel window
+sub popmsg {
+ my($level,$msg,$parframe)=@_;
+ my $degree;
+ LEVEL: {
+ ($level == -1) && do { $degree="Info"; last LEVEL; };
+ ($level == 0) && do { $degree="Note"; last LEVEL; };
+ ($level == 1) && do {
+ return if ($quiet == 1);
+ $degree="Warning";
+ last LEVEL
+ };
+ ($level == 2) && do { $degree="Error"; last LEVEL; };
+ };
+ my $msgwin=$parframe->Toplevel(-title=>$degree);
+ my $lbl=$msgwin->Label(-text=>uc($degree),
+ -font=>$deffont)->pack(-side=>'top', -fill=>'x');
+# get size of message text
+ my @dummy=split("\n",$msg);
+ my $nline=scalar @dummy;
+ my $msgwidth=0;
+ my $lline;
+ foreach (@dummy) {
+ $lline=length $_;
+ if ($lline > $msgwidth) { $msgwidth=$lline; }
+ }
+ my $message=$msgwin->Text(-relief=>'flat',
+ -font=>$deffont,
+ -height=>$nline,
+ -width=>$msgwidth)->pack(-side=>'top');
+ $message->insert('end',$msg);
+ $message->configure(-state=>'disabled');
+ if ($level < 0) { # transient message window
+ $msgwin->after(3000,sub{destroy $msgwin});
+ } else { # persistent message window
+ $msgwin->Button(-text=>'Close',
+ -font=>$deffont,%butcol,
+ -command=>sub{destroy $msgwin})->pack(-side=>'bottom',
+ -fill=>'x');
+ $msgwin->bind('<Control-c>'=>sub{destroy $msgwin});
+ }
+}
+
+# show/change settings (don't show this to an expert :-/ )
+sub settings {
+ my ($homedocpath_tmp,$quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
+ $dvi_viewer_tmp,$dvips_conv_tmp,
+ $ps_viewer_tmp,$pdf_viewer_tmp,$pdfps_conv_tmp,
+ $html_viewer_tmp,$htmlps_conv_tmp,$htmlps_redir_tmp,
+ $txt_viewer_tmp,$txtps_conv_tmp,$txtps_redir_tmp,$print_cmd_tmp)=
+ ($homedocpath,$quiet,$autoview,$xfmt_viewer,
+ $dvi_viewer,$dvips_conv,$ps_viewer,
+ $pdf_viewer,$pdfps_conv,$html_viewer,
+ $htmlps_conv,$htmlps_redir,$txt_viewer,
+ $txtps_conv,$txtps_redir,$print_cmd);
+ my @tdcolors_tmp=@tdcolors;
+# see if toplevel window is already there
+ if (Exists($tlwins{"setmenu"}{'addr'})) {
+ $tlwins{"setmenu"}{'addr'}->deiconify();
+ $tlwins{"setmenu"}{'addr'}->raise();
+ return;
+ }
+ my $setmenu=$main->Toplevel(-title=>'Settings');
+ $setmenu->resizable(0,0);
+ $tlwins{"setmenu"}{'addr'}=$setmenu;
+# documentation path
+ my $datlabel;
+ $datlabel="Database file(s) used: teTeX";
+ $datlabel.=", local database" if (-e $locdatabase);
+ $datlabel.=", user database" if (-e $homedatabase);
+ my $docframe=$setmenu->Frame(-relief=>'groove',
+ -borderwidth=>2)->pack(-side=>'top',
+ -fill=>'x',
+ -expand=>1);
+ my $docframestring="\nDistribution documentation root path(s):\n$texdocpath";
+ $docframestring.=", $distdocpath" if (-e $distdocpath);
+ $docframestring.=", $docdocpath" if (length $docdocpath);
+ if ($localdocpath && $localdocpath ne $texdocpath) {
+ $docframestring.="\nLocal documentation root path: $localdocpath\n";
+ }
+ $docframe->Label(-text=>"$docframestring",
+ -font=>$deffont)->pack(-side=>'top',
+ -anchor=>'w',
+ -fill=>'x',
+ -expand=>1);
+ if (defined $texmfhome && -d $texmfhome) {
+ $homedocpath_tmp=basename($homedocpath_tmp,"");
+ my $usrdocframe=$docframe->Frame(-relief=>'flat')->pack(-side=>'top',
+ -fill=>'x');
+ my $usrdoclabel=$usrdocframe->Label(-text=>"User's documentation root path: $texmfhome/",
+ -font=>$deffont)->pack(-side=>'left');
+ my $usrdocentry=$usrdocframe->Entry(-textvariable=>\$homedocpath_tmp,
+ -font=>$deffont)->pack(-side=>'left');
+ }
+ $docframe->Label(-text=>"$datlabel.",
+ -font=>$deffont)->pack(-side=>'top',
+ -anchor=>'w',
+ -ipady=>2,
+ -fill=>'x',
+ -expand=>1);
+# General viewer behaviour
+ my $genvframe=$setmenu->Frame(-label=>'General viewer behaviour',
+ -relief=>'groove',
+ -borderwidth=>2)->pack(-side=>'top',
+ -fill=>'x',
+ -ipady=>6,
+ -expand=>1);
+ my $genvframe1=$genvframe->Frame()->pack(-side=>'left');
+ my $genvsub1=$genvframe1->Frame()->pack(-side=>'top',
+ -anchor=>'w',
+ -ipady=>3);
+ my $genvecbut=$genvsub1->
+ Checkbutton(-variable=>\$quiet_tmp)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $genvelabel=$genvsub1->Label(-text=>'Suppress error messages',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $genvsub2=$genvframe1->Frame()->pack(-side=>'top',
+ -anchor=>'w');
+ my $genvscbut=$genvsub2->
+ Checkbutton(-variable=>\$autoview_tmp)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $genvslabel=$genvsub2->Label(-text=>'Autostart viewer for one-item listboxes',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $genvsub3=$genvframe1->Frame()->pack(-side=>'top',
+ -anchor=>'w');
+ my $genvxcbut=$genvsub3->
+ Checkbutton(-variable=>\$xfmt_viewer_tmp)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $genvxlabel=$genvsub3->Label(-text=>'Use text viewer for unknown file format',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+# colours of GUI
+ my @tdcolors_d=@tdcolors_tmp;
+ $tlwins{'setmenu'}{'buttons'}[0]=
+ $genvframe->Button(-text=>'Change viewer colours',
+ -command=>sub {
+ @tdcolors_tmp=&popcolor($setmenu,@tdcolors_tmp);
+ @tdcolors_d=@tdcolors_tmp;
+ },
+ -font=>$deffont,%butcol)->pack(-side=>'right');
+# DVI
+ my $dviframe=$setmenu->Frame(-label=>'DVI',
+ -relief=>'groove',
+ -borderwidth=>2)->pack(-side=>'top',
+ -fill=>'x',
+ -ipady=>6,
+ -expand=>1);
+ my $dvisub1=$dviframe->Frame()->pack(-side=>'top',
+ -anchor=>'w');
+ my $dvisub2=$dviframe->Frame()->pack(-side=>'top',
+ -anchor=>'w',
+ -ipady=>6);
+ my $dvivlabel=$dvisub1->Label(-text=>'Viewer command',
+ -anchor=>'w',
+ -font=>$deffont)->pack(-side=>'left');
+ my $dviventry=$dvisub1->Entry(-textvariable=>\$dvi_viewer_tmp,
+ -font=>$deffont)->pack(-side=>'left');
+ my $dviclabel=$dvisub2->Label(-text=>'DVI->PS converter command',
+ -anchor=>'w',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $dvilbwidth=length 'DVI->PS converter command';
+ $dvivlabel->configure(-width=>1.1*$dvilbwidth);
+ $dviclabel->configure(-width=>1.1*$dvilbwidth);
+ my $dvicentry=$dvisub2->Entry(-textvariable=>\$dvips_conv_tmp,
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+# PostScript
+ my $psframe=$setmenu->Frame(-label=>'PostScript',
+ -relief=>'groove',
+ -borderwidth=>2)->pack(-side=>'top',
+ -fill=>'x',
+ -ipady=>10,
+ -expand=>1);
+ my $psvlabel=$psframe->Label(-text=>'Viewer command',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'w');
+ my $psventry=$psframe->Entry(-textvariable=>\$ps_viewer_tmp,
+ -font=>$deffont)->pack(-side=>'left');
+# PDF
+ my $pdfframe=$setmenu->Frame(-label=>'PDF',
+ -relief=>'groove',
+ -borderwidth=>2)->pack(-side=>'top',
+ -fill=>'x',
+ -ipady=>6,
+ -expand=>1);
+ my $pdfsub1=$pdfframe->Frame()->pack(-side=>'top',
+ -anchor=>'w');
+ my $pdfsub2=$pdfframe->Frame()->pack(-side=>'top',
+ -anchor=>'w',
+ -ipady=>6);
+ my $pdfvlabel=$pdfsub1->Label(-text=>'Viewer command',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'w');
+ my $pdfventry=$pdfsub1->Entry(-textvariable=>\$pdf_viewer_tmp,
+ -font=>$deffont)->pack(-side=>'left');
+ my $pdfclabel=$pdfsub2->Label(-text=>'PDF->PS converter command',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $pdfcentry=$pdfsub2->Entry(-textvariable=>\$pdfps_conv_tmp,
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+# HTML
+ my $htmlframe=$setmenu->Frame(-label=>'HTML',
+ -relief=>'groove',
+ -borderwidth=>2)->pack(-side=>'top',
+ -fill=>'x',
+ -ipady=>6,
+ -expand=>1);
+ my $htmlsub1=$htmlframe->Frame()->pack(-side=>'top',
+ -anchor=>'w');
+ my $htmlsub2=$htmlframe->Frame()->pack(-side=>'top',
+ -anchor=>'w',
+ -ipady=>6);
+ my $htmlvlabel=$htmlsub1->Label(-text=>'Viewer command',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'w');
+ my $htmlventry=$htmlsub1->Entry(-textvariable=>\$html_viewer_tmp,
+ -font=>$deffont)->pack(-side=>'left');
+ my $htmlclabel=$htmlsub2->Label(-text=>'HTML->PS converter command',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $htmlcentry=$htmlsub2->Entry(-textvariable=>\$htmlps_conv_tmp,
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $htmlrlabel=$htmlsub2->Label(-text=>'Output redirect needed',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $htmlrcbut=$htmlsub2->
+ Checkbutton(-variable=>\$htmlps_redir_tmp)->pack(-side=>'left',
+ -anchor=>'sw');
+# plain text
+ my $txtframe=$setmenu->Frame(-label=>'Plain text',
+ -relief=>'groove',
+ -borderwidth=>2)->pack(-side=>'top',
+ -fill=>'x',
+ -ipady=>6,
+ -expand=>1);
+ my $txtsub1=$txtframe->Frame()->pack(-side=>'top',
+ -anchor=>'w');
+ my $txtsub2=$txtframe->Frame()->pack(-side=>'top',
+ -anchor=>'w',
+ -ipady=>6);
+ my $txtvlabel=$txtsub1->Label(-text=>'Viewer command',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'w');
+ my $txtventry=$txtsub1->Entry(-textvariable=>\$txt_viewer_tmp,
+ -font=>$deffont)->pack(-side=>'left');
+ my $txt_view_flag;
+ if ($txt_viewer_tmp eq "TDK_OWN") {
+ $txt_view_flag=1;
+ $txtventry->configure(-state=>'disabled');
+ } else {
+ $txt_view_flag=0;
+ $txtventry->configure(-state=>'normal');
+ }
+ my $txtvilabel=$txtsub1->Label(-text=>"\tUse texdoctk\'s own viewer",
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $txtvcbut=$txtsub1->
+ Checkbutton(-variable=>\$txt_view_flag,
+ -command=>sub {
+ if ($txt_view_flag == 1) {
+ $txt_viewer_tmp="TDK_OWN";
+ $txtventry->configure(-state=>'disabled');
+ } else {
+ $txt_viewer_tmp=$txt_viewer;
+ $txtventry->configure(-state=>'normal');
+ $txtventry->focus();
+ }
+ })->pack(-side=>'left',
+ -anchor=>'sw');
+ my $txtclabel=$txtsub2->Label(-text=>'Text->PS converter command',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $txtcentry=$txtsub2->Entry(-textvariable=>\$txtps_conv_tmp,
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $txtrlabel=$txtsub2->Label(-text=>'Output redirect needed',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'sw');
+ my $txtrcbut=$txtsub2->
+ Checkbutton(-variable=>\$txtps_redir_tmp)->pack(-side=>'left',
+ -anchor=>'sw');
+# printer
+ my $prtframe=$setmenu->Frame(-label=>'Printer',
+ -relief=>'groove',
+ -borderwidth=>2)->pack(-side=>'top',
+ -fill=>'x',
+ -ipady=>10,
+ -expand=>1);
+ my $prtclabel=$prtframe->Label(-text=>'Command',
+ -font=>$deffont)->pack(-side=>'left',
+ -anchor=>'w');
+ my $prtcentry=$prtframe->Entry(-textvariable=>\$print_cmd_tmp,
+ -font=>$deffont)->pack(-side=>'left');
+# buttons and key bindings
+ my $setbfr=$setmenu->Frame()->pack(-side=>'bottom');
+ $tlwins{'setmenu'}{'buttons'}[1]=
+ $setbfr->Button(-text=>'OK',
+ -font=>$deffont,%butcol,
+ -command=>sub{
+ $homedocpath="$texmfhome/$homedocpath_tmp";
+ ($quiet,$autoview,$xfmt_viewer,
+ $dvi_viewer,$dvips_conv,
+ $ps_viewer,$pdf_viewer,
+ $pdfps_conv,$html_viewer,
+ $htmlps_conv,$htmlps_redir,
+ $txt_viewer,$txtps_conv,$txtps_redir,$print_cmd)=
+ ($quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
+ $dvi_viewer_tmp,$dvips_conv_tmp,
+ $ps_viewer_tmp,
+ $pdf_viewer_tmp,$pdfps_conv_tmp,
+ $html_viewer_tmp,
+ $htmlps_conv_tmp,$htmlps_redir_tmp,
+ $txt_viewer_tmp,$txtps_conv_tmp,
+ $txtps_redir_tmp,$print_cmd_tmp);
+ @tdcolors=@tdcolors_tmp;
+ %butcol=('-background'=>$tdcolors[0],
+ '-foreground'=>$tdcolors[1],
+ '-activebackground'=>$tdcolors[2],
+ '-activeforeground'=>$tdcolors[3]);
+ foreach my $tlkey (keys %tlwins) {
+ foreach (@{$tlwins{$tlkey}{'buttons'}}) {
+ $_->configure(%butcol);
+ }
+ }
+ if ($txt_viewer eq "" &&
+ defined $ENV{PAGER}) {
+ $txt_viewer=$ENV{PAGER};
+ }
+ destroy $setmenu},
+ -width=>6)->pack(-side=>'left',
+ -padx=>10,
+ -pady=>10);
+ $tlwins{'setmenu'}{'buttons'}[2]=
+ $setbfr->Button(-text=>'Save',
+ -font=>$deffont,%butcol,
+ -command=>sub{
+ $setmenu->configure(-cursor=>'watch');
+ &popmsg(-1,"Writing settings to $myrc",$setmenu);
+ my $tdcolors_tmp=join(' ',@tdcolors_tmp);
+ &writerc($homedocpath_tmp,
+ $quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
+ $tdcolors_tmp,
+ $dvi_viewer_tmp,$dvips_conv_tmp,
+ $ps_viewer_tmp,
+ $pdf_viewer_tmp,$pdfps_conv_tmp,
+ $html_viewer_tmp,
+ $htmlps_conv_tmp,$htmlps_redir_tmp,
+ $txt_viewer_tmp,$txtps_conv_tmp,
+ $txtps_redir_tmp,$print_cmd_tmp,$setmenu);
+ $setmenu->configure(-cursor=>$defcursor);
+ })->pack(-side=>'left',
+ -padx=>10);
+ $tlwins{'setmenu'}{'buttons'}[3]=
+ $setbfr->Button(-text=>'Cancel',
+ -font=>$deffont,%butcol,
+ -command=>sub{destroy $setmenu;
+ undef $tlwins{"setmenu"};
+ })->pack(-side=>'left',
+ -padx=>10);
+ $setmenu->bind('<Control-c>'=>sub{destroy $setmenu;
+ undef $tlwins{"setmenu"};});
+}
+
+# dialog toplevel for color settings
+sub popcolor {
+ my ($parframe,@entryvar)=@_;
+# see if toplevel window is already there
+ if (Exists($tlwins{'chngcol'}{'addr'})) {
+ $tlwins{'chngcol'}{'addr'}->deiconify();
+ $tlwins{'chngcol'}{'addr'}->raise();
+ return;
+ }
+ my $dlgwin=$parframe->Toplevel(-title=>'Change colours');
+ $dlgwin->resizable(0,0);
+ $tlwins{'chngcol'}{'addr'}=$dlgwin;
+# entry widgets for default/active back/foreground
+ $dlgwin->Label(-text=>'Enter colours as names or RGB #xxxxxx values',
+ -font=>$deffont)->pack(-side=>'top');
+ my $dlgdef=$dlgwin->Frame()->pack(-side=>'top');
+ my $dlgact=$dlgwin->Frame()->pack(-side=>'top');
+ my $dlgdef1=$dlgdef->Frame()->pack(-side=>'left');
+ my $dlgtfr0=$dlgdef1->Frame()->pack(-side=>'top');
+ my $dlgtfr1=$dlgdef1->Frame()->pack(-side=>'top');
+ my $dlgact1=$dlgact->Frame()->pack(-side=>'left');
+ my $dlgtfr2=$dlgact1->Frame()->pack(-side=>'top');
+ my $dlgtfr3=$dlgact1->Frame()->pack(-side=>'top');
+ $dlgtfr0->Label(-text=>"Default background",
+ -anchor=>'w',
+ -width=>18,
+ -font=>$deffont)->pack(-side=>'left');
+ $dlgtfr0->Entry(-textvariable=>\$entryvar[0],
+ -font=>$deffont)->pack(-side=>'left');
+ $dlgtfr1->Label(-text=>"Default foreground",
+ -anchor=>'w',
+ -width=>18,
+ -font=>$deffont)->pack(-side=>'left');
+ $dlgtfr1->Entry(-textvariable=>\$entryvar[1],
+ -font=>$deffont)->pack(-side=>'left');
+ my $deflabel=$dlgdef->Label(-text=>'Default',
+ -relief=>'ridge',
+ -width=>10,
+ -height=>2)->pack(-side=>'right',
+ -padx=>7);
+ $dlgtfr2->Label(-text=>"Active background",
+ -anchor=>'w',
+ -width=>18,
+ -font=>$deffont)->pack(-side=>'left');
+ $dlgtfr2->Entry(-textvariable=>\$entryvar[2],
+ -font=>$deffont)->pack(-side=>'left');
+ $dlgtfr3->Label(-text=>"Active foreground",
+ -anchor=>'w',
+ -width=>18,
+ -font=>$deffont)->pack(-side=>'left');
+ $dlgtfr3->Entry(-textvariable=>\$entryvar[3],
+ -font=>$deffont)->pack(-side=>'left');
+ my $actlabel=$dlgact->Label(-text=>'Active',
+ -background=>$entryvar[2],
+ -foreground=>$entryvar[3],
+ -relief=>'ridge',
+ -width=>10,
+ -height=>2)->pack(-side=>'right',
+ -padx=>7);
+# buttons
+ my $setbfr=$dlgwin->Frame()->pack(-side=>'bottom');
+ my $chngflag=0;
+ $tlwins{'chngcol'}{'buttons'}[0]=
+ $setbfr->Button(-text=>'OK',
+ -font=>$deffont,%butcol,
+ -command=>sub {
+ foreach (@entryvar) { # RGB form with leading #
+ $_="#$_" if (/^[A-Fa-f0-9]{6}$/);
+ }
+ $chngflag=1 if (&colcheck($dlgwin,@entryvar));
+ },
+ -width=>6)->pack(-side=>'left',
+ -padx=>5,
+ -pady=>10);
+ $tlwins{'chngcol'}{'buttons'}[1]=
+ $setbfr->Button(-text=>'Preview',
+ -font=>$deffont,%butcol,
+ -command=>sub {
+ foreach (@entryvar) { # RGB form with leading #
+ $_="#$_" if (/^[A-Fa-f0-9]{6}$/);
+ }
+ if (&colcheck($dlgwin,@entryvar)) {
+ $deflabel->
+ configure(-background=>$entryvar[0],
+ -foreground=>$entryvar[1]);
+ $actlabel->
+ configure(-background=>$entryvar[2],
+ -foreground=>$entryvar[3]);
+ }
+ },
+ -width=>6)->pack(-side=>'left',
+ -padx=>5,
+ -pady=>10);
+ $tlwins{'chngcol'}{'buttons'}[2]=
+ $setbfr->Button(-text=>'Cancel',
+ -font=>$deffont,%butcol,
+ -command=>sub{destroy $dlgwin;
+ undef $tlwins{'chngcol'};
+ })->pack(-side=>'right',
+ -padx=>5,
+ -pady=>10);
+ $dlgwin->bind('<Control-c>'=>sub{destroy $dlgwin;
+ undef $tlwins{'chngcol'}; });
+ $dlgwin->waitVariable(\$chngflag);
+ destroy $dlgwin;
+ undef $tlwins{'chngcol'};
+ return @entryvar;
+}
+
+# check colours set in popcolor; relies on the existence of X11's showrgb
+sub colcheck {
+ my ($dlgwin,@entryvar)=@_;
+ my $ecnt=0;
+ foreach (@entryvar) { # all colours defined?
+ last unless ($_);
+ ++$ecnt;
+ }
+ &popmsg(2,'Some colours undefined.',$dlgwin) if ($ecnt != 4);
+ my $defcol=0;
+ if (`which showrgb`) { # test for proper name
+ my @rgb=`showrgb`;
+ my @norgb;
+ foreach my $colour (@entryvar) {
+ if ($colour =~ /^#[A-Fa-f0-9]{6}$/ || grep /\b$colour\b/i,@rgb) {
+ ++$defcol;
+ } else {
+ push @norgb,$colour;
+ }
+ }
+ if ($defcol != 4) {
+ my $norgb=join("\n",@norgb);
+ &popmsg(2,"Some colours invalid:\n$norgb",$dlgwin);
+ }
+ } else { $defcol=4; }
+ return ($ecnt == 4 && $defcol == 4) ? 1 : 0;
+}
+
+# write user's ~/.texdocrc
+sub writerc {
+ use File::Copy qw/cp mv/;
+ my ($homedocpath_tmp,$quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
+ $tdcolors_tmp,
+ $dvi_viewer_tmp,$dvips_conv_tmp,
+ $ps_viewer_tmp,
+ $pdf_viewer_tmp,$pdfps_conv_tmp,
+ $html_viewer_tmp,
+ $htmlps_conv_tmp,$htmlps_redir_tmp,
+ $txt_viewer_tmp,$txtps_conv_tmp,
+ $txtps_redir_tmp,$print_cmd_tmp,$parframe)=@_;
+ my $err=0;
+ mv $myrc,"$myrc.save" if (-e $myrc);
+ open(MYRC,">$myrc");
+ print MYRC "# user's .texdocrc, generated by program\n
+# root of user's doc directory (from \$HOMETEXMF)
+# can be left empty if \$TEXMFHOME is undefined
+HOMEDOCPATH=$homedocpath_tmp
+# general viewer behaviour (y or yes to make active)
+QUIET=$quiet_tmp
+AUTOVIEW=$autoview_tmp
+XFMT_VIEWER=$xfmt_viewer_tmp
+# button colours: default and active back-/foreground
+# names and RGB values are both allowed; use the form #xxxxxx for RGB
+TDCOLORS=$tdcolors_tmp
+# the following variables contain whole commands, i.e. options can be given
+# DVI settings
+DVI_VIEWER=$dvi_viewer_tmp
+DVIPS_CONV=$dvips_conv_tmp
+# PostScript handling
+PS_VIEWER=$ps_viewer_tmp
+# PDF handling
+PDF_VIEWER=$pdf_viewer_tmp
+PDFPS_CONV=$pdfps_conv_tmp
+# HTML handling
+HTML_VIEWER=$html_viewer_tmp
+HTMLPS_CONV=$htmlps_conv_tmp
+# HTMLPS_REDIR must be on, if the html->ps converter normally writes its output
+# to stdout instead of a file (e.g. as html2ps) (y or yes to make active)
+HTMLPS_REDIR=$htmlps_redir_tmp
+# Plain text handling
+# TDK_OWN is texdoctk's own text file viewer
+TXT_VIEWER=$txt_viewer_tmp
+TXTPS_CONV=$txtps_conv_tmp
+# TXTPS_REDIR must be on, if the txt->ps converter normally writes its output
+# to stdout instead of a file (e.g. as a2ps) (y or yes to make active)
+TXTPS_REDIR=$txtps_redir_tmp
+# printer
+PRINT_CMD=$print_cmd_tmp
+\n# end of config\n";
+ close(MYRC);
+}
+
+# help window (toplevel)
+sub helptext {
+# see if toplevel window is already there
+ if (Exists($tlwins{"helptext"}{'addr'})) {
+ $tlwins{"helptext"}{'addr'}->deiconify();
+ $tlwins{"helptext"}{'addr'}->raise();
+ return;
+ }
+ my $help=$main->Toplevel(-title=>'Help/About');
+ $help->resizable(0,1);
+ $tlwins{'helptext'}{'addr'}=$help;
+ $help->Label(-text=>"texdoctk
+TeX documentation browser
+ v.0.6.0a (Nov 5, 2004)",
+ -font=>$deffont)->pack(-side=>'top',
+ -ipady=>10,
+ -anchor=>'s');
+ my $helpbody=$help->Scrolled("Text",
+ -relief=>'flat',
+ -font=>$deffont,
+ -height=>20,
+ -width=>60,
+ -scrollbars=>"e")->pack(-side=>'top',
+ -fill=>'y',
+ -expand=>1);
+ my $pos=tell DATA;
+ while (<DATA>) {
+ $_ =~ s/\$sysrc/$sysrc/;
+ last if (/^#/);
+ $helpbody->insert('end',$_);
+ }
+ seek(DATA,$pos,0);
+ $helpbody->configure(-state=>'disabled');
+ $tlwins{'helptext'}{'buttons'}[0]=
+ $help->Button(-text=>'Close',
+ -font=>$deffont,%butcol,
+ -command=>sub{destroy $help;
+ undef $tlwins{"helptext"};
+ })->pack(-side=>'bottom',
+ -fill=>'x');
+ $help->bind('<Control-c>'=>sub{destroy $help; undef $tlwins{"helptext"};});
+}
+
+# read config file; personal settings override the default settings
+sub readrc {
+ my($rcfile,$icall)=@_;
+ my ($var,$val);
+ my $pathflag=0;
+ my $pathflagl=0;
+ my $pathflagh=0;
+ my $tdcolors='';
+# for backward compatibility of converter/printer options
+ my ($dvips_opts,$pdfps_opts,$print_opts);
+# read defaults resp. local/personal settings
+ CALL: {
+ ($icall == 1) && do {
+ open (RC,"$rcfile") ||
+ &fatalmsg("Couldn't open system-wide default config file ${TeXDocRcDefaults}.\n");
+ last CALL;
+ };
+ ($icall == 2) && do {
+ open (RC,"$rcfile") ||
+ &fatalmsg("Couldn't open personal config file ~/.texdocrc.\n");
+ last CALL;
+ };
+ };
+ while ($line = <RC>) {
+ next if ($line =~ /^($|#)/);
+ chomp $line;
+ ($var,$val)=split("=",$line,2);
+ RCVARS: {
+ ($var =~ /texdocpath/i) && do { # TEXDOCPATH
+ if (length $val > 0) {
+ $pathflag=1;
+ eval(join("",("\$",lc($var),"=\$val")));
+ }
+ last RCVARS;
+ };
+ ($var =~ /localdocpath/i) && do { # LOCALDOCPATH
+ if (length $val > 0) {
+ $pathflagl=1;
+ eval(join("",("\$",lc($var),"=\$val")));
+ }
+ last RCVARS;
+ };
+ ($var =~ /homedocpath/i) && do { # HOMEDOCPATH
+ if ($icall == 2 && length $val > 0) { # set only in ~/.texdocrc
+ $pathflagh=1;
+ eval(join("",("\$",lc($var),"=\$val")));
+ }
+ last RCVARS;
+ };
+ # other variables
+ eval(join("",("\$",lc($var),"=\$val")));
+ };
+ }
+ close(RC);
+# find texmf/doc, and possibly other distribution texmf trees
+ if ($rcfile eq $sysrc || $pathflag == 1) {
+ $texmfmain=`kpsewhich --expand-path=${qq}\$TEXMFMAIN${qq}`;
+ chomp $texmfmain;
+ $texdocpath="$texmfmain/$texdocpath";
+ $texmfdist=`kpsewhich --expand-path=${qq}\$TEXMFDIST${qq}`;
+ chomp $texmfdist;
+ $distdocpath=join('/',"$texmfdist",basename($texdocpath,""))
+ if (length $texmfdist);
+ # TeXLive has this texmf-doc
+ $texmfdoc=join('/',"$texmfmain-doc",basename($texdocpath,""));
+ if (-e $texmfdoc) {
+ chomp $texmfdoc;
+ $docdocpath="$texmfdoc/$docdocpath";
+ }
+ }
+# find texmf-local/doc, if there is one
+ if ($rcfile eq $sysrc || $pathflagl == 1) {
+ $texmflocal=`kpsewhich --expand-path=${qq}\$TEXMFLOCAL${qq}`;
+ chomp $texmflocal;
+ if (length $texmflocal) {
+ # if LOCALDOCPATH is not explicitly defined, it equals TEXDOCPATH
+ unless (defined $localdocpath) {
+ $localdocpath=basename($texdocpath,"");
+ }
+ $localdocpath="$texmflocal/$localdocpath";
+ }
+ }
+# find user's $HOMETEXMF/doc, if there is one
+ if ($icall == 2 || $pathflagh == 1) {
+ $texmfhome=`kpsewhich --expand-path=${qq}\$HOMETEXMF${qq}`;
+ chomp $texmfhome;
+ if (length $texmfhome) {
+ # if HOMEDOCPATH is not explicitly defined, it equals TEXDOCPATH
+ unless (defined $homedocpath) {
+ $homedocpath=basename($texdocpath,"");
+ }
+ $homedocpath="$texmfhome/$homedocpath";
+ }
+ }
+# colours: create array
+ @tdcolors=split(' ',$tdcolors);
+ if (scalar @tdcolors != 4) { # if old texdocrc file is used
+ if (!(-e $myrc) || (-e $myrc && $icall == 2)) {
+ print "NOTE: Button colours not set in $rcfile; using defaults.\n";
+ @tdcolors=('#d9d9d9','Black','#ececec','red');
+ }
+ }
+ %butcol=('-background'=>$tdcolors[0],
+ '-foreground'=>$tdcolors[1],
+ '-activebackground'=>$tdcolors[2],
+ '-activeforeground'=>$tdcolors[3]);
+# viewer: suppress viewer warnings/use $PAGER if no $txt_viewer is defined
+ $quiet=($quiet =~ /y/i || $quiet eq "1") ? 1 : 0;
+ if (!(defined $txt_viewer) && defined $ENV{PAGER}) {
+ $txt_viewer=$ENV{PAGER};
+ }
+# viewer: autostart viewer if listbox of search results contains only 1 item
+ $autoview=($autoview =~ /y/i || $autoview eq "1") ? 1 : 0;
+# viewer: use text viewer to open files with unrecognized format
+ $xfmt_viewer=($xfmt_viewer =~ /y/i || $xfmt_viewer eq "1") ? 1 : 0;
+# converter: output redirection flags for HTML/Text->PS converters
+ $htmlps_redir=($htmlps_redir =~ /(y|1)/i) ? 1 : 0;
+ $txtps_redir=($txtps_redir =~ /(y|1)/i) ? 1 : 0;
+# for backward compatibility of converter/printer options
+ $dvips_conv.=" $dvips_opts" if ($dvips_opts);
+ $pdfps_conv.=" $pdfps_opts" if ($pdfps_opts);
+ $print_cmd.=" $print_opts" if ($print_opts);
+}
+
+# determine resolution if xwininfo is available
+# slightly modified from a patch contributed by Reinhard Kotucha
+sub x_resolution {
+ my $x_res;
+ if ($IsWin32) {
+ $x_res = &GetScreenWidth;
+ }
+ else {
+ open(XINF,"xwininfo -root|") or return 1200;
+ while (<XINF>) {
+ chop;
+ if (/Width:/) { ($x_res=$_)=/Width:\s+(\d+)/; last; }
+ }
+ close(XINF);
+ }
+ return $x_res;
+}
+
+# generate a random name for temporary files
+sub randname {
+ my $namestr;
+ my @chars=("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
+ my $time=time;
+ my $maxcnt=3+substr($time,-1);
+ for (my $i=0; $i<=$maxcnt; $i++) { $namestr.=$chars[rand(51)] }
+ my @tmp=split(/./,$time/$$);
+ $namestr.=$tmp[1];
+ until (length($namestr) > 16) { $namestr.=int(rand(1000000)) }
+ return $namestr;
+}
+
+# find index of an array entry
+sub arrindex {
+ my @array=@_;
+ my $item=pop @array;
+ my $i=0;
+ foreach (@array) {
+ last if ($_ eq $item);
+ ++$i;
+ }
+ return $i;
+}
+
+# clean up and exit
+sub clean_exit {
+ foreach (@tmpfiles) { if (-e $_) { unlink $_; } }
+ exit;
+}
+
+# alternative main window, launched for fatal error messages on startup
+sub fatalmsg {
+ my($msg)=@_;
+ print STDERR $msg; # also print to stderr
+# create frame for main window
+ my $main=new MainWindow;
+ $main->resizable(0,0);
+ $main->title("TeX Documentation Browser");
+ $main->bind('<Control-q>'=>sub { exit });
+ $main->bind('<Control-k>'=>sub { exit });
+ my $msgframe=$main->Frame(-background=>"#ffcc99");
+ my $cmdframe=$main->Frame;
+ $msgframe->pack(-side=>'top');
+ $cmdframe->pack(-side=>'bottom',-fill=>'x');
+# make buttons for command frame
+ my $Qbut=$cmdframe->Button(-text=>'Kill',%butcol,
+ -command=>sub { exit })->pack(-fill=>'x');
+# define common default font for labels and text explicitly
+ my @deffont=$Qbut->configure(-font);
+# ensure readability on high-res screens (suggested by R.Kotucha)
+ $deffont='Helvetica -16 bold' if &x_resolution > 1200;
+ $Qbut->configure(-font=>$deffont);
+ $msgframe->Label(-text=>'FATAL ERROR',
+ -font=>$deffont)->pack(-side=>'top', -fill=>'x');
+# get size of message text
+ my @dummy=split("\n",$msg);
+ my $nline=scalar @dummy;
+ my $msgwidth=0;
+ my $lline;
+ foreach (@dummy) {
+ $lline=length $_;
+ if ($lline > $msgwidth) { $msgwidth=$lline; }
+ }
+ my $message=$msgframe->Text(-relief=>'flat',
+ -font=>$deffont,
+ -height=>$nline,
+ -width=>$msgwidth)->pack(-side=>'top');
+ $message->insert('end',$msg);
+ $message->configure(-state=>'disabled');
+ MainLoop;
+}
+
+if ($IsWin32) {
+ sub GetScreenWidth {
+ my $GetDeviceCaps = new Win32::API('gdi32', 'GetDeviceCaps', 'NN', 'N');
+ my $HORZRES = 8; # from WinGDI.h
+ if(not defined $GetDeviceCaps) {
+ die "Can't import API GetDeviceCaps: $!\n";
+ }
+ return $GetDeviceCaps->Call(0, $HORZRES);
+ }
+
+ sub GetTempPath {
+ my $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
+ if(not defined $GetTempPath) {
+ die "Can't import API GetTempPath: $!\n";
+ }
+ my $lpBuffer = " " x 260;
+
+ $GetTempPath->Call(80, $lpBuffer);
+ }
+
+ sub ShellExecute {
+ my ($command, $file) = @_;
+ my $ShellExecute = new Win32::API('shell32', 'ShellExecute', 'NPPPPN', 'N');
+ if(not defined $ShellExecute) {
+ die "Can't import API ShellExecute: $!\n";
+ }
+ $ShellExecute->Call(0, $command, $file, '', '', 0);
+ }
+
+ sub GetHomeDir {
+ my $home = $ENV{'HOME'};
+ # Should check for CSIDL_...
+ return $home;
+ }
+}
+__END__
+Many TeX programmers provide more or less detailed manuals for
+their programs or packages. They are usually available as .dvi,
+.ps, .pdf, .html or plain text files (sometimes included in the
+.sty files instead of a separate documentation file) and can be
+accessed with this browser, which is simply an interface to find a
+documentation more easily. It starts the respective viewer for
+reading the selected documentation making use of a database file
+which contains the path entries according to the current teTeX
+texmf/doc structure; additional usage of a system-wide local and
+of individual user texmf trees with corresponding databases is also
+possible.
+The documentations are grouped in several categories shown in the
+main window; pressing one of its buttons lists all documentations
+belonging to this topic.
+The topic window lets you select one documentation file, view or
+send it to the default printer. By right-clicking on the selected
+item you get the complete path of the file.
+The search button of the main window allows you to search the
+database for a string; it does not search file names. Enter the
+string and hit <Return> to start the search or <Control-c> to
+cancel. Just hitting <Return> without typing something in will
+show the full list of files in the database.
+Defaults for the documentation root directory, the viewers, the
+converters, certain options and the printer are set in the global
+configuration file $sysrc.
+However, each user can put a copy of it as .texdocrc into his home
+directory to modify them according to his needs; modification or
+generation of ~/.texdocrc can also be done with the Settings menu.
+Additionally, the settings can be changed temporarily with this
+menu.
+
+The following key shortcuts are defined for use with the browser:
+ <Ctrl-q> Quit browser
+ <Ctrl-m> Raise the Main window to the foreground
+ <Ctrl-s> Search a keyword in database (case insensitive)
+ <Ctrl-c> Cancel/close subwindow or search entry widget
+ <Ctrl-v> View selected document (topic windows)
+ <Ctrl-p> Print selected document (topic windows)
+ <Ctrl-t> Open settings menu
+ <Ctrl-k> Kill fatal error message window (same as
+ <Ctrl-q>)
+ <Ctrl-h> Open this help
+ <Return> Equivalent to button press;
+ OK in selection menu and search
+ <Tab> Next/previous widget
+
+There are the following command line options:
+ -a autostart viewer if a listbox of search results
+ contains only one item; can also be set in a
+ configuration file
+ -v disable suppression of viewer messages sent to
+ stderr and of certain permanent message popup
+ windows, in case this was not set in a
+ configuration file; default: off
+
+Some more information is available in the manpage of texdoctk.
+
+Comments and suggestions to:
+Thomas Ruedas
+tr@geol.ku.dk
+# Local Variables:
+# mode: perl
+# auto-fill-hook: do-auto-fill
+# End:
diff --git a/Build/source/texk/tetex/texdoctk.man b/Build/source/texk/tetex/texdoctk.man
new file mode 100644
index 00000000000..03bb298c7a4
--- /dev/null
+++ b/Build/source/texk/tetex/texdoctk.man
@@ -0,0 +1,217 @@
+.TH TEXDOCTK 1
+.SH NAME
+texdoctk \- GUI for easier access of TeX package and program documentations
+.SH SYNOPSIS
+.B texdoctk
+-[aq]
+.SH "DESCRIPTION"
+.B texdoctk
+is a GUI for easier access to a large part of the vast amount
+of package and program documentations and tutorials for TeX and its
+different derivates (mainly LaTeX). It is optimized and included in
+the teTeX and fpTeX distributions and also available with TeXLive.
+.PP
+The documentation is grouped into 17 categories; the 18th button of the main
+panel is inactive by default and intended for use with local additions (see
+section
+.B CONFIGURATION
+below).
+.PP
+In the settings window you see a checkbox in the html->ps and text->ps
+converter menus for switching on/off output redirect. This is due to the fact
+that some converters do not write their output into a file but to stdout by
+default, so a redirect is needed, e.g.
+.PP
+a2ps myfile.txt >myfile.ps
+.SH "OPTIONS"
+.TP
+.I "\-v"
+verbose: enable some viewer messages which are otherwise sent to stderr,
+as well as some warning popup windows. This can also be set in a
+configuration file.
+.TP
+.I "\-a"
+autoview: autostart viewer if a listbox contains only one item (this will
+frequently happen in search results). This can also be set in a configuration
+file.
+.SH "CONFIGURATION"
+.PP
+The configuration is controlled by the system default concfiguration file
+($TEXMFMAIN)/texdoctk/texdocrc.defaults, most of whose entries can though be
+overridden by the users' own optional ~/.texdocrc files and/or command line
+options.
+.SS The Settings menu and configuration files
+.PP
+The Settings menu is used to change the user-definable settings of \fBtexdoctk\fP
+for the duration of the programm call or as new defaults. The latter case is
+the purpose of the Save button, which generates or rewrites the user's own
+~/.texdocrc file. The system defaults cannot be edited with the Settings
+menu.
+.TP
+Paths
+The TEXMF-type paths on the system are reported, and the user can specify the
+name of the subdirectory of $HOMETEXMF, where the personal documentation is
+stored.
+.TP
+General viewer behaviour
+
+.I Suppress error messages
+toggle verbose mode (see option -v); default is off.
+
+.I Autostart viewer for one-item listboxes
+if a listbox contains only one item (see option -a)
+
+.I Use text viewer for unknown file format
+i.e. treat the file as plain text. \fBtexdoctk\fP should recognize the usual file
+formats and also relate names like README to plain text, but some docs may have
+freely invented names. Default is on; if switched off, trying to view such
+files will raise an error. The switch does not influence printing: unrecognized
+formats cannot be printed.
+
+.I Change viewer colours
+using either RGB triplets in the format #rrggbb or the standardized names.
+.TP
+DVI/PostScript/PDF/HTML/Plain text
+For text files, \fBtexdoctk\fP provides an own viewer. If this viewer is disabled,
+but no alternative viewer is specified, \fBtexdoctk\fP tries to read the content
+of the environment variable $PAGER.
+
+If you want to print the documentations, you will need converters to turn
+non-PS files into PostScript. Here are some suggestions:
+
+\& dvi->ps:
+dvips (is part of teTeX) (http://www.radicaleye.com/dvips.html)
+
+\& pdf->ps:
+pdf2ps (http://www.cs.wisc.edu/~ghost) or
+Acrobat Reader (http://www.adobe.com)
+
+\& html->ps: html2ps (http://user.it.uu.se/~jan/html2ps.html)
+
+\& plain text->ps: a2ps (http://www-inf.enst.fr/~demaille/a2ps/)
+
+The html->ps and text->ps converter menus for switching on/off output redirect.
+This is due to the fact that some converters do not write their output into a
+file but to stdout by default, so a redirect is needed, e.g.
+.B a2ps myfile.txt >myfile.ps
+.PP
+The system-wide configuration file is ($TEXMFMAIN)/texdoctk/texdocrc.defaults
+and should only be writeable by the administrator of the installation using any
+text editor. The optional user configuration file is ~/.texdocrc and can
+override all but those system settings which affect the installation as a
+whole. The preferred way of changing it is through the Settings menu.
+.SS The databases
+\fBtexdoctk\fP comes with a default database file ($TEXMFMAIN)/texdoctk/texdoctk.dat
+with a special format. It is divided into 17 sections corresponding to the
+17 buttons that are active by default. Each section begins with a line
+
+@\fIsection_name\fP
+
+where
+.I section_name
+is the text as it appears in the button. This title is
+followed by the descriptive entries for each documentation, which have this
+format:
+
+\fIpackage-label\fP;Short description for listbox (opt. \fIpackage-name\fP);path in doc directory;optional keywords
+
+(without breaking the line!). Comments (initiated with a #) and empty lines
+are ignored by the program. The second field is the text displayed in the
+selection listboxes of \fBtexdoctk\fP, and you will usually want to mention the name
+of the package in parens along with it; the first field is a \fBunique\fP label
+for the package for internal use of the program which will usually be chosen
+identical to the package name, but can be different if there is more than one
+documentation file coming with a package.
+.PP
+The administrator will probably install additional packages in the local texmf
+tree. The corresponding documentation can be made accessible by an additional
+database $TEXMFLOCAL/texdoctk/texdoctk-local.dat. Furthermore, individual
+users possibly install additional packages in an texmf subdirectory of their
+$HOME, for which they can make an individual database themselves as
+$TEXMFHOME/texdoctk/texdoctk-pers.dat. After creating such files, texhash
+must be executed.
+.PP
+Both types of databases must have the same structure as the system database,
+although they need (and should) not include all its sections if there are no
+additional entries. For example, if the the package
+.I foo
+is added to the local tree such that its documentation file is
+($TEXMFLOCAL)/doc/latex/foo/foo.dvi and it is decided that it fits best into
+the existing category Graphics, texdoctk-local.dat would look like this:
+
+@Graphics
+.br
+foo;Create bells and whistles (foo);latex/foo/foo.dvi;decoration
+
+The entry for
+.I foo
+will then be appended to the list of entries in the Graphics category. The 18th
+button can be activated in the same way, but using a new category name;
+possible entries at the beginning of the database which have not been assigned
+to a category will be assigned to the default Miscellaneous, making the 18th
+button active with that label. Note that you cannot have more than 18
+categories; if there are more, only the one defined last will appear and be
+used.
+.PP
+If the documentation is included in the .sty file instead of a proper
+documentation file, the optional keywords should start with
+-?- directly after the semicolon, where ? is 0, 1, 2 or 3; these are flags
+which indicate in which part of the .sty the instructions are placed and
+should help \fBtexdoctk\fP to extract the documentation from the style and present
+it without the code, which would normally be of little use.
+.TP
+0
+no specific place, scattered between the code
+.TP
+1
+at end, behind \\endinput; some .sty files have well-organized documentation
+behind the end of the actual code, where TeX doesn't see it upon compilation
+.TP
+2
+at beginning, terminated by %%%%%%; in some other cases, some usage information
+is at the beginning of the .sty as a comment terminated by a line full of %
+.TP
+3
+as 2, but with a blank line as termination
+.PP
+See the system database for plenty of examples.
+
+.SH "FILES"
+.PP
+\& $TEXMFMAIN/texdoctk/texdocrc.defaults
+system-wide configuration file
+.PP
+\& ~/.texdocrc
+(optional) personal configuration file; can also be created with the Settings menu
+.PP
+\& $TEXMFMAIN/texdoctk/texdoctk.dat
+default database file for documentation files of the distribution
+.PP
+\& $TEXMFLOCAL/texdoctk/texdoctk-local.dat
+(optional) local database file for documentation files
+.PP
+\& $TEXMFHOME/texdoctk/texdoctk-pers.dat
+(optional) personal database file of individual users for documentation files
+.SH BUGS
+Widget placement in topic toplevels becomes ugly when the toplevel is stretched
+or shrunk.
+.PP
+The font in the frame labels of the Settings menu are not forced to the default
+font; this will become visible e.g. at hi-res screens, where the label font is
+not scaled up.
+.PP
+Netscape and Mozilla error output will be written to stderr even if the quiet
+mode was set.
+.SH AUTHOR
+.B texdoctk
+was written by Thomas Ruedas <tr@geol.ku.dk>.
+.PP
+This manual page was originally written by Adrian Bunk <bunk@fs.tum.de> for
+the Debian GNU/Linux system (but may be used by others). It is now maintained
+by Thomas Ruedas.
+
+.SH COPYRIGHT
+Copyright (C) 2000-2004 Thomas Ruedas
+.br
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/Build/source/texk/tetex/texexec b/Build/source/texk/tetex/texexec
new file mode 100755
index 00000000000..529d2a8dc23
--- /dev/null
+++ b/Build/source/texk/tetex/texexec
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+what=`echo $0 | sed 's@.*/@@'`
+
+p=`kpsewhich -format=texmfscripts $what.pl`
+{ test -n "$p" && test -f "$p"; } \
+ || { echo "\`$what.pl' not found."; exit 1; }
+
+perl "$p" ${1+"$@"}
diff --git a/Build/source/texk/tetex/texexec.man b/Build/source/texk/tetex/texexec.man
new file mode 100644
index 00000000000..2d8593b674c
--- /dev/null
+++ b/Build/source/texk/tetex/texexec.man
@@ -0,0 +1,574 @@
+.de EX
+.sp
+.in +5
+.nf
+.ft CW
+..
+.de EE
+.in -5
+.ft R
+.sp
+.fi
+..
+.TH "texexec" "1" "October 2000" "ConTeXt" "ConTeXt"
+.PP
+.SH "NAME"
+texexec \- ConTeXt and PDF auxiliary program and batch processor
+.PP
+.SH "SYNOPSIS"
+\fBtexexec\fP [ \fIOPTION\fP \&.\&.\&. ] \fIFILE\fP [ \&.\&.\&. ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBtexexec\fP is a Perl script that provides several functions:
+.IP o
+Process a TeX file\&. This includes performing as many runs as
+necessary of \fBtex\fP(1), \fBtexutil\fP(1), and
+\fBmetapost\fP(1)\&. Options allow you to select the output
+format, the pages to process, paper size, and so forth\&.
+.IP o
+Create new ConTeXt formats (with \fB--format\fP)\&.
+.IP o
+Post-process existing PDF files, including merging multiple
+files, and extracting and rearranging pages within a file
+(similar to the functions provided by \fBpsnup\fP(1) and
+\fBpdfmerge\fP(1))\&.
+.IP o
+Extract or strip documentation from com{ConTeXt} source files
+(using \fBtexutil\fP(1))\&.
+.IP o
+Run METAPOST (\fBmpost\fP(1)) to generate figures from METAPOST
+source\&.
+.IP o
+Produce ``proof sheets\'\' of figures used in a \fBConTeXt\fP source
+file\&.
+.IP
+.PP
+.SH "OPTIONS"
+.PP
+All switches are specified in full, but can be abbreviated to the
+shortest unique string\&. Thus, \fB--ver\fP works the same as
+\fB--verbose\fP\&.
+.PP
+.SH "General Options"
+.PP
+.IP "\fB--alone\fP"
+Avoid calling other programs when possible\&. For
+example, \fB--alone\fP will prevent \fBtexexec\fP from
+using \fBfmtutil\fP(1) to generate formats (which can
+be handy when tracing installation problems)\&.
+.IP "\fB--environment=\fP\fIENVIRONMENT\fP"
+Specify a ConTeXt
+\fIENVIRONMENT\fP to use when processing the file\&.
+This option can be useful when converting from
+non-ConTeXt file formats where no environment or layout
+settings are present in the file\&.
+.IP "\fB--help\fP [ \fISWITCH\fP ]"
+Produce a summary of switches
+and arguments\&. Many switches have additional
+information that can be seen by typing ``\f(CWtexexec
+--help optvar(SWITCH)\fP\'\'\&.
+.IP "\fB--interface=\fP\fILANGUAGE\fP"
+Specify the language
+\fBConTeXt\fP should use to communicate with you\&.
+Options are
+.IP
+.RS
+.IP "\fBen\fP"
+US English
+.IP "\fBnl\fP"
+Dutch
+.IP "\fBde\fP"
+German
+.IP "\fBuk\fP"
+British English
+.IP "\fBcz\fP"
+Czech
+.IP "\fBit\fP"
+Italian
+.RE
+.IP "\fB--once\fP"
+Process a file once and only once\&. (By default,
+\fBtexexec\fP processes the file as many times as
+necessary to sort out all references, typeset
+\fBMETAPOST\fP code, and so forth\&.)
+.IP "\fB--output=\fP\fIDRIVER\fP"
+Specify the output \fIDRIVER\fP
+for use with \f(CW\especial\fP primitives\&. Defaults to the setting in
+the local \fIcont-sys\&.tex\fP file, but can be set to one of
+.IP
+.RS
+.IP "\fBpdftex\fP"
+Native \fBpdftex\fP(1) code
+.IP "\fBdvips\fP"
+For \fBdvips\fP(1) (the default)
+.IP "\fBdvipsone\fP"
+For \fBdvipsone\fP
+.IP "\fBdviwindo\fP"
+For \fBdviwindo\fP, the oldest
+\fBConTeXt\fP drivers
+.IP "\fBdviview\fP"
+For \fBdviview\fP (experimental)
+.IP
+.RE
+.IP
+There may be other supported drivers -- check the most
+recent \fBConTeXt\fP documentation\&.
+.IP "\fB--pages=\fP\fIPAGENUMBERLIST\fP"
+Specify the pages or page
+range to appear in the output file\&.
+\fIPAGENUMBERLIST\fP may be the keyword \fBodd\fP
+or \fBeven\fP; one or more pages separated by commas
+(\f(CWx,y\fP); or a page range in the form \f(CW:z\fP\&.
+.IP "\fB--passon=\fP\fISTRING\fP"
+Pass additional command-line
+switches and arguments to the \fBtex\fP(1) process
+run by \fBtexexec\fP\&.
+.IP
+For example, the \fBMikTeX\fP TeX system (for
+DOS/Windows) can embed information in the DVI file that
+will allow you to find the line in a source code file
+corresponding to the line in the typeset output\&. It
+uses a switch called ``--src\'\' to activate this
+functionality, and can be used from \fBtexexec\fP as
+.IP
+.EX
+\f(CWtexexec --passon="--src" somefile\fP
+.EE
+.IP
+The double quotes (\f(CW"\fP) are required to prevent
+\fBtexexec\fP from using the switch itself\&.
+.IP "\fB--program\fP"
+The name of the TeX program to use
+(\fBtex\fP(1), by default)\&.
+.IP "\fB--result=\fP\fIFILENAME\fP"
+Allows you to change the
+basename of the output file\&. See
+\fB--mode\fP for an example\&.
+.IP "\fB--runs=\fP\fINUMBER\fP"
+Specify the number of runs to
+perform on a file\&. Overrides
+\fBtexexec\fP\'s calculations\&.
+.IP "\fB--silent\fP"
+Suppress diagnostic and progress messages\&.
+.IP "\fB--suffix=\fP\fISUFFIX\fP"
+Specify the suffix of the output file\&.
+.IP "\fB--tex=\fP\fIPROGRAMNAME\fP"
+Allows you specify the program
+to use instead of \fBtex\fP(1)\&. Useful for trying
+different versions of \fBtex\fP(1) installed on the
+same machine\&.
+.IP "\fB--texutil\fP"
+Force a run of \fBtexutil\fP(1)\&.
+.IP "\fB--verbose\fP"
+Output diagnostic information, including the
+contents of \fItexexec\&.ini\fP\&.
+.IP
+.PP
+.SH "Processing \fBConTeXt\fP Source Files"
+.PP
+Including specifying paper sizes, formats, and so forth\&.
+.PP
+.IP "\fB--arrange\fP"
+Don\'t perform page rearrangements (e\&.g\&., for
+producing a booklet) until the last run\&.
+.IP "\fB--batch\fP"
+Process the file in batch mode -- continue to
+typeset the document after finding errors\&. More
+imformation about batch mode can be found in Donald
+E\&. Knuth\'s \fITeXbook\fP\&.
+.IP "\fB--bodyfont\fP"
+The name of a font to preload for use in
+setting the body of the text\&.
+.IP "\fB--centerpage\fP"
+Center the document image on the page\&.
+.IP "\fB--color\fP"
+Turn on color mode\&. Color mode can also be set by
+commands embedded in the document\&. These commands
+override the \fB--color\fP option\&.
+.IP "\fB--convert=\fP\fIFORMAT\fP"
+Convert the input file to
+ConTeXt format from \fIFORMAT\fP before
+processing\&. In most cases, this conversion will result
+in a TeX file\&. Currently supported input
+\fIFORMAT\fPs are \fBxml\fP and
+\fBsgml\fP\&.
+.IP "\fB--dvi\fP"
+Shortcut for \fB--output=dvi\fP\&.
+.IP "\fB--fast\fP"
+Typeset the document(s) as fast as possible without
+causing problems\&.
+.IP "\fB--final\fP"
+Perform a final run without skipping anything\&.
+This option is typically used with \fB--fast\fP\&.
+.IP "\fB--language=\fP\fILANGUAGE\fP"
+Set the language for
+hyphenation\&. Can be specified in your source file\&.
+Options are the same as those for \fB--interface\fP\&.
+.IP "\fB--mode=\fP\fIMODELIST\fP"
+Allows you to change the mode
+(page size and resolution) of the output file\&.
+.IP
+.EX
+\f(CWtexexec --pdf --mode=A4 --result=pdftex-a pdftex-t\fP
+\f(CWtexexec --pdf --mode=letter --result=pdftex-l pdftex-t\fP
+\f(CWtexexec --pdf --mode=screen --result=pdftex-s pdftex-t\fP
+.EE
+.IP
+Here the mode switch tells \fBConTeXt\fP to obey
+the mode directives in the layout specifications\&. The
+\fB--result\fP flag allows you to
+rename the output file\&.
+.IP "\fB--noarrange\fP"
+Ignore arrangement commands in the source
+file\&.
+.IP "\fB--paper=\fP\fIKEY\fP"
+For typesetting multiple pages on a
+single piece of paper\&. \fIKEY\fP can be \fBa4a3\fP
+(for printing A4 pages on A3 paper) or \fBa5a4\fP
+(for printing A5 pages on A4 paper)\&. The actual layout
+of the pages is specified with the
+\fB--print\fP switch\&.
+.IP "\fB--pdf\fP"
+Shorthand for \fB--output=pdftex\fP\&.
+.IP "\fB--print=\fP\fIKEY\fP"
+Specify the layout of the final
+output\&. \fIKEY\fP can be \fBup\fP, resulting in 2
+pages per sheet, double sided, or \fBdown\fP, resulting
+in 2 rotated pages per sheet, double sided\&. Use the
+--paper switch to specify the original page
+and sheet size\&.
+.IP
+.PP
+.SH "Creating \fBConTeXt\fP Format Files"
+.PP
+.IP "\fB--format=\fP\fIFORMATFILE\fP"
+Specify a \fIFORMATFILE\fP
+to use when typesetting\&. \fBtexexec\fP will prepend the
+string \f(CWcont- \fP to the name you give, so you can
+type \f(CWplain\fP instead of \f(CWcont-plain\fP, as in
+.IP
+.EX
+\f(CWtexexec --format=plain --program=pdftex somefile\fP
+.EE
+.IP "\fB--make\fP"
+Generate a \fBConTeXt\fP format file\&.
+.PP
+.SH "Postprocess PDF Files"
+.PP
+.IP "\fB--combination=\fP\fIROWS\fP\fB*\fP\fICOLS\fP"
+Specify
+the number of pages to show on a single page\&. Use with
+\fB--pdfcombine\fP\&.
+.IP "\fB--pdfarrange\fP"
+For rearranging pages in PDF files\&.
+.IP
+.EX
+\f(CWtexexec --pdfarrange --paper=a5a4 --print=up foo\&.pdf\fP
+.EE
+.IP
+This command creates an A5 booklet from a PDF file
+\fIfoo\&.pdf\fP\&. \fB--pdfarrange\fP is used in
+conjunction with the following switches:
+.IP "\fB--paperoffset\fP"
+Adjust the space between the
+edge of the pages and the beginning of the text block\&.
+.IP "\fB--backspace\fP"
+Adjust the inside (``gutter\'\')
+margins\&.
+.IP "\fB--topspace\fP"
+Adjust the top and bottom
+margin\&.
+.IP "\fB--markings\fP"
+Add crop marks\&.
+.IP "\fB--addempty=\fP\fIPAGES\fP"
+Add empty pages
+after the pages specified in \fIPAGES\fP\&. (Useful
+for, among other things, adding blank pages after a
+table of contents\&.)
+.IP "\fB--textwidth=\fP\fIWIDTH\fP"
+Set the width of
+the original text\&. Specifying this parameter with a
+single-sided original will allow \fBConTeXt\fP to adjust
+the page layout for double-sided output, producing much
+more attractive results\&.
+.IP
+With the \fB--pdfarrange\fP flag, specifying more
+than one file will result in all of the files being
+combined in the final result, allowing you to add title
+pages, decorated part separators, and so forth\&.
+.IP
+You can also do more complex manipulations, such as
+adding additional text to the page by setting up a
+small file with layout definitions and a simple figure
+insertion loop\&.
+.IP "\fB--pdfcombine\fP"
+Combine multiple pages\&. Requires you to
+specify the
+\fB--combination\fP
+switch\&.
+.IP "\fB--pdfselect\fP"
+Extract pages from a file\&. Use in combination with
+the \fB--selection\fP switch, as
+in
+.IP
+.RS
+\f(CWtexexec --pdfselect --paper=S6
+--selection=1,9,14 file-1\fP
+.RE
+.IP
+which extracts pages 1, 9, and 14 from
+\fIfile-1\&.pdf\fP, and places them in
+\fItexexec\&.pdf\fP (the default output filename if
+an output file isn\'t specified)\&.
+.IP
+See \fB--pdfarrange\fP for other
+options\&.
+.IP "\fB--selection=\fP\fIPAGES\fP"
+Specify pages to be affected by
+another option\&. See \fB--pdfarrange\fP and
+\fB--pdfselect\fP for examples\&.
+.PP
+.SH "Extract or Strip Out Documentation"
+.PP
+.IP "\fB--listing\fP"
+Produce a typeset version of the source code in
+\fIFILE\fP\&. You can specify the form of the output
+file, as in
+.RS
+\f(CWtexexec --listing --pdf readme\&.now\fP
+.RE
+.IP
+which will produce a PDF file called
+\fItexexec\&.pdf\fP\&. Without the
+\fB--pdf\fP flag, \fBtexexec\fP will
+produce a DVI file\&.
+.IP
+See also \fB--backspace\fP and
+\fB--topspace\fP\&.
+.IP "\fB--module\fP"
+Create documentation for \fBConTeXt\fP,
+\fBMetaPost\fP (see \fBmpost\fP(1)), and Perl modules\&.
+Converts the documentation to \fBConTeXt\fP format and
+then typesets that documentation\&. See
+\fBtexutil\fP(1) for more information about the
+format of the documentation strings\&.
+.PP
+.SH "Process METAPOST Figures"
+.PP
+.IP "\fB--mpformat\fP"
+The name of a \fBMetaPost\fP format file\&.
+.IP "\fB--mptex\fP"
+Strips out and typesets TeX code embedded in a
+\fBMetaPost\fP file\&.
+.IP "\fB--nomp\fP"
+Do not run \fBMetaPost\fP, even if needed\&.
+.IP "\fB--nomprun\fP"
+Do not run \fBmpost\fP(1) on embedded
+\fBMetaPost\fP code\&.
+.PP
+.SH "Producing Proof Sheets of Figures"
+.PP
+.IP "\fB--figures=\fP\fIALTERNATIVE\fP"
+Specify one of three
+options to produce a document containing the images
+used in the source file:
+.IP
+.RS
+.IP "\fBa\fP"
+A proof sheet with additional
+information provided for each figure
+.IP "\fBb\fP"
+A proof sheet with the graphics only
+.IP "\fBc\fP"
+One figure per page, with the page
+clipped to the bounding box of the
+figure
+.IP
+See also \fB--paperoffset\fP,
+which allows you to specify an offset to be added to
+the page, as in
+.IP
+.EX
+\f(CWtexexec --figures=c --paperoffset=\&.5cm *\&.pdf
+*\&.png *\&.jpg\fP
+.EE
+.IP
+.RE
+.IP
+\fBtexexec\fP uses \fBtexutil\fP(1) to obtain the list
+of figures to process\&.
+.PP
+.SH "USAGE"
+.PP
+.IP o
+Each \fBConTeXt\fP user interface (language) has its own format\&. The
+following command generates two formats, one using the English
+interface for typesetting in English, and one for Dutch:
+.IP
+.EX
+\f(CWtexexec --make en nl\fP
+.EE
+.IP
+By default, the language used for typesetting matches the
+user-interface language (set with
+\fB--interface\fP\&. It\'s possible to use one
+language for typesetting and another for messages by changing the
+relevant settings in \fIcont-usr\&.tex\fP, but these languages can
+also be changed on the command line with a command such as
+.IP
+.RS
+\f(CWtexexec --make --language=pl,cz,sk --bodyfont=plr en\fP
+.RE
+.IP
+That command generates a \fBConTeXt\fP format file with an English user
+interface, and the main language set to Polish (\fBpl\fP)\&. The
+default body font is the Polish version of Computer Modern Roman
+(\fBplr\fP)\&. Czech and Slovak hyphenation patterns are also loaded
+so that Czech and Slovak text included in a source file will be
+typeset properly (\fBcz\fP and \fBsk\fP)\&.
+.IP o
+When the appropriate formats are present, a file can be typeset
+by typing
+.IP
+.EX
+\f(CWtexexec test\fP
+.EE
+.IP
+\fBtexexec\fP tries to determine what interface it should use to
+typeset \fItest\&.tex\fP by looking for a line such as
+.IP
+.EX
+\f(CW% interface=en tex=pdfetex output=pdftex\fP
+.EE
+.IP
+at the top of the file (i\&.e\&., on the very first line)\&. This line is
+equivalent to \fBTeX\fP\'s format line, ``&\fIFORMAT\fP\'\')\&.
+.IP
+By default, \fBtexexec\fP will produce a DVI file\&. The
+\fB--pdf\fP flag tells \fBtexexec\fP to produce a PDF
+file, instead (by running \fBpdftex\fP(1))\&. You can also be more
+specific about what drivers \fBtexexec\fP should use, by specifying a
+command line such as
+.IP
+.EX
+\f(CWtexexec --output=dvips,acrobat test\fP
+.EE
+.IP
+which specifies the use of the \fBdvips\fP driver (which is the
+default), combined with the use of Acrobat-specific PDF instructions\&.
+.IP
+After an error-free run, \fBtexexec\fP will run \fBtexutil\fP(1) to
+determine whether additional runs of \fBtex\fP(1) (or
+\fBpdftex\fP(1)) or any utility programs (e\&.g\&., \fBbibtex\fP(1),
+\fBmakeindex\fP(1)) are necessary\&. You can suppress these
+additional runs by specifying the \fB--once\fP or
+\fB--runs\fP flags:
+.IP
+.EX
+\f(CWtexexec --once test\fP
+\f(CWtexexec --runs=2 test\fP
+.EE
+.IP
+.SH "INITIALIZATION"
+.IP
+When starting, \fBtexexec\fP first looks for the file
+\fItexexec\&.ini\fP, which specifies the location of various
+programs and configuration files, and specifies the programs to use\&.
+The \fB--verbose\fP flag causes \fBtexexec\fP to print
+the information in \fItexexec\&.ini\fP to the terminal and the log
+file\&.
+.IP
+\fBtexexec\fP requires Perl\&. On Unix and Unix-like systems, no special
+steps have to be taken to get \fBtexexec\fP to work beyond installing
+Perl and having the \fBperl\fP(1) binary in your path\&. On Windows
+systems, however, you may need to run Perl by typing commands such as
+``\f(CWperl texexec\&.pl optvar(ARGS)\fP\'\'\&.
+.IP
+The \fBfpTeX\fP distribution comes with a program called
+\fBrunperl\&.exe\fP that can be copied and renamed to \fBtexexec\&.exe\fP\&.
+You will also have to rename a copy to \fBtexutil\&.exe\fP (see
+\fBtexutil\fP(1))\&. The \fBteTeX\fP and \fBfpTeX\fP distributions, at
+least, should perform the necessary steps as part of their
+installation sequence -- if you have problems, however, you may need
+to follow the advice given here\&.
+.IP
+The file \fItexexec\&.rme\fP contains default configuration
+information\&. If no file \fItexexec\&.ini\fP exists (in
+\fITEXMF/context/config/\fP, you should copy \fItexexec\&.rme\fP
+to that directory and rename it to \fItexexec\&.ini\fP\&. Make any
+necessary changes to this file to reflect the layout of programs and
+directories on your system\&.
+.SH "ENCODINGS"
+.IP
+Some languages require specific character encodings to represent their
+alphabets (beyond the basic ASCII encoding)\&. Although you can use TeX
+commands to represent these characters, such as ``\f(CW\e\&.z\fP\'\', it\'s
+easier to use a text editor that includes direct support for these
+characters and let \fBConTeXt\fP translate them to the necessary TeX
+commands\&. For some languages, this approach can also improve the
+performance of TeX\'s hyphenation algorithms\&.
+.IP
+\fBConTeXt\fP supports several of the most commonly used encodings\&.
+Check the files beginning with \fIenco-\fP, \fIlang-\fP, and
+\fIfont-\fP in the \fBConTeXt\fP distribution for more information\&.
+.IP
+\fBweb2c\fP distributions (such as \fBteTeX\fP) support a mechanism to
+map document encodings to \fBConTeXt\fP\'s internal encoding, font
+encodings, and hyphenation patterns\&. \fBtexexec\fP provides a document
+option and a command-line flag to pass the necessary information to
+\fBtex\fP(1) or \fBpdftex\fP(1)\&. You can add lines such as
+.IP
+.EX
+\f(CW%& --translate-file=cp1250pl\fP
+.EE
+or
+.IP
+.EX
+\f(CW% --translate=cp1250pl\fP
+.EE
+.IP
+to the beginning of your document, or specify the \fB--translate\fP
+flag on the command line, as
+.IP
+.EX
+\f(CWtexexec --translate=il2pl somefile\fP
+.EE
+.IP
+Note that using language-specific encodings will make your file less
+portable than using ASCII\&. It may not be possible for other people to
+typeset your documents on their systems\&.
+.SH "FILES"
+.IP
+.IP "\fITEXMF/context/config/texexec\&.ini\fP"
+TeXExec configuration file
+.IP "\fITEXMF/context/config/texexec\&.rme\fP"
+TeXExec configuration file defaults
+.IP
+.SH "SEE ALSO"
+.IP
+\fBbibtex\fP(1), \fBdvips\fP(1), \fBfmtutil\fP(1),
+\fBmakeindex\fP(1), \fBmetapost\fP(1), \fBmpost\fP(1),
+\fBpdfetex\fP(1), \fBpdfmerge\fP(1), \fBpdftex\fP(1),
+\fBperl\fP(1), \fBpsnup\fP(1), \fBtex\fP(1), \fBtexshow\fP(1),
+\fBtexutil\fP(1)\&.
+.IP
+The TeXExec manual, \fImtexexec\&.pdf\fP\&.
+.IP
+The TeXExec configuration README files:
+.IP o
+\fITEXMF/context/config/texexec\&.rme\fP
+.IP o
+\fITEXMF/context/perltk/texexec\&.rme\fP
+.IP
+Donald E\&. Knuth\'s \fIThe TeXbook\fP\&.
+.SH "AUTHOR"
+.IP
+This manpage was written by Tobias Burnus
+<burnus@gmx\&.de> and C\&.M\&. Connelly
+<c@eskimo\&.com>\&. It is based on
+the \fBTeXExec\fP manual written by Hans Hagen
+<pragma@wxs\&.nl>\&.
+.IP
+The PDF manual and \fBtexexec\fP itself can be obtained from
+<http://www\&.pragma-ade\&.com/pragma-ade/texexec\&.htm>
diff --git a/Build/source/texk/tetex/texfind.man b/Build/source/texk/tetex/texfind.man
new file mode 100644
index 00000000000..d9e88940cdf
--- /dev/null
+++ b/Build/source/texk/tetex/texfind.man
@@ -0,0 +1,72 @@
+.TH "texfind" "1" "April 2004" "ConTeXt" "teTeX"
+.PP
+.SH "NAME"
+texfind \- graphical tool to search for text in TeX input files
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBtexfind\fP [ \fIOPTION\fP \&.\&.\&. ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBtexfind\fP is a graphical, interactive tool that helps you
+searching through TeX input files, including subdirectories, and
+allows you to do search/replace tasks using Perl regular
+expressions. It opens two windows: One displays the directory
+hierarchy and allows to select different search directories. The
+second window is used to enter the query and display the results.
+.PP
+.SH "SEARCHING"
+.PP
+Enter a search string in the input box at the top, choose the file
+extension (*tex by default) and hit ENTER to start the search. The
+results will be displayed below.
+.PP
+The search string is actually a perl regular expression. This gives
+you lots of flexibility. The search-and-replace function also uses
+Perl regex syntax, but you can also just use simple strings. Currently
+there is no way to save changed files.
+.PP
+.SH "MENU"
+.PP
+Use the right mouse button to open a menu.
+.HP
+\fBFile\fP : Currently only used to exit the program
+.HP
+\fBEdit\fP : Copy selections, select or unselect all
+.HP
+\fBSearch\fP : Open a \fBFind\fP dialog that allows further searching
+through the displayed results. The \fBReplace\fP option can be used to
+replace single or all occurrences of a string, but currently it is not
+possible to change the file.
+.PP
+\fBView\fP : Select specific lines, and adjust word or character
+wrapping.
+.PP
+.SH "OPTIONS"
+.HP
+\fB\-\-font\fR : specify the font used for the menu. Default is
+courier.
+.HP
+Other options probably exist - I appreciate input by the program
+authors, experienced users or perl geeks.
+.HP
+.SH "SEE ALSO"
+.IP
+\fBperlre\fP(1)
+.PP
+.SH "BUGS"
+.PP
+None known\&. Well - the replace function isn't the most useful one.
+.PP
+.SH "AUTHOR"
+.PP
+\fBtexfind\fP was written for the ConTeXt package by Hans Hagen and
+Ton Otten, PRAGMA\&.
+.PP
+This manual page was written by Frank Küster <frank@kuesterei\&.ch>,
+for the Debian GNU/Linux system\&. It may be used and modified by
+others without contacting the author\&. Any mistakes or omissions in
+the manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary
+author)\&.
diff --git a/Build/source/texk/tetex/texfont.man b/Build/source/texk/tetex/texfont.man
new file mode 100644
index 00000000000..692d5bcf3d9
--- /dev/null
+++ b/Build/source/texk/tetex/texfont.man
@@ -0,0 +1,84 @@
+.TH TEXFONT "1" "May 2004" "teTeX " "texfont.pdf"
+.SH NAME
+texfont \- font installation tool for ConTeXt
+.PP
+.SH "SYNOPSIS"
+\fBtexfont\fP [ \fIOPTION\fP \&.\&.\&. ]
+.PP
+.SH DESCRIPTION
+.PP
+TeXFont is a perl script that helps to set up and install TeX fonts.
+It was designed for use with ConTeXt, but may also be helpful for
+users of other formats, like plain TeX or LaTeX. Its use is described
+in detail in the files mtexfont.pdf and mfont.pdf.
+.PP
+.SH "OPTIONS"
+.PP
+.HP
+\fB\-\-fontroot\fR=\fIpath\fR : texmf font root (automatically determined)
+.HP
+\fB\-\-sourcepath\fR=\fIpath\fR : when installing, copy from this path (default: .)
+.HP
+\fB\-\-sourcepath\fR=\fIauto\fR : locate and use vendor/collection
+.HP
+\fB\-\-vendor\fR=\fIname\fR : vendor name (first level directory)
+.HP
+\fB\-\-collection\fR=\fIname\fR : font collection (second level
+directory)
+.HP
+\fB\-\-encoding\fR=\fIname\fR : encoding vector (default: texnansi)
+.HP
+\fB\-\-slant\fR=\fIs\fR : slant glyphs in font by factor (0.0 - 1.5)
+.HP
+\fB\-\-extend\fR=\fIs\fR : extend glyphs in font by factor (0.0 - 1.5)
+.HP
+\fB\-\-caps\fR=\fIs\fR : capitalize lowercase chars by factor (0.5 - 1.0)
+.HP
+\fB\-\-noligs\fR : remove ligatures
+.HP
+\fB\-\-install\fR : copy files from source to font tree
+.HP
+\fB\-\-listing\fR : list files on auto sourcepath
+.HP
+\fB\-\-remove\fR : remove files on auto sourcepath
+.HP
+\fB\-\-makepath\fR : when needed, create the paths
+.HP
+\fB\-\-test\fR : use test paths for vendor/collection
+.HP
+\fB\-\-show\fR : run tex on texfont.tex
+.HP
+\fB\-\-batch\fR : process given batch file
+.HP
+\fB\-\-weight\fR : multiple master weight
+.HP
+\fB\-\-width\fR : multiple master width
+.HP
+\fB\-\-expert\fR : also handle expert fonts
+.HP
+\fB\-\-help\fR : show some more info
+.HP
+.SH "SEE ALSO"
+.PP
+\fBtexexec\fP(1), \fBfontinst\fP(1), \fBtexshow\fP(1),
+\fBtexutil\fP(1)\&.
+.PP
+The TeXFont manual, \fImtexfont\&.pdf\fP\&
+.PP
+The ConTeXt Font manual, \fImfonts\&.pdf\fP\&
+.PP
+The TeXExec manual, \fImtexexec\&.pdf\fP\&.
+.PP
+Donald E\&. Knuth\'s \fIThe TeXbook\fP\&.
+.PP
+.SH "AUTHOR"
+.IP
+This manual page was written by Frank Küster <frank@kuesterei\&.ch>,
+for the Debian GNU/Linux system\&. It may be used and modified by
+others without contacting the author\&. Any mistakes or omissions in
+the manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary
+author)\&.
+.IP
+The PDF manual and \fBtexfont\fP itself can be obtained from
+<http://www\&.pragma-ade\&.com>
diff --git a/Build/source/texk/tetex/texlinks b/Build/source/texk/tetex/texlinks
new file mode 100755
index 00000000000..148d457aa84
--- /dev/null
+++ b/Build/source/texk/tetex/texlinks
@@ -0,0 +1,290 @@
+#!/bin/sh
+
+# Copyright Thomas Esser, 1999, 2002, 2003. public domain.
+
+# texlinks: script to maintain symlinks from format to engine. Interprets
+# the lines given in fmtutil.cnf.
+
+# History:
+# Sun Aug 28 21:41:06 CEST 2005
+# remove special cases for csplain,cslatex,pdfcslatex,pdfcsplain
+# Fr Apr 8 19:15:05 CEST 2005
+# cleanup now has an argument for the return code
+# So Mär 27 18:52:06 CEST 2005
+# honor $TMPDIR, $TEMP and $TMP, not just $TMP
+# Mon May 10 20:52:48 CEST 2004
+# kpseaccess instead of access
+# Thu Dec 25 22:11:53 CET 2003, te:
+# add version string
+# Tue Apr 9 22:46:34 CEST 2002, te:
+# do not create symlinks for cont-??, metafun and mptopdf
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+cnf=fmtutil.cnf # name of the config file
+version=1125258113 # seconds since `00:00:00 1970-01-01 UTC'
+ # date '+%s' (with GNU date)
+progname=texlinks
+
+usage='texlinks [options] [directories]
+
+Create symbolic links format -> engine according to fmtutil setup.
+
+Valid options:
+ --help
+ -h show this help text
+ --version show version string
+ --cnffile file
+ -f file use file as config file (default: fmtutil.cnf)
+ --verbose
+ -v set verbose mode on (default: off)
+ --multiplatform
+ -m operate in all platform specific directories
+ (default: operate only in directory for this platform)
+ --silent
+ -s silently skip over existing scripts / binaries
+ instead of creating a warning
+
+directories is an optional list of directories in which to operate.
+If no directories are specified the list of directories depends on the
+--multiplatform option.
+'
+
+###############################################################################
+# abort(errmsg)
+# print `errmsg' to stderr and exit with error code 1
+###############################################################################
+abort() { errmsg "texlinks: $1."; cleanup 1; }
+
+# error message to stderr:
+errmsg() { echo "$@" >&2; }
+
+# give message to stderr only if "verbose" mode is on:
+verbose_echo() { $verbose && errmsg "$@"; }
+
+# in verbose mode: show command that is executed:
+verbose_do() { verbose_echo "$@"; "$@"; }
+
+###############################################################################
+# cleanup()
+# clean up the temp area and exit with proper exit status
+###############################################################################
+cleanup()
+{
+ rc=$1
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; }
+ exit $rc
+}
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+setupTmpDir()
+{
+ $needsCleanup && return
+
+ trap 'cleanup 1' 1 2 3 7 13 15
+ needsCleanup=true
+ (umask 077; mkdir "$tmpdir") \
+ || abort "could not create directory \`$tmpdir'"
+}
+
+
+# search a binary along $PATH:
+check_for_binary()
+{
+ testbin=$1
+ set x `echo "$PATH" | sed 's/^:/.:/; s/:$/:./; s/::/:.:/g; s/:/ /g'`; shift
+ for i
+ do
+ if [ -x "$i/$testbin" ]; then
+ echo "$i/$testbin"
+ return 0
+ fi
+ done
+ return 1
+}
+
+
+###############################################################################
+# install_link(dest src)
+# create a symlink like ln -s dest src, but make sure that src is not
+# an existing binary
+###############################################################################
+install_link()
+{
+ # make symlink src -> dest
+ dest=$1; src=$2
+
+ case $src in
+ */mf)
+ if test $dest = "mf-nowin" && test -f $selfautoloc/mfw; then
+ dest="mfw"
+ verbose_echo "both mfw and mf-nowin exists, $src linked to $dest"
+ fi
+ ;;
+ esac
+
+ case $src in
+ */cont-??|*/metafun|*/mptopdf)
+ verbose_echo "symlink $2 -> $dest skipped (special case)"
+ ;;
+ *)
+ test "x$src" != "x`(ls -ld $src | awk '{print $NF}') 2>/dev/null`" &&
+ verbose_do rm -f "$src"
+
+ if test -f "$src"; then
+ case $silent in
+ true)
+ ;;
+ *)
+ errmsg "install_link failed for $src. File already exists."
+ ;;
+ esac
+ else
+ verbose_do ln -s "$dest" "$src"
+ fi
+ ;;
+ esac
+}
+
+###############################################################################
+# search_symlinkdir()
+# look if $PATH has only symlinks to the real binaries and find that
+# directory. Also check if this directory is writable.
+###############################################################################
+search_symlinkdir()
+{
+ kpsewhich=`check_for_binary kpsewhich`
+ test -z "$kpsewhich" && return 1
+ symlinkdir=`echo $kpsewhich | sed 's@/*kpsewhich$@@'`
+ kpseaccess -w "$symlinkdir" || return 1
+ touch "$symlinkdir/tl$$"
+ if test -f "$selfautoloc/tl$$"; then
+ rm -f "$symlinkdir/tl$$"
+ return 1
+ else
+ rm -f "$symlinkdir/tl$$"
+ return 0
+ fi
+}
+
+###############################################################################
+# upd_symlinkdir()
+# if $PATH has only symlinks to the real binaries, update that directory
+# that holds the symlinks
+###############################################################################
+upd_symlinkdir()
+{
+ search_symlinkdir || return 0
+ for i in `sed 's@ .*@@' cnf_file_ln.$$`; do
+ install_link "$selfautoloc/$i" "$symlinkdir/$i"
+ done
+}
+
+###############################################################################
+# main()
+# parse commandline arguments, initialize variables,
+# switch into temp. direcrory, execute desired command
+###############################################################################
+main()
+{
+ cnf_file= # global variable: full name of the config file
+ dirs=
+ needsCleanup=false
+
+ multiplatform=false
+ verbose=false
+ silent=false
+ thisdir=`pwd`
+ : ${KPSE_DOT=$thisdir}; export KPSE_DOT
+ selfautoloc=`kpsewhich --expand-var='$SELFAUTOLOC'`
+ while
+ case $1 in
+ --h*|-h)
+ echo "$usage"; exit 0;;
+ --version)
+ echo "$progname version $version."; exit 0;;
+ --cnffile|-f)
+ shift; cnf_file=$1;;
+ --v*|-v) verbose=true;;
+ --s*|-s) silent=true;;
+ --m*|-m) multiplatform=true;;
+ -*) errmsg "fmtutil: unknown option \`$1' ignored.";;
+ *) break;;
+ esac
+ do test $# -gt 0 && shift; done
+ dirs="$*"
+
+ # if no cnf_file from command-line, look it up with kpsewhich:
+ test -z "$cnf_file" && cnf_file=`kpsewhich --format='web2c files' $cnf`
+ test -f "$cnf_file" || abort "config file \`$cnf' not found"
+
+
+ tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/texlinks.$$
+ setupTmpDir
+ cd "$tmpdir" || cleanup 1
+
+ sed '/^[ ]*#/d; /^[ ]*$/d' $cnf_file \
+ | awk '{print $1, $2}' > cnf_file_ln.$$
+
+ if test -z "$dirs"; then
+ if test $multiplatform = true; then
+ case $selfautoloc in
+ */bin) dirs=$selfautoloc;;
+ *) parent=`kpsewhich --expand-var='$SELFAUTODIR'`
+ dirs=`find $parent -type f -name kpsewhich -print \
+ | sed 's@/kpsewhich$@@'`;;
+ esac
+ else
+ dirs=$selfautoloc
+ fi
+ fi
+
+ for d in $dirs; do
+ kpseaccess -w $d \
+ || { errmsg "$d: no write permissions. Skipping..."; continue; }
+ # cnf_file_ln.$$ has lines with "format engine" pairs
+ set x `cat cnf_file_ln.$$`; shift
+ while test $# != 0; do
+ fmt=$1; engine=$2; shift; shift
+
+ # Some broken shells destroy the positional arguments when calling a
+ # shellfunction. Therefore, we save and restore them "by hand" in the
+ # main_args_while variable.
+ main_args_while="$@"
+
+ test "x$fmt" = "x$engine" && continue
+ if test -f "$d/$engine"; then
+ install_link "$engine" "$d/$fmt"
+ else
+ verbose_echo "$d/$engine: engine does not exist. Skipping..."
+ fi
+
+ # restore positional arguments:
+ set x $main_args_while; shift
+
+ done
+ done
+ upd_symlinkdir
+}
+
+main ${1+"$@"}
+
+# set successful return code
+cleanup 0
diff --git a/Build/source/texk/tetex/texlinks.man b/Build/source/texk/tetex/texlinks.man
new file mode 100644
index 00000000000..d195b2c888e
--- /dev/null
+++ b/Build/source/texk/tetex/texlinks.man
@@ -0,0 +1,65 @@
+.TH "texlinks" "8" "September 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+texlinks \- maintain symbolic links from format to engine
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBtexlinks\fP [ \fIOPTIONS\fP\&.\&.\&. ] \fIDIRECTORIES\fP\&.\&.\&.
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBtexlinks\fP is used to create or recreate symbolic links from
+formats to engines according to the information in
+\fIfmtutil\&.cnf\fP or a file specified with \fB--cnffile\fP\&.
+.PP
+\fIDIRECTORIES\fP is an optional list of directories in which to
+operate\&. If no directories are specified the list of directories
+depends on the \fB--multiplatform\fP option\&.
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB--help\fP or \fB-h\fP"
+show some help text
+.IP "\fB--cnffile\fP \fIFILE\fP or \fB-f\fP \fIFILE\fP"
+use
+file as configuration file (default:
+\fIfmtutil\&.cnf\fP)
+.IP "\fB--verbose\fP or \fB-v\fP"
+set verbose mode on (default: off)
+.IP "\fB--multiplatform\fP or \fB-m\fP"
+operate in all
+platform-specific directories (default:
+operate only in the directory for this
+platform)
+.IP "\fB--silent\fP or \fB-s\fP"
+silently skip over existing
+scripts/binaries instead of printing a warning
+.PP
+.SH "FILES"
+.PP
+.IP "\fIfmtutil\&.cnf\fP"
+default configuration file
+.PP
+.SH "SEE ALSO"
+.PP
+\fBfmtutil\fP(1), \fBfmtutil\&.cnf\fP(5)
+.PP
+Web page: <http://tug\&.org/teTeX/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to <tetex@dbs\&.uni-hannover\&.de> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBtexlinks\fP was written by Thomas Esser
+<te@dbs\&.uni-hannover\&.de> and is Copyright © 1999\&.
+\fBtexlinks\fP has been released into the public domain\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/texmf/texconfig/README b/Build/source/texk/tetex/texmf/texconfig/README
new file mode 100644
index 00000000000..330771aa4fd
--- /dev/null
+++ b/Build/source/texk/tetex/texmf/texconfig/README
@@ -0,0 +1,23 @@
+Thomas Esser, 1999. Public domain.
+
+I hereby put this README file and the files g/generic, v/vt100 and
+x/xterm into the public donain.
+
+The files contained in the subdirectories are provided, because
+texconfig havily relies on a properly installed terminfo system.
+
+Some systems have buggy or touble-causing terminfo files and/or
+a buggy curses library. Therefore, the dialog program provided
+by me is linked against the ncurses library and uses its own
+terminfo files.
+
+Set the variable
+
+ DIALOG_TERMINFO to specify an alternate terminfo directory
+ (e.g. /usr/lib/terminfo)
+
+ DIALOG_TERM to use an alternate configuration file (e.g. xterm)
+
+before starting texconfig.
+
+texconfig sets DIALOG_TERM to generic by default.
diff --git a/Build/source/texk/tetex/texmf/texconfig/g/generic b/Build/source/texk/tetex/texmf/texconfig/g/generic
new file mode 100644
index 00000000000..5165d2c1600
--- /dev/null
+++ b/Build/source/texk/tetex/texmf/texconfig/g/generic
Binary files differ
diff --git a/Build/source/texk/tetex/texmf/texconfig/generic b/Build/source/texk/tetex/texmf/texconfig/generic
new file mode 100644
index 00000000000..1638aa827f5
--- /dev/null
+++ b/Build/source/texk/tetex/texmf/texconfig/generic
@@ -0,0 +1,10 @@
+#
+# Minimal terminfo configuration to run the dialog program.
+# If this configuration causes problems, please let me know.
+#
+generic,
+ cols#80, lines#25,
+ clear=^[[H^[[2J,
+ kcud1=^[[B, kcub1=^[[D, kcuf1=^[[C, kcuu1=^[[A,
+ rev=^[[7m, smso=^[[7m, sgr0=^[[m, rmso=^[[m, bold=^[[1m,
+ cup=^[[%i%p1%d;%p2%dH,
diff --git a/Build/source/texk/tetex/texmf/texconfig/v/vt100 b/Build/source/texk/tetex/texmf/texconfig/v/vt100
new file mode 100644
index 00000000000..58879eb57e3
--- /dev/null
+++ b/Build/source/texk/tetex/texmf/texconfig/v/vt100
Binary files differ
diff --git a/Build/source/texk/tetex/texmf/texconfig/x/xterm b/Build/source/texk/tetex/texmf/texconfig/x/xterm
new file mode 100644
index 00000000000..2c4bd146551
--- /dev/null
+++ b/Build/source/texk/tetex/texmf/texconfig/x/xterm
Binary files differ
diff --git a/Build/source/texk/tetex/texshow.man b/Build/source/texk/tetex/texshow.man
new file mode 100644
index 00000000000..1fda1f952c8
--- /dev/null
+++ b/Build/source/texk/tetex/texshow.man
@@ -0,0 +1,69 @@
+.TH "texshow" "1" "Oct 2000" "ConTeXt" "CONTEXT"
+.PP
+.SH "NAME"
+texshow \- ConTeXt command and parameter reference
+.PP
+.SH "SYNOPSIS"
+\fBtexshow\fP [ \fIOPTION\fP ] [ \fICOMMAND\fP ]
+[ \fILANGUAGE\fP ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBtexshow\fP uses \fBperl\fP(1) and PerlTk (see \fBTk\fP(3pm)) to
+show a overview of the commands and parameters of those\&. In the Tk
+window you can search for a command and by switching the interface,
+you can see the equivalent in another interface language\&.
+.PP
+\fICOMMAND\fP is a \fBConTeXt\fP command to search for in the
+database\&. Note that Plain TeX commands are not (yet) in this database
+although they can be used in \fBConTeXt\fP source files\&.
+.PP
+\fILANGUAGE\fP can be one of \fBcz\fP (Czech), \fBde\fP
+(German), \fBen\fP (US-English) or \fBnl\fP (Dutch)\&. The default
+language is Dutch\&.
+.PP
+You can also set the interface language with the
+\fB--interface\fP switch\&.
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB--help\fP"
+Print a brief syntax summary
+.IP "\fB--interface=\fP\fILANGUAGE\fP"
+Primary interface language\&.
+See DESCRIPTION for \fILANGUAGE\fP options\&.
+.PP
+.SH "FILES"
+.PP
+.IP "\fITEXMF/context/perltk/cont_mis\&.pm\fP"
+Perl module for
+formatting data
+.IP "\fITEXMF/context/perltk/cont_set\&.pm\fP"
+Perl module for
+defining and constructing Tk interface
+.IP "\fITEXMF/context/data/cont-\fIXX\fP\&.tws\fP"
+The database
+file\&. At this writing, \fIXX\fP can be one of \fBcz\fP (Czech),
+\fBde\fP (German), \fBen\fP (English), \fBit\fP (Italian), or
+\fBnl\fP (Dutch)\&. Which file is used is determined by the
+\fILANGUAGE\fP specified on the command line\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBtexexec\fP(1), \fBtexutil\fP(1), \fBpdfetex\fP(1),
+\fBpdftex\fP(1)\&.
+.PP
+Web page: <http://www\&.pragma-ade\&.com/>
+.PP
+.SH "AUTHOR"
+.PP
+\fBtexshow\fP was written by Hans Hagen
+<pragma@wxs\&.nl>\&.
+.PP
+This manpage was written by Tobias Burnus
+<burnus@gmx\&.de> and C\&.M\&. Connelly
+<c@eskimo\&.com>\&.
+.PP
+\fBtexshow\fP is part of \fBTeXWork\fP and \fBConTeXt\fP and is available
+from <http://www\&.pragma-ade\&.com/pragma-ade/>\&.
+.PP
diff --git a/Build/source/texk/tetex/texutil.man b/Build/source/texk/tetex/texutil.man
new file mode 100644
index 00000000000..5a6ea8d365e
--- /dev/null
+++ b/Build/source/texk/tetex/texutil.man
@@ -0,0 +1,266 @@
+.TH TEXUTIL 1 UMFT
+.de EX
+.sp
+.in +5
+.nf
+.ft CW
+..
+.de EE
+.in -5
+.ft R
+.sp
+.fi
+..
+.TH "texutil" "1" "October 2000" "ConTeXt" "CONTEXT"
+.PP
+.SH "NAME"
+texutil \- ConTeXt auxiliary program
+.PP
+.SH "SYNOPSIS"
+\fBtexutil\fP [ \fIOPTION\fP\&.\&.\&. ] \fIFILENAME\fP[\&.\&.\&.]
+.PP
+.SH "DESCRIPTION"
+.PP
+When processing a source file, \fBConTeXt\fP (via \fBtexexec\fP(1))
+saves information (including table of contents, tables of figures and
+tables, index entries, cross-references) in a ``utility file\'\' called
+\fIFILENAME\fP\fI\&.tui\fP\&. After each successful run, this
+utility file is postprocessed by \fBtexutil\fP to organize the
+information for the next run\&.
+.PP
+\fBtexutil\fP performs a number of useful functions:
+.PP
+.IP o
+Postprocessing references, including sorting index and list
+entries (with \fB--references\fP)
+.IP o
+Extracting documentation and other types of information from
+\fBConTeXt\fP source files (with
+\fB--documents\fP)
+.IP o
+Logfile analysis (with \fB--logfile\fP)
+.IP o
+Collecting information about graphic files to help with
+typesetting (with \fB--figures\fP)
+.IP o
+Converting EPS files to a PDF format suitable for inclusion in
+PDF files generated with \fBpdftex\fP(1) (with
+--\fB--epspage\fP and
+\fB--epstopdf\fP)
+.PP
+.SH "OPTIONS"
+.PP
+All switches are specified here in full, but can be abbreviated to the
+shortest unique string\&. Thus, \fB--ver\fP works the same as
+\fB--verbose\fP provided that there is no other flag beginning with
+``\f(CWver\fP\'\'\&.
+.PP
+.SH "General Options"
+.PP
+.IP "\fB--help\fP"
+Print a usage summary to stdout\&.
+.IP "\fB--interface=\fP\fILANGUAGECODE\fP"
+Specify the language for
+messages\&. One of \fBen\fP (English), \fBde\fP (German), or
+\fBnl\fP (Dutch)\&. The default language is English\&.
+.IP "\fB--outputfile=\fP\fIFILENAME\fP"
+Specify the name of the
+output file\&.
+.IP "\fB--purge\fP [ \fIBASENAME\fP ]"
+Delete temporary files\&.
+Specifying an optional \fIBASENAME\fP will only
+affect the temporary files that begin with that
+\fIBASENAME\fP\&.
+.IP "\fB--silent\fP"
+Redirects stdout to the \fIlog\fP file
+(\fItexutil\&.log\fP, by default)\&. When used with
+\fB--verbose\fP, a summary is printed to stdout, while
+any other output is written to the \fIlog\fP file\&.
+.IP
+For example,
+.IP
+.EX
+\f(CWtexutil --figures --silent --verbose somefile\&.png\fP
+.EE
+.IP
+will output something like
+.IP
+.EX
+\f(CWn=somefile\&.png t=png x=0bp y=0bp w=443bp h=591bp\fP
+.EE
+.IP
+to stdout, placing other output into
+\fItexutil\&.log\fP\&. This information can be piped
+into another program for further processing\&.
+.IP "\fB--type=\fP\fISUFFIX\fP"
+Specify the \fISUFFIX\fP of the
+file you want \fBtexutil\fP to process\&.
+.IP "\fB--verbose\fP"
+Print diagnostic messages to the screen\&.
+.PP
+.SH "Postprocessing References"
+.PP
+The \fB--references\fP flag instructs \fBtexutil\fP to process
+information about cross-references, index entries, and other data
+requiring more than one pass to process in the \fBConTeXt\fP utility
+file\&.
+.PP
+Index and sorted list entries are sorted before being written out;
+redundant index entries are removed\&.
+.PP
+\fBtexutil\fP is called automatically by \fBtexexec\fP(1) during its
+processing runs unless you specify otherwise\&. \fBtexutil\fP can also
+be run by hand, using the form
+.PP
+.EX
+\f(CWtexutil --references\fP \fIFILENAME\fP
+.EE
+.PP
+This command would cause \fBtexutil\fP to load the utility file
+\fIFILENAME\fP\fI\&.tui\fP, sort and convert the contents of that
+file, and write the results to \fIFILENAME\fP\fI\&.tuo\fP\&.
+.PP
+Options specific to this mode are:
+.IP "\fB--ij\fP"
+Sort ``\f(CWIJ\fP\'\' as ``\f(CWY\fP\'\'\&. Often used when
+processing files written in Dutch\&.
+.IP "\fB--high\fP"
+Convert ``high\'\' ASCII values into equivalent TeX
+commands\&. This switch is provided for backward
+compatibility\&.
+.IP "\fB--quotes\fP"
+Take \fBtex\fP(1) accent commands into
+consideration when sorting\&. (Otherwise, quotes are
+considered to be boundary characters for strings\&.)
+.IP "\fB--tcxpath=\fP\fIPATH\fP"
+Specify path to \fItcx\fP
+filter files for translating
+between encodings\&.
+.PP
+.SH "Extracting Information from ConTeXt Source Files"
+.PP
+\fBConTeXt\fP source files often contain documentation (see
+USAGE for more information about the format) or other
+information that can be extracted by \fBtexutil\fP when called with the
+\fB--documents\fP flag:
+.PP
+.EX
+\f(CWtexutil --documents\fP \fIFILENAME\fP
+.EE
+.PP
+This command produces a file called \fIFILENAME\fP\fI\&.ted\fP
+from a ConTeXt file called \fIFILENAME\fP\fI\&.tex\fP\&.
+.PP
+The \fB--sources\fP flag does the opposite: Documentation lines are
+stripped out of the output, which is written to a file called
+\fIFILENAME\fP\fI\&.tes\fP\&.
+.PP
+Historically, \fBConTeXt\fP source files included other forms of
+information -- such as syntax definitions, macro definitions, and
+editor templates -- that can be extracted with the following flags:
+.PP
+.IP "\fB--infos\fP"
+Extract TeXEdit macro information
+(\fItex\fP->\fItud\fP -- see
+USAGE)
+.IP "\fB--setups\fP"
+Extract \fBConTeXt\fP syntax definitions
+(\fItex\fP->\fItexutil\&.tus\fP)
+.IP "\fB--templates\fP"
+Extract TeXEdit editor templates
+(\fItex\fP->\fItud\fP)
+.PP
+.SH "Analyzing Log Files"
+.PP
+Calling \fBtexutil\fP with the \fB--logfile\fP option allows you to
+extract information about problems with your \fBConTeXt\fP source file
+from the log file produced during a \fBtexexec\fP(1) run\&.
+.PP
+You can specify what information \fBtexutil\fP should report with the
+following options:
+.IP "\fB--box\fP"
+Extract information about overfull boxes\&. By
+default, this flag will cause \fBtexedit\fP to report both
+horizontal and vertical overfull boxes\&. If you\'re only
+interested in one kind, you can specify \fB--hbox\fP or
+\fB--vbox\fP instead\&.
+.IP "\fB--criterium=\fP\fISIZE\fP"
+Exclude reports about boxes that
+are less than \fISIZE\fP points too large\&.
+.IP "\fB--unknown\fP"
+Extract messages about missing references or
+figures\&.
+.PP
+.SH "Gathering Information about Figures"
+.PP
+The \fB--figures\fP flag tells \fBtexutil\fP to generate information
+about one or more (non-EPS) graphics files for use in typesetting\&.
+Called as, for example,
+.PP
+.EX
+\f(CWtexutil --figures *\&.png *\&.tif\fP
+.EE
+.PP
+\fBtexutil\fP will scan the current directory for PNG and TIFF files
+and extract some useful information about their sizes and types\&. By
+default, this information is stored in a file called
+\fItexutil\&.tuf\fP, which is consulted by \fBConTeXt\fP when
+typesetting a page with a non-EPS image file -- see the example given
+for the \fB--silent\fP flag for an alternative\&.
+.PP
+This flag is especially useful when you plan to typeset a file of
+previews of graphic files -- see the discussion of the
+\fB--figures\fP flag in the \fBtexexec\fP(1) manpage\&.
+.PP
+.SH "Converting EPS Files for PDF Inclusion"
+.PP
+\fBtexutil\fP can also convert EPS files to PDF format for inclusion in
+PDF files generated with \fBpdftex\fP(1) or \fBpdfetex\fP(1)\&.
+.PP
+.IP "\fB--epspage\fP"
+Adjust the bounding box of an EPS file to the
+dimensions of the output page\&. This option also removes some
+redundant information and marks files as converted so that they
+will not be affected by subsequent runs\&.
+.IP "\fB--epstopdf\fP"
+Calls \fBgs\fP(1) to convert the specified
+EPS graphic files into PDF format\&.
+.PP
+.SH "USAGE"
+.PP
+.SH "Embedded Documentation Format"
+.PP
+Documentation lines included in \fBConTeXt\fP source files can be
+specified by beginning lines with the following strings:
+.IP "\f(CW%C\fP"
+Copyright information
+.IP "\f(CW%D\fP"
+Documentation lines
+.IP "\f(CW%I\fP"
+TeXEdit information lines (mostly in Dutch)
+.IP "\f(CW%M\fP"
+Macro code needed to processs the documentation
+.IP "\f(CW%S\fP"
+``Suppressed\'\' lines
+.PP
+The same forms can be used for Perl scripts, except that the
+``\f(CW%\fP\'\' characters are replaced by ``\f(CW#\fP\'\' characters\&. See
+the source for \fBtexutil\fP for an example\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBgs\fP(1), \fBpdfetex\fP(1), \fBpdftex\fP(1),
+\fBtexexec\fP(1), \fBtexshow\fP(1)\&.
+.PP
+Web page: <http://www\&.pragma-ade\&.com/>
+.PP
+.SH "AUTHOR"
+.PP
+This manpage was written by C\&.M\&. Connelly
+<c@eskimo\&.com> and Tobias Burnus
+<burnus@gmx\&.de>\&. It is based on
+the \fBtexutil\fP manual written by Hans Hagen
+<pragma@wxs\&.nl>\&.
+.PP
+The PDF manual and \fBtexutil\fP itself can be obtained at
+<http://www\&.pragma-ade\&.com/pragma-ade/texutil\&.htm>\&.
diff --git a/Build/source/texk/tetex/thumbpdf.man b/Build/source/texk/tetex/thumbpdf.man
new file mode 100644
index 00000000000..d1d7e358f9a
--- /dev/null
+++ b/Build/source/texk/tetex/thumbpdf.man
@@ -0,0 +1,100 @@
+.TH "thumbpdf" "1" "September 2000" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+thumbpdf \- generate thumbnail images for a PDF file
+created with \fBpdftex\fP
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBthumbpdf\fP [ \fIOPTION\fP\&.\&.\&. ] \fIPDF_FILE\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBthumbpdf\fP is used to create thumbnail images of individual pages
+within a PDF (Portable Document Format) document\&.
+.PP
+.SH "USAGE"
+.PP
+First run \fBpdftex\fP(1) on your document to create a PDF file\&.
+Then run \fBthumbpdf\fP to generate the thumbnails, a PDF file
+containing the thumbnails, and a pdfTeX file to include the thumbnails
+in the PDF file\&. Finally, run \fBpdftex\fP(1) on your file again to
+create the final PDF file\&.
+.PP
+\fBthumbpdf\fP calls \fBgs\fP(1) to generate PNG images of the pages
+within \fIPDF_FILE\fP, and \fBpdftex\fP(1) to create a PDF file
+containing the thumbnail images\&.
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB--help\fP"
+print usage
+.IP "\fB--(no)makepng\fP"
+make PNG thumbnail images (default: true)
+.IP "\fB--(no)makepdf\fP"
+generate new PDF file containing the
+thumbnails (default: true)
+.IP "\fB--(no)makedef\fP"
+create a TeX file for \fBpdftex\fP(1) to
+read in (default: true)
+.IP "\fB--(no)quiet\fP"
+suppress messages (default: false)
+.IP "\fB--(no)verbose\fP"
+verbose messages (default: false)
+.IP "\fB--(no)debug\fP"
+print debugging information while parsing
+(default: false)
+.IP "\fB--resolution\fP \fIres\fP"
+resolution for GhostScript step
+(default: 9)
+.IP "\fB--compress\fP \fIn\fP"
+\epdfcompresslevel for \fBthumbpdf\&.pdf\fP
+(0-9; default: 9)
+.IP "\fB--device\fP | \fBpng\fP\fIdev\fP"
+GhostScript PNG device;
+\fIdev\fP = `mono\', `gray\',
+`16\', `256\', `16m\' (default:
+`png16m\')
+.PP
+.SH "FILES"
+.PP
+.IP "\fIthumb\fPnn\fI\&.png\fP"
+PNG thumbnail images
+.IP "\fIthumbpdf\&.pdf\fP"
+PDF file containing thumbnail images
+.IP "\fIthumbpdf\&.tex\fP"
+A pdfTeX program to include the thumbnails
+file
+.IP "\fIthumbpdf\&.log\fP"
+pdfTeX log file
+.IP "\fIthumbpdf\&.sty\fP"
+a LaTeX package to be included in files
+for which a user wants to generate thumbnails
+.PP
+.SH "SEE ALSO"
+.PP
+\fBgs\fP(1), \fBpdftex\fP(1)\&.
+.PP
+Web page: <http://tug\&.org/teTeX/>
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to the author\&.
+.PP
+.SH "COPYRIGHT"
+.PP
+Copyright © 1999\&. \fBthumbpdf\fP is distributed under
+version 1, or (at your option) a later version of the LaTeX Project
+Public License\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBthumbpdf\fP was written by Heiko Oberdiek
+<oberdiek@ruf\&.uni-freiburg\&.de>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<c@eskimo\&.com>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/ttf2afm.man b/Build/source/texk/tetex/ttf2afm.man
new file mode 100644
index 00000000000..7cf15df3ab0
--- /dev/null
+++ b/Build/source/texk/tetex/ttf2afm.man
@@ -0,0 +1,74 @@
+.TH "ttf2afm" "1" "September 2000" "pdfTeX" "pdfTeX"
+.PP
+.SH "NAME"
+ttf2afm \- utility to generate AFM files for TrueType fonts
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBttf2afm\fP [ \fIOPTION\fP\&.\&.\&. ] \fIFONTFILE\fP
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBttf2afm\fP is used to generate Adobe Font Metrics (AFM) files for
+TrueType (TTF) fonts to allow them to be used with TeX\&.
+.PP
+\fBttf2afm\fP takes the name of a TrueType font file as a required
+argument\&. It may also take one or more options from the list below
+(note that \fB-d\fP and \fB-h\fP are mutually exclusive)\&.
+.PP
+.SH "OPTIONS"
+.PP
+.IP "\fB-a\fP"
+print all glyphs
+.IP "\fB-i\fP"
+read names in encoding vector in form
+`index\fInum\fP\&'
+.IP "\fB-d\fP"
+print glyph names in the form
+`index\fIdecimal_num\fP\&'
+.IP "\fB-h\fP"
+print glyph names in the form
+`index\fIhex_num\fP\&'
+.IP "\fB-c\fP \fIname\fP"
+print encoding tables to file
+\fIname\&.eMN\fP, where \fIM\fP is the platform
+number and \fIN\fP is the encoding
+.IP "\fB-e\fP \fIenc\fP"
+use encoding from file \fIenc\fP
+.IP "\fB-o\fP \fIoutput\fP"
+output to file \fIoutput\fP instead
+of stdout
+.PP
+Platform numbers can be one of
+.IP "0"
+Apple Unicode
+.IP "1"
+Macintosh
+.IP "2"
+ISO
+.IP "3"
+Microsoft
+.PP
+Encodings can be
+.IP "0"
+Roman (if platform is Macintosh)
+.IP "0"
+Symbol (if platform is Microsoft)
+.IP "1"
+Unicode (if platform is Microsoft)
+.PP
+.SH "BUGS"
+.PP
+None known, but submit bug reports to <pdftex@tug\&.org> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBttf2afm\fP is part of pdfTeX and was written by Han The Thanh
+<thanh@informatics\&.muni\&.cz>\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system\&. It may be used by other distributions
+without contacting the author\&. Any mistakes or omissions in the
+manual page are my fault; inquiries about or corrections to this
+manual page should be directed to me (and not to the primary author)\&.
diff --git a/Build/source/texk/tetex/updmap b/Build/source/texk/tetex/updmap
new file mode 100755
index 00000000000..c66303fdeee
--- /dev/null
+++ b/Build/source/texk/tetex/updmap
@@ -0,0 +1,1383 @@
+#!/bin/sh
+
+###############################################################################
+# updmap: utility to maintain map files for outline fonts.
+#
+# Thomas Esser. Public domain.
+# Usage: updmap [option] ... [command]
+#
+# Valid options:
+# --cnffile file specify configuration file
+# --dvipsoutputdir directory specify output directory (dvips syntax)
+# --pdftexoutputdir directory specify output directory (pdftex syntax)
+# --dvipdfmoutputdir directory specify output directory (dvipdfm syntax)
+# --outputdir directory specify output directory (for all files)
+# --nohash do not run texhash
+# --nomkmap do not recreate map files
+# --quiet reduce verbosity
+#
+# Valid commands:
+# --edit edit $cnfFileShort file
+# --help show this message
+# --showoptions item show alternatives for options
+# --setoption option value set option where option is one
+# of dvipsPreferOutline, LW35, dvipsDownloadBase35,
+# pdftexDownloadBase14 or dvipdfmDownloadBase14
+# --setoption option=value see above, just different syntax
+# --enable maptype mapfile add or enable a Map or MixedMap
+# --enable Map=mapfile add or enable a Map
+# --enable MixedMap=mapfile add or enable a MixedMap
+# --disable mapfile disable Map or MixedMap for mapfile
+# --syncwithtrees entries with unavailable map files will be
+# disabled in the config file
+# --listmaps list all active and inactive maps
+# --listavailablemaps same as --listmaps, but filter out
+# unavailable map files
+###############################################################################
+
+###############################################################################
+# program history:
+# Fr Jul 22 07:22:38 CEST 2005
+# write hint about log file into output files
+# Fr Apr 8 19:15:05 CEST 2005
+# cleanup now has an argument for the return code
+# So Mär 27 18:52:06 CEST 2005
+# honor $TMPDIR, $TEMP and $TMP, not just $TMP
+# Do Mär 10 19:31:39 CET 2005
+# add a few quotes for $cnfFile with whitespace
+# Sa Jan 15 18:13:46 CET 2005
+# avoid multiple variable assignments in one statement
+# Sa Dez 25 12:44:23 CET 2004
+# implementaion adopted for teTeX-3.0 (tcfmgr)
+# Mi Nov 3 16:33:22 CET 2004
+# add "--setoption option=value" syntax
+# Fr Okt 29 21:05:53 CEST 2004
+# add --enable Map=... / --enable MixedMap=...
+# Mi Okt 20 19:17:19 CEST 2004
+# transcript added; even better warnings / error messages
+# So Okt 17 19:07:17 CEST 2004
+# improved warnings / error messages
+# added --syncwithtrees
+# added --listavailablemaps
+# Mi Okt 6 16:37:49 CEST 2004
+# commenty may start with any of *#;%
+# Sun Aug 1 11:42:14 CEST 2004, te
+# remove pdftex related hacks; pdftex no longer needs them!
+# Thu May 13 22:04:23 CEST 2004, te
+# support user with new map file locations
+# Fri Mar 19 15:22:55 CET 2004, te
+# output "xxx yyy" instead of " xxx yyy " (less blanks)
+# Fri Jan 2 22:41:11 CET 2004, te:
+# add version string
+# Wed Aug 20 18:51:47 CEST 2003
+# store map files to fonts/map, add options for dvipsoutputdir,
+# pdftexoutputdir, dvipdfmoutputdir
+# Mon Mar 24 13:40:55 CET 2003
+# fix fmex[789] for dvipdfm (no -r option)
+# Sun Mar 23 18:58:00 CET 2003
+# make the script robust against whitespace in filenames
+# Mon Jan 27 22:38:44 CET 2003
+# don't call a function before processOptions; we may loose our
+# argument list with some broken shells
+# Mon Jan 27 06:55:28 CET 2003
+# fix unportable egrep / sed
+# Sat Jan 18 10:10:26 CET 2003
+# use $tmp8 in dvips2dvipdfm()
+# Thu Jan 2 23:14:34 CET 2003
+# add umask 022, so generated files are always world-readable
+# Sun Oct 27 11:33:04 CET 2002
+# write output in normalized format
+# add support for dvipdfm
+# Mon Sep 22 19:18:57 CEST 2002
+# fix typo: buildin -> builtin
+# Mon Sep 2 19:18:57 CEST 2002
+# fix condensed <-> narrow mapping
+# Sun Sep 1 15:02:28 CEST 2002
+# add dvipsDownloadBase35 / pdftexDownloadBase14 options
+# Wed May 22 20:00:13 CEST 2002
+# listmaps option added by Gerben Wierda
+# Tue May 21 05:27:37 CEST 2002
+# now removing map files before rewriting them; fixes permission problems
+# Tue May 21 05:05:34 CEST 2002:
+# cli options added: showoptions, setoption, enable, disable, nomkmap
+# now even more verbose; now reporting non-existing map files
+# fixing trap for MAC OS/X compatibility
+# Fri May 17 22:38:37 CEST 2002:
+# rewritten from teTeX-1.0 version; Completely new designed.
+###############################################################################
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+# the version string
+version=1122009795 # seconds since `00:00:00 1970-01-01 UTC'
+ # date '+%s' (with GNU date)
+
+###############################################################################
+# help()
+# display help message and exit
+###############################################################################
+help()
+{
+ cat <<eof
+Usage: updmap [option] ... [command]
+
+Valid options:
+ --cnffile file specify configuration file
+ --dvipsoutputdir directory specify output directory (dvips syntax)
+ --pdftexoutputdir directory specify output directory (pdftex syntax)
+ --dvipdfmoutputdir directory specify output directory (dvipdfm syntax)
+ --outputdir directory specify output directory (for all files)
+ --nohash do not run texhash
+ --nomkmap do not recreate map files
+ --quiet reduce verbosity
+
+Valid commands:
+ --edit edit $cnfFileShort file
+ --help show this message
+ --showoptions item show alternatives for options
+ --setoption option value set option where option is one
+ of dvipsPreferOutline, LW35, dvipsDownloadBase35,
+ pdftexDownloadBase14 or dvipdfmDownloadBase14
+ --setoption option=value see above, just different syntax
+ --enable maptype mapfile add or enable a Map or MixedMap
+ --enable Map=mapfile add or enable a Map
+ --enable MixedMap=mapfile add or enable a MixedMap
+ --disable mapfile disable Map or MixedMap for mapfile
+ --syncwithtrees entries with unavailable map files will be
+ disabled in the config file
+ --listmaps list all active and inactive maps
+ --listavailablemaps same as --listmaps, but filter out
+ unavailable map files
+eof
+ (exit 0); exit
+}
+
+###############################################################################
+# verboseMsg(msg)
+# print `msg' to stderr is $verbose is true
+###############################################################################
+verboseMsg() {
+ test -n "$log" && echo ${1+"$@"} >> "$log"
+ $verbose && echo ${1+"$@"} >&2
+}
+
+###############################################################################
+# verboseCat()
+# cat to stderr is $verbose is true
+###############################################################################
+verboseCat() {
+ if $verbose; then
+ if test -n "$log"; then
+ cat ${1+"$@"} | tee -a "$log" >&2
+ else
+ cat ${1+"$@"} >&2
+ fi
+ else
+ test -n "$log" && cat ${1+"$@"} >> "$log"
+ fi
+}
+
+###############################################################################
+# warn(msg)
+# print `msg' to stderr
+###############################################################################
+warn()
+{
+ test -n "$log" && echo ${1+"$@"} >> "$log"
+ echo ${1+"$@"} >&2
+}
+
+###############################################################################
+# abort(errmsg)
+# print `errmsg' to stderr and exit with error code 1
+###############################################################################
+abort()
+{
+ warn "$progname: $1."
+ cleanup 1
+}
+
+###############################################################################
+# cfgval(variable)
+# read variable ($1) from config file, first match wins
+###############################################################################
+cfgval()
+{
+ cat "$cnfFile" | sed -n 's/^'"$1"'[ =][ =]*//p' | sed q
+}
+
+###############################################################################
+# setupSymlinks()
+# set symlink for psfonts.map according to dvipsPreferOutline variable
+###############################################################################
+setupSymlinks()
+{
+ rm -f "$dvipsoutputdir/psfonts.map"
+ if test "x$dvipsPreferOutline" = xtrue; then
+ ln -s psfonts_t1.map "$dvipsoutputdir/psfonts.map"
+ else
+ ln -s psfonts_pk.map "$dvipsoutputdir/psfonts.map"
+ fi
+
+ rm -f "$pdftexoutputdir/pdftex.map"
+ if test "x$pdftexDownloadBase14" = xtrue; then
+ ln -s pdftex_dl14.map "$pdftexoutputdir/pdftex.map"
+ else
+ ln -s pdftex_ndl14.map "$pdftexoutputdir/pdftex.map"
+ fi
+ rm -f "$dvipdfmoutputdir/dvipdfm.map"
+ if test "x$dvipdfmDownloadBase14" = xtrue; then
+ ln -s dvipdfm_dl14.map "$dvipdfmoutputdir/dvipdfm.map"
+ else
+ ln -s dvipdfm_ndl14.map "$dvipdfmoutputdir/dvipdfm.map"
+ fi
+}
+
+###############################################################################
+# transLW35(args ...)
+# transform fontname and filenames according to transformation specified
+# by mode
+###############################################################################
+transLW35()
+{
+ case $mode in
+ ""|URWkb)
+ cat ${1+"$@"}
+ ;;
+ URW)
+ fileURW ${1+"$@"}
+ ;;
+ ADOBE|ADOBEkb)
+ psADOBE ${1+"$@"} | file$mode
+ ;;
+ esac
+}
+
+###############################################################################
+# catMaps(regex)
+# filter config file by regex for map lines and extract the map filenames.
+# These are then looked up (by kpsewhich in locateMap) and the content of
+# all map files is send to stdout.
+###############################################################################
+catMaps()
+{
+ rm -f $catMapsFailed
+ egrep "$1" "$cnfFile" \
+ | sed 's@#.*@@' \
+ | awk '{print $2}' \
+ | sort \
+ | uniq \
+ | grep . > $tmp4
+
+ while read map; do
+ file=`locateMap "$map"` || { touch $catMapsFailed; break; }
+
+ # output the file; also output a newline, because the final newline
+ # might be missing in the map file; Empty lines are filtered out later,
+ # so it does not really hurt do do this here.
+ test -n "$file" && { cat "$file"; echo; }
+ done < $tmp4
+ if test -f $catMapsFailed; then
+ false; return 1
+ else
+ true; return 0
+ fi
+}
+
+###############################################################################
+# configReplace(file, pattern, line)
+# The first line in file that matches pattern gets replaced by line.
+# line will be added at the end of the file if pattern does not match.
+###############################################################################
+configReplace()
+{
+ file=$1; pat=$2; line=$3
+
+ if grep "$pat" "$file" >/dev/null; then
+ ed "$file" >/dev/null 2>&1 <<-eof
+ /$pat/
+ c
+ $line
+ .
+ w
+ q
+eof
+ else
+ echo "$line" >> "$file"
+ fi
+}
+
+###############################################################################
+# setOption (option, value)
+# sets option to value in the config file (replacing the existing setting
+# or by adding a new line to the config file).
+###############################################################################
+setOption()
+{
+ opt=$1
+ val=$2
+ case "$opt" in
+ LW35)
+ case "$val" in
+ URWkb|URW|ADOBE|ADOBEkb)
+ ;;
+ *)
+ abort "invalid value $val for option $opt"
+ ;;
+ esac
+ ;;
+ dvipsPreferOutline|dvipsDownloadBase35|pdftexDownloadBase14|dvipdfmDownloadBase14)
+ case "$val" in
+ true|false)
+ ;;
+ *)
+ abort "invalid value $val for option $opt"
+ esac
+ ;;
+ *)
+ abort "unsupported option $opt"
+ ;;
+ esac
+
+ configReplace "$cnfFile" "^$opt[ ]" "$opt $val"
+}
+
+###############################################################################
+# enableMap (type, map)
+# enables an entry in the config file for map with a given type.
+###############################################################################
+enableMap()
+{
+ case $1 in
+ Map|MixedMap)
+ ;;
+ *)
+ abort "invalid mapType $1"
+ ;;
+ esac
+
+ # a map can only have one type, so we carefully disable everything
+ # about map here:
+ disableMap "$2"
+
+ # now enable with the right type:
+ configReplace "$cnfFile" "^#![ ]*$1[ ]*$2" "$1 $2"
+}
+
+###############################################################################
+# disableMap (map)
+# disables map in config file (any type)
+###############################################################################
+disableMap()
+{
+ #mapType=`awk '($1 == "MixedMap" || $1 == "Map") && $2 == map { print $1 }' \
+ # map=$1 <"$cnfFile" | sort | uniq`
+ map=$1
+ mapType=`egrep "^(MixedMap|Map)[ ]*$map( | |$)" "$cnfFile" | awk '{print $1}' | sort | uniq`
+ for type in $mapType; do
+ configReplace "$cnfFile" "^$type[ ]*$1" "#! $type $1"
+ done
+}
+
+###############################################################################
+# psADOBE()
+# transform fontnames from URW to Adobe
+###############################################################################
+psADOBE()
+{
+ sed \
+ -e 's/ URWGothicL-Demi / AvantGarde-Demi /' \
+ -e 's/ URWGothicL-DemiObli / AvantGarde-DemiOblique /' \
+ -e 's/ URWGothicL-Book / AvantGarde-Book /' \
+ -e 's/ URWGothicL-BookObli / AvantGarde-BookOblique /' \
+ -e 's/ URWBookmanL-DemiBold / Bookman-Demi /' \
+ -e 's/ URWBookmanL-DemiBoldItal / Bookman-DemiItalic /' \
+ -e 's/ URWBookmanL-Ligh / Bookman-Light /' \
+ -e 's/ URWBookmanL-LighItal / Bookman-LightItalic /' \
+ -e 's/ NimbusMonL-Bold / Courier-Bold /' \
+ -e 's/ NimbusMonL-BoldObli / Courier-BoldOblique /' \
+ -e 's/ NimbusMonL-Regu / Courier /' \
+ -e 's/ NimbusMonL-ReguObli / Courier-Oblique /' \
+ -e 's/ NimbusSanL-Bold / Helvetica-Bold /' \
+ -e 's/ NimbusSanL-BoldCond / Helvetica-Narrow-Bold /' \
+ -e 's/ NimbusSanL-BoldItal / Helvetica-BoldOblique /' \
+ -e 's/ NimbusSanL-BoldCondItal / Helvetica-Narrow-BoldOblique /' \
+ -e 's/ NimbusSanL-Regu / Helvetica /' \
+ -e 's/ NimbusSanL-ReguCond / Helvetica-Narrow /' \
+ -e 's/ NimbusSanL-ReguItal / Helvetica-Oblique /' \
+ -e 's/ NimbusSanL-ReguCondItal / Helvetica-Narrow-Oblique /' \
+ -e 's/ CenturySchL-Bold / NewCenturySchlbk-Bold /' \
+ -e 's/ CenturySchL-BoldItal / NewCenturySchlbk-BoldItalic /' \
+ -e 's/ CenturySchL-Roma / NewCenturySchlbk-Roman /' \
+ -e 's/ CenturySchL-Ital / NewCenturySchlbk-Italic /' \
+ -e 's/ URWPalladioL-Bold / Palatino-Bold /' \
+ -e 's/ URWPalladioL-BoldItal / Palatino-BoldItalic /' \
+ -e 's/ URWPalladioL-Roma / Palatino-Roman /' \
+ -e 's/ URWPalladioL-Ital / Palatino-Italic /' \
+ -e 's/ StandardSymL / Symbol /' \
+ -e 's/ NimbusRomNo9L-Medi / Times-Bold /' \
+ -e 's/ NimbusRomNo9L-MediItal / Times-BoldItalic /' \
+ -e 's/ NimbusRomNo9L-Regu / Times-Roman /' \
+ -e 's/ NimbusRomNo9L-ReguItal / Times-Italic /' \
+ -e 's/ URWChanceryL-MediItal / ZapfChancery-MediumItalic /' \
+ -e 's/ Dingbats / ZapfDingbats /' \
+ ${1+"$@"}
+}
+
+###############################################################################
+# fileADOBEkb()
+# transform filenames from URW to ADOBE (both berry names)
+###############################################################################
+fileADOBEkb()
+{
+ sed \
+ -e 's/\([^A-Za-z]\)uagd8a.pfb/\1pagd8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uagdo8a.pfb/\1pagdo8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uagk8a.pfb/\1pagk8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uagko8a.pfb/\1pagko8a.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkd8a.pfb/\1pbkd8a.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkdi8a.pfb/\1pbkdi8a.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkl8a.pfb/\1pbkl8a.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkli8a.pfb/\1pbkli8a.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrb8a.pfb/\1pcrb8a.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrbo8a.pfb/\1pcrbo8a.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrr8a.pfb/\1pcrr8a.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrro8a.pfb/\1pcrro8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvb8a.pfb/\1phvb8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvb8ac.pfb/\1phvb8an.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvbo8a.pfb/\1phvbo8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvbo8ac.pfb/\1phvbo8an.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvr8a.pfb/\1phvr8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvr8ac.pfb/\1phvr8an.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvro8a.pfb/\1phvro8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvro8ac.pfb/\1phvro8an.pfb/' \
+ -e 's/\([^A-Za-z]\)uncb8a.pfb/\1pncb8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uncbi8a.pfb/\1pncbi8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uncr8a.pfb/\1pncr8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uncri8a.pfb/\1pncri8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uplb8a.pfb/\1pplb8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uplbi8a.pfb/\1pplbi8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uplr8a.pfb/\1pplr8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uplri8a.pfb/\1pplri8a.pfb/' \
+ -e 's/\([^A-Za-z]\)usyr.pfb/\1psyr.pfb/' \
+ -e 's/\([^A-Za-z]\)utmb8a.pfb/\1ptmb8a.pfb/' \
+ -e 's/\([^A-Za-z]\)utmbi8a.pfb/\1ptmbi8a.pfb/' \
+ -e 's/\([^A-Za-z]\)utmr8a.pfb/\1ptmr8a.pfb/' \
+ -e 's/\([^A-Za-z]\)utmri8a.pfb/\1ptmri8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uzcmi8a.pfb/\1pzcmi8a.pfb/' \
+ -e 's/\([^A-Za-z]\)uzdr.pfb/\1pzdr.pfb/' \
+ ${1+"$@"}
+}
+
+###############################################################################
+# fileURW()
+# transform filenames from URWkb (berry names) to URW (vendor names)
+###############################################################################
+fileURW()
+{
+ sed \
+ -e 's/\([^A-Za-z]\)uagd8a.pfb/\1a010015l.pfb/' \
+ -e 's/\([^A-Za-z]\)uagdo8a.pfb/\1a010035l.pfb/' \
+ -e 's/\([^A-Za-z]\)uagk8a.pfb/\1a010013l.pfb/' \
+ -e 's/\([^A-Za-z]\)uagko8a.pfb/\1a010033l.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkd8a.pfb/\1b018015l.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkdi8a.pfb/\1b018035l.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkl8a.pfb/\1b018012l.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkli8a.pfb/\1b018032l.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrb8a.pfb/\1n022004l.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrbo8a.pfb/\1n022024l.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrr8a.pfb/\1n022003l.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrro8a.pfb/\1n022023l.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvb8a.pfb/\1n019004l.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvb8ac.pfb/\1n019044l.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvbo8a.pfb/\1n019024l.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvbo8ac.pfb/\1n019064l.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvr8a.pfb/\1n019003l.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvr8ac.pfb/\1n019043l.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvro8a.pfb/\1n019023l.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvro8ac.pfb/\1n019063l.pfb/' \
+ -e 's/\([^A-Za-z]\)uncb8a.pfb/\1c059016l.pfb/' \
+ -e 's/\([^A-Za-z]\)uncbi8a.pfb/\1c059036l.pfb/' \
+ -e 's/\([^A-Za-z]\)uncr8a.pfb/\1c059013l.pfb/' \
+ -e 's/\([^A-Za-z]\)uncri8a.pfb/\1c059033l.pfb/' \
+ -e 's/\([^A-Za-z]\)uplb8a.pfb/\1p052004l.pfb/' \
+ -e 's/\([^A-Za-z]\)uplbi8a.pfb/\1p052024l.pfb/' \
+ -e 's/\([^A-Za-z]\)uplr8a.pfb/\1p052003l.pfb/' \
+ -e 's/\([^A-Za-z]\)uplri8a.pfb/\1p052023l.pfb/' \
+ -e 's/\([^A-Za-z]\)usyr.pfb/\1s050000l.pfb/' \
+ -e 's/\([^A-Za-z]\)utmb8a.pfb/\1n021004l.pfb/' \
+ -e 's/\([^A-Za-z]\)utmbi8a.pfb/\1n021024l.pfb/' \
+ -e 's/\([^A-Za-z]\)utmr8a.pfb/\1n021003l.pfb/' \
+ -e 's/\([^A-Za-z]\)utmri8a.pfb/\1n021023l.pfb/' \
+ -e 's/\([^A-Za-z]\)uzcmi8a.pfb/\1z003034l.pfb/' \
+ -e 's/\([^A-Za-z]\)uzdr.pfb/\1d050000l.pfb/' \
+ ${1+"$@"}
+}
+
+###############################################################################
+# fileADOBE()
+# transform filenames from URWkb (berry names) to ADOBE (vendor names)
+###############################################################################
+fileADOBE()
+{
+ sed \
+ -e 's/\([^A-Za-z]\)uagd8a.pfb/\1agd_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uagdo8a.pfb/\1agdo____.pfb/' \
+ -e 's/\([^A-Za-z]\)uagk8a.pfb/\1agw_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uagko8a.pfb/\1agwo____.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkd8a.pfb/\1bkd_____.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkdi8a.pfb/\1bkdi____.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkl8a.pfb/\1bkl_____.pfb/' \
+ -e 's/\([^A-Za-z]\)ubkli8a.pfb/\1bkli____.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrb8a.pfb/\1cob_____.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrbo8a.pfb/\1cobo____.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrr8a.pfb/\1com_____.pfb/' \
+ -e 's/\([^A-Za-z]\)ucrro8a.pfb/\1coo_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvb8a.pfb/\1hvb_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvb8ac.pfb/\1hvnb____.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvbo8a.pfb/\1hvbo____.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvbo8ac.pfb/\1hvnbo___.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvr8a.pfb/\1hv______.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvr8ac.pfb/\1hvn_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvro8a.pfb/\1hvo_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uhvro8ac.pfb/\1hvno____.pfb/' \
+ -e 's/\([^A-Za-z]\)uncb8a.pfb/\1ncb_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uncbi8a.pfb/\1ncbi____.pfb/' \
+ -e 's/\([^A-Za-z]\)uncr8a.pfb/\1ncr_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uncri8a.pfb/\1nci_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uplb8a.pfb/\1pob_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uplbi8a.pfb/\1pobi____.pfb/' \
+ -e 's/\([^A-Za-z]\)uplr8a.pfb/\1por_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uplri8a.pfb/\1poi_____.pfb/' \
+ -e 's/\([^A-Za-z]\)usyr.pfb/\1sy______.pfb/' \
+ -e 's/\([^A-Za-z]\)utmb8a.pfb/\1tib_____.pfb/' \
+ -e 's/\([^A-Za-z]\)utmbi8a.pfb/\1tibi____.pfb/' \
+ -e 's/\([^A-Za-z]\)utmr8a.pfb/\1tir_____.pfb/' \
+ -e 's/\([^A-Za-z]\)utmri8a.pfb/\1tii_____.pfb/' \
+ -e 's/\([^A-Za-z]\)uzcmi8a.pfb/\1zcmi____.pfb/' \
+ -e 's/\([^A-Za-z]\)uzdr.pfb/\1zd______.pfb/' \
+ ${1+"$@"}
+}
+
+###############################################################################
+# locateWeb2c (file ...)
+# apply kpsewhich with format 'web2c files'
+###############################################################################
+locateWeb2c()
+{
+ kpsewhich --format='web2c files' ${1+"$@"}
+}
+
+###############################################################################
+# locateMap (file ...)
+# apply kpsewhich with format 'map'
+###############################################################################
+locateMap()
+{
+
+ # Always use the "migration checking version". This might become
+ # consigurable, but for now, we always want to check.
+ if :; then
+ locateMapMigrate "$@"
+ return $?
+ fi
+
+ # The old version of the code; not used at the moment.
+ for map
+ do
+ file=`kpsewhich --format=map "$map"`
+ if test -f "$file"; then
+ verboseMsg "$progname: using map file \`$file'"
+ echo "$file"
+ else
+ warn "map file \`$map' not found."
+ fi
+ done
+}
+
+###############################################################################
+# locateMapMigrate (file ...)
+# look for map file; assist user with possibly files in wrong locations;
+# also watch out for possibly hidden conflicts
+###############################################################################
+locateMapMigrate()
+{
+ for map
+ do
+ # look up using the new search path
+ file=`kpsewhich --format=map "$map"`
+
+ # look up using the old search path
+ file2=`kpsewhich --format='dvips config' "$map"`
+
+ # Well, the search paths should not overlap. If they do, and if
+ # file1 = file2, we don't want to complain about file2, so:
+ test "x$file" = "x$file2" && file2=
+
+ if test -f "$file"; then
+
+ verboseMsg "$progname: using map file \`$file'"
+ echo "$file"
+
+ # we have found the file where we should. If we have additional
+ # ones: complain!
+ if test -f "$file2"; then
+ mapCmp "$file" "$file2" \
+ && mapWarn obsoleteCopy "$map" "$file2" \
+ || mapWarn manualResolve "$map" "$file" "$file2"
+ fi
+
+ else
+ if test -f "$file2"; then
+ # bad: map file exists in the wrong location only
+ mapWarn badLocation "$map" "$file2"
+ else
+ # bad: map file does not exist at all
+ mapWarn notFound "$map"
+ fi
+ false; return 1
+ fi
+ done
+ true; return 0
+}
+
+###############################################################################
+# mapCmp(file, file2)
+# compare two map files like cmp; but less strict, so changes regarding
+# whitespaces, comments etc. are tolerated. Important is only the
+# return value here.
+###############################################################################
+mapCmp()
+{
+ file=$1; file2=$2
+
+ # For reasons of speed only. Avoid normalizeLines if files are 100%
+ # the same.
+ cmp "$file" "$file2" >/dev/null 2>&1 && return 0
+
+ normalizeLines <"$file" >"$tmpdir/mapCmp-1"
+ normalizeLines <"$file2" >"$tmpdir/mapCmp-2"
+ cmp "$tmpdir/mapCmp-1" "$tmpdir/mapCmp-2" >/dev/null 2>&1
+}
+
+###############################################################################
+# mapWarn()
+###############################################################################
+mapWarn()
+{
+
+ case $1 in
+ obsoleteCopy)
+ warn "
+!!! WARNING: Identical copy of used file for \`$2'
+ exists in obsolete location
+ $3
+ Please, consider removing this file.
+"
+ touch $mapWarnCalled
+ ;;
+ manualResolve)
+ warn "
+!!! WARNING: While searching for the right map file for \`$2', we have
+ found the file
+ $3
+ in the right location and we are using this
+ file. However, a map file with different content has been found in
+ the obsolete location
+ $4
+ Please, see which version you want to use and eventually update the
+ content of the used map file. Additionally, consider removing the
+ obsolete file.
+"
+ touch $mapWarnCalled
+ ;;
+ badLocation)
+ map=$2
+ location=$3
+
+ m="
+!!! ERROR: The right location for map files has been
+ changed for this release and the map file \`$map' has
+ not been found in the right location, but in the obsolete
+ location
+ $location
+ instead.
+
+ To fix this, please move this file into an appropriate
+ subdirectory of fonts/map in one of your texmf trees.
+
+ For more information about the changed search paths, see
+ the release notes section in the teTeX manual. You probably
+ can read this document by executing the command
+ texdoc TETEXDOC
+ else visit the web page
+ http://tug.org/texlive/mapenc.html
+"
+ warn "$m"
+ false; return 1
+ ;;
+ notFound)
+ warn "
+!!! ERROR! The map file \`$2' has not been found at all.
+
+ Either put this file into the right place or remove the
+ reference from the configuration file. An automatic way
+ to disable unavailable map files is to call
+ $progname --syncwithtrees
+
+ For manual editing, call
+ $progname --edit
+"
+
+ false; return 1
+ ;;
+ esac
+}
+
+###############################################################################
+# cleanup()
+# clean up the temp area and exit with proper exit status
+###############################################################################
+cleanup()
+{
+ rc=$1
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { cd / && rm -rf "$tmpdir"; }
+ (exit $rc); exit $rc
+}
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+setupTmpDir()
+{
+ $needsCleanup && return
+
+ trap 'cleanup 1' 1 2 3 7 13 15
+ needsCleanup=true
+ mkdir "$tmpdir" || abort "could not create directory \`$tmpdir'"
+}
+
+###############################################################################
+# showOptions(item)
+# show Options for an item
+###############################################################################
+showOptions()
+{
+ item=$1
+
+ case "$item" in
+ LW35)
+ echo "URWkb URW ADOBE ADOBEkb"
+ ;;
+ dvipsPreferOutline|pdftexDownloadBase14|dvipdfmDownloadBase14|dvipsDownloadBase35)
+ echo "true false"
+ ;;
+ *)
+ abort "Unknown item \"$item\". Choose one of LW35, dvipsPreferOutline, dvipsDownloadBase35, pdftexDownloadBase14 or dvipdfmDownloadBase14"
+ ;;
+ esac
+
+ (exit 0); exit 0
+}
+
+###############################################################################
+# mktexdir(args)
+# call mktexdir script, disable all features (to prevent sticky directories)
+###############################################################################
+mktexdir()
+{
+ MT_FEATURES=none "$TEXMFMAIN/web2c/mktexdir" "$@" >&2
+}
+
+###############################################################################
+# setupDestDir()
+# Assign output directories which are not yet assigned. Always use
+# the TEXMFVAR for this.
+###############################################################################
+setupDestDir()
+{
+ vartexmf=`kpsewhich -var-value=TEXMFVAR`
+
+ # dvips
+ if test -z "$dvipsoutputdir"; then
+ dvipsoutputdir=$vartexmf/fonts/map/dvips/updmap
+ fi
+
+ # pdftex
+ if test -z "$pdftexoutputdir"; then
+ pdftexoutputdir=$vartexmf/fonts/map/pdftex/updmap
+ fi
+
+ # dvipdfm
+ if test -z "$dvipdfmoutputdir"; then
+ dvipdfmoutputdir=$vartexmf/fonts/map/dvipdfm/updmap
+ fi
+
+ mktexdir "$dvipsoutputdir" "$pdftexoutputdir" "$dvipdfmoutputdir" >/dev/null 2>&1
+ for d in "$dvipsoutputdir" "$pdftexoutputdir" "$dvipdfmoutputdir"; do
+ test -d "$d" || abort "output directory \`$d' does not exist"
+ test -w "$d" || abort "output directory \`$d' is not writable"
+ done
+
+}
+
+###############################################################################
+# setupLog(cfgFile)
+# try to set up a log file in $TEXMFVAR/web2c
+###############################################################################
+setupLog()
+{
+ vartexmf=`kpsewhich -var-value=TEXMFVAR`
+ dir=$vartexmf/web2c
+ mktexdir "$dir" >/dev/null 2>&1
+ log="$dir/$progname.log"
+ if test -d "$dir" && test -w "$dir"; then
+ rm -f "$log"
+ > "$log"
+ fi
+ if test -w "$log"; then
+ date > "$log"
+ verboseMsg "$progname: This is $progname, version $version"
+ verboseMsg "$progname: using transcript file \`$log'"
+ else
+ log=
+ verboseMsg "$progname: This is $progname, version $version"
+ verboseMsg "$progname: no permissions for writing $dir/$progname.log', so no transcript"
+ fi
+}
+
+###############################################################################
+# setupCfgFile()
+# find config file if none specified on cmd line.
+###############################################################################
+setupCfgFile()
+{
+ case "$cnfFile" in
+ "") cnfFile=`locateWeb2c $cnfFileShort`
+ case "$cnfFile" in
+ "") abort "config file $cnfFileShort not found"
+ esac;;
+ esac
+ setupLog
+}
+
+###############################################################################
+# processOptions()
+# process cmd line options
+###############################################################################
+processOptions()
+{
+ while
+ case $1 in
+ --quiet|-q)
+ verbose=false;;
+ --cnffile)
+ cfgparam=1; cnfFile=$2; shift;;
+ --cnffile=*)
+ cfgparam=1; cnfFile=`echo "$1" | sed 's/--cnffile=//'`;;
+ --dvipsoutputdir)
+ dvipsoutputdirparam=1; dvipsoutputdir=$2; shift;;
+ --dvipsoutputdir=*)
+ dvipsoutputdirparam=1; dvipsoutputdir=`echo "$1" | sed 's/--dvipsoutputdir=//'`;;
+ --pdftexoutputdir)
+ pdftexoutputdirparam=1; pdftexoutputdir=$2; shift;;
+ --pdftexoutputdir=*)
+ pdftexoutputdirparam=1; pdftexoutputdir=`echo "$1" | sed 's/--pdftexoutputdir=//'`;;
+ --dvipdfmoutputdir)
+ dvipdfmoutputdirparam=1; dvipdfmoutputdir=$2; shift;;
+ --dvipdfmoutputdir=*)
+ dvipdfmoutputdirparam=1; dvipdfmoutputdir=`echo "$1" | sed 's/--dvipdfmoutputdir=//'`;;
+ --outputdir)
+ dvipsoutputdirparam=1; dvipsoutputdir=$2
+ pdftexoutputdirparam=1; pdftexoutputdir=$2
+ dvipdfmoutputdirparam=1; dvipdfmoutputdir=$2
+ shift
+ ;;
+ --outputdir=*)
+ outputdir=`echo "$1" | sed 's/--outputdir=//'`
+ dvipsoutputdirparam=1; dvipsoutputdir=$outputdir
+ pdftexoutputdirparam=1; pdftexoutputdir=$outputdir
+ dvipdfmoutputdirparam=1; dvipdfmoutputdir=$outputdir
+ ;;
+ --setoption)
+ cfgmaint=1
+ cmd=setoption
+ case $2 in
+ *=*)
+ setoptionOpt=`echo $2 | sed 's@=.*@@'`
+ setoptionVal=`echo $2 | sed 's@[^=]*=@@'`
+ shift
+ ;;
+ *)
+ test $# -ge 3 || { abort "--setoption needs two parameters: option value"; }
+ setoptionOpt=$2; setoptionVal=$3; shift; shift
+ ;;
+ esac
+ ;;
+ --enable)
+ cfgmaint=1
+ cmd=enable
+ case $2 in
+ Map=*)
+ enableMapType=Map; enableMapFile=`echo "$2" | sed 's/Map=//'`; shift;;
+ MixedMap=*)
+ enableMapType=MixedMap; enableMapFile=`echo "$2" | sed 's/MixedMap=//'`; shift;;
+ Map|MixedMap)
+ test $# -ge 3 || { abort "--enable needs two parameters: mapType mapFile"; }
+ enableMapType=$2; enableMapFile=$3; shift; shift;;
+ *)
+ abort "--enable needs two parameters mapType mapFile";;
+ esac
+ ;;
+ --syncwithtrees)
+ cfgmaint=1
+ cmd=syncwithtrees;;
+ --disable)
+ cfgmaint=1
+ cmd=disable; disableMapFile=$2; shift
+ ;;
+ --disable=*)
+ cfgmaint=1
+ disableMapFile=`echo "$1" | sed 's/--disable=//'`
+ cmd=disable
+ ;;
+ --edit|-e)
+ cfgmaint=1
+ cmd=edit;;
+ --listmaps|-l)
+ cmd=listmaps;;
+ --listavailablemaps)
+ cmd=listavailablemaps;;
+ --showoptions)
+ cmd=showoptions; showoptionsItem=$2; shift;;
+ --showoptions=*)
+ cmd=showoptions; showoptionsItem=`echo "$1" | sed 's/--showoptions=//'`;;
+ --nohash)
+ texhashEnabled=false;;
+ --nomkmap)
+ mkmapEnabled=false;;
+ --help|-help|-h)
+ help;;
+ --version)
+ echo "$progname version $version."; (exit 0); exit 0;;
+ "") break;;
+ *) abort "$progname: unknown option \`$1'. Try $progname --help for help";;
+ esac
+ do test $# -gt 0 && shift; done
+
+ if test -n "$cfgparam"; then
+ if test -z "$cnfFile" || test ! -f "$cnfFile"; then
+ abort "config file \`$cnfFileShort' not found"
+ fi
+ fi
+
+ if test -n "$dvipdoutputdirparam"; then
+ if test -z "$dvipdoutputdir" || test ! -d "$dvipdoutputdir"; then
+ abort "dvips output directory \`$1' not found"
+ fi
+ fi
+ if test -n "$pdftexoutputdirparam"; then
+ if test -z "$pdftexoutputdir" || test ! -d "$pdftexoutputdir"; then
+ abort "pdftex output directory \`$1' not found"
+ fi
+ fi
+ if test -n "$dvipdfmoutputdirparam"; then
+ if test -z "$dvipdfmoutputdir" || test ! -d "$dvipdfmoutputdir"; then
+ abort "dvipdfm output directory \`$1' not found"
+ fi
+ fi
+
+}
+
+###############################################################################
+# listMaps()
+# list all maps mentioned in the config file
+###############################################################################
+listMaps()
+{
+ egrep '^(#! *)?(Mixed)?Map' "$cnfFile"
+}
+
+###############################################################################
+# listAvailableMaps()
+# list maps mentioned in the config file if they are available
+###############################################################################
+listAvailableMaps()
+{
+ # loop over each possible line in the config file (-> $line)
+ # extract the name of the map file (-> $m)
+ # check if the map file exists and in that case echo the line
+ OLDIFS=$IFS
+ IFS='
+'
+ for line in `egrep '^(#! *)?(Mixed)?Map' "$cnfFile"`; do
+ m=`echo "$line" | sed 's@[ ]*$@@; s@.*[ ]@@'`
+ kpsewhich --format=map "$m" >/dev/null && echo "$line"
+ done
+ IFS=$OLDIFS
+}
+
+###############################################################################
+# syncWithTrees()
+# update the config file: uncomment all lines which refer to map files that
+# are unavailabe in the texmf trees
+###############################################################################
+syncWithTrees()
+{
+ for i in `egrep '^(Mixed)?Map' "$cnfFile" | sed 's@.* @@'`; do
+ kpsewhich --format=map "$i" >/dev/null || echo "$i"
+ done > $tmp1
+ {
+ sed 's@/@\\/@g; s@^@/^MixedMap[ ]*@; s@$@$/s/^/#! /@' <$tmp1
+ sed 's@/@\\/@g; s@^@/^Map[ ]*@; s@$@$/s/^/#! /@' <$tmp1
+ } > $tmp2
+ sed -f $tmp2 "$cnfFile" > $tmp3 && cat $tmp3 > "$cnfFile"
+}
+
+###############################################################################
+# normalizeLines()
+# remove comments, whitespace is exactly one space, no empty lines,
+# no whitespace at end of line, one space before and after "
+###############################################################################
+normalizeLines()
+{
+ sed \
+ -e '/^[*#;%]/d' \
+ -e 's@[ ][ ]*@ @g' \
+ -e '/^ *$/d' \
+ -e 's@ $@@' \
+ -e 's@ *" *@ " @g' \
+ -e 's@" \([^"]*\) "@"\1"@g' | sort | uniq
+}
+
+###############################################################################
+# dvips2dvipdfm()
+# reads from stdin, writes to stdout. It transforms "dvips"-like syntax into
+# "dvipdfm"-like syntax. It is a very ugly hack.
+###############################################################################
+dvips2dvipdfm()
+{
+ sed -e 's@$@ %@' \
+ -e 's@^\(\([^ ]*\).*\)@\1\2@' \
+ -e 's@\(.*<\[* *\([^ ]*\)\.enc\(.*\)\)@\1 \2@' \
+ -e '/%[^ ]*$/s@$@ default@' \
+ -e 's@\(.*<<* *\([^ ]*\)\.pf[ab].*\)@\1 \2@' \
+ -e '/%[^ ]* [^ ]*$/s@\( \([^ ]*\).*\)$@\1 \2@' \
+ -e 's@\(.*[" ]\([.0-9-][.0-9-]*\) *ExtendFont.*\)@\1 -e \2@' \
+ -e 's@\(.*[" ]\([.0-9-][.0-9-]*\) *SlantFont.*\)@\1 -s \2@' \
+ -e 's@.*%@@' |
+ awk '$1 == $3 && $2 == "default" {$2=""; $3=""} {print}' > $tmp8
+
+ egrep '^(cm|eu|la|lc|line|msam|xy)' $tmp8 \
+ | sed 's@$@ -r@; s@\(fmex[789]\) -r$@\1@'
+ egrep -v '^(cm|eu|la|lc|line|msam|xy)' $tmp8
+}
+
+
+###############################################################################
+# mkMaps()
+# the main task of this script: create the output files
+###############################################################################
+mkMaps()
+{
+ newline='
+'
+ mode=`cfgval LW35`
+ dvipsPreferOutline=`cfgval dvipsPreferOutline`
+ dvipsDownloadBase35=`cfgval dvipsDownloadBase35`
+ pdftexDownloadBase14=`cfgval pdftexDownloadBase14`
+ dvipdfmDownloadBase14=`cfgval dvipdfmDownloadBase14`
+
+ # defaults
+ test -z "$mode" && mode=URWkb
+ test -z "$dvipsPreferOutline" && dvipsPreferOutline=true
+ test -z "$dvipsDownloadBase35" && dvipsDownloadBase35=false
+ test -z "$pdftexDownloadBase14" && pdftexDownloadBase14=false
+ test -z "$dvipdfmDownloadBase14" && dvipdfmDownloadBase14=false
+
+ outputFiles="$dvipsoutputdir/download35.map
+$dvipsoutputdir/builtin35.map
+$dvipsoutputdir/psfonts_t1.map
+$dvipsoutputdir/psfonts_pk.map
+$pdftexoutputdir/pdftex_dl14.map
+$pdftexoutputdir/pdftex_ndl14.map
+$dvipdfmoutputdir/dvipdfm_dl14.map
+$dvipdfmoutputdir/dvipdfm_ndl14.map
+$dvipsoutputdir/ps2pk.map"
+
+ outputLinks="$dvipsoutputdir/psfonts.map
+$pdftexoutputdir/pdftex.map
+$dvipdfmoutputdir/dvipdfm.map"
+
+ allOutput="$outputFiles
+$outputLinks"
+
+ notfound=false
+ OLDIFS=$IFS; IFS=$newline
+ for o in $allOutput; do
+ test -f "$o" || notfound=true
+ done
+ IFS=$OLDIFS
+ $notfound || texhashEnabled=false
+
+ verboseCat <<-eof
+
+ updmap is creating new map files using the following configuration:
+
+ config file: \`$cnfFile'
+ dvips output directory: \`$dvipsoutputdir'
+ pdftex output directory: \`$pdftexoutputdir'
+ dvipdfm output directory: \`$dvipdfmoutputdir'
+
+ prefer outlines: \`$dvipsPreferOutline'
+ texhash enabled: \`$texhashEnabled'
+ download standard fonts (dvips): \`$dvipsDownloadBase35'
+ download standard fonts (pdftex): \`$pdftexDownloadBase14'
+ download standard fonts (dvipdfm): \`$dvipdfmDownloadBase14'
+eof
+
+ verboseMsg
+ verboseMsg "$progname: Scanning for LW35 support files"
+ dvips35=`locateMap dvips35.map` || cleanup 1
+ pdftex35=`locateMap pdftex35.map` || cleanup 1
+ dvipdfm35=`locateMap dvipdfm35.map` || cleanup 1
+ ps2pk35=`locateMap ps2pk35.map` || cleanup 1
+
+ verboseMsg
+ verboseMsg "$progname: Scanning for MixedMap entries:"
+ catMaps '^MixedMap' > $tmp1 || cleanup 1
+
+ verboseMsg
+ verboseMsg "$progname: Scanning for Map entries:"
+ catMaps '^Map' > $tmp2 || cleanup 1
+ verboseMsg
+
+ # files should be world-readable
+ umask 022
+
+ OLDIFS=$IFS; IFS=$newline
+ for file in $allOutput; do
+ rm -f "$file"
+ cat > "$file" <<-eof
+ % $file: maintained by the script updmap.
+ % Don't change this file directly. Edit texmf/web2c/$cnfFileShort
+ % and run updmap to recreate this file.
+eof
+ if test -n "$log"; then
+ cat >> "$file" <<-eof
+ % A log of the updmap run that has created this file is available here:
+ % $log
+eof
+ fi
+ done
+ IFS=$OLDIFS
+
+ verboseMsg "$progname: Generating output for ps2pk..."
+ { transLW35 "$ps2pk35"; cat $tmp1 $tmp2; } \
+ | normalizeLines >> "$dvipsoutputdir/ps2pk.map"
+
+ verboseMsg "$progname: Generating output for dvips..."
+ { transLW35 "$ps2pk35"; } \
+ | normalizeLines >> "$dvipsoutputdir/download35.map"
+ { transLW35 "$dvips35"; } \
+ | normalizeLines >> "$dvipsoutputdir/builtin35.map"
+
+ if test "x$dvipsDownloadBase35" = xtrue; then
+ dftdvips=$ps2pk35
+ else
+ dftdvips=$dvips35
+ fi
+ { transLW35 "$dftdvips"; cat $tmp1 $tmp2; } \
+ | normalizeLines >> "$dvipsoutputdir/psfonts_t1.map"
+ { transLW35 "$dftdvips"; cat $tmp2; } \
+ | normalizeLines >> "$dvipsoutputdir/psfonts_pk.map"
+
+ verboseMsg "$progname: Generating output for pdftex..."
+ # remove PaintType due to Sebastian's request
+ { transLW35 "$pdftex35"; cat $tmp1 $tmp2; } \
+ | grep -v PaintType | grep . > $tmp3
+ { transLW35 "$dvipdfm35"; cat $tmp1 $tmp2; } \
+ | grep -v PaintType | grep . > $tmp6
+ { transLW35 "$ps2pk35"; cat $tmp1 $tmp2; } \
+ | grep -v PaintType | grep . > $tmp7
+
+ <$tmp3 normalizeLines >> "$pdftexoutputdir/pdftex_ndl14.map"
+ <$tmp7 normalizeLines >> "$pdftexoutputdir/pdftex_dl14.map"
+
+ verboseMsg "$progname: Generating output for dvipdfm..."
+ <$tmp7 normalizeLines | dvips2dvipdfm | normalizeLines >> "$dvipdfmoutputdir/dvipdfm_dl14.map"
+ <$tmp6 normalizeLines | dvips2dvipdfm | normalizeLines >> "$dvipdfmoutputdir/dvipdfm_ndl14.map"
+ verboseMsg "$progname: All output generated!"
+ verboseMsg
+
+ setupSymlinks
+ $texhashEnabled && { $verbose && texhash || texhash >/dev/null 2>&1; }
+
+ verboseMsg
+ verboseMsg "$progname: Files generated:"
+ OLDIFS=$IFS; IFS=$newline
+ ls -l $outputFiles | verboseCat
+ IFS=$OLDIFS
+ verboseMsg
+
+ verboseMsg "$progname: Map file links:"
+ { cd "$dvipsoutputdir"; ls -l psfonts.map;
+ cd "$pdftexoutputdir"; ls -l pdftex.map;
+ cd "$dvipdfmoutputdir"; ls -l dvipdfm.map; } \
+ | awk '{print $(NF-2), $(NF-1), $NF}' | verboseCat
+ verboseMsg
+
+ if test -f $mapWarnCalled; then
+ m="
+
+!!! NOTICE:
+
+ With this release, the search paths for map files have been changed
+ and we have found that some files exist in the new path as well as
+ in the obsolete path.
+
+ This is not an error per se, but please consider removing duplicates
+ from the old location and search the above output"
+
+ test -n "$log" && m="$m or the transcript file
+ $log
+ "
+
+ m="$m for warnings.
+
+ For more information about the changed search paths, see
+ the release notes section in the teTeX manual. You probably
+ can read this document by executing the command
+ texdoc TETEXDOC
+ else visit the web page
+ http://tug.org/texlive/mapenc.html
+"
+ warn "$m"
+ fi
+ return 0
+}
+
+###############################################################################
+# main()
+# execution starts here
+###############################################################################
+main()
+{
+ # initialize global variables
+ progname=updmap
+ cmd=
+ log=
+
+ cfgparam=
+ outputdirparam=
+ cfgmaint=
+ texhashEnabled=true
+ mkmapEnabled=true
+ verbose=true
+ needsCleanup=false
+
+ cnfFileShort=updmap.cfg
+ cnfFile=
+ dvipsoutputdir=; pdftexoutputdir=; dvipdfmoutputdir=
+ : ${TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`}
+
+ tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$
+ tmp1=$tmpdir/a
+ tmp2=$tmpdir/b
+ tmp3=$tmpdir/c
+ tmp4=$tmpdir/d
+ tmp5=$tmpdir/e
+ tmp6=$tmpdir/f
+ tmp7=$tmpdir/g
+ tmp8=$tmpdir/h
+ mapWarnCalled=$tmpdir/mapWarnCalled
+ catMapsFailed=$tmpdir/catMapsFailed
+
+ processOptions ${1+"$@"}
+
+ case "$cmd" in
+ showoptions) showOptions "$showoptionsItem"; (exit 0); exit;;
+ help) help; (exit 0); exit;;
+ esac
+
+ setupCfgFile
+ case "$cmd" in
+ listmaps) listMaps; (exit 0); exit;;
+ listavailablemaps) listAvailableMaps; (exit 0); exit;;
+ esac
+
+ # keep a copy of config file, so that we can see if the file was modified
+ setupTmpDir
+
+ if test -n "$cfgmaint"; then
+ if test -z "$cfgparam"; then
+ co=`$TEXMFMAIN/texconfig/tcfmgr --tmp $tmpdir --cmd co --file $cnfFileShort`
+ test $? = 0 || cleanup 1
+ set x $co; shift
+ id=$1; cnfFile=$3; orig=$4
+ verboseMsg "$progname: initial config file is \`$orig'"
+ else
+ verboseMsg "$progname: config file is \`$cnfFile'"
+ cp "$cnfFile" $tmp5
+ fi
+
+ case "$cmd" in
+ edit)
+ ${VISUAL-${EDITOR-vi}} "$cnfFile";;
+ setoption)
+ setOption "$setoptionOpt" "$setoptionVal";;
+ enable)
+ enableMap "$enableMapType" "$enableMapFile";;
+ disable)
+ disableMap "$disableMapFile";;
+ syncwithtrees)
+ syncWithTrees;;
+ esac
+
+ unchanged=true
+ if test -z "$cfgparam"; then
+ ci=`$TEXMFMAIN/texconfig/tcfmgr --tmp $tmpdir --cmd ci --id $id`
+ test $? = 0 || cleanup 1
+ case "$ci" in
+ "") : ;;
+ *) unchanged=false
+ cnfFile=$ci
+ ;;
+ esac
+ else
+ cmp "$cnfFile" $tmp5 >/dev/null 2>&1 || unchanged=false
+ fi
+ case $unchanged in
+ true) if $mkmapEnabled; then
+ verboseMsg "$progname: configuration (updmap.cfg) unchanged. Map files will not be recreated."
+ mkmapEnabled=false
+ else
+ verboseMsg "$progname: configuration (updmap.cfg) unchanged."
+ fi;;
+ *)
+ verboseMsg "$progname: configuration file updated: \`$cnfFile'";;
+ esac
+ fi
+
+ $mkmapEnabled || return
+ setupDestDir
+ mkMaps
+}
+
+main ${1+"$@"}
+cleanup 0
diff --git a/Build/source/texk/tetex/updmap-sys b/Build/source/texk/tetex/updmap-sys
new file mode 100755
index 00000000000..6f3c8365658
--- /dev/null
+++ b/Build/source/texk/tetex/updmap-sys
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# updmap-sys: Thomas Esser, public domain.
+
+# wrapper script for updmap with TEXMFVAR and TEXMFCONFIG set to
+# TEXMFSYSVAR / TEXMFSYSCONFIG
+
+test -f /bin/ksh && test -z "$RUNNING_KSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
+unset RUNNING_KSH
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+export PATH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+v=`kpsewhich -var-value TEXMFSYSVAR`
+c=`kpsewhich -var-value TEXMFSYSCONFIG`
+
+TEXMFVAR="$v"
+TEXMFCONFIG="$c"
+export TEXMFVAR TEXMFCONFIG
+
+exec updmap ${1+"$@"}
diff --git a/Build/source/texk/tetex/updmap.cfg.5 b/Build/source/texk/tetex/updmap.cfg.5
new file mode 100644
index 00000000000..67d6412fcc1
--- /dev/null
+++ b/Build/source/texk/tetex/updmap.cfg.5
@@ -0,0 +1,137 @@
+.\" Hey, Emacs! This is an -*- nroff -*- source file.
+.\"
+.\" Copyright (C) 2004 Hilmar Preusse <hille42@web.de>
+.\"
+.\" This 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, or (at your option) any later
+.\" version.
+.\"
+.\" This 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 with
+.\" your Debian GNU/Linux system, in /usr/share/common-licenses/GPL, or with
+.\" the dpkg source package as the file COPYING. If not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+.\"
+.TH "UPDMAP.CFG" "5" "AUGUST 2005" "Debian/GNU Linux" ""
+.SH "NAME"
+\fBupdmap.cfg\fR \- configuration of font mapping/inclusion for dvips and
+friends.
+.SH "DESCRIPTION"
+The file \fBupdmap.cfg\fR is the central font configuration file of a
+teTeX system and is read by \fBupdmap\fP(1). It describes if and how
+fonts should be included (or not included) into PS-/PDF-files. This
+works for Outline (Postscript Type1) and Bitmap Fonts (Postscript
+Type3) mostly coming from MetaFont.
+.PP
+\fBupdmap\fP is a utility that creates font configuration files for
+\fBdvips\fP(1), \fBpdftex\fP(1), \fBxdvi\fP(1), \fBps2pk\fP(1),
+\fBgsftopk\fP(1), \fBdvipdfm\fP(1) and (soon) \fBdvipdfmx\fP(1)\&. In
+an ideal world, updmap would be unnecessary -- each of these programs
+would read the same configuration file to learn what fonts are
+available and how they should be treated\&. As things stand, however,
+each of these tools has subtly different requirements and thereby
+needs its own font configuration file\&. \fBupdmap\fP creates font
+configuration files for all of these programs from a single source,
+\fBupdmap.cfg\fR, allowing you to easily keep all the different
+configuration files in sync\&.
+.P
+\fBdvipsPreferOutline\fR
+.br
+Configures if \fBdvips\fR (by default) should prefer bitmap fonts or outline fonts
+if both are available? Independent of this setting, outlines can be forced
+by putting "p psfonts_t1.map" into a config file that dvips reads. Bitmaps
+can be forced by putting "p psfonts_pk.map" into a config file. We provide
+such config files which can be enabled via
+\fBdvips\fR \fI-Poutline\fR ... resp. \fBdvips\fR \fI-Ppk\fR ...
+.br
+Valid settings for dvipsPreferOutline are \fItrue\fR / \fIfalse\fR.
+.P
+\fBLW35\fR
+.br
+Which fonts of the "Basic 35 Laserwriter Fonts" do you want to use and
+how are the filenames chosen? Valid settings:
+.br
+URW: URW fonts with "vendor" filenames (e.g. n019064l.pfb)
+.br
+URWkb: URW fonts with "berry" filenames (e.g. uhvbo8ac.pfb)
+.br
+ADOBE: Adobe fonts with "vendor" filenames (e.g. hvnbo___.pfb)
+.br
+ADOBEkb: Adobe fonts with "berry" filenames (e.g. phvbo8an.pfb)
+.P
+\fBdvipsDownloadBase\fR
+.br
+Configures if \fBdvips\fR (by default) should download the standard 35 LaserWriter
+fonts into the document (set \fItrue\fR) or should these fonts be used from the ps
+interpreter / printer (set \fIfalse\fR).
+.br
+The user can override the default by specifying \fBdvips\fR \fI-Pdownload35\fR
+... resp. \fBdvips\fR \fI-Pbuiltin35\fR ... to either download the LW35 fonts resp. use the
+built-in fonts.
+.br
+Valid settings are \fItrue\fR / \fIfalse\fR.
+.P
+\fBpdftexDownloadBase14\fR
+.br
+Should \fBpdftex\fR download the base 14 pdf fonts? Since some configurations
+(ps / pdf tools / printers) use bad default fonts, it is safer to download
+the fonts. The pdf files will get bigger, though.
+.br
+Valid settings are \fItrue\fR (download the fonts) or \fIfalse\fR (don't
+download the fonts). Adobe recomments to embed all fonts.
+.P
+\fBdvipdfmDownloadBase14\fR
+.br
+Should \fBdvipdfm\fR download the base 14 pdf fonts? Since some configurations
+(ps / pdf tools / printers) use bad default fonts, it is safer to download
+the fonts. The pdf files will get bigger, though.
+.br
+Valid settings are \fItrue\fR (download the fonts) or \fIfalse\fR (don't
+download the fonts).
+.P
+\fBMap\fR
+.br
+Points to a map file, which describes a mapping from a font (called in the TeX
+document) to the pfb file containing the Postscript code.
+.br
+Usage: \fBMap\fR filename.map
+.P
+The syntax of map files is the same as \fBdvips\fP(1) uses, see
+section 6.4, "'psfonts.map': PostScript font catalog" in the manual of
+\fBdvips\fP(1), available as info and pdf file.
+.P
+\fBMixedMap\fR
+.br
+Similar to \fBMap\fR. It should be used when there is Type1 and a bitmap
+implementation of the font (the latter mostly coming from MetaFont). These
+entries will not be used in the default map of \fBdvips\fR if
+\fBdvipsPreferOutline\fR is set to \fIfalse\fR.
+.br
+Usage: \fBMixedMap\fR filename.map
+.P
+The sign \fB#\fR precedes a comment.
+.P
+Not used Map files should be commented out using the string \fB#!\fR at the
+beginning of the line. These entries can be (de-)activaed using \fBupdmap\fR
+with the options \fI--enable\fR and \fI--disable\fR.
+.SH "SPECIAL TO DEBIAN"
+In Debian the file \fBupdmap.cfg\fR is a generated file sitting in /var. It is
+generated by concatenating the *.cfg files from /etc/texmf/updmap.d/. These
+files follow the syntax of updmap.cfg, but contain only parts of it.
+.SH "AUTHOR"
+This manual page was written by Hilmar Preusse <hille42@web.de>, for
+the Debian GNU/Linux system by simply copying the comments from
+\fBupdmap.cfg\fR and rewriting some of them. It may be used by other
+distributions without contacting the author. Any mistakes or omissions in
+the manual page are my fault; inquiries about or corrections to this manual
+page should be directed to me (and not to the primary author).
+.SH "SEE ALSO"
+updmap(1), info page of dvips(1)
+.SH "THANKS TO"
+Frank Kuester,
+Thomas Esser.
diff --git a/Build/source/texk/tetex/updmap.man b/Build/source/texk/tetex/updmap.man
new file mode 100644
index 00000000000..7ee7cbdf77f
--- /dev/null
+++ b/Build/source/texk/tetex/updmap.man
@@ -0,0 +1,260 @@
+.TH "updmap" "1" "February 2005" "teTeX" "teTeX"
+.PP
+.SH "NAME"
+updmap \- Update font map files for TeX output drivers\&.
+.PP
+updmap-sys \- Update font map files for TeX output drivers system\-wide\&.
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBupdmap\fP [ \fIOPTION\fP \&.\&.\&. ] [
+\fICOMMAND\fP \&.\&.\&. ]
+.PP
+\fBupdmap-sys\fP [ \fIOPTION\fP \&.\&.\&. ] [
+\fICOMMAND\fP \&.\&.\&. ]
+.PP
+.SH "DESCRIPTION"
+.PP
+\fBupdmap\fP is a utility that creates font configuration files for
+\fBdvips\fP(1), \fBpdftex\fP(1), \fBxdvi\fP(1),
+\fBps2pk\fP(1), \fBgsftopk\fP(1), \fBdvipdfm\fP(1) and (soon) \fBdvipdfmx\fP(1)\&.
+In an ideal world, updmap would be unnecessary -- each of these
+programs would read the same configuration file to learn what fonts
+are available and how they should be treated\&. As things stand,
+however, each of these tools has subtly different requirements and
+thereby needs its own font configuration file\&. \fBupdmap\fP creates
+font configuration files for all of these programs from a single
+source, allowing you to easily keep all the different configuration
+files in sync\&.
+.PP
+\fBupdmap\fP reads a configuration file, \fBupdmap\&.cfg\fP(5) and,
+depending on the options specified in that file and on the command
+line, \fBupdmap\fP will write generated map files to a directory of
+your choosing (via one of the \fB--*outputdir\fP options), or automatically
+determine where to place the files\&. In the latter case, it tries to
+use the tree where the variable TEXMFVAR points to.
+When used with the options \fB--edit\fP, \fB--setoption\fP,
+\fB--enable\fP, \fB--disable\fP, or \fB--syncwithtrees\fP, \fBupdmap\fP will first write
+\fBupdmap\&.cfg\fP(5) and regenerate the map files only if this file
+has been changed\&.
+.PP
+.SH "OPTIONS"
+.PP
+The following command-line options are available:
+.IP
+.IP "\fB--cnffile\fP \fIfile\fP"
+Specify a configuration \fIfile\fP\&.
+.IP
+.IP "\fB--dvipsoutputdir\fP \fIdirectory\fP"
+Specify the output
+\fIdirectory\fP for map files generated with dvips syntax\&.
+.IP
+.IP "\fB--pdftexoutputdir\fP \fIdirectory\fP"
+Specify the output
+\fIdirectory\fP for map files generated with pdftex syntax\&.
+.IP
+.IP "\fB--dvipdfmoutputdir\fP \fIdirectory\fP"
+Specify the output
+\fIdirectory\fP for map files generated with dvipdfm syntax\&.
+.IP
+.IP "\fB--outputdir\fP \fIdirectory\fP"
+Specify the output
+\fIdirectory\fP for all generated map files\&.
+.IP
+.IP "\fB--nohash\fP"
+Do not run \fBtexhash\fP(1)\&.
+.IP
+.IP "\fB--nomkmap\fP"
+Do not recreate existing map files\&.
+.IP
+.IP "\fB--quiet\fP"
+Reduce verbosity\&.
+.IP
+.PP
+The following commands can be substituted for \fICOMMAND\fP:
+.IP
+.IP "\fB--edit\fP"
+Edit the \fIupdmap\&.cfg\fP file\&.
+.IP
+.IP "\fB--help\fP"
+Show a command and option summary\&.
+.IP
+.IP "\fB--showoptions\fP \fIitem\fP"
+Show alternatives for option
+\fIitem\fP\&.
+.IP
+.IP "\fB--setoption\fP \fIoption\fP \fIvalue\fP"
+Set
+\fIoption\fP to \fIvalue\fP, where \fIoption\fP is one of:
+.IP ""
+\fBdvipsPreferOutline\fP
+.IP ""
+\fBLW35\fP
+.IP ""
+\fBdvipsDownloadBase35\fP
+.IP ""
+\fBpdftexDownloadBase14\fP
+.IP ""
+\fBdvipdfmDownloadBase14\fP
+.IP
+.IP "\fB--enable\fP \fImaptype\fP \fImapfile\fP"
+Add or enable a \fBMap\fP or \fBMixedMap\fP for \fImapfile\fP\&.
+.IP
+.IP "\fB--enable Map=\fImapfile\fP"
+Add or enable a Map for \fImapfile\fP\&.
+.IP
+.IP "\fB--enable MixedMap=\fP\fImapfile\fP"
+Add or enable a MixedMap for \fImapfile\fP\&.
+.IP
+.IP "\fB--disable\fP \fImapfile\fP"
+Disable Map or MixedMap for \fImapfile\fP\&.
+.IP
+.IP "\fB--syncwithtrees\fP"
+Disable entries in the config file that refer to map files which are
+unavailable\&.
+.IP
+.IP "\fB--listmaps\fP"
+List all active and inactive maps\&.
+.IP
+.IP "\fB--listavailablemaps\fP"
+List all active and inactive maps, but restrict output to map files
+that are available in one of the texmf trees\&.
+.PP
+.SH "FILES"
+.PP
+Configuration and input files:
+.IP "\fIupdmap\&.cfg\fP"
+Main configuration file\&. In
+\fItexmf/web2c\fP by default, but may be located elsewhere
+depending on your distribution\&.
+.IP
+.IP "\fIdvips35\&.map\fP"
+Map file for standard 35 PostScript fonts for
+use with \fBdvips\fP(1)\&.
+.IP
+.IP "\fIpdftex35\&.map\fP"
+Map file for standard 35 PostScript fonts for
+use with \fBpdftex\fP(1)\&.
+.IP
+.IP "\fIdvipdfm35\&.map\fP"
+Map file for standard 35 PostScript fonts for
+use with \fBdvipdfm\fP(1)\&.
+.IP
+.IP "\fIps2pk35\&.map\fP"
+Map file for standard 35 PostScript fonts for
+use with \fBps2pk\fP(1)\&.
+.IP
+.PP
+Output files:
+.IP
+.IP "\fIpsfonts\&.map\fP"
+For \fBdvips\fP(1)\&.
+Soft link
+against \fIpsfonts_t1\&.map\fP if option \fBdvipsPreferOutline\fP active,
+else against \fIpsfonts_pk\&.map\fP.
+.IP
+.IP "\fIpsfonts_pk\&.map\fP"
+For \fBdvips\fP(1)\&.
+Without information from MixedMap files\&.
+(Setting of \fBdvipsPreferOutline\fP ignored\&.)
+.IP
+.IP "\fIpsfonts_t1\&.map\fP"
+For \fBdvips\fP(1)\&.
+With information from MixedMap files\&.
+(Setting of \fBdvipsPreferOutline\fP ignored\&.)
+.IP
+.IP "\fIdownload35\&.map\fP"
+For \fBdvips\fP(1)\&.
+Always downloads the standard 35 fonts\&.
+(Setting of \fBdvipsDownloadBase35\fP ignored\&.)
+.IP
+.IP "\fIbuiltin35\&.map\fP"
+For \fBdvips\fP(1)\&.
+Never downloads the standard 35 fonts\&.
+(Setting of \fBdvipsDownloadBase35\fP ignored\&.)
+.IP
+.IP "\fIpdftex\&.map\fP"
+For \fBpdftex\fP(1)\&.
+Soft link
+against \fIpdftex_dl14\&.map\fP if option \fBpdftexDownloadBase14\fP active,
+else against \fIpdftex_ndl14\&.map\fP.
+.IP
+.IP "\fIpdftex_dl14\&.map\fP"
+For \fBpdftex\fP(1)\&.
+Always downloads the standard 14 fonts\&.
+.IP
+.IP "\fIpdftex_ndl14\&.map\fP"
+For \fBpdftex\fP(1)\&.
+Never downloads the standard 14 fonts\&.
+.IP
+.IP "\fIdvipdfm\&.map\fP"
+For \fBdvipdfm\fP(1)\&.
+Soft link
+against \fIdvipdfm_dl14\&.map\fP if option \fBdvipdfmDownloadBase14\fP active,
+else against \fIdvipdfm_ndl14\&.map\fP.
+.IP "\fIdvipdfm_dl14\&.map\fP"
+For \fBdvipdfm\fP(1)\&.
+Always downloads the standard 14 fonts\&.
+.IP
+.IP "\fIdvipdfm_ndl14\&.map\fP"
+For \fBdvipdfm\fP(1)\&.
+Never downloads the standard 14 fonts\&.
+.IP
+.IP "\fIps2pk\&.map\fP"
+Similar to \fIpsfonts.map\fP file, but
+forces all fonts to be downloaded, so this map file can be used with
+\fBxdvi\fP(1) and \fBps2pk\fP(1)\&.
+.IP
+.PP
+teTeX configuration files for \fBdvips\fP(1) tuned for use with \fBupdmap\fP:
+.IP
+.IP "\fIconfig\&.builtin35\fP"
+Loads \fIbuildin35\&.map\fP instead
+of \fIpsfonts\&.map\fP\&.
+.IP
+.IP "\fIconfig\&.download35\fP"
+Loads \fIdownload35\&.map\fP instead
+of \fIpsfonts\&.map\fP\&.
+.IP
+.IP "\fIconfig\&.outline\fP"
+Loads \fIpsfonts_t1\&.map\fP instead
+of \fIpsfonts\&.map\fP\&.
+.IP
+.IP "\fIconfig\&.pdf\fP"
+Loads \fIpsfonts_t1\&.map\fP instead
+of \fIpsfonts\&.map\fP and has additional optimizations for PDF generation\&.
+.IP
+.IP "\fIconfig\&.pk\fP"
+Loads \fIpsfonts_pk\&.map\fP instead
+of \fIpsfonts\&.map\fP\&.
+.IP
+.IP "\fIconfig\&.www\fP"
+Loads \fIpsfonts_t1\&.map\fP instead
+of \fIpsfonts\&.map\fP\&.
+(For compatibility with previous versions of teTeX\&.)
+.IP
+.IP "\fIconfig\&.gstopk\fP"
+Loads \fIpsfonts_t1\&.map\fP instead
+of \fIpsfonts\&.map\fP\&.
+.IP
+.PP
+.SH "SEE ALSO"
+.PP
+\fBupdmap\&.cfg\fP(5), \fBdvipdfm\fP(1), \fBdvips\fP(1),
+\fBgsftopk\fP(1), \fBpdftex\fP(1), \fBps2pk\fP(1),
+\fBtexhash\fP(1), \fBxdvi\fP(1)\&.
+.PP
+Web page: \fI<http://tug\&.org/teTeX/>\fP
+.PP
+.SH "BUGS"
+.PP
+None known, but report any bugs found to <tetex@dbs\&.uni-hannover\&.de> (mailing list)\&.
+.PP
+.SH "AUTHOR"
+.PP
+\fBupdmap\fP was written by Thomas Esser
+<te@dbs\&.uni-hannover\&.de> and is in the public domain\&.
+.PP
+This manual page was written by C\&.M\&. Connelly
+<cmc@debian\&.org>, for
+the Debian GNU/Linux system and later slightly adapted for teTeX 3\&.
diff --git a/Build/source/texk/tetex/updmap.pl b/Build/source/texk/tetex/updmap.pl
new file mode 100644
index 00000000000..a7c03e996d4
--- /dev/null
+++ b/Build/source/texk/tetex/updmap.pl
@@ -0,0 +1,1136 @@
+###############################################################################
+# updmap: utility to maintain map files for outline fonts.
+#
+# Thomas Esser, (C) 2002. Public domain.
+# Fabrice Popineau, for the Perl version.
+#
+# Commands:
+# --edit edit config file
+# --help show help message
+#
+# Options:
+# --cnffile file specify configuration file
+# --dvipsoutputdir directory specify output directory (dvips syntax)
+# --pdftexoutputdir directory specify output directory (pdftex syntax)
+# --dvipdfmoutputdir directory specify output directory (dvipdfm syntax)
+# --outputdir directory specify output directory (for all files)
+# --quiet reduce verbosity
+###############################################################################
+
+require "newgetopt.pl";
+use Cwd;
+use Strict;
+use File::Copy;
+use File::Compare;
+use File::Path;
+
+# my $IsWin32 = ($^O =~ /MSWin32/i);
+
+# if ($IsWin32) {
+# use Win32::Registry;
+# use Win32::API;
+# }
+
+my $progname;
+my $cnfFile;
+my $cnfFileShort;
+my $outputdir;
+my $dvipsoutputdir;
+my $pdftexoutputdir;
+my $dvipdfmoutputdir;
+my $quiet;
+my $texhashEnabled;
+my $mkmapEnabled;
+
+my %enableItem = ();
+my %setOption = ();
+my @showoptions = ();
+my @disableItem = ();
+my $listmaps;
+my $needsCleanup;
+
+my $verbose;
+my $debug;
+my $opt_edit;
+my $opt_help;
+
+my $TEXMFMAIN;
+my $VARTEXMF;
+
+my $mode;
+my $dvipsPreferOutline;
+my $dvipsDownloadBase35;
+my $pdftexDownloadBase14;
+my $dvipdfmDownloadBase14;
+
+my $dvips35;
+my $pdftex35;
+my $dvipdfm35;
+my $ps2pk35;
+
+my @cfg = ( );
+
+my @psADOBE = (
+ 's/ URWGothicL-Demi / AvantGarde-Demi /x',
+ 's/ URWGothicL-DemiObli / AvantGarde-DemiOblique /x',
+ 's/ URWGothicL-Book / AvantGarde-Book /x',
+ 's/ URWGothicL-BookObli / AvantGarde-BookOblique /x',
+ 's/ URWBookmanL-DemiBold / Bookman-Demi /x',
+ 's/ URWBookmanL-DemiBoldItal / Bookman-DemiItalic /x',
+ 's/ URWBookmanL-Ligh / Bookman-Light /x',
+ 's/ URWBookmanL-LighItal / Bookman-LightItalic /x',
+ 's/ NimbusMonL-Bold / Courier-Bold /x',
+ 's/ NimbusMonL-BoldObli / Courier-BoldOblique /x',
+ 's/ NimbusMonL-Regu / Courier /x',
+ 's/ NimbusMonL-ReguObli / Courier-Oblique /x',
+ 's/ NimbusSanL-Bold / Helvetica-Bold /x',
+ 's/ NimbusSanL-BoldCond / Helvetica-Narrow-Bold /x',
+ 's/ NimbusSanL-BoldItal / Helvetica-BoldOblique /x',
+ 's/ NimbusSanL-BoldCondItal / Helvetica-Narrow-BoldOblique /x',
+ 's/ NimbusSanL-Regu / Helvetica /x',
+ 's/ NimbusSanL-ReguCond / Helvetica-Narrow /x',
+ 's/ NimbusSanL-ReguItal / Helvetica-Oblique /x',
+ 's/ NimbusSanL-ReguCondItal / Helvetica-Narrow-Oblique /x',
+ 's/ CenturySchL-Bold / NewCenturySchlbk-Bold /x',
+ 's/ CenturySchL-BoldItal / NewCenturySchlbk-BoldItalic /x',
+ 's/ CenturySchL-Roma / NewCenturySchlbk-Roman /x',
+ 's/ CenturySchL-Ital / NewCenturySchlbk-Italic /x',
+ 's/ URWPalladioL-Bold / Palatino-Bold /x',
+ 's/ URWPalladioL-BoldItal / Palatino-BoldItalic /x',
+ 's/ URWPalladioL-Roma / Palatino-Roman /x',
+ 's/ URWPalladioL-Ital / Palatino-Italic /x',
+ 's/ StandardSymL / Symbol /x',
+ 's/ NimbusRomNo9L-Medi / Times-Bold /x',
+ 's/ NimbusRomNo9L-MediItal / Times-BoldItalic /x',
+ 's/ NimbusRomNo9L-Regu / Times-Roman /x',
+ 's/ NimbusRomNo9L-ReguItal / Times-Italic /x',
+ 's/ URWChanceryL-MediItal / ZapfChancery-MediumItalic /x',
+ 's/ Dingbats / ZapfDingbats /x'
+ );
+
+my @fileADOBEkb = (
+ 's/\buagd8a.pfb\b/pagd8a.pfb/x',
+ 's/\buagdo8a.pfb\b/pagdo8a.pfb/x',
+ 's/\buagk8a.pfb\b/pagk8a.pfb/x',
+ 's/\buagko8a.pfb\b/pagko8a.pfb/x',
+ 's/\bubkd8a.pfb\b/pbkd8a.pfb/x',
+ 's/\bubkdi8a.pfb\b/pbkdi8a.pfb/x',
+ 's/\bubkl8a.pfb\b/pbkl8a.pfb/x',
+ 's/\bubkli8a.pfb\b/pbkli8a.pfb/x',
+ 's/\bucrb8a.pfb\b/pcrb8a.pfb/x',
+ 's/\bucrbo8a.pfb\b/pcrbo8a.pfb/x',
+ 's/\bucrr8a.pfb\b/pcrr8a.pfb/x',
+ 's/\bucrro8a.pfb\b/pcrro8a.pfb/x',
+ 's/\buhvb8a.pfb\b/phvb8a.pfb/x',
+ 's/\buhvb8ac.pfb\b/phvb8an.pfb/x',
+ 's/\buhvbo8a.pfb\b/phvbo8a.pfb/x',
+ 's/\buhvbo8ac.pfb\b/phvbo8an.pfb/x',
+ 's/\buhvr8a.pfb\b/phvr8a.pfb/x',
+ 's/\buhvr8ac.pfb\b/phvr8an.pfb/x',
+ 's/\buhvro8a.pfb\b/phvro8a.pfb/x',
+ 's/\buhvro8ac.pfb\b/phvro8an.pfb/x',
+ 's/\buncb8a.pfb\b/pncb8a.pfb/x',
+ 's/\buncbi8a.pfb\b/pncbi8a.pfb/x',
+ 's/\buncr8a.pfb\b/pncr8a.pfb/x',
+ 's/\buncri8a.pfb\b/pncri8a.pfb/x',
+ 's/\buplb8a.pfb\b/pplb8a.pfb/x',
+ 's/\buplbi8a.pfb\b/pplbi8a.pfb/x',
+ 's/\buplr8a.pfb\b/pplr8a.pfb/x',
+ 's/\buplri8a.pfb\b/pplri8a.pfb/x',
+ 's/\busyr.pfb\b/psyr.pfb/x',
+ 's/\butmb8a.pfb\b/ptmb8a.pfb/x',
+ 's/\butmbi8a.pfb\b/ptmbi8a.pfb/x',
+ 's/\butmr8a.pfb\b/ptmr8a.pfb/x',
+ 's/\butmri8a.pfb\b/ptmri8a.pfb/x',
+ 's/\buzcmi8a.pfb\b/pzcmi8a.pfb/x',
+ 's/\buzdr.pfb\b/pzdr.pfb/x'
+ );
+
+my @fileURW = (
+ 's/\buagd8a.pfb\b/a010015l.pfb/x',
+ 's/\buagdo8a.pfb\b/a010035l.pfb/x',
+ 's/\buagk8a.pfb\b/a010013l.pfb/x',
+ 's/\buagko8a.pfb\b/a010033l.pfb/x',
+ 's/\bubkd8a.pfb\b/b018015l.pfb/x',
+ 's/\bubkdi8a.pfb\b/b018035l.pfb/x',
+ 's/\bubkl8a.pfb\b/b018012l.pfb/x',
+ 's/\bubkli8a.pfb\b/b018032l.pfb/x',
+ 's/\bucrb8a.pfb\b/n022004l.pfb/x',
+ 's/\bucrbo8a.pfb\b/n022024l.pfb/x',
+ 's/\bucrr8a.pfb\b/n022003l.pfb/x',
+ 's/\bucrro8a.pfb\b/n022023l.pfb/x',
+ 's/\buhvb8a.pfb\b/n019004l.pfb/x',
+ 's/\buhvb8ac.pfb\b/n019044l.pfb/x',
+ 's/\buhvbo8a.pfb\b/n019024l.pfb/x',
+ 's/\buhvbo8ac.pfb\b/n019064l.pfb/x',
+ 's/\buhvr8a.pfb\b/n019003l.pfb/x',
+ 's/\buhvr8ac.pfb\b/n019043l.pfb/x',
+ 's/\buhvro8a.pfb\b/n019023l.pfb/x',
+ 's/\buhvro8ac.pfb\b/n019063l.pfb/x',
+ 's/\buncb8a.pfb\b/c059016l.pfb/x',
+ 's/\buncbi8a.pfb\b/c059036l.pfb/x',
+ 's/\buncr8a.pfb\b/c059013l.pfb/x',
+ 's/\buncri8a.pfb\b/c059033l.pfb/x',
+ 's/\buplb8a.pfb\b/p052004l.pfb/x',
+ 's/\buplbi8a.pfb\b/p052024l.pfb/x',
+ 's/\buplr8a.pfb\b/p052003l.pfb/x',
+ 's/\buplri8a.pfb\b/p052023l.pfb/x',
+ 's/\busyr.pfb\b/s050000l.pfb/x',
+ 's/\butmb8a.pfb\b/n021004l.pfb/x',
+ 's/\butmbi8a.pfb\b/n021024l.pfb/x',
+ 's/\butmr8a.pfb\b/n021003l.pfb/x',
+ 's/\butmri8a.pfb\b/n021023l.pfb/x',
+ 's/\buzcmi8a.pfb\b/z003034l.pfb/x',
+ 's/\buzdr.pfb\b/d050000l.pfb/x'
+ );
+
+my @fileADOBE = (
+ 's/\buagd8a.pfb\b/agd_____.pfb/x',
+ 's/\buagdo8a.pfb\b/agdo____.pfb/x',
+ 's/\buagk8a.pfb\b/agw_____.pfb/x',
+ 's/\buagko8a.pfb\b/agwo____.pfb/x',
+ 's/\bubkd8a.pfb\b/bkd_____.pfb/x',
+ 's/\bubkdi8a.pfb\b/bkdi____.pfb/x',
+ 's/\bubkl8a.pfb\b/bkl_____.pfb/x',
+ 's/\bubkli8a.pfb\b/bkli____.pfb/x',
+ 's/\bucrb8a.pfb\b/cob_____.pfb/x',
+ 's/\bucrbo8a.pfb\b/cobo____.pfb/x',
+ 's/\bucrr8a.pfb\b/com_____.pfb/x',
+ 's/\bucrro8a.pfb\b/coo_____.pfb/x',
+ 's/\buhvb8a.pfb\b/hvb_____.pfb/x',
+ 's/\buhvb8ac.pfb\b/hvnb____.pfb/x',
+ 's/\buhvbo8a.pfb\b/hvbo____.pfb/x',
+ 's/\buhvbo8ac.pfb\b/hvnbo___.pfb/x',
+ 's/\buhvr8a.pfb\b/hv______.pfb/x',
+ 's/\buhvr8ac.pfb\b/hvn_____.pfb/x',
+ 's/\buhvro8a.pfb\b/hvo_____.pfb/x',
+ 's/\buhvro8ac.pfb\b/hvno____.pfb/x',
+ 's/\buncb8a.pfb\b/ncb_____.pfb/x',
+ 's/\buncbi8a.pfb\b/ncbi____.pfb/x',
+ 's/\buncr8a.pfb\b/ncr_____.pfb/x',
+ 's/\buncri8a.pfb\b/nci_____.pfb/x',
+ 's/\buplb8a.pfb\b/pob_____.pfb/x',
+ 's/\buplbi8a.pfb\b/pobi____.pfb/x',
+ 's/\buplr8a.pfb\b/por_____.pfb/x',
+ 's/\buplri8a.pfb\b/poi_____.pfb/x',
+ 's/\busyr.pfb\b/sy______.pfb/x',
+ 's/\butmb8a.pfb\b/tib_____.pfb/x',
+ 's/\butmbi8a.pfb\b/tibi____.pfb/x',
+ 's/\butmr8a.pfb\b/tir_____.pfb/x',
+ 's/\butmri8a.pfb\b/tii_____.pfb/x',
+ 's/\buzcmi8a.pfb\b/zcmi____.pfb/x',
+ 's/\buzdr.pfb\b/zd______.pfb/x'
+ );
+
+my %base14RemovePSName = (
+ '/^[^\s]*\sCourier\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sCourier-Bold\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sCourier-Oblique\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sCourier-BoldOblique\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sHelvetica\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sHelvetica-Bold\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sHelvetica-Oblique\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sHelvetica-BoldOblique\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sSymbol\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sTimes-Roman\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sTimes-Bold\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sTimes-Italic\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sTimes-BoldItalic\s/' => 's/\s[^\s]*//',
+ '/^[^\s]*\sZapfDingbats\s/' => 's/\s[^\s]*//'
+);
+
+&main;
+
+exit 0;
+
+# if ($IsWin32) {
+
+# sub GetTempPath {
+# my $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
+# if(not defined $GetTempPath) {
+# die "Can't import API GetTempPath: $!\n";
+# }
+# my $lpBuffer = " " x 260;
+
+# $GetTempPath->Call(80, $lpBuffer);
+# }
+
+# sub ShellExecute {
+# my ($command, $file) = @_;
+# my $ShellExecute = new Win32::API('shell32', 'ShellExecute', 'NPPPPN', 'N');
+# if(not defined $ShellExecute) {
+# die "Can't import API ShellExecute: $!\n";
+# }
+# $ShellExecute->Call(0, $command, $file, '', '', 0);
+# }
+
+# sub GetHomeDir {
+# my $home = $ENV{'HOME'};
+# # Should check for CSIDL_...
+# return $home;
+# }
+# }
+
+###############################################################################
+# getLines()
+# return the lines in $filename
+###############################################################################
+sub getLines {
+ my @lines = ();
+ foreach my $fname (@_) {
+ next if (! $fname);
+ open FILE, "<$fname" or die "can't get lines from $fname: $!";
+ push @lines, <FILE>;
+ close FILE;
+ }
+ chomp @lines;
+ return @lines;
+}
+
+###############################################################################
+# writeLines()
+# write the lines in $filename
+###############################################################################
+sub writeLines {
+ my ($fname, @lines) = @_;
+ map { ($_ !~ m/\n$/ ? s/$/\n/ : $_ ) } @lines;
+ open FILE, ">$fname" or die "can't write lines to $fname: $!";
+ print FILE @lines;
+ close FILE;
+}
+
+###############################################################################
+# copyFile()
+# copy file $src to $dst, sets $dst creation and mod time
+###############################################################################
+sub copyFile {
+ my ($src, $dst) = @_;
+
+ $src eq $dst && return "can't copy $src to itself!\n";
+
+ open IN, "<$src" or die "can't open source file $src for copying: $!";
+ open OUT, ">$dst";
+
+ binmode(IN);
+ binmode(OUT);
+ print OUT <IN>;
+ close(OUT);
+ close(IN);
+ my @t = stat($src);
+ utime($t[8], $t[9], $dst);
+}
+
+###############################################################################
+# start_redirection(), stop_redirection()
+# redirects stdout and stderr to log file (possibly "nul")
+###############################################################################
+sub start_redirection {
+ my ($log) = @_;
+
+ # start redirection if asked
+ if ($log) {
+ open(SO, ">&STDOUT");
+ open(SE, ">&STDERR");
+
+ close(STDOUT);
+ close(STDERR);
+
+ open(STDOUT, ">$log");
+ open(STDERR,">&STDOUT");
+
+ select(STDERR); $| = 1;
+ select(STDOUT); $| = 1;
+ }
+}
+
+sub stop_redirection {
+ close(STDOUT);
+ close(STDERR);
+ open(STDOUT, ">&SO");
+ open(STDERR, ">&SE");
+}
+
+###############################################################################
+# help()
+# display help message and exit
+###############################################################################
+sub help {
+ print "Usage: $0 [option] ... [command]\n";
+ print "\n";
+ print "Valid options:\n";
+ print " --cnffile file specify configuration file\n";
+ print " --dvipsoutputdir directory specify output directory (dvips syntax)\n";
+ print " --pdftexoutputdir directory specify output directory (pdftex syntax)\n";
+ print " --dvipdfmoutputdir directory specify output directory (dvipdfm syntax)\n";
+ print " --outputdir directory specify output directory (for all files)\n";
+ print " --nohash do not run texhash\n";
+ print " --nomkmap do not recreate map files\n";
+ print " --quiet reduce verbosity\n";
+ print "\n";
+ print "Valid commands:\n";
+ print " --edit edit updmap.cfg file\n";
+ print " --help show this message\n";
+ print " --showoptions item show alternatives for options\n";
+ print " --setoption option value set option where option is one\n";
+ print " of dvipsPreferOutline, LW35, dvipsDownloadBase35\n";
+ print " or pdftexDownloadBase14\n";
+ print " --enable maptype=mapfile add or enable a Map or MixedMap\n";
+ print " --disable mapfile disable Map or MixedMap for mapfile\n";
+ print " --listmaps list all active and inactive maps\n";
+ exit 0;
+}
+
+###############################################################################
+# abort(errmsg)
+# print `errmsg' to stderr and exit with error code 1
+###############################################################################
+sub abort {
+ my ($msg) = @_;
+ print STDERR "$progname: $msg\n";
+ exit 1;
+}
+
+###############################################################################
+# cfgval(variable)
+# read variable ($1) from config file
+###############################################################################
+sub cfgval {
+ my ($variable) = @_;
+ my $value;
+
+ if ($#cfg < 0) {
+ open FILE, "<$cnfFile" or die "can't open configuration file $cnfFile: $!";
+ @cfg = <FILE>;
+ close FILE;
+ }
+ for my $line (@cfg) {
+ if ($line =~ m/^\s*${variable}[\s=]+(.*)\s*$/) {
+ $value = $1;
+ if ($value =~ m/^(true|yes|t|y|1)$/) {
+ $value = 1;
+ }
+ else {
+ $value = 0;
+ }
+ break;
+ }
+ }
+ print "$variable => " . ($value ? "true\n" : "false\n");
+ return $value;
+}
+
+###############################################################################
+# setupSymlinks()
+# set symlink for psfonts.map according to dvipsPreferOutline variable
+###############################################################################
+sub setupSymlinks {
+ my $src;
+
+ if ($dvipsPreferOutline ) {
+ $src = "psfonts_t1.map";
+ } else {
+ $src = "psfonts_pk.map";
+ }
+ unlink "$dvipsoutputdir/psfonts.map";
+ &copyFile("$dvipsoutputdir/$src", "$dvipsoutputdir/psfonts.map");
+
+ if ($pdftexDownloadBase14) {
+ $src = "pdftex_dl14.map";
+ } else {
+ $src = "pdftex_ndl14.map";
+ }
+ unlink "$pdftexoutputdir/pdftex.map";
+ &copyFile("$pdftexoutputdir/$src", "$pdftexoutputdir/pdftex.map");
+
+ if ($dvipdfmDownloadBase14) {
+ $src = "dvipdfm_dl14.map";
+ } else {
+ $src = "dvipdfm_ndl14.map";
+ }
+ unlink "$dvipdfmoutputdir/dvipdfm.map";
+ &copyFile("$dvipdfmoutputdir/$src", "$dvipdfmoutputdir/dvipdfm.map");
+}
+
+###############################################################################
+# transLW35(args ...)
+# transform fontname and filenames according to transformation specified
+# by mode
+###############################################################################
+sub transLW35 {
+ my ($name) = @_;
+ my @lines = &getLines($name);
+
+ if ($mode eq "" || $mode eq "URWkb") {
+ # do nothing
+ } elsif ($mode eq "URW") {
+ for my $r (@fileURW) {
+ map { eval($r); } @lines;
+ }
+ } elsif ($mode eq "ADOBE" || $mode eq "ADOBEkb") {
+ for my $r (@psADOBE) {
+ map { eval($r); } @lines;
+ }
+ my @filemode = eval ("\@file" .$mode);
+ for my $r (@filemode) {
+ map { eval($r); } @lines;
+ }
+ }
+ return @lines;
+}
+
+sub base14RemovePSName {
+ my @lines = @_;
+ foreach my $r (keys %base14RemovePSName) {
+ map { eval $base14RemovePSName{$r} if (eval($r)) ; } @lines;
+ }
+ return @lines;
+}
+
+###############################################################################
+# locateWeb2c (file ...)
+# apply kpsewhich with format 'web2c files'
+###############################################################################
+sub locateWeb2c {
+
+ my @files = @_;
+
+ return @files if ($#files < 0);
+
+ @files = split (/\n/, `kpsewhich --format="web2c files" @files`);
+
+ if (wantarray) {
+ return @files;
+ }
+ else {
+ return $files[0];
+ }
+}
+
+###############################################################################
+# locateMap (file ...)
+# apply kpsewhich with format 'dvips config'
+###############################################################################
+sub locateMap {
+ my @files = @_;
+
+ return @files if ($#files < 0);
+
+ @files = `kpsewhich --format=map @files`;
+ if (wantarray) {
+ return @files;
+ }
+ else {
+ return $files[0];
+ }
+}
+
+###############################################################################
+# catMaps(regex)
+# filter config file by regex for map lines and extract the map filenames.
+# These are then looked up (by kpsewhich in locateMap) and the content of
+# all map files is send to stdout.
+###############################################################################
+sub catMaps {
+ my ($map) = @_;
+ my %count = ( );
+ my @maps = grep { $_ =~ m/$map/ } @cfg;
+ map{
+ $_ =~ s/\#.*//;
+ $_ =~ s/\s*([^\s]*)\s*([^\s]*)/\2/;
+ } @maps;
+ @maps = sort(@maps);
+ @maps = grep { ++$count{$_} < 2; } @maps;
+
+ @maps = &locateMap(@maps);
+ return @maps;
+}
+
+###############################################################################
+# configReplace(file, pattern, line)
+# The first line in file that matches pattern gets replaced by line.
+# line will be added at the end of the file if pattern does not match.
+###############################################################################
+sub configReplace {
+ my ($file, $pat, $line) = @_;
+ my @lines = &getLines($file);
+ my $found = 0;
+ map {
+ if (/$pat/) {
+ $found = 1; $_ = $line;
+ }
+ } @lines;
+ if (! $found) {
+ push @lines, $line;
+ }
+ &writeLines($file, @lines);
+}
+
+###############################################################################
+# setOption (option, value)
+# sets option to value in the config file (replacing the existing setting
+# or by adding a new line to the config file).
+###############################################################################
+sub setOption {
+ my ($opt, $val) = @_;
+
+ if ($opt eq "LW35") {
+ if ($val !~ m/^(URWkb|URW|ADOBE|ADOBEkb)$/) {
+ printf STDERR "invalid value $val for option $opt\n";
+ exit 1;
+ }
+ }
+ elsif ($opt =~ m/^(dvipsPreferOutline|dvipsDownloadBase35|pdftexDownloadBase14|dvipdfmDownloadBase14)$/) {
+ if ($val !~ m/^(true|false)$/) {
+ printf STDERR "invalid value $val for option $opt\n";
+ exit 1;
+ }
+ }
+ else {
+ printf STDERR "unsupported option $opt\n";
+ exit 1;
+ }
+
+ &configReplace("$cnfFile", "^" . "$opt" . "\\s", "$opt $val");
+}
+
+###############################################################################
+# enableMap (type, map)
+# enables an entry in the config file for map with a given type.
+###############################################################################
+sub enableMap {
+ my ($type, $map) = @_;
+
+ if ($type !~ m/^(Map|MixedMap)$/) {
+ printf STDERR "invalid mapType $type\n";
+ exit 1;
+ }
+ # a map can only have one type, so we carefully disable everything
+ # about map here:
+ &disableMap("$map");
+
+ # now enable with the right type:
+ &configReplace("$cnfFile", "^#!\\s*" . "$type" . "\\s*$map", "$type $map");
+}
+
+###############################################################################
+# disableMap (map)
+# disables map in config file (any type)
+###############################################################################
+sub disableMap {
+ my ($map) = @_;
+ my %count = ( );
+ my $type;
+
+ my @mapType = grep {
+ my @fields = split;
+ if ($fields[0] =~ /^(MixedMap|Map)$/
+ and $fields[1] eq $map
+ and ++$count{$fields[0]}) {
+ $_ = $fields[0];
+ }
+ else {
+ $_ = '';
+ }
+ } &getLines($cnfFile);
+
+ foreach $type (@mapType) {
+ &configReplace("$cnfFile", "^$type" . "\\s*$map", "#! $type $map");
+ }
+}
+
+###############################################################################
+# initVars()
+# initialize global variables
+###############################################################################
+sub initVars {
+ $progname="updmap";
+
+ $quiet = 0;
+ $texhashEnabled = 1;
+ $mkmapEnabled = 1;
+ $verbose = 1;
+ $needsCleanup = 0;
+
+ $cnfFile = "";
+ $cnfFileShort = "updmap.cfg";
+ $outputdir = "";
+ $TEXMFMAIN =`kpsewhich --expand-var="\$TEXMFMAIN"`;
+ chomp($TEXMFMAIN);
+ # tmpdir=${TMP-/tmp}/$progname.$$
+ # tmp1=$tmpdir/a
+ # tmp2=$tmpdir/b
+ # tmp3=$tmpdir/c
+}
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+sub setupTmpDir {
+
+}
+
+###############################################################################
+# showOptions(item)
+# show Options for an item
+###############################################################################
+sub showOptions {
+
+ foreach my $item (@_) {
+ if ($item eq "LW35") {
+ print "URWkb URW ADOBE ADOBEkb\n";
+ }
+ elsif ($item =~ m/"(dvipsPreferOutline|pdftexDownloadBase14|dvipdfmDownloadBase14|dvipsDownloadBase35)"/) {
+ print "true false\n";
+ }
+ else {
+ print "Unknown item \"$item\". Choose one of LW35, dvipsPreferOutline, dvipsDownloadBase35, pdftexDownloadBase14 or dvipdfmDownloadBase14\n";
+# exit 1;
+ }
+ }
+
+ exit 0
+}
+
+###############################################################################
+# setupDestDir()
+# find an output directory if none specified on cmd line. First choice is
+# $VARTEXMF/fonts/map/updmap (if VARTEXMF is set), next is relative to
+# config file location. Fallback is $TEXMFMAIN/fonts/map/updmap.
+###############################################################################
+sub setupOutputDir {
+ my($od, $driver) = @_;
+
+ if (!$od) {
+ my $rel = "fonts/map/$driver/updmap";
+
+ # Try VARTEXMF tree. Use it if variable is set and $rel can
+ # be written. Copy config file if it does not exist there.
+ my $tf = `kpsewhich -expand-var="\$VARTEXMF"`;
+ chomp($tf);
+ if ($tf) {
+ mkpath("$tf/$rel");
+ # system("$TEXMFMAIN/web2c/mktexdir \"$tf/$rel\"");
+ if (! -d "$tf/$rel" || ! -w "$tf/$rel") {
+ # forget about VARTEXMF tree...
+ $tf = "";
+ }
+ }
+
+ # Try something relative to config file, fall back to $TEXMFMAIN.
+ if (! $tf) {
+ $tf = $cnfFile;
+ if ($tf =~ m@/web2c/[^/]*$@) {
+ $tf =~ s@/web2c/[^/]*$@@;
+ }
+ else {
+ $tf = "";
+ }
+ $tf = $TEXMFMAIN if (! $tf);
+ }
+
+ $od = "$tf/$rel";
+ }
+
+ # No need to call mktexdir !
+ # system("$TEXMFMAIN/bin/win32/mktexdir \"$od\"");
+ mkpath($od);
+ &abort("output directory `$od' does not exist\n") if (! -d $od);
+ &abort("output directory `$od' is not writable\n") if (! -w $od);
+ print "using $driver output directory `$od'\n";
+
+ return $od;
+}
+
+sub setupDestDir {
+
+ $dvipsoutputdir = &setupOutputDir($dvipsoutputdir, "dvips");
+ $pdftexoutputdir = &setupOutputDir($pdftexoutputdir, "pdftex");
+ $dvipdfmoutputdir = &setupOutputDir($dvipdfmoutputdir, "dvipdfm");
+
+}
+
+###############################################################################
+# setupCfgFile()
+# find config file if none specified on cmd line.
+###############################################################################
+sub setupCfgFile {
+
+ if (! $cnfFile) {
+ my $tf = `kpsewhich -expand-var="\$VARTEXMF"`;
+ chomp($tf);
+ if ($tf && ! -f "$tf/web2c/$cnfFileShort") {
+ mkpath("$tf/web2c") if (! -d "$tf/web2c");
+# &start_redirection("nul");
+# system("mktexdir $tf/web2c");
+# &stop_redirection;
+ if (-d "$tf/web2c" && -w "$tf/web2c") {
+ unlink "$tf/web2c/$cnfFileShort";
+ &copyFile("$TEXMFMAIN/web2c/$cnfFileShort", "$tf/web2c/$cnfFileShort");
+ &start_redirection("nul");
+ system("mktexupd $tf/web2c $cnfFileShort");
+ &stop_redirection;
+ }
+ }
+
+ $cnfFile = &locateWeb2c("updmap.cfg");
+ if ($cnfFile) {
+ print "using config file $cnfFile\n" if (! $quiet);
+ }
+ else {
+ &abort("config file updmap.cfg not found");
+ }
+ }
+}
+
+
+###############################################################################
+# processOptions()
+# process cmd line options
+###############################################################################
+sub processOptions {
+
+ unless (&NGetOpt ("quiet" => \$quiet,
+ "cnffile=s" => \$cnfFile,
+ "outputdir=s" => \$outputdir,
+ "dvipsoutputdir=s" => \$dvipsoutputdir,
+ "pdftexoutputdir=s" => \$pdftexoutputdir,
+ "dvipdfmoutputdir=s" => \$dvipdfmoutputdir,
+ "setoption=s" => \%setOption,
+ "enable=s" => \%enableItem,
+ "disable=s" => \@disableItem,
+ "edit" => \$opt_edit,
+ "listmaps" => \$listmaps,
+ "showoptions=s" => \@showoptions,
+ "hash!" => \$texhashEnabled,
+ "mkmap!" => \$mkmapEnabled,
+ "verbose" => \$verbose,
+ "debug" => \$debug,
+ "help" => \$opt_help)) {
+ print STDERR "Try `$0 --help'";
+ exit 1;
+ }
+
+ if ($outputdir) {
+ $dvipsoutputdir = $outputdir if (! $dvipsoutputdir);
+ $pdftexoutputdir = $outputdir if (! $pdftexoutputdir);
+ $dvipdfmoutputdir = $outputdir if (! $dvipdfmoutputdir);
+ }
+ if ($cnfFile && ! -f $cnfFile) {
+ &abort("config file `$cnfFile' not found");
+ }
+
+ if ($dvipsoutputdir && ! -d $dvipsoutputdir) {
+ &abort("dvips output directory `$dvipsoutputdir' not found");
+ }
+ if ($pdftexoutputdir && ! -d $pdftexoutputdir) {
+ &abort("pdftex output directory `$pdftexoutputdir' not found");
+ }
+ if ($dvipdfmoutputdir && ! -d $dvipdfmoutputdir) {
+ &abort("dvipdfm output directory `$dvipdfmoutputdir' not found");
+ }
+
+}
+
+###############################################################################
+# listMaps()
+# list all maps mentioned in the config file
+###############################################################################
+sub listMaps {
+ my @lines = grep {
+ $_ =~ m/^(\#! *)?(Mixed)?Map/
+ } &getLines($cnfFile);
+ map { print "$_\n"; } @lines;
+# &writeLines("con", @lines);
+}
+
+###############################################################################
+# normalizeLines()
+# remove comments, whitespace is exactly one space, no empty lines,
+# no whitespace at end of line, one space before and after "
+###############################################################################
+sub normalizeLines {
+ my @lines = @_;
+ my %count = ();
+
+ @lines = grep { $_ !~ m/^%/ } @lines;
+ map {$_ =~ s/\s+/ /gx } @lines;
+ @lines = grep { $_ !~ m/^\s*$/x } @lines;
+ map { $_ =~ s/\s$//x ;
+ $_ =~ s/\s*\"\s*/ \" /gx } @lines;
+
+ @lines = grep {++$count{$_} < 2 } (sort @lines);
+
+ return @lines;
+}
+
+###############################################################################
+# dvips2dvipdfm()
+# reads from stdin, writes to stdout. It transforms "dvips"-like syntax into
+# "dvipdfm"-like syntax. It is a very ugly hack.
+###############################################################################
+sub dvips2dvipdfm {
+ my @lines = @_;
+
+ map {
+ $_ =~ s@$@ %@;
+ $_ =~ s@^(([^ ]*).*)@\1\2@;
+ $_ =~ s@(.*<\[* *([^ ]*)\.enc(.*))@\1 \2@;
+ $_ = (m/%[^ ]*$/x ? "$_ default" : $_) ;
+ $_ =~ s@(.*<<* *([^ ]*)\.pf[ab].*)@\1 \2@;
+ if (m/%[^ ]* [^ ]*$/x) { $_ =~ s@( ([^ ]*).*)$@\1 \2@; }
+ $_ =~ s@(.* ([\.0-9-][\.0-9-]*) *ExtendFont.*)@\1 -e \2@;
+ $_ =~ s@(.* ([\.0-9-][\.0-9-]*) *SlantFont.*)@\1 -s \2@;
+ $_ =~ s@.*%@@ ;
+ } @lines;
+
+ map {
+ my @elts = split (' ', $_);
+ if ($elts[0] eq $elts[2]
+ && $elts[1] eq "default") {
+ $elts[1] = '';
+ $elts[2] = '';
+ };
+ $_ = join ' ',@elts;
+ } @lines;
+
+ map {
+ if (/^(cm|eu|la|lc|line|msam|xy)/) {
+ $_ .= " -r" ;
+ $_ =~ s/(fmex[789]) -r/\1/;
+ }
+ } @lines;
+
+ return @lines;
+}
+
+###############################################################################
+# mkMaps()
+# the main task of this script: create the output files
+###############################################################################
+sub mkMaps {
+
+ $mode = &cfgval("LW35");
+ $mode = "URWkb" if ($mode = undef);
+
+ $dvipsPreferOutline = &cfgval("dvipsPreferOutline");
+ $dvipsPreferOutline = 1 if ($dvipsPreferOutline eq undef);
+
+ $dvipsDownloadBase35 = &cfgval("dvipsDownloadBase35");
+ $dvipsDownloadBase35 = 0 if ($dvipsDownloadBase35 eq undef);
+
+ $pdftexDownloadBase14 = &cfgval("pdftexDownloadBase14");
+ $pdftexDownloadBase14 = 0 if ($pdftexDownloadBase14 eq undef);
+
+ $dvipdfmDownloadBase14 = &cfgval("dvipdfmDownloadBase14");
+ $dvipdfmDownloadBase14 = 0 if ($dvipdfmDownloadBase14 eq undef);
+
+ if (! $quiet) {
+ print "\
+updmap is creating new map files using the following configuration:\
+\
+ config file : " . ($cnfFile ? "true" : "false") ."\
+ prefer outlines : " . ($dvipsPreferOutline ? "true" : "false") ."\
+ texhash enabled : " . ($texhashEnabled ? "true" : "false") ."\
+ download standard fonts (dvips) : " . ($dvipsDownloadBase35 ? "true" : "false") ."\
+ download standard fonts (pdftex) : " . ($pdftexDownloadBase14 ? "true" : "false") . "\
+ download standard fonts (dvipdfm): " . ($dvipdfmDownloadBase14 ? "true" : "false") . "\
+"
+ };
+
+ print "Scanning for LW35 support files\n" if (! $quiet);
+ $dvips35 = &locateMap("dvips35.map");
+ $pdftex35 = &locateMap("pdftex35.map");
+ $dvipdfm35 = &locateMap("dvipdfm35.map");
+ $ps2pk35 = &locateMap("ps2pk35.map");
+
+ print "Scanning for MixedMap entries\n" if (! $quiet);
+ my @tmp1 = &catMaps('^MixedMap');
+ print "Scanning for Map entries\n" if (! $quiet);
+ my @tmp2 = &catMaps('^Map');
+
+ # Create psfonts_t1.map, psfonts_pk.map, ps2pk.map and pdftex.map:
+ for my $file ("$dvipsoutputdir/download35.map",
+ "$dvipsoutputdir/builtin35.map",
+ "$dvipsoutputdir/psfonts_t1.map",
+ "$dvipsoutputdir/psfonts_pk.map",
+ "$pdftexoutputdir/pdftex_dl14.map",
+ "$pdftexoutputdir/pdftex_ndl14.map",
+ "$dvipdfmoutputdir/dvipdfm_dl14.map",
+ "$dvipdfmoutputdir/dvipdfm_ndl14.map",
+ "$dvipsoutputdir/ps2pk.map") {
+ open FILE, ">$file";
+ print FILE "% $file: maintained by the script updmap.\
+% Don't change this file directly. Edit texmf/web2c/$cnfFileShort\
+% and run updmap to recreate this file.\
+";
+ close FILE;
+ }
+
+# print "$dvips35 $pdftex35 $dvipdfm35 $ps2pk35 @tmp1 @tmp2\n";
+
+ my @ps2pk_map = &transLW35($ps2pk35);
+ push @ps2pk_map, &getLines(@tmp1);
+ push @ps2pk_map, &getLines(@tmp2);
+ &writeLines(">$dvipsoutputdir/ps2pk.map", &normalizeLines(@ps2pk_map));
+
+ my @download35_map = &transLW35($ps2pk35);
+ &writeLines(">$dvipsoutputdir/download35.map", &normalizeLines(@download35_map));
+ my @builtin35_map = &transLW35($dvips35);
+ &writeLines(">$dvipsoutputdir/builtin35.map", &normalizeLines(@builtin35_map));
+
+ my $dftdvips = ($dvipsDownloadBase35 ? $ps2pk35 : $dvips35);
+
+ my @psfonts_t1_map = &transLW35($dftdvips);
+ push @psfonts_t1_map, &getLines(@tmp1);
+ push @psfonts_t1_map, &getLines(@tmp2);
+ &writeLines(">$dvipsoutputdir/psfonts_t1.map", &normalizeLines(@psfonts_t1_map));
+
+ my @psfonts_pk_map = &transLW35($dftdvips);
+ push @psfonts_pk_map, &getLines(@tmp2);
+ &writeLines(">$dvipsoutputdir/psfonts_pk.map", &normalizeLines(@psfonts_pk_map));
+
+ # remove PaintType due to Sebastian's request
+ my @tmp3 = &transLW35($pdftex35);
+ push @tmp3, &getLines(@tmp1);
+ push @tmp3, &getLines(@tmp2);
+ @tmp3 = grep { $_ !~ m/(^%|PaintType)/ } @tmp3;
+
+ my @tmp6 = &transLW35($dvipdfm35);
+ push @tmp6, &getLines(@tmp1);
+ push @tmp6, &getLines(@tmp2);
+ @tmp6 = grep { $_ !~ m/(^%|PaintType)/ } @tmp6;
+
+ my @tmp7 = &transLW35($ps2pk35);
+ push @tmp7, &getLines(@tmp1);
+ push @tmp7, &getLines(@tmp2);
+ @tmp7 = grep { $_ !~ m/(^%|PaintType)/ } @tmp7;
+
+ # remove PS-Fontname from ExtendFont / SlantFont lines (works around a
+ # pdftex bug)
+ my @pdftex_ndl14_map = @tmp3;
+ map {
+ if (m/\".*\b(Slant|Extend)Font\b.*\"/x) {
+ $_ =~ s/\s[^\s]*//;
+ }
+ } @pdftex_ndl14_map;
+ @pdftex_ndl14_map = &normalizeLines(@pdftex_ndl14_map);
+ &writeLines(">$pdftexoutputdir/pdftex_ndl14.map", @pdftex_ndl14_map);
+
+ my @pdftex_dl14_map = @tmp7;
+ map {
+ if (m/\".*\b(Slant|Extend)Font\b.*\"/x) {
+ $_ =~ s/\s[^\s]*//;
+ }
+ } @pdftex_dl14_map;
+ @pdftex_dl14_map = &normalizeLines(&base14RemovePSName(@pdftex_dl14_map));
+ &writeLines(">$pdftexoutputdir/pdftex_dl14.map", @pdftex_dl14_map);
+
+ my @dvipdfm_dl14_map = @tmp7;
+ @dvipdfm_dl14_map = &normalizeLines(&dvips2dvipdfm(&normalizeLines(@dvipdfm_dl14_map)));
+ &writeLines(">$dvipdfmoutputdir/dvipdfm_dl14.map", @dvipdfm_dl14_map);
+
+ my @dvipdfm_ndl14_map = @tmp6;
+ @dvipdfm_ndl14_map = &normalizeLines(&dvips2dvipdfm(&normalizeLines(@dvipdfm_ndl14_map)));
+ &writeLines(">$dvipdfmoutputdir/dvipdfm_ndl14.map", @dvipdfm_ndl14_map);
+
+ &setupSymlinks;
+
+ if ($texhashEnabled) {
+ my $cmd = "mktexlsr";
+ &start_redirection("nul") if ($quiet);
+ system($cmd);
+ &stop_redirection if ($quiet);
+ }
+
+ if (! $quiet) {
+ print STDOUT "Files generated:\n";
+ for my $f ("$dvipsoutputdir/download35.map",
+ "$dvipsoutputdir/builtin35.map",
+ "$dvipsoutputdir/psfonts_t1.map",
+ "$dvipsoutputdir/psfonts_pk.map",
+ "$pdftexoutputdir/pdftex_dl14.map",
+ "$pdftexoutputdir/pdftex_ndl14.map",
+ "$dvipdfmoutputdir/dvipdfm_dl14.map",
+ "$dvipdfmoutputdir/dvipdfm_ndl14.map",
+ "$dvipsoutputdir/ps2pk.map") {
+ $f =~ s@/@\\@g; $f = "\"$f\"" if ($f =~ m/\s/);
+ my @lines = `dir $f`;
+ chomp @lines;
+ my $rx = "(^ |dvipdfm.map|dvipdfm_dl14.map|dvipdfm_ndl14.map|pdftex.map|pdftex_dl14.map|pdftex_ndl14.map|ps2pk.map|psfonts.map|psfonts_pk.map|psfonts_t1.map|builtin35.map|download35.map)";
+ @lines = grep /$rx/, @lines;
+ map { print "$_\n"; } @lines;
+ }
+ }
+}
+
+###############################################################################
+# main()
+# execution starts here
+###############################################################################
+sub main {
+
+ &initVars;
+ &processOptions;
+
+ if (@showoptions) {
+ &showOptions(@showoptions);
+ exit 0;
+ }
+
+ &help if ($opt_help);
+
+ &setupCfgFile;
+
+ if ($listmaps) {
+ &listMaps;
+ exit 0;
+ }
+
+ my $bakFile = $cnfFile;
+ $bakFile =~ s/\.cfg$/.bak/;
+ &copyFile($cnfFile, $bakFile);
+
+ my $cmd = '';
+
+ if ($opt_edit) {
+ my $editor = `kpsewhich --expand-var \$TEXEDIT`;
+ chomp($editor);
+ $editor = "notepad" if ($editor eq "");
+ $cmd = 'edit';
+ system("$editor $cnfFile");
+ }
+
+ elsif (keys %setOption) {
+ $cmd = 'setOption';
+ foreach my $m (keys %setOption) {
+ &setOption ($m, $setOption{$m});
+ }
+ }
+
+ elsif (keys %enableItem) {
+ $cmd = 'enableMap';
+ foreach my $m (keys %enableItem) {
+ &enableMap($m, $enableItem{$m});
+ }
+ }
+ elsif (@disableItem) {
+ $cmd = 'disableMap';
+ foreach my $m (@disableItem) {
+ &disableMap($m);
+ }
+ }
+
+ if ($cmd && ! compare($bakFile, $cnfFile)) {
+ print "$cnfFile unchanged. Map files not recreated.\n" unless ($quiet);
+ }
+ else {
+ if ($mkmapEnabled) {
+ &setupDestDir;
+ &mkMaps;
+ }
+ # &cleanup;
+ unlink ($bakFile);
+ }
+
+}
diff --git a/Build/source/texk/tetex/vpe.pl b/Build/source/texk/tetex/vpe.pl
new file mode 100644
index 00000000000..9eb52b69e3c
--- /dev/null
+++ b/Build/source/texk/tetex/vpe.pl
@@ -0,0 +1,421 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q'
+ if 0;
+use strict;
+#
+# vpe.pl
+#
+# Copyright (C) 2000 Heiko Oberdiek.
+#
+# This program may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.2
+# of this license or (at your option) any later version.
+# The latest version of this license is in
+# http://www.latex-project.org/lppl.txt
+# and version 1.2 or later is part of all distributions of LaTeX
+# version 1999/12/01 or later.
+#
+# See file "vpe.txt" for a list of files that belong to this project.
+#
+# This file "vpe.pl" may be renamed to "vpe"
+# for installation purposes.
+#
+my $file = "vpe.pl";
+my $program = uc($&) if $file =~ /^\w+/;
+my $version = "0.1";
+my $date = "2000/09/15";
+my $author = "Heiko Oberdiek";
+my $copyright = "Copyright (c) 2000 by $author.";
+#
+# History:
+# 2000/09/15 v0.1: First release.
+#
+
+### program identification
+my $title = "$program $version, $date - $copyright\n";
+
+### editor call
+# %F: file name
+# %L: line number
+my $EditorCall = "xterm -e joe +%d %s";
+$EditorCall = $ENV{TEXEDIT} if $ENV{TEXEDIT};
+$EditorCall = $ENV{VPE} if $ENV{VPE};
+
+### error strings
+my $Error = "!!! Error:"; # error prefix
+
+my $usage = <<"END_OF_USAGE";
+${title}
+Depending on the name of the script `vpe' works in four modes:
+
+* [vpe] Syntax: vpe <pdf file>[.pdf]
+ The pdf file is scanned for actions created by VTeX,
+ that start an editor with the source file at the
+ specified line under Windows.
+ A symbol link is made from the source file name
+ extended by the extension `.vpe' to this script.
+ The line number is encoded in the path and the
+ action is changed to start this script.
+
+* [sty] Internal for vpe.sty:
+ Syntax: vpe --sty [--progname=...] <latex file> <vpe file>
+
+* [system] Internal for vpe.sty:
+ Syntax: vpe --system <vpe file>
+
+* [launch] Syntax: <source file name>.vpe
+ The script decodes the line number in the path of
+ the source file name and starts an editor with
+ this file at that line number.
+
+Options:
+ --help: print usage.
+ --verbose: print additional informations during running.
+ --force: force symbol links
+ --delete: delete symbol links
+ --sty: internal for `vpe.sty' (get absolute file name and lines)
+ --system: internal for `vpe.sty' (get system info linux or win)
+ --progname: latex, pdflatex, elatex, pdfelatex
+END_OF_USAGE
+
+### options
+$::opt_verbose = 0;
+$::opt_help = 0;
+$::opt_force = 0;
+$::opt_delete = 0;
+$::opt_sty = 0;
+$::opt_system = 0;
+$::opt_progname = "latex";
+use Getopt::Long;
+GetOptions(
+ "help!",
+ "verbose!",
+ "force!",
+ "delete!",
+ "sty!",
+ "system!",
+ "progname=s",
+) or die $usage;
+if ($::opt_help) {
+ die $usage;
+}
+
+if ($::opt_sty and $::opt_system) {
+ die "$usage" .
+ "$Error Options --sty and --system cannot used together!\n";
+}
+
+###################
+### launch mode ###
+###################
+if ($0 =~ /\.vpe/) {
+
+ @ARGV == 0 or
+ die "$usage$Error Too many arguments [launch mode]!\n";
+
+ my $file = "";
+ $0 =~ m|(^[\./]+\./)(.+)\.vpe$| or
+ die "$Error Cannot extract line number ($0)!\n";
+ my $str = $1;
+ $file = "/$2";
+
+ my $line = "";
+ while ($str ne "") {
+ $str =~ m|^(/*)(\.?)\./(.*)$| or
+ die "$Error Parse error!\n";
+ $line .= length($1) + (($2 eq ".") ? 5 : 0);
+ $str = $3;
+ }
+
+ my $callstr = $EditorCall;
+ $EditorCall =~ s/%s/$file/;
+ $EditorCall =~ s/%d/$line/;
+ print "File: $file, line: $line\n" if $::opt_verbose;
+ exec($EditorCall);
+ exit 1;
+}
+
+###
+### used by both sty and system mode:
+###
+my $system = "linux";
+$system = "" if $^O =~ /os2/i;
+$system = "" if $^O =~ /mac/i;
+$system = "win" if $^O =~ /dos/i;
+$system = "win" if $^O =~ /win/i;
+
+################
+### sty mode ###
+################
+if ($::opt_sty) {
+
+ @ARGV == 2 or
+ die "$usage$Error Wrong arguments [sty mode]!\n";
+
+ my $vpefile = $ARGV[1];
+ print "VPE file: $vpefile\n" if $::opt_verbose;
+
+ my $file = `kpsewhich -progname=$::opt_progname $ARGV[0]`;
+ chomp $file;
+ if (!($file =~ m|^/| or $file =~ m|^\w:|)) {
+ use Cwd;
+ $file = cwd() . "/" . $file;
+ $file =~ s|/[^/]+/\.\./|/|g;
+ $file =~ s|/\./|/|g;
+ }
+ -f $file or
+ die "$Error Cannot find file `$file' [sty mode]!\n";
+ print "File: $file\n" if $::opt_verbose;
+
+ my $last = 0;
+ if (open(IN, $file)) {
+ while (<IN>) {
+ $last++;
+ }
+ }
+ if ($last == 0) {
+ $last = 10000;
+ }
+ print "Last line: $last\n" if $::opt_verbose;
+
+ open(OUT, ">>$vpefile") or
+ die "$Error Cannot open file `$vpefile`!\n";
+ print OUT "\\vpeentry{$file}{$last}\n";
+
+ exit 1;
+}
+
+###################
+### system mode ###
+###################
+if ($::opt_system) {
+
+ @ARGV == 1 or
+ die "$usage$Error Wrong arguments [system mode]!\n";
+
+ my $vpefile = $ARGV[0];
+ print "VPE file: $vpefile\n" if $::opt_verbose;
+
+ open(OUT, ">>$vpefile") or
+ die "$Error Cannot open file `$vpefile`!\n";
+ print OUT "\\vpesystem{$system}\n";
+
+ exit 1;
+}
+
+################
+### vpe mode ###
+################
+if (@ARGV < 1) {
+ die "$usage$Error Missing pdf file [vpe mode]!\n";
+}
+if (@ARGV > 2) {
+ die "$usage$Error Too many arguments [vpe mode]!\n";
+}
+
+my $pdffile = $ARGV[0];
+if (!-f $pdffile) {
+ my $name = $pdffile;
+ $pdffile .= ".pdf";
+ -f $pdffile or
+ die "$Error File `$name' not found [vpe mode]!\n";
+}
+
+open(IN, "+<$pdffile") or
+ die "$Error Cannot open `$pdffile' [vpe mode]!\n";
+binmode(IN);
+my %symlinks = ();
+while (<IN>) {
+
+ if (m|/F\([\./]*(/.*)\.vpe\)|) {
+ $symlinks{$1} = 1;
+ next;
+ }
+
+ my $do = 0;
+ my ($action, $file, $line, $type);
+ # my $color; # only for debugging
+
+ if (m|^
+ /A \s* << \s*
+ /Type \s* /Action \s*
+ /S \s* /Launch \s*
+ /Win \s* << \s*
+ /F \s* \(aftcomp.exe\) \s*
+ /P \s* \("(.*)\" \s+ \d+\-(\d+)\) \s*
+ >> \s*
+ >> \s*
+ $
+ |x
+ ) {
+ $action = $_;
+ $file = $1;
+ $line = $2;
+ # $color = "/C[0 0 1]"; # only for debugging
+ $type = "aftcomp";
+ $do = 1;
+ }
+
+ if (m|^
+ /A \s* << \s*
+ /Type \s* /Action \s*
+ /S \s* /Launch \s*
+ /Win \s* << \s*
+ /F \s* \(repos.exe\) \s*
+ /P \s* \(
+ "(.*)" \s*
+ "(\d+)" \s*
+ "(.*)" \s*
+ "(\d+)"
+ \) \s*
+ >> \s*
+ >> \s*
+ $
+ |x
+ ) {
+ $action = $_;
+ if ($3 eq "") {
+ $file = $1;
+ $line = $2;
+ }
+ else {
+ # ???
+ $file = $1;
+ $line = $2;
+ }
+ # $color = "/C[1 0 0]"; # only for debugging
+ $type = "repos";
+ $do = 1;
+ }
+
+ if ($do) {
+ my $length = length($action);
+ print "* File: $file, line: $line, type: $type\n" if $::opt_verbose;
+
+ if (!($file =~ m|^/|)) {
+ print STDERR "$Error File `$file' lacks of absolute path!\n";
+ next;
+ }
+
+ if (!$::opt_delete) {
+ if ($line <= 0) {
+ $line = 1;
+ }
+
+ my $newaction = "";
+ {
+ my $digit = substr($line, 0, 1);
+ if ($digit <= 5) {
+ $newaction .= "/" x $digit;
+ }
+ else {
+ $newaction .= "/" x ($digit - 5) . ".";
+ }
+ $newaction .= "./";
+ my $rest = $line;
+ while (($rest = substr($rest, 1)) ne "") {
+ $digit = substr($rest, 0, 1);
+ if ($digit < 5) {
+ $newaction .= "/" x $digit;
+ }
+ else {
+ $newaction .= "/" x ($digit - 5) . ".";
+ }
+ $newaction .= "./";
+ }
+ }
+ $newaction .= substr($file, 1) . ".vpe";
+ $newaction = # $color . # only for debugging
+ "/A<</Type/Action/S/Launch/F($newaction)>>";
+ $newaction .= " " x ($length - length($newaction) - 1);
+ if (length($newaction) > $length) {
+ print STDERR "$Error Action too long!\n";
+ next;
+ }
+
+ seek(IN, -length($action), 1);
+ print IN $newaction;
+ }
+
+ $symlinks{$file} = 1;
+ }
+}
+
+if (keys(%symlinks)) {
+
+ my $this = $0;
+ if (!$::opt_delete) {
+ if (!-f $0 or !-x $0) {
+ $this = `which $0`;
+ ($this ne "") or die "$Error Cannot find this script!\n";
+ }
+ if (!($this =~ m|^/|)) {
+ use Cwd;
+ $this = cwd() . "/" . $this;
+ }
+ $this =~ s|/[^/]+/\.\./|/|g;
+ $this =~ s|/\./|/|g;
+ }
+
+ if ($::opt_delete) {
+ print "Delete symlinks:\n";
+ }
+ else {
+ if ($::opt_force) {
+ print "Forced symlinks to $this:\n";
+ }
+ else {
+ print "Symlinks to $this:\n";
+ }
+ }
+
+ foreach (keys(%symlinks)) {
+ my $sym = $_ . ".vpe";
+ print " $sym [";
+
+ if ($::opt_delete) {
+ if (!-l $sym) {
+ print "ok, not existing]\n";
+ next;
+ }
+ unlink($sym);
+ if (!-l $sym) {
+ print "ok, deleted]\n";
+ next;
+ }
+ print "failed]\n";
+ next;
+ }
+ if ($::opt_force) {
+ if (-l $sym) {
+ unlink($sym);
+ if (-l $sym) {
+ print "deletion failed]\n";
+ next;
+ }
+ if (symlink($this, $sym)) {
+ print "ok, deleted and created]\n";
+ next;
+ }
+ print "deleted, creation failed]\n";
+ next;
+ }
+ if (symlink($this, $sym)) {
+ print "ok, created]\n";
+ next;
+ }
+ print "creation failed]\n";
+ next;
+ }
+ if (-f $sym) {
+ print "exists]\n";
+ next;
+ }
+ if (symlink($this, $sym)) {
+ print "ok, created]\n";
+ next;
+ }
+ print "failed]\n";
+ next;
+ }
+}
+__END__
diff --git a/Build/source/texk/tetex/win32.mak b/Build/source/texk/tetex/win32.mak
new file mode 100644
index 00000000000..58c9da9716f
--- /dev/null
+++ b/Build/source/texk/tetex/win32.mak
@@ -0,0 +1,256 @@
+################################################################################
+#
+# Makefile : teTeX specific
+# Author : Fabrice Popineau <Fabrice.Popineau@supelec.fr>
+# Platform : Win32, Microsoft VC++ 6.0, depends upon fpTeX 0.5 sources
+# Time-stamp: <04/03/20 16:18:10 popineau>
+#
+################################################################################
+root_srcdir = ..\..
+!ifdef DEVELOPMENT
+INCLUDE=$(INCLUDE);$(root_srcdir)\texk.development
+!else
+INCLUDE=$(INCLUDE);$(root_srcdir)\texk
+!endif
+
+USE_GNUW32 = 1
+USE_GSW32 = 1
+USE_KPATHSEA = 1
+USE_ADVAPI = 1
+
+!include <msvc/common.mak>
+
+{$(texmfdist)\tex\context\perltk}.pl{$(objdir)}.exe:
+ $(perlcomp) $(perlcompflags) $<
+
+{$(texmfdist:-development=)\tex\context\perltk}.pl{$(objdir)}.exe:
+ $(perlcomp) $(perlcompflags) $<
+
+{}.{$(objdir)}.exe:
+ $(perlcomp) $(perlcompflags) $<
+
+#perlscript = texdoctk e2pall texi2pdf thumbpdf
+infofiles= latex.info # latex.info-1 latex.info-2 latex.info-3
+htmldocfiles = latex.html
+pdfdocfiles = latex.pdf
+docsubdir = latex\base
+programs= \
+# # $(objdir)\dvi2fax.exe \
+# # $(objdir)\ps2frag.exe \
+# # $(objdir)\texconfig.exe \
+# # $(objdir)\dvired.exe \
+# # $(objdir)\pslatex.exe \
+# $(objdir)\texi2html.exe \
+# # $(objdir)\allcm.exe \
+# # $(objdir)\allneeded.exe \
+# # $(objdir)\fontexport.exe \
+# # $(objdir)\fontimport.exe \
+# # $(objdir)\kpsetool.exe \
+# # $(objdir)\mkfontdesc.exe \
+# # $(objdir)\MakeTeXPK.Exe \
+# # $(objdir)\fontinst.exe \
+# # $(objdir)\rubibtex.exe \
+# # $(objdir)\rumakeindex.exe \
+# # $(objdir)\fmtutil.exe \
+# # $(objdir)\texdoc.exe \
+# # $(objdir)\texlinks.exe \
+# $(objdir)\texexec.exe \
+# $(objdir)\texdoctk.exe \
+# $(objdir)\e2pall.exe \
+# $(objdir)\epstopdf.exe \
+# # $(objdir)\texi2pdf.exe \
+# $(objdir)\thumbpdf.exe \
+# $(objdir)\makempy.exe \
+# # $(objdir)\mptopdf.exe \
+# $(objdir)\texshow.exe \
+# $(objdir)\texfind.exe \
+# $(objdir)\texfont.exe \
+# $(objdir)\texutil.exe \
+# $(objdir)\updmap.exe \
+# $(objdir)\fdf2tan.exe \
+# $(objdir)\makempy.exe \
+# $(objdir)\vpe.exe \
+ fontinst.bat \
+# $(objdir)\rubibtex.bat
+
+#
+# teTeX perl scripts go to texmf rather than to texmf-dist
+#
+perlscriptdir = $(texmf)\scripts\tetex
+
+tetexperlscripts = \
+ e2pall.pl \
+ epstopdf.pl \
+ texdoctk.pl \
+ texi2html.pl \
+ thumbpdf.pl \
+ updmap.pl
+
+#
+# ConTeXt perl scripts are distribution independent
+#
+perlscripts = \
+ $(texmfdist)\scripts\context\perltk\texexec.pl \
+ $(texmfdist)\scripts\context\perltk\makempy.pl \
+ $(texmfdist)\scripts\context\perltk\texshow.pl \
+ $(texmfdist)\scripts\context\perltk\texfind.pl \
+ $(texmfdist)\scripts\context\perltk\texfont.pl \
+ $(texmfdist)\scripts\context\perltk\texutil.pl \
+ $(texmfdist)\scripts\context\perltk\fdf2tan.pl \
+ $(texmfdist)\scripts\context\perltk\mptopdf.pl
+
+# manfiles = \
+# allec.$(manext) \
+# einitex.$(manext) \
+# elatex.$(manext) \
+# evirtex.$(manext) \
+# inimf.$(manext) \
+# inimpost.$(manext) \
+# iniomega.$(manext) \
+# initex.$(manext) \
+# kpsepath.$(manext) \
+# kpsexpand.$(manext) \
+# lambda.$(manext) \
+# pdfinitex.$(manext) \
+# pdfvirtex.$(manext) \
+# texhash.$(manext) \
+# virmf.$(manext) \
+# virmpost.$(manext) \
+# viromega.$(manext) \
+# virtex.$(manext) \
+# pdflatex.$(manext) \
+# MakeTeXPK.$(manext) \
+# cont-de.$(manext) \
+# cont-nl.$(manext) \
+# cont-en.$(manext)
+
+manfiles = \
+ allcm.$(manext) \
+ allec.$(manext) \
+ allneeded.$(manext) \
+ dvi2fax.$(manext) \
+ dvired.$(manext) \
+ e2pall.$(manext) \
+ epstopdf.$(manext) \
+ fontexport.$(manext) \
+ fontimport.$(manext) \
+ fontinst.$(manext) \
+ kpsepath.$(manext) \
+ kpsetool.$(manext) \
+ kpsexpand.$(manext) \
+ ps2frag.$(manext) \
+ pslatex.$(manext) \
+ rubibtex.$(manext) \
+ rumakeindex.$(manext) \
+ texconfig.$(manext) \
+ texdoc.$(manext) \
+ texexec.$(manext) \
+ texi2html.$(manext) \
+# texi2pdf.$(manext) \
+ texshow.$(manext) \
+ texutil.$(manext) \
+ thumbpdf.$(manext) \
+ texdoctk.$(manext) \
+ fmtutil.8 \
+ mkfontdesc.8 \
+ texlinks.8 \
+ fmtutil.cnf.5
+
+default: all
+
+all: $(objdir) $(programs)
+
+#$(objdir)\epstopdf.exe: $(objdir)\epstopdf.obj $(gsw32lib) $(kpathsealib)
+# $(link) $(advapiflags) $(**) $(conlibs) $(advapilibs)
+
+e2pall.pl: e2pall
+ $(sed) -e "1,2d" < $(**) > $@
+
+epstopdf.pl: epstopdf
+ $(sed) -e "1,2d" < $(**) > $@
+
+texi2html.pl: texi2html
+ $(sed) -e "1,2d" < $(**) > $@
+
+texdoctk.pl: texdoctk
+ $(sed) -e "1,2d" < $(**) > $@
+
+# texi2pdf.pl: texi2pdf
+# $(sed) -e "1,2d" < $(**) > $@
+
+thumbpdf.pl: thumbpdf
+ $(sed) -e "1,2d" < $(**) > $@
+
+# $(objdir)\e2pall.exe: e2pall
+# $(perlcomp) $(perlcompflags) $(**)
+#
+# $(objdir)\epstopdf.exe: epstopdf
+# $(perlcomp) $(perlcompflags) $(**)
+#
+# $(objdir)\texi2html.exe: texi2html
+# $(perlcomp) $(perlcompflags) $(**)
+#
+# $(objdir)\texdoctk.exe: texdoctk
+# $(perlcomp) $(perlcompflags) $(**)
+#
+# # $(objdir)\texi2pdf.exe: texi2pdf
+#
+# $(objdir)\thumbpdf.exe: thumbpdf
+# $(perlcomp) $(perlcompflags) $(**)
+#
+# $(objdir)\updmap.exe: updmap.pl
+# $(perlcomp) $(perlcompflags) $(**)
+#
+# $(objdir)\vpe.exe: vpe.pl
+# $(perlcomp) $(perlcompflags) $(**)
+
+!include <msvc/config.mak>
+
+installdirs = "$(perlscriptdir)"
+
+!include <msvc/install.mak>
+
+install:: install-exec install-man install-info install-doc
+
+install-exec:: $(tetexperlscripts) # $(scripts) $(pdfscripts) $(runperl) $(programs)
+ -@echo $(verbose) & ( \
+ if not "$(tetexperlscripts)"=="" ( \
+ for %%s in ($(tetexperlscripts)) do \
+ $(copy) %%s $(perlscriptdir)\%%s $(redir_stdout) \
+ & $(perlcomp) $(perlcompflags) %%s >> $(win32perldir)\perlfiles.lst \
+ & $(runperl) -f %%~nxs $(bindir)\%%~ns.exe $(redir_stderr) \
+ ) \
+ )
+ -@echo $(verbose) & ( \
+ if not "$(perlscripts)"=="" ( \
+ for %%s in ($(perlscripts)) do \
+ $(perlcomp) $(perlcompflags) %%s >> $(win32perldir)\perlfiles.lst \
+ & $(runperl) -f %%~nxs $(bindir)\%%~ns.exe $(redir_stderr) \
+ ) \
+ )
+# -@$(del) $(scriptdir)\allec.* $(scriptdir)\kpsepath.* $(scriptdir)\kpsexpand.* $(scriptdir)\texhash.*
+# & ln -s allcm allec; \
+# & ln -s kpsetool kpsepath; \
+# & ln -s kpsetool kpsexpand;
+# We should use irun instead of copy here, but there is not much space to gain.
+ -@echo $(verbose) & ( \
+ pushd $(scriptdir) & $(copy) .\mktexlsr.exe $(scriptdir)\texhash.exe & popd \
+ ) $(redir_stdout)
+
+latex.texi: latex2e.texi
+ @$(copy) $(**) $@ $(redir_stdout)
+
+clean::
+ -@for %%i in ($(scripts) $(pdfscripts)) do $(del) %%i
+ -@$(del) *.pdf *.html fmtutil.cnf
+ -@$(del) e2pall.pl epstopdf.pl texi2html.pl texdoctk.pl thumbpdf.pl
+
+depend::
+
+!include <msvc/clean.mak>
+
+!include <msvc/rdepend.mak>
+!include "./depend.mak"
+# Local Variables:
+# mode: Makefile
+# End:
diff --git a/Build/source/texk/tetex/win32/epstopdf.c b/Build/source/texk/tetex/win32/epstopdf.c
new file mode 100644
index 00000000000..161afa99946
--- /dev/null
+++ b/Build/source/texk/tetex/win32/epstopdf.c
@@ -0,0 +1,735 @@
+/*
+# epstopdf: written by Kong Hoon Lee konghoon@hyowon.cc.pusan.ac.kr<4/1/1999>
+#
+# It converts an EPS file to an encapsulated PDF File and
+# coded with the perl script 'epstopdf' by Sebastian Rahtz on
+# http://tug.org/applications/pdftex/epstopdf .
+# It works like as the perl script without 'perl' for Windows 95
+# but requires 'Ghostscript' for Windows.
+#
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#define MAX_IN 10000
+
+#define DEBUG 1
+
+#ifdef FPTEX
+
+#include <win32lib.h>
+#include <gs32lib.h>
+
+/* This is the callback function for gs. It is mainly used to read and
+ write data on gs stdin/stdout. Data exchanges happen through
+ buffers. */
+int __cdecl
+gsdll_callback(int message, char *str, unsigned long count)
+{
+ char *p;
+
+ switch (message) {
+
+ case GSDLL_STDIN:
+ /* Put count chars on gs stdin */
+#if DEBUG
+ fprintf(stderr, "gs wants %d chars\n", count);
+#endif
+ p = fgets(str, count, stdin);
+ if (p)
+ return strlen(str);
+ else
+ return 0;
+
+ case GSDLL_STDOUT:
+ fwrite(str, 1, count, stdout);
+ return count;
+
+ case GSDLL_DEVICE:
+ /* gs_device = str; */
+#if DEBUG
+ fprintf(stdout,"Callback: DEVICE %p %s\n", str,
+ count ? "open" : "close");
+#endif
+ break;
+
+ case GSDLL_SYNC:
+#if DEBUG
+ fprintf(stdout,"Callback: SYNC %p\n", str);
+#endif
+ break;
+
+ case GSDLL_PAGE:
+ fprintf(stdout,"Callback: PAGE %p\n", str);
+ break;
+
+ case GSDLL_SIZE:
+#if DEBUG
+ fprintf(stdout,"Callback: SIZE %p width=%d height=%d\n", str,
+ (int)(count & 0xffff), (int)((count>>16) & 0xffff) );
+#endif
+ break;
+
+ case GSDLL_POLL:
+#if 0
+ fprintf(stderr, "GS: Poll sent (%d)!\n", 0);
+#endif
+ return 0; /* no error ? */
+ default:
+ fprintf(stdout,"Callback: Unknown message=%d\n",message);
+ break;
+ }
+ return 0;
+}
+
+#undef BEGINDOC
+#undef ENDDOC
+
+#define GSEXEC "gswin32c.exe"
+
+#endif /* FPTEX */
+
+#ifndef GSEXEC
+#ifdef __WIN32__
+#define GSEXEC "gswin32c"
+#else
+#define GSEXEC "gs"
+#endif
+#endif
+
+#define BEGINDOC "%%BeginDocument"
+#define ENDDOC "%%EndDocument"
+
+
+static void usage(void)
+
+{
+ printf("epstopdf 2.26:\n");
+ printf("written by Kong Hoon Lee, konghoon@dreamwiz.com <4/1/1999>\n");
+ printf("changes by Juergen Bausa, bausa@lfpt.rwth-aachen.de <5/25/2000>\n");
+ printf("bugfix by Pascal Perichon, Pascal.Perichon@u-bourgogne.fr <5/25/2000>\n\n");
+ printf("It converts an EPS file to an encapsulated PDF File and is written\n");
+ printf("based on the perl script 'epstopdf' by Sebastian Rahtz on\n");
+ printf("http://tug.org/applications/pdftex/epstopdf .\n");
+ printf("It works like the perl script without 'perl' but requires 'Ghostscript'.\n");
+ printf("The accompanied Makefile can be used to automate the update of all eps/pdf\n");
+ printf("files in a directory. Just put it in the directory where your eps files\n");
+ printf("are and type 'make' from the command line (you will need a version of\n");
+ printf("GNU-make)\n\n");
+
+ printf("This program invokes '%s' and the path including '%s'\n",GSEXEC,GSEXEC);
+ printf("should be included to the environment variable 'PATH'.\n");
+ printf("'%s' should know, where to find its initialization files\n",GSEXEC);
+ printf("and fonts, using an registry entry (Windows) or an environment variable.\n\n");
+
+ printf("Using a different output device, it is also possible to convert eps\n");
+ printf("files to bitmaps (e.g. -sDEVICE=bmpmono).\n\n");
+
+ printf("Usage: epstopdf [options] filename-of-an-eps-file\n");
+ printf("Options:\n");
+ printf(" --help: print usage\n");
+ printf(" --outfile=<file>: write result to <file>\n");
+ printf(" --tmpfile=<file>: use <file> as temporary file\n");
+ printf(" --(no)filter: read/writ standard input/output (default: false)\n");
+ printf(" --(no)gs: run ghostscript (default: true)\n");
+ printf(" --(no)compress: use compression (default: true)\n");
+ printf(" --(no)hires: scan HiresBoundingBox (default: false)\n");
+ printf(" --(no)exact: scan ExactBoundingBox (default: false)\n");
+ printf(" --(no)debug: debug informations (default: false)\n");
+ printf(" --(no)wait: wait for keystroke (default: false)\n");
+ printf(" --gsexec=<gs>: use <gs> to invoke ghostscript (default: %s)\n",GSEXEC);
+ printf(" --enlarge=<a>: enlarge BB by <a>/72 '' (default: 0.)\n");
+ printf(" -sDEVICE=<dev> : use <dev> as output device (default: pdfwrite)\n");
+ printf(" -r<a>: output resolution for gs (default: 600)\n");
+ printf(" --width=<a>: output width in pixels (default: none)\n");
+ printf(" --height=<a>: output height in pixels (default: none)\n");
+ printf(" --gsopt=<a>: add <a> to the gs command line (default: none)\n");
+}
+
+
+static int round(double a)
+
+{
+ return floor(a+0.5);
+}
+
+static int isint(double a)
+
+{
+ if(fabs(a-round(a))<1e-6) return 1;
+ else return 0;
+}
+
+
+int main(int argc,char *argv[])
+
+{
+ FILE *in,*out;
+ char *infile=NULL,*outfile=NULL,*tmpfile=NULL,*copt,*ptr,*gsexec,buf[21];
+ char command[MAX_IN],ch[MAX_IN],*BBname,*device,ropt[20],*gsopt;
+ double bbllx,bblly,bburx,bbury,xoffset,yoffset,enlarge;
+ int width,height,res,xpix,ypix;
+ int i,count,status,BBCorrected,did_CR,debug,compress,usegs,wait,
+ BBhires,BBexact,found,depth,filter,ngsopt;
+ int doseps;
+ unsigned long dosepsbegin, dosepsend, pos;
+ unsigned int c;
+ fpos_t fpos;
+
+
+#if defined (__EMX__)
+ _wildcard (&argc, &argv);
+#endif
+
+ /* default parameter */
+ status=0;
+ BBCorrected=0;
+ BBhires=0;
+ BBexact=0;
+ debug=0;
+ compress=1;
+ usegs=1;
+ gsexec=GSEXEC;
+ wait=0;
+ filter=0;
+ enlarge=0.;
+ res=600;
+ device="pdfwrite";
+ xpix=0;
+ ypix=0;
+ ngsopt=100;
+ gsopt=malloc(ngsopt);
+ gsopt[0]='\0';
+
+
+ /******************************************************************
+
+ Process command line options
+
+ ******************************************************************/
+
+ for(i=1;i<argc;i++){
+
+ /* printf("i=%d arg=>>%s<<\n",i,argv[i]); */
+
+ if(!strcmp(argv[i],"--help") || !strcmp(argv[i],"-h")){
+ usage();
+ status=0;
+ goto EXIT;
+ }
+
+ if(!strcmp(argv[i],"--debug") || !strcmp(argv[i],"-d")){
+ debug=1;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--nodebug")){
+ debug=0;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--compress") || !strcmp(argv[i],"-c")){
+ compress=1;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--nocompress")){
+ compress=0;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--nogs")){
+ usegs=0;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--gs")){
+ usegs=1;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--wait") || !strcmp(argv[i],"-w")){
+ wait=1;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--nowait")){
+ wait=0;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--filter")){
+ filter=1;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--nofilter")){
+ filter=0;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--hires")){
+ BBhires=1;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--nohires")){
+ BBhires=0;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--exact")){
+ BBexact=1;
+ continue;
+ }
+
+ if(!strcmp(argv[i],"--noexact")){
+ BBexact=0;
+ continue;
+ }
+
+ if(!strncmp(argv[i],"--outfile=",strlen("--outfile="))){
+ outfile=malloc(strlen(argv[i])-strlen("--outfile=")+1);
+ strcpy(outfile, argv[i]+strlen("--outfile="));
+ continue;
+ }
+
+ if(!strncmp(argv[i],"--tmpfile=",strlen("--tmpfile="))){
+ tmpfile=malloc(strlen(argv[i])-strlen("--tmpfile=")+1);
+ strcpy(tmpfile, argv[i]+strlen("--tmpfile="));
+ continue;
+ }
+
+ if(!strncmp(argv[i],"-r",strlen("-r"))){
+ sscanf(argv[i]+strlen("-r"),"%d",&res);
+ continue;
+ }
+
+ if(!strncmp(argv[i],"--width=",strlen("--width="))){
+ sscanf(argv[i]+strlen("--width="),"%d",&xpix);
+ continue;
+ }
+
+ if(!strncmp(argv[i],"--height=",strlen("--height="))){
+ sscanf(argv[i]+strlen("--height="),"%d",&ypix);
+ continue;
+ }
+
+ if(!strncmp(argv[i],"--gsopt=",strlen("--gsopt="))){
+ char *opt=argv[i]+strlen("--gsopt=");
+ if(strlen(gsopt)+strlen(opt)+2 < ngsopt){
+ ngsopt+=100;
+ gsopt=realloc(gsopt,ngsopt);
+ }
+ strcat(gsopt," ");
+ strcat(gsopt,opt);
+ continue;
+ }
+
+ if(!strncmp(argv[i],"-sDEVICE=",strlen("-sDEVICE="))){
+ device=argv[i]+strlen("-sDEVICE=");
+ continue;
+ }
+
+ if(!strcmp(argv[i],"-o") && i+1<argc){
+ outfile=malloc(strlen(argv[i+1])+1);
+ strcpy(outfile, argv[i+1]);
+ i++;
+ continue;
+ }
+
+ if(!strncmp(argv[i],"--gsexec=",strlen("--gsexec="))){
+ gsexec=argv[i]+strlen("--gsexec=");
+ continue;
+ }
+
+
+ if(argv[i][0]!='-'){
+ if(infile) printf("\nCan process only one input file\n");
+ else infile=argv[i];
+ continue;
+ }
+
+ if(!strncmp(argv[i],"--enlarge=",strlen("--enlarge="))){
+ sscanf(argv[i]+strlen("--enlarge="),"%lf",&enlarge);
+ continue;
+ }
+
+ usage();
+ fprintf(stderr,"\nunknown option >>%s<<\n",argv[i]);
+ status=1;
+ goto EXIT;
+ }
+
+
+
+ /******************************************************************
+
+ check arguments and files
+
+ ******************************************************************/
+
+
+ if(filter) debug=0;
+ if(filter) wait =0;
+
+ if(BBexact && BBhires){
+ fprintf(stderr,"\nOptions --hires and --exact cannot be used together\n");
+ status=1;
+ goto EXIT;
+ }
+
+ if (BBexact) BBname="%%ExactBoundingBox:";
+ else if(BBhires) BBname="%%HiresBoundingBox:";
+ else BBname="%%BoundingBox:";
+
+ if(!filter) {
+
+ if(!infile) {
+ usage();
+ fprintf(stderr,"no input file specified!\n");
+ status=1;
+ goto EXIT;
+ }
+
+ if((in=fopen(infile,"rb")) == NULL) {
+ usage();
+ fprintf(stderr,"%s: File not found!\n",infile);
+ status=1;
+ goto EXIT;
+ }
+ fclose(in);
+
+ }else{
+
+ if(infile) {
+ fprintf(stderr,"Input file cannot be used with filter option!\n");
+ status=1;
+ goto EXIT;
+ }
+
+ infile="epstopdf"; /* dummy input filename to generate tmp-filename */
+ }
+
+
+
+ /* find a temporary filename that does not exist yet */
+ if(usegs && !tmpfile){
+ tmpfile=malloc(strlen(infile)+9);
+ count=0;
+ do{
+ if(count>99) {
+ fprintf(stderr,"No temporary file available! Try deleting *.tmp.\n\n");
+ status=1;
+ goto EXIT;
+ }
+ sprintf(tmpfile,"%s.%d.tmp",infile,count);
+ if(debug) printf("checking temporary filename >>%s<<\n",tmpfile);
+ out=fopen(tmpfile,"rb");
+ if(out) fclose(out);
+ count++;
+ }while(out);
+ }
+
+ if(!filter){
+ if(!outfile){
+ outfile=malloc(strlen(infile)+6);
+ strcpy(outfile,infile);
+ ptr=outfile;
+ while(strpbrk(ptr,"\\/")) ptr=strpbrk(ptr,"\\/")+1;
+ ptr=strrchr(ptr,'.');
+ if(ptr) *ptr='\0';
+ if(usegs) strcat(outfile,".pdf");
+ else strcat(outfile,"2.eps");
+ }
+ }else{
+ if(outfile) {
+ fprintf(stderr,"Output file cannot be used with filter option!\n");
+ status=1;
+ goto EXIT;
+ }
+ outfile=malloc(2);
+ strcpy(outfile,"-");
+ }
+
+
+
+ if(!filter) printf("Converting %s to %s ..... ",infile,outfile);
+
+
+ /******************************************************************
+
+ put the pagesize from the bounding box into the eps file
+
+ ******************************************************************/
+
+
+ if(debug) printf("\nAdding correct pagesize to EPS ... searching for %s ...\n",BBname);
+
+ if (!filter) in = fopen(infile, "rb");
+ else {
+ in = stdin;
+ setmode(fileno(stdin), O_BINARY);
+ }
+ if (usegs) out = fopen(tmpfile,"wb");
+ else if(!filter) out = fopen(outfile,"wb");
+ else {
+ out = stdout;
+ setmode(fileno(stdout), O_BINARY);
+ }
+ if(!in || !out){
+ fprintf(stderr,"cannot open files\n");
+ status=1;
+ goto EXIT;
+ }
+ depth=0;
+
+ doseps = dosepsbegin = dosepsend = 0;
+ c = getc(in);
+ if (c == 'E'+0x80) {
+ if ((getc(in)=='P'+0x80) && (getc(in)=='S'+0x80)
+ && (getc(in)=='F'+0x80)) {
+ doseps = 1;
+ dosepsbegin = getc(in) ;
+ dosepsbegin += getc(in) * 256L ;
+ dosepsbegin += getc(in) * 65536L ;
+ dosepsbegin += getc(in) * 256L * 65536 ;
+ dosepsend = getc(in) ;
+ dosepsend += getc(in) * 256L ;
+ dosepsend += getc(in) * 65536L ;
+ dosepsend += getc(in) * 256L * 65536 ;
+ fseek(in, dosepsbegin, 0);
+ c = getc(in);
+ dosepsend-- ;
+ }
+ }
+ rewind(in);
+ if (doseps)
+ fseek(in, dosepsbegin, SEEK_SET);
+ pos = dosepsbegin;
+ while (fgets(ch,MAX_IN,in)) {
+ if (doseps && ftell(in) > dosepsend + dosepsbegin) {
+ ch[dosepsend + dosepsbegin - pos ] = '\0';
+ fputs(ch, out); fputc('\n', out);
+ break;
+ }
+ pos = ftell(in);
+
+ if(!strncmp(ch,BEGINDOC,strlen(BEGINDOC))) depth++; /* count included documents */
+ if(!strncmp(ch,ENDDOC, strlen(ENDDOC) )) depth--;
+ if(!strncmp(ch,BBname, strlen(BBname)) && depth==0) { /* look for BB comment in main doc only */
+ sscanf(ch,"%*s %20s",buf);
+ if(!strcmp(buf,"(atend)")){ /* BB is atended */
+ if(filter){
+ fprintf(stderr,"Cannot look for BoundingBox in the trailer "
+ "with option --filter\n");
+ if(usegs) remove(tmpfile);
+ status=1;
+ goto EXIT;
+ }
+ if(debug) printf("\n (atend)! ...\n");
+ fgetpos(in, &fpos); /* store file position */
+ found=0;
+ while (fgets(ch,MAX_IN,in)){
+ if(!strncmp(ch,BEGINDOC,strlen(BEGINDOC))) depth++; /* count included documents */
+ if(!strncmp(ch,ENDDOC, strlen(ENDDOC) )) depth--;
+ if(!strncmp(ch,BBname,strlen(BBname)) && depth==0) { /* look for bounding box in main doc only */
+ found=1;
+ fsetpos(in, &fpos); /* rewind to (atend) comment */
+ break;
+ }
+ }
+ if(!found){
+ fprintf(stderr,"atended %s not found\n",BBname);
+ if(usegs && !debug) remove(tmpfile);
+ if(!usegs && !debug) remove(outfile);
+ status=1;
+ goto EXIT;
+ }
+ }
+
+
+ /* No Idea what ExactBoundingBox means. Hope it also works with this code */
+
+ /* I thought Postscript says that the bounding box should be integer.
+ However, some applications (like Corel Draw) use floats and gs has no
+ problem with it. So I use floats for translate that will result in a
+ more exact box. Since gs seems not to be able to use floats in
+ setpagedevice, these values are converted to integer */
+
+ if(!BBCorrected){ /* write Bounding box one time only! */
+ if(sscanf(ch,"%*s %lf %lf %lf %lf",&bbllx,&bblly,&bburx,&bbury)!=4){
+ fprintf(stderr,"incorrect %s \n",BBname);
+ if(usegs && !debug) remove(tmpfile);
+ status=1;
+ goto EXIT;
+ }
+ if(debug) printf("BoundingBox: %f %f %f %f\n",bbllx,bblly,bburx,bbury);
+ bblly -= enlarge;
+ bbllx -= enlarge;
+ bbury += enlarge;
+ bburx += enlarge;
+ width = ceil(bburx-bbllx); /* make papersize integer and enlarge it a little bit */
+ height = ceil(bbury-bblly);
+ xoffset =-bbllx;
+ yoffset =-bblly;
+ fprintf(out,"%s %d %d %d %d\n",BBname,0,0,width,height);
+ fprintf(out,"<< /PageSize [%d %d] >> setpagedevice \n",width,height);
+ if(isint(xoffset) && isint(yoffset)) fprintf(out,"gsave %d %d translate\n",round(xoffset),round(yoffset));
+ else fprintf(out,"gsave %f %f translate\n",xoffset,yoffset);
+ if(!filter) printf(" (%dx%d mm) ... ",(int)(25.4/72.*width),(int)(25.4/72.*height));
+ did_CR=1;
+ BBCorrected=1;
+ }
+ }else{
+ fputs(ch,out);
+ if(strpbrk(ch, "\n")) did_CR=1;
+ else did_CR=0;
+ }
+ }
+ if(BBCorrected){
+ if(!did_CR) fprintf(out,"\ngrestore\n");
+ else fprintf(out, "grestore\n");
+ }
+ if(in !=stdin ) fclose(in);
+ if(out!=stdout) fclose(out);
+
+ if(width && height){
+ if (xpix) res=(72*xpix)/width;
+ else if (ypix) res=(72*ypix)/height;
+ }
+
+
+ /******************************************************************
+
+ do the conversion eps->pdf using gs
+
+ ******************************************************************/
+
+
+ if(usegs){
+
+#ifdef FPTEX
+ char stemp[512];
+ char *gs_argv[] = {
+ NULL, /* 0 gsexec */
+ "-q",
+ "-dNOPAUSE",
+ "-dBATCH",
+ NULL, /* 4 copt */
+ NULL, /* 5 device */
+ NULL, /* 6 ropt */
+ NULL, /* 7 gsopt */
+ NULL, /* 8 outfile */
+ /* "-", "-c", "quit", "-f", */
+ NULL /* 9 tmpfile */,
+ NULL
+ };
+ int gs_argc = sizeof(gs_argv)/sizeof(gs_argv[0]);
+
+ gs_argv[0] = gsexec;
+ if(compress) gs_argv[4]="-dUseFlateCompression=true";
+ else gs_argv[4]="-dUseFlateCompression=false";
+
+ if(res) sprintf(ropt,"-r%d",res);
+ else ropt[0]='\0';
+
+ if(res && debug) printf(" (%d dpi) ... ",res);
+
+ sprintf(stemp, "-sDEVICE=%s", device);
+ gs_argv[5] = xstrdup(stemp);
+ gs_argv[6] = ropt;
+ if (gsopt && *gsopt) {
+ gs_argv[7] = gsopt;
+ sprintf(stemp, "-sOutputFile=%s", outfile);
+ gs_argv[8] = xstrdup(stemp);
+ sprintf(stemp, "%s", tmpfile);
+ gs_argv[9] = xstrdup(stemp);
+ }
+ else {
+ sprintf(stemp, "-sOutputFile=%s", outfile);
+ gs_argv[7] = xstrdup(stemp);
+ sprintf(stemp, "%s", tmpfile);
+ gs_argv[8] = xstrdup(stemp);
+ gs_argc--;
+ }
+ if(debug) {
+ int i;
+ printf("running ghostscript ...\n");
+ for (i = 0; i < gs_argc - 1; i++)
+ fprintf(stderr, "gs_argv[%d] = %s\n", i, gs_argv[i]);
+ }
+
+ if (gs_locate() == NULL) {
+ fprintf(stderr, "\nCan't locate Ghostscript ! Exiting ...\n");
+ return EXIT_FAILURE;
+ }
+
+ if (!gs_dll_initialize()) {
+ fprintf(stderr, "Can't initialize ghostscript, exiting ...\n");
+ return EXIT_FAILURE;
+ }
+
+ if ((status = (*pgsdll_init)(gsdll_callback,
+ NULL,
+ gs_argc - 1,
+ gs_argv)) == 0) {
+ /* Should not happen : gs should quit right after being initialized. */
+ /* fprintf(stderr, "gs exited quickly.\n"); */
+ (*pgsdll_exit)();
+ }
+
+ if (status != 0 && status != GSDLL_INIT_QUIT)
+ fprintf(stderr, "gsdll_init returned %d\n", status);
+
+ gs_dll_release();
+
+ free(gs_argv[5]);
+
+#if 1
+ if(!debug) remove(tmpfile);
+ else printf("keeping temporary file >>%s<<\n",tmpfile);
+#else
+ remove(tmpfile);
+#endif
+
+#else
+ if(compress) copt="-dUseFlateCompression=true";
+ else copt="-dUseFlateCompression=false";
+
+ if(res) sprintf(ropt,"-r%d",res);
+ else ropt[0]='\0';
+
+ if(res && debug) printf(" (%d dpi) ... ",res);
+
+ sprintf(command,"%s -q -dNOPAUSE -dBATCH %s -sDEVICE=%s %s %s"
+ " \"-sOutputFile=%s\" -c save pop -f \"%s\"",
+ gsexec,copt,device,ropt,gsopt,outfile,tmpfile);
+ if(debug) printf("running ghostscript ...\n");
+ if(debug) puts(command);
+ status=system(command);
+ if(!debug) remove(tmpfile);
+ else printf("keeping temporary file >>%s<<\n",tmpfile);
+#endif /* ! FPTEX */
+ }
+
+ if(!filter) printf("Done\n");
+
+
+
+ EXIT:
+
+ free(outfile);
+ free(tmpfile);
+ free(gsopt);
+
+ if(wait){
+ printf("\n<Press a key> ");
+ getchar();
+ printf("\n");
+ }
+
+ return status;
+}
diff --git a/Build/source/texk/tetex/win32/epstopdf.txt b/Build/source/texk/tetex/win32/epstopdf.txt
new file mode 100644
index 00000000000..f2dbeb2eccb
--- /dev/null
+++ b/Build/source/texk/tetex/win32/epstopdf.txt
@@ -0,0 +1,25 @@
+EPSTOPDF is a simple utility for converting an eps file to a pdf file.
+You can read the following message whenever just typing
+EPSTOPDF and pressing the return key.
+
+------------------------------------------------------------------------
+epstopdf:
+written by Kong Hoon Lee, konghoon@hyowon.cc.pusan.ac.kr <4/1/1999>
+changes by Juergen Bausa, bausa@lfpt.rwth-aachen.de <1/11/2000>
+
+It converts an EPS file to an encapsulated PDF File and is written
+based on the perl script 'epstopdf' by Sebastian Rahtz on
+http://tug.org/applications/pdftex/epstopdf .
+It works like the perl script without 'perl' but requires 'Ghostscript'.
+
+This program invokes 'gs' and the path including 'gs'
+should be included to the environment variable 'PATH'.
+
+Usage: epstopdf [options] filename-of-an-eps-file
+Options:
+ --help: print usage
+ --outfile=<file>: write result to <file>
+ --(no)gs: run ghostscript (default: true)
+ --(no)compress: use compression (default: true)
+ --(no)debug: debug informations (default: false)
+ --gsexec=<gs>: use <gs> to invoke ghostscript (default: gs)