From 487ca4806cc046076293cf6cc5fbba0db282bac7 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 17 Jan 2006 21:41:51 +0000 Subject: texk 1 git-svn-id: svn://tug.org/texlive/trunk@1485 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/tetex/ChangeLog | 3 + Build/source/texk/tetex/Makefile.in | 120 + Build/source/texk/tetex/README.a2ping | 9 + Build/source/texk/tetex/README.texdoctk | 298 ++ Build/source/texk/tetex/a2ping | 2399 ++++++++++ Build/source/texk/tetex/allcm | 118 + Build/source/texk/tetex/allcm.man | 28 + Build/source/texk/tetex/allec.man | 28 + Build/source/texk/tetex/allneeded | 46 + Build/source/texk/tetex/allneeded.man | 30 + Build/source/texk/tetex/configure | 1605 +++++++ Build/source/texk/tetex/configure.in | 12 + Build/source/texk/tetex/depend.mak | 0 Build/source/texk/tetex/doc/Makefile | 28 + Build/source/texk/tetex/doc/TETEXDOC.bib | 15 + Build/source/texk/tetex/doc/TETEXDOC.dvi | Bin 0 -> 81240 bytes Build/source/texk/tetex/doc/TETEXDOC.pdf | Bin 0 -> 337756 bytes Build/source/texk/tetex/doc/TETEXDOC.ps | 4418 +++++++++++++++++ Build/source/texk/tetex/doc/TETEXDOC.tex | 1134 +++++ Build/source/texk/tetex/doc/teTeX-FAQ | 440 ++ Build/source/texk/tetex/dvi2fax | 41 + Build/source/texk/tetex/dvi2fax.man | 22 + Build/source/texk/tetex/dvired | 98 + Build/source/texk/tetex/dvired.man | 63 + Build/source/texk/tetex/e2pall | 89 + Build/source/texk/tetex/e2pall.man | 55 + Build/source/texk/tetex/epstopdf | 406 ++ Build/source/texk/tetex/epstopdf.man | 54 + Build/source/texk/tetex/epstopdf.rc | 32 + Build/source/texk/tetex/fdf2tex.man | 31 + Build/source/texk/tetex/fmtutil | 883 ++++ Build/source/texk/tetex/fmtutil-sys | 29 + Build/source/texk/tetex/fmtutil.cnf.5 | 75 + Build/source/texk/tetex/fmtutil.man | 80 + Build/source/texk/tetex/fontinst | 16 + Build/source/texk/tetex/fontinst.bat | 2 + Build/source/texk/tetex/fontinst.man | 45 + Build/source/texk/tetex/kpsetool | 118 + Build/source/texk/tetex/kpsetool.man | 106 + Build/source/texk/tetex/kpsewhere | 63 + Build/source/texk/tetex/kpsewhere.man | 50 + Build/source/texk/tetex/latex.info | 4309 +++++++++++++++++ Build/source/texk/tetex/latex2e.texi | 5260 +++++++++++++++++++++ Build/source/texk/tetex/makempy.man | 60 + Build/source/texk/tetex/mkocp.man | 50 + Build/source/texk/tetex/mkofm.man | 33 + Build/source/texk/tetex/ofm2opl.man | 91 + Build/source/texk/tetex/opl2ofm.man | 74 + Build/source/texk/tetex/otp2ocp.man | 41 + Build/source/texk/tetex/outocp.man | 44 + Build/source/texk/tetex/ovf2ovp.man | 87 + Build/source/texk/tetex/ovp2ovf.man | 78 + Build/source/texk/tetex/pdfetex-pl.pool | 1652 +++++++ Build/source/texk/tetex/ps2frag | 11 + Build/source/texk/tetex/ps2frag.man | 41 + Build/source/texk/tetex/ps4pdf | 104 + Build/source/texk/tetex/pslatex | 46 + Build/source/texk/tetex/pslatex.man | 44 + Build/source/texk/tetex/rubibtex | 110 + Build/source/texk/tetex/rubibtex.man | 63 + Build/source/texk/tetex/rumakeindex | 77 + Build/source/texk/tetex/rumakeindex.man | 63 + Build/source/texk/tetex/tcfmgr | 385 ++ Build/source/texk/tetex/tcfmgr.map | 10 + Build/source/texk/tetex/texconfig | 1412 ++++++ Build/source/texk/tetex/texconfig-dialog | 495 ++ Build/source/texk/tetex/texconfig-sys | 30 + Build/source/texk/tetex/texconfig.man | 27 + Build/source/texk/tetex/texdoc | 206 + Build/source/texk/tetex/texdoc.man | 94 + Build/source/texk/tetex/texdoctk | 1794 +++++++ Build/source/texk/tetex/texdoctk.man | 217 + Build/source/texk/tetex/texexec | 24 + Build/source/texk/tetex/texexec.man | 574 +++ Build/source/texk/tetex/texfind.man | 72 + Build/source/texk/tetex/texfont.man | 84 + Build/source/texk/tetex/texlinks | 290 ++ Build/source/texk/tetex/texlinks.man | 65 + Build/source/texk/tetex/texmf/texconfig/README | 23 + Build/source/texk/tetex/texmf/texconfig/g/generic | Bin 0 -> 981 bytes Build/source/texk/tetex/texmf/texconfig/generic | 10 + Build/source/texk/tetex/texmf/texconfig/v/vt100 | Bin 0 -> 1230 bytes Build/source/texk/tetex/texmf/texconfig/x/xterm | Bin 0 -> 1368 bytes Build/source/texk/tetex/texshow.man | 69 + Build/source/texk/tetex/texutil.man | 266 ++ Build/source/texk/tetex/thumbpdf.man | 100 + Build/source/texk/tetex/ttf2afm.man | 74 + Build/source/texk/tetex/updmap | 1383 ++++++ Build/source/texk/tetex/updmap-sys | 30 + Build/source/texk/tetex/updmap.cfg.5 | 137 + Build/source/texk/tetex/updmap.man | 260 + Build/source/texk/tetex/updmap.pl | 1136 +++++ Build/source/texk/tetex/vpe.pl | 421 ++ Build/source/texk/tetex/win32.mak | 256 + Build/source/texk/tetex/win32/epstopdf.c | 735 +++ Build/source/texk/tetex/win32/epstopdf.txt | 25 + 96 files changed, 36131 insertions(+) create mode 100644 Build/source/texk/tetex/ChangeLog create mode 100644 Build/source/texk/tetex/Makefile.in create mode 100644 Build/source/texk/tetex/README.a2ping create mode 100644 Build/source/texk/tetex/README.texdoctk create mode 100755 Build/source/texk/tetex/a2ping create mode 100755 Build/source/texk/tetex/allcm create mode 100644 Build/source/texk/tetex/allcm.man create mode 100644 Build/source/texk/tetex/allec.man create mode 100755 Build/source/texk/tetex/allneeded create mode 100644 Build/source/texk/tetex/allneeded.man create mode 100755 Build/source/texk/tetex/configure create mode 100644 Build/source/texk/tetex/configure.in create mode 100644 Build/source/texk/tetex/depend.mak create mode 100644 Build/source/texk/tetex/doc/Makefile create mode 100644 Build/source/texk/tetex/doc/TETEXDOC.bib create mode 100644 Build/source/texk/tetex/doc/TETEXDOC.dvi create mode 100644 Build/source/texk/tetex/doc/TETEXDOC.pdf create mode 100644 Build/source/texk/tetex/doc/TETEXDOC.ps create mode 100644 Build/source/texk/tetex/doc/TETEXDOC.tex create mode 100644 Build/source/texk/tetex/doc/teTeX-FAQ create mode 100755 Build/source/texk/tetex/dvi2fax create mode 100644 Build/source/texk/tetex/dvi2fax.man create mode 100755 Build/source/texk/tetex/dvired create mode 100644 Build/source/texk/tetex/dvired.man create mode 100755 Build/source/texk/tetex/e2pall create mode 100644 Build/source/texk/tetex/e2pall.man create mode 100755 Build/source/texk/tetex/epstopdf create mode 100644 Build/source/texk/tetex/epstopdf.man create mode 100644 Build/source/texk/tetex/epstopdf.rc create mode 100644 Build/source/texk/tetex/fdf2tex.man create mode 100755 Build/source/texk/tetex/fmtutil create mode 100755 Build/source/texk/tetex/fmtutil-sys create mode 100644 Build/source/texk/tetex/fmtutil.cnf.5 create mode 100644 Build/source/texk/tetex/fmtutil.man create mode 100755 Build/source/texk/tetex/fontinst create mode 100644 Build/source/texk/tetex/fontinst.bat create mode 100644 Build/source/texk/tetex/fontinst.man create mode 100755 Build/source/texk/tetex/kpsetool create mode 100644 Build/source/texk/tetex/kpsetool.man create mode 100755 Build/source/texk/tetex/kpsewhere create mode 100644 Build/source/texk/tetex/kpsewhere.man create mode 100644 Build/source/texk/tetex/latex.info create mode 100644 Build/source/texk/tetex/latex2e.texi create mode 100644 Build/source/texk/tetex/makempy.man create mode 100644 Build/source/texk/tetex/mkocp.man create mode 100644 Build/source/texk/tetex/mkofm.man create mode 100644 Build/source/texk/tetex/ofm2opl.man create mode 100644 Build/source/texk/tetex/opl2ofm.man create mode 100644 Build/source/texk/tetex/otp2ocp.man create mode 100644 Build/source/texk/tetex/outocp.man create mode 100644 Build/source/texk/tetex/ovf2ovp.man create mode 100644 Build/source/texk/tetex/ovp2ovf.man create mode 100644 Build/source/texk/tetex/pdfetex-pl.pool create mode 100755 Build/source/texk/tetex/ps2frag create mode 100644 Build/source/texk/tetex/ps2frag.man create mode 100644 Build/source/texk/tetex/ps4pdf create mode 100755 Build/source/texk/tetex/pslatex create mode 100644 Build/source/texk/tetex/pslatex.man create mode 100755 Build/source/texk/tetex/rubibtex create mode 100644 Build/source/texk/tetex/rubibtex.man create mode 100755 Build/source/texk/tetex/rumakeindex create mode 100644 Build/source/texk/tetex/rumakeindex.man create mode 100755 Build/source/texk/tetex/tcfmgr create mode 100644 Build/source/texk/tetex/tcfmgr.map create mode 100755 Build/source/texk/tetex/texconfig create mode 100755 Build/source/texk/tetex/texconfig-dialog create mode 100755 Build/source/texk/tetex/texconfig-sys create mode 100644 Build/source/texk/tetex/texconfig.man create mode 100755 Build/source/texk/tetex/texdoc create mode 100644 Build/source/texk/tetex/texdoc.man create mode 100755 Build/source/texk/tetex/texdoctk create mode 100644 Build/source/texk/tetex/texdoctk.man create mode 100755 Build/source/texk/tetex/texexec create mode 100644 Build/source/texk/tetex/texexec.man create mode 100644 Build/source/texk/tetex/texfind.man create mode 100644 Build/source/texk/tetex/texfont.man create mode 100755 Build/source/texk/tetex/texlinks create mode 100644 Build/source/texk/tetex/texlinks.man create mode 100644 Build/source/texk/tetex/texmf/texconfig/README create mode 100644 Build/source/texk/tetex/texmf/texconfig/g/generic create mode 100644 Build/source/texk/tetex/texmf/texconfig/generic create mode 100644 Build/source/texk/tetex/texmf/texconfig/v/vt100 create mode 100644 Build/source/texk/tetex/texmf/texconfig/x/xterm create mode 100644 Build/source/texk/tetex/texshow.man create mode 100644 Build/source/texk/tetex/texutil.man create mode 100644 Build/source/texk/tetex/thumbpdf.man create mode 100644 Build/source/texk/tetex/ttf2afm.man create mode 100755 Build/source/texk/tetex/updmap create mode 100755 Build/source/texk/tetex/updmap-sys create mode 100644 Build/source/texk/tetex/updmap.cfg.5 create mode 100644 Build/source/texk/tetex/updmap.man create mode 100644 Build/source/texk/tetex/updmap.pl create mode 100644 Build/source/texk/tetex/vpe.pl create mode 100644 Build/source/texk/tetex/win32.mak create mode 100644 Build/source/texk/tetex/win32/epstopdf.c create mode 100644 Build/source/texk/tetex/win32/epstopdf.txt (limited to 'Build/source/texk/tetex') 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" ) 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: +;Short description for listbox (opt. );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 , , and definitions active in + all widgets; thus, you don't need to type in the main window + to quit, for example. Introduced new global key binding for raising + the main window (). + - 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. 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 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=: write result to +# --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] [[:] ] +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 " 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=; + 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=) or $line!~/^%!PS-Adobe-\d.*EPSF-\d/; + my @L; # $papersize_x, $papersize_y + while () { + 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 $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 - + 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{ + { % + 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) } # 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 $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 [B<-->]B + B [B<-->]B + B [I] > [[I:] I] + +=head1 DESCRIPTION + +B 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 delegates the low-level work to +Ghostscript (GS), B and B. B 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 detects the file +format based on the first few bytes of the file. The name of the output +file matters if I is missing from the command line: then the +extension of the output file determines the FileFormat (I). + +=head1 EXTERNAL PROGRAMS + +The internal file format of B is PS/EPS. Everything read is +first converted to PS or EPS, then processed by B, 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 from the B package is used. + +Sampled input formats are PNG, JPEG, TIFF, PNM, BMP, GIF, LBM, XPM, PCX +and TGA. To read sampled input formats, B is used. B is +a raster image converter written in C++ by the author of B. + +Extra output formats are PNG, XWD, BMP, TIFF, JPEG, GIF and XPM. To +write extra output formats, B 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 + +=item * + +You can specify B<-> as I to get stdin and as I +to get stdout. This works even for PDF files (which must be seekable), +because B copies them to a temporary file automatically. + +=item * + +If I and I are the same, B copies the +I 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 doesn't produce the desired result. + +=item * + +If you specify B<--> as I, it will be the same as I. + +=item * + +B 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 + +=item * + +If you have a PS coming from Win32 (often with extension C<.prn>), run +it through B. 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 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 is Szabó Péter >. + +B is inspired by and historically based on the B Perl +script modified by Thomas Esser, Sept. 1998, but his modifications have +been removed from B, and also B and B do not +share common code anymore. B is written by Sebastian Rahtz, +for Elsevier Science. B 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 + * 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 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 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 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 <&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 </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 < 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 <> $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 <> $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 <> $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 <> $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 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 Binary files /dev/null and b/Build/source/texk/tetex/doc/TETEXDOC.dvi 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 Binary files /dev/null and b/Build/source/texk/tetex/doc/TETEXDOC.pdf 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(/)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//)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+/+ 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//+. 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 + + +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}//. 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 -*- 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 < "$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 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 , 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 +# * 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=){ + # 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 and published in a posting to +the (mailing list)\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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] +Options: + --help: print usage + --outfile=: write result to + --(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 + $buf .= 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 { + $_ = ; + } + return( defined( $_)); +} + +### mytell and myseek, work on 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 -*- 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 + + 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 + +#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 + +/* 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 , +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 \ + && { 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 <&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 <&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 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 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: +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fIfmtutil\&.cnf\fP was written by Thomas Esser +, and is Copyright 1998, +1999 but released into the public domain\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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: +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fBfmtutil\fP was written by Thomas Esser + and is Copyright 1998 Thomas +Esser\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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: +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to tex-fonts@tug\&.org (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +Thomas Esser + +.PP +This manual page was written by C\&.M\&. Connelly +, 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 , 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: +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fBkpsetool\fP was written by Thomas Esser + in March, 1997\&. \fBkpsetool\fP +is in the public domain\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 +# +# 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: +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fBkpsewhere\fP was written by Hans Fredrik Nordhaug +, additions by +Thomas Esser +, in 2003 and 2004\&. \fBkpsewhere\fP +is in the public domain\&. +.PP +This manual page was written by Frank Küster , +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 +. + + The LaTeX2e version was adapted from this by Torsten Martinsen +. + + 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 +************* + +[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 +************* + +[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 . + +The LaTeX2e version was adapted from this by Torsten Martinsen +. + +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 , August 26th 1993. + +Version 1.1 was made by Piet van Oostrum on Dec 14, +1993 by merging and cleaning up latex.texi and latex2.texi. + +Versions 1.2 trough 1.6 by Torsten Martinsen . + +@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 , +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: +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fBmkocp\fP is part of Omega\&. The primary authors of Omega are John Plaice + and Yannis Haralambous +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 +, 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 (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: +.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 + and Yannis Haralambous +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 (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: +.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 + and Yannis Haralambous +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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: +.PP +.SH "AUTHOR" +.PP +The primary authors of Omega are John Plaice + and Yannis Haralambous +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 (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: +.PP +.SH "AUTHOR" +.PP +The primary authors of Omega are John Plaice + and Yannis Haralambous +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 (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: +.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 + and Yannis Haralambous +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 (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: +.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 + and Yannis Haralambous +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 -- 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 +08 +10 +19 +24 +18 +09 +11 +12 +15 +12 +12 +11 +10 +07 +11 +08 +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 +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='. +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='. +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 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 '. +53Znalaz³em bez odpowiedniego kleju +54, 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 to '. +36Teraz bêdê chcia³ zobaczyæ . +27Tutaj powinno byæ +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 '. +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 between \mubyte and \endmubyte. +27The empty , +08 ignored +22The in +62\mubyte \endmubyte should not be empty. +07chardef +11mathchardef +08countdef +08dimendef +07skipdef +09muskipdef +07toksdef +10charsubdef +27Nowe podstawienie za znak: +03 = +46Powiniene¶ by³ napisaæ `\read 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 ($log 2>&1 /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 +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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), +\&. +.PP +.SH "AUTHOR" +.PP +Werner Lemberg +, Vladimir Volovich +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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), +\&. +.PP +.SH "AUTHOR" +.PP +Werner Lemberg +, Vladimir Volovich +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 < "$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" < "$TFC_TEMP/$TFC_ID/file" </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 </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' &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 + *) + 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 + *) + 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 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 +# +# This version rewritten for use with bash 2 and teTeX under Linux by +# Simon Wilkinson +# +# Changes for web2c-7.2 resp. teTeX-0.9 and portability fixes by +# Thomas Esser , 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: +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fBtexdoc\fP was written by Thomas Esser +, David Aspinall +, and +Simon Wilkinson + during 1998 and 1999\&. \fBtexdoc\fP is in the public +domain\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 = ) { + 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 = ) { + 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',''=>\&clean_exit); +$main->bind('all',''=>sub { $main->raise(); }); +$main->bind('all',''=>\&helptext); +$main->bind('all',''=>sub { $main->raise(); &mksrch; }); +$main->bind('all',''=>\&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(''=>sub{my ($slctind)=$tplist->curselection(); + $dspselect=$lbitems[$slctind]; + $docselect=$lbdocs[$slctind];}); +# key bindings + $tplist->bind(''=>sub{ + &viewslc($docselect,$tpbframe);}); + $tpwin->bind(''=>sub{ + &viewslc($docselect,$tpbframe);}); + $tpwin->bind(''=>sub{ + &prtslc($docselect,$tpbframe);}); + $tpwin->bind(''=>sub{destroy $tpwin; undef $tlwins{$opt};}); + $tplist->bind(''=>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=) { 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 () { $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(''=>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(''=>[\&srchstr, $srchentry]); + $srchflag=1; +# key binding + $srchentry->bind(''=>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 = ) { push @stydoc,$line if ($line =~ /^%/); } + last LOC; + }; + ($stydoc{$slc} == 1) && do { # at end, behind \endinput + while ($line = ) { + last if ($line =~ /^\s*\\endinput/ && !($line =~ /^%/)); + } + while ($line = ) { 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]=; } # after the 8th line + while ($line = ) { + last if ($line =~ /^%{4,}/); + push @stydoc,$line; + } + last LOC; + }; + ($stydoc{$slc} == 3) && do { # up to 1st blank/apparently empty line + while ($line = ) { + 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(''=>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(''=>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(''=>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 () { + $_ =~ 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(''=>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 = ) { + 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 () { + 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(''=>sub { exit }); + $main->bind(''=>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 to start the search or to +cancel. Just hitting 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: + Quit browser + Raise the Main window to the foreground + Search a keyword in database (case insensitive) + Cancel/close subwindow or search entry widget + View selected document (topic windows) + Print selected document (topic windows) + Open settings menu + Kill fatal error message window (same as + ) + Open this help + Equivalent to button press; + OK in selection menu and search + 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 . +.PP +This manual page was originally written by Adrian Bunk 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 + and C\&.M\&. Connelly +\&. It is based on +the \fBTeXExec\fP manual written by Hans Hagen +\&. +.IP +The PDF manual and \fBtexexec\fP itself can be obtained from + 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 , +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 , +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 + 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: +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fBtexlinks\fP was written by Thomas Esser + and is Copyright © 1999\&. +\fBtexlinks\fP has been released into the public domain\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 Binary files /dev/null and b/Build/source/texk/tetex/texmf/texconfig/g/generic 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 Binary files /dev/null and b/Build/source/texk/tetex/texmf/texconfig/v/vt100 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 Binary files /dev/null and b/Build/source/texk/tetex/texmf/texconfig/x/xterm 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: +.PP +.SH "AUTHOR" +.PP +\fBtexshow\fP was written by Hans Hagen +\&. +.PP +This manpage was written by Tobias Burnus + and C\&.M\&. Connelly +\&. +.PP +\fBtexshow\fP is part of \fBTeXWork\fP and \fBConTeXt\fP and is available +from \&. +.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: +.PP +.SH "AUTHOR" +.PP +This manpage was written by C\&.M\&. Connelly + and Tobias Burnus +\&. It is based on +the \fBtexutil\fP manual written by Hans Hagen +\&. +.PP +The PDF manual and \fBtexutil\fP itself can be obtained at +\&. 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: +.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 +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fBttf2afm\fP is part of pdfTeX and was written by Han The Thanh +\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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 <> "$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 +.\" +.\" 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 , 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\fP +.PP +.SH "BUGS" +.PP +None known, but report any bugs found to (mailing list)\&. +.PP +.SH "AUTHOR" +.PP +\fBupdmap\fP was written by Thomas Esser + and is in the public domain\&. +.PP +This manual page was written by C\&.M\&. Connelly +, 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, ; + 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 ; + 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 = ; + 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"; + ©File("$dvipsoutputdir/$src", "$dvipsoutputdir/psfonts.map"); + + if ($pdftexDownloadBase14) { + $src = "pdftex_dl14.map"; + } else { + $src = "pdftex_ndl14.map"; + } + unlink "$pdftexoutputdir/pdftex.map"; + ©File("$pdftexoutputdir/$src", "$pdftexoutputdir/pdftex.map"); + + if ($dvipdfmDownloadBase14) { + $src = "dvipdfm_dl14.map"; + } else { + $src = "dvipdfm_ndl14.map"; + } + unlink "$dvipdfmoutputdir/dvipdfm.map"; + ©File("$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"; + ©File("$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/; + ©File($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] + 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=...] + +* [system] Internal for vpe.sty: + Syntax: vpe --system + +* [launch] Syntax: .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 () { + $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 () { + + 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<>"; + $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 +# 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 + +{$(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 + +installdirs = "$(perlscriptdir)" + +!include + +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 + +!include +!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 +#include +#include +#include +#define MAX_IN 10000 + +#define DEBUG 1 + +#ifdef FPTEX + +#include +#include + +/* 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=: write result to \n"); + printf(" --tmpfile=: use 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=: use to invoke ghostscript (default: %s)\n",GSEXEC); + printf(" --enlarge=: enlarge BB by /72 '' (default: 0.)\n"); + printf(" -sDEVICE= : use as output device (default: pdfwrite)\n"); + printf(" -r: output resolution for gs (default: 600)\n"); + printf(" --width=: output width in pixels (default: none)\n"); + printf(" --height=: output height in pixels (default: none)\n"); + printf(" --gsopt=: add 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>%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>%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 "); + 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=: write result to + --(no)gs: run ghostscript (default: true) + --(no)compress: use compression (default: true) + --(no)debug: debug informations (default: false) + --gsexec=: use to invoke ghostscript (default: gs) -- cgit v1.2.3