From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/frankenstein/ChangeLog | 404 ++ macros/latex/contrib/frankenstein/Frankenfile | 1532 +++++ macros/latex/contrib/frankenstein/INSTALL | 321 + macros/latex/contrib/frankenstein/Makefile | 249 + macros/latex/contrib/frankenstein/README | 243 + macros/latex/contrib/frankenstein/abbrevs.cfg | 290 + macros/latex/contrib/frankenstein/abbrevs.ins | 64 + macros/latex/contrib/frankenstein/abbrevs.pdf | Bin 0 -> 212833 bytes macros/latex/contrib/frankenstein/abbrevs.sty | 1299 ++++ macros/latex/contrib/frankenstein/abbrevs.tex | 67 + macros/latex/contrib/frankenstein/achicago-bst.ins | 64 + macros/latex/contrib/frankenstein/achicago-bst.pdf | Bin 0 -> 412506 bytes macros/latex/contrib/frankenstein/achicago-bst.tex | 67 + macros/latex/contrib/frankenstein/achicago-bst.ver | 18 + macros/latex/contrib/frankenstein/achicago.bst | 3551 +++++++++++ macros/latex/contrib/frankenstein/achicago.ins | 64 + macros/latex/contrib/frankenstein/achicago.pdf | Bin 0 -> 134780 bytes macros/latex/contrib/frankenstein/achicago.sty | 711 +++ macros/latex/contrib/frankenstein/achicago.tex | 67 + macros/latex/contrib/frankenstein/allocate.sto | 442 ++ macros/latex/contrib/frankenstein/attrib.ins | 64 + macros/latex/contrib/frankenstein/attrib.pdf | Bin 0 -> 137127 bytes macros/latex/contrib/frankenstein/attrib.sty | 549 ++ macros/latex/contrib/frankenstein/attrib.tex | 67 + macros/latex/contrib/frankenstein/blkcntrl.ins | 64 + macros/latex/contrib/frankenstein/blkcntrl.pdf | Bin 0 -> 76903 bytes macros/latex/contrib/frankenstein/blkcntrl.sty | 298 + macros/latex/contrib/frankenstein/blkcntrl.tex | 67 + macros/latex/contrib/frankenstein/compsci.cfg | 66 + macros/latex/contrib/frankenstein/compsci.ins | 64 + macros/latex/contrib/frankenstein/compsci.pdf | Bin 0 -> 170938 bytes macros/latex/contrib/frankenstein/compsci.sty | 1124 ++++ macros/latex/contrib/frankenstein/compsci.tex | 67 + macros/latex/contrib/frankenstein/dialogue.ins | 64 + macros/latex/contrib/frankenstein/dialogue.pdf | Bin 0 -> 98763 bytes macros/latex/contrib/frankenstein/dialogue.sty | 273 + macros/latex/contrib/frankenstein/dialogue.tex | 67 + macros/latex/contrib/frankenstein/frankenstein.bib | 6378 ++++++++++++++++++++ macros/latex/contrib/frankenstein/lips.ins | 64 + macros/latex/contrib/frankenstein/lips.pdf | Bin 0 -> 115576 bytes macros/latex/contrib/frankenstein/lips.sty | 555 ++ macros/latex/contrib/frankenstein/lips.tex | 67 + macros/latex/contrib/frankenstein/moredefs.ins | 64 + macros/latex/contrib/frankenstein/moredefs.pdf | Bin 0 -> 171823 bytes macros/latex/contrib/frankenstein/moredefs.sty | 1478 +++++ macros/latex/contrib/frankenstein/moredefs.tex | 67 + macros/latex/contrib/frankenstein/newclude.ins | 64 + macros/latex/contrib/frankenstein/newclude.pdf | Bin 0 -> 227643 bytes macros/latex/contrib/frankenstein/newclude.sty | 959 +++ macros/latex/contrib/frankenstein/newclude.tex | 67 + macros/latex/contrib/frankenstein/simple.sto | 58 + macros/latex/contrib/frankenstein/slemph.cfg | 27 + macros/latex/contrib/frankenstein/slemph.ins | 64 + macros/latex/contrib/frankenstein/slemph.pdf | Bin 0 -> 75976 bytes macros/latex/contrib/frankenstein/slemph.sty | 214 + macros/latex/contrib/frankenstein/slemph.tex | 67 + macros/latex/contrib/frankenstein/tag.sto | 441 ++ macros/latex/contrib/frankenstein/titles.cfg | 412 ++ macros/latex/contrib/frankenstein/titles.ins | 64 + macros/latex/contrib/frankenstein/titles.pdf | Bin 0 -> 199455 bytes macros/latex/contrib/frankenstein/titles.sty | 1312 ++++ macros/latex/contrib/frankenstein/titles.tex | 67 + .../frankenstein/unsupported/README-unsupported | 150 + .../contrib/frankenstein/unsupported/bits.cfg | 20 + .../contrib/frankenstein/unsupported/bits.ins | 64 + .../contrib/frankenstein/unsupported/bits.pdf | Bin 0 -> 134601 bytes .../contrib/frankenstein/unsupported/bits.sty | 1070 ++++ .../contrib/frankenstein/unsupported/bits.tex | 67 + .../contrib/frankenstein/unsupported/drama.ins | 64 + .../contrib/frankenstein/unsupported/drama.pdf | Bin 0 -> 93998 bytes .../contrib/frankenstein/unsupported/drama.sty | 488 ++ .../contrib/frankenstein/unsupported/drama.tex | 67 + .../frankenstein/unsupported/includex-test.tex | 206 + .../contrib/frankenstein/unsupported/includex.ins | 64 + .../contrib/frankenstein/unsupported/includex.pdf | Bin 0 -> 95848 bytes .../contrib/frankenstein/unsupported/includex.sty | 492 ++ .../contrib/frankenstein/unsupported/includex.tex | 67 + 77 files changed, 27595 insertions(+) create mode 100644 macros/latex/contrib/frankenstein/ChangeLog create mode 100644 macros/latex/contrib/frankenstein/Frankenfile create mode 100644 macros/latex/contrib/frankenstein/INSTALL create mode 100644 macros/latex/contrib/frankenstein/Makefile create mode 100644 macros/latex/contrib/frankenstein/README create mode 100644 macros/latex/contrib/frankenstein/abbrevs.cfg create mode 100644 macros/latex/contrib/frankenstein/abbrevs.ins create mode 100644 macros/latex/contrib/frankenstein/abbrevs.pdf create mode 100644 macros/latex/contrib/frankenstein/abbrevs.sty create mode 100644 macros/latex/contrib/frankenstein/abbrevs.tex create mode 100644 macros/latex/contrib/frankenstein/achicago-bst.ins create mode 100644 macros/latex/contrib/frankenstein/achicago-bst.pdf create mode 100644 macros/latex/contrib/frankenstein/achicago-bst.tex create mode 100644 macros/latex/contrib/frankenstein/achicago-bst.ver create mode 100644 macros/latex/contrib/frankenstein/achicago.bst create mode 100644 macros/latex/contrib/frankenstein/achicago.ins create mode 100644 macros/latex/contrib/frankenstein/achicago.pdf create mode 100644 macros/latex/contrib/frankenstein/achicago.sty create mode 100644 macros/latex/contrib/frankenstein/achicago.tex create mode 100644 macros/latex/contrib/frankenstein/allocate.sto create mode 100644 macros/latex/contrib/frankenstein/attrib.ins create mode 100644 macros/latex/contrib/frankenstein/attrib.pdf create mode 100644 macros/latex/contrib/frankenstein/attrib.sty create mode 100644 macros/latex/contrib/frankenstein/attrib.tex create mode 100644 macros/latex/contrib/frankenstein/blkcntrl.ins create mode 100644 macros/latex/contrib/frankenstein/blkcntrl.pdf create mode 100644 macros/latex/contrib/frankenstein/blkcntrl.sty create mode 100644 macros/latex/contrib/frankenstein/blkcntrl.tex create mode 100644 macros/latex/contrib/frankenstein/compsci.cfg create mode 100644 macros/latex/contrib/frankenstein/compsci.ins create mode 100644 macros/latex/contrib/frankenstein/compsci.pdf create mode 100644 macros/latex/contrib/frankenstein/compsci.sty create mode 100644 macros/latex/contrib/frankenstein/compsci.tex create mode 100644 macros/latex/contrib/frankenstein/dialogue.ins create mode 100644 macros/latex/contrib/frankenstein/dialogue.pdf create mode 100644 macros/latex/contrib/frankenstein/dialogue.sty create mode 100644 macros/latex/contrib/frankenstein/dialogue.tex create mode 100644 macros/latex/contrib/frankenstein/frankenstein.bib create mode 100644 macros/latex/contrib/frankenstein/lips.ins create mode 100644 macros/latex/contrib/frankenstein/lips.pdf create mode 100644 macros/latex/contrib/frankenstein/lips.sty create mode 100644 macros/latex/contrib/frankenstein/lips.tex create mode 100644 macros/latex/contrib/frankenstein/moredefs.ins create mode 100644 macros/latex/contrib/frankenstein/moredefs.pdf create mode 100644 macros/latex/contrib/frankenstein/moredefs.sty create mode 100644 macros/latex/contrib/frankenstein/moredefs.tex create mode 100644 macros/latex/contrib/frankenstein/newclude.ins create mode 100644 macros/latex/contrib/frankenstein/newclude.pdf create mode 100644 macros/latex/contrib/frankenstein/newclude.sty create mode 100644 macros/latex/contrib/frankenstein/newclude.tex create mode 100644 macros/latex/contrib/frankenstein/simple.sto create mode 100644 macros/latex/contrib/frankenstein/slemph.cfg create mode 100644 macros/latex/contrib/frankenstein/slemph.ins create mode 100644 macros/latex/contrib/frankenstein/slemph.pdf create mode 100644 macros/latex/contrib/frankenstein/slemph.sty create mode 100644 macros/latex/contrib/frankenstein/slemph.tex create mode 100644 macros/latex/contrib/frankenstein/tag.sto create mode 100644 macros/latex/contrib/frankenstein/titles.cfg create mode 100644 macros/latex/contrib/frankenstein/titles.ins create mode 100644 macros/latex/contrib/frankenstein/titles.pdf create mode 100644 macros/latex/contrib/frankenstein/titles.sty create mode 100644 macros/latex/contrib/frankenstein/titles.tex create mode 100644 macros/latex/contrib/frankenstein/unsupported/README-unsupported create mode 100644 macros/latex/contrib/frankenstein/unsupported/bits.cfg create mode 100644 macros/latex/contrib/frankenstein/unsupported/bits.ins create mode 100644 macros/latex/contrib/frankenstein/unsupported/bits.pdf create mode 100644 macros/latex/contrib/frankenstein/unsupported/bits.sty create mode 100644 macros/latex/contrib/frankenstein/unsupported/bits.tex create mode 100644 macros/latex/contrib/frankenstein/unsupported/drama.ins create mode 100644 macros/latex/contrib/frankenstein/unsupported/drama.pdf create mode 100644 macros/latex/contrib/frankenstein/unsupported/drama.sty create mode 100644 macros/latex/contrib/frankenstein/unsupported/drama.tex create mode 100644 macros/latex/contrib/frankenstein/unsupported/includex-test.tex create mode 100644 macros/latex/contrib/frankenstein/unsupported/includex.ins create mode 100644 macros/latex/contrib/frankenstein/unsupported/includex.pdf create mode 100644 macros/latex/contrib/frankenstein/unsupported/includex.sty create mode 100644 macros/latex/contrib/frankenstein/unsupported/includex.tex (limited to 'macros/latex/contrib/frankenstein') diff --git a/macros/latex/contrib/frankenstein/ChangeLog b/macros/latex/contrib/frankenstein/ChangeLog new file mode 100644 index 0000000000..f1e0e1b596 --- /dev/null +++ b/macros/latex/contrib/frankenstein/ChangeLog @@ -0,0 +1,404 @@ +2001-09-08 Matt Swift + + * abbrevs.cfg: Add testing for Acromake category. + + * abbrevs.dtx: Added (messy!) acromake emulation. Removed + \TMCurrentMacro for the plain abbrevs -- will deal with that + later. + + * moredefs.dtx: Fixed broken \SaveName. + + * moredefs.dtx: Extend \EExpand...\In examples. + + * Makefile: Remove acromake -- abbrevs now emulates it. + +2001-09-05 Matt Swift + + * titles.dtx: Add \slash to \nospacelist. + +2001-08-31 Matt Swift + + * abbrevs.dtx: Added to \nospacelist the following between bars: + |/\slash\@sptoken\ \space\/\@xobeysp|. Added \TMCurrentMacro. + + * abbrevs.cfg: Add test with \slash. + + * newclude.dtx: Extensive documentation revisions. Incorporation + of includex package. Revision and extension of hooks mechanisms. + Remove "group" option, which seemed inferior in all cases to the + others. + + * titles.dtx: Changed: \booktitle -> \book, \journaltitle -> + \journal, \musictitle -> \music, \articletitle -> \article, + \playtitle -> \play, \crafttitle -> \craft. Compatibility easily + retained in configuration file. New: \species, \WrapquotesSN, + \WrapquotesDN, \WrapquotesSK, \nospacelist (abstraction of what + was hard-coded). Dox revisions. Some code cleanup. + + * titles.cfg: New: \newlet\longpoem\textitswitch + \newlet\film\textitswitch \newlet\essaytitle\Wrapquotes + \newlet\chaptertitle\Wrapquotes. Revise and expand testing to + accommodate changes in titles.dtx. + + * tag.sto: Add 2d optional argument to \include. Revise + documentation. + + * lips.dtx: New: \BracketedLips, \olips, \Lips, mla package + option. + + * group.sto: This file is not distributed any more; it proved + inferior to other newclude solutions in all applications. + + * footnote.dtx: Dox changes only. + + * epigraph.dtx: Remove call to \normalcitations. Remove \EPBox. + Add \@afterheading. + + * compsci.dtx: New: \file \email. Changed: \booktitle -> \book. + Add hyperlatex package option. Make \code not \long. + + * compsci.cfg: Define \ALaTeX instead of \require it (or something + like that). + + * blkcntrl.dtx: Implementation and documentation revisions. + + * bits.dtx: Requires letterhead package -- which I don't think I + distribute. Aha, that's why this is "unsupported"! It may be + usable with a dummy letterhead package. Call scheme-components + tasks now. + + * attrib.dtx: Add \attribcitations. Some dox revisions. + + * allocate.sto: Slight dox revisions. + + * achicago.dtx: Depends on slemph and verbatim too now, but not + relsize. Some code cleanup. Bumped minor version number to + differentiate from what I had up there on my FTP site. + + * achicago-bst.dtx: Extensive revisions to documentation. Thanks + to Panagiotis Louridas for pointing out a significant bug that + would indicate authors with the same last name as the same with a + 3-em dash in the bibliography. More cleanup of code. Major + version to 1; reflects non-beta state. + + * README-unsupported: Remove entry for newclude; revise entry for + includex. + + * README: Add section for newclude. + + * Makefile: bundle-license = LPPL. Newclude moves to supported, + but remove group.sto. Includex remains for now. Alpha-bibstyle + mla: comment out for now, needs work in Frankenfile. + Alpha-configs: add letterhead remove myletter. Dox-requirements: + add attrib. + + * moredefs.dtx: Many documentation changes. Change implementation + of \provideboolean and \newboolean to be compatible with ifthen + package. Fix \prependto@macro \g@prependto@macro so they work. + Fix check for defined macro in \SaveName. Fix \GobbleO \GobbleMO + so they work. Bump \docdate and minor version to distinguish from + limited release on FTP site. + + +1999-03-22 Matthew Swift + + * Makefile: Moved dialogue from alph to stable (was a mistake). + Added ifndefs around HAVE_WEB2C definition. + +1999-03-08 Matthew Swift + + * abbrevs.cfg: Moved basic categories and datemarks to .dtx. + Changed \AbbrevInitialSuffix, \AbbrevSubsequentSuffix back to + \TM.... + + * INSTALL: Added relsize to abbrevs deps. + + * Makefile: Added relsize to abbrevs-deps. + + * abbrevs.dtx: Some dox. Require slemph. Changed + \Abbrev{Initial,Subsequent}Suffix back to \TM... Added basic + categories and datemarks from .cfg to main .dtx. + + * achicago-bst.dtx: Revised some dox, adding the table of entry + types, defining \field, \entry, etc. + + * titles.dtx: Tiny bit of dox. Fixed some mistakes in + commented-out \DTypeouts. + + * compsci.dtx: Fix a bit of dox. + + * README-unsupported: Tidied a bit, and mentioned dependences on + relsize.sty. + + * Makefile: Removed non-bundle fileset rules, dependencies, and + variables. Removed symlinks. + + * INSTALL: Revised handling of non-Frankenstein packages. + Mentioned dox-building requirements. + + * README: Eliminated reference to non-Frankenstein links. + +1999-03-01 Matthew Swift + + * compsci.dtx: Lotso doxo. The whole version-control system + revamped. Also began to kick some butt in my verbatim skills with + a revamp of bothexample that got the kinks out and eliminated + dependence on moreverb. Bracket \email with angle brackets. + + * dialogue.dtx: Updated version to 1.1. + + * achicago-bst.dtx: Lotso doxo. + + * titles.cfg: Added Question-or-Exclamation testing. + + * titles.dtx: Major revision. Lots of dox. Implemented four + complementary \WrapquotesXX and two package options. Implemented + \IfQuestionOrExclamation. Package now requires package slemph. + Added \word \phrase etc. (Were they in the cfg?) Changed some + names from old \sc@ to \ti@. Moved from an \if to an \ifx so + titles don't break before funny command sequences. + + * abbrevs.dtx: Just documentation. + + * achicago.dtx: Dox. + + * lips.dtx: Major revision. Revised most dox. + + \lips will insert nonbreakable space when followed by the chars in + \LPNobreakList and normally-breakable space for everything else. + Previously, \lips inserted nonbreakable space for all following + punctuation, and minimally breakable space for everything else. + The space that follows a period + ellipsis is now + normally-breakable when it was nonbreakable. + + We use \ifx instead of \ifcat to look ahead. This fixes \lips + breaking before command sequences. + + If \lips occurs before a tie, don't insert post-ellipsis space, + let the tie insert it. + + Fixed \PackageError bug. Changed internal \sc@ macros to \lp@ + except for scratch. + +1999-02-27 Matthew Swift + + * includex.dtx: Revised dox a bit. Redid titling. Added counters + sc@count and bit. + + * includex-test.tex: Changed titles of provided files. Redid + document titling. + +1999-02-26 Matthew Swift + + * moredefs.dtx: Revised some dox. Added \GVerboseErrors, \GDebug, + \D*Typeout, \DGobbleM, and dox. Revised \Debug to deal with them. + + * bits.dtx: A tiny bit of dox. + + * newclude.dtx: Changed abstract. Changed (reverted) to + \nc@endofpackage instead of \AtEndOfPackage because of some sort + of problem. + + * INSTALL: Removed mention of moreverb. + + * Makefile: Added some dox. Removed moreverbs dependency and + rules. + + * dialogue.dtx: Attributed the example. Added a bit of user + documentation. + + * attrib.dtx: Added user documentation. Changed \AttribInit to + \at@init and gave user a hook \AttribInit. Added footnote hack to + \at@init. Added \normalcitations, and added it to \attribstar. + Added \nobreak to \attrib. + +1999-02-25 Matthew Swift + + * Makefile: Added blkcntrl.sty to dox-requirements. + + * blkcntrl.dtx: Added warning when \smallblocks called twice. + Changed \item[]\hook to \item\relax hook following latest + classes.dtx (did it change there?). + + * slemph.dtx: Significant change: \itswitch (and \slswitch) now + switches iff the current font is italic (slanted), rather than + switching when the current font is sloped + (i.e., either slanted OR italic). + + * lips.dtx: Revise documentation. + +1999-02-23 Matthew Swift + + * README: Thorough revision. + * Makefile: Thorough revision. + * INSTALL: Thorough revision. + +1999-02-18 Matthew Swift + + * install-lsr: Changed [ -n "$addlsr" ] to [ $addlsr ]; revised + comments. Moving to Frankenbundle directory. + +1998-08-27 Matthew Swift + + * epigraph.dtx: Added \normalcitations (see attrib.dtx) to + \PreEpigraph. + +1998-08-24 Matthew Swift + + * achicago-bst.dtx: I changed all `new.sentence' back to + `new.block' because \newblock was adding a tiny bit of horiz + space, and that seemed like a good idea. + + * achicago-bst.dtx: Removed `second.presort' function. Removed + superfluous variables `sort.label' and `year.and.extra.label'. + Renamed several variables and functions for clarity. Added much + documentation. Streamlined and debugged + `make.short.label.names.q'. Handled duplicate items in the + bibliography better: now handles duplicate organizations in the + `manual' entry type. + +1998-08-22 Matthew Swift + + * achicago-bst.dtx: Added `make.vol.series.num.month.pages', which + seems to work for half the cases, namely, where |series| is empty. + Haven't written the other cases yet. + +1998-08-20 Matthew Swift + + * moredefs.dtx: *prepend macros were not prepending, they were + adding. + + * epigraph.dtx: Changed \parbox argument from [c] default to [b]. + +1998-08-15 Matthew Swift + + * abbrevs.cfg: Added example in comments about changing + \PreFootnote. + +1997-11-11 Matthew Swift + + * titles.cfg: Moved all the definitions to the main file. The + config file should be expendable. + + * moredefs.dtx: Added \ReserveCS* and \ReserveName* and changed + related dox. + + * titles.dtx: Changed @ti@double@ to @doublequotes@ by using + \DeclareBooleanOptions to define it. + + Moved the contents of the cfg file into the main file. + + Added \term, \word, \defn, \foreign, \foreignword, \phrase. + + * abbrevs.cfg: Added backwards compatibility of \TMNewCategory, + \TMDefineAbbrevPlain. + + * compsci.dtx: removed \word \term \defn and put them in + titles package, which compsci requires. + + v0.91 (beta) -> v0.92 (beta): changed the redefinition of the + moreverb command to recognize a variable change in the new + moreverb.sty. Released to CTAN 4 Oct 96. Is there a version of + the moreverb package I should be checking for? + + * lips.dtx: 1.1 -> 1.2 + + 1.1 used \newlet but did not require moredefs (bug). I changed to + use \newcommand and \let, rather than require moredefs. + + Removed the \expandafters expanding \sc@t@a in + \sc@lips@check@punct. This was a bug, it shouldn't have been + expanded. + + Added more testing material. + + + * abbrevs.dtx: \TMLongSuffix and \TMShortSuffix changed to + \TMInitialSuffix and \TMSubsequentSuffix. + + \TMNewCategory changed to \NewAbbrevCategory; backward compatible + \let is in the config file. + + \TMDefineAbbrevPlain changed to \TMDefineAbbrevStandard; + \tm@defineabbrevplain changed to \tm@defineabbrevstandard. + backward compatible \let for the former in the config file. + + Added documentation for programmer interface commands + \NewUserAbbrevDefiner, \NewAbbrevCategory. + + Actually implemented \TMHookAll, \TMFontAll (oops!). + + Added note about using with CJK. + +1997-11-07 Matthew Swift + + * moredefs.dtx: \NewUserInfo should use \ReserveCS to initialize + the variable, not \InitCS. + + Fixed documentation of \NewUserCommand: order of arguments was + wrong; mention how the variable is initialized. + +1997-10-20 Matthew Swift + + * compsci.dtx, titles.dtx, abbrevs.dtx, moredefs.dtx: + Changed \Monster* to \Franken*. + + * lips.dtx, abbrevs.dtx: Revised abstract. + +1997-10-19 Matthew Swift + + * compsci.dtx: Fixed problem with \char`\\ producing a " in + non-typewriter fonts, that is, in the definition of \meta. I'm + lost on the current LaTeX font situation. I'm using teTeX 0.4, + which bombs when I try to use T1 encoding. + + Fixed some documentation, including ^^A comments which were + showing up in the codexample examples. + +1997-10-18 Matthew Swift + + * titles.cfg: Added \musictitle on 5 Aug 96; just making new + version now. + + * lips.dtx, abbrevs.dtx, moredefs.dtx, slemph.dtx, titles.dtx: + Revised documentation. + + * compsci.dtx, abbrevs.cfg: Corrected typos in dox. + + Use \NewRobustCommand for \cname instead of \DeclareRobustCommand. + + * abbrevs.cfg: Corrected typos in testing. + + * abbrevs.dtx: Added caveat about CJK and 8-bit input. + + Changed \TMNewAbbrevPlain to use \NewRobustCommand instead of + \@ifdefinable. + + * moredefs.dtx: Either added or fixed \NewRobustCommand and + \NewTextFontCommand. + + In 1.02 (beta), which this version supercedes, I think I did the + following: + + fixed bug in \InitName + added \DeclareBooleanOptions, \DeclareBooleanUserOptions + \SaveCS, \SaveName, \RestoreCS, \RestoreName + \UndefineCS + + * INSTALL: Revised to reflect new CTANs and new distribution + package format. + + * slemph.dtx: Changed \DeclareTextFontCommand to + \NewTextFontCommand. + + Changed \DeclareRobustCommand to \NewRobustCommand. + + * titles.dtx: Fixed infinite loop bug that occurred with + 1996/12/01 and 1997/06/01 kernels with revised lookahead macros. + + Changed some legacy macro names from \sc@ to \ti@. + +Wed Dec 11 12:12:50 1996 Matthew Swift + + * README: Added pointer to INSTALL. + diff --git a/macros/latex/contrib/frankenstein/Frankenfile b/macros/latex/contrib/frankenstein/Frankenfile new file mode 100644 index 0000000000..18da2b3b9b --- /dev/null +++ b/macros/latex/contrib/frankenstein/Frankenfile @@ -0,0 +1,1532 @@ +## Frankenfile -- common part of a Makefile for LaTeX and BibTeX bundles +# +# Author: Matt Swift +# +# This file is given into the public domain. +# Please acknowledge my work when appropriate. +# Such reflected glory is all I get from releasing this work to you. +# +# Version: $Revision: 1.10 $ $Date: 2001/08/31 01:27:17 $ +# See the file ChangeLog-Frankenbundle for revision history. +# +# This file is distributed in two ways: +# +# 1) With LaTeX filesets. In normal circumstances, you do not need +# to read this file or alter it See the README or INSTALL file that +# came with this file instead. +# +# 2) As part of the Frankenbundle suite, which helps developers make and +# distribute LaTeX and BibTeX filesets. In normal circumstances, you +# should not need to alter this file. Please see the README file +# in the suite for further documentation. + +# +## Basic variable definitions +# + +# NOTE: to override these definitions, use environment variables or the Make +# command line. The values here should be the most common ones in general, so +# that the least number of users have to override them. If you think I could +# choose better values, please write me. + +# NOTE: I use the $(...) construct for command substitution, supported by +# POSIX, ksh, bash. I can rewrite with nested backquotes if someone insists. + +# NOTE: ?= is broken in Make 3.77, so we use the more verbose ifndef +# construction. + +# NOTE: We don't bother to abstract the 'kpsewhich', 'echo', 'cd', 'pwd', +# 'test', or '[' commands. Any reason to? + +# Eliminating built-in implicit rules speeds up Make and makes debugging output +# much briefer. Recusive Making turns on -w which traces what directory we're +# in, but we're always in this directory, so we turn off those messages. +MAKEFLAGS += --no-builtin-rules --no-print-directory + +# We don't need all the old-fashioned suffix rules -- removing them makes +# things more efficient. +.SUFFIXES: + +# Make debugging option. Uncomment to use. +# MAKEFLAGS += --warn-undefined-variables + +# Hmm, this doesn't seem to work when defined in this way. Seems to work only +# on the command line. +# MAKEFLAGS += --print-database + +# ifeq ($(OS),WIN32) +# variant defs +# endif + +# RM is defined by Make as 'rm -f'. You could redefine it. +# ls is often aliased, so use /bin/ls +ifndef LS +LS = /bin/ls +endif +ifndef TAR +TAR = tar +endif +ifndef LN +LN = ln +endif +ifndef M4 +M4 = m4 +endif +ifndef SYMLINK +SYMLINK = $(LN) -f -s +endif +ifndef SED +SED = sed +endif +ifndef AWK +AWK = awk +endif +ifndef FGREP +FGREP = fgrep +endif +ifndef TEE +TEE = tee +endif +ifndef XARGS +XARGS = xargs +endif +ifndef EXPR +EXPR = expr +endif +ifndef HEAD +HEAD = head +endif +ifndef TR +TR = tr +endif +ifndef GREP +GREP = grep +endif +ifndef CAT +CAT = cat +endif +ifndef TOUCH +TOUCH = touch +endif +ifndef REHASH +REHASH = texconfig rehash +endif +ifndef DIRNAME +DIRNAME = dirname +endif +ifndef BASENAME +BASENAME = basename +endif +ifndef INSTALL +INSTALL = install +endif +# -p = preserve timestamps +ifndef INSTALLOPTS +INSTALLOPTS = -p -m $(MKFILEMODE) +endif +ifndef CHMOD +CHMOD = chmod +endif +ifndef MKFILEMODE +# mode rw-rw-r--, i.e. 664 +MKFILEMODE = 664 +endif +ifndef MKDIRP +MKDIRP = $(INSTALL) -d -m $(MKDIRMODE) +endif +ifndef MKDIRMODE +MKDIRMODE = 755 +endif +ifndef LATEX +LATEX = latex +endif +ifndef TEX +TEX = tex +endif +ifndef BIBTEX +BIBTEX = bibtex +endif +ifndef BIBTOOL +BIBTOOL = bibtool +endif +ifndef MAKEINDEX +MAKEINDEX = makeindex $(MAKEINDEXOPTS) +endif +ifndef MAKEINDEXOPTS +MAKEINDEXOPTS = -s gind.ist +endif +# Subdirectory of the main directory in which to build the distribution: +# don't call it "distrib" or the name of any other target! +ifndef distribution-dir +distribution-dir = distribution +endif + +# +## internal variables naming files +# + +# FIX: I suppose we could make this faster for the end user by figuring out +# which of these many definitions are only used by the developer. + +dist-extra-files = $(stable-extra-files) +ifeq ($(USER),$(DEVELOPER)) +dist-extra-files += $(beta-extra-files) +else +ifdef USE_UNSUP +dist-extra-files += $(beta-extra-files) +endif +endif + +# may not exist +bundle-bib.bib = $(bundle-bib).bib + +packages.sty = $(addsuffix .sty, $(packages)) +packages.stq = $(addsuffix .stq, $(packages)) +packages.ins = $(addsuffix .ins, $(packages)) +packages.dvi = $(addsuffix .dvi, $(packages)) +packages.tex = $(addsuffix .tex, $(packages)) +stos.sto = $(addsuffix .sto, $(stos)) +stos.sqo = $(addsuffix .sqo, $(stos)) + +classes.cls = $(addsuffix .cls, $(classes)) +classes.clq = $(addsuffix .clq, $(classes)) +classes.ins = $(addsuffix .ins, $(classes)) +classes.dvi = $(addsuffix .dvi, $(classes)) +classes.tex = $(addsuffix .tex, $(classes)) +clos.clo = $(addsuffix .clo, $(clos)) +clos.cqo = $(addsuffix .cqo, $(clos)) + +bibstyles-bst = $(addsuffix -bst, $(bibstyles)) +bibstyles.bst = $(addsuffix .bst, $(bibstyles)) +bibstyles.bsq = $(addsuffix .bsq, $(bibstyles)) +bibstyles.ins = $(addsuffix .ins, $(bibstyles-bst)) +bibstyles.dvi = $(addsuffix .dvi, $(bibstyles-bst)) +bibstyles.tex = $(addsuffix .tex, $(bibstyles-bst)) +bibstyles.ver = $(addsuffix .ver, $(bibstyles-bst)) + +# everything depends on the makefiles +# the "Frankenfile" in the next line is intended to refer to this file +makefiles = Frankenfile $(calling-makefile) +stable-extra-files += $(makefiles) $(bundle-bib.bib) + +stable-packages.sty = $(addsuffix .sty, $(stable-packages)) +stable-packages.ins = $(addsuffix .ins, $(stable-packages)) +stable-packages.dvi = $(addsuffix .dvi, $(stable-packages)) +stable-packages.tex = $(addsuffix .tex, $(stable-packages)) + +stable-classes.cls = $(addsuffix .cls, $(stable-classes)) +stable-classes.ins = $(addsuffix .ins, $(stable-classes)) +stable-classes.dvi = $(addsuffix .dvi, $(stable-classes)) +stable-classes.tex = $(addsuffix .tex, $(stable-classes)) + +stable-bibstyles-bst = $(addsuffix -bst, $(stable-bibstyles)) +stable-bibstyles.bst = $(addsuffix .bst, $(stable-bibstyles)) +stable-bibstyles.ins = $(addsuffix .ins, $(stable-bibstyles-bst)) +stable-bibstyles.dvi = $(addsuffix .dvi, $(stable-bibstyles-bst)) +stable-bibstyles.tex = $(addsuffix .tex, $(dist-bibstyles-bst)) +stable-bibstyles.ver = $(addsuffix .ver, $(dist-bibstyles-bst)) + +stable-configs.cfg = $(addsuffix .cfg, $(stable-configs)) + +stable-filesets.ins = $(addsuffix .ins, $(stable-filesets)) +stable-filesets.tex = $(addsuffix .tex, $(stable-filesets)) +stable-filesets.dvi = $(addsuffix .dvi, $(stable-filesets)) + +beta-packages.sty = $(addsuffix .sty, $(beta-packages)) +beta-packages.dvi = $(addsuffix .dvi, $(beta-packages)) + +beta-classes.cls = $(addsuffix .cls, $(beta-classes)) +beta-classes.dvi = $(addsuffix .dvi, $(beta-classes)) + +beta-bibstyles-bst = $(addsuffix -bst, $(beta-bibstyles)) +beta-bibstyles.bst = $(addsuffix .bst, $(beta-bibstyles)) +beta-bibstyles.dvi = $(addsuffix .dvi, $(beta-bibstyles-bst)) +beta-bibstyles.ver = $(addsuffix .ver, $(beta-bibstyles-bst)) + +beta-configs.cfg = $(addsuffix .cfg, $(beta-configs)) + +beta-filesets.ins = $(addsuffix .ins, $(beta-filesets)) +beta-filesets.tex = $(addsuffix .tex, $(beta-filesets)) +beta-filesets.dvi = $(addsuffix .dvi, $(beta-filesets)) + +filesets.tex = $(addsuffix .tex, $(filesets)) +filesets.dvi = $(addsuffix .dvi, $(filesets)) +filesets.ins = $(addsuffix .ins, $(filesets)) +filesets.aux = $(addsuffix .aux, $(filesets)) +filesets.t1 = $(addsuffix .t1, $(filesets)) +filesets.t2 = $(addsuffix .t2, $(filesets)) +filesets.t3 = $(addsuffix .t3, $(filesets)) + +dist-filesets.aux = $(addsuffix .aux, $(dist-filesets)) +# cits for "have citations" +dist-filesets-cits.aux = $(addsuffix .aux, $(dist-filesets-cits)) + +stable-stos.sto = $(addsuffix .sto, $(stable-stos)) +beta-stos.sto = $(addsuffix .sto, $(beta-stos)) + +# We treat "X.cfg" as if it was a root name. +configs.cfg = $(addsuffix .cfg, $(configs)) +configs.cfg.install = $(addsuffix .cfg.install, $(configs)) +configs.cfq = $(addsuffix .cfq, $(configs)) +configs.cfq.install = $(addsuffix .cfq.install, $(configs)) + +# These files are part of the building process. +part-1 = $(make-dir)/part-1.dtx +part-2 = $(make-dir)/part-2.dtx +part-3 = $(make-dir)/part-3.dtx +parts = $(part-1) $(part-2) $(part-3) +extractor = $(make-dir)/extractor.ins +driver = $(make-dir)/driver.tex +# +## internal variables for phony targets +# + +dist-bibstyles-bst = $(addsuffix -bst, $(stable-bibstyles)) +dist-packages = $(stable-packages) +dist-classes = $(stable-classes) +dist-bibstyles = $(stable-bibstyles) +dist-filesets = $(dist-packages) $(dist-classes) $(dist-bibstyles-bst) +filesets = $(packages) $(classes) $(bibstyles-bst) +ifeq ($(USER),$(DEVELOPER)) +dist-bibstyles-bst += $(addsuffix -bst, $(beta-bibstyles)) +dist-packages += $(beta-packages) +dist-classes += $(beta-classes) +dist-bibstyles += $(beta-bibstyles) +# cits for "have citations" +dist-filesets-cits = $(basename $(shell $(GREP) -l '\initelyHavECitationS' \ + $(addsuffix .dtx, $(dist-filesets)))) +else +ifdef USE_UNSUP +dist-bibstyles-bst += $(addsuffix -bst, $(beta-bibstyles)) +dist-packages += $(beta-packages) +dist-classes += $(beta-classes) +dist-bibstyles += $(beta-bibstyles) +endif +endif + + +# nondc = "non-dist-cits" +nondc-filesets = $(filter-out $(dist-filesets-cits), $(filesets)) + +packages = $(dist-packages) $(alpha-packages) +packages.clean = $(addsuffix .clean, $(packages)) +packages.dev.clean = $(addsuffix .dev.clean, $(packages)) +packages.macros = $(addsuffix .macros, $(packages)) +packages.macros.q = $(addsuffix .macros.q, $(packages)) +packages.install = $(addsuffix .install, $(packages)) +packages.install.q = $(addsuffix .install.q, $(packages)) +packages.doc.install= $(addsuffix .doc.install, $(packages)) +packages.sty.install= $(addsuffix .sty.install, $(packages)) +packages.stq.install= $(addsuffix .stq.install, $(packages)) +packages.sto.install= $(addsuffix .sto.install, $(packages)) +packages.sqo.install= $(addsuffix .sqo.install, $(packages)) +packages.src.install= $(addsuffix .src.install, $(packages)) +stable-stos = $(foreach f, $(stable-filesets), $($(f)-stos)) +beta-stos = $(foreach f, $(beta-filesets), $($(f)-stos)) +alpha-stos = $(foreach f, $(alpha-filesets), $($(f)-stos)) +stos = $(stable-stos) $(beta-stos) $(alpha-stos) +classes = $(dist-classes) $(alpha-classes) +classes.clean = $(addsuffix .clean, $(classes)) +classes.dev.clean = $(addsuffix .dev.clean, $(classes)) +classes.macros = $(addsuffix .macros, $(classes)) +classes.macros.q = $(addsuffix .macros.q, $(classes)) +classes.install = $(addsuffix .install, $(classes)) +classes.install.q = $(addsuffix .install.q, $(classes)) +classes.doc.install = $(addsuffix .doc.install, $(classes)) +classes.cls.install = $(addsuffix .cls.install, $(classes)) +classes.clq.install = $(addsuffix .clq.install, $(classes)) +classes.clo.install = $(addsuffix .clo.install, $(classes)) +classes.cqo.install = $(addsuffix .cqo.install, $(classes)) +classes.src.install = $(addsuffix .src.install, $(classes)) +stable-clos = $(foreach f, $(stable-filesets), $($(f)-clos)) +beta-clos = $(foreach f, $(beta-filesets), $($(f)-clos)) +alpha-clos = $(foreach f, $(alpha-filesets), $($(f)-clos)) +clos = $(stable-clos) $(beta-clos) $(alpha-clos) +bibstyles = $(dist-bibstyles) $(alpha-bibstyles) +bibstyles.clean = $(addsuffix .clean, $(bibstyles-bst)) +bibstyles.dev.clean = $(addsuffix .dev.clean, $(bibstyles-bst)) +bibstyles.macros = $(addsuffix .macros, $(bibstyles-bst)) +bibstyles.macros.q = $(addsuffix .macros.q, $(bibstyles-bst)) +bibstyles.install = $(addsuffix .install, $(bibstyles-bst)) +bibstyles.bst.install= $(addsuffix .bst.install, $(bibstyles-bst)) +bibstyles.bsq.install= $(addsuffix .bsq.install, $(bibstyles-bst)) +bibstyles.install.q = $(addsuffix .install.q, $(bibstyles-bst)) +bibstyles.doc.install = $(addsuffix .doc.install, $(bibstyles-bst)) +bibstyles.src.install = $(addsuffix .src.install, $(bibstyles-bst)) +configs = $(stable-configs) $(beta-configs) $(alpha-configs) + +# $(filesets-*) are NOT going to include $(bibstyles), but rather +# $(bibstyles-bst). This is what we want. +filesets.macros = $(addsuffix .macros, $(filesets)) +filesets.macros.q = $(addsuffix .macros.q, $(filesets)) +filesets.q = $(addsuffix .q, $(filesets)) +filesets.dep = $(addsuffix .dep, $(filesets)) +filesets.dep.q = $(addsuffix .dep.q, $(filesets)) +filesets.dep.macros = $(addsuffix .dep.macros, $(filesets)) +filesets.dep.macros.q= $(addsuffix .dep.macros.q, $(filesets)) +filesets.dep.install = $(addsuffix .dep.install, $(filesets)) +filesets.dep.install.q= $(addsuffix .dep.install.q, $(filesets)) +filesets.cfg = $(addsuffix .cfg, $(filesets)) +filesets.cfg.install = $(addsuffix .cfg.install, $(filesets)) +filesets.cfq = $(addsuffix .cfq, $(filesets)) +filesets.cfq.install = $(addsuffix .cfq.install, $(filesets)) +filesets.install = $(addsuffix .install, $(filesets)) +filesets.install.q = $(addsuffix .install.q, $(filesets)) +filesets.doc = $(addsuffix .doc, $(filesets)) +filesets.doc.install = $(addsuffix .doc.install, $(filesets)) +filesets.src.install = $(addsuffix .src.install, $(filesets)) +filesets.clean = $(addsuffix .clean, $(filesets)) +filesets.dev.clean = $(addsuffix .dev.clean, $(filesets)) +dist-filesets.clean = $(addsuffix .clean, $(dist-filesets)) +dist-filesets.q = $(addsuffix .q, $(dist-filesets)) +dist-filesets.macros = $(addsuffix .macros, $(dist-filesets)) +dist-filesets.macros.q=$(addsuffix .macros.q, $(dist-filesets)) +dist-filesets.install= $(addsuffix .install, $(dist-filesets)) +dist-filesets.install.q = $(addsuffix .install.q, $(dist-filesets)) +stable-filesets = $(stable-packages) $(stable-classes) \ + $(stable-bibstyles-bst) +beta-filesets = $(beta-packages) $(beta-classes) $(beta-bibstyles-bst) +alpha-filesets = $(filter-out $(dist-filesets), $(filesets)) + +# +## perc variables +# + +# NOTE: This is some pretty backhanded Makefile programming. Doing things this +# way avoids recursive invocations of Make. We still have to recurse to make +# stos and clos because we cannot expand variable names with % in them in the +# list of dependencies. This is unlikely to change in GNU Make. + +# "Perc" stands for "percent", that is, "%". The perc variables are used in +# dependencies and expand to what they name with "%" for "perc"; or they expand +# to nothing, a null dependency. The % if it's there will then get substituted +# in the pattern rule. We handle NODEP and NODOC differently than the NOSRC +# and NOMAC flags because they need to avoid building files as well as +# installing them and. We could actually treat NOMAC the same way, because +# right now NOMAC doesn't avoid building the macros, it just avoids installing +# them. But the only circumstance where this would save time is when you just +# want to install the sources and no macros and no dox. That seems like too +# weird a case to bother to accommodate. + +# Notice we still have to use conditionals like "[ $(NODEP) ] ||" in rules +# because NODEP might be set by a target-specific assignment, and therefore +# these conditionals won't work. In those cases, we can't avoid building +# dependencies, but those cases are exactly the ones where all the dependencies +# are built anyway (e.g., "all:"). For NODOC, NOSRC, and NOMAC, we can use +# ifeq constructions, which are determined when the Makefile is read in. +ifeq ($(NODEP),) + perc.dep = %.dep + perc.dep.q = %.dep.q + perc.dep.macros = %.dep.macros + perc.dep.macros.q = %.dep.macros.q + perc.dep.install = %.dep.install + perc.dep.install.q = %.dep.install.q +else + perc.dep = + perc.dep.q = + perc.dep.macros = + perc.dep.macros.q = + perc.dep.install = + perc.dep.install.q = +endif +ifeq ($(NODOC),) + perc.doc = %.doc + perc.doc.install = %.doc.install +else + perc.doc = + perc.doc.install = +endif + +# +## definitions +# + +# ROOT-NAME is the stem of the macro package, e.g., "foo" from +# foo.{sty,cls,bst} + +ifeq ($(USER),$(DEVELOPER)) +define transform-common + -e 's/__ROOT-NAME__/$*/g' \ + -e 's/__BUNDLE__/$(bundle-title)/g' \ + -e 's/__BUNDLE-BIB__/$(bundle-bib)/g' +endef +define transform-cls + $(SED) $(transform-common) \ + -e 's/__POSTAMBLE__//g' \ + -e 's/__NAME__/$*/g' \ + -e 's/__SUFFIX__/cls/g' \ + -e 's/__VERSION-INFO-SUFFIX__/cls/g' \ + -e 's/__QSUFFIX__/clq/g' \ + -e 's/__OSUFFIX__/clo/g' \ + -e 's/__TYPE__/LaTeX class/g' \ + -e 's/__PROG__/LaTeX/g' \ + -e 's/__PROVIDES__/Class/g' +endef +define transform-sty + $(SED) $(transform-common) \ + -e 's/__POSTAMBLE__//g' \ + -e 's/__NAME__/$*/g' \ + -e 's/__SUFFIX__/sty/g' \ + -e 's/__VERSION-INFO-SUFFIX__/sty/g' \ + -e 's/__QSUFFIX__/stq/g' \ + -e 's/__OSUFFIX__/sto/g' \ + -e 's/__TYPE__/LaTeX package/g' \ + -e 's/__PROG__/LaTeX/g' \ + -e 's/__PROVIDES__/Package/g' +endef +define transform-bst + $(SED) $(transform-common) \ + -e 's/__POSTAMBLE__/\\nopostamble/g' \ + -e 's/__NAME__/$*-bst/g' \ + -e 's/__SUFFIX__/bst/g' \ + -e 's/__VERSION-INFO-SUFFIX__/ver/g' \ + -e 's/__QSUFFIX__/bsq/g' \ + -e 's/__TYPE__/BibTeX style/g' \ + -e 's/__PROG__/BibTeX/g' \ + -e 's/__PROVIDES__/BibTeXstyle/g' +endef +endif # user ?= developer + + +ifneq ($(HAVE_WEB2C),) + +# install-lsr = ./install-lsr --add +# install-plain = ./install-lsr + +install-lsr = $(install-lsr-internal) --add +install-plain = $(install-lsr-internal) + +# Usage: +# +# $progname [--add] [...] | +# +# This emulates install(1) with two differences. +# If --add is given, also add the files to web2c ls-R database. +# If the source file has execute permission, the destination will be given +# u+x. + +define install-lsr-internal + function mbuna () { \ + if [ "$$1" = "--add" ]; then \ + addlsr=true; \ + shift; \ + else \ + unset addlsr; \ + fi; \ + if [ $$addlsr ]; then \ + : $${MT_TEXMFMAIN=$$(kpsewhich --expand-path='$$TEXMFMAIN')}; \ + : $${MT_MKTEX_OPT=$$(kpsewhich --format='web2c files' mktex.opt)};\ + test -n "$$MT_MKTEX_OPT" || \ + MT_MKTEX_OPT="$$MT_TEXMFMAIN/web2c/mktex.opt"; \ + if [ ! -f "$$MT_MKTEX_OPT" ]; then \ + echo "Cannot find mktex.opt; check your installation."; \ + return 1; \ + fi; \ + mt_min_args=2; \ + mt_max_args=1000; \ + old=`pwd`; \ + source "$$MT_MKTEX_OPT"; \ + cd $$old; \ + fi; \ + lastarg=$$(eval echo '$$'{$$#}); \ + echo $(INSTALL) $(INSTALLOPTS) "$$@"; \ + if ! $(INSTALL) $(INSTALLOPTS) "$$@"; then \ + echo "Install failed."; \ + return 2; \ + fi; \ + if [ -d "$$lastarg" ]; then \ + until [ "$$1" = "$$lastarg" ]; do \ + if [ -x "$$1" ]; then \ + echo -n adding user execute permission to $$lastarg/$$1...; \ + $(CHMOD) u+x $$lastarg/$$1; \ + echo . Done.; \ + fi; \ + if [ $$addlsr ]; then \ + echo -n adding $$lastarg/$$1 to the ls-R database...; \ + if ! "$$MT_MKTEXUPD" "$$lastarg" "$$1"; then \ + echo "Problem updating the ls-R database."; \ + return 3; \ + fi; \ + echo . Done.; \ + fi; \ + shift; \ + done; \ + else \ + if [ $$# -ne 2 ]; then \ + echo "Malformed arguments."; \ + return 4; \ + fi; \ + if [ -x "$$1" ]; then \ + echo -n adding user execute permission to $$2...; \ + $(CHMOD) u+x $$2; \ + echo . Done.; \ + fi; \ + if [ $$addlsr ]; then \ + dir=`$(DIRNAME) $$lastarg`; \ + file=`$(BASENAME) $$lastarg`; \ + echo -n adding $$dir/$$file to the ls-R database...; \ + if ! "$$MT_MKTEXUPD" $$dir $$file; then \ + echo "Problem updating the ls-R database."; \ + return 5; \ + fi; \ + echo . Done.; \ + fi; \ + fi; \ + }; mbuna +endef +else + +# NOTE: this is going to fail if the dest is a directory that doesn't exist (it +# will consider it a filename). So, install-plain and install-lsr must never +# be called with a dest directory that doesn't exist. + +# We define these as functions and echo a message to the user, because in +# the web2c case we have to use a big function that we definitely want to +# suppress with @. + +define install-lsr + function wicker () { \ + echo $(INSTALL) $(INSTALL-OPTS) "$$@"; \ + $(INSTALL) $(INSTALL-OPTS) "$$@"; \ + }; wicker +endef +install-plain = $(install-lsr) +endif + +# We check whether the file ACTUALLY has citations, and warn the developer if +# he has failed to include an appropriate \def\initelyHavECitationS in the .dtx +# file. +# +# There may be other or better ways to do the echoing and checking on the +# bibtex process. You want bibtex's output to go out with all the usual Make +# output, but you also want to pipe it to fgrep. Can use gawk and a rule of +# {print; print > "/dev/stderr"}. I just don't think you can redirect stderr +# to a pipe with sh like you can with csh. +# +# BibTeX doesn't put anything on stderr. +# +# args: [] +# +# If is nonempty, then force inclusion of an index. +# +ifeq ($(USER),$(DEVELOPER)) +define checkdtx + if ! $(FGREP) -q '\def\initelyHavECitationS' $$root.dtx; then \ + echo $(DEVELOPER), PUT \\def\\initelyHavECitationS \{\} IN $$root.dtx\!;\ + $(RM) $$root.dvi; \ + return 1; \ + fi +endef +else +define checkdtx + : +endef +endif + +define latex-libll + function bozo () { \ + echo "Processing $$1 with LaTeX, BibTeX, & Makeindex as necessary.";\ + root=$$($(EXPR) $$1 : '\([^\.]*\)\(\.[A-z]\+\)\?'); \ + if [ $$2 ]; then \ + echo "Forcing an index."; \ + arg='\AtBeginDocument{\CodelineIndex\EnableCrossrefs} \ + \AtEndDocument{\clearpage\PrintIndex}\input{'$$1'}'; \ + else \ + arg="$$1"; \ + fi; \ + $(TOUCH) $$root.aux $$root.ind; \ + $(LATEX) $$arg; \ + if $(FGREP) -q '\citation{' $$root.aux; then \ + $(checkdtx); \ + if $(BIBTEX) $$root | $(TEE) /dev/stderr | $(FGREP) -q \ + 'Warning--I didn'\''t find a database entry for'; then \ + echo BIBTEX FAILED; \ + $(RM) $$root.dvi; \ + return 2; \ + fi; \ + $(LATEX) $$arg; \ + fi; \ + $(MAKEINDEX) $$root.idx; \ + $(LATEX) $$arg; \ + }; bozo +endef + +define make-this-if-nonempty + function bobo () { \ + unset turtle; \ + turtle="$$@"; \ + if [ "$$turtle" ]; then \ + echo "Starting recursive make on targets: $$turtle"; \ + $(MAKE) $$turtle; \ + else \ + true; \ + fi; \ + }; bobo +endef + +# args: +# +# example: +# X.clq $(MACRODIR) X.cls +# means "if the remote-file $(MACRODIR)/X.cls is NOT a quickmacro, then +# install X.clq as the remote-file." +# +# example: +# X.sty $(MACRODIR) X.sty +# means "if the remote-file IS a quickmacro, then install X.sty as the +# remote-file." +# +# If arguments $1 and $3 are different, we are installing a quickmacro, +# otherwise we are installing a regular macro. To get the name of the +# quickmacro version when we are installing a regular version, we change the +# last letter of the 3-letter extension to q. +# +# The file is ALWAYS installed if the remote-file is older than the local +# file. +# +define maybe-install-macro + function pliers () { \ + installp=true; \ + if [ "$$1" = "$$3" ]; then \ + quickp=; \ + else \ + quickp=true; \ + fi; \ + if [ -e $$2/$$3 ]; then \ + if [ $$1 -nt $$2/$$3 ]; then \ + echo "File $$1 is newer than $$2/$$3; installing $$1.";\ + elif [ $$quickp ]; then \ + if ! $(HEAD) -2 $$2/$$3 \ + | $(GREP) -q '^%% This is file '\`$$1\'',$$'; then \ + echo "File $$2/$$3 is not a quickmacro; installing $$1."; \ + else \ + echo "Quickfile $$2/$$3 is up to date; not installing $$1.";\ + installp=; \ + fi; \ + else \ + if $(HEAD) -2 $$2/$$3 | $(GREP) -q \ + '^%% This is file '\`"$$($(EXPR) $$1 : '\(.\+\.[A-z][A-z]\)[A-z]')q"\'',$$'; then\ + echo "File $$2/$$3 is a quickmacro; installing $$1."; \ + else \ + echo "File $$2/$$3 is up to date; not installing $$1.";\ + installp=; \ + fi; \ + fi; \ + else \ + echo "File $$2/$$3 does not exist; installing $$1."; \ + fi; \ + if [ $$installp ]; then \ + test -d $$2 || $(MKDIRP) $$2; \ + $(install-lsr) $$1 $$2/$$3; \ + fi; \ + }; pliers +endef + +# +## help target (the default) +# + +.PHONY: default help +default help: + @echo ;\ + echo -----------------------;\ + echo The $(bundle-title) bundle;\ + echo -----------------------;\ + echo ;\ + echo A \"fileset\" is a LaTeX package, LaTeX class, or BibTeX;\ + echo bibliography style together with its supporting files.;\ + echo ;\ + echo The $(bundle-title) bundle contains the following stable, supported filesets:;\ + echo ;\ + echo " $(sort $(stable-filesets))";\ + echo +ifneq ($(beta-filesets),) + @echo and the following beta, unsupported filesets:;\ + echo ;\ + echo " $(sort $(beta-filesets))";\ + echo ;\ + echo The unsupported filesets are in the \"unsupported\" subdirectory.;\ + echo You must copy them to the main directory and set a variable in; \ + echo $(calling-makefile) before make can operate properly on them.; \ + echo +endif + @echo Destinations for installed files may be set in the file \"$(calling-makefile)\".;\ + echo They are currently:;\ + echo ;\ + echo " LaTeX macros go into $(MACRODIR)";\ + echo " LaTeX config files go into $(CONFIGDIR)";\ + echo " BibTeX macros go into $(BIBDIR)";\ + echo " LaTeX DVI dox go into $(MDVIDIR)";\ + echo " BibTeX DVI dox go into $(BDVIDIR)";\ + echo " Sources go into $(SRCDIR)";\ + echo +ifdef HAVE_WEB2C + @echo I think your TeX installation is based on web2c.;\ + echo If this is wrong, change the setting in the file \"$(calling-makefile)\". +else + @echo I think your TeX installation is NOT based on web2c.;\ + echo If this is wrong, change the setting in the file \"$(calling-makefile)\".;\ + echo Installation will be easier if you make this change. +endif + @echo ;\ + echo ------------------------;\ + echo Targets for the end user;\ + echo ------------------------;\ + echo ;\ + echo For each fileset X, there are the following targets:;\ + echo ;\ + echo " X means make X's documentation and macros";\ + echo " X.q means make X's documentation and quick macros";\ + echo " X.install means install X's documentation, sources, and macros";\ + echo " X.install.q means install X's documentation and sources and create";\ + echo " and install X's quick macros.";\ + echo " X.clean means delete X's non-distributed files";\ + echo ;\ + echo There are also the following general targets:;\ + echo ;\ + echo " all means do X for all X's.";\ + echo " all.q means do X.q for all X's.";\ + echo " install means do X.install for all X's.";\ + echo " install.q means do X.install.q for all X's.";\ + echo " clean means do X.clean for all X's";\ + echo ;\ + echo " help means display this help.";\ + echo ;\ + echo All individual files \(e.g., X.dvi, X.ins, X.clq\) are also valid targets.;\ + echo ;\ + echo To avoid installing certain components, set the following variables;\ + echo in the environment or on the Make command line to something nonempty:;\ + echo ;\ + echo " \$$NOMAC nonempty means do not install macro files";\ + echo " \$$NOSRC nonempty means do not install source files";\ + echo " \$$NODOC nonempty means do not build or install documentation files";\ + echo " \$$NODEP nonempty means do not consider fileset-fileset-dependencies";\ + echo ;\ + echo \$$NODEP is automatically set for the general targets.;\ + echo ;\ + echo Quick \(\"q\"\) macros are functionally identical to normal macros;\ + echo but are stripped of comments and are therefore processed faster.;\ + echo ;\ + echo Invoking Make with the \"-s\" option will give you briefer output.;\ + echo ;\ + echo Example: % make -s NODOC=t install.q;\ + echo +ifeq ($(USER),$(DEVELOPER)) + @echo ------------------------------------------; \ + echo Targets for the you, the developer \($(DEVELOPER)\); \ + echo ------------------------------------------; \ + echo +ifneq ($(alpha-filesets),) + @echo Collective targets build both undistributed and distributed filesets.;\ + echo Undistributed filesets are:;\ + echo ;\ + echo " $(sort $(alpha-filesets))";\ + echo +endif + @echo Developer targets include the end user targets above plus, for each fileset X:;\ + echo ;\ + echo " X.dev.clean means delete X"\'"s non-regeneratable files";\ + echo ;\ + echo There are also the following general targets:;\ + echo ;\ + echo " dev.clean means do X.dev.clean for all X's";\ + echo ;\ + echo " distrib" ;\ + echo " ctan means make an archive of the distribution files";\ + echo " ctan.clean means delete the archive and its auxiliary tree";\ + echo " install.clean means delete all files that could have been installed.";\ + echo ;\ + echo " all.clean means do dev.clean ctan.clean install.clean";\ + echo " fresh means do dev.clean all.q ctan";\ + echo +endif + +# +## select from multiple bundle licenses +# + +# $(bundle-license) is e.g. GPL or LPPL + +# Use the convention that if foo.ext is license-dependent, assemble it by +# inserting file foo-$(bundle-license).txt into foo.txt where the directive +# __INCLUDE_LICENSE__ appears. Other licenses and files may require a +# different scheme. + +license-dependent-files = $(part-1) $(extractor) $(driver) + +# NOTE: these files are assumed to be generated and will be deleted by dev.clean +.PHONY: license-dependent-files.clean +license-dependent-files.clean: + $(RM) $(license-dependent-files) + +# The following rule should work, but does not because $(basename ...) is not +# doing anything to its argument. But in make 3.79 reported to Debian 01-08-30. +# +# NOTE: this should work with the files having an initial directory part since +# m4 should work from the pwd but this aspect might need tweaking. +#$(license-dependent-files): %: $(basename %).txt $(basename %)-$(bundle-license).txt +# $(M4) --define=__INCLUDE_LICENSE__="include($(word 2, $^))m4exit(0)" $< > $@ + +# Workaround: be explicit: + +$(license-dependent-files): $(makefiles) + +# Things in the source file (especially $(part-1)) are going to look like quotes +# to m4 and confuse it, so we disable the quoting mechanism and rely on the +# uniqueness of our string. +# Make sure you put "-" for stdin as the first input file. +M4-nq = echo 'changequote(,)dnl' | $(M4) +$(make-dir)/part-1.dtx: $(make-dir)/part-1.txt $(make-dir)/part-1-$(bundle-license).txt + $(M4-nq) --define=__INCLUDE_LICENSE__="include($(make-dir)/part-1-$(bundle-license).txt)dnl" - $< > $@ + +$(make-dir)/extractor.ins: $(make-dir)/extractor.txt $(make-dir)/extractor-$(bundle-license).txt + $(M4-nq) --define=__INCLUDE_LICENSE__="include($(make-dir)/extractor-$(bundle-license).txt)dnl" - $< > $@ + +$(make-dir)/driver.tex: $(make-dir)/driver.txt $(make-dir)/driver-$(bundle-license).txt + $(M4-nq) --define=__INCLUDE_LICENSE__="include($(make-dir)/driver-$(bundle-license).txt)dnl" - $< > $@ + +# +## user/developer file targets +# + +$(packages.stq): %.stq: %.ins %.sty + @echo "Building $@." + $(TEX) $< + +# FIX: sqo not implemented yet; same as sto for now. +$(stos.sqo): %.sqo: %.sto + @echo "Building $@." + $(TOUCH) $@ + +$(classes.clq): %.clq: %.ins %.cls + @echo "Building $@." + $(TEX) $< + +# FIX: cqo not implemented yet; same as clo for now. +$(clos.cqo): %.cqo: %.clo + @echo "Building $@." + $(TOUCH) $@ + +# FIX: cfq not implemented yet; same as cfg for now. +$(configs.cfq): %.cfq: %.cfg + @echo "Building $@." + $(TOUCH) $@ +# $(configs.cfq): %.cfq: %.ins %.cfg +# $(TEX) $< + +$(bibstyles.bsq): %.bsq: %-bst.ins %.bst + @echo "Building $@." + $(TEX) $< + +# dependencies common to all filesets.dvi +$(filesets.dvi): $(dox-requirements) $(bundle-bib.bib) + +# NOTE: The targets listed here are X.dvi for each X which has an X.cfg. The +# DVI dox need to be remade when X.cfg changes, so we add a extra-dependency +# rule here for that. +$(addsuffix .dvi, $(configs)): %.dvi: %.cfg + +$(packages.dvi): %.dvi: %.tex %.sty + @echo "Building $@." + @$(latex-libll) $* + +$(classes.dvi): %.dvi: %.tex %.cls + @echo "Building $@." + @$(latex-libll) $* + +$(bibstyles.dvi): %-bst.dvi: %-bst.tex %.bst %-bst.ver + @echo "Building $@." + @$(latex-libll) $*-bst + +# +## user/developer phony declarations, target-specific vars, etc. +# + +.PHONY: install install.q \ + all all.q \ + clean dev.clean install.clean fresh \ + $(filesets) $(filesets.q) \ + $(filesets.macros) $(filesets.macros.q) \ + $(filesets.dep) $(filesets.dep.q) \ + $(filesets.dep.macros) $(filesets.dep.macros.q) \ + $(filesets.doc) \ + $(filesets.clean) $(filesets.dev.clean) + + +# We get to exercise a lot of the features of Make in this file! Below are +# some target-specific variable values. When we're building these targets, +# there is no need to consider fileset-fileset-dependencies, since all filesets +# are being built. By not considering them, we make things much more +# efficient. +# +# NOTE: target-specific variables are locally set for the COMMANDS of the +# target and the COMMANDS of all its dependencies, and NOT in the dependency +# lists of any of those targets. +all all.q install install.q: NODEP = true + +# Targets declared intermediate will not be remade simply because they do not +# exist and are an intermediate stage on the way to the requested file. If +# intermediate targets existed before the make, they will be kept around, and +# will be removed if not. This way we can have a "clean:" development +# directory without making Make any less efficient. Secondary files are like +# intermediate files, but are not deleted even when they didn't exist before +# the make. We want the intermediate files that are going to go into the +# distribution to be declared secondary so they remain around even when they +# aren't needed by the target called at the time. +.INTERMEDIATE: $(filesets.t1) $(filesets.t2) $(filesets.t3) \ + $(filter-out $(dist-filesets-cits.aux), $(filesets.aux)) +.SECONDARY: $(filesets.tex) $(filesets.ins) \ + $(packages.sty) $(classes.cls) \ + $(bibstyles.bst) $(bibstyles.ver) \ + $(dist-filesets-cits.aux) + +# If Make encounters an error while building a file, the file is probably +# corrupt, but in many cases it is up to date, so we must delete it to ensure +# that Make doesn't think it is OK. +.DELETE_ON_ERROR: + +# +## user/developer phony targets +# + +# don't assume that building dox automatically builds macros + +$(filesets): %: %.macros $(perc.doc) $(perc.dep) +$(filesets.q): %.q: %.macros.q $(perc.doc) $(perc.dep.q) + +# These are extra dependencies. +$(filesets.macros): %.macros: $(perc.dep.macros) +$(filesets.macros.q): %.macros.q: $(perc.dep.macros.q) + +$(packages.macros): %.macros: %.sty $(perc.dep.macros) +$(packages.macros.q): %.macros.q: %.stq $(perc.dep.macros.q) + @$(make-this-if-nonempty) $(addsuffix .sqo, $($*-stos)) + +$(classes.macros): %.macros: %.cls $(perc.dep.macros) +$(classes.macros.q): %.macros.q: %.clq $(perc.dep.macros.q) + @$(make-this-if-nonempty) $(addsuffix .cqo, $($*-clos)) + +$(bibstyles.macros): %-bst.macros: %.bst $(perc.dep.macros) +$(bibstyles.macros.q): %-bst.macros.q: %.bsq $(perc.dep.macros.q) + +$(filesets.dep): %.dep: + @[ $(NODEP) ] || \ + { $(make-this-if-nonempty) $($*-deps); } +$(filesets.dep.q): %.dep.q: + @[ $(NODEP) ] || \ + { $(make-this-if-nonempty) $(addsuffix .q, $($*-deps)); } +$(filesets.dep.macros): %.dep.macros: + @[ $(NODEP) ] || \ + { $(make-this-if-nonempty) $(addsuffix .macros, $($*-deps)); } +$(filesets.dep.macros.q): %.dep.macros.q: + @[ $(NODEP) ] || \ + { $(make-this-if-nonempty) $(addsuffix .macros.q, $($*-deps)); } + +# This would be changed if there were additional forms of documentation. +# filesets are only called by user with .install or .install.q. +# For developer, only filesets.macros and filesets.macros.q call %.doc. +# So until there are other forms of dox, we just need to build %.dvi. +$(filesets.doc): %.doc: %.dvi + +# $(findstring) isn't good enough here, it doesn't look for word boundaries, so +# you have a problem when any fileset name is a subset of another one. + +# GNU expr 1.16 seems broken in that it can't deal with [ $] or [ ^] I can't +# figure what's up. So we insert an extra space at beginning and end in case +# our string is at the beginning or end of nondc-filesets. +$(packages.clean): %.clean: + $(RM) $*.{log,ilg,idx,ind,toc,vrb,stq,cfq,bbl,blg,t1,t2,t3} \ + $(addsuffix .sqo, $($*-stos)) + @auxp=`$(EXPR) " $(nondc-filesets) " : '.* \($*\) '`; \ + if [ $$auxp ]; then \ + echo rm -f $$auxp.aux; \ + $(RM) $$auxp.aux; \ + fi +$(classes.clean): %.clean: + $(RM) $*.{log,ilg,idx,ind,toc,vrb,cfq,,clq,bbl,blg,t1,t2,t3} \ + $(addsuffix .cqo, $($*-clos)) + @auxp=`$(EXPR) " $(nondc-filesets) " : '.* \($*\) '`; \ + if [ $$auxp ]; then \ + echo rm -f $$auxp.aux; \ + $(RM) $$auxp.aux; \ + fi +$(bibstyles.clean): %-bst.clean: + $(RM) $*-bst.{log,ilg,idx,ind,toc,vrb,bbl,blg,t1,t2,t3} $*.bsq + @auxp=`$(EXPR) " $(nondc-filesets) " : '.* \($*-bst\) '`; \ + if [ $$auxp ]; then \ + echo rm -f $$auxp.aux; \ + $(RM) $$auxp.aux; \ + fi + +# +## user/developer *.install* targets (both phony and file) +# +### phony declarations and install targets + +.PHONY: $(filesets.install) \ + $(filesets.install.q) \ + $(filesets.dep.install) \ + $(filesets.dep.install.q) \ + $(filesets.cfg.install) \ + $(filesets.cfq.install) \ + $(filesets.doc.install) \ + $(filesets.src.install) \ + $(packages.sty.install) \ + $(packages.stq.install) \ + $(packages.sto.install) \ + $(packages.sqo.install) \ + $(classes.cls.install) \ + $(classes.clq.install) \ + $(classes.clo.install) \ + $(classes.cqo.install) \ + $(bibstyles.bst.install) \ + $(bibstyles.bsq.install) + +# setting NOMAC will prevent macros from being installed +# setting NOSRC will prevent sources from being installed +# setting NODOC will prevent documentation from being built and installed +# setting NODEP will inhibit consideration of fileset-fileset-dependencies +### X.install + +$(packages.install): %.install: %.sty.install %.sto.install %.cfg.install \ + %.src.install $(perc.doc.install) \ + $(perc.dep.install) + +$(classes.install): %.install: %.cls.install %.clo.install %.cfg.install \ + %.src.install $(perc.doc.install) \ + $(perc.dep.install) +$(bibstyles.install): %.install: %.bst.install %.src.install \ + $(perc.doc.install) $(perc.dep.install) +### X.install.q + +$(packages.install.q): %.install.q: %.stq.install %.sqo.install \ + %.cfq.install %.src.install \ + $(perc.doc.install) $(perc.dep.install.q) + +$(classes.install.q): %.install.q: %.clq.install %.cqo.install \ + %.cfq.install %.src.install \ + $(perc.doc.install) $(perc.dep.install.q) +$(bibstyles.install.q): %.install.q: %.bsq.install %.src.install \ + $(perc.doc.install) $(perc.dep.install.q) +### macros + +$(packages.sty.install) \ +$(classes.cls.install): %.install: % +ifeq ($(NOMAC),) + @$(maybe-install-macro) $< $(MACRODIR) $< +endif +$(bibstyles.bst.install): %-bst.bst.install: %.bst +ifeq ($(NOMAC),) + @$(maybe-install-macro) $< $(BIBDIR) $< +endif +### quickmacros + +$(packages.stq.install): %.stq.install: %.stq +ifeq ($(NOMAC),) + @$(maybe-install-macro) $< $(MACRODIR) $*.sty +endif +$(classes.clq.install): %.clq.install: %.clq +ifeq ($(NOMAC),) + @$(maybe-install-macro) $< $(MACRODIR) $*.cls +endif +$(bibstyles.bsq.install): %-bst.bsq.install: %.bsq +ifeq ($(NOMAC),) + @$(maybe-install-macro) $< $(BIBDIR) $*.bst +endif +### deps + +$(filesets.dep.install): %.dep.install: + @[ $(NODEP) ] || \ + { $(make-this-if-nonempty) $(addsuffix .install, $($*-deps)); } +$(filesets.dep.install.q): %.dep.install.q: + @[ $(NODEP) ] || \ + { $(make-this-if-nonempty) $(addsuffix .install.q, $($*-deps)); } +### option files + +# Should technically depend on $(%-stos) but that is not a legal idea. +$(packages.sto.install): %.sto.install: +ifeq ($(NOMAC),) + @$(foreach x, $($*-stos), \ + $(maybe-install-macro) $(x).sto $(MACRODIR) $(x).sto;) +endif + +# FIX: sqo not implemented yet, same as sto +$(packages.sqo.install): %.sqo.install: %.sto.install + +# Should technically depend on $(%-clos) but that is not a legal idea. +$(classes.clo.install): %.clo.install: +ifeq ($(NOMAC),) + @$(foreach x, $($*-clos), \ + $(maybe-install-macro) $(x).clo $(MACRODIR) $(x).clo;) +endif +# FIX: cqo not implemented yet, same as clo +$(classes.cqo.install): %.cqo.install: %.clo.install +### dox + +# NOTE: If there were ever additional (i.e. non-DVI) formats, this would be a +# rule that depended on %.doc.dvi.install $.doc.foo.install, etc. +$(packages.doc.install) \ +$(classes.doc.install): %.doc.install: $(MDVIDIR)/%.dvi +$(addprefix $(MDVIDIR)/, $(packages.dvi) $(classes.dvi)): $(MDVIDIR)/%: % +ifeq ($(NODOC),) + test -d $(MDVIDIR) || $(MKDIRP) $(MDVIDIR) + @$(install-lsr) $< $(MDVIDIR) +endif + +$(bibstyles.doc.install): %.doc.install: $(BDVIDIR)/%.dvi +$(addprefix $(BDVIDIR)/, $(bibstyles.dvi)): $(BDVIDIR)/%: % +ifeq ($(NODOC),) + test -d $(BDVIDIR) || $(MKDIRP) $(BDVIDIR) + @$(install-lsr) $< $(BDVIDIR) +endif +### sources + +$(addprefix $(SRCDIR)/, $(filesets.ins) $(filesets.tex) \ + $(bibstyles.ver) $(dist-extra-files)): $(SRCDIR)/%: % +ifeq ($(NOSRC),) + test -d $(SRCDIR) || $(MKDIRP) $(SRCDIR) + @$(install-lsr) $< $(SRCDIR) +endif + +$(packages.src.install) \ +$(classes.src.install): %.src.install: \ + $(addprefix $(SRCDIR)/, %.ins %.tex $(dist-extra-files)) + +$(bibstyles.src.install): %.src.install: \ + $(addprefix $(SRCDIR)/, %.ins %.tex %.ver $(dist-extra-files)) +### configs + +$(configs.cfg.install): %.install: $(CONFIGDIR)/% + +$(addprefix $(CONFIGDIR)/, $(configs.cfg)): $(CONFIGDIR)/%: % +ifeq ($(NOMAC),) + test -d $(CONFIGDIR) || $(MKDIRP) $(CONFIGDIR) + @$(install-lsr) $< $(CONFIGDIR) +endif + +# NOTE: X.cfg.install and X.cfq.install when there is no X.cfg is an empty +# rule. We do this so we can simply list those things as dependencies without +# having to know whether an X.cfg exists for that X. +$(filter-out $(configs.cfg.install), $(filesets.cfg.install)) \ +$(filter-out $(configs.cfq.install), $(filesets.cfq.install)): + +# FIX: cfq not implemented, is same as cfg +$(configs.cfq.install): %.cfq.install: %.cfg.install + +# +## user phony declarations and targets +# + +ifneq ($(USER),$(DEVELOPER)) + +# For the end user, 'install' and 'install.q' targets are limited to +# distributed filesets. +all: $(dist-filesets) +all.q: $(dist-filesets.q) +install: $(dist-filesets.install) +install.q: $(dist-filesets.install.q) + +# *.clean leaves only what is distributed +clean: $(dist-filesets.clean) + +# +## developer phony declarations and targets +# +else + +all: $(filesets) +all.q: $(filesets.q) +install: $(filesets.install) +install.q: $(filesets.install.q) + +# *.clean leaves only what is distributed +clean: $(filesets.clean) + +# *.dev.clean leaves only what cannot be regenerated +dev.clean: $(filesets.dev.clean) license-dependent-files.clean bundle-bib.clean + +# Not all .aux files are removed by X.clean. +$(packages.dev.clean) \ +$(classes.dev.clean): %.dev.clean: %.clean + $(RM) $*.{dvi,tex,ins,sty,cls,aux} +$(bibstyles.dev.clean): %-bst.dev.clean: %-bst.clean + $(RM) $*-bst.{ver,dvi,tex,ins,aux} $*.bst + +# NOTE Hmm, doesn't work as intended, because once dev.clean is made, it +# assumes it doesn't have to remake clean (if you put clean before/after +# ctan).... I don't think this should be true for PHONY targets. Anyway, may +# want to do "make clean" after "make fresh". + +# hmm, all.q is not made by all? ctan is not made by either? + +fresh: dev.clean all.q ctan + +# FIX: also should remove the directories and their parents too, but only if +# they're empty. +install.clean: + $(RM) -r $(addprefix $(BIBDIR)/, $(bibstyles.bst)) \ + $(addprefix $(MACRODIR)/, \ + $(packages.sty) $(classes.cls) \ + $(configs.cfg) \ + $(stos.sto) $(clos.clo)) \ + $(addprefix $(SRCDIR)/, \ + $(dist-extra-files) \ + $(filesets.tex) $(filesets.ins) \ + $(bibstyles.ver)) \ + $(addprefix $(MDVIDIR)/, $(filesets.dvi)) \ + $(addprefix $(BDVIDIR)/, $(bibstyles.dvi)) + +# +## developer file targets +# + +# this handles adding this dependency for all the rules in this section: +$(parts) $(driver) $(extractor) \ +$(filesets.t1) $(filesets.t2) $(filesets.t3): $(makefiles) + +$(packages.sty): %.sty: %.t1 %.t2 %.t3 $(parts) + @echo "Building $@." + $(CAT) $(part-1) $*.t1 $(part-2) $*.t2 $(part-3) $*.t3 \ + | $(transform-sty) > $@ + +$(classes.cls): %.cls: %.t1 %.t2 %.t3 $(parts) + @echo "Building $@." + $(CAT) $(part-1) $*.t1 $(part-2) $*.t2 $(part-3) $*.t3 \ + | $(transform-cls) > $@ + +# We want to get version control information and a command into the -bst.ver +# file. We read the .ver file specially when we build the -bst.dvi file. +# +# We quote curly braces in the awk regexps in case we are using gawk and +# $POSIXLY_CORRECT is set in the environment so that we can't really do +# anything about it. It is this way when running subshells from Emacs +# sometimes, in my experience. +# +# FIX: not sure we need transform-bst here. +$(bibstyles.ver): %-bst.ver: %.bst %-bst.t1 %-bst.t2 %-bst.t3 $(parts) + @echo "Building $@." + $(CAT) $(part-1) $*-bst.t1 $(part-2) $*-bst.t2 $(part-3) $*-bst.t3 \ + | $(transform-bst) \ + | $(AWK) '/^ %% \\def\\fileinfo/,/^ %% \\def\\docdate/ \ + { $$1 = ""; print } \ + { next }' \ + > $@ + $(CAT) $(part-3) \ + | $(AWK) '/^\\makeatletter% A special comment to help create bst files/, \ + /^\}% A special comment to help create bst files/ \ + { print } \ + { next }' \ + >> $@ + +$(bibstyles.bst): %.bst: %-bst.t1 %-bst.t2 %-bst.t3 $(parts) + @echo "Building $@." + $(CAT) $(part-1) $*-bst.t1 $(part-2) $*-bst.t2 $(part-3) $*-bst.t3 \ + | $(transform-bst) \ + | $(AWK) '/^% \\begin\{macro\}\{\\fileinfo\}/, \ + /^% \\end\{macrocode\}\^\^A special comment to help create bst files/ \ + { next } \ + { print }' \ + > $@ + +# bundle-bib may be undefined. If bundle-bib is defined, master-bib.bib must +# be defined and the file it names must exist. +ifneq ($(bundle-bib),) +$(bundle-bib.bib): $(master-bib.bib) $(makefiles) + $(SYMLINK) $(master-bib.bib) $@ +endif + +# t is for temporary + +# We quote curly braces in the awk regexps in case we are using gawk and +# $POSIXLY_CORRECT is set in the environment so that we can't really do +# anything about it. It is this way when running subshells from Emacs +# sometimes, in my experience. +$(filesets.t1): %.t1: %.dtx + @echo "Building $@." + $(AWK) '/^% \\CheckSum\{[0-9]+\}/,/^% \\part\{Implementation\}/' $*.dtx > $@ + +$(filesets.t2): %.t2: %.dtx + @echo "Building $@." + $(SED) -n '/^\\def\\fileinfo{.*}/,/^\\def\\docdate{.*}/p' $*.dtx > $@ + +$(filesets.t3): %.t3: %.dtx + @echo "Building $@." + $(AWK) '/^% \\part\{Implementation\}/,/^% \\Finale/ \ + {if ($$0 !~ /^% \\part\{Implementation\}/) print}' $*.dtx \ + | $(SED) '/^\\def\\fileinfo{.*}/,/^\\def\\docdate{.*}/d' > $@ + +# transform-* defs require $* to be the root name +$(packages.tex): %.tex: $(driver) + @echo "Building $@." + $(transform-sty) $(driver) > $@ + +$(classes.tex): %.tex: $(driver) + @echo "Building $@." + $(transform-cls) $(driver) > $@ + +$(bibstyles.tex): %-bst.tex: $(driver) + @echo "Building $@." + $(transform-bst) $(driver) > $@ + +$(packages.ins): %.ins: $(extractor) + @echo "Building $@." + $(transform-sty) $(extractor) > $@ + +$(classes.ins): %.ins: $(extractor) + @echo "Building $@." + $(transform-cls) $(extractor) > $@ + +$(bibstyles.ins): %-bst.ins: $(extractor) + @echo "Building $@." + $(transform-bst) $(extractor) > $@ + +Frankenfile: $(make-dir)/Frankenfile + $(SYMLINK) $< $@ + +# +## distribution archive: variables, definitions, phony and file targets +# + +# NOTE this is all still within the developer-only conditional. + +stable-files = $(stable-filesets.dvi) \ + $(stable-filesets.ins) \ + $(stable-filesets.tex) \ + $(stable-packages.sty) \ + $(stable-stos.sto) \ + $(stable-classes.cls) \ + $(stable-clos.clo) \ + $(stable-bibstyles.bst) \ + $(stable-bibstyles.ver) \ + $(stable-configs.cfg) \ + $(stable-extra-files) +beta-files = $(beta-filesets.dvi) \ + $(beta-filesets.ins) \ + $(beta-filesets.tex) \ + $(beta-packages.sty) \ + $(beta-stos.sto) \ + $(beta-classes.cls) \ + $(beta-clos.clo) \ + $(beta-bibstyles.bst) \ + $(beta-bibstyles.ver) \ + $(beta-configs.cfg) \ + $(beta-extra-files) + +# where we copy distributed files in order to archive them +stable-archive-dir = $(distribution-dir)/$(stable-dir) +beta-archive-dir = $(distribution-dir)/$(beta-dir) + +stable-archive-files = $(addprefix $(stable-archive-dir)/, $(stable-files)) +beta-archive-files = $(addprefix $(beta-archive-dir)/, $(beta-files)) +dist-archive-files = $(stable-archive-files) $(beta-archive-files) + +.PHONY: ctan ctan.clean \ + distrib distrib.clean \ + all.clean + +ctan.clean distrib.clean: + $(RM) -r $(distribution-dir) + +all.clean: dev.clean distrib.clean install.clean + +# clean before building +ctan distrib: distrib.clean $(stable-archive-dir) \ + $(beta-archive-dir) $(dist-archive-files) + $(TAR) -C $(distribution-dir) -c -z \ + -f $(distribution-dir)/$(bundle-filename).tgz \ + $(filter-out $(bundle-filename).tgz, \ + $(shell $(LS) $(distribution-dir))) + +$(stable-archive-dir) $(beta-archive-dir): $(makefiles) + $(MKDIRP) $@ + +# target is all stable-archive-files except for the bundle-bib.bib if it exists +$(filter-out $(stable-archive-dir)/$(bundle-bib.bib), \ + $(stable-archive-files)): $(stable-archive-dir)/%: \ + % $(stable-archive-dir) + @$(install-plain) $< $(stable-archive-dir) + +# rule for the bundle-bib.bib if it exists. +ifneq ($(bundle-bib),) +$(dist-filesets.aux): %.aux: %.dvi + +# bibtool -v verbose; -q suppress warnings (huge number of them); +# -d don't include double entries +# -s sort (needed to identify double entries) +# +# We want to keep the modification time the same as the master-bib so that the +# end user's Make process won't think it needs to remake all the dvi files. +# +# FIX: bibtool is having a problem getting the right crossreffed entries in +# when dealing with the master-bib. It did OK on a very short test bib I made. +# +# So we do a very patchy workaround: +# - first make the target normally; it will lack crossreffed entries. +# - combine the relevant .aux files into frankentemp.aux and change the +# \bibdata command to use the bundle-bib.dist database. +# - frankentemp.aux is nonempty or we wouldn't be doing this rule. +# - we process frankentemp.aux with bibtex and look at the output. +# - extract lines that say we've got a missing crossref. +# - remove the difficult apostrophe's from those lines, and save in +# frankentemp.1. +# - frankentemp.1 will be empty if we have no missing crossrefs. if it's +# empty, we're OK, so stop. +# - take the error lines about missing crossrefs and extract just the key. +# - frob each key K into the string "-X \'^K$\'" (without the enclosing +# double quotes). +# - combine all lines into one line. now we have a series of one or more +# strings just described all concatenated on one line. save this into +# frankentemp.2. While combining them, the backslashes before the single +# quotes got used up. +# - feed this fabricated string to bibtool. bibtool will extract each key's +# entry from bundle-bib.bib along with relevant string definitions, and put +# it on stdout. +# - append the output to bundle-bib.dist, making it complete. +# - clean up temp files. + +# FIX: we've got potential problems if any keys have regexp chars in them. + +.PHONY: bundle-bib.clean +bundle-bib.clean: + $(RM) $(bundle-bib.bib) $(bundle-bib.bib).dist + +$(bundle-bib.bib).dist: $(bundle-bib.bib) $(dist-filesets-cits.aux) + $(BIBTOOL) -q -d -s $(addprefix -x , $(dist-filesets-cits.aux)) -o $@ + $(CAT) $(dist-filesets-cits.aux) \ + | $(SED) 's/^\\bibdata{$(bundle-bib)}/\\bibdata{$(bundle-bib)\.bib\.dist}/' \ + > $(TMPDIR)/frankentemp.aux + $(BIBTEX) $(TMPDIR)/frankentemp \ + | $(GREP) '^refers to entry ".*", which doesn'\''t exist$$' \ + | $(SED) -e s/\'//g \ + > $(TMPDIR)/frankentemp.1; \ + if [ -s $(TMPDIR)/frankentemp.1 ]; then \ + $(CAT) $(TMPDIR)/frankentemp.1 \ + | $(XARGS) -i $(EXPR) {} : 'refers to entry \(.*\), which doesn' \ + | $(XARGS) -i echo -X \\\'^'{}'\$$\\\' \ + | $(XARGS) \ + > $(TMPDIR)/frankentemp.2; \ + eval $$(echo $(BIBTOOL) -q $$($(CAT) $(TMPDIR)/frankentemp.2) \ + $<) \ + >> $@; \ + fi; \ + $(RM) $(TMPDIR)/frankentemp.{aux,1,2,bbl,blg} + $(TOUCH) -r $(master-bib.bib) $@ + +$(stable-archive-dir)/$(bundle-bib.bib): $(bundle-bib.bib).dist \ + $(stable-archive-dir) + @$(install-plain) $< $(stable-archive-dir)/$(bundle-bib.bib) +endif + +$(beta-archive-files): $(beta-archive-dir)/%: % $(beta-archive-dir) + @$(install-plain) $< $(beta-archive-dir) + +endif # developer-only + +# +## Emacs file variables +# +# Local Variables: +# mode: makefile +# eval: (outline-minor-mode 1) +# outline-regexp: "##+" +# End: diff --git a/macros/latex/contrib/frankenstein/INSTALL b/macros/latex/contrib/frankenstein/INSTALL new file mode 100644 index 0000000000..b1eec22fc7 --- /dev/null +++ b/macros/latex/contrib/frankenstein/INSTALL @@ -0,0 +1,321 @@ + + INSTRUCTIONS + for + BUILDING AND INSTALLING + FRANKENSTEIN + +---------------------------------------------------------------------- + CONTENTS + + NOTE + QUICK AND DIRTY + THE BEST WAY: USING THE MAKEFILE + NON-FRANKENSTEIN PACKAGES + DOING IT BY HAND + basics + configuration files + generating quick versions + regenerating DVI documentation + fileset dependencies + FILE LOCATIONS + TDS locations + CTAN locations + MAKEFILE TECHNICAL NOTES + Frankenbundle + TERMINOLOGY + AUTHOR + +---------------------------------------------------------------------- + NOTE + +If you are reading this file in a TeX installation, you probably don't +need to install anything at all. Simply try using one of the +Frankenstein packages in your document and see if it works. If LaTeX +can't find the package, you need to install it, so read on. + +Since you're reading on, I'll assume from here on that you are reading +this file in a directory with other Frankenstein files as you found +them on CTAN. + +---------------------------------------------------------------------- + QUICK AND DIRTY + +You can simply put this entire directory (or just the .sty files) +somewhere in LaTeX's search path for input files, e.g., +TDS:/texmf/tex/latex/frankenstein. You will then be able to use all +the Frankenstein packages, with the following qualifications: + + 1. The documentation won't be in the standard place. + 2. To use the achicago bibstyle, you must also put the file + "achicago.bst" where BibTeX can find it. + 3. With a web2c-based installation you _may_ also need to take the + extra step of rebuilding your ls-R databases with a command like + "texconfig rehash". + 4. To use the abbrevs, achicago, blkcntrl, and dialogue packages, + you must have the relsize package on your system; to use the + compsci package, you must have the the relsize, url and verbatim + packages on your system. For how to obtain and install these + non-Frankenstein packages on your system, see the section on + non-Frankenstein packages below. + +---------------------------------------------------------------------- + THE BEST WAY: + USING THE MAKEFILE + +If you have the GNU Make program on your system, using the Makefile is +the easiest way to do everything described in this document and more. +Simply run "make" and you will see a help message describing the +things you can do. You probably won't need to read anything else in +this file except the section NON-FRANKENSTEIN PACKAGES below. + +To use the Makefile on the unsupported filesets, you must do two +things. + + 1. Copy all the files in the "unsupported" subdirectory into its + parent directory ("frankenstein"). + + 2. Set the variable USE_UNSUP to something nonempty either by: + a. uncommenting the line in the file Makefile, or + b. setting it in your environment, or + c. set the variable on the Make command line, e.g., "make + USE_UNSUP=t all". + +---------------------------------------------------------------------- + NON-FRANKENSTEIN PACKAGES + +Certain Frankenstein packages depend on packages that are not part of +Frankenstein or the official LaTeX distribution: + + abbrevs, + achicago, + blkcntrl, + and dialogue depend on "relsize.sty". + compsci depends on "relsize.sty", "url.sty", and "verbatim.sty". + +If you wish to use one of those four Frankenstein packages, I suggest +you follow these steps: + +First check if you already have them on your system: + + If you have a TeX installation based on web2c (e.g., UN*X + installations derived from teTeX or TeXLive), you can type: + + % kpsewhich X.sty + + (where X is relsize, url, or verbatim) and if you get a response, + you already have that file on your system. If you don't have web2c + but do have a TDS-compliant texmf tree, see the section FILE + LOCATIONS below to see where to look. If you have neither web2c + nor a TDS-compliant texmf tree, you can simply try to use the + Frankenstein package, and if LaTeX tells you one of the + non-Frankenstein packages is missing, well then you have to install + it. + +If you don't already have the files you need, download them from CTAN. + + The locations are given in the section FILE LOCATIONS below. + + To install relsize.sty and url.sty, simply put them where LaTeX can + find them. + + To install verbatim, I recommend you install the entire "tools" + distribution, following the directions in the file readme.txt. + +---------------------------------------------------------------------- + DOING IT BY HAND + + basics + +Each package fileset X in the Frankenstein bundle contains either four +or five files: + + X.sty the package macros + X.dvi package documentation + X.tex may be used to regenerate X.dvi from X.sty + X.ins may be used to generate a fast-loading version of X.sty + +A standard configuration file is included in the abbrevs, compsci, +slemph, and titles package filesets: + + X.cfg package configuration file (not in all packages) + +The file X.sty may be used as it is; simply put it where LaTeX can +find it. TDS locations are given below. To use the package, put +\usepackage{X} in the preamble of your LaTeX source document. If a +configuration file exists for the package, you must also put it where +LaTeX can find it. + +The following files compose the achicago bibstyle fileset: + + achicago.bst the bibstyle macros + achicago-bst.dvi bibstyle documentation + achicago-bst.tex may be used to regenerate achicago-bst.dvi from + achicago.bst and achicago-bst.ver + achicago-bst.ins may be used to generate a fast-loading version + of achicago.bst (see below) + achicago-bst.ver a file needed by achicago-bst.tex + +The file achicago.bst may be used as it is; simply put it where BibTeX +can find it. To use the bibstyle, you must load the achicago PACKAGE +by putting \usepackage{achicago} in the preamble of your LaTeX source +document. + + + configuration files + +If you want to alter a configuration file, make a copy of it, put it +the copy in the LaTeX search path prior to the distributed +configuration file, and alter the copy. + + + generating fast-loading or "quick" versions + +Running TeX or LaTeX on X.ins will produce a file called either X.stq +(for packages) or X.bsq (for bibstyles). For packages X, the file +X.sty must be in the LaTeX search path (usually the current +directory); for bibstyles Y-bst, the files Y.bst and Y-bst.ver must be +in the same directory. The new file is functionally identical to the +X.sty or X.bst file, but is stripped of comments and will therefore be +processed faster by TeX or BibTeX. I am unable to tell you how much +faster! To use X.stq (X.bsq), you must rename it to X.sty (X.bst) and +put it where LaTeX (BibTeX) can find it. DO NOT DELETE THE ORIGINAL +X.sty (X.bst) because it contains the documentation which X.tex +(X-bst.tex) transforms into the file X.dvi (X-bst.dvi). + + + regenerating DVI documentation + +To regenerate the file X.dvi, run LaTeX on X.tex. For packages X, the +file X.sty must be in the LaTeX search path as well as X.cfg if it +exists; for bibstyles Y-bst, the files Y.bst and Y-bst.ver must be in +the LaTeX search path. + +Generating documentation requires the following Frankenstein packages: + + abbrevs.sty, blkcntrl.sty, compsci.sty, lips.sty, moredefs.sty, + slemph.sty, titles.sty, and achicago.sty, + +and the achicago.bst bibstyle. + +You also need all 3 non-Frankenstein packages (see the section +NON-FRANKENSTEIN PACKAGES above). + +Documentation for dialogue furthermore requires the attrib package. +Documentation for attrib furthermore requires the dialogue package. +Documentation for achicago-bst furthermore requires the longtable package, + which is in the "tools" bundle with "verbatim" (see the section + NON-FRANKENSTEIN PACKAGES above). + + + fileset dependencies + +If you install the macro files of one fileset, you should also install +all the macro files of the filesets it depends on: + + Fileset Depends on (directly or indirectly) + .................................................................... + abbrevs moredefs,relsize,slemph + achicago blkcntrl,moredefs,relsize,slemph,titles + achicago-bst achicago,blkcntrl,moredefs,relsize,slemph,titles + attrib moredefs + blkcntrl moredefs,relsize + compsci abbrevs,alltt,lips,moredefs,relsize,slemph, + titles,url,verbatim + dialogue blkcntrl,moredefs,relsize + lips + moredefs + slemph + titles moredefs,slemph + +---------------------------------------------------------------------- + FILE LOCATIONS + + TDS locations + +Relevant non-Frankenstein files: + + File Location: TDS:/texmf/... + ........................................................... + url.sty ...tex/latex/misc/url.sty + relsize.sty ...tex/latex/misc/relsize.sty + longtable.dtx ...source/latex/tools/longtable.dtx + verbatim.dtx ...source/latex/tools/verbatim.dtx + + longtable.sty ...tex/latex/tools/longtable.sty + longtable.dvi ...doc/latex/tools/longtable.dvi + verbatim.sty ...tex/latex/tools/verbatim.sty + verbatim.dvi ...doc/latex/tools/verbatim.dvi + +Frankenstein files: + + File Location: TDS:/texmf/... + ........................................................... + achicago.bst .../bibtex/bst/achicago + achicago-bst.dvi .../doc/bibtex + *.cfg *.sty .../tex/latex/frankenstein + *.dvi .../doc/latex/frankenstein + .../source/latex/frankenstein + + CTAN locations + +Frankenstein: + + CTAN:/macros/latex/contrib/supported/frankenstein/* + +Relevant non-Frankenstein packages: + + Package Location: CTAN:/macros/latex/... + ........................................................... + relsize ...contrib/other/misc/relsize.sty + url ...contrib/other/misc/url.sty + verbatim ...packages/tools/* + longtable ...packages/tools/* + +The LaTeX base distribution: + + CTAN:/macros/latex/base/* + +---------------------------------------------------------------------- + MAKEFILE TECHNICAL NOTES + +I have tested the Make system with Debian GNU/Linux and Make v3.77. +If certain commands or options need to be altered to work with your +setup, check the top of Frankenfile where a lot of commands are +abstracted in variables. It's best to reset the variables at the top +of Makefile, on the Make command line, or in your environment rather +than changing Frankenfile. Please write me describing any problems +you encounter. GNU Make is available at ftp://gnu.mit.edu/pub/gnu/. + + + Frankenbundle + +The Frankenstein Makefiles also make a great way for you to maintain +and distribute your own LaTeX packages and classes and BibTeX +bibstyles. I distribute them with some documentation and necessary +additional files as the Frankenbundle suite on +CTAN:/support/frankenbundle. + +---------------------------------------------------------------------- + TERMINOLOGY + + fileset: A group of files related to a single LaTeX package, LaTeX + class, or BibTeX bibliography style and any accompanying + option or configuration files. The files in a package or + class fileset have the same root name but different + filename extensions. In bibstyle filesets, some root names + differ by a "-bst" suffix. + + CTAN: Comprehensive TeX Archive Network: a system of TeX-related + file archives available via FTP (see + ftp://ctan.tug.org/tex-archive/CTAN.sites) and often + reproduced on CDROMs. + + TDS: TeX Directory Structure: a recommended directory structure + for TeX installations. See + ftp://ctan.tug.org/tex-archive/tds. + +---------------------------------------------------------------------- + AUTHOR + + Matt Swift + diff --git a/macros/latex/contrib/frankenstein/Makefile b/macros/latex/contrib/frankenstein/Makefile new file mode 100644 index 0000000000..dac44ee5b9 --- /dev/null +++ b/macros/latex/contrib/frankenstein/Makefile @@ -0,0 +1,249 @@ +## DEAR USER, +# +# please review the top of this Makefile down to the +# "END OF USER-CONFIGURABLE PARAMETERS". +# +# +# Author: Matt Swift + +# +## User-configurable parameters +# + +# MKTEXMF should point to the root of the TEXMF tree into which you want +# the files installed. +ifndef MKTEXMF +MKTEXMF = /usr/local/lib/texmf +endif + +# These directories are for Frankenstein filesets. +# +# MACRODIR = destination for LaTeX classes and packages +# CONFIGDIR = destination for package and class configuration files +# Some packages and classes in this bundle use configuration +# files (with .cfg endings) in addition to the main macro +# files ending with .sty or .cls. Normally, CONFIGDIR +# should be the same as MACRODIR. If you want to alter the +# configuration file, make a copy of it, put it the in the +# LaTeX search path prior to the distributed configuration +# file, and alter the copy. The CONFIGDIR variable is +# provided in case you can't or don't want to follow this +# advice. +# BIBDIR = destination for BibTeX bibliography styles +# MDVIDIR = destination for DVI documentation of LaTeX packages +# BDVIDIR = destination for DVI documentation of BibTeX styles +# (other documentation formats could be added) +# SRCDIR = destination for distributed files not listed above + +# The default values are the TDS-compliant values. If you want to install in +# alternative locations, given them different values. +# +# To see what the TDS-compliant values are, type "make" with no arguments to +# see a message that includes them, or look down below just after the end of +# the user-configurable variables, where they are defined. +MACRODIR = $(TDS-MACRODIR) +CONFIGDIR = $(TDS-MACRODIR) +BIBDIR = $(TDS-BIBDIR) +MDVIDIR = $(TDS-MDVIDIR) +BDVIDIR = $(TDS-BDVIDIR) +SRCDIR = $(TDS-SRCDIR) + +# If your TeX installation is NOT based on the web2c distribution of TeX, +# comment out the assignment of HAVE_WEB2C below. That is, if you do not have +# a program called "kpsewhich" on your system, comment the line out. Unix +# installations based on teTeX or TeXLive are web2c-based. If you have web2c, +# the Makefile will ensure your ls-R databases are kept up to date. +ifndef HAVE_WEB2C +HAVE_WEB2C = true +endif + +# If you want to use the "unsupported" Frankenstein filesets (i.e., "beta" in +# this Makefile), you must 1) move the contents of the "unsupported" directory +# into this directory; and 2) uncomment the definition here. This value is +# irrelevant if you're the developer (see below for what that means). + +# USE_UNSUP = true + +# The installation procedure needs to be able to change to a directory that is +# NOT in the LaTeX inputs path. If you don't have web2c, it also needs to be +# able to create a temporary file there. Your downloaded Frankenstein +# directory should NOT be in the LaTeX inputs path if you want to run this +# Makefile (otherwise it's fine, that's one easy way to install Frankenstein, +# as explained in the file INSTALL). +ifndef TMPDIR + TMPDIR = /tmp +endif + +# The $USER envariable is compared to $(DEVELOPER). If they match, you are +# assumed to be the developer of Frankenstein, rather than the end user, in +# which case you have more targets, and some targets do different things. If +# you just happen to have 'swift' as a login name, and you don't want to play +# developer, change this value to anything but the value of your $USER +# envariable. +DEVELOPER = swift +####### +####### END OF USER-CONFIGURABLE PARAMETERS. +####### +# +## TDS-compliant installation directories +# + +# Frankenstein filesets. +TDS-MACRODIR = $(MKTEXMF)/tex/latex/$(bundle-name) +TDS-BIBDIR = $(MKTEXMF)/bibtex/bst/achicago +# The right BIBDIR depends on what's in your bundle. The following are +# plausible possibilities: +# TDS-BIBDIR = $(MKTEXMF)/bibtex/bst/$(bundle-name) +# TDS-BIBDIR = $(MKTEXMF)/bibtex/bst/misc +TDS-MDVIDIR = $(MKTEXMF)/doc/latex/$(bundle-name) +TDS-BDVIDIR = $(MKTEXMF)/doc/bibtex +TDS-SRCDIR = $(MKTEXMF)/source/latex/$(bundle-name) + +# +## bundle parameters +# + +ifeq ($(USER),$(DEVELOPER)) +# If you change the location of the original "frankenbundle/make" subdirectory, set +# make-dir to point to it relative to this directory. +make-dir = make +else +# Don't change this: it's always . for the end user. +make-dir = . +endif + +# the name of this file +calling-makefile = Makefile + +# Used as a directory name. Should be monocase. +bundle-name = frankenstein + +# The root name (i.e. no extension) of the archive file. Defaults to the last +# segment of stable-dir. (So this example is redundant.) +bundle-filename = $(bundle-name) + +# title of the bundle in English +bundle-title = Frankenstein + +# Value should be either `LPPL' or `GPL' unless you have extended Frankenbundle +# (easy to do). For now, any value other than `LPPL' means `GPL'. +#bundle-license = GPL +bundle-license = LPPL + +# The file $(bundle-bib).bib in the working directory will be a symlink to the +# file $(master-bib.bib). DON'T name an already-existing .bib file containing +# data in bundle-bib! It will be deleted by the clean target! The +# master-bib.bib file will never be deleted; this is what should contain your +# data. The reason we separate these two is so that your master-bib can be in +# a different directory than your development directory. +# +# If you don't have a bundle .bib file, comment these two definitions out. +bundle-bib = $(bundle-name) +master-bib.bib = /home/swift/library/TeX/texmf/bibtex/bib/Bib.bib + +# Both stable and beta files are distributed. They can live in different +# directories on CTAN, but are installed into the same directory in TDS. I may +# rethink this in the future; I invite comments. Alpha files are not +# distributed. + +# CTAN directories under tex-archive/ +# NOTE: *-dir variables should neither begin nor end with a slash. +# NOTE: Although in the case of Frankenstein beta-dir is a subdirectory of +# stable-dir, this need not be true. +stable-dir = macros/latex/contrib/supported/frankenstein +beta-dir = macros/latex/contrib/supported/frankenstein/unsupported + +# Extra files to put on CTAN (two different directories) and TDS (one +# directory). This file, Frankenfile, and the bundle-bib (if defined) will +# be automatically included, so you don't need to list them. +# You may want to include file(s) corresponding to your $(bundle-license). +stable-extra-files = README INSTALL ChangeLog +# don't get rid of includex just yet +# beta-extra-files = README-unsupported includex-test.tex +beta-extra-files = README-unsupported includex-test.tex + +stable-packages = abbrevs achicago attrib blkcntrl compsci dialogue lips \ + moredefs newclude slemph titles +beta-packages = bits drama includex +alpha-packages = dblefig epigraph footnote quotes \ + margins new-margins nimbus-cmb nimbus-mdtb verse letterhead + +# For each package with style option files (.sto files), define a variable like +# this: -stos = ... +newclude-stos = allocate simple tag # group + +stable-classes = +beta-classes = +alpha-classes = myletter + +# For each class with class option files (.clo files), define a variable like +# this: -clos = ... +# (There are none in Frankenstein.) + +stable-bibstyles = achicago +beta-bibstyles = +# FIX: I think Frankenfile needs revision to accommodate alpha-bibstyles +# alpha-bibstyles = mla + +stable-configs = abbrevs compsci slemph titles +beta-configs = bits +# NOTE: monster.cfg is a config that doesn't belong to any fileset...hmm. +alpha-configs = monster letterhead + +# These bundle macro files are required to generate the DVI documentation for +# all bundle macro files. You don't need to list the bundle-bib if you have +# one. +dox-requirements = abbrevs.sty attrib.sty blkcntrl.sty compsci.sty lips.sty \ + moredefs.sty slemph.sty titles.sty achicago.sty achicago.bst + +# +## fileset dependencies +# + +# For each fileset with dependencies X, define a variable -deps to be +# a list of other filesets on which it directly depends. Just list the other +# filesets that the first fileset DIRECTLY depends on, that is, appears in the +# argument of a \RequirePackage (\LoadClass, etc.) or \DoXPackageS command. +# (If a direct dependency in turn depends on another fileset, you should be +# defining a variable for it as well, and Make will recognize it needs to build +# all of them.) + +# Stable filesets must not depend on beta or alpha filesets; beta filesets must +# not depend on alpha filesets. + +# stable +abbrevs-deps = moredefs,relsize,slemph +achicago-deps = blkcntrl moredefs titles +achicago-bst-deps = achicago +attrib-deps = dialogue moredefs +blkcntrl-deps = moredefs +compsci-deps = abbrevs lips moredefs slemph titles +dialogue-deps = blkcntrl moredefs +newclude-deps = moredefs +titles-deps = moredefs slemph + +# beta +bits-deps = blkcntrl moredefs +drama-deps = abbrevs bits dialogue moredefs +includex-deps = moredefs + +# alpha +dblefig-deps = blkcntrl moredefs +epigraph-deps = attrib blkcntrl moredefs +footnote-deps = blkcntrl moredefs +margins-deps = moredefs +new-margins-deps = moredefs +quotes-deps = blkcntrl + +# +## include Frankenfile +# + +# this must come before any rules in this Makefile +include $(make-dir)/Frankenfile + +# +## Emacs file variables +# Local Variables: +# outline-regexp: "##+" +# End: diff --git a/macros/latex/contrib/frankenstein/README b/macros/latex/contrib/frankenstein/README new file mode 100644 index 0000000000..313bcb3afa --- /dev/null +++ b/macros/latex/contrib/frankenstein/README @@ -0,0 +1,243 @@ + + FRANKENSTEIN + + A Collection of Macros for LaTeX and BibTeX + + available at + + CTAN:/macros/latex/contrib/supported/frankenstein/* + +------------------------------------------------------------------------ + CONTENTS + + OVERVIEW + DOCUMENTATION + PACKAGE DESCRIPTIONS + abbrevs + compsci + dialogue + achicago + titles + attrib + lips + moredefs + slemph + blkcntrl + NOTES + configuration files + unsupported packages + DISTRIBUTION CONDITIONS + TERMINOLOGY + AUTHOR + +------------------------------------------------------------------------ + OVERVIEW + + "Frankenstein" is the whimsical name for a collection of 14 LaTeX + packages and a BibTeX bibliography style that I have written. + Frankenstein helps you do a variety of things with LaTeX. You can + use just a part of Frankenstein if you want, or you can use all the + parts together. You should download this whole directory, however, + to make sure you will have all the parts you might need. To use + certain packages, you will also need the non-Frankenstein packages + "relsize.sty", "url.sty", and/or "verbatim.sty". See the file + INSTALL for full details. + + The package descriptions below will tell you briefly what they can + help you do. Happy TeXing! + +------------------------------------------------------------------------ + DOCUMENTATION + + This file contains general information on the Frankenstein bundle + and brief descriptions of its packages and bibstyle. + + Installation instructions are in the file INSTALL. + + Full documentation of each LaTeX package X is in the file X.dvi: + CTAN:/macros/latex/contrib/supported/frankenstein/X.dvi + TDS:/texmf/doc/latex/frankenstein/X.dvi + + Full documentation of the achicago BibTeX bibliography style is in + the file achicago-bst.dvi: + CTAN:/macros/latex/contrib/supported/frankenstein/achicago-bst.dvi + TDS:/texmf/doc/bibtex/achicago-bst.dvi + +------------------------------------------------------------------------ + PACKAGE DESCRIPTIONS + +------------------------------------------------------------------------ + abbrevs + abbreviation macros + (Frankenstein's briefs) + + "Abbreviation macros" expand to defined text and insert following + space intelligently, based on context. They can also expand to one + thing the first time they are used and another thing on subsequent + invocations. Thus they can be abbreviations in two senses, in the + source and in the document. Useful applications include the + abstraction of textual elements such as names without fussing over + spacing and the automatic expansion of abbreviations and acronyms at + their first use. The initial and subsequent expansions of an + abbreviation macro are available at any time via explicit commands. + Abbreviation macros are grouped into categories; there are hooks + applicable to each category. Categories can be reset so that + subsequent abbreviation macros in that category behave as if used + for the first time again. + + A generic facility is also provided for suffixes like 1900 B.C. and + 6:00 P.M., which correctly handles following periods. + +------------------------------------------------------------------------ + compsci + macros for writing about macros + (Frankenstein's conscience) + + Compsci is useful whenever writing about programming, but especially + when writing about TeX and especially when used as a supplement to + the ltxdoc class to document LaTeX macros in a literate programming + style with .dtx files. + +------------------------------------------------------------------------ + dialogue + dialogue environment + (Frankenstein's mouth) + + The dialogue environment is for citing short passages of scripted + dialogue. It is not for typsetting a long script. + +------------------------------------------------------------------------ + achicago + Chicago Manual A-style (but author-date) citations + (Frankenstein's references) + + A bibliography style based on _The Chicago Manual of Style_. The + style is mostly style A, but borrows the author-date reference + system from style B. Requires accompanying BibTeX bibliography + style "achicago". + +------------------------------------------------------------------------ + titles + titling macros + (Frankenstein's pedigree) + + Macros that typeset the titles of books, journals, etc. and handle + following spacing and punctuation intelligently, based on context. + Useful for bibliographic databases. Also includes other markup like + \word, \defn, \phrase, etc. + +------------------------------------------------------------------------ + attrib + attribution of block elements + (Frankenstein's hat) + + \attrib attributes block elements, for example when citing a + reference after a block quotation. + +------------------------------------------------------------------------ + lips + text ellipses + (Frankenstein's lips) + + The \lips command generates text ellipses that are closer to what + _The Chicago Manual of Style_ suggests than what \dots produces. It + does the right thing in most circumstances, and so is easy to use. + +------------------------------------------------------------------------ + moredefs + more defining commands + (Frankenstein's brain) + + A collection of defining, expansion, and debugging commands for + programming in LaTeX and writing LaTeX packages and classes. + +------------------------------------------------------------------------ + newclude + a new system for including files + (Frankenstein's backbone) + + Provides a backwards-compatible reimplementation of \include and + \includeonly. The principal new features are: (1) the restriction + that \clearpage's must surround an included file is removed, (2) the + restriction that \include's cannot be nested is removed, and (3) the + provision of hooks executed before and after the contents of an + included file. Newclude accomplishes the first two by using a + single .aux file instead of many. Newclude also provides the + experimental functionality of the former package includex, which + allows you to include partial contents of independent LaTeX files + that can also be processed on their own (that is, files that contain + \documentclass, \begin{document}, etc.). + +------------------------------------------------------------------------ + slemph + slanted emphasis + (Frankenstein's gait) + + Defines \itswitch, \slswitch, \textitswitch, and \textslswitch, + which switch between slanted or italic type and upright type. Can + be used to represent emphasis with slanted type. + +------------------------------------------------------------------------ + blkcntrl + block element hooks + + Inserts hooks into certain block elements and footnotes. Also + provides a command to set block quotations one size smaller than the + main text. + +------------------------------------------------------------------------ + NOTES + + configuration files + + A standard configuration file .cfg is included in the + abbrevs, compsci, slemph, and titles package filesets. If you want + to alter a configuration file, make a copy of it, put it the copy in + the LaTeX search path prior to the distributed configuration file, + and alter the copy. + + + unsupported packages + + Several additional unsupported Frankenstein package filesets are in + the subdirectory: + + CTAN:/macros/latex/contrib/supported/frankenstein/unsupported + + See the file README-unsupported in that directory for further + information. + +------------------------------------------------------------------------ + DISTRIBUTION CONDITIONS + + All Frankenstein filesets are copyrighted by Matthew Swift and + released under the conditions of the GNU General Public License + contained in the file COPYING. + + I am willing to specially license this code; please simply contact + me with your proposal. + +------------------------------------------------------------------------ + TERMINOLOGY + + fileset: A group of files related to a single LaTeX package, LaTeX + class, or BibTeX bibliography style and any accompanying + option or configuration files. The files in a package or + class fileset have the same root name but different + filename extensions. In bibstyle filesets, some root names + differ by a "-bst" suffix. + + CTAN: Comprehensive TeX Archive Network: a system of TeX-related + file archives available via FTP (see + ftp://ctan.tug.org/tex-archive/CTAN.sites) and often + reproduced on CDROMs. + + TDS: TeX Directory Structure: a recommended directory structure + for TeX installations. See + ftp://ctan.tug.org/tex-archive/tds. + +------------------------------------------------------------------------ + AUTHOR + + Matt Swift + diff --git a/macros/latex/contrib/frankenstein/abbrevs.cfg b/macros/latex/contrib/frankenstein/abbrevs.cfg new file mode 100644 index 0000000000..7c3143045c --- /dev/null +++ b/macros/latex/contrib/frankenstein/abbrevs.cfg @@ -0,0 +1,290 @@ +% \iffalse +%% +% Even if you don't want any code in this file, leave the empty file, or else +% loading the \package{abbrevs} package will consume extra time as it searches +% for this file. +%% +% \fi +% \begin{macrocode} +\def\fileinfo{Abbrevs package configuration} +\def\fileversion{v1.2} +\def\filedate{2001/08/31} +\def\docdate{1997/10/18} +% \end{macrocode} +% +% \begin{macrocode} +\ProvidesFile{abbrevs.cfg} +% \end{macrocode} +% +% \AddToCheckSum{25} +% +% \section{\cname{DateMarkSize}} +% +% \begin{macro}{\DateMarkSize} +% I like to use this definition instead of the one in the main file, but I +% didn't want to require \package{abbrevs} to depend on \package{relsize}. +% \begin{macrocode} +\RequirePackage{relsize} +\def\DateMarkSize {% + \relsize{-1}% +} +% \end{macrocode} +% \end{macro} +% +% \section{Backwards compatibility} +% +% \begin{macro}{\TMNewCategory} +% \begin{macro}{\TMDefineAbbrevPlain} +% This can be uncommented to deal with anything you might have written that +% referred to these variables before I changed their names. +% \begin{macrocode} +% \newlet\TMNewCategory\NewAbbrevCategory +% \newlet\TMDefineAbbrevPlain\TMDefineAbbrevStandard +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Suggestions} +% +% Here are ideas commented out that you might want to try. +% +% You can learn a helpful general strategy about how to work with hooks in +% \LaTeX{} from this example. If you put the inhibitor directly into +% \cs\PreFootnote, you could never take it out without either losing whatever +% else had been put into \cs\PreFootnote, or using some thorny procedure that +% stepped through the macro and removed just the inhibitor (you don't want to +% try that). If you add a ``subhook'' to \cs\PreFootnote, you can turn the +% subhook on or off without even knowing what else in in \cs\PreFootnote. You +% can't redefine \cs\TMInhibitSwitchingtrue. A \cs\newcommand would work as +% well as the \cs\newlet here, a tad less efficient. +% \begin{macrocode} +% \newlet\FootnoteTMHook\TMInhibitSwitchingtrue +% \addto@macro\PreFootnote {% +% \FootnoteTMHook +% } +% \end{macrocode} +% To undo the effect later, say \code{\let\FootnoteTMHook\relax} or +% \code{\global\let}\lips as appropriate. +% +% \part{Testing} +% +% \ResetAbbrevs{All} +% +% I'm presently writing a dissertation on \beckett. Although there is +% comparatively little biographical material available, it is well known that +% he spent several years under the wing of \joyce, another of the great writers +% in English this century. \joyce and \beckett, it is curious, like other +% great writers, both had trouble with their vision, and both were exiles in +% some sense. One of my favorite pieces by \beckett is \worst, a short work +% written in the 1980's not long before his death: ``Fail again. Fail +% better.'' \worst is lyric and exalting to me. A work I feel is underrated +% is the radio play \fall (all but his three long plays are collected in \csp). +% It's extremely funny, and very touchingly compassionate. Because it is a +% radio play, it loses less from performance to reading. I would recommend +% \fall to anyone. His later plays (and fiction) are famously enigmatic, but +% with a little practice, it is not hard to see the same lyric beauty and +% compassion. Take the brief television play \nacht (in \csp of course), which +% has no dialogue, only a few murmured bars of the Schubert song, also brief, +% and also called \nacht---it's one of the most hauntingly beautiful few +% minutes of music I've ever heard, and I particularly recommend Cheryl +% Studer's recording on Deutsche Grammophone. Every other recording I've heard +% plays too fast. +% +% \ResetAbbrevs{All} +% +% \joyceshort is short for \joyce, not \joyce Smith. +% +% \ResetAbbrevs{All} +% +% Now some more rigious and boring testing. Each pair should be identical. +% +% \newbook\aaa{initial}[subsequent] +% \newname\www{tmacro}[tmacro-subsequent] +% +% {\parindent0pt +% +% ^^A\def\ldebug#1{\tracingmacros#1\tracingcommands#1\VerboseErrors\relax} +% \let\ldebug\Gobble +% +% \textit{\textitswitch{initial} hello}\\ +% \ldebug1\relax +% \textit{\aaa hello} +% \ldebug0\relax +% +% \textup{\textitswitch{subsequent} hello}\\ +% \ldebug1\relax +% \textup{\aaa hello} +% \ldebug0\relax +% +% \textit{subsequent}~tie\\ +% \ldebug1\relax +% \aaa~tie +% \ldebug0\relax +% +% \textit{subsequent} regular text\\ +% \ldebug1\relax +% \aaa regular text +% \ldebug0\relax +% +% \textit{subsequent}: colon\\ +% \ldebug1\relax +% \aaa: colon +% \ldebug0\relax +% +% \textit{subsequent}; semicolon\\ +% \ldebug1\relax +% \aaa; semicolon +% \ldebug0\relax +% +% \textit{subsequent}. Period.\\ +% \ldebug1\relax +% \aaa. Period. +% \ldebug0\relax +% +% \textit{subsequent}! Exclamation point.\\ +% \ldebug1\relax +% \aaa! Exclamation point. +% \ldebug0\relax +% +% \textit{subsequent}? Question mark.\\ +% \ldebug1\relax +% \aaa? Question mark. +% \ldebug0\relax +% +% \textit{subsequent}-hyphen.\\ +% \ldebug1\relax +% \aaa-hyphen. +% \ldebug0\relax +% +% \textit{subsequent} \texttt{texttt}\\ +% \ldebug1\relax +% \aaa \texttt{texttt} +% \ldebug0\relax +% +% \textit{subsequent} (leftparen)\\ +% \ldebug1\relax +% \aaa (leftparen) +% \ldebug0\relax +% +% (\textit{subsequent}) rightparen\\ +% \ldebug1\relax +% (\aaa) rightparen +% \ldebug0\relax +% +% \textit{subsequent}, comma\\ +% \ldebug1\relax +% \aaa, comma. +% \ldebug0\relax +% +% \textit{subsequent} tmacro\\ +% \ldebug1\relax +% \aaa \www +% \ldebug0\relax +% +% \textit{subsequent}'s face\\ +% \ldebug1\relax +% \aaa's face +% \ldebug0\relax +% +% \textit{subsequent} ``quote''\\ +% \ldebug1\relax +% \aaa ``quote'' +% \ldebug0\relax +% +% \textit{subsequent} [leftbracket]\\ +% \ldebug1\relax +% \aaa [leftbracket] +% \ldebug0\relax +% +% [\textit{subsequent}] rightbracket\\ +% \ldebug1\relax +% [\aaa] rightbracket +% \ldebug0\relax +% +% \textit{subsequent}{open group}\\ +% \ldebug1\relax +% \aaa {opengroup} +% \ldebug0\relax +% +% {\textit{subsequent}} close group\\ +% \ldebug1\relax +% {\aaa} close group +% \ldebug0\relax +% +% \textit{subsequent} \{realbrace\}\\ +% \ldebug1\relax +% \aaa \{realbrace\} +% \ldebug0\relax +% +% \textit{subsequent} 666 number\\ +% \ldebug1\relax +% \aaa 666 number +% \ldebug0\relax +% +% \textit{subsequent} $x=y^2$ math\\ +% \ldebug1\relax +% \aaa $x=y^2$ math +% \ldebug0\relax +% +% \textit{subsequent} \$realdollar\\ +% \ldebug1\relax +% \aaa \$realdollar +% \ldebug0\relax +% +% \textit{subsequent} \#numbersign\\ +% \ldebug1\relax +% \aaa \#numbersign +% \ldebug0\relax +% +% \textit{subsequent}/slash\\ +% \ldebug1\relax +% \aaa /slash +% \ldebug0\relax +% +% \textit{subsequent}\/ italic correction\\ +% \ldebug1\relax +% \aaa \/ italic correction +% \ldebug0\relax +% +% \textit{subsequent}\ explicit space\\ +% \ldebug1\relax +% \aaa \ explicit space +% \ldebug0\relax +% +% \textit{subsequent}\space \cs\space\\ +% \ldebug1\relax +% \aaa \space \cs\space +% \ldebug0\relax +% +% \makeatletter +% +% \textit{subsequent}\@xobeysp \cname{@xobeysp}\\ +% \ldebug1\relax +% \aaa \@xobeysp \cname{@xobeysp} +% \ldebug0\relax +% +% \def\ACRcnta{1} +% \def\ACRcntb{3} +% \acromake{CIA}{{\ttfamily CIA}}{Central Intelligence Agency} +% \newcommand\TMacromakebugit {% +% \Debug1 +% \typeout{CIA \expandafter\meaning\csname CIA\endcsname} +% \typeout{LONG \expandafter\meaning\csname CIAlong \endcsname} +% \typeout{SHORT \expandafter\meaning\csname CIAshort \endcsname} +% \typeout{secondary \expandafter\meaning\csname CIAsecondary \endcsname} +% } +% +% The \CIA is overthrowing Nigeria. +% +% The \CIA is watching in your window right now. +% +% The \CIA will stop that missile. +% +% The \CIA! The \CIA! The \CIA. The \CIA guys. +% +% Resetting Acromake abbrevs. +% \TMResetAcromake +% +% The \CIA! The \CIA! The \CIA. The \CIA guys. +% +% } ^^A closes testing group? diff --git a/macros/latex/contrib/frankenstein/abbrevs.ins b/macros/latex/contrib/frankenstein/abbrevs.ins new file mode 100644 index 0000000000..5dbb011dc4 --- /dev/null +++ b/macros/latex/contrib/frankenstein/abbrevs.ins @@ -0,0 +1,64 @@ +% abbrevs.ins -- docstrip driver for the abbrevs LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + abbrevs.sty or abbrevs.stq. This + LaTeX package will work ONLY if it is called abbrevs.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + abbrevs.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{abbrevs.stq}{\from{abbrevs.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file abbrevs.stq is a faster replacement for the file} +\Msg{* abbrevs.sty.} +\Msg{*} +\Msg{* abbrevs.stq is stripped of comments (documentation) and must be} +\Msg{* renamed abbrevs.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/abbrevs.pdf b/macros/latex/contrib/frankenstein/abbrevs.pdf new file mode 100644 index 0000000000..5c04d864a9 Binary files /dev/null and b/macros/latex/contrib/frankenstein/abbrevs.pdf differ diff --git a/macros/latex/contrib/frankenstein/abbrevs.sty b/macros/latex/contrib/frankenstein/abbrevs.sty new file mode 100644 index 0000000000..8e325c698b --- /dev/null +++ b/macros/latex/contrib/frankenstein/abbrevs.sty @@ -0,0 +1,1299 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% abbrevs LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, abbrevs.tex +% and abbrevs.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{683} +% +% \begin{abstract} +% ``Abbreviation macros'' expand to defined text and insert following space +% intelligently, based on context. They can also expand to one thing the first +% time they are used and another thing on subsequent invocations. Thus they +% can be abbreviations in two senses, in the source and in the document. +% Useful applications include the abstraction of textual elements such as names +% without fussing over spacing and the automatic expansion of abbreviations and +% acronyms at their first use. The initial and subsequent expansions of an +% abbreviation macro are available at any time via explicit commands. +% Abbreviation macros are grouped into categories; there are hooks applicable +% to each category. Categories can be reset so that subsequent abbreviation +% macros in that category behave as if used for the first time again. +% +% A generic facility is also provided for suffixes like 1900\BC and 6:00\PM, +% which correctly handles following periods. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \section{General} +% +% \DescribeMacro{\nospacelist} +% An abbreviation macro \cs\foo that expands to \meta{text} is robust; +% \cs\foo can be used in place of \meta{text} almost anywhere. A space is +% inserted following an abbreviation macro when the first non-white character +% following it is \emph{not} in the set \cs\nospacelist, whose default value +% is \verb*|,.':;?-/~!)]{}\ \/\@xobeysp|. +% +% When an abbreviation macro has different initial and subsequent expansions, +% either may be explicitly requested by adding a suffix to the abbreviation +% macro. The commands |\|\meta{command}|short| and |\|\meta{command}|long| +% are also defined whenever an abbreviation macro |\|\meta{command} is +% defined. Using the |\|\meta{command}|long| command does not affect what +% the next abbreviation macros expands to. +% +% All abbreviation macros are assigned categories, identified by a string. +% Four categories are defined by the package, and it is easy to add more. +% Categories facilitate handling different groups of abbreviation macros in +% different ways. +% +% \caveat{Regarding CJK macros and probably other 8-bit input. If you use +% the \package{abbrevs} package with the CJK macros for typesetting Chinese, +% Japanese, and Korean text, you must define your abbreviations within the +% CJK environment. I believe that the CJK macros work by interpreting 8-bit +% input in the source file. But this input is only interpreted properly +% within the CJK environment. If you define the abbrevs outside, such as in +% the preamble, you will just get a bunch of numbers when your abbreviation +% expands.} +% +% I would use capital letters for the name of this macro, since it doesn't +% seem like a user command to me, but I'm modelling after the kernel's +% \cs\nocorrlist. +% +% \section{Usage} +% +% \newbook\worst{Worstward Ho} +% \newbook\fall{All That Fall} +% \newbook\nacht{Nacht und Tr\"aume} +% \newbook\csp{Collected Shorter Plays \emph{(}CSP\emph{)}}[CSP] +% \newname\joyce{James Joyce}[Joyce] +% \newname\nixon{Richard Milhous Nixon}[Nixon] +% \newname\ww{Wordsworth} +% \newname\beckett{Samuel Beckett}[Beckett] +% \newwork\godot{Waiting for Godot}[Godot] +% \newbook\prelude{The Prelude} +% \newabbrev\ART{American Repetrory Theater (ART)}[ART] +%^^A FIX -- reduce, move +% Examples of how to define abbreviation macros: +% \begin{codeexample} +% \newbook\worst{Worstward Ho} +% \newbook\fall{All That Fall} +% \newbook\nacht{Nacht und Tr\"aume} +% \newbook\csp{Collected Shorter Plays \emph{(}CSP\emph{)}}[CSP] +% \newname\joyce{James Joyce}[Joyce] +% \newname\nixon{Richard Milhous Nixon}[Nixon] +% \newname\ww{Wordsworth} +% \newname\beckett{Samuel Beckett}[Beckett] +% \newwork\godot{Waiting for Godot}[Godot] +% \newbook\prelude{The Prelude} +% \newabbrev\ART{American Repetrory Theater (ART)}[ART] +% \end{codeexample} +% +% \todo{Give example of using |short| or |long|.} +% +% Examples of how to use the macros, and how they are typeset:\relax +% \footnote{\cs\lips is defined in the \package{lips} package, part of the +% \Frankenstein bundle.} +% \begin{bothexample} +% The manuscripts of \ww's \prelude differ. \lips Before he began \prelude, +% \ww wrote \lips +% \end{bothexample} +% \begin{bothexample} +% \nixon was the 37st American President. \lips Many Americans like my uncle +% Norm voted for \nixon enthusiastically in both 1968 and 1972. +% \end{bothexample} +% \begin{bothexample} +% \beckett gained international noteriety with the play \godot in the early +% 1950s. \beckett wrote \godot, he said, as a diversion from the novels he +% was then writing. I have seen this play at the \ART in Cambridge, +% Massachusetts. The \ART is often disappointing, but I liked their +% production of \godot. +% \end{bothexample} +% +% \DescribeMacro{\newabbrev} +% \cs\newabbrev\marg{\\command}\marg{initial}\oarg{subsequent} defines an +% abbreviation macro \meta{\\command} of category \cat{Generic}. +% +% \DescribeMacro{\newname} +% \cs\newname\marg{\\command}\marg{initial}\oarg{subsequent} defines an +% abbreviation macro \meta{\\command} of category \cat{Name}. +% +% \DescribeMacro{\newbook} +% \cs\newbook\marg{\\command}\marg{initial}\oarg{subsequent} defines an +% abbreviation macro \meta{\\command} of category \cat{Book}. +% +% \DescribeMacro{\newwork} +% \cs\newwork\marg{\\command}\marg{bibliography +% key}\marg{initial}\oarg{subsequent} defines an abbreviation macro +% \meta{\\command} of category \cat{Work}. Works can be distinguished from +% books by being listed in a separate bibliography, e.g., of primary works +% referred to by short titles in the main text. The defining command +% therefore requires a \BibTeX{} key as an argument. The first use of the +% work serves as a citation to that bibliography, and all uses of the work +% generate an index entry. +% +% \todo{\cat{Work}s are not yet fully implemented. Presently they are the same +% as \cat{Book}s.} +% +% \section{Date Marks} +% \DescribeMacro{\PM} +% \DescribeMacro{\AM} +% \DescribeMacro{\BC} +% \DescribeMacro{\AD} +% These variants of abbreviation macros correctly handle following periods. +% \begin{bothexample} +% She left for work before 6\AM, but +% did not arrive until 12\PM. The +% interval 5\BC--5\AD is one year +% shorter than the interval +% 95\AD--105\AD. +% \end{bothexample} +% +% \section{Emulation of \package{acromake}} +% We emulate the \package{acromake} package by Paul A.~Thompson (version of +% 1995/7/16 at \url{CTAN:/macros/latex/contrib/other/misc/acromake.sty}). +% \package{Abbrevs} will issue an informative warning when it guesses it is +% about to fail because \package{acromake} is already loaded (we cannot know +% for certain if it is). I will add an option so that \package{abbrevs} and +% \package{acromake} can both be loaded if anyone persuades me it will be +% useful. +% +% One reason to emulate \package{acromake} with \package{abbrevs} is that it +% can be done easily and by doing so we can avoid keeping two packages around +% when one will do. Another is that \package{abbrevs} is a more general and +% powerful package which adds value to \package{acromake} functionality. +% \package{Abbrevs} should be a drop-in replacement for \package{acromake}, but +% you can also take advantage of features of \package{abbrevs}: acromake-style +% abbreviations obey \cs\TMInhibitSwitching, and they are defined as their own +% category of abbreviations, \cat{Acromake}, so that \package{acromake}-style +% abbreviations can be manipulated with the general mechanisms available to any +% category. +% +% The following three \package{acromake} user commands are implemented in +% \package{abbrevs}. +% +% \DescribeMacro{\acromake} +% \cs\acromake \marg{csname}\marg{initial text}\marg{final text} FIX dox +% +% \DescribeMacro{\ACRcnta} +% The macro \cs\ACRcnta contains the number of times (default 1) the initial +% text (full text) is given. Use \cs\renewcommand to redefine it. +% +% \DescribeMacro{\ACRcntb} +% The macro \cs\ACRcntb contains the number of iterations (default 2) before +% the final text is given. The intermediate text (final text plus page +% reference) is therefore given $\mbox{|ACRcntb|} - \mbox{|ACRcnta|}$ times. +% +% \DescribeMacro{\AcromakePageref} +% Define the macro \cs\AcromakePageref to contain the text that expresses the +% page reference. \package{Abbrevs} will replace the string |##1| in the +% definition of this macro with the page number where the abbreviation was +% first used (more precisely, with |\pageref{|\meta{label}|}|). The default +% value is |(see Page ##1)| for compatibility with \package{acromake}. The +% styles I am familiar with would call for a lowercase ``page.'' +% +% \caveat{\cs\AcromakePageref not implemented yet} +% +% \subsection{Possible discrepancies} +% The counter |util| and the macros \cs\pv and \cs\addtomacro are used +% internally by \package{acromake} and are not defined in \package{abbrevs}. +% (If you managed to find some use for \cs\addtomacro, you will probably see +% easily how to redefine it in this context---and if not, write me.) +% +% The emulation may behave slightly differently due to the difference beteween +% the way the \package{xspace} package handles following punctuation and space +% and the way \package{abbrevs} does. I think \package{abbrevs} is very +% likely to be as good or better than \package{xspace} at making these +% decisions. Let me know if you think otherwise. +% +% \section{Programmers' interface} +% +% \DescribeMacro{\ResetAbbrevs} +% When abbreviation macros are reset, their next invocation will expand to +% the initial text. Subsequent occurrences will expand to the subsequent +% text again. For exmaple, using \cs\ResetAbbrevs|{Name}| at the beginning +% of chapters will cause the full name to be used only for the first +% occurrence in each chapter. \cs\ResetAbbrevs\marg{category list} resets +% all abbreviation macros of the listed categories. The list is +% comma-separated, and the category \cat{All} is a shorthand for all defined +% categories. Example: +% \begin{codeexample} +% \SaveCS\chapter +% \renewcommand\chapter {% +% \ResetAbbrevs{All}% +% \MDSavedchapter +% } +% \end{codeexample} +% +% \DescribeMacro{\NewAbbrevCategory} +% \DescribeMacro{\TMFontAll} +% \DescribeMacro{\TMHookAll} +% \DescribeMacro{\TMResetAll} +% \DescribeMacro{\TMFont} +% \DescribeMacro{\TMHook} +% \DescribeMacro{\TMReset} +% To create new categories of abbreviation, use +% \cs\NewAbbrevCategory\marg{category name}. Macros +% \cs\TMFont\meta{category}, \cs\TMHook\meta{category}, and +% \cs\TMReset{}\meta{category} are all reserved. The hook and font slots +% start empty. The virtual category \cat{All} is predefined and refers to +% all defined categories. \cs\TMHookAll and \cs\TMFontAll are called +% \emph{before} the respective category-specific commands. +% +% \DescribeMacro{\NewUserAbbrevDefiner} +% \cs\NewUserAbbrevDefiner\marg{defining +% command}\marg{category}\oarg{definer} defines a user command \meta{defining +% command}. With the default \meta{definer}, \cs\TMDefineAbbrevStandard, +% the \meta{defining command} will take the arguments \marg{abbrev +% command}\marg{initial text}\oarg{subsequent text} and defines +% \meta{abbrev command} to be a plain or switching abbreviation macro as +% appropriate. If given, the optional argument \meta{definer} should be a +% macro name, which will be first be passed a \marg{category}, then will +% read user arguments (e.g., in the case of \cs\TMDefineAbbrevStandard, +% \marg{cs}\marg{initial}\oarg{subsequent}). The \meta{definer} is +% expected of course to do something like define \marg{cs}. +% +% \DescribeMacro{\TMInitialSuffix} +% \DescribeMacro{\TMSubsequentSuffix} +% The factory default suffixes ``short'' and ``long'' may be changed by +% changing the definitions of \cs\TMSubsequentSuffix and +% \cs\TMInitialSuffix. The change should be made after the package is +% loaded but before any abbreviation macros have been defined. +% +% \DescribeMacro{\DateMark} +% Abbreviation macros like \cs\PM are defined as \cs\DateMark{}s, like this, +% without the final period: +% \begin{codeexample} +% \newcommand\PM {% +% \DateMark{p.m}% +% } +% \end{codeexample} +% +% \DescribeMacro{\ifTMInhibitSwitching} +% \DescribeMacro{\TMInhibitSwitchingfalse} +% \DescribeMacro{\TMInhibitSwitchingtrue} +% \DescribeMacro{\ifTMAlwaysLong} +% \DescribeMacro{\TMAlwaysLongtrue} +% \DescribeMacro{\TMAlwaysLongfalse} +% When \cname{ifTMInhibitSwitching} is true, first occurrences of an +% abbreviation macro will expand to the initial expansion as usual, but they +% will not trigger the change to subsequent expansions. Example: inhibit +% switching inside footnotes, and abbreviations will not be spelled out for the +% first and only time in a footnote. That is, if their first appearance is in a +% footnote, their first appearance in the main text will also expand to the +% long version. See the configuration file for how to do this. +% +% When \cs\TMAlwaysLong is true, every abbreviation macro expands to its +% initial expansion. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{abbreviation macros (Frankenstein's briefs)} +\def\DoXPackageS {abbrevs} +\def\fileversion{v1.4} +\def\filedate{2001/09/08} +\def\docdate{2001/09/08} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{abbrevs}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Requirements} +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\RequirePackage{moredefs,slemph} +% \end{macrocode} +% +% \caveat{These docs could be much improved. There are far too many things +% called ``definers.'' Cleaning up the basic code concepts wouldn't hurt either.} +% +% \section{Basics} +% +% Let's begin with the tricky part of inserting space based on context. The +% strategy is: first, if the following character is not in \cs\nocorr and the +% current font is not slanted, insert an italic correction with +% \cname{sw@slant}; second, if the following character is not in +% \cs\nospacelist, insert a space. +% +% Again, in pseudocode: +% \begin{codeexample} +% LET T = the next token +% IF (slanted font is current AND T NOT IN \nocorrlist) +% \sw@slant +% FI +% IF T NOT IN \nospacelist +% \space +% FI +% \end{codeexample} +% +% \begin{macro}{\nospacelist} +% Put these in the order of their frequency. Anything in \cs\nocorrlist +% should also be in here, most likely. I'm putting in \cname{@xobeysp} +% because it's in the \package{xspace} package, but I can't tell you when it +% would come up. +% \begin{macrocode} +\requirecommand\nospacelist {% + ,.':;?-/\slash~!)]\bgroup\egroup\@sptoken\ \space\/\@xobeysp +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maybe@ic@space} +% \begin{macro}{\maybe@ic@space@} +% \cname{maybe@ic@space} checks the next character and inserts an italic +% correction and space as appropriate. +% \begin{macrocode} +\newcommand\maybe@ic@space {% + \futurelet\@let@token\maybe@ic@space@ +} +% \end{macrocode} +% We first call the kernel's \cname{maybe@ic@}, then our own +% \cname{maybe@space@}. +% \begin{macrocode} +\newcommand\maybe@ic@space@ {% + \maybe@ic@ + \maybe@space@ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\maybe@space} +% \begin{macro}{\maybe@space@} +% \cname{maybe@space} and \cname{maybe@space@} are very similar to the +% kernel's analogs \cname{maybe@ic} and \cname{maybe@ic@}, but they check +% \cs\nospacelist instead of \cs\nocorr. \cname{t@st@ic} sets +% \cname{@tempswa} false if \cname{@let@token} is in \cs\nospacelist. +% \begin{macrocode} +\newcommand\maybe@space {% + \futurelet\@let@token\maybe@space@ +} +\newcommand\maybe@space@ {% + \@tempswatrue +% \DTypeout{In maybe@space@ my lettoken is [\meaning\@let@token]}% + \expandafter \@tfor + \expandafter \reserved@a + \expandafter :% + \expandafter =% + \nospacelist + \do \t@st@ic + \if@tempswa + \space + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Categories} +% +% \begin{macro}{\ResetAbbrevs} +% \begin{macro}{\NewAbbrevCategory} +% \begin{macro}{\TMResetAll} +% \begin{macro}{\TMHookAll} +% \begin{macro}{\TMFontAll} +% Each time an abbreviation of category \cat{C} is defined, some tokens are +% added to the contents of |\TMReset|\meta{C}. +% \begin{macrocode} +\ReserveCS\TMResetAll +\ReserveCS\TMHookAll +\ReserveCS\TMFontAll + +\newcommand\NewAbbrevCategory [1] {% args: category + \expandafter\ReserveCS\csname TMReset#1\endcsname + \expandafter\ReserveCS\csname TMFont#1\endcsname + \expandafter\ReserveCS\csname TMHook#1\endcsname + \expandafter\g@addto@macro + \expandafter\TMResetAll\csname TMReset#1\endcsname +} +\newcommand\ResetAbbrevs [1] {% args: category-list + \@for\sc@t@a:=#1\do {% + \@ifundefined{TMReset\sc@t@a} {% + \FrankenWarning{abbrevs}{The abbreviation category \sc@t@a\space + is not defined!}% + }{% ELSE + \@nameuse{TMReset\sc@t@a}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Suffixes} +% +% \begin{macro}{\TMInitialSuffix} +% \begin{macro}{\TMSubsequentSuffix} +% When an abbreviation macro is created, two additional commands with these +% suffixes are also created. For example, \cs\foo, \cs\foolong, and +% \cs\fooshort. When abbrevs are used in such a way that ``long'' and +% ``short'' don't make sense, it would make sense to change these to +% something more descriptive. +% \begin{macrocode} +\newcommand\TMInitialSuffix {% + long% +} +\newcommand{\TMSubsequentSuffix} {% + short% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Plain abbreviations} +% +% The checking that \cname{sw@slant} does for skips and penalties on the list +% is going to be superfluous for the applications I imagine. But we trade that +% for a more flexible macro. +% +% We don't check for \cs\nocorr or an empty body; maybe we should when it's +% first defined; but I ran into really hairy expansion troubles trying to do +% that and use \cs\DeclareRobustCommand. FIX. +% +% \begin{macro}{\TMNewAbbrevPlain} +% Things are easy when the abbreviation doesn't switch between initial and +% subsequent expansions. +% \todo{pass root and suffix instead of \code{\csname} so that we don't have to parse +% it out again later from tmcurrentmacro} +% \begin{macrocode} +\ReserveCS\TMCurrentMacro +\newcommand\TMNewAbbrevPlain [3] {% args: \csname category body + \NewRobustCommand #1 {% +% \xdef\TMCurrentMacro {\expandafter\Gobble\string#1}% + \@bsphack + \TMHookAll + \@nameuse{TMHook#2}% + \@esphack + \ifmmode + \def\sc@t@a {% + \nfss@text{\@nameuse{TMFont#2}#3}% + }% + \else + \def\sc@t@a {% + \leavevmode + \begingroup +% \end{macrocode} +% We can skip the check for emptiness and containing just a space, since those +% won't occur with abbreviation macros except by accident, I think. We proceed +% straight to a check for \cs\nocorr{}s. +% \begin{macrocode} + \tm@check@nocorr #3\nocorr\@nil + \TMFontAll + \@nameuse{TMFont#2}% + \tm@check@left + #3% + \tm@check@right + \endgroup + }% + \fi + \sc@t@a + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tm@check@nocorr} +% This corresponds to the kernel's \cname{check@nocorr@}. We simply +% substitute \cname{maybe@ic@space} and \cname{maybe@space} in where +% necessary. We also use \cname{tm@check@left} and \cname{tm@check@right} +% instead of \cname{check@icl} and \cname{check@icr}. +% \begin{macrocode} +\NewName{tm@check@nocorr} {#1#2\nocorr#3\@nil} {% + \let\tm@check@left\maybe@ic + \def\tm@check@right {\aftergroup\maybe@ic@space}% + \def\reserved@a {\nocorr}% + \def\reserved@b {#1}% + \def\reserved@c {#3}% + \ifx\reserved@a\reserved@b + \ifx\reserved@c\@empty + \let\check@icl\@empty + \else + \let\check@icl\@empty + \def\check@icr {\aftergroup\maybe@space}% + \fi + \else + \ifx\reserved@c\@empty\else + \def\tm@check@right {\aftergroup\maybe@space}% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \section{Control booleans} +% +% \begin{macro}{\ifTMInhibitSwitching} +% \begin{macro}{\TMInhibitSwitchingtrue} +% \begin{macro}{\TMInhibitSwitchingfalse} +% \begin{macro}{\ifTMAlwaysLong} +% \begin{macro}{\TMAlwaysLongtrue} +% \begin{macro}{\TMAlwaysLongfalse} +% Control booleans. +% \begin{macrocode} +\newboolean{TMInhibitSwitching} % initially false +\newboolean{TMAlwaysLong} % initially false +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Switching abbreviations} +% +% \vspace{7ex}^^A kludge to handle all those macro names +% \begin{macro}{\TMNewAbbrevSwitcher} +% Here is the main abbreviation macro definer. It works by defining two +% macros, one for the initial text and one for the subsequent text, and +% setting up a third user command to choose between the two as appropriate. +% (The first two are made available to the user by explicit call as well.) +% The function used to define the two macros is passed as the first argument +% to this function. Supplied definers are \cs\TMNewAbbrevPlain (I will +% write \cs\TMNewAbbrevWork and \cs\TMNewAbbrevDotclose soon FIX). The +% second argument is the category---each definer takes at least three +% arguments: a command name, a category, and the content. The third argument +% is the user macro name to be created, and the fourth and fifth arguments +% are the initial and subsequent expansion texts. +% +% The first part sets three token variables to the three command sequences +% that this macro is going to define---the user, initial, and subsequent +% commands. The user command checks its associated boolean variable to see +% whether it has been called before. If so, it calls the ``subsequent'' +% macro; if not, the ``initial'' macro. +% +% \begin{macrocode} +\newcommand\TMNewAbbrevSwitcher [5] {% args: definer category csname +% % initial subseq. + \expandafter#1\csname #3\TMInitialSuffix\endcsname{#2}{#4} + \expandafter#1\csname #3\TMSubsequentSuffix\endcsname{#2}{#5} + \newboolean{@#3@mentioned} + \expandafter\g@addto@macro\csname TMReset#2\endcsname {% + \global\csname @#3@mentionedfalse\endcsname + } +% \end{macrocode} +% We've created the initial and subsequent macros, and the boolean. Now we +% define the user macro. This definition is tricky. In pseudocode, it looks +% like this: +% \begin{codeexample} +% if #3 definable then +% #3 := { if (#3-mentioned AND NOT TMAlwaysLong) then +% #3-short +% else +% if NOT TMInhibitSwitching then #3-mentioned := (global) true +% #3-long +% fi } +% fi +% \end{codeexample} +% Hmm, I'm not sure this is any more readable than a sea of +% \cs\expandafter\cs\noexpand{}s. +% +% Notice that in a switching abbrev, the -mentioned boolean is set to true +% \emph{before} calling the macro itself, so that the hook can check and +% possibly alter the value. The \package{acromake} emulation takes advantage +% of this. +% \begin{macrocode} + \expandafter\@ifdefinable\csname #3\endcsname {% +% is ##1 below: + \EExpand\csname #3\endcsname\In {% +% ####1: + \EExpand\csname if@#3@mentioned\endcsname\In {% +% ########1: + \EExpand\csname #3\TMSubsequentSuffix\endcsname\In {% +% ################1: + \EExpand\csname @#3@mentionedtrue\endcsname\In {% +% ################################1: + \EExpand\csname #3\TMInitialSuffix\endcsname\In {% +% \gdef\{% + \gdef ##1{% must be NO SPACE before `{' ! + \@tempswafalse +% \if@mentioned + ####1% + \ifTMAlwaysLong\else + \@tempswatrue + \fi + \fi + \if@tempswa +% \def\sc@t@a {\\TMSubsequentSuffix}% + \def\sc@t@a {########1}% + \else + \ifTMInhibitSwitching\else +% \global\@@mentionedtrue + \global ################1% + \fi +% \def\sc@t@a {\\TMInitialSuffix}% + \def\sc@t@a {################################1}% + \fi +% \expandafter \gdef +% \expandafter\TMCurrentMacro +% \expandafter{\sc@t@a}% + \sc@t@a + }% close \gdef + }}}}}% close \EExpand...\In's + }% close \@ifdefinable +} +% \end{macrocode} +% \caveat{The \cs\csname{}s (e.g., either \cs\foolong or \cs\fooshort) +% \emph{must} be the very last thing to occur in the definitions, or the +% \cs\futurelet that checks following spacing in, e.g., \cs\TMNewAbbrevPlain +% will break. This is why we use the construction with \cname{sc@t@a}. No +% space must sneak into the macros, either!} +% \end{macro} +% +% The hard work is done. Now we define some macros to help create new +% categories. +% +% \section{Defining commands} +% +% A \meta{definer} is always called with a category as a first argument. The +% only definers in this version of this package are this one and the one that +% emulates the \package{acromake} package. More later! +% +% \begin{macro}{\TMDefineAbbrevStandard} +% \begin{macro}{\tm@defineabbrevstandard} +% \cs\TMDefineAbbrevStandard is the standard \meta{definer} that makes the +% choice between defining an switching or a plain abbreviation, depending on +% whether the user supplies a subsequent text. +% \begin{macrocode} +\newcommand\TMDefineAbbrevStandard [3] {% args: category \csname + % initial [subsequent] + \@ifnextchar [ {% + \tm@defineabbrevstandard{#1}{#2}{#3}% + }{% ELSE + \TMNewAbbrevPlain{#2}{#1}{#3}% + }% +} +\NewName{tm@defineabbrevstandard} {#1#2#3[#4]} {% args: category \csname + % initial subsequent + \eExpand\expandafter\Gobble\string#2\In {% + \TMNewAbbrevSwitcher\TMNewAbbrevPlain{#1}{##1}{#3}{#4}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NewUserAbbrevDefiner} +% \begin{macro}{\tm@newuserabbrevdefiner} +% \mbox{} +% \begin{macrocode} +\newcommand\NewUserAbbrevDefiner [2] {% args: \csname category [definer] + \@ifnextchar [ {% + \tm@newuserabbrevdefiner{#1}{#2}% + }{% ELSE + \tm@newuserabbrevdefiner{#1}{#2}[\TMDefineAbbrevStandard]% + }% +} +\NewName{tm@newuserabbrevdefiner}{#1#2[#3]} {% args: \csname category definer + \newcommand #1 {% + #3{#2}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Basic categories} +% +% \begin{macro}{\TMResetGeneric} +% \begin{macro}{\TMResetName} +% \begin{macro}{\TMResetBook} +% \begin{macro}{\TMResetWork} +% \begin{macro}{\TMHookGeneric} +% \begin{macro}{\TMHookName} +% \begin{macro}{\TMHookBook} +% \begin{macro}{\TMHookWork} +% \begin{macro}{\TMFontGeneric} +% \begin{macro}{\TMFontName} +% \begin{macro}{\TMFontBook} +% \begin{macro}{\TMFontWork} +% \begin{macro}{\newabbrev} +% \begin{macro}{\newname} +% \begin{macro}{\newbook} +% \begin{macro}{\newwork} +% Right now, the \cat{Book} and \cat{Work} categories are separate but +% equal. A future revision will distinguish them by keeping track of more +% information about \cat{Work}s, with the idea of using them to generate a +% separate bibliography and index in a long document that refers to a +% certain list of books by short titles. E.g., my thesis is on Samuel +% Beckett, and I want to refer to his works by short titles, and +% automatically generate a Beckett bibliography of only the ones I use, +% listed by title. +% \begin{macrocode} +\NewAbbrevCategory{Generic} +\NewAbbrevCategory{Name} +\NewAbbrevCategory{Book} +\NewAbbrevCategory{Work} +\NewUserAbbrevDefiner{\newabbrev}{Generic} +\NewUserAbbrevDefiner{\newname}{Name} +\NewUserAbbrevDefiner{\newbook}{Book} +\NewUserAbbrevDefiner{\newwork}{Work} + +\def\TMFontBook {% + \itswitch +} +\def\TMFontWork {% + \itswitch +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Date marks} +% +% \begin{macro}{\DateMark} +% \begin{macro}{\DateMarkSize} +% \mbox{} +% \begin{macrocode} +\newcommand\DateMark [1] {% + \hspace{.2em}{\DateMarkSize\scshape #1}% + \@ifnextchar. {% + \spacefactor\@m + }{% ELSE + .\maybe@ic@space + }% +} +\newlet\DateMarkSize\small +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PM} +% \begin{macro}{\AM} +% \begin{macro}{\BC} +% \begin{macro}{\AD} +% Some common time abbreviations. +% \begin{macrocode} +\newcommand{\PM} {% + \DateMark{p.m}% +} +\newcommand{\AM} {% + \DateMark{a.m}% +} +\newcommand{\BC} {% + \DateMark{b.c}% +} +\newcommand{\AD} {% + \DateMark{a.d}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Emulation of \package{Acromake}} +% +% \caveat{This code is a \emph{mess!} Consider all but the user functions +% ``internal.'' I will reimplement it all another time. Meanwhile it works, +% and the user interface is \package{acromake}'s anyway, so it won't change.} +% +% \begin{macro}{\TMResetAcromake} +% \begin{macro}{\TMFontAcromake} +% \begin{macro}{\TMHookAcromake} +% \begin{macro}{\TMHookAcromakeHook} +% \begin{macro}{\TMAcromakeSecondarySuffix} +% \begin{macro}{\acromake} +% \begin{macro}{\tm@acromake@pageref} +% Define the category \cat{Acromake} and declare its user defining +% command to be \cs\acromake. Create a suffix \TMAcromakeSecondarySuffix +% analogous to \cs\TMInitialSuffix and \cs\TMSubsequentSuffix. +% +% Instead of building more generality into \package{abbrevs}, I emulate +% \package{acromake} with a few hacks, since I don't see a \emph{general} need +% for more than two expansions. Counting iterations, on the other hand, is +% something I would like to do for all abbrevs. Doing so is tantamount to +% replacing the present |-mentioned| booleans with ``counter'' macros. +% +% The emulation is done in the following way. Let's call the three expansions +% of an \package{acromake} macro the \meta{am-initial}, \meta{am-secondary}, +% and \meta{am-subsequent} expansions, in order. These must be mapped onto the +% \package{abbrevs} concepts of \term{inital} and \term{subsequent} expansions. +% The \cs\acromake command as I define it here defines a switching abbrev whose +% initial text contains \meta{am-initial} and subsequent text contains +% \meta{am-subsequent}. It also defines a plain abbrev with a suffix +% \cs\TMAcroSecondarySuffix (analogous to \cs\TMInitialSuffix and +% \cs\TMSubsequentSuffix) that expands to \meta{am-secondary}. In a switching +% abbrev, the associated |-mentioned| boolean is set to |true| \emph{before} +% calling the macro itself (and therefore its hook). The hook can therefore +% reset the boolean to |false|, and I do this in \cs\TMHookAcromake until it is +% time to go from the \meta{am-initial} to the \meta{am-secondary} expansions. +% \cs\TMInhibitSwitching affects the \cat{Acromake} category like all others, +% and \cs\TMResetAcromake behaves as expected. +% +% \begin{macrocode} +\@ifpackageloaded{acromake}{% + \FrankenWarning{abbrevs}{LaTeX is about to fail because \protect\acromake +is already defined.\MessageBreak Probably you have loaded acromake.sty, and if +so,\MessageBreak you should simply not load it, since abbrevs.sty +emulates\MessageBreak acromake.sty.} + }{%ELSE +} +\NewAbbrevCategory{Acromake} +\NewUserAbbrevDefiner{\acromake}{Acromake}[\TMAcromakeDefiner] + +\newcommand\TMAcromakeSecondarySuffix {secondary} + +\ReserveCS\tm@acromake@pageref +% \end{macrocode} +% We're going to use the main hook, so provide another free one. +% \begin{macrocode} +\ReserveCS\TMHookAcromakeHook +% \end{macrocode} +% I'm not sure why \package{acromake} does this check for odd values of +% \cs\ACRcnta. I use logic below that I think does reasonable things with odd +% values. +% +% I think \package{acromake} tried to inhibit using \meta{am-secondary} when it +% appeared on the same page as the (first!)\ \meta{am-initial} instance, but I +% also think there was a spurious $0$ in the source that broke this feature. +% I've emulated the working feature. +% \begin{macrocode} +% consider these acromake functions internal for now! +% differs from regular version in passing args to definer +\newcommand\TMNewAbbrevSwitcherAcromake [5] {% args: definer category csname +% % initial subseq. + #1{#3}{\TMInitialSuffix}{#2}{#4} + #1{#3}{\TMSubsequentSuffix}{#2}{#5} + \newboolean{@#3@mentioned} + \expandafter\g@addto@macro\csname TMReset#2\endcsname {% + \global\csname @#3@mentionedfalse\endcsname + } + \expandafter\@ifdefinable\csname #3\endcsname {% +% is ##1 below: + \EExpand\csname #3\endcsname\In {% +% ####1: + \EExpand\csname if@#3@mentioned\endcsname\In {% +% ########1: + \EExpand\csname #3\TMSubsequentSuffix\endcsname\In {% +% ################1: + \EExpand\csname @#3@mentionedtrue\endcsname\In {% +% ################################1: + \EExpand\csname #3\TMInitialSuffix\endcsname\In {% +% \gdef\{% + \gdef ##1{% must be NO SPACE before `{' ! + \@tempswafalse +% \if@mentioned + ####1% + \ifTMAlwaysLong\else + \@tempswatrue + \fi + \fi + \if@tempswa +% \def\sc@t@a {\\TMSubsequentSuffix}% + \def\sc@t@a {########1}% + \else + \ifTMInhibitSwitching\else +% \global\@@mentionedtrue + \global ################1% + \fi +% \def\sc@t@a {\\TMInitialSuffix}% + \def\sc@t@a {################################1}% + \fi +% \expandafter \gdef +% \expandafter\TMCurrentMacro +% \expandafter{\sc@t@a}% + \sc@t@a + }% close \gdef + }}}}}% close \EExpand...\In's + }% close \@ifdefinable +} +\newcommand\TMAcromakeDefiner [4] {% args: category csname acronym fulltext + \ifnum \ACRcnta < 1\relax + \def\ACRcnta {1}% + \fi% +% \end{macrocode} +% \package{Acromake} uses a suffix of |z| here, which IMHO is a bad idea, so +% I use something a user will not put in a source file: a prefix of |tm@acromake@|. +% See below for why we start at $-1$. +% \begin{macrocode} + \Global\NewName{tm@acromake@#2}{} {-1}% macro for counting occurrences +% \end{macrocode} +% Define an abbrev that switches from \meta{am-initial} to +% \meta{am-subsequent}. Hack the resetting macro to reset the count as well as +% the |-mentioned| boolean. Reset to $0$ not $-1$ so that we only label once! +% Is this an argument for having the ``mentioned'' boolean switch at the +% transition from \meta{am-secondary} to \meta{am-subsequent}? (so that +% resetting goes back to \meta{am-secondary} instead of \meta{am-initial}.) I +% think so; or, better, define a \emph{new} label each time we reset. +% \begin{macrocode} + \TMNewAbbrevSwitcherAcromake\TMNewAbbrevAcromake{#1}{#2}{#4 (#3)}{#3}% + \expandafter\g@addto@macro\csname TMReset#1\endcsname {% + \global\DefName{tm@acromake@#2}{} {-1}% + }% +% \end{macrocode} +% Define an additional abbrev that expands to \meta{am-secondary}. In the code +% below, Fred replaces the |#1| with something else with |#1| in it; Ethel +% replaces the new |#1| with the contents of \cname{sc@toks@a}. (The |#| is +% quoted with more |#|'s below.) Hmm, this expansion business could probably +% be simplified by thinking it through from the beginning. +% \begin{macrocode} +% \def\tm@acromake@pageref {% +% \sc@toks@a={\noexpand\pageref{TMacromake:#2}}% +% \EExpand\AcromakePageref\In {% ``Fred'' +% \EExpand\sc@toks@a\In {% ``Ethel'' +% ####1% +% }% +% }% +% }% +% \eExpand\tm@acromake@pageref\In {% + \TMNewAbbrevAcromake{#2}{\TMAcromakeSecondarySuffix} + {Acromake} + {#3\ (see Page \pageref{TMacromake:#2})}% +% {#3\ ##1}% +% }% +} +% \end{macrocode} +% Now define \cs\TMHookAcromake. +% Arg, first have to define an alternative of \cs\TMNewAbbrevPlain because of +% the odd problem described above. Same as \cs\TMNewAbbrevPlain except takes +% first argument in two parts and defines \TMCurrentMacroRootname, which will +% be used in the hook. +% \begin{macrocode} +\ReserveCS\TMCurrentMacroRootname +% plain's args: csname category body +\newcommand\TMNewAbbrevAcromake [4] {% args: csname-root csname-suffix category body + \expandafter\NewRobustCommand\csname #1#2\endcsname {% + \gdef\TMCurrentMacroRootname {#1}% + \@bsphack + \TMHookAll + \@nameuse{TMHook#3}% + \@esphack + \ifmmode + \def\sc@t@a {% + \nfss@text{\@nameuse{TMFont#3}#4}% + }% + \else + \def\sc@t@a {% + \leavevmode + \begingroup +% \end{macrocode} +% We can skip the check for emptiness and containing just a space, since those +% won't occur with abbreviation macros except by accident, I think. We proceed +% straight to a check for \cs\nocorr{}s. +% \begin{macrocode} + \tm@check@nocorr #4\nocorr\@nil + \TMFontAll + \@nameuse{TMFont#3}% + \tm@check@left + #4% + \tm@check@right + \endgroup + }% + \fi + \sc@t@a + }% +} +%\def\tm@chop#1 {#1}% +%\def\tm@choplong#1long{#1} + +\ReserveCS\tm@t % temp +\def\TMHookAcromake {% +% \end{macrocode} +% We handle inhibition of switching as follows. If the count is $-1$, this is +% the first iteration, so make the \cs\label, increment the count to $0$, and +% proceed. If switching is not inhibited, increment the counter. Then proceed +% with choosing the right expansion based on the counter. A first iteration in +% the normal case will therefore increment the counter twice from $-1$ to $1$. +% A first iteration in the case that switching is inhibited will advance the +% counter once to $0$, where it will stay until switching is permitted. +% +% I need to extract the root name from the three suffixed names -- why can't I +% do that?! +% \begin{codeexample} +% \documentclass{minimal} +% \begin{document} +% \def\gobble#1{} +% \def\one{j} +% \edef\two{\expandafter\gobble\string\j} +% %\edef\two{\two} % doesn't help +% \edef\three{\two} +% \typeout{one: [\meaning\one]} +% \typeout{two: [\meaning\two]} +% [\one] [\two] +% \typeout{\ifx\one\two ifx same\else ifx different -- WHY?!\fi} +% \typeout{\if\one\two if same\else if different\fi} +% \end{codeexample} +% +% +% \begin{macrocode} +% \edef\tm@t{\expandafter\strip@prefix\meaning\TMCurrentMacro}% +% \edef\tm@t{\E@cdr\tm@t\@nil}% +% \edef\tm@t{\expandafter\tm@choplong\TMCurrentMacro}% + \edef\tm@t{\TMCurrentMacroRootname}% + \ifnum\csname tm@acromake@\tm@t\endcsname = -1\relax + \eExpand\tm@t\In{% +% \typeout{initial: labeling ##1}% + \label{TMacromake:##1}% + }% + \tm@incmacro{\tm@t}% + \fi + \ifTMInhibitSwitching\else + \tm@incmacro{\tm@t}% + \fi +% \typeout{BEGIN: count is \csname tm@acromake@\tm@t\endcsname}% +% \end{macrocode} +% When the count is $< \mbox{|ACRcnta|}$, reset the |-mentioned| boolean so +% that the expansion will be the initial text i.e., \meta{am-initial}, again +% the next time. +% \begin{macrocode} +% doesn't work: +% \ifnum\csname tm@acromake@\tm@t\endcsname < \ACRcnta% +% doesn't work: +% \ifnum\csname tm@acromake@\tm@t\endcsname < \ACRcnta % +% works: I have no clue why... + \ifnum\csname tm@acromake@\tm@t\endcsname < \ACRcnta\relax +% \typeout{use before cnta}% + \expandafter\global\csname @\tm@t@mentionedfalse\endcsname + \else +% \end{macrocode} +% When the count is $= \mbox{|ACRcnta|}$, use the initial text (i.e., +% \meta{am-initial}) one last time and switch to using \meta{am secondary} next +% time. We allow the |-mentioned| boolean to become |true| by refraining from +% resetting it. We save the existing subsequent macro (which expands to +% \meta{am-subsequent}) and substitute the abbrev that expands to +% \meta{am-secondary}. The bounds check on \cs\ACRcnta at the beginning +% guarantees that we execute this clause once. +% \begin{macrocode} + \ifnum\csname tm@acromake@\tm@t\endcsname = \ACRcnta\relax + \ifTMInhibitSwitching\else +% \typeout{use at cnta A}% + \SaveName{\tm@t\TMSubsequentSuffix}% +% \typeout{use at cnta B}% + \global\EElet\csname \tm@t\TMSubsequentSuffix\endcsname + \csname \tm@t\TMAcromakeSecondarySuffix\endcsname +% \typeout{use at cnta C}% + \fi + \fi +% \end{macrocode} +% When the count is $> \mbox{|ACRcnta|}$ and $<= \mbox{|ACRcntb|}$, +% the expansion is \meta{am-secondary}, we only check whether we are currently +% on the page of the original use of the \meta{am-initial} text and in this +% case use \meta{am-subsequent}. +% \begin{macrocode} +% \@tempswafalse +% \ifnum\csname tm@acromake@\tm@t\endcsname < \ACRcntb\relax +% \ifnum\csname tm@acromake@\tm@t\endcsname > \ACRcnta\relax +% \@tempswatrue +% \fi +% \else +% \ifnum\csname tm@acromake@\tm@t\endcsname = \ACRcntb\relax +% \@tempswatrue +% \fi +% \fi +% % ie cnta < count <= cntb +% \if@tempswa +% % \typeout{use between cnta and cntb}% +% \eExpand\tm@t\In{% +% \typeout{page [\thepage] ref [\r@TMacromake:##1]}% +% \expandafter\ifnum\expandafter\thepage\expandafter=\csname r@TMacromake:##1\endcsname\relax +% % \typeout{this instance should be subsequent instead of secondary}% +% % insert a * to signal where: +% % *% +% % FIX how to do it?? I leave it broken for now, as it is broken in acromake +% % itself, +% \fi +% }% +% \fi +% \end{macrocode} +% When the count is $= \mbox{|ACRcntb|}$, we want to restore the definition of +% the subsequent macro. This test is not in an \cs\else clause to handle the +% case where $\mbox{|ACRcnta|} = \mbox{|ACRcntb|}$. +% \begin{macrocode} +% \ifnum\csname tm@acromake@\tm@t\endcsname < \ACRcntb\relax +% \ifnum\csname tm@acromake@\tm@t\endcsname > \ACRcnta\relax +% \typeout{use between cnta and cntb}% +% \fi +% \fi + \ifnum\csname tm@acromake@\tm@t\endcsname = \ACRcntb\relax +% \typeout{use at cntb}% + \RestoreName{\tm@t\TMSubsequentSuffix}% + \fi + \fi + \TMHookAcromakeHook +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\tm@incmacro} +% \begin{macro}{\c@tm@util} +% This is Paul's trick for using a macro like a counter. I reduce the command +% to its essential function in this context. It looks like Paul wanted a more +% general command. I think if you define such a command (or set of commands +% that emulate counters with macros) they do not belong here but in +% \package{moredefs} or their own package. I also +% \begin{macrocode} +\newcounter{tm@util} +\newcommand{\tm@incmacro} [1] {% arg: acroabbrev + \eExpand\csname tm@acromake@#1\endcsname\In {% + \setcounter{tm@util}{##1}% + }% + \stepcounter{tm@util}% + \expandafter\xdef\csname tm@acromake@#1\endcsname {\thetm@util}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ACRcnta} +% \mbox{} +% \begin{macrocode} +\newcommand\ACRcnta {1} +\newcommand\ACRcntb {2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AcromakePageref} +% The string |#1| will make it into the macro, which will in another +% context be replaced with a \cs\pageref. +% \begin{macrocode} +\newcommand\AcromakePageref {(see Page ##1)} +% suggestion: +% \renewcommand\AcromakePageref {(see page ##1)} +% \end{macrocode} +% \end{macro} +% +% \part{Configuration} +% +% We've built up the groundwork and leave the definitions of useful things to +% the configuration file. +% \begin{macrocode} +\InputIfFileExists{abbrevs.cfg}{}{} +% \end{macrocode} +% +% The contents of the distributed configuration file are below. +% +% \InputIfFileExists{abbrevs.cfg}{}{} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/abbrevs.tex b/macros/latex/contrib/frankenstein/abbrevs.tex new file mode 100644 index 0000000000..1551e43772 --- /dev/null +++ b/macros/latex/contrib/frankenstein/abbrevs.tex @@ -0,0 +1,67 @@ +% abbrevs.tex -- documentation for the abbrevs LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{abbrevs.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{abbrevs} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{abbrevs.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/achicago-bst.ins b/macros/latex/contrib/frankenstein/achicago-bst.ins new file mode 100644 index 0000000000..2b7c10579e --- /dev/null +++ b/macros/latex/contrib/frankenstein/achicago-bst.ins @@ -0,0 +1,64 @@ +% achicago-bst.ins -- docstrip driver for the achicago BibTeX style +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + achicago.bst or achicago.bsq. This + BibTeX style will work ONLY if it is called achicago.bst + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + achicago.bst which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this BibTeX style. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. +\nopostamble + +\generate{\file{achicago.bsq}{\from{achicago.bst}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file achicago.bsq is a faster replacement for the file} +\Msg{* achicago.bst.} +\Msg{*} +\Msg{* achicago.bsq is stripped of comments (documentation) and must be} +\Msg{* renamed achicago.bst and placed where BibTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/achicago-bst.pdf b/macros/latex/contrib/frankenstein/achicago-bst.pdf new file mode 100644 index 0000000000..8de77e1dd3 Binary files /dev/null and b/macros/latex/contrib/frankenstein/achicago-bst.pdf differ diff --git a/macros/latex/contrib/frankenstein/achicago-bst.tex b/macros/latex/contrib/frankenstein/achicago-bst.tex new file mode 100644 index 0000000000..bd0c55faa6 --- /dev/null +++ b/macros/latex/contrib/frankenstein/achicago-bst.tex @@ -0,0 +1,67 @@ +% achicago-bst.tex -- documentation for the achicago BibTeX style. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{achicago-bst.ver} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{achicago} BibTeX style \\\smaller \fileinfo} +\maketitle +\DocInput{achicago.bst} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/achicago-bst.ver b/macros/latex/contrib/frankenstein/achicago-bst.ver new file mode 100644 index 0000000000..239544360f --- /dev/null +++ b/macros/latex/contrib/frankenstein/achicago-bst.ver @@ -0,0 +1,18 @@ + \def\fileinfo{A Chicago Manual BibTeX style} + \def\DoXPackageS {longtable} + \def\initelyHavECitationS {} + \def\fileversion{v1} + \def\filedate{2001/08/31} + \def\docdate{2001/08/31} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! diff --git a/macros/latex/contrib/frankenstein/achicago.bst b/macros/latex/contrib/frankenstein/achicago.bst new file mode 100644 index 0000000000..36008a9652 --- /dev/null +++ b/macros/latex/contrib/frankenstein/achicago.bst @@ -0,0 +1,3551 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% achicago BibTeX style. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, achicago.tex +% and achicago.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{46} +% +%^^A** new macros +% \newlet \entry\WrapquotesIN +% \newcommand*\field [1] {{\textitswitch\WrapquotesIN{#1}}} +% \newlet \gvar\texttt ^^A global variable +% \newlet \evar\texttt ^^A entry variable +% \newcommand*\function [1] {\texttt{\bfseries #1}} +% \newcommand\stack [2] {\par{\ttfamily #1 $\mapsto$ #2}\par} +% \newcommand\defentrytype [3] {Required: #1\par Optional: #2\par#3} +% \newcommand*\builtin [1] {\code{#1}\$} +% +% \todo{explain conventions; put some in \package{compsci}} +% +%^^A** nocites +% \nocite{*} ^^A FIX remove for distribution +% \nocite {abrams:natural} +% \nocite {ackerley:beckett:augustine} +% \nocite {amiran:beckett:wandering} +% \nocite {bair:beckett:bio} +% \nocite {beckett:cspr} +% \nocite {beckett:godot} +% \nocite {beckett:letter:yellow} +% \nocite {beckett:notebook:krapp,beckett:notebook:godot,^^A +% beckett:notebook:endgame,beckett:notebook:happy} +% \nocite {beckett:yellow} +% \nocite {blake:job} +% \nocite {bloom:anxiety:1} +% \nocite {bloom:beckett:trilogyintro} +% \nocite {borges:ficciones} +% \nocite {brater:beckett:why} +% \nocite {bryden:beckett:god} +% \nocite {bryden:beckett:smiles} +% \nocite {buning:beckett:via} +% \nocite {burrows:beckett:interview} +% \nocite {calder:beckett:bair} +% \nocite {carey:beckett:introjoyce} +% \nocite {carey:beckett:pieta} +% \nocite {carroll:dante:purgatorio,dante:mandelbaum:purgatorio,% +% dante:ciardi:purgatorio,vernon:dante:purgatorio} +% \nocite {carroll:dante:purgatorio} +% \nocite {cassedy:group} +% \nocite {chambers-murray} +% \nocite {chicago:14} +% \nocite {coetzee:beckett:revisions,stevenson:beckett:lobster} +% \nocite {coetzee:beckett:revisions} +% \nocite {cohn:beckett:play} +% \nocite {common-prayer} +% \nocite {companion:mind,gleitman:psych} +% \nocite {companion:mind} +% \nocite {copleston:phil:cusa} +% \nocite {copleston:phil:pseudo} +% \nocite {cronin:beckett:modernist} +% \nocite {culik:beckett:math} +% \nocite {culik:beckett:watt} +% \nocite {dante:ciardi:paradiso} +% \nocite {dante:ciardi:purgatorio} +% \nocite {dante:mandelbaum:purgatorio} +% \nocite {dearlove:beckett:residual} +% \nocite {donne:paradoxes} +% \nocite {driver:beckett:madeleine} +% \nocite {ellis:beckett:surds} +% \nocite {ellmann:joyce} +% \nocite {empson:ambiguity} +% \nocite {euclid:elements:brit} +% \nocite {farrow:beckett:art} +% \nocite {federman:beckett:works} +% \nocite {fergusson:dante:purgatorio} +% \nocite {fletcher:beckett:art} +% \nocite {freud:btpp:norton} +% \nocite {frye:anatomy:bate} +% \nocite {gardner:circus:cyclic} +% \nocite {gascoigne:works:posies} +% \nocite {gates:beckett:goon} +% \nocite {gleitman:psych} +% \nocite {gontarski:beckett:undoing} +% \nocite {green:beckett:augustine} +% \nocite {green:beckett:niente} +% \nocite {greene:repentance} +% \nocite {harper:beckett:irish,zurbrugg:beckett:irish,^^A +% harrington:beckett:local,obrien:beckett:country} +% \nocite {harvey:beckett:poet} +% \nocite {heraclitus:kirk:cosmic} +% \nocite {hill:vaughan} +% \nocite {hobson:beckett:year} +% \nocite {hopkins:gardner} +% \nocite {iser:beckett:negativity} +% \nocite {israel:beckett:bair} +% \nocite {james:principles} +% \nocite {jewinski:beckett:epiphany} +% \nocite {jones:beckett:murphy} +% \nocite {joyce:kershner:portrait} +% \nocite {joyce:ulysses:gabler} +% \nocite {joyce:wake} +% \nocite {juliet:beckett:conversations} +% \nocite {jung:psych-lit} +% \nocite {jung:tav:3} +% \nocite {jung:tav} +% \nocite {kennedy:beckett:murphy} +% \nocite {kenner:beckett:study} +% \nocite {kenner:beckett:syntax} +% \nocite {knowlson:beckett:frescoes} +% \nocite {knowlson:beckett:life} +% \nocite {koffka:gestalt} +% \nocite {krance:beckett:physics} +% \nocite {kroll:beckett:bel} +% \nocite {lakoff:johnson,lakoff:women,johnson:body} +% \nocite {lees:beckett:music} +% \nocite {levy:beckett:conv} +% \nocite {lippman:beckett:noti} +% \nocite {lodge:beckett:ping} +% \nocite {marculescu:beckett:solipsism} +% \nocite {mchugh:wake} +% \nocite {mcmillan:beckett:allegory} +% \nocite {merwin:ladders} +% \nocite {milton:riverside:paralost} +% \nocite {miskinis:beckett:recurrrence} +% \nocite {montgomery:beckett:quantum} +% \nocite {mood:beckett:system} +% \nocite {murphy:beckett:criticism} +% \nocite {niven:numbers} +% \nocite {norton:english} +% \nocite {obrien:beckett:country} +% \nocite {obrien:dreamforward} +% \nocite {ohara:beckett:jung:jobs,ohara:beckett:freud:jobs} +% \nocite {ohara:beckett:valery} +% \nocite {opie:nursery} +% \nocite {ovid:loeb} +% \nocite {perkins:romantic} +% \nocite {pilling:beckett:companion} +% \nocite {posnock:beckett:valery} +% \nocite {princeton:poetics} +% \nocite {rabinovitz:beckett:aphorisms} +% \nocite {rabinovitz:beckett:development,rabinovitz:beckett:innovation} +% \nocite {rabinovitz:beckett:development} +% \nocite {rabinovitz:beckett:innovation} +% \nocite {rabinovitz:beckett:psych} +% \nocite {random,OED:2,heritage,webster:3} +% \nocite {random} +% \nocite {renaud:beckett:mag} +% \nocite {ricks:beckett:dying} +% \nocite {rudin:math:analysis} +% \nocite {sacks:wife} +% \nocite {scruton:beckett:descartes} +% \nocite {segre:beckett:ping} +% \nocite {sharp:folksongs} +% \nocite {shenker:beckett:moody} +% \nocite {shimony:newphys} +% \nocite {smith:beckett:aporia} +% \nocite {stern:beckett:inter} +% \nocite {stevenson:beckett:lobster} +% \nocite {swift:tub} +% \nocite {topsfield:beckett:humour} +% \nocite {unger:ayer:exist} +% \nocite {vernon:dante:purgatorio} +% \nocite {webster:3} +% \nocite {winston:beckett:footnote} +% \nocite {wolfson:religion:history} +% \nocite {wolosky:beckett:mysticism} +% \nocite {work:folksongs} +% \nocite {zeifman:beckett:religion} +% \nocite{acheson:beckett:murphy} +% \nocite{anspaugh:beckett:faith} +% \nocite{bair:beckett:bio} +% \nocite{beckett:pricks} +% \nocite{carey:beckett:joyce} +% \nocite{cohn:beckett:collection} +% \nocite{common-prayer} +% \nocite{connor:beckett:animals} +% \nocite{davies:beckett:ideal} +% \nocite{eliot:middlemarch:random} +% \nocite{farrow:beckett:art} +% \nocite{freud:btpp:norton} +% \nocite{harvey:beckett:poet} +% \nocite{joyce:dubliners} +% \nocite{juliet:beckett:conversations} +% \nocite{jung:tav} +% \nocite{kroll:beckett:bel} +% \nocite{linden:herbert} +% \nocite{mccarthy:beckett:essays} +% \nocite{mcmillan:beckett:allegory} +% \nocite{melville:dick:newberry} +% \nocite{murphy:beckett:criticism} +% \nocite{norton:modern} +% \nocite{obrien:beckett:country} +% \nocite{obrien:dreamforward} +% \nocite{pilling:beckett:before} +% \nocite{putnam:beckett:caravan} +% \nocite{rabinovitz:beckett:aphorisms} +% \nocite{rabinovitz:beckett:development} +% \nocite{rabinovitz:beckett:innovation} +% \nocite{random} +% \nocite{ricks:beckett:dying} +% \nocite{scruton:beckett:descartes} +% \nocite{stern:beckett:inter} +% \nocite{whitman:leaves:norton} +% +%^^A** abstract +% \begin{abstract} +% \manual bibliography style \BibTeX{} macros. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \caveat{The dox are spotty for this bibstyle---sorry! This is a pretty +% stable style, however. I've included almost my entire test cases. If you're +% puzzled, you may compare \file{frankenstein.bib} with what you see in the +% References section at the end of this document. Or please write me.} +% +% Reference list ordering: alphabetical by author or whatever passes for author +% in the absence of one. +% +% \section{Pros and cons of this style} +% +% See a discussion in the documentation for the \package{achicago} package. +% +% \section{User documentation} +% +% \AddToCheckSum{-10} ^^A In this file we don't have the usual 5 version \defs +% \AddToCheckSum{-2} ^^A Subtract two more for the \initelyHavECitationS def +% \AddToCheckSum{-24} ^^A Sum of 17 and 7 in part-3.dtx +% +% No bibstyle is going to elgantly handle everything while using them in a way +% that's at all compatible with the majority of existing bibstyles out there. +% And it's not clear that such a bibstyle would be worth the effort to write +% and learn to use properly. The time would be better spent, I think, writing +% some macros to make inserting hand-done exceptions seamlessly into the +% bibliography, so that the whole process could remain clean and automatic. +% +% For the sceptical, and for your entertainment, an example. I wanted to a +% cite a certain paper by Freud in my dissertation. The cited paper has a +% title, date of first publication, and chapter number; I read this paper in a +% volume of Freud's papers with a title, volume editor, volume date, publisher, +% reprint date, and reprint publisher; this volume has a number in a series of +% publications (The International Psycho-Analytic Library) with a series +% editor; and also this volume has a volume number within a multivolume work +% with its own title (\book{Collected Papers}) and (supervising) +% translator. Readers honestly don't need all that information, but each one +% of those 15 pieces of information might be highly important for another +% citation, for which only two or three pieces of information were relevant or +% available. No one needs to write a bibstyle that handles it all, so at +% several places, the fields are assumed to be used for either one thing or +% another. For example, \field{series} \emph{either} contains the title of the +% inclusive multivolume work \emph{or} the series. When, as rarely happens, a +% volume is part of both at once, you have to give up one or the other. +% +% \caveat{This is a complex bibstyle and the number of potential cases is very +% high. Please check your output, and write me with cases that are not set +% according to \manual percepts. Please refer to \manual whenever +% possible.} +% +% \todo{star the new fields.} +% +% \newcommand\deffield [2] {#1\\} +% \DeleteShortVerb{\|} +% \begin{longtable}{|lp{3.5in}|} +% +% \larger\bfseries entry type & \larger\bfseries\hfil description\\\hline\endhead +% \hline\caption{Entry types.} \endfoot +% +% address & Address of publisher of \emph{cited} edition, whether a reprint or +% not. \\ + +% annotation & A complete paragraph or more. \\ + +% author & \\ + +% bookauthor & Book's author whenever \field{author} is referring to the author of a +% part of the book. Usually an \entry{inbook} or \entry{incollection} entry refers to a +% book with an editor but no author, but in the case of introductions etc.\ you +% have an author for each.\\ + +% booktitle & Book's title whenever \field{title} is referring to a part of the +% book. \\ + +% chapter & The \field{title} names the \field{chapter}th part of the book. One expects to +% have nonempty \field{booktitle}. See also \field{type}. \\ + +% edition & Edition information to be given after the book's title, which is +% \field{booktitle} if that is nonempty and \field{title} otherwise. Example: +% \code{2d~ed., 2~vols. in 1~book} \\ + +% editor & \\ + +% & NOTE all f* and o* fields are only going to apply +% to \entry{book}, \entry{incollection}, \entry{inbook} entries. +% FIX: check -- booklet? etc. \\ + +% faddress & Address of publisher of first-published edition. Not used unless +% \field{fyear} is nonempty. \\ + +% flanguage & Language of first-published edition. Not used unless +% \field{translator} or \field{fyear} is nonempty. \\ + +% fpublisher & Publisher of first-published edition. Not used unless \field{fyear} +% is nonempty. \\ + +% ftitle & Title of first-published edition (probably in \field{flanguage}). Not +% used unless \field{fyear} is nonempty. \\ + +% fyear & Publication date of first-published edition. \\ + +% howpublished & \\ + +% illustrator & For \entry{book} entries only. When the author or editor +% illustrates, use a construction like \code{{the editor} and others}. \\ + +% institution & For thesis entries only. FIX check \\ + +% journal & For \entry{article} entries only. \\ + +% key & often default with empty author, editor, organization \\ + +% month & For \entry{journal} entries, also season, e.g., Winter \\ + +% note & Begins its own block, so capitalize. Concluding puctuation is +% supplied automatically if not given in the field. \\ + +% number & For \entry{journal} entry, number of the journal (if no \field{volume}) or +% number within the volume. For \entry{book} entry, number of the book in the +% \field{series}. Makes sense only when \field{series} is a series rather than the title +% of a multivolume work. \\ + +% oaddress & For a reprint, address of ORIGINAL publisher. \\ + +% opublisher & For a reprint, publisher of ORIGINAL edition. A nonempty +% value implies the cited edition IS a reprint (and so must have \field{oyear}). \\ + +% organization & \\ + +% oyear & For a reprint, publication date of ORIGINAL edition A nonempty +% value implies the cited edition IS a reprint (and so OUGHT TO have +% \field{opublisher}). The value will almost always differ from \field{year}. \\ + +% pages & \\ + +% publisher & Publisher of the cited edition. \\ + +% school & \\ + +% series & Series to which \field{title} belongs, or title of a multivolume work +% where the volumes have their own titles given in \field{booktitle} or \field{title}. \\ + +% seriesedition & Edition information to be given after \field{series}. Makes +% sense only when \field{series} is the title of a multivolume work with titled +% volumes. In the entry for the multivolume work, that is, when \field{series} +% and \field{title} are identical, use \field{seriesedition} not +% \field{edition}. See also \field{edition}. Consequence of disobeying last is +% when references are less than min-crossrefs (i.e., no separate entry for the +% multivolume work) you get the edition information for the multivolume work +% appearing after the title of the component volume. Note: you can't really +% get away with putting a series editor here. I think you'd have to use the +% \field{note} field for that; or we could make yet another field. \\ + +% title & \\ + +% translator & For \entry{book} entries only, the translator(s). See also +% \field{flanguage}. When the author or editor translates, use a construction like +% \code{{the editor} and others}. \\ + +% type & For \entry{inbook} entries, the value overrides \code{Chapter}. When +% \field{type} is empty you get \code{Chapter~ of}. FIX: CHECK: For *-thesis +% entries, gives thesis-type word, e.g. \code{Master's Thesis}. \\ + +% volume & For \entry{journal} entry, it's volume. For \entry{book} entry, its number in +% the \field{series}, or its volume number in a multivolume book. \\ + +% year & Year of publication of cited edition, whether a reprint or not. \\ + +% yearcomp & Year work composed. For \entry{book} entry only (so far).\\ +% \end{longtable} +% \MakeShortVerb{\|} +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% Version information: +% \begin{macrocode}^^A Keep the /^ %% \def\file.../ beginning exact! + + %% A BibTeX bibliography style + %% conforming to the Chicago Manual's A style + %% but with B style author-date citations + %% by Matt Swift + %% + %% \def\fileinfo{A Chicago Manual BibTeX style} + %% \def\DoXPackageS {longtable} + %% \def\initelyHavECitationS {} + %% \def\fileversion{v1} + %% \def\filedate{2001/08/31} + %% \def\docdate{2001/08/31} + %% + +% \end{macrocode} +% +% \section{Implementation} +% \subsection{Define fields and variables} +% +% \subsubsection{Global variables} +% +% \gvar{output.state} will have one of the four scalar values +% \gvar{before.all}, \gvar{mid.sentence}, \gvar{after.sentence}, and +% \gvar{after.block}, telling us where we are in producing the entry. +% +% \bst{Achicago} uses only \term{blocks}, not \term{sentences}, to delimit +% units in the bibentry (some other bibstyles use both). The +% \package{achicago} package defines \cs\newblock to add a very small and +% rubber amount of horizontal space, relaxing somewhat the \cs\frenchspacing in +% effect. I have not removed the programming structures that distinguish +% sentences and blocks, but I have not concerned myself with them either; +% anyone wishing to revise this style to begin using them should check their +% work carefully. +% \begin{macrocode} +INTEGERS { output.state before.all mid.sentence after.sentence after.block } +% \end{macrocode} +% +% The entry variable \evar{principal-type} will have one of the five scalar +% values \gvar{author.ptype}, \gvar{editor.ptype}, \gvar{organization.ptype}, +% \gvar{key.ptype}, and \gvar{emergency.ptype}, telling us what type of +% information is in the principal field. See also the discussion of +% \function{key.special.p}. +% \begin{macrocode} +INTEGERS { author.ptype editor.ptype organization.ptype key.ptype + emergency.ptype } +% \end{macrocode} +% +% These are used during the forward and reverse passes to hold information +% about the previously-processed record. +% \begin{macrocode} +INTEGERS { last.year.tag.num } +STRINGS { last.leaditem last.label.and.year following.year.label.tag } +% \end{macrocode} +% +% These variables are used locally within various functions or function groups, +% where their particular use is documented. +% +% \todo{document which if any are used in a nonlocal way} +% +% \caveat{Suspect a conflict among these scratch variables if a strange problem +% occurs! I think \gvar{u} is the only one that will hold its value past an +% \function{output}.} +% \begin{macrocode} +INTEGERS { j nameptr namesleft numnames len } +STRINGS { s t u v w } +% \end{macrocode} +% +% \subsubsection{Bibfields} +% The list of fields that will be examined in database records, if they exist. +% Fields in the \ext{bib} database not on this list will be ignored. Not every +% entry type makes use of every field. Each entry type function below lists +% its required, optional, and ignored fields. Expected use of these fields is +% documented above in the user documentation. +% \begin{macrocode} +ENTRY + { address + annotation + author + bookauthor + booktitle + chapter + edition + editor + faddress + flanguage + fpublisher + ftitle + fyear + howpublished + illustrator + institution + journal + key + month + note + number + oaddress + opublisher + organization + oyear + pages + publisher + school + series + seriesedition + title + translator + type + volume + year + yearcomp + } +% \end{macrocode} +% +% Entry variables have a per-record value but are not initialized from a field. +% +% The integer \evar{principal-type} will contain one of the scalars +% \gvar{author.ptype}, \gvar{editor.ptype}, etc.\ (see their declarations above +% for further information). \evar{principal-type} is set in the function +% \function{set.principal-field.principal-type}. +% \begin{macrocode} + { principal-type } +% \end{macrocode} +% +% The strings \evar{label}, \evar{year.label} and \evar{year.label.tag} are +% used to construct the citation (the running text at the location of the +% user's \cs\cite command). In most cases, \evar{label} will contain a string +% derived from the \evar{principal-field} (see \function{make.label}). +% \begin{macrocode} + { label +% \end{macrocode} +% +% \evar{year.label} will contain a string representing the date. It's not +% necessarily the same as \field{year} (see \function{make.year.label}). +% \evar{year.label.tag} will either be empty or be a lower-case letter, as +% determined in the forward and reverse passes. +% \begin{macrocode} + year.label year.label.tag +% \end{macrocode} +% +% \evar{principal-field} will contain one of the fields, depending on entry +% type and what fields are nonempty (see +% \function{set.principal-field.principal-type}). +% +% In most cases, \evar{leaditem} will contain the \evar{principal-field} +% properly formatted for apearance at the beginning of the bibliography entry +% (see \function{make.leaditem}). When it is identical to the previous entry's +% \evar{leaditem}, it will be wrapped in \cs\SCduplicate by the forward and +% reverse passes. +% \begin{macrocode} + principal-field + leaditem +} +% \end{macrocode} +% +% \subsection{Define macros} +% +% These are macro abbreviations required by convention in every bibstyle. The +% user can redefine them with \texttt{@STRING} declarations in the \ext{bib} +% database. +% \begin{macrocode} +MACRO {jan} {"January"} +MACRO {feb} {"February"} +MACRO {mar} {"March"} +MACRO {apr} {"April"} +MACRO {may} {"May"} +MACRO {jun} {"June"} +MACRO {jul} {"July"} +MACRO {aug} {"August"} +MACRO {sep} {"September"} +MACRO {oct} {"October"} +MACRO {nov} {"November"} +MACRO {dec} {"December"} +% \end{macrocode} +% +% \subsection{Debugging functions} +% +% \begin{macro}{debugval} +% \begin{macro}{debugmsg} +% \mbox{} +% \begin{macrocode} +FUNCTION {debugval} +{ ": [" * + swap$ * %$ + "] in " * cite$ * %$ + top$ %$ +} + +FUNCTION {debugmsg} +{ " in " * cite$ * top$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Initialization functions} +% +% \begin{macro}{init.scalars} +% This should be called before any processing begins. +% \begin{macrocode} +FUNCTION {init.scalars} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + + #0 'author.ptype := + #1 'editor.ptype := + #2 'organization.ptype := + #3 'key.ptype := + #4 'emergency.ptype := +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Boolean logic} +% +% \begin{macro}{not} +% \begin{macro}{and} +% \begin{macro}{or} +% \mbox{} +% \begin{macrocode} +FUNCTION {not} +{ { #0 + } + { #1 + } + if$ %$ +} + +FUNCTION {and} +{ 'skip$ %$ + { pop$ %$ + #0 + } + if$ %$ +} + +FUNCTION {or} +{ { pop$ %$ + #1 + } + 'skip$ %$ + if$ %$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Constant functions} +% +% \begin{macro}{comma} +% \begin{macro}{period} +% \begin{macro}{hyphen} +% \begin{macro}{colon} +% \begin{macro}{space} +% \begin{macro}{delimiter.name-part} +% \begin{macro}{delimiter.name} +% \begin{macro}{delimiter.sub-sortkey} +% \begin{macro}{tie} +% \begin{macro}{etal} +% \begin{macro}{unidentified} +% These definitions are made so that later functions are easier to read and so +% that adapting this bibstyle to another language will be simpler. +% +% The reason these are functions not macros is so the user cannot change them. +% \begin{macrocode} +FUNCTION {comma} +{ "," +} + +FUNCTION {period} +{ "." +} + +FUNCTION {hyphen} +{ "-" +} + +FUNCTION {colon} +{ ":" +} + +FUNCTION {space} +{ " " +} + +FUNCTION {delimiter.name-part} +{ " " +} + +FUNCTION {delimiter.name} +{ " " +} + +FUNCTION {delimiter.sub-sortkey} +{ " " +} + +FUNCTION {tie} +{ "~" +} + +FUNCTION {etal} +{ " et~al." +} +% \end{macrocode} +% Below, we need to be able to set a string to a value which would never be +% generated from any string in a bibliography database. It's safe to assume +% that this string is such a one. +% \begin{macrocode} +FUNCTION {unidentified} +{ "HiGHlY*Peco@lIEr" +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Output functions} +% +% The \function{output} function automatically handles interunit punctuation. +% +% \function{output} should be called with a string and a punctuation mark on +% the stack. The punctuation mark is what should \emph{precede} the string in +% the case the string begins in the middle of a sentence. Strings which begin +% sentences are preceded by periods. Strings which begin a new block are +% preceded by periods and the \cs\newblock command. (It makes no sense for a +% string to begin at the end of a sentence.) +% +% Calls to \function{output.internal} leave the string on the stack until the +% next time \function{output.internal} is called, when it will get written. +% The function \function{output.begin} puts an empty string on the stack, and +% should be called before beginning any series of calls to \function{output}. +% \function{output.end} cleans up and should be called at the conclusion of a +% series of calls to \function{output}. +% +% \begin{macro}{output.begin} +% Prepare for a series of calls to \function{output}. Put an empty string on the +% stack and set \gvar{output.state} to \gvar{before.all}. +% \begin{macrocode} +FUNCTION{output.begin} +{ "" + before.all 'output.state := +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{output.end} +% Conclude a series of calls to \function{output}. Simply calls \builtin{write}. +% \begin{macrocode} +FUNCTION {output.end} +{ write$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{new.block} +% Begin a new block. +% \begin{macrocode} +FUNCTION {new.block} +{ output.state before.all = + 'skip$ %$ + { after.block 'output.state := + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{new.sentence} +% Begin a new sentence. FIX: hmm, wouldn't we want to put a TeX command here +% for intersentence space now? Why do we mess with the usual spacefactor for +% periods anyway? When in bibliogrphies are the usual TeX rules not going to +% be what we want, and give too much space after a period? answer: when a +% lowercase letter followed by period, in e.g. sec. 2 and so on. often +% bibstyle will put tie there, but sometimes not I think, so need to have that +% be not an intersentence space. well, if i start using sentences instead of +% blocks, I think perhaps doing the same hskip after a sentence with a new +% command \cs\newsentence perhaps as in \cs\newblock would be the right thing +% to do. +% \begin{macrocode} +FUNCTION {new.sentence} +{ output.state before.all = output.state after.block = or + 'skip$ %$ + { after.sentence 'output.state := + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{output.internal} +% \cs\stack{punct string/entry(nonnull)}{null} +% \begin{macrocode} +FUNCTION {output.internal} +{ 's := % s := string/entry(nonnull) + space * 't := % t := punctuation + space + output.state mid.sentence = + { t * write$ %$ + } + { output.state after.block = + { add.period$ write$ + newline$ %$ + "\newblock " write$ %$ + } + { output.state before.all = + 'write$ %$ +% \end{macrocode} +% Final case is \gvar{output.state} = `after.sentence', which means we just add a +% period, but no newline or \cs\newblock command. +% \begin{macrocode} + { add.period$ space * write$ + } + if$ %$ + } + if$ %$ +% \end{macrocode} +% We are now mid-sentence, whether we were before or not. +% \begin{macrocode} + mid.sentence 'output.state := + } + if$ %$ +% \end{macrocode} +% The actual string given to `output.internal' is left on the stack here for +% next time we call `output.internal' or `output.end', whichever comes next. +% \begin{macrocode} + s +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{output} +% \cs\stack{string/entry punct}{either null OR punct string/entry(nonnull)} +% +% Check if string/entry is null. If it's null do nothing. If it's nonempty +% call \function{output.internal} on it with the given punctuation. +% \begin{macrocode} +FUNCTION {output} +{ swap$ duplicate$ empty$ + { pop$ + pop$ %$ + } + 'output.internal + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{output.bibitem} +% The optional argument to \cs\bibitem will be made the definition of +% \cname{b@foo} where |foo| is the \builtin{cite} key. \cname{b@foo} will be +% executed by all the various citing commands with a definition of \cs\SCcite +% that is appropriate to each citing command. +% +% The \env{thebibliography} environment actually ignores the optional argument +% to \cs\bibitem. The environment sets the formatting so that the first part +% of the main entry hangs out to the left and looks like a label. +% +% The unexpandable protection is necessary, instead of a simple protection, in +% order to work with \package{newclude}'s \option{tag} option. +% +% I guess we use \builtin{write} for each part instead of catenating them and using a +% single \builtin{write} in case the catenation gets longer than \BibTeX{} can +% handle. I don't know, this is how I found it. It seems like catenation and +% a single call to \builtin{write} would be faster. FIX. +% \begin{macrocode} +FUNCTION {output.bibitem} +{ newline$ %$ + "\bibitem[\UnexpandableProtect\SCcite{" write$ %$ + label write$ %$ + "}{" write$ %$ + year.label year.label.tag * write$ %$ + "}]{" write$ %$ + cite$ write$ + "}" write$ %$ + newline$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Simple auxiliary functions} +% +% \begin{macro}{field.or.null} +% \cs\stack{field literal}{field contents or null string if the field was +% missing} +% \begin{macrocode} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ %$ + "" + } + 'skip$ %$ + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{italicize} +% \cs\stack{string or entry}{string} +% +% Italicize the top string on the stack and provide italic corrections. Null +% goes to null. We want to explicitly italicize rather than use \cs\emph, +% since semantic emphasis might be indicated in some other way in the document, +% e.g., slanted type. +% \begin{macrocode} +FUNCTION {italicize} +{ duplicate$ empty$ + { pop$ %$ + "" + } + { "\textitswitch{" swap$ * "}" * %$ + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{parenthesize} +% \cs\stack{string-or-entry:S}{"(" + S + ")"} +% \begin{macrocode} +FUNCTION {parenthesize} +{ duplicate$ empty$ + { pop$ %$ + "" + } + { "(" swap$ * ")" * %$ + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{format.clip} +% \cs\stack{string}{string} FIX: the difference between \builtin{entry.max} and +% \builtin{global.max}: max for an entry string, max for a global string. +% +% \begin{macro}{format.clip} +% \cs\stack{string-S}{string-S-possibly-shortened} +% +% Clips a string down to the smaller of \builtin{entry.max} and \builtin{global.max}. +% \begin{macrocode} +FUNCTION {format.clip} +{ #1 entry.max$ substring$ + #1 global.max$ substring$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{format.sortify.clip} +% \builtin{purify}, downcase, and clip a string on the stack. +% \cs\stack{\meta{string}}{\meta{string}} +% \begin{macrocode} +FUNCTION {format.sortify.clip} +{ % duplicate$ "sinful" debugval %$ + purify$ %$ +% duplicate$ " pure" debugval %$ + "l" change.case$ %$ + format.clip +% duplicate$ "humble" debugval %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{check.empty} +% \cs\stack{S warning}{S} +% Issues warning if the string is empty. +% \begin{macrocode} +FUNCTION {check.empty} +{ 't := + duplicate$ empty$ + { "empty " t * " in " * cite$ * warning$ + } + 'skip$ %$ + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{multipage.p} +% \cs\stack{nothing}{\#0 or \#1} +% +% Set \gvar{t} to \field{pages}. Look at \gvar{t} character by character for a +% hyphen, comma, or plus. If we find one, return true immediately; else return +% false. +% \begin{macrocode} +FUNCTION {multipage.p} +{ pages 't := + #0 'j := + % WHILE + { j not + t empty$ not %$ + and + } + { t #1 #1 substring$ %$ + duplicate$ hyphen = %$ + swap$ duplicate$ comma = + swap$ "+" = %$ + or + or + { #1 'j := + } + { t #2 global.max$ substring$ 't := + } + if$ + } + while$ + j +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{format.n.dashify} +% \cs\stack{string}{string} +% +% Make single-dashes into double-dashes. +% \begin{macrocode} +FUNCTION {format.n.dashify} +{ 't := + "" + % WHILE + { t empty$ not } %$ + { t #1 #1 substring$ hyphen = %$ + { t #1 #2 substring$ "--" = not %$ + { "--" * + t #2 global.max$ substring$ 't := + } + { % WHILE + { t #1 #1 substring$ hyphen = } %$ + { hyphen * + t #2 global.max$ substring$ 't := + } + while$ %$ + } + if$ %$ + } + { t #1 #1 substring$ * %$ + t #2 global.max$ substring$ 't := + } + if$ %$ + } + while$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{tie.or.space.connect} +% \cs\stack{string string}{string} +% +% If the second string has less than 5 characters, the two are tied together, +% otherwise they are catenated with a space between them. +% \begin{macrocode} +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #5 < + { tie + } + { space + } + if$ + swap$ * * +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{either.or.check} +% \cs\stack{msg field}{null} +% If field is not empty, give a warning appropriate for saying this field and +% an already-existing field can't be both used in the same entry. +% \begin{macrocode} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ + } + if$ +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Queue functions START FIXING DOX HERE} +% +% Queue functions expect a string on the stack. If it is empty, and the field +% for which the function is named is noempty, the string will be replaced with +% that field. (e.g., \function{author.q} will put \field{author} on the stack +% if \field{author} is nonempty and the \function{author.q} was passed an empty +% string). A chain of queue functions must begin with something on the stack, +% adn will leave the first nonempty field named in the chain on the stack. +% +% Queue functions also increment an integer variable, 'j, whenever they are +% passed an empty string. At the end of the queue, 'j tells us which function +% in the queue contributed the string that results at the end of the queue, +% starting with zero for the first queue function after \function{start.a.q}. +% In order for this to work, queue functions must always be called in the same +% order: \field{author} ('\#0') \field{editor} (`\#1'), \field{organization} +% (`\#2'), and \field{key} (`\#3'). For entry types where a certain field +% should not appear in the queue, use `blank.q' in its place in the order. +% +% The value of \gvar{j} is consulted when setting \evar{leaditem}, but not in +% other cases where queue functions are used +% +% \function{start.a.q} must begin a queue. It initializes \gvar{j} and passes +% an empty string to the first queue function. +% \begin{macro}{start.a.q} +% \begin{macrocode} +FUNCTION {start.a.q} +{ #-1 'j := + "" +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{inc.j} +% \begin{macro}{key.q} +% \begin{macro}{organization.q} +% \begin{macro}{editor.q} +% \begin{macro}{author.q} +% \begin{macro}{blank.q} +% \mbox{} +% \begin{macrocode} +FUNCTION {inc.j} +{ j #1 + 'j := +} + +FUNCTION {key.q} +{ duplicate$ empty$ + { pop$ %$ + key field.or.null + inc.j + } + 'skip$ %$ + if$ %$ +} + +FUNCTION {organization.q} +{ duplicate$ empty$ + { pop$ %$ + organization field.or.null + inc.j + } + 'skip$ %$ + if$ %$ +} + +FUNCTION {editor.q} +{ duplicate$ empty$ + { pop$ %$ + editor field.or.null + inc.j + } + 'skip$ %$ + if$ %$ +} + +FUNCTION {author.q} +{ duplicate$ empty$ + { pop$ %$ + author field.or.null + inc.j + } + 'skip$ %$ + if$ %$ +} + +FUNCTION {blank.q} +{ duplicate$ empty$ + 'inc.j + 'skip$ %$ + if$ %$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{check.q} +% \cs\stack{string-S warning-string}{string-S} +% +% This should be the final queue command, though it is not a true queue +% command, since an extra warning string should be on the top of the stack +% above the string that has passed along the queue. The warning string should +% be an English disjunctive list of the queue commands that have come before +% it, so the user can tell which fields are missing. For example ``author, +% organization, or key'' if the queue has been \function{author.q} 'blank.q' +% `organization.q' \function{key.q}. +% +% If the queue string is empty, \function{check.q} issues the warning and puts on the +% stack an emergency string of the \LaTeX{} key +% (i.e., \builtin{cite}), which should allow \BibTeX{} to proceed. +% \begin{macrocode} +FUNCTION {check.q} +{ 't := + duplicate$ empty$ + { pop$ %$ + cite$ format.clip 'u := %$ + "Need " t * " in " * cite$ * "; using: " * u * warning$ + u + inc.j + } + 'skip$ %$ + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Format functions dox} +% +% The format functions modify a string on the stack. They make no warnings, +% produce no output, and place no spaces or punctuation before or after their +% string, just modify it somehow. +% +% \subsection{Format names functions} +% +% \begin{macro}{format.names.for.label} +% Format string on stack it to produce something appropriate for \evar{label}. +% +% Comma usage examples in the \manual: ``A et al.''\ and ``A, B, et al.'' +% +% The \manual recommends for labels: use up to 3 names, and above 3 use 1st + +% etal. When this would lead to ambiguity, use one of 3 solns: use all names, +% use as many as needed to disambiguate, or include a (short) title to +% disambiguate: (Zipursky et al., \textitswitch{Brief Title}, 1988). +% +% The \manual does not appear to distinguish between ``et al.''\ and ``and +% others''. It's possible to change the logic here to distinguish between the +% cases where the bibstyle is truncating the list of authors, and the case +% where ``and others'' appears in the \ext{bib} file. But I'm not doing that +% now. +% +% Labels: +% \begin{center} +% \begin{tabular}{ll}%% FIX: this stuff not implemented yet +% 1 author & Foo \\ +% 2 authors & Foo and Bar \\ +% 3 authors & Foo, Bar, and Baz \\ +% 4+ authors & Foo et al. \\ +% 1+ author ``and others'' & Foo et al. \\ +%^^A FIX? 1 author ``and others'' & Foo et al. \\ +%^^A 2 authors ``and others'' & Foo, Bar, et al. \\ +% \end{tabular} +% \end{center} +% +% This function is probably more general than it needs to be, but it's a nice model. +% \begin{macrocode} +FUNCTION {format.names.for.label} +{ 's := + s num.names$ 'numnames := %$ + s #1 "{vv~}{ll}" format.name$ %$ + s numnames "{ff}{vv}{ll}{jj}" format.name$ "others" = %$ + numnames #3 > + or + % more than 3 names, or final name is "others" + { etal * + } + { numnames #1 - 'namesleft := + #2 'nameptr := + % WHILE + { namesleft #0 > } + { nameptr numnames = + % we're on the final name (and it's not "others") + { numnames #2 > + { comma * + } + 'skip$ %$ + if$ %$ + " and " * s nameptr "{vv~}{ll}" format.name$ * %$ + } + % we're not on the final name (in this case: 2d of 3 names) + { comma * space * + s nameptr "{vv~}{ll}" format.name$ * %$ + } + if$ %$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ %$ + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{format.names.lastfirst} +% Pop a string containing a name list. Push a string with the first author +% last-name-first and subsequent authors first-name-first. +% \begin{macrocode} +FUNCTION {format.names.lastfirst} +{ 's := + s num.names$ 'numnames := % numnames = num.name$(s); + numnames 'namesleft := + #1 'nameptr := % nameptr = 1; + % WHILE + { namesleft #0 > } + { nameptr #1 = + { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ %$ + } + { comma * + s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := %$ + nameptr numnames = + % final name + { t "others" = + { etal * + } + { " and " * t * + } + if$ %$ + } + % names both precede and follow this name + { space * t * + } + if$ %$ + } + if$ %$ + nameptr #1 + 'nameptr := % nameptr += 1; + namesleft #1 - 'namesleft := % namesleft =- 1; + } + while$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{format.names.firstfirst} +% Same as \function{format.names.lastfirst} but all names are first name first. +% \begin{macrocode} +FUNCTION {format.names.firstfirst} +{ 's := + s num.names$ 'numnames := % numnames = num.name$(s); + numnames 'namesleft := + #1 'nameptr := % nameptr = 1; + % WHILE + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := %$ + nameptr #1 = + 't + { nameptr numnames = + % final name + { numnames #2 > + { comma * + } + 'skip$ %$ + if$ %$ + t "others" = + { etal * + } + { " and " * t * + } + if$ %$ + } + % names both precede and follow this name + { comma * space * t * + } + if$ %$ + } + if$ %$ + nameptr #1 + 'nameptr := % nameptr += 1; + namesleft #1 - 'namesleft := % namesleft =- 1; + } + while$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Make functions} +% +% Make functions expect nothing on the stack, and leave one string there. Any +% side effects of setting global variables are noted in the comments. If a +% nonempty string cannot be made due to lack of the right fields, leave an +% empty one on the stack. +% +% \begin{macro}{make.annotation} +% Annotations can be omitted by nullifying the \env{SCannotation} environment. +% \begin{macrocode} +FUNCTION {make.annotation} +{ annotation empty$ %$ + { "" + } + { "\begin{SCannotation}" + annotation * + "\end{SCannotation}" * + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.edition} +% We use some logic here because we want to use the \field{seriesedition} for the +% \field{edition} in certain cases. +% \begin{macrocode} +FUNCTION {make.edition} +{ edition empty$ %$ + { seriesedition empty$ not series field.or.null title field.or.null = and %$ + { seriesedition + } + { "" + } + if$ %$ + } + { edition + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.year.month} +% \begin{macro}{make.year.nomonth} +% Make a year string. We don't we use \evar{year.label} because that string is +% sterilized to make it appropriate for use in running text in citations (and +% for sorting I think); in the bibliography entry, we can be a little more +% lax, accepting special characters, and text that is not simply four +% numerals. +% \begin{macrocode} +FUNCTION {make.year.month} + { year empty$ %$ + { "" + } + { year year.label.tag * + month empty$ %$ + 'skip$ %$ + { comma * space * month * + } + if$ %$ + } + if$ %$ +} +FUNCTION {make.year.nomonth} +{ year empty$ %$ + { "" + } + { year year.label.tag * + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{make.year.or.oyear.month} +% Push a string with year information. If \field{oyear} is empty, call +% \function{make.year.month}. Warn in the almost-certainly-erroneous case of +% an \field{oyear} without a \field{year}. +% \begin{macrocode} +FUNCTION {make.year.or.oyear.month} +{ oyear empty$ %$ + { make.year.month + } + { year empty$ %$ + { "oyear without year in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + oyear year.label.tag * + month empty$ %$ + 'skip$ %$ + { comma * space * month * + } + if$ %$ + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.leaditem.with.tags} +% Push \evar{leaditem} and if it's an editor, include a nice taggy. +% \begin{macrocode} +FUNCTION {make.leaditem.with.tags} +{ leaditem + principal-type editor.ptype = + { editor num.names$ #1 > %$ + { ",~eds." * + } + { ",~ed." * + } + if$ %$ + } + 'skip$ %$ + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.editors.secondary} +% Give editors' names when not for the leaditem. +% \begin{macrocode} +FUNCTION {make.editors.secondary} +{ editor empty$ %$ + { "" + } + { output.state after.sentence = + output.state after.block = or + { "E" + } + { "e" + } + if$ %$ + "dited by " * editor format.names.firstfirst * + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.bookauthors.secondary} +% This is for making authors' names that follow a title. When we use this, we +% are only going to be interested in the \field{bookauthor}. +% \begin{macrocode} +FUNCTION {make.bookauthors.secondary} +{ bookauthor empty$ %$ + { "" + } + { output.state after.sentence = + output.state after.block = + or + { "B" + } + { "b" + } + if$ %$ + "y " * bookauthor format.names.firstfirst * + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.translators} +% \begin{macro}{make.illustrators} +% Translators and illustrators are always secondary, until I write some extensions. +% \begin{macrocode} +FUNCTION {make.translators} +{ translator empty$ %$ + { "" + } + { output.state after.sentence = + output.state after.block = + or + { "T" + } + { "t" + } + if$ %$ + "ranslated " * + flanguage empty$ %$ + 'skip$ %$ + { "from the " * flanguage * space * + } + if$ %$ + "by " * translator format.names.firstfirst * + } + if$ %$ +} + +FUNCTION {make.illustrators} +{ illustrator empty$ %$ + { "" + } + { output.state after.sentence = + output.state after.block = + or + { "I" + } + { "i" + } + if$ %$ + "llustrated by " * illustrator format.names.firstfirst * + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{make.booktitle.ital} +% \begin{macro}{make.title.ital} +% \begin{macro}{make.as.ftitle.ital} +% FIX: multilingual +% \begin{macrocode} +FUNCTION {make.title.ital} +{ title field.or.null italicize +} + +FUNCTION {make.booktitle.ital} +{ booktitle field.or.null italicize +} + +FUNCTION {make.as.ftitle.ital} +{ ftitle empty$ %$ + { "" + } + { "as " ftitle italicize * + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{make.title.inquotes} +% Put the title in quotes on the stack. \cs\Wrapquotes is going to properly +% handle punctuation that follows the closing quotation marks by sucking it +% inside the quotes. FIX: make generic function format.wrapquotes? like +% format.emphasize? FIX: make all those function that transform a string on +% the stack into ``format'' functions. +% \begin{macrocode} +FUNCTION {make.title.inquotes} +{ title empty$ %$ + { "" + } + { + "\Wrapquotes{" title * "}" * + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +FUNCTION {make.pages} +{ pages empty$ %$ + { "" + } + { pages format.n.dashify + } + if$ %$ +} +% \end{macrocode} +% +% \begin{macro}{make.vol.series.num.month.pages} +% +% For articles, the number of cases to handle these fields is very large: 32 to +% do it properly! These cases could perhaps be collapsed, but it is going to +% be much easier to read here and to maintain if we do it brutishly by +% elaborating each case. The only exception I've made is when two adjacent +% leaves are very similar. The way I've laid out this funciton here, adjacent +% leaves are going to be the pairs of cases with and without a nonempty +% \field{pages}. +% +% There are 5 relevant fields, each of which can be empty or not ($2^5 = +% 32$). In the comments below, I mark each case with a series of 1 to 5 letters +% represent the cases where that field is nonempty: |V| for \field{volume}, |S| +% for \field{series}, |N| for \field{number}, |M| for \field{month}, and |P| +% for \field{pages}. Thus, the case marked with the comment |SMP| is the one +% where the \field{series}, \field{month}, and \field{pages} fields are +% nonempty, and \field{volume} and \field{number} are empty. +% +% FIX: when I use \function{make.pages} in this function, it's slightly inefficient, +% since \function{make.pages} does a check for empty pages which is unnecessary here. +% +% FIX: this does not yet handle entries with nonempty \field{series}. +% +% FIX: go through and combine adjacent leaves. +% +% We could really put the punctuation that should precede this unit right at +% the beginning of the string we're making here, but let's conform better to +% the conventions and put this in the scratch variable 'u instead. I don't +% think this function will ever get called at any time other than mid-sentence, +% after the journal title, but who knows. So a call to this function should +% look like: +% \begin{codeexample} +% make.vol.series.num.month.pages u output +% \end{codeexample} +% Remember that when \function{output.internal} writes the punctuation, it adds a space +% following, so it is unnecessary to begin the string this function returns +% with a space. (Occasionally below, we want (and produce) a colon followed by +% no space; we can do this because we are directly creating this string, not +% using the \function{output} routine.) +% \begin{macrocode} +FUNCTION {make.vol.series.num.month.pages} +{ volume empty$ %$ + { series empty$ %$ + { number empty$ %$ + { month empty$ %$ + { pages empty$ %$ + % none of VSNMP + { space 'u := + "" + } + % P + { comma 'u := + multipage.p + { "pp." pages format.n.dashify + } + { "p." pages + } + if$ %$ + tie.or.space.connect + } + if$ %$ + } + { pages empty$ %$ + % M + { comma 'u := + month + } + % MP + { comma 'u := + month comma * space * make.pages * + } + if$ %$ + } + if$ %$ + } + { month empty$ %$ + { pages empty$ %$ + % N + { comma 'u := + "no." number tie.or.space.connect + } + % NP + { comma 'u := + "no." number colon * make.pages * tie.or.space.connect + } + if$ %$ + } + { pages empty$ %$ + % NM + { comma 'u := + "no." number tie.or.space.connect + space * month parenthesize * + } + % NMP + { comma 'u := + "no." number tie.or.space.connect + space * month parenthesize * + colon * space * make.pages * + } + if$ %$ + } + if$ %$ + } + if$ %$ + } + { number empty$ %$ + { month empty$ %$ + { pages empty$ %$ + % S + { + } + % SP + { + } + if$ %$ + } + { pages empty$ %$ + % SM + { + } + % SMP + { + } + if$ %$ + } + if$ %$ + } + { month empty$ %$ + { pages empty$ %$ + % SN + { + } + % SNP + { + } + if$ %$ + } + { pages empty$ %$ + % SNP + { + } + % SNMP + { + } + if$ %$ + } + if$ %$ + } + if$ %$ + } + if$ %$ + } + { series empty$ %$ + { number empty$ %$ + { month empty$ %$ + { pages empty$ %$ + % V + { comma 'u := + "vol." volume tie.or.space.connect + } + % VP + { space 'u := + volume colon * make.pages * + } + if$ %$ + } + { pages empty$ %$ + % VM + { comma 'u := + "vol." volume tie.or.space.connect + space * month parenthesize * + } + % VMP + { space 'u := + volume space * + month parenthesize * colon * space * make.pages * + } + if$ %$ + } + if$ %$ + } + { month empty$ %$ + { pages empty$ %$ + % VN + { space 'u := + volume ", no." number tie.or.space.connect * + } + % VNP + { space 'u := + volume space * + number parenthesize * colon * space * make.pages * + } + if$ %$ + } + { pages empty$ %$ + % VNM + { space 'u := + volume ", no." number tie.or.space.connect * + space * month parenthesize * + } + % VNMP + { space 'u := + volume space * number parenthesize * colon * space * + make.pages * space * month parenthesize * + } + if$ %$ + } + if$ %$ + } + if$ %$ + } + { number empty$ %$ + { month empty$ %$ + { pages empty$ %$ + % VS + { + } + % VSP + { + } + if$ %$ + } + { pages empty$ %$ + % VSM + { + } + % VSMP + { + } + if$ %$ + } + if$ %$ + } + { month empty$ %$ + { pages empty$ %$ + % VSN + { + } + % VSNP + { + } + if$ %$ + } + { pages empty$ %$ + % VSNM + { + } + % VSNMP + { + } + if$ %$ + } + if$ %$ + } + if$ %$ + } + if$ %$ + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.crossref} +% \begin{macrocode} +FUNCTION {make.crossref} +{ "\citeNP{" crossref * "}" * +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{output.series.number} +% Outputs the number with appropriate capitalization. Warns if we also have +% nonempty \field{seriesedition}. +% \begin{macrocode} +FUNCTION {output.series.number} +{ series empty$ %$ + { number empty$ %$ + { "" + } + { "Can't use `number' without `series' in " cite$ * warning$ + "" + } + if$ %$ + } + { number empty$ %$ + { series + seriesedition empty$ %$ + 'skip$ %$ + { comma output + new.block + seriesedition + } + if$ %$ + } + { series space * + "no." * + number tie.or.space.connect + "number and seriesedition" seriesedition either.or.check + } + if$ %$ + } + if$ %$ + comma output +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{output.volume.series} +% The \field{series} is not required. FIX: why do we output stuff here? +% can't we use a make function like elsewhere? +% \begin{macrocode} +FUNCTION {output.volume.series} +{ volume empty$ %$ + { "" + } + { "Volume" volume tie.or.space.connect + series empty$ %$ + 'skip$ %$ + { " of " * series italicize * + seriesedition empty$ %$ + 'skip$ %$ + { comma output + new.block + seriesedition + } + if$ %$ + } + if$ %$ + "volume and number" number either.or.check + } + if$ %$ + comma output +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.chapter.of} +% To say for example ``Part 3'' instead of ``Chapter 3'', put ``Part'' into the +% \field{type} field, and the number and the preposition into the \field{chapter} field, +% e.g., ``3 of''. A tie is automatically put in between the \field{type} field +% and the \field{chapter} field in this case. We can't make a decision based on the +% length of the \field{chapter} field when it's going to contain the preposition. +% +% OK, putting the preposition in the chapter field doesn't work out when you do +% crossreferences. So let's try ``of'' as a general preposition. +% \begin{macrocode} +FUNCTION {make.chapter.of} +{ chapter empty$ %$ + { "" + } + { type empty$ %$ + { "Chapter" + } + { type "t" change.case$ %$ + } + if$ %$ + chapter tie.or.space.connect + " of " * + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.chapter} +% \begin{macrocode} +FUNCTION {make.chapter} +{ chapter empty$ %$ + { "" + } + { type empty$ %$ + { "Chapter" + } + { type "t" change.case$ %$ + } + if$ %$ + chapter tie.or.space.connect + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.number.tr} +% \mbox{} +% \begin{macrocode} +FUNCTION {make.number.tr} +{ type empty$ %$ + { "Technical Report" + } + { type "t" change.case$ %$ + } + if$ %$ + number empty$ %$ + 'skip$ %$ + { number tie.or.space.connect + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Label and principal field functions} +% +% \begin{macro}{calc.labels} +% \begin{macro}{set.principal-field.principal-type} +% Set \evar{label} and \evar{year.label} from the original +% database. Set \evar{leaditem}. For reference from above: \field{author} +% ('\#0') \field{editor} (`\#1'), \field{organization} (`\#2'), and +% \field{key} (`\#3'). +% +% FIX: NOTE: the entry-type functions (and specifically its subroutines like +% make.authors) are going to assume that bibentry contains the right field as +% calculated by +% +% format the string on the stack based on the GLOBAL (not entry) variable +% j (= bibentry.type) +%% +% confusion here over terminology. bibentry and leaditem are the same thing, +% but it is also the basis for calculating the label. +% let's call the most important field for each type the PRINCIPAL field. this +% will be put into the lead position in the bibentry and also be massaged into +% the label. +%% FIX: new idea, start using it +% leaves a string on the stack based on TYPE; the string is the first non-empty +% relevant field for the type, or an emergency substitution as supplied by +% \function{check.q}. FIX: end.the.q? would emergency be a 5th type that the +% format.principal-field functions should recognize? +% +% Yes, \function{check.q} will put full cite-string on as emergency and set +% \evar{principal-type} accordingly. +% +% FIX: ensure proper warnings if we are not getting something good in +% principal-field. +% +% \begin{macrocode} +FUNCTION {set.principal-field.principal-type} +{ type$ "book" = %$ + type$ "inbook" = %$ + or + { start.a.q + author.q + editor.q + blank.q + key.q + "author, editor, or key for entry type " type$ * check.q %$ + } + { type$ "proceedings" = %$ + { start.a.q + blank.q + editor.q + organization.q + key.q + "editor, organization, or key for entry type " type$ * check.q %$ + } + { type$ "manual" = %$ + { start.a.q + author.q + blank.q + organization.q + key.q + "author, organization, or key for entry type " type$ * check.q %$ + } + % for all other entry types + { start.a.q + author.q + blank.q + blank.q + key.q + "author or key for entry type " type$ * check.q %$ + } + if$ %$ + } + if$ %$ + } + if$ %$ + 'principal-field := + j 'principal-type := +} + +% TRUE if we've got \evar{principal-type} of \gvar{organization.ptype} and +% nonempty \field{key} and entry type of \entry{manual} or \entry{proceedings}. +FUNCTION {key.special.p} +{ type$ "manual" = %$ + type$ "proceedings" = %$ + or + principal-type organization.ptype = + and + key empty$ not %$ + and +} + +FUNCTION {make.leaditem} +{ key.special.p + % is \field{key} all-caps? + { key duplicate$ "u" change.case$ = + % if so, key is assumed to be an acronym FIX; should I warn what we're doing? + { key " (" * organization * ")" * + } + % if not, key is assumed to be an initial prefix (abbreviation) of organization + % for use only in the label + { organization + } + if$ %$ + } + { principal-field + principal-type author.ptype = + principal-type editor.ptype = + or + { format.names.lastfirst + } + % organization, key, or emergency ptype + 'skip$ %$ + if$ %$ + } + if$ %$ +} + +FUNCTION {make.label.from.principal-field} +{ principal-field + principal-type author.ptype = + principal-type editor.ptype = + or + { format.names.for.label + } + % organization, key, or emergency + 'skip$ %$ + if$ %$ +} + +FUNCTION {make.label} +{ key.special.p + { key + } + { make.label.from.principal-field + } + if$ %$ +} +% \end{macrocode} +% +% \begin{macro}{format.names.for.sort} +% \cs\stack{\meta{list of names}}{\meta{list of names suitable for sorting}} +% +% FIX: add dox here about how bibtex sorts, and the spaces strategy. +% +% \begin{tabular}{lp{1in}} +% 1 & between tokens of a name part (word-by-word method; only after first-name's initials +% in letter-by-letter) \\ +% 2 & between name-parts in a name (but consider `von' and `last' one name-part) \\ +% 3 & between names in a name list \\ +% 4 & between other sort levels, such as names and years \\ +% \end{tabular} +% We don't bother to \function{format.sortify.clip}, just do that once before assignment to +% the sort.key. +% +% \manual specifies all names should be given in the bibliography. FIX ref. +% So the \manual doesn't tell us how to handle the conventional ``and others'' +% that might be in the database. We handle it by proceeding on the assumption +% that ``and others'' always means the total names are more than 3, so we want +% to alphabetize these entries after all those with 1, 2, or~3 names. We do +% this by turning ``and others'' into a pseudo-name that will sort later than +% any real name (i.e., we insert a lot of z's). +% +% The commented-out format is doing word-by-word alphabetization as defined +% \manualref{17.97} with the exception of hyphens. \builtin{purify} turns +% hyphens into spaces, so hyphens are word boundaries, unlike slashes and +% apostrophes, which are suppressed. The \manual says hyphens should be +% supressed like slashes and apostrophes, so we need to remove them with +% \function{format.dehyphen} before we \builtin{purify}. +% +% The \manual prefers letter-by-letter alphabetization, which is what the +% active code below does. We suppress spaces between tokens of a name part. +% We need to remove hyphens as explained above. +% +% NOTE: We could therefore change our delimiters all down by one, since single space +% delimters are no longer used, but I think there is no harm in starting with a +% 2-space delimiter, and this lets us change back and forth easily. +% +% FIX: \manualref{17.100} names with initials in place of given names should +% precede those names which are spelled out. ``J. Robert'' before ``James N.'' +% and ``K. T.'' before ``Keven S.''. This is not consistent with the +% letter-by-letter method (it is with word-by-word). So, we want to insert a +% space after first-name tokens of length 1. How do we do that!? +% +% FIX: do we need special handling for names with Saint, Mac, Mc, and M' +% \manualref{17.107--109}? +% \begin{macrocode} + +% FIX: NOTE: \builtin{empty} returns TRUE if string contains no non-whitespace chars +% FIX: other whitespace to check for? + +% pop string, push its length not counting special chars as one char +FUNCTION {length} +{ 'u := +% u "taking length of" debugval + #0 'len := + % WHILE + { u "" = not } + { len #1 + 'len := + u #2 global.max$ substring$ 'u := + } + while$ %$ + len +% len int.to.str$ " length is" debugval %$ +} + + +% FIX: a special+ char begins with a |{\| and continues through the next |}|. +% \BibTeX{}'s ``special character'' is the same but only at brace level~0. +% When we're stepping through a string, and we don't keep track of the brace +% level, then those functions that recognize special chars are not going to +% know the brace level, they will see every special+ char as a special char. + +% pop string, push its first char counting special chars as one char +% treat braces normally unless they are the start of a special char +% +% don't use \function{and} here for efficiency +FUNCTION {head} +{ 'w := + w #1 #1 substring$ %$ + duplicate$ "{" = %$ + { w #2 #1 substring$ "\" = %$ + { pop$ %$ + w #1 text.prefix$ %$ + } + 'skip$ %$ + if$ %$ + } + 'skip$ %$ + if$ %$ +} + +% FIX: using `and' and `or' requires calculation of both where nested branches +% would not; see where this will help. + +% pop string, push string without its first char, counting special chars as one char +FUNCTION {behead} +{ 'u := +% u "beheading before" debugval + u + u head length #1 + + global.max$ %$ + substring$ %$ +% duplicate$ "beheading after" debugval %$ +} + +FUNCTION {behead.t} +{ t behead 't := +} + +FUNCTION {format.dehyphen} +{ 't := +% t "dehyphen before" debugval + "" + % WHILE + { t "" = not } + { t head + duplicate$ hyphen = %$ + { pop$ %$ + } + { * + } + if$ %$ + behead.t + } + while$ %$ +% duplicate$ "dehyphen after" debugval %$ +} + +% \builtin{text.length}: replace string on stack with its length, special chars count +% as 1 char, don't count braces. + +% \builtin{text.prefix}: like \builtin{substring} but count special chars as 1 char, don't +% count braces, and supply a missing closing brace for a special-char. also, +% have to always start at \#1. + +% FIX: does \manual intend to skip over en-dash and em-dash? these could occur +% in titles. For the moment I will remove them too, but not in special chars. +% look at \function{format.n.dashify} to be able to distinguish hyphens from +% the dashes. + +FUNCTION {format.dehyphen.dewhitespace} +{ 't := +% t "dehyphen.dewhitespace before" debugval + "" + % WHILE + { t "" = not } + { t head + duplicate$ %$ + duplicate$ hyphen = %$ + swap$ empty$ + or + { pop$ %$ + } + { * + } + if$ %$ + behead.t + } + while$ %$ +% duplicate$ "dehyphen.dewhitespace after" debugval %$ +} + +FUNCTION {format.names.for.sort} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := %$ + numnames 'namesleft := + % WHILE + { namesleft #0 > } + { + % NOTE: order or name-parts ought to follow that used for leaditem + % word-by-word alphabetization: +% s nameptr "{vv{ } }{ll{ }}{ jj{ }}{ ff{ }}" format.name$ %$ + % letter-by-letter alphabetization, no attention to initials: +% s nameptr "{vv{}}{ll{}}{ jj{}}{ ff{}}" format.name$ %$ + + % letter-by-letter alphabetization, with first initials exception: + + s nameptr "{vv{}}{ll{}}{ jj{}}" format.name$ %$ + + % Each first-name token of the form of an initial ("L.") will be followed by a + % space but other spaces will be removed. + + % Algorithm: step through looking for space, which terminates name tokens, + % adding non-spaces to an accumulator on the stack as we go. + % When we find a space, look at the accumulator (a whole name token). + % If it's length is 2 and 2d char is a period, we've got an initial, so + % add the space to the accumulator. If not, throw away the space + % and step on looking for another name. + + % FIX: would it be simpler to replace periods with spaces? + % would a period ever appear in a first-name when not an initial? + % Rev.? Col.? These should be alphabetized as spelled out, prob. + % but need to check \manual + +% duplicate$ "beginning of initials funniness; last-part is" debugval %$ + + s nameptr "{ff{ } }" format.name$ 't := %$ + % t is "F1 F2 F3 ... FN " or empty + +% t "initial t" debugval + + t empty$ %$ + 'skip$ %$ + { delimiter.name-part * + "" % accumulator + % WHILE + { t "" = not } + { t head +% duplicate$ "stepping. t is [" t * "] and head is" * debugval %$ + duplicate$ empty$ + % last char will always be a space + % accumulator contains whole name token + { pop$ %$ throw space away for now; top of stack is now accumulator +% duplicate$ "found a space; accumulator is" debugval %$ + duplicate$ %$ + duplicate$ text.length$ #2 = % 2 chars long + swap$ behead head period = %$ 2d char is period + and + % name token in accumulator is an initial, so add a space to it + { space * +% duplicate$ "found an initial" debugval %$ + } + % name token in accumulator is not an initial + 'skip$ %$ + if$ %$ + % in either case, concatenate the accumulator the name on the + % stack and initialize it again +% duplicate$ "adding to name" debugval %$ + * "" + } + % accumulator contains partial name token + % add t's head (not a space) to accumulator + { * + } + if$ %$ + behead.t + } + while$ %$ + % we always end up with an empty string on the stack + pop$ %$ +% duplicate$ "formatted first-name is" debugval %$ +% s nameptr "{ff}{vv}{ll}{jj}" format.name$ "it came from" debugval %$ + } + if$ %$ +% duplicate$ "end of initials funniness; stack has" debugval %$ + + format.dehyphen + 't := + % t now contains one name of a namelist + nameptr #1 = + { t + } + { delimiter.name * + nameptr numnames = + t "others" = + and + { "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" * + } + { t * + } + if$ %$ + } + if$ %$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ %$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% FIX: should be able to share code with \function{make.leaditem.with.tags} +% +% We don't bother to \function{format.sortify.clip}, just do that once before assignment to +% the \field{sort.key\$}. +% \begin{macrocode} +FUNCTION {make.principal-field.for.sort} % FIX: note: leaditem must already be set +{ principal-type author.ptype = + principal-type editor.ptype = + or + { principal-field format.names.for.sort + } + { principal-type emergency.ptype = + { principal-field + } + % organization.ptype, key.ptype, including both key.special cases + % leaditem is the same as principal-field except in the key.special + % cases, when we do want the leaditem not the principal-field + { leaditem + % letter-by-letter alphabetization: + format.dehyphen.dewhitespace + } + if$ %$ + } + if$ %$ +} +% \end{macrocode} +% +% \subsection{Begin and end entries} +% +% \begin{macro}{begin.entry} +% Begin an entry. +% \begin{macrocode} +FUNCTION {begin.entry} +{ output.begin + output.bibitem +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{finish.entry} +% Conclude an entry. +% \cs\stack{string}{null} +% \begin{macrocode} +FUNCTION {finish.entry} +{ add.period$ %$ + output.end + newline$ %$ + make.annotation write$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Entry types} +% +% \subsubsection{Article} +% +% \begin{macro}{article} +% An article from a journal or magazine. Required: \field{author}, +% \field{title}, \field{journal}, \field{year}. Optional: \field{volume}, +% \field{number}, \field{pages}, \field{month}, \field{note}. Title quoted. +% +% FIX: this is not true any more. hmm, which warnings to give? Warnings given +% for no \field{pages}; no \field{volume} or \field{number}; and \field{number} +% but no \field{volume}. It's a drag, but the latter warning should remain +% there. The reason is that this bibstyle will produce a very misleading entry +% if you mistakenly omit the volume and give a number for a journal. +% +% FIX: this is the old def of article, following output of title through end of +% crossref conditional. +% \begin{codeexample} +% volume field.or.null +% % \end{macrocode} +% % One item (the volume) is on the stack now. Each of the four cases in the +% % following conditionals should leave a second item on the stack. +% % \begin{macrocode} +% number empty$ %$ +% { volume empty$ %$ +% { "empty volume and number in " cite$ * warning$ +% "" +% } +% { colon +% } +% if$ %$ +% } +% { volume empty$ %$ +% { "number but no volume in " cite$ * warning$ +% % \end{macrocode} +% % FIX when a journal has no volume but a number, there should be a comma after +% % the journal, a space and then ``no. n:ppp''. But we have already said +% % ``space output'' after the journal name, no doubt. So we have to make this +% % decision earlier. +% % \begin{macrocode} +% "\unskip, no." tie * number * colon * +% } +% { "(" number * ")" * tie.or.space.connect +% % \end{macrocode} +% % FIX: I don't think this is handling the case without pages right -- there +% % will be a colon with nothing following. I could save either colon or +% % colon+space in a variable, and slap it on before the pages if there are pages +% % and leave it off if there are no pages. Hmm, no: see \manaul 15.215 +% % for how to handle missing pages. Not easy. +% % +% % Now there's just one item (the volume) on the stack, so leave the following +% % as the second item. +% % \begin{macrocode} +% colon space * +% } +% if$ +% } +% if$ * +% make.pages "pages" check.empty * +% space output +% month parenthesize space output +% \end{codeexample} +% +% A crossref from an article says ``See this, pages xxx.'' See \manual 16:107 +% for this peculiar bit about the spacing after the colon. +% \begin{macrocode} +FUNCTION {article} +{ begin.entry + make.leaditem.with.tags space output + new.block + make.year.nomonth "year" check.empty space output + new.block + make.title.inquotes "title" check.empty space output + new.block + crossref empty$ %$ + { journal italicize "journal" check.empty space output + series empty$ %$ + 'skip$ %$ +% \end{macrocode} +% FIX: take this out when we finish \function{make.vol.series}. +% \begin{macrocode} + { "Achicago can not yet handle nonempty series! in " cite$ * warning$ + } + if$ %$ + volume empty$ number empty$ month empty$ pages empty$ and and and + { "empty volume, number, month, and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ +% \end{macrocode} +% See definition of \function{make.vol.series.num.month.pages} for why we set +% \gvar{u} in that function. +% \begin{macrocode} + make.vol.series.num.month.pages u output + } +% \end{macrocode} +% Unusual case where you are probably citing one journal issue and numerous +% articles within it, so you have one entry for the issue itself, and others +% referring to it. Perhaps there are other cases, but I think what's right +% here is to give the crossref and only the pages. +% \begin{macrocode} + { "In " make.crossref * space output + make.pages "pages" check.empty comma output + } + if$ %$ + new.block + note space output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Book} +% +% \begin{macro}{book} +% \mbox{} +% \begin{macrocode} +FUNCTION {book} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.or.oyear.month "year" check.empty comma output + new.block + make.title.ital "title" check.empty comma output + new.block + make.edition comma output + new.block + crossref empty$ %$ + { volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + editor empty$ author empty$ or + 'skip$ %$ + { new.block + make.editors.secondary comma output + } + if$ %$ + new.block + make.translators comma output + new.block + make.illustrators comma output + new.block + oyear empty$ %$ + { address comma output + publisher "publisher" check.empty colon output + } + { oaddress comma output + opublisher "opublisher" check.empty colon output + new.block + "Reprint" comma output + address field.or.null comma output + publisher "publisher" check.empty + address empty$ %$ + { comma + } + { colon + } + if$ %$ + output + year "year" check.empty comma output + } + if$ %$ + } + { volume empty$ %$ + { "In " + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ %$ + make.crossref * comma output + } + if$ %$ + new.block + yearcomp empty$ %$ + 'skip$ %$ + { "Composed in " yearcomp * + comma output + new.block + } + if$ %$ +% \end{macrocode} +% The \field{fyear} must be nonempty to get any information about the first-published +% edition, +% +% The \field{fpublisher}, \field{faddress}, and \field{flanguage} can be empty in any +% combination. They are all ignored if \field{fyear} is empty, except for possibly +% \field{flanguage}, which will be given with the translator if \field{translator} is +% nonempty. +% \begin{macrocode} + fyear empty$ + 'skip$ + { "First published " + translator empty$ flanguage empty$ not and + { "in " * flanguage * space * + } + 'skip$ + if$ +% \end{macrocode} +% If \field{ftitle} is empty, there will be a harmless? extra space. +% FIX: surely i can fix that... +% \begin{macrocode} + make.as.ftitle.ital * space output + faddress empty$ fpublisher empty$ not and + { "by " + } + { "in " + } + if$ %$ + space output + faddress space output + fpublisher + faddress empty$ %$ + { space + } + { colon + } + if$ %$ + output + fyear + faddress empty$ fpublisher empty$ and + { space + } + { comma + } + if$ output %$ + new.block + } + if$ %$ + note comma output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Inbook} +% +% \begin{macro}{inbook} +% \manual doesn't seem to recognize parts of a book without their own titles. +% We make up our own version, moving the chapter and page information from the +% end of the \field{booktitle} to the beginning. +% \begin{macrocode} +FUNCTION {inbook} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.or.oyear.month "year" check.empty comma output + new.block +% \end{macrocode} +% We store an extra copy of \function{make.chapter.of} in the variable\gvar{u} here, so +% that we know whether to put pages or not after the \field{title} sentence +% (with editors, and so on). +% \begin{macrocode} + crossref empty$ %$ + { make.chapter.of + duplicate$ 'u := %$ + duplicate$ empty$ + { pop$ %$ + pages empty$ %$ + { "empty chapter, type, and pages in " cite$ * warning$ + "In " + } + { "Pages " make.pages * " in " * + } + if$ %$ + } + 'skip$ %$ + if$ %$ + comma output + make.title.ital "title" check.empty space output + make.bookauthors.secondary comma output + make.editors.secondary comma output + volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + make.edition comma output +% \end{macrocode} +% Here we branch again on the contents of \function{make.chapter.of}. If it is not +% empty, then we go ahead and \function{make.pages}. If it is empty we don't, because +% this means that if \field{pages} were given, they have already been put earlier. +% \begin{macrocode} + u empty$ %$ + 'skip$ %$ + { make.pages comma output + } + if$ %$ + new.block + make.translators comma output + new.block + make.illustrators comma output + new.block + oyear empty$ %$ + { address comma output + publisher "publisher" check.empty colon output + } + { oaddress comma output + opublisher "opublisher" check.empty colon output + new.block + "Reprint" comma output + address field.or.null comma output + publisher "publisher" check.empty + address empty$ %$ + { comma + } + { colon + } + if$ %$ + output + year "year" check.empty comma output + } + if$ %$ + } + % crossref not empty + { "In " make.crossref * comma output + make.chapter comma output + make.pages comma output + chapter empty$ pages empty$ and + { "empty chapter and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + } + if$ %$ + new.block + note comma output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Incollection} +% +% \begin{macro}{incollection} +% \mbox{} +% \begin{macrocode} +FUNCTION {incollection} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.or.oyear.month "year" check.empty space output + new.block +% FIX: use \field{type} to say what kind of title this is? e.g., play, poem, +% chapter, story? + make.title.inquotes "title" check.empty space output + new.block + crossref empty$ %$ + { make.chapter.of duplicate$ empty$ + { pop$ %$ + "In " + } + 'skip$ %$ + if$ %$ + space output + make.booktitle.ital "booktitle" check.empty space output + make.bookauthors.secondary comma output + make.editors.secondary comma output + volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + make.edition comma output +% FIX: do I need this? I don't for copleston:cusa +% make.year.or.oyear.month "year" check.empty comma output + make.pages comma output + chapter empty$ type empty$ and pages empty$ and %$ + { "empty chapter, type, and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + new.block + make.translators space output + new.block + make.illustrators space output + new.block + oyear empty$ %$ + { address space output + publisher "publisher" check.empty colon output + } + { oaddress space output + opublisher "opublisher" check.empty colon output + new.block + "Reprint" comma output + address comma output + publisher "publisher" check.empty + address empty$ %$ + { comma + } + { colon + } + if$ %$ + output + year comma output + } + if$ %$ + } + % crossref not empty + { new.block + "In " make.crossref * space output + make.chapter comma output + make.pages comma output + chapter empty$ pages empty$ and + { "empty chapter and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + } + if$ %$ + new.block + note space output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Majorthesis} +% +% \begin{macro}{format.thesis} +% \begin{macro}{thesis} +% \begin{macro}{phdthesis} +% \begin{macro}{mastersthesis} +% \begin{macro}{majorthesis} +% \begin{macro}{minorthesis} +% Theses are all set in the same way, with a different type name. An entry +% with entry type \entry{thesis} ought to have a nonempty \field{type}. The other four +% alias entry types simply supply an explicit value for \field{type}, which are +% overridden by a nonempty \field{type}. +% +% FIX The \field{type} field should be hooked into a variable and done with the +% \package{babel} package: \cs\majorthesisname and so on. +% \begin{macrocode} +FUNCTION {format.thesis} +{ 'v := + begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month "year" check.empty space output + new.block + make.title.inquotes "title" check.empty space output + new.block + v "type" check.empty space output + school "school" check.empty comma output + address comma output + new.block + note space output + finish.entry +} +FUNCTION {thesis} +{ type field.or.null format.thesis +} +FUNCTION{mastersthesis} +{ type empty$ %$ + { "Master's thesis" + } + { type + } + if$ %$ + format.thesis +} +FUNCTION {minorthesis} +{ mastersthesis +} +FUNCTION {phdthesis} +{ type empty$ %$ + { "Ph.D.~diss." + } + { type + } + if$ %$ + format.thesis +} +FUNCTION {majorthesis} +{ phdthesis +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Manual} +% +% \begin{macro}{manual} +% Technical documentation. Required: \field{title} (italicized). Optional: +% \field{author} or \field{organization} or \field{key}, \field{address}, +% \field{edition}, \field{month}, \field{year}, \field{note}. Logic: +% \evar{leaditem} is first nonempty field of \field{author}, +% \field{organization}, and \field{key}. Subsequent nonempty fields in that +% list are ignored. Special case: when \evar{principal-field} is +% \field{organization} and \field{key} is nonempty, use \field{key} for the +% label instead of \field{organization}. +% +% \begin{macrocode} +FUNCTION {manual} +{ begin.entry + make.leaditem.with.tags space output + new.block + make.year.month space output + new.block + make.title.ital "title" check.empty comma output + new.block + make.edition comma output + new.block + address space output + organization colon output + new.block + note space output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Booklet} +% +% \begin{macro}{booklet} +% A work that is printed and bound, but without a named publisher or sponsoring +% institution. Required: \field{title}. Optional: \field{author}, \field{howpublished}, +% \field{address}, \field{month}, \field{year}, \field{note}. Title is quoted. \field{key} used if \field{author} +% is empty. +% \begin{macrocode} +FUNCTION {booklet} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month space output + new.block + make.title.inquotes "title" check.empty comma output + new.block + howpublished space output + address comma output + new.block + note space output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Inproceedings} +% +% \begin{macro}{inproceedings} +% \begin{macro}{conference} +% An article in a conference proceedings. Required: \field{author}, +% \field{title}, \field{booktitle}, \field{year}. Optional: \field{editor}, +% \field{volume} or \field{number}, \field{series}, \field{pages}, +% \field{address}, \field{month}, \field{organization}, \field{publisher}, +% \field{note}. \field{key} used where \field{author} empty. Title quoted. +% \begin{macrocode} +FUNCTION {inproceedings} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month "year" check.empty space output + new.block + make.title.inquotes "title" check.empty space output + new.block + crossref empty$ %$ + { make.editors.secondary space output + make.booktitle.ital "booktitle" check.empty comma output + volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + make.edition comma output + new.block + organization space output + address comma output + publisher colon output + make.pages comma output + } + { "In " make.crossref * space output + make.chapter comma output + make.pages comma output + chapter empty$ pages empty$ and + { "empty chapter and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + } + if$ %$ + new.block + note space output + finish.entry +} +FUNCTION {conference} +{ inproceedings +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Proceedings} +% +% \begin{macro}{proceedings} +% The proceedings of a conference. Required: \field{title}, \field{year}. +% Optional: \field{editor}, \field{volume} or \field{number}, \field{series}, +% \field{address}, \field{month}, \field{organization}, \field{publisher}, +% \field{note}. If \field{editor} empty, use \field{organization} for +% \evar{leaditem}. For label, like type manual, use nonempty \field{key} for +% the label instead of \field{organization}. Title italicized. +% \begin{macrocode} +FUNCTION {proceedings} +{ begin.entry + make.leaditem.with.tags space output + new.block + make.year.month "year" check.empty space output + new.block + make.title.ital "title" check.empty comma output + new.block + make.edition comma output + new.block + volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + new.block + organization space output + address comma output + publisher colon output + new.block + note comma output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Misc} +% Required: \emph{none}. The rest are optional. \field{leaditem} is +% \field{author} or \field{key} if empty. \field{year} with \field{month}. +% Then \field{title}, quoted. Then \field{howpublished}. Then \field{note}. +% \begin{macrocode} +FUNCTION {misc} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month space output + new.block + title space output + new.block + howpublished comma output + new.block + note space output + finish.entry +} +% \end{macrocode} +% +% \subsubsection{Techreport} +% +% \begin{macro}{techreport} +% A report published by a school or other institution, usually numbered within +% a series. Required: \field{author}, \field{title}, \field{institution}, +% \field{year}. Optional: \field{type}, \field{number}, \field{address}, +% \field{month}, \field{note}. \field{key} used when \field{author} empty. +% \begin{macrocode} +FUNCTION {techreport} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month "year" check.empty comma output + new.block + make.title.inquotes "title" check.empty comma output + new.block + make.number.tr comma output + institution "institution" check.empty comma output + address comma output + new.block + note comma output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Unpublished} +% +% \begin{macro}{unpublished} +% A document having an author and title, but not formally published. Required: +% \field{author}, \field{title}, \field{note}. Optional: \field{month}, +% \field{year}. Uses \field{key} for no \field{author}. +% \begin{macrocode} +FUNCTION {unpublished} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month space output + new.block + make.title.inquotes "title" check.empty space output + new.block + note "note" check.empty space output + finish.entry +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Default} +% +% \begin{macro}{default.type} +% I think \BibTeX{} is hardwired to look for this name. +% \begin{macrocode} +FUNCTION {default.type} +{ misc } +% \end{macrocode} +% \end{macro} +% +% \subsection{Sorting} +% +% \begin{macro}{chop.word} +% \cs\stack{\meta{string} \meta{num} \meta{string}}{\meta{string}} +% \begin{verbatim} +% stack: S n T +% +% if S = substr(1,n,T) +% then substr(n+1, max, T) +% else S +% +% if T begins with S, then chop it off the beginning of T. +% \end{verbatim} +% I guess we don't bother calculating the length for efficiency's sake. +% \begin{macrocode} +FUNCTION {chop.word} +{ 't := + 'len := + t #1 len substring$ = %$ + { t len #1 + global.max$ substring$ + } + { t + } + if$ %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{make.title.for.sort} +% We don't bother to \function{format.sortify.clip}, just do that once before assignment to +% the sort.key. +% \begin{macrocode} +FUNCTION {make.title.for.sort} +{ title field.or.null + 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word +% letter-by-letter alphabetization: + format.dehyphen.dewhitespace +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{presort} +% +% Set \evar{label}, \evar{year.label}, \evar{leaditem}. Set \field{sort.key\$} +% to \evar{leaditem} + \evar{year.label} + title suitably massaged. +% +% Note that \evar{year.label.tag} is not set yet; it will be set in stages in +% \function{forward.pass.add.bcds} and \function{reverse.pass.add.as}. +% \begin{macrocode} +FUNCTION {presort} +{ set.principal-field.principal-type + +% "principals set for " cite$ * debugmsg %$ + make.leaditem + 'leaditem := + +% "leaditem set for " cite$ * debugmsg %$ + make.label + 'label := + +% "label set for " cite$ * debugmsg %$ + oyear empty$ %$ + { year + } + { oyear + } + if$ %$ +% FIX: substring or text.prefix? if purify removes special chars then no diff. + field.or.null purify$ #-1 #4 substring$ + 'year.label := +} + +FUNCTION {sortkey<-label+year+principal+title} +{ label + delimiter.sub-sortkey * + year.label * + delimiter.sub-sortkey * + make.principal-field.for.sort * + delimiter.sub-sortkey * + make.title.for.sort * + format.sortify.clip + 'sort.key$ := %$ +} + +FUNCTION {sortkey<-principal+year+year-tag} +{ make.principal-field.for.sort + delimiter.sub-sortkey * + year.label * +% FIX if year.label is ever going to be a variable length, need some padding here? + year.label.tag * + format.sortify.clip + 'sort.key$ := %$ +} + +FUNCTION {presort.&.sortkey<-label+year+principal+title} +{ presort +% "presort done for " cite$ * debugmsg %$ + sortkey<-label+year+principal+title +% "sortkey set to label+year+principal+title for " cite$ * debugmsg %$ +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{initialize.sorting-gvars} +% \mbox{} +% \begin{macrocode} +FUNCTION {initialize.sorting-gvars} +{ unidentified 'last.leaditem := + unidentified 'last.label.and.year := + "" 'following.year.label.tag := + #0 'last.year.tag.num := +} +% \end{macrocode} +% \end{macro} +% +% \section{Disambiguating citations and sorting the bibliography} +% +% The initial calculation of citations can result in +% ambiguous labels for some entries. Two kinds of ambiguities can result: +% +% \begin{description} +% \item[same principal] +% These are disambiguated by adding a unique lowercase letter to the end of +% the citations for each entry in the ambiguous set: (Smith 1980a) and +% (Smith 1980b); (Smith et~al. 1970a), (Smith et~al. 1970b). The order of +% the letters corresonds to the order of their appearance in the +% bibliography (see below). +% \item[different principal] +% +% Different principals can have be (initially) given the same label in two +% cases: (1) the principals include 4 or more names and the initial names +% share a surname, and (2) the principals include the same number $n<4$ of +% names and both the initial names and each of the subsequent names when +% present share a surname. In each case, the entries must also have the +% same year+tag, that is, the same year \emph{including} any lowercase +% letters that might have been added. In both cases, ambiguous labels are +% disambiguated by adding first initials to those names which differ in the +% first name: (P.~Smith 1980), (M.~Smith 1980); (Green, Z.~Black, and Meyer +% 1980), (Green, B.~Black, and Meyer 1980); (Benson, Brown, Gray, White, +% B.~Black, and Griscom 1900), (Benson, H.~Brown, Gray, White, Z.~Black, +% and Griscom 1900). When even first initials aren't enough to +% disambiguate, full names are used: (John~D.\ Smith 1990), (John~Q.\ Smith +% 1990); etc. +% +% \end{description} +% +% FIX: current behavior disambiguates all ambiguous citations by means of the +% lowercase letter. ``A, B, C, and D 1999'' together with ``A, B, C, and E +% 1999'' are going to resolve to ``A et al 1999a'' and 1999b. This nicely +% avoids disambiguation, but not what the Manual specifies. +% +% FIX: current behavior is going to disambiguate citations that are ambiguous +% because authors share last but differ in first names by means of the +% lowercase letter: ``Aa 1999'' and ``Ab 1999'' become ``Aa 1999a'' and ``Ab +% 1999b'' (where `A' stands for last name, and the `a' right after it is the +% unmentioned first name). The Manual, however, specifies (16.3) +% disambiguating by using first initials in the label, such as ``M. Brown +% 1999''. +% +% add.bcds: work on getting the right \evar{year.label.tag}. Compare current +% entry's \evar{label} plus \evar{year.label} to the last entry's, which is +% stored in the global string variable \gvar{last.label.and.year}. If they are +% the same, increment global integer variable \gvar{last.year.tag.num} and set +% \evar{year.label.tag} to the $n$th lowercase letter, where $n$ is +% \gvar{last.year.tag.num}. If they are not the same, set +% \gvar{last.label.and.year} to the current \evar{label} plus \evar{year.label}, set +% \evar{year.label.tag} to empty string, and set \gvar{last.year.tag.num} to~0. +% +% After add.bcds pass, \evar{year.label.tag} will be blank for all first +% entries of an ambiguous series, and ``b,'' ``c,'' etc.\ for second entries, +% third entries, and so on. The ``a'''s will be added in the right places by +% the reverse.pass.add.as function. +% +% Handle duplicate \evar{leaditem}s. Compare current entry's +% \evar{leaditem} with the last entry's, which is stored in the global string +% variable \gvar{last.leaditem}. When they are the same, wrap the current +% entry's \evar{leaditem} in \cs\SCduplicate. +% \begin{macrocode} +FUNCTION {forward.pass.wrap.dupe.leaditems} +{ leaditem + duplicate$ last.leaditem = %$ + % we add the brace pair at the end because this forces add.period$ to add a %$ + % period after it. FIX: if we ever want \SCdup to actually print its + % argument, we must get it to print its argument minus any final period. + { "\SCduplicate{" swap$ * "{}}" * 'leaditem := %$ + } + { 'last.leaditem := + } + if$ %$ +} +FUNCTION {forward.pass.add.bcds} +{ label year.label * format.clip + duplicate$ last.label.and.year = %$ + % same as previous entry + { pop$ %$ + last.year.tag.num #1 + 'last.year.tag.num := + last.year.tag.num int.to.chr$ 'year.label.tag := %$ + } + % different from previous entry + { "a" chr.to.int$ 'last.year.tag.num := %$ + "" 'year.label.tag := + 'last.label.and.year := + } + if$ %$ +} +% FIX: use a minimum of entry-variables to hold 'last' things. +% FIX: change `last' to 'prev' where appropriate. what about vars that might +% be used going forward and back? always use `prev'? + +% \end{macrocode} +% +% \begin{macro}{reverse.pass.add.as} +% Pass through the entries in reverse order. Set current +% \evar{year.label.tag} to ``a'' on entries that precede ones with ``b''s. +% Set \evar{following.year.label.tag} to the current \evar{year.label.tag}. +% \begin{macrocode} +FUNCTION {reverse.pass.add.as} +{ following.year.label.tag "b" = + { "a" 'year.label.tag := + } + 'skip$ %$ + if$ %$ + year.label.tag 'following.year.label.tag := +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{begin.bib} +% \begin{macro}{end.bib} +% These two functions are called to begin and end the entire bibliography. +% \begin{macrocode} +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ %$ + { preamble$ write$ newline$ %$ + } + if$ %$ + "\begin{thebibliography}{}" write$ newline$ +} +FUNCTION {end.bib} +{ newline$ %$ + "\end{thebibliography}" write$ newline$ +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Actions} +% +% This is the main subroutine which calls all the others. +% \begin{macrocode} +READ + +EXECUTE {init.scalars} + +ITERATE {presort.&.sortkey<-label+year+principal+title} +SORT + +EXECUTE {initialize.sorting-gvars} + +% add in "b"'s etc. +ITERATE {forward.pass.add.bcds} +% add in "a"'s +REVERSE {reverse.pass.add.as} + +ITERATE{sortkey<-principal+year+year-tag} +SORT + +EXECUTE {initialize.sorting-gvars} +ITERATE {forward.pass.wrap.dupe.leaditems} + + +EXECUTE {begin.bib} +ITERATE {call.type$} %$ +EXECUTE {end.bib} +% \end{macrocode} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/achicago.ins b/macros/latex/contrib/frankenstein/achicago.ins new file mode 100644 index 0000000000..ef1f8d0993 --- /dev/null +++ b/macros/latex/contrib/frankenstein/achicago.ins @@ -0,0 +1,64 @@ +% achicago.ins -- docstrip driver for the achicago LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + achicago.sty or achicago.stq. This + LaTeX package will work ONLY if it is called achicago.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + achicago.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{achicago.stq}{\from{achicago.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file achicago.stq is a faster replacement for the file} +\Msg{* achicago.sty.} +\Msg{*} +\Msg{* achicago.stq is stripped of comments (documentation) and must be} +\Msg{* renamed achicago.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/achicago.pdf b/macros/latex/contrib/frankenstein/achicago.pdf new file mode 100644 index 0000000000..9ad8fc89e4 Binary files /dev/null and b/macros/latex/contrib/frankenstein/achicago.pdf differ diff --git a/macros/latex/contrib/frankenstein/achicago.sty b/macros/latex/contrib/frankenstein/achicago.sty new file mode 100644 index 0000000000..28bb425429 --- /dev/null +++ b/macros/latex/contrib/frankenstein/achicago.sty @@ -0,0 +1,711 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% achicago LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, achicago.tex +% and achicago.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{284} +% +%^^A** abstract +% \begin{abstract} +% \package{Achicago} provides a documentation style for \LaTeX{} that aims +% for compliance with the \manual. It uses author-date citations (per +% ch.~16), but bibliography entries contain unabbreviated information (per +% ch.~15). Requires accompanying \BibTeX{} bibliography style, +% \bst{achicago}. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% \AddToCheckSum{10}^^A FIX no idea why I have to do this. +% +% \section{General} +% +% This package is a companion to the \bst{achicago} \BibTeX{} bibliography +% style. The set of citation commands offered by \package{achicago} is +% unfortunately shared only with an early implementation of a \manual-compliant +% documentation style, \package{achicago} and \bst{achicago}. FIX: any others? +% In the future, I hope to make \package{achicago} compatible with the most +% common +% +% have to commit to using this bibstyle-package combination when you write your +% sources. This needn't be true, and one day I am going to create a series of +% mappings from other common bibstyles that are conceptually similar, such as +% the \bst{harvard} styles. The user commands are slightly different, but it +% should be the case that either set of user commands can be the front end for +% either bibstyle. +% +% Here in this documentation you will read about the commands you will use in +% your \LaTeX{} source file to make citations, and what the citations look +% like. Documentation of the \bst{achicago} bibstyle itself is in the file +% \file{achicago-bst.dvi}. There you can read about what the References +% section, the actual book list, looks like. There are also some new fields +% recognized and other information you might want to know that relates to your +% \BibTeX{} bibliography database file (\ext{bib} file). You may also wish to +% look at the \package{titles} package (also in the \Frankenstein bundle), +% which can be very helpful in typesetting various styles of titles properly, +% even when nested. The \package{achicago} package already requires the +% \package{titles} package, so those commands are always there if you want to +% use them. +% +% \caveat{This documentation is sparse but should be accurrate. I will improve +% it in the future.} +% +% \section{Notes on the future of this package and bibstyle} +% +% \manualref{16.25} permits this combination. +% +% In the future I hope to document more closely \manual's principles wrt each +% entry type, the many choices given by \manual. +% +% Untested and indeed hardly testable nature of the subject, with all its many +% permutations and difficult special bibliographic cases. Feedback is very +% welcome, especially with citations from \manual. +% +% FUTURE One thing I realize now is that I've kept the same user interface I +% inherited, which I don't think corresponds with any other popular style. +% Besides refinement, this is the next major step in the future of this +% bibstyle-package. +% +% \section{Pros and cons of this style} +% +% FIX: terminology: reference style, citation style, bibstyle, bibliography style +% +% When you are required to use a certain reference style, your judgment is not +% called for. In the cases where it is, here are some considerations. +% +% \begin{description} +% \item[citations are verbose] + +% Sometimes this information is useful to the reader, sometimes not. If in +% most citations it is not useful, consider a style with briefer citations. +% \item[citation style and quality of writing] +%% +% FIX cite btxdoc Oren Patashnik argues that ``encourages the passive +% voice and vague writing.'' I'm not sure. Even if it's true, an author can +% surely resist this ``encouragement.'' To encourage is not to require. Do +% consider how well \emph{you} write using different citation styles. If the +% document is already written, realize that if you change the citation style +% to one different than the author had in mind while writing, you may make +% reading it more awkward. Then again, maybe you will improve it. +% \item[ease of locating references] +% +% The entry for (Benson et~al. 1980) will appear any number of entries +% \emph{after} the entry for (Benson et~al. 1999) when the former was written +% by Benson, Zymursky, Wheeler, and Flynn and the latter by Benson (i.e., the +% same Benson), Floyd, Wheeler, and Flynn, since Zymursky compares greater +% than Floyd. +% +% This is an issue to consider if you have a large number of entries with the +% same initial author (or editor) and often with different sets of 3 or more +% subsequent authors. This is, in general, very unlikely. +% +% The entry for (Gr\"uber 1990b) may not follow the entry for (Gr\"uber +% 1990a) immediately. When (the same) Gr\"uber has authored +% Any number of entries may intervene, but their +% principals will all be exactly Gr\"uber. Entries will intervene only in +% the case when Gr\"uber both authored and edited a work in the same year, +% and authored one a work with a later date. +% \end{description} +% +% \section{Usage} +% +% Here are the various citing commands, and examples of the citations they produce. +% +% \todo{What about the situation when you end a sentence with something ending +% with ``et~al.''---in this case you don't want to reproduce the period.} +% +% Distinct examples are \typeset{distinguished this way}. +% +% \begin{tabular}{*{3}{p{.33\textwidth}}} +% \cs\cite\marg{key} +% & parenthesized list of up to 3 principals or one ``et~al.'' plus a year label +% & \typeset{(Brown 1978)} \typeset{(Jarke, Turner, and Stohl 1985)} \\ +% \cs\cite\oarg{spec}\marg{key1} +% & +% & \typeset{(Brown 1978, 17)} \typeset{Jarke, Turner, and Stohl 1985, \S 3.3)} \\ +% \cs\cite\marg{key1,key2} +% & +% & \typeset{(Brown 1978; Jarke, Turner, and Stohl 1985)} \\ +% \cs\cite\oarg{spec}\marg{key1,key2} FIX: how does this work? +% & +% & \typeset{(Brown 1978; Jarke, Turner, and Stohl 1985)} \\ +% \cs\citeNP\meta{key} +% & as \cs\cite but without enclosing parentheses +% & \typeset{Brown 1978} \typeset{Jarke, Turner, and Stohl 1985} \\ +% \cs\citeA\marg{key} +% & as \cs\cite but without year label(s) +% & \typeset{(Brown)} \typeset{(Jarke, Turner, and Stohl)} \\ +% \cs\citeANP\marg{key} +% & as \cs\citeA but without enclosing parentheses +% & \typeset{Brown} \typeset{Jarke, Turner, and Stohl} \\ +% \cs\citeyear\marg{key} +% & as \cs\cite but without principal list +% & \typeset{(1978} \typeset{1985} \\ +% \cs\citeyearNP\marg{key} +% & as \cs\citeyear but without enclosing parentheses +% & \typeset{1978} \typeset{1985} \\ +% \cs\citeN\marg{key}\footnotemark +% & principal list and parenthesized year label (i.e., a noun phrase) +% & FIX: referring to author instead of paper? need good example \\ +% \end{tabular} +% \footnotetext{This command should only be used for one key.} +% \todo{Should I use a warning in case more than one key is given to a command +% that shouldn't have them?} +% +% \subsection{Short citation labels} +% +% Previous versions of \package{achicago} offered a parallel set of citation +% commands with the prefix |short| that created citations with abbreviated +% labels (\cs\shortcite, \cs\shortciteNP, \cs\shortciteA, \cs\shortciteANP, +% \cs\shortciteN). \package{Achicago} now offers only one kind of label, which +% is abbreviated according to principles in the \manual as much as possible. +% For backwards compatibility, the |short| citation commands still function, +% but they are identical to their non-|short|, and will produce a warning that +% this syntax is deprecated. Do not use the |short| commands in new documents. +% +% \section{Some technical notes} +% +% \todo{See \manualref{16.14} for issues to do with multiple citations.} +% +% \section{History} +% +% I wrote this package incorporating \file{chicago\{,a\}.bst} and +% file{chicago.sty} (v4, 92/8). By now I've almost totally rewritten it. It +% was a great mess because it had been based on \file{newapa.bst} which had +% been based on several other bibstyles, and each author had really just hacked +% up what was there in the previous bibstyle apparently without fully +% understanding it. Now, of course, it is a shining example of clarity and +% efficiency. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{Chicago Manual author-date citations} +\def\DoXPackageS {achicago} +\def\initelyHavECitationS {} +\def\fileversion{v1.2} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{achicago}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \begin{macrocode} +\RequirePackage{blkcntrl,moredefs,slemph,titles,verbatim} +% \end{macrocode} +% +% \begin{macrocode} +\newboolean{Annotate} +\newcommand\annotate {% + \Annotatetrue +} +\newcommand\noannotate {% + \Annotatefalse +} +% \end{macrocode} +% +% \cs\citework is supposed to be a general command for citing things declared +% with \cs\newwork in the \package{abbrevs} package. It has one optional and +% one required argument so that it is parallel with the other citing commands, +% but I cannot see any use for it without the optional argument. Environments +% can exert complete control over how this macro looks by resetting the three +% parameters. The default will look good outside all environments, in running +% text. +% +% The second argument is expected to be something defined with \cs\newwork. +% +% Needs modification to handle the empty optional arg. Watch interfering with +% things surrounding macros might have set. \cs\relax's are intentionally left +% out to let constructions like \cs\csname\lips\cs\endcsname [eh? FIX] work on +% the arguments. +% +% \begin{macro}{\PreCiteWork} +% \begin{macro}{\PostCiteWork} +% \begin{macrocode} +\providesavebox\sc@box@a +\newcommand\PreCiteWork {% + (\csname% +} +\newcommand\PostCiteWork {% + \end{lrbox}\usebox{\sc@box@a})% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% We don't want to be unbreakable here, but we want a high penalty. We +% absolutely do not want to break the number range, so we put it in an lrbox. +% +% I think comma is better, even though it might seem fussy, because it is +% better parallel with the way \cs\cite works with an optional page argument: the +% convention is that page numbers come after commas. +% +% \begin{macrocode} +\newcommand\MidCiteWork {% + \endcsname,\penalty9000\ \begin{lrbox}{\sc@box@a}% +} +\newcommand\citework [2] {% + \PreCiteWork #2\MidCiteWork #1\PostCiteWork +} +% \end{macrocode} +% +% \begin{verbatim} +% The {} fools abbrevs.dtx into not adding an extra space +% \newcommand\MidCiteWork {% +% \endcsname{}\penalty9000\ \begin{lrbox}{\sc@box@a}% +% } +% \end{verbatim} +% +% \todo{Make citework* with no parentheses, or other alternative.} +% +% FIX: When the ? is placed there, there are two left parens, one right. +% +% We want the remaining macros in this section to be available in their own +% piece. +% +% \todo{is \cs\PreChunk the only dependence on blkcntrl? Should make this not +% necessary if so.} +% +% \begin{macrocode} +\newcommand\PreAnnotation {% + \PreChunk +} +% \end{macrocode} +% +% This will make the definition of the \env{thebibliography} environment in +% \file{classes.dtx} do the right thing. FIX: not defined in letter class? +% \begin{macrocode} +\defcommand\@openbib@code {% + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ +} +\let\newblock\relax +% \end{macrocode} +% This doesn't work at the beginning, for some reason. The auxfiles are not +% set up right? URK: don't do this. Confuses users and also prevents anyone +% from using achicago.sty with another bibstyle, such as a modified achicago.bst. +% Is there a way I can provide a useful warning message for those who might +% have been using this before, without a \cs\bibliographystyle +% \begin{macrocode} +%\AtEndDocument {% +% \bibliographystyle{achicago}% +%} +% \end{macrocode} +% +% The \bst{achicago} bibliography style will insert some macros that are not +% defined by \LaTeX, and some that must have new meanings. They are: +% \cs\citeN, \cs\SCcite, \cs\SCduplicate, \code{\begin{SCannotation}}, +% \code{\end{SCannotation}}. +% +% Some of these commands should properly have |@| in their names, but +% |@|-commands cannot appear in the \ext{bbl} file. As a compromise, the names +% have the prefix |SC|. +% +% \begin{macro}{\SCduplicate} +% \begin{macro}{\ac@mmmdash} +% The argument will contain the `label' that is a duplicate, in case it might +% ever be of use. But for now, we just want to replace duplicates with 3-em +% dashes. +% +% \todo{provide option to spell out the duplicate when it is the first entry on +% a page (oneside) or verso page (twosided)} +% +% A 3em-dash. +% \begin{macrocode} +\newcommand\ac@mmmdash {% + \rule[.6ex]{3em}{.03ex}% +} +\newcommand*\SCduplicate [1] {% + \ac@mmmdash +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PreAnnotation} +% \begin{macro}{\ac@begingobble} +% \begin{macro}{\ac@endgobble} +% \begin{environment}{SCannotation} +% This sets up the \env{SCannotation} environment. When the boolean +% \cs\IfAnnotate is false, we gobble everything between \code{\begin{SCannotation}} +% and \code{\end{SCannotation}}. +% +% We require the \package{verbatim} package to do this. I used to put the text +% into an |lrbox| and just never use the box. This required balanced text +% inside (not a bad thing), but it also would process any \cs\cite-like +% commands that appeared in the gobbled text, which could lead to perpetual +% warnings about unresolved references. There were in fact no unresolved +% references, but the warnings were annoying. +% \begin{macrocode} +\newlet\ac@begingobble\comment +\newlet\ac@endgobble\endcomment +% \end{macrocode} +% \todo{I shouldn't define annote in terms of quotation, we should copy a +% standard one here; What is the point of the \cs\relax? I ended up removing +% them before the \cname{ac@begingobble} cases because I had to use the +% \cs\expandafter.} +% +% \begin{macrocode} +\newenvironment{SCannotation} {% + \ifAnnotate + \let\PreQuotation\PreAnnotation + \relax\quotation + \else + \expandafter\ac@begingobble + \fi + }{% + \ifAnnotate + \relax\endquotation + \else + \expandafter\ac@endgobble + \fi +} +% \end{macrocode} +% \end{environment} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\SCcite} +% \begin{macro}{\ac@firstoftwo} +% \cs\SCcite is what \bst{achicago} produces. Its args are `label', +% and `year.label'. FIX: aak, plus tag. +% \begin{macrocode} +\ReserveCS\SCcite +\newlet\UnexpandableProtect\@unexpandable@protect + +\newcommand*\ac@firstoftwo [2] {#1} +\newcommand*\ac@secondoftwo [2] {#2} +\newcommand*\ac@onespacetwo [2] {#1\ #2} +\newcommand*\ac@onespacepretwo [2] {#1\ \PreCite #2} + +\newcommand*\ac@cite@preonecommatwopost [2] {% + \PreCite #1\if@tempswa , #2\fi\PostCite +} +\newcommand*\ac@cite@onecommatwo [2] {% + #1\if@tempswa , #2\fi +} +\newcommand*\ac@cite@onecommatwopost [2] {% + #1\if@tempswa , #2\fi \PostCite +} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PreCite} +% \begin{macro}{\PostCite} +% \mbox{} +% \begin{macrocode} +\newlet\PreCite ( +\newlet\PostCite ) +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cite} +% \begin{macro}{\citeNP} +% \begin{macro}{\citeA} +% \begin{macro}{\citeN} +% \begin{macro}{\citeANP} +% The way this works is: \cname{\@cite} is called once for each citing command, +% and \cs\SCcite is called once for each key. The results are spaced by either +% semicolons (\cname{\ac@cite@sc}) or commas (\cname{\ac@cite@comma}), and +% these become argument |#1| for \cname{\@cite}. +% \begin{macrocode} +\def\cite {% + \let\@cite\ac@cite@preonecommatwopost + \let\SCcite\ac@onespacetwo + \ac@cite@sc +} +\newcommand*\citeNP {% + \let\@cite\ac@cite@onecommatwo + \let\SCcite\ac@onespacetwo + \ac@cite@sc +} +\newcommand*\citeN {% + \let\@cite\ac@cite@onecommatwopost + \let\SCcite\ac@onespacepretwo + \ac@cite@comma +} +\newcommand*\citeA {% + \let\@cite\ac@cite@preonecommatwopost + \let\SCcite\ac@firstoftwo + \ac@cite@sc +} +\newcommand*\citeANP {% + \let\@cite\ac@cite@onecommatwo + \let\SCcite\ac@firstoftwo + \ac@cite@sc +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\shortcite} +% \begin{macro}{\shortciteNP} +% \begin{macro}{\shortciteN} +% \begin{macro}{\shortciteA} +% \begin{macro}{\shortciteANP} +% \begin{macrocode} +\newlet\shortcite\cite +\newlet\shortciteNP\citeNP +\newlet\shortciteN\citeN +\newlet\shortciteA\citeA +\newlet\shortciteANP\citeANP +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\citeyear} +% \begin{macro}{\citeyearNP} +% \mbox{} +% \begin{macrocode} +\newcommand*\citeyear {% + \let\@cite\ac@cite@preonecommatwopost + \let\SCcite\ac@secondoftwo + \ac@cite@comma +} +\newcommand*\citeyearNP {% + \let\@cite\ac@cite@onecommatwo + \let\SCcite\ac@secondoftwo + \ac@cite@comma +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ac@citesep} +% \begin{macro}{\ac@cite@sc} +% \begin{macro}{\ac@cite@comma} +% \mbox{} +% \begin{macrocode} +\ReserveCS\ac@citesep +\newcommand\ac@cite@sc {% + \let\ac@citesep ;% + \ac@cite +} +\newcommand*\ac@cite@comma {% + \let\ac@citesep ,% + \ac@cite +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ac@cite} +% This command executes \cname{\b@foo} for every \cs\foo in the list of cited +% labels, and separates them by arg |#1|. +% +% There has got to be a more elegant solution to this whole thing. FIX +% \begin{macrocode} +\newcommand*\ac@cite {% + \@ifnextchar [ {% + \@tempswatrue + \ac@@cite + }{% ELSE + \@tempswafalse + \ac@@cite[]% + }% +} +% \end{macrocode} +% \todo{handle reserving names} +% \begin{macrocode} +\providecommand\@writeaux {% + \immediate\write\@auxout +} +\NewName*{ac@@cite} {[#1]#2} {% args: [optarg] label % optarg MANDATORY + \if@filesw + \@writeaux{\string\citation{#2}}% + \fi + \@cite{% + \InitCS\sc@t@a + \@for\ac@label:=#2\do {% + \sc@t@a +% \let\sc@t@a\ac@citesep + \def\sc@t@a {\ac@citesep\ }% add space + \@ifundefined{b@\ac@label} {% + {\bfseries ?}% + \@warning{Citation `\ac@label' on page \thepage\space undefined}% + }{% ELSE + \@nameuse{b@\ac@label}% + }% + }% + }{#1}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bibindent} +% Indent second and subsequent lines of bibliographic entries. +% \begin{macrocode} +\setlength\bibindent{1.5em} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{thebibliography} +% There is no \option{openbib} option. The definitions of \cs\newblock and +% \cname{@biblabel} are kept local in case something else weird is going on. +% \begin{macrocode} +\newcommand\ac@defbib [2] {% + \renewenvironment*{thebibliography} [1] {% + #1*{#2\@mkboth{#2}{#2}}% + \list{}{% + \leftmargin\z@ + \advance\leftmargin\labelsep + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@}% +% \end{macrocode} +% \manual does not acknowledge different spacings after different marks of +% punctuation, distinguish interword from intersentence space, or give rules +% about where to break a line near an ellipsis. So we are on our own in the +% bibliography. I have chosen to leave things as they are done in the standard +% bibliography styles, because I haven't yet given it my close consideration. +% That is, we leave all the punctuation the same except for the period, which +% we set to~1000, I forget now whether that's a lower or upper case letter. +% Extending the space after a period when appropriate seems to be the purpose +% of using \cs\newblock, in this bibstyle. +% \begin{macrocode} + \sfcode`\.=\@m + \def\newblock {% + \hskip .11em \@plus.33em \@minus.07em% + }% + \let\@biblabel\Gobble + \sloppy + \clubpenalty4000\widowpenalty4000% + }{% + \def\@noitemerr {% + \@latex@warning{Empty `thebibliography' environment}% + }% + \relax\endlist + }% +} +\@ifclassloaded{article} {% + \ac@defbib{\section}{\refname}% + }{% ELSE + \ac@defbib{\chapter}{\bibname}% +} +\InitCS\ac@defbib % FIX -- where else can I do this? +% \end{macrocode} +% \end{environment} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/achicago.tex b/macros/latex/contrib/frankenstein/achicago.tex new file mode 100644 index 0000000000..bc4b339b43 --- /dev/null +++ b/macros/latex/contrib/frankenstein/achicago.tex @@ -0,0 +1,67 @@ +% achicago.tex -- documentation for the achicago LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{achicago.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{achicago} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{achicago.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/allocate.sto b/macros/latex/contrib/frankenstein/allocate.sto new file mode 100644 index 0000000000..d907cecec3 --- /dev/null +++ b/macros/latex/contrib/frankenstein/allocate.sto @@ -0,0 +1,442 @@ +% \AddToCheckSum{309} +% +% \begin{warning} +% This code has not been well tested yet. The output routine of \LaTeX{} is +% very complicated, and unforseen problems might arise. +% \end{warning} +% +% \DescribeMacro\NextAux +% \DescribeMacro\DynamicAux +% \DescribeMacro\StaticAux +% The macro \cs\NextAux changes \cname{@auxout} to a new stream if one is +% available, and gives an error otherwise. The macro is implemented in +% dynamic and static ways which can be selected with \cs\DynamicAux and +% \cs\StaticAux\marg{number of streams}. The number of streams can be from 2 +% to~16. The dynamic implementation is the default; I do not see much use +% for the static implementation at present. The \option{static} option is +% the equivalent of the declaration |\StaticAux{10}|. The \option{dynamic} +% selects the dynamic implementation. +% +% \cs\StaticAux can be invoked after \cs\DynamicAux, but not the other way +% around (at least, the streams allocated by \cs\StaticAux are not +% recovered). Macros which use \cs\NextAux do not have to know whether the +% implementation is static or dynamic. +% +% \subsubsection{Wheels} +% +% The output streams are manipulated with the help of a data structure I call a +% \word{wheel}. +% +% A \term{wheel} has 0 or more \term{spokes} and can be \term{rolled}. Each +% spoke is a \TeX{} token, probably a control sequence name, and has an +% internal name. You can access the spoke at the 12 o'clock or ``top'' +% position of a wheel. In computerese, a wheel is a circularly linked list of +% tokens, and the operation of rolling moves a pointer along it in a certain +% direction by one element. +% +% Wheels and operations on wheels are local. +% +% \DescribeMacro\InitWheel +% \DescribeMacro\DefWheel +% You make a wheel either with \cs\InitWheel\marg{\\csname}, which makes +% \meta{\\csname} a wheel with no spokes, or +% \cs\DefWheel\marg{\\csname}\marg{spokes}, which makes a wheel with +% \meta{spokes} for spokes. The first spoke in \meta{spokes} is the top, the +% second will be top after one roll, and the first will be top again after +% $n$ rolls, if there are $n$ spokes. +% +% \DescribeMacro\Roll +% \DescribeMacro\Top +% \DescribeMacro\AddSpokes +% Wheels are rolled by \cs\Roll\marg{wheel}. Spokes can be added to a +% wheel with \cs\AddSpokes\marg{wheel}\marg{spokes}. When $n$ spokes are +% added, the previous top will be at the top after $n$ rolls. +% \cs\Top\marg{wheel} expands eventually to the top spoke, which then can +% further expand, and so on. +% +% \DescribeMacro\IfTop +% \cs\IfTop\marg{wheel}\marg{spoke}\marg{true clause}\marg{false clause} +% compares the top of \meta{wheel} with \meta{spoke} using \cname{ifx}, and +% executes either \meta{true clause} or \meta{false clause} as appropriate. +% (The \package{newclude} package doesn't actually use this command; it's +% provided to ``round out'' the wheel data structure.) +% +% \caveat{Don't put more than one token as the second argument to \cs\IfTop.} +% +% \subsubsection{Preliminaries} +% +% We require the \package{afterpage} package. The intuitive justification is +% that \cs\write{}s are delayed until the current page is shipped out. We need +% to keep an output stream open until its last \cs\write has been actually +% handled; after that, the stream can be made available again. +% \begin{macrocode} +\RequirePackage{afterpage} +% \end{macrocode} +% +% \begin{macro}{\nc@aux@wheel} +% We use the wheel structure to handle both the static case and the dynamic +% case. The spokes of the wheel are macros |\nc@auxout@|\meta{n}. Their +% first-level expansion is \meta{n}, a positive integer from 0 to~15. Each +% spoke has two corresponding macros. |\nc@auxout@|\meta{n}|@stream| is a +% stream name allocated by \cs\newwrite. |\nc@auxout@|\meta{n}|@inuse| is a +% global boolean which is |true| iff the corresponding stream is currently in +% use. +% \begin{macrocode} +\InitWheel\nc@aux@wheel +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nc@count} +% We need an internal counter. Notice that the stream numbers used in the +% auxwheel start at 0, so the stream associated with with the numeral 4 is +% the fifth stream. +% \begin{macrocode} +\newcounter{nc@count} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nc@aux@wheel@size} +% \cname{nc@aux@wheel@size} is a pseudo-counter that holds the present size +% of the aux wheel. In the static case it never changes and is set only for +% consistency. +% \begin{macrocode} +\ReserveCS\nc@aux@wheel@size +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NextAux} +% \mbox{} +% \begin{macrocode} +\ReserveCS\NextAux +% \end{macrocode} +% \end{macro} +% +% The kernel allocates two streams for the include system, \cname{@mainaux} and +% \cname{@partaux}. The auxwheel is initialized with these two streams. The +% first, corresponding to the principle source, is always marked in use. +% +% \todo{Reserve the stream names.} +% \begin{macrocode} +\newboolean{@nc@auxout@1@inuse@} + +\ReserveName{nc@auxout@1} +\NewName*{nc@auxout@1} {} {1} + +\ReserveName{nc@auxout@1@stream} +\expandafter\let\csname nc@auxout@1@stream\endcsname\@partaux +% \end{macrocode} +% +% \begin{macro}{\nc@init@aux@wheel} +% We initialize the wheel with the first spoke. +% \begin{macrocode} +\newcommand\nc@init@aux@wheel {% + \EExpand\csname nc@auxout@1\endcsname\In {% + \AddSpokes\nc@aux@wheel##1% + } +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Static allocation} +% +% \begin{macro}{\StaticAux} +% nonpositive numbers are treated the same as~1. \todo{bounds check; the +% counter's max should be one less than the number, since we have stream 0.} +% \begin{macrocode} +\newcommand\StaticAux [1] {% + \def\nc@aux@wheel@size {#1} + \setcounter{nc@count}{2} + \nc@init@aux@wheel + \@whilenum \value{nc@count} <= \nc@aux@wheel@size + \do {% +% \end{macrocode} +% First define the macros that make up the wheel itself to be their spoke +% numbers. +% \begin{macrocode} + \eExpand*\thenc@count\In {% + \NewName*{nc@auxout@\thenc@count} {} {% + ##1% + }% + } +% \end{macrocode} +% Next allocate the corresponding stream. +% \begin{macrocode} + \EExpand\csname nc@auxout@\thenc@count@stream\endcsname\In {% + \@nameuse{newwrite}##1% + } +% \end{macrocode} +% Next create the corresponding flag (they start |false|). +% \begin{macrocode} + \provideboolean{@nc@auxout@\thenc@count @inuse@} +% \end{macrocode} +% Now add the spoke itself. +% \begin{macrocode} + \EExpand\csname nc@auxout@\thenc@count\endcsname\In {% + \ReserveCS#1% + \AddSpokes\nc@aux@wheel##1% + } + \stepcounter{nc@count} + } + \def\NextAux {% + \Roll\nc@aux@wheel + \@nameuse{if@nc@auxout@\Top\nc@aux@wheel @inuse@}% + \MonsterError{newclude} {% + You can't nest \protect\include this deeply!% + }% + \else + \Elet\@auxout\csname nc@auxout@\Top\nc@aux@wheel @stream\endcsname + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Dynamic allocation} +% +% \begin{macro}{\DynamicAux} +% \begin{macro}{\nc@addnewauxstream} +% \mbox{} +% \begin{macrocode} +\newcommand\DynamicAux {% + \def\nc@aux@wheel@size {1} + \nc@init@aux@wheel + \def\NextAux {% + \Roll\nc@aux@wheel + \@nameuse{if@nc@auxout@\Top\nc@aux@wheel @inuse@}% + \nc@addnewauxstream + \fi +% \end{macrocode} +% Either the top spoke was not in use, or we have added a fresh spoke at the +% top -- so the top spoke represents what we want. +% \begin{macrocode} + \Elet\@auxout\csname nc@auxout@\Top\nc@aux@wheel @stream\endcsname + \typeout{NextAux has just set auxout to stream + \the\csname nc@auxout@\Top\nc@aux@wheel @stream\endcsname. + We are using spoke number + \csname nc@auxout@\Top\nc@aux@wheel\endcsname.} + }% +} +% \end{macrocode} +% It works out that the new spoke should have a spoke number one greater than +% the current wheel size. We use the |nc@count| counter to find this number. +% \begin{macrocode} +\newcommand\nc@addnewauxstream {% + \setcounter{nc@count}{\nc@aux@wheel@size}% + \stepcounter{nc@count}% + \typeout{Allocating another spoke (spoke number \thenc@count)}% +% \end{macrocode} +% First we add the spoke itself, then initialize the corresponding objects. +% \begin{macrocode} + \EExpand*\csname nc@auxout@\thenc@count\endcsname\In {% + \AddSpokes\nc@aux@wheel##1% + }% + \EExpand*\thenc@count\In {% + \DefName*{nc@auxout@##1} {} {##1}% + \provideboolean{@nc@auxout@##1@inuse@}% + \def\nc@aux@wheel@size {##1}% + \EExpand*\csname nc@auxout@##1@stream\endcsname\In {% + \@nameuse{newwrite}####1% + }% + }% +} +\DynamicAux +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Including} +% +% \begin{macro}{\nc@include} +% The only way I see how to set the |inuse| flag to |false| at the proper +% time is to use the \package{afterpage} package. What I would really like +% is to \cs\write something with side effects. +% \begin{macrocode} +\newcommand\nc@include [2][] {% + \if@filesw + \immediate\write\@mainaux{\string\@input{#2.aux}}% + \fi + \@tempswatrue + \if@partsw + \@tempswafalse + \edef\reserved@b{#2}% + \@for\reserved@a:=\@partlist\do + {\ifx\reserved@a\reserved@b\@tempswatrue\fi}% + \fi + \if@tempswa + \stepcounter{IncludeDepth}% +% \end{macrocode} +% \cname{nc@t@c} is going to preserve the current \ext{aux} stream number to +% restore \cname{@auxout}, in case there is a nested \cs\include. +% \begin{macrocode} + \edef\nc@t@c {% + \the\@auxout + }% + \if@filesw + \NextAux + \openout\@auxout #2.aux + \write\@auxout{\relax}% + \expandafter\global + \csname @nc@auxout@\Top\nc@aux@wheel @inuse@true\endcsname +% \end{macrocode} +% \begin{macro}{\nc@include@finish@} +% The next line defines the macro |\nc@include@finish@|\meta{n} to close the +% output stream that is presently open. We have an interesting task here of +% getting certain unique information to macros after the \cname{@input} when we +% might end up recursing during the \cname{@input}. To do this, we immediately +% expand the variables we need and store them in a macro which will \emph{not} +% be altered by a recursion of \cs\include. We have set up the |IncludeDepth| +% counter to allow us to define such a macro, which is unique to \emph{this} +% instance of \cs\include. +% +% \begin{warning} +% The macro names |\nc@include@finish@|\meta{n} where \meta{n} is an +% integer are overwritten, that is, they are not allocated in a safe way. +% \end{warning} +% +% The following lines are intended to make this definition, where || +% represents the current value of |IncludeDepth|, |

| represents the spoke +% number of the current top of \cname{nc@aux@wheel}, and || represents the +% stream number for the current part, i.e., the current value of +% \cname{@auxout}, and || represents the stream number that was current +% before \cs\include got called (this is saved in \cname{nc@t@c}). +% \begin{codeexample} +% \def\nc@include@finish@ {% +% \closeout% +% \global\chardef\@auxout=% +% \afterpage{\global\@nc@auxout@

@inuse@false} +% } +% \end{codeexample} +% \begin{macrocode} + \EExpand\theIncludeDepth\In {% ##1 + \EExpand\the\@auxout\In {% ####1 + \DefName{nc@include@finish@##1} {} {% + \closeout####1% + \global\chardef\@auxout=\nc@t@c + \typeout{Restored auxout to stream number + \nc@t@c \space (old: \the\@auxout)} + \typeout{executing afterpage}% + \EExpand\csname @nc@auxout@\Top\nc@aux@wheel + @inuse@false\endcsname\In {% ########1 + \afterpage{% + \typeout{Finishing. auxout is now \the\@auxout; current spoke + is \csname nc@auxout@\Top\nc@aux@wheel\endcsname\space + with stream number + \the\csname nc@auxout@\Top\nc@aux@wheel @stream\endcsname + }% + \global########1% + }% Afterpage + }% EExpand + }% DefName + }}% EExpand + \fi % \if@filesw + \nc@t@b % surround the \include with something +% \end{macrocode} +% Now execute the text of the optional argument to \cs\include. Notice that if +% we change to a new \ext{aux} file, we should do it before the optional +% argument. This is important so that sectioning commands will appear in the +% right order. If the sectioning command were to write to \cname{@mainaux}, +% then it would come \emph{after} the whole included \ext{aux} file, instead of +% before it. +% \begin{macrocode} + #1% + \@input@{#2.tex}% + \@writeckpt{#2}% + \if@filesw + \csname nc@include@finish@\theIncludeDepth\endcsname + \fi + \nc@t@b % surround the \include with something +% \end{macrocode} +% We mustn't restore the counter before we have finished using it. +% \begin{macrocode} + \addtocounter{IncludeDepth}{\m@ne}% +% \end{macrocode} +% If the file is excluded by the \cs\includeonly command, we don't load it and +% execute the file's checkpoint instead. +% \begin{macrocode} + \else + \@nameuse{cp@#2}% + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Checkpoints} +% +% \begin{macro}{\@writeckpt} +% \begin{macro}{\@wckptelt} +% We must redefine the macros which write the checkpoints. \cname{@auxout} +% is substituted for \cname{@partaux}; I think this change should be in the +% kernel anyway! And we remove the \cs\immediate{}s. +% \begin{macrocode} +\defcommand\@writeckpt [1] {% + \if@filesw + \write\@auxout{\string\@setckpt{#1}\@charlb}% + \begingroup + \let\@elt\@wckptelt + \cl@@ckpt + \endgroup + \write\@auxout{\@charrb}% + \fi +} +\defcommand\@wckptelt [1] {% + \protected@write\@auxout{}{\string\setcounter{#1}{\the\@nameuse{c@#1}}}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Wheels} +% +% \begin{macro}{\InitWheel} +% \begin{macro}{\Roll} +% \begin{macro}{\IfTop} +% \begin{macro}{\Top} +% \begin{macro}{\AddSpokes} +% A wheel is implemented as a macro. The tokens of its first-level expansion +% are the spokes, the top being the first. +% \begin{macrocode} +\newcommand\InitWheel [1] {% args: wheel + \InitCS#1% +} +\newcommand\Roll [1] {% args: wheel + \edef #1{% + \expandafter\nc@roll #1\nc@llor + }% +} +\ReserveCS\nc@llor +\NewNameDef{nc@roll} {#1\nc@llor} {% + \@cdr#1\@nil\@car#1\@nil +} +\newcommand\Top [1] {% args: wheel + \E@car #1\@nil +} +\newcommand\IfTop [4] {% args: wheel token true false + \EExpand#1\In {% + \edef\nc@t@b {% + \expandafter\noexpand\@car##1\@nil + }% + }% +% \end{macrocode} +% At this point, the first-level expansion of \cname{nc@t@b} is a single token, +% the top of the wheel. We \cs\let \cname{nc@t@a} to this token. +% \begin{macrocode} + \Elet\nc@t@a\nc@t@b + \let\nc@t@b #2% + \ifx\nc@t@a\nc@t@b + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} +\newcommand\AddSpokes [2] {% args: wheel spokes + \EExpand#1\In {% + \def #1{#2##1}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} diff --git a/macros/latex/contrib/frankenstein/attrib.ins b/macros/latex/contrib/frankenstein/attrib.ins new file mode 100644 index 0000000000..73c15d446e --- /dev/null +++ b/macros/latex/contrib/frankenstein/attrib.ins @@ -0,0 +1,64 @@ +% attrib.ins -- docstrip driver for the attrib LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + attrib.sty or attrib.stq. This + LaTeX package will work ONLY if it is called attrib.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + attrib.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{attrib.stq}{\from{attrib.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file attrib.stq is a faster replacement for the file} +\Msg{* attrib.sty.} +\Msg{*} +\Msg{* attrib.stq is stripped of comments (documentation) and must be} +\Msg{* renamed attrib.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/attrib.pdf b/macros/latex/contrib/frankenstein/attrib.pdf new file mode 100644 index 0000000000..4da19d03a2 Binary files /dev/null and b/macros/latex/contrib/frankenstein/attrib.pdf differ diff --git a/macros/latex/contrib/frankenstein/attrib.sty b/macros/latex/contrib/frankenstein/attrib.sty new file mode 100644 index 0000000000..e840265b16 --- /dev/null +++ b/macros/latex/contrib/frankenstein/attrib.sty @@ -0,0 +1,549 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% attrib LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, attrib.tex +% and attrib.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{89} +% +% \begin{abstract} +% The \cs\attrib macro attributes block elements, for example when citing a +% reference after a block quotation. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \section{Attributions} +% +% FIX: maybe \cs\attrib when not in a block environment should do this, with +% appropriate hooks added, etc.: use the blkcntrl hooks. and Pre stuff. +% \begin{codeexample} +% \def\attrib [1] {% +% (\begingroup +% \attribcitations +% #1% +% \endgroup +% )% +% } +% \end{codeexample} +% Here's an example of the kind that inspires the question: \code{({\attribcitations +% \citework{3}{unnam}, and see page~\pageref{q:aporia}})}. This way +% \cs\attribcitations and \cs\normalcitations could still be defined only +% within \cs\attrib, which seems the most sensible. +% +% \DescribeMacro\attrib +% I wrote \cs\attrib in order to have an abstract way to attribute the source +% of quotations of prose or verse in an academic style. The formatting is +% that recommended by the \manual, except that attributions of block +% quotations of prose are given flush right, to allow the reader to locate a +% quotation more quickly when returning to the text. +% +% Use \cs\attrib\marg{attribution} at the end of any block of text, +% such as the \env{quote}, \env{quotation}, \env{verse}, and \env{dialogue} +% environments (the last is defined in the \package{dialogue} package, also +% part of the \Frankenstein bundle). +% +% For \env{verse}, you ought to use either a blank line or a final \cs{\\} +% before your attribution. For \env{quote}, \env{quotation}, and +% \env{dialgoue}, don't leave a blank line. +% +% \cs\attrib will place the attribution flush right to the margins of the +% block. If there is enough room on the last line, the attribution will be +% given on the last line, otherwise it moves down to a line of its own. +% +% You can put pretty much anything as the text of the attribution, including +% citations and footnotes. +% +% For those using the \package{achicago} and \package{abbrevs} packages (also +% in the \Frankenstein bundle), \cs\citework works very well. If you're +% using regular \cs\cite or another package, I recommend using the FIX hook +% below to remove the usual parens or braces around citations that occur +% within the \cs\attrib argument. It makes more sense to me that way. +% +% \DescribeMacro\normalcitations +% If parens are normally around citations, they are removed when citations +% occur within attributions. The idea is that you can simply write +% \code{\attrib{\cite{key}}} and what normally surrounds the citation will be +% replaced with \cs\PreTrib and \cs\PostTrib (which of course could be the +% same thing, but doing it this way allows attributions to contain things +% \emph{other} than just a citation and still everything will look right). +% +% Whenever within an attribution you want the normal behavior of citations +% back, write \cs\normalcitations. \cs\normalcitations is automatically used +% within footnotes within attributions; it's used in the \package{epigraph} +% package; and occasionally a user will want to invoke it, when the +% attribution is unusual. I find that most attributions are either just a +% citation, or they do not have a citation at all. Sometimes I've wanted an +% attribution consisting of a citation plus some other text, for which cases +% I provided \cs\normalcitations as a user command. +% +% \todo{Right now the only time there is any concept of ``normal'' or +% altered behavior of \cs\cite commands is with the \package{achicago} +% package. I should make it so that \cs\attrib by default leaves off braces, +% brackets, etc, around citations, for the standard definition of \cs\cite also.} +% +% \DescribeMacro\attribcitations +% +% FIX: dox, example. +% +% \section{Examples} +% Following are several examples that use \cs\attrib. They should be +% self-explanatory. +% +% \begin{bothexample} +% \begin{quotation} +% [My plays] deal with distress. Some people object to this in my writing. +% +% At a party an English intellectual---so called---asked me why I write always +% about distress. As if it were perverse to do so! He wanted to know if my +% father had beaten me or my mother had run away from home to give me an +% unhappy childhood. I told him no, that I had had a very happy childhood. +% Then he thought me more perverse than ever. I left the party as soon as +% possible and got into a taxi. On the glass partition between me and the +% driver were three signs: one asked for help for the blind, another help for +% orphans, and the third for relief for the war refugees. One does not have to +% look for distress. It is screaming at you even in the taxis of London. +% \attrib{\cite[24]{driver:beckett:madeleine}} +% \end{quotation} +% \end{bothexample} +% +% \begin{bothexample} +% \providelength\mtslen +% \newcommand\makethisspace [1] {% +% \settowidth{\mtslen}{#1}% +% \hspace*{\mtslen}% +% } +% \begin{verse} +% \makethisspace{Where Joy for ever dwells:} Hail horrours, hail \\ +% Infernal World, and thou profoundest Hell \\ +% Receive thy new Possessor: One who brings \\ +% A mind not to be chang'd by Place or Time. \\ +% The mind is its own place, and in it self \\ +% Can make a Heav'n of Hell, a Hell of Heav'n. \\ +% What matter where, if I be still the same, \\ +% And what I should be, all but less then he \\ +% Whom Thunder hath made greater? Here at least \\ +% We shall be free; th' Almighty hath not built \\ +% Here for his envy, will not drive us hence: \\ +% Here we may reign secure, and in my choyce \\ +% To reign is worth ambition though in Hell: \\ +% Better to reign in Hell, then serve in Heav'n. +% +% \attrib{\book{Paradise Lost} 1.250--63, +% \cite{milton:riverside:paralost}} +% \end{verse} +% \end{bothexample} +% +% You can have a footnote inside the attribution. The boxed example below is +% meant to approximate a whole page (that is, the footnote appears at the +% bottom of the page, not directly underneath the quotation). +% \begin{bothexample} +% \begin{verse} +% Jacke boy, ho boy newes,\\ +% \quad the cat is in the well,\\ +% let us ring now for her Knell,\\ +% \quad ding dong ding dong Bell. +% +% \attrib{\cite[149]{opie:nursery}\footnote {% +% Perhaps more familiar is the nursery rhyme that begins ``Ding, +% dong, bell, / Pussy's in the well,'' which Opie and Opie also cite. It does +% not seem clear in that rhyme, however, without contextual knowledge, that the +% cat has died and the bell rings its knell.}} +% \end{verse} +% \end{bothexample} +% +% Here is a quotation from \citeNP{beckett:watt}: +% \begin{bothexample} +% \newwork\watt{Watt} +% \begin{quote} +% One day Watt, coming out from behind a bush, almost ran into Mr~Knott, +% which for an instant troubled Watt greatly, for he had not quite finished +% adjusting his dress. But he need not have been troubled. For Mr~Knott's +% hands were behind his back, and his head bowed down, towards the ground. +% Then Watt in his turn looking down at first saw nothing but the short green +% grass, but when he had looked a little longer he saw a little blue flower +% and close by a fat worm burrowing into the earth. So this was what had +% attracted Mr~Knott's attention, perhaps. So there for a short time they +% stood together, the master and the servant, the bowed heads almost touching +% \lips, until the worm was gone and only the flower remained. One day the +% flower would be gone and only the worm remain, but on this particular day +% it was the flower that remained, and the worm that went. And then Watt, +% looking up, saw that Mr~Knott's eyes were closed, and heard his breathing, +% soft and shallow, like the breathing of a child asleep. +% \attrib{\citework{145--46}{watt}} +% \end{quote} +% \end{bothexample} +% +% Finally, here's a very simple example from the same book. When the context +% is clear, you might just want page numbers in the attribution. +% \begin{bothexample} +% \begin{quote} +% For Watt now found himself in the midst of things which, if they +% consented to be named, did so as it were with reluctance.\lips Looking at +% a pot, for example, \lips it was in vain that Watt said, Pot, pot. Well, +% perhaps not quite in vain, but very nearly. \lips It resembled a pot, it +% was almost a pot, but it was not a pot of which one could say, Pot, pot, +% and be comforted. It was in vain that it answered, with unexceptionable +% adequacy, all the purposes, and performed all the offices, of a pot, it +% was not a pot. And it was just this hairbreadth departure from the +% nature of a true pot that so excruciated Watt\lips. For he could always +% hope, of a thing of which he had never known the name, that he would +% learn the name, some day, and so be tranquillized. +% +% \attrib{81--82} +% \end{quote} +% \end{bothexample} +% +% Here's an example of use with the \env{dialogue} environment. Not much +% different than the others, but the quotes are nice, and I'll demonstrate a +% use of \cs\normalcitations. \refer{b}'s speeches are interspersed through +% the play with \refer{a}'s and \refer{c}'s, but it's interesting to read them +% consecutively. +%\begin{bothexample} +% \begin{dialogue} +% \speak{b} on the stone together in the sun on the stone at the edge of the +% little wood and as far as eye could see the wheat turning yellow vowing every +% now and then you loved each other just a murmur not touching or anything of +% that nature you one end of the stone she the other long low stone like +% millstone no looks just there on the stone in the sun with the little wood +% behind gazing at the wheat or eyes closed all still no sign of life not a +% soul abroad no sound +% +% \speak{b} all still just leaves and ears and you too still on the stone in a +% daze no sound not a word only every now and then to vow you loved each other +% just a murmur one thing could ever bring tears till they dried up altogether +% that thought when it came up among the others floated up that scene +% +% \speak{b} on the stone in the sun gazing at the wheat or the sky or the eyes +% closed nothing to be seen but the wheat turning yellow and the blue sky +% vowing every now and then you loved each other just a murmur tears without +% fail till they dried up altogether suddenly there in whatever thoughts you +% might be having whatever scenes perhaps way back in childhood or the womb +% worst of all or that old Chinaman long before Christ born with long white +% hair +% +% \speak{b} no sight of the face or any other part never turned to her nor she to +% you always parallel like on an axle-tree never turned to each other just +% blurs on the fringes of the field no touching or anything of that nature +% always space between if only an inch no pawing in the manner of flesh and +% blood no better than shades no worse if it wasn't for the vows +% +% \speak{b} \lips on the fringe of the field and every now and then in the great +% peace like a whisper so faint she loved you +% +% \attrib{\play{That Time}{} \normalcitations\cite{beckett:csp:that}} +% \end{dialogue} +% \end{bothexample} +% +% \section{Programmer's Interface} +% +% You might want to use \cs\attrib as part of some other command you define. +% For example, I wrote a command for epigraphs, +% \cs\epigraph\marg{text}{attribution}, which used \cs\attrib internally. For +% this type of thing, and also in general I suppose, you might want to change +% the behavior of \cs\attrib. +% +% \DescribeMacro\AttribMinSkip +% \cs\AttribMinSkip is a length, the minimum amount of horizontal space that +% must come after any previous text and before the attribution. The default +% value is \code{2em}. +% +% \DescribeMacro\PreTrib +% \DescribeMacro\PostTrib +% When you write \cs\attrib{attribution}, \cs\PreTrib will immediately +% precede \meta{attribution} and \cs\PostTrib will immediately follow it. +% Notice how the attributions in the examples above were in parentheses, but +% we didn't have to write them. The default value of \cs\PreTrib is a left +% parenthesis and the default value of \cs\PostTrib is a right parenthesis. +% \cs\PreTrib and \meta{attribution} are executed inside a group that doesn't +% include \PostTrib, and \cs\PostTrib is executed in a group all by itself, +% like this: \code{{\PreTrib\relax#1}{\PostTrib}}. Honestly I can't tell +% you right now why it's done this way, but I'm sure I have some good reason +% for it! +% +% \DescribeMacro\AttribInit +% \cs\AttribInit is an hook, empty by default, that gets executed after some +% standard setup but before the core of the \cs\attrib macro. It is executed +% within a group that includes \cs\PreTrib, \meta{attribution}, and +% \cs\PostTrib, so perhaps it is appropriate for a font style change or +% something (I haven't made use of it myself). +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{attribution of block elements (Frankenstein's hat)} +\def\DoXPackageS {attrib,dialogue} +\def\initelyHavECitationS {} +\def\fileversion{v1.3} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{attrib}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \begin{macrocode} +\RequirePackage{moredefs} +% \end{macrocode} +% +% \section{Macros} +% +% \begin{macro}{\AttribMinSkip} +% \begin{macro}{\PreTrib} +% \begin{macro}{\PostTrib} +% \mbox{} +% \begin{macrocode} +\newlength{\AttribMinSkip} + \setlength{\AttribMinSkip}{2em} +\newcommand\PreTrib {% + (% +} +\newcommand\PostTrib {% + )% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\AttribInit} +% \begin{macro}{\at@init} +% This heart of this code is from the \TeX book \cite[106]{knuth:texbook}. +% If you contribute anything to the horizontal or vertical list before the +% \cs\unskip, it will cancel the effect of the \cs\unskip. You probably +% don't want to do that. +% \begin{macrocode} +\ReserveCS\AttribInit +\newcommand\at@init {% + \SaveCS\footnote + \def\footnote {% + \normalcitations\MDSavedfootnote + }% + \attribcitations +% \end{macrocode} +% If there's a blank line before the \cs\attrib, we want to leave \cs\parskip +% extra space above. +% \begin{macrocode} + \ifhmode + \unskip + \fi + \AttribInit +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\attribcitations} +% Sets up citations for within an attrib-like environment. Should probably +% be called within a group. +% \begin{macrocode} +\newcommand\attribcitations {% + \SaveCS\PreCiteWork + \SaveCS\PostCiteWork + \def\PreCiteWork {% + \csname + }% + \def\PostCiteWork {% + \relax\end{lrbox}\usebox{\sc@box@a}% + }% + \SaveCS\PreCite + \SaveCS\PostCite + \let\PreCite\ShortEmpty + \let\PostCite\ShortEmpty +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\normalcitations} +%% FIX +% Would you ever want this and \cs\attribcitations defined outside of the scope +% of an \cs\attrib? Perhaps \cs\let it to a warning outside of \cs\attrib. +% \begin{macrocode} +\newcommand* \normalcitations {% + \RestoreCS\PreCite + \RestoreCS\PostCite + \RestoreCS\PreCiteWork + \RestoreCS\PostCiteWork +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\attrib} +% Knuth says that \cs\vadjust is more efficient here than \cs\hbox, but I +% don't understand why: I guess it's simply a trivial non-discardable item on +% the horizontal list \cite[316]{knuth:texbook}. +% FIX: I can get a page break after the text and before the attribution; it's +% happening with attribstar and when the attribution is dropped to the next +% line, but not sure if that's the only case (first quote in ``impotence'' +% section of library copy of dissertation). Also pages 53, 57 of same. +% \begin{macrocode} +\newcommand\attrib [1] {% + \begingroup + \at@init + \nobreak\hfil\penalty50% + \hskip\AttribMinSkip + \vadjust{}\nobreak\hfil + {\PreTrib\relax#1}{\PostTrib}% + \parfillskip\z@ + \nobreak + \finalhyphendemerits0% + \par + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \part{Something you can't use} +% +% \begin{macro}{\attribstar} +% There is one macro, \cs\attribstar, in this package that you can't use +% because you don't have a package that I haven't released yet. I don't want +% to release it because it still has a couple of small but significant +% problems that can lead to mistakes. If I took \cs\attribstar out of this +% package, however, I'd have to maintain two different versions of +% \package{attrib}. So here is a glimpse of a future bright star. +% +% \code{\DescribeMacro\attribstar}\par +% Use this instead of a standard footnote in an attribution when you want the +% note to appear on the page of the quotation. That is, it is not a +% substantive note, but something like ``italics mine'' or ``ellipses in +% original'' which belongs there on the page, not in endnotes, in case +% footnotes are ever moved there. +% \begin{comment} +% \begin{bothexample} +% \begin{quote} +% My mother was deeply religious. So was my brother. He knelt down at his +% bed as long as he could kneel\lips. [They] got no value from their +% religion when they died. At the moment of crisis it had no more depth +% than an old-school tie\lips. When you pass a church on an Irish bus, all +% the hands flurry in the sign of the cross. One day the dogs of Ireland +% will do that too and perhaps also the pigs. +% +% \attribstar{\cite[25]{driver:beckett:madeleine}}{Driver ``reconstructs'' +% Beckett's words ``from notes made immediately after'' their conversation +% \cite[22]{driver:beckett:madeleine}.} +% \end{quote} +% \end{bothexample} +% \end{comment} +% +% \begin{macrocode} +\newcommand\attribstar [2] {% + \begingroup + \addto@macro\PostTrib {% + \normalcitations + \starnote{#2}% + }% + \attrib{#1}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/attrib.tex b/macros/latex/contrib/frankenstein/attrib.tex new file mode 100644 index 0000000000..80300c7b1d --- /dev/null +++ b/macros/latex/contrib/frankenstein/attrib.tex @@ -0,0 +1,67 @@ +% attrib.tex -- documentation for the attrib LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{attrib.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{attrib} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{attrib.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/blkcntrl.ins b/macros/latex/contrib/frankenstein/blkcntrl.ins new file mode 100644 index 0000000000..a7375f32fc --- /dev/null +++ b/macros/latex/contrib/frankenstein/blkcntrl.ins @@ -0,0 +1,64 @@ +% blkcntrl.ins -- docstrip driver for the blkcntrl LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + blkcntrl.sty or blkcntrl.stq. This + LaTeX package will work ONLY if it is called blkcntrl.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + blkcntrl.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{blkcntrl.stq}{\from{blkcntrl.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file blkcntrl.stq is a faster replacement for the file} +\Msg{* blkcntrl.sty.} +\Msg{*} +\Msg{* blkcntrl.stq is stripped of comments (documentation) and must be} +\Msg{* renamed blkcntrl.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/blkcntrl.pdf b/macros/latex/contrib/frankenstein/blkcntrl.pdf new file mode 100644 index 0000000000..4aff99f658 Binary files /dev/null and b/macros/latex/contrib/frankenstein/blkcntrl.pdf differ diff --git a/macros/latex/contrib/frankenstein/blkcntrl.sty b/macros/latex/contrib/frankenstein/blkcntrl.sty new file mode 100644 index 0000000000..b313925e20 --- /dev/null +++ b/macros/latex/contrib/frankenstein/blkcntrl.sty @@ -0,0 +1,298 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% blkcntrl LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, blkcntrl.tex +% and blkcntrl.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{97} +% +%^^A** abstract +% \begin{abstract} +% Inserts hooks into certain block elements and footnotes. Also provides a +% command to set block quotations one size smaller than the main text. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \section{General} +% +% This package has two purposes. First, it inserts several hooks into +% constructs in the standard document classes so that other packages can use +% the hooks. The \package{achicago}, \package{attrib}, \package{dialogue}, and +% \package{bits} packages in the \Frankenstein bundle require +% \package{blkcntrl}. Second, \package{blkcntrl} offers one option itself that +% uses the hooks. The \option{smallblocks} option has the same effect as using +% \cs\smallblocks in the preamble, for which see below. The +% \option{normalblocks} option means no \cs\smallblocks, and is there simply +% for completeness. +% +%% FIX; using smallblocks option gives option clash when other packages require +% blkcntrl. Do thorough review of option passing. +% +% \DescribeMacro\smallblocks +% When \cs\smallblocks is declared in the preamble, footnotes and the block +% elements \env{quote}, \env{quotation}, and \env{verse} are set one size +% smaller (i.e., \code{\relsize{-1}}). +% +% \DescribeMacro\normalblocks +% +% \section{Programmers' interface} +% +% \DescribeMacro\PreChunk +% +% \DescribeMacro\PreQuote +% +% \DescribeMacro\PreQuotation +% +% \DescribeMacro\PreVerse +% +% \DescribeMacro\PreFootnote +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{block control} +\def\DoXPackageS {} +\def\fileversion{v1.2} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{blkcntrl}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Requirements} +% +% \begin{macrocode} +\RequirePackage{moredefs,relsize} +% \end{macrocode} +% +% \section{Options} +% +% \begin{macro}{\normalblocks} +% \begin{macro}{\smallblocks} +% \begin{macro}{\if@smallblocks@} +% \begin{macro}{\@smallblocks@true} +% \begin{macro}{\@smallblocks@false} +% \mbox{} +% \begin{macrocode} +\DeclareBooleanUserOptions{smallblocks}{normalblocks} +\@onlypreamble\smallblocks +\@onlypreamble\normalblocks +\ExecuteOptions{normalblocks} +\ProcessOptions +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{General get-control hook hacks} +% +% \begin{macro}{\if@in@footnote@} +% \begin{macro}{\@in@footnote@true} +% \begin{macro}{\@in@footnote@false} +% \begin{macro}{\PreFootnote} +% \begin{macro}{\PreChunk} +% \begin{macro}{\PreQuote} +% \begin{macro}{\PreQuotation} +% \begin{macro}{\PreVerse} +% Additions to these hooks should be made with \cname{\addto@macro}. +% Deletions should be accomplished by scoping. +% +% I think macros are much more convenient as hooks than tokens. I use the +% prefixes |Pre| or |Post|. We want to add a hook to the usual definition +% here, to gain some control over relative sizing in footnotes. +% \begin{macrocode} +\newboolean{@in@footnote@} +\newcommand\PreFootnote {% + \@in@footnote@true +} +\ReserveCS\PreChunk +\newcommand\PreQuote {% + \PreChunk +} +\newcommand\PreQuotation {% + \PreChunk +} +\newcommand\PreVerse {% + \PreChunk +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@makefntext} +% All we're doing is adding the \cs\PreFootnote hook. +% \begin{macrocode} +\defcommand\@makefntext [1] {% + \setlength\parindent{\@ne em}% + \noindent + \hb@xt@ 1.8em{\hss\@makefnmark}% + {\PreFootnote #1}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{verse} +% \begin{environment}{quotation} +% \begin{environment}{quote} +% Again all we're doing to these environments is adding the hooks. +% +% The hook cannot be put into the second argument, which is called before the +% paragraph preceding the environment has been ended (unless the environment +% started a new one). +% \begin{macrocode} +\renewenvironment{verse} + {\let\\\@centercr + \relax\list{}{\setlength{\itemsep}{\z@}% + \setlength{\itemindent}{-1.5em}% + \setlength{\listparindent}{\itemindent}% + \setlength{\rightmargin}{\leftmargin}% + \addtolength{\leftmargin}{1.5em}}% + \item\relax\PreVerse\relax} + {\endlist} +\renewenvironment{quotation} + {\list{}{\setlength{\listparindent}{1.5em}% + \setlength{\itemindent}{\listparindent}% + \setlength{\rightmargin}{\leftmargin}% + \setlength{\parsep}{\z@ \@plus\p@}}% + \item\relax\PreQuotation\relax} + {\endlist} +\renewenvironment{quote} + {\list{}{\setlength{\rightmargin}{\leftmargin}}% + \item\relax\PreQuote\relax} + {\endlist} +% \end{macrocode} +% \end{environment} +% \end{environment} +% \end{environment} +% +% \begin{macrocode} +\AtBeginDocument {% + \if@smallblocks@ + \addto@macro\PreChunk {% + \if@in@footnote@ + \else + \relsize{-1}% + \fi + }% + \fi +} +% \end{macrocode} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/blkcntrl.tex b/macros/latex/contrib/frankenstein/blkcntrl.tex new file mode 100644 index 0000000000..19e31d3da4 --- /dev/null +++ b/macros/latex/contrib/frankenstein/blkcntrl.tex @@ -0,0 +1,67 @@ +% blkcntrl.tex -- documentation for the blkcntrl LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{blkcntrl.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{blkcntrl} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{blkcntrl.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/compsci.cfg b/macros/latex/contrib/frankenstein/compsci.cfg new file mode 100644 index 0000000000..9cae918c1b --- /dev/null +++ b/macros/latex/contrib/frankenstein/compsci.cfg @@ -0,0 +1,66 @@ +% \iffalse +%% +% Even if you don't want any code in this file, leave the empty file, or else +% loading the \package{compsci} package will consume extra time as it searches +% for this file. +%% +% \fi +% \begin{macrocode} +\def\fileinfo{Compsci package configuration} +\def\fileversion{v1.2} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +% \end{macrocode} +% +% \AddToCheckSum{45} +% +% \begin{macrocode} +\ProvidesFile{compsci.cfg} +% \end{macrocode} +% +% \begin{macro}{\ALaTeX} +% \begin{macro}{\Frankenstein} +% \begin{macro}{\monster} +% \begin{macro}{\CTAN} +% \begin{macro}{\kpse} +% \begin{macro}{\gemacs} +% \begin{macro}{\auctex} +% \begin{macro}{\nts} +% \begin{macro}{\MakeIndex} +% \begin{macro}{\etex} +% \begin{macro}{\LaTeXiii} +% \begin{macro}{\idvi} +% Various program names. +% \begin{macrocode} +\newprogram\Frankenstein{Frankenstein} +\newlet\monster\Frankenstein +% \end{macrocode} +% \todo{Hmm, \ALaTeX{} kernel uses \cs\DeclareRobustCommand. What does +% \LaTeX{} kernel do?} +% \begin{macrocode} +%\requirecommand\ALaTeX {% +\defcommand\ALaTeX {% + A\LaTeX% +} +\newabbrev\ctan{CTAN} +\newprogram\kpse{kpathsea} +\newprogram\gemacs{\textrm{GNU} Emacs} +\newprogram\auctex{AUC-\TeX} +\newprogram\nts{$\cal NTS$} +\newprogram\MakeIndex{{\normalshape\em Makeindex\/}} +\newprogram\etex{e-\TeX} +\newprogram\LaTeXiii{\LaTeX~3} +\newprogram\idvi{IDVI} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} diff --git a/macros/latex/contrib/frankenstein/compsci.ins b/macros/latex/contrib/frankenstein/compsci.ins new file mode 100644 index 0000000000..dd56d978f4 --- /dev/null +++ b/macros/latex/contrib/frankenstein/compsci.ins @@ -0,0 +1,64 @@ +% compsci.ins -- docstrip driver for the compsci LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + compsci.sty or compsci.stq. This + LaTeX package will work ONLY if it is called compsci.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + compsci.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{compsci.stq}{\from{compsci.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file compsci.stq is a faster replacement for the file} +\Msg{* compsci.sty.} +\Msg{*} +\Msg{* compsci.stq is stripped of comments (documentation) and must be} +\Msg{* renamed compsci.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/compsci.pdf b/macros/latex/contrib/frankenstein/compsci.pdf new file mode 100644 index 0000000000..745cae4008 Binary files /dev/null and b/macros/latex/contrib/frankenstein/compsci.pdf differ diff --git a/macros/latex/contrib/frankenstein/compsci.sty b/macros/latex/contrib/frankenstein/compsci.sty new file mode 100644 index 0000000000..f01f9523b1 --- /dev/null +++ b/macros/latex/contrib/frankenstein/compsci.sty @@ -0,0 +1,1124 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% compsci LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, compsci.tex +% and compsci.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{620} +% +% \begin{abstract} +% \package{Compsci} is useful whenever writing about programming, but +% especially when writing about \TeX{} and especially when used as a supplement +% to the \class{ltxdoc} class to document \LaTeX{} macros in a literate +% programming style with \ext{dtx} files. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \section{Textual elements} +% +% \DescribeMacro{\env} +% \cs\env\marg{environment name} typesets the name of a \LaTeX{} environment. +% For example, the \env{enumerate} environment. +% \todo{Add \cs\bib how about?} +% +% \DescribeMacro{\bst} +% \cs\bst\marg{bibstyle name} typesets the name of a \BibTeX{} bibliography +% style. For example, the \bst{achicago} bibstyle. +% +% \DescribeMacro{\package} +% \cs\package\marg{package name} typesets the name of a \LaTeX{} package. +% For example, the \package{compsci} package. +% +% \DescribeMacro{\class} +% \cs\class\marg{class name} typesets the name of a \LaTeX{} class. For +% example, the \class{letter} class. +% +% \DescribeMacro{\file} +% \cs\file\marg{file name} typesets the name of a disk file. +% For example, the file \file{Makefile.in}. +% \todo{Should I use url.sty's \cs\path command for this?} +% +% \DescribeMacro{\ext} +% \cs\ext\marg{extension} typesets the name of a disk file extension. For +% example, the extension \ext{dvi}. The argument should not include the dot +% that separates the root name from the extension. The dot can be inserted +% by the macro if you want it. +% +% \DescribeMacro{\caveat} +% \DescribeEnv{warning} +% \cs\caveat\marg{warning text} typesets warning paragraphs. +% You can also enclose the \meta{warning text} in a \env{warning} +% environment. Using the \env{warning} environment is necessary if the +% \meta{warning text} is to include \code{|...|}s, a \env{codeexample} +% environment or other ``verbatim'' constructs. +% +% \caveat{This is an example \cs\caveat or \env{warning} environment.} +% +% \DescribeMacro\todo +% \DescribeEnv{todoenv} +% The \cs\todo\marg{text} command and the \env{todoenv} environment are +% analogous to \cs\caveat and \env{warning}, but they typeset paragraphs of a +% task ``to do''. +% +% \todo{This is an example \cs\todo or \env{todoenv} environment.} +% +% \DescribeMacro{\code} +% \DescribeMacro{\code*} +% \DeleteShortVerb{\|} +% \DescribeMacro{|...|} +% \cs\code\marg{verbatim text} and \code{|}\meta{verbatim text}\code{|} +% typeset short pieces of code verbatim. For example, +% \code+|{{+\code{@#%$^\|} looks like ^^A $}} for emacs +%^^A Dang tricky to give a tricky example! +% \begingroup +% \def~{\char`\\}% +% \makeatother +% \catcode`\[=1\catcode`\]=2\catcode`\{=12\relax +% \catcode`\#=12 +% \catcode`\+=14 + +% \catcode`\$=12 + +% \catcode`\^=12 + +% \catcode`\%=12 \fbox[\ttfamily {{@#%$^~]\endgroup. ^^A for emacs $ +% +% Instead of matching curly braces, any two identical characters, even a +% space, may be used to contain the \meta{verbatim} after the \cs\code +% command. +% +% \todo{Implement \cname{code*}. Like \cname{verb*}, \cname{code*} marks +% spaces explicitly. This is not an example todo, this is a real one for the +% \package{compsci} package!} +% \MakeShortVerb{\|} +% +% \DescribeMacro{\typeset} +% \cs\typeset\marg{text} typesets \meta{text} in a normal way, but indicates +% by boxing that the contents are an example of how some piece of code +% actually appears. For example, \code{this} looks like \typeset{this} when +% typeset. +% +% \DescribeEnv{typesetexample} +% These example environments may be used to present a piece of source code +% and what it looks like when typeset. The \env{typesetexample} environment +% typesets its contents like \cs\typeset except they are set off in their own +% indented block element instead of being boxed. +% +% \begin{typesetexample} +% This is an example of the \env{typesetexample} environment. +% \end{typesetexample} +% +% \DescribeEnv{codeexample} +% \DescribeEnv{codeexample*} +% \DescribeEnv{codeexamplex} +% \DescribeEnv{codeexamplex*} +% The \env{codeexample} and +% \env{codeexample*} environments are similar analogs of \cs\code and +% \cname{code*}. The \env{codeexamplex} environment is like the +% \env{codeexample} environment except that |\|, |{|, |}| have their usual +% meanings. Inside the argument, \cs\\ produces a typeset backslash. +% \begin{codeexample} +% This is a \env{codeexample} environment: \(\int e^x\,dx\) {}{{{!#@$%^&\ +% There is a percent sign in the source after the $. +% \end{codeexample} +% +% \begin{codeexample*} +% This is a \env{codexample*} environment: \(\int e^x\,dx\) {}{{{!#@$%^&\ +% Someday I would like to get rid of the leading spaces in a line. +% \end{codeexample*} +% +% \begin{codeexamplex} +% This is a \env{codeexamplex} environment: \(\int e^x\,dx\) {}{{{}}}!#@$%^&\\ +% The earlier examples had three unmatched open-braces which had to be +% closed in this environment. Also the backslash had to be doubled. +% Percent signs get ignored---a BUG. +% \end{codeexamplex} +% +% \begin{warning} +% The \env{codeexamplex} environment ideally should ignore \code{%}s in the +% first column and print all others. The best I can do for the moment is +% to ignore \emph{all} \code{%}s. +% \end{warning} +% +% \DescribeEnv{bothexample} +% \DescribeEnv{bothexample*} +% The \env{bothexample} and \env{bothexample*} environments typeset their +% contents two times, side by side. The left side is set like either a +% \env{codeexample} or \env{codeexample*} environment, and the right side is +% set like a \env{typesetexample} environment. +% +% I find setting a line width of 65 characters in your editor helps keep +% this kind of example from bleeding to the right. +% +% \begin{bothexample} +% This is one part of a \env{bothexample} environment: +% \(\int e^x\,dx\) \fbox{jub-jub} \par +% The contents must not contain any \LaTeX{} errors. +% +% There is an annoying \% plus three explicit spaces at the beginning of +% the first part. They are a bug! Also notice also the missing percent +% sign after the backslash after ``annoying''---another bug that affects +% the verbatim part only. +% \end{bothexample} +% +% \DescribeEnv{splitexample} +% \DescribeEnv{splitexample*} +% The \env{splitexample} environment takes an argument which is used on the +% right side (the typeset side) of an element that looks like +% \env{bothexample}. The contents of the environment are set on the left +% side. This is a way to cheat, making the right side something other than +% the strict tyepsetting of what's on the left. +% +% \begin{warning} +% The \env{splitexample} and \env{bothexample} environments \emph{execute} +% example code. The example code is executed in a group, but be careful +% with global assignments, and with assignments that might screw up the +% example environment itself before the group ends. Notice that +% \cs\setcounter is global. +% \end{warning} +% +% The \env{bothexample} and \env{splitexample} environments use an auxiliary +% file with extension \ext{vrb}, but a second pass with \LaTeX{} is not +% necessary. +% +% \todo {Implement \env{splitexample} and \env{splitexample*}.} +% +% \todo {Get the \env{bothexample} sub-environments side by side! Right now +% they are sequential. I recommend keeping line length inside this +% environment less than 40, however, in case the side-by-side presentation is +% ever possible. I have not followed this advice myself.} +% +% \todo {Implement \env{codeexamplex*}.} +% +% \caveat{The \env{bothexample} environment is working nicely now, but I have +% not even touched the other complicated verbatim-like environments, so they +% might be broken.} +% +% \DescribeMacro{\url} +% \DescribeMacro{\email} +% \DescribeMacro{\path} +% \DescribeMacro{\file} +% The \package{compsci} package uses the \package{url} package by Donald +% Arseneau to handle the typesetting of URLs, email addresses, and filesystem +% paths. See that package for details of how line breaks are handled within +% these elements. +% +% \DescribeMacro{\option} +% \cs\option\marg{option name} typesets the name of a package or class +% option. For example, the \option{landscape} option. +% +% \DescribeMacro{\program} +% \cs\program\marg{program name} typesets the name of a computer program. +% For example the \program{xdvi} program. See also \cs\newprogram below. +% +% \DescribeMacro{\lips} +% The \package{compsci} package uses the \package{lips} package, so you can +% use the \cs\lips command for text ellipses. My love is like a red red rose +% \lips. +% +% \DescribeMacro{\book} +% The \package{compsci} package uses the \package{titles} package, so several +% commands like \cs\book are available. +% +% \section{Referring to commands} +% +% \DeleteShortVerb{\|} +% \DescribeMacro{\cs} +% \DescribeMacro{\cmd} +% \cs\cs\marg{command sequence} typesets a command sequence, such as the one +% that starts this sentence. \cs\cmd does the same thing. For example, +% \code{\cs\foo} looks like \typeset{\cs\foo}. When writing, e.g., +% \code{\cs\foo} the following spacing is automatically handled. The result +% doesn't look different from using the \code{|...|} or \cs\code syntax, but +% the markup allows the parsing of the macro name itself for some future +% purpose such as indexing. +% +% \MakeShortVerb{\|} +% +% \begin{warning} +% You cannot say \code{\cs\foo@bar} when |@| is not a letter (category code +% 11), you must say \code{\cs{\foo@bar}} or \code{\cname{foo@bar}} instead. +% +% Nor can you say \code{\cs\par}. It trips on \cname{text@command}. +% +% Nor can you say \code{\cs\iffoo}. Use \code{\cname{iffoo}} instead. +% \end{warning} +% +% \DescribeMacro{\cname} +% \cs\cname\marg{command name} is like \cs\cs but its argument is evaluated +% and prefixed with a backslash character. For example, writing +% |\cname{@tfor}| gives you \typeset{\cname{@tfor}}. +% +% \DescribeMacro{\marg} +% \DescribeMacro{\oarg} +% \cs\marg\marg{mandatory argument} typesets a mandatory argument, and +% \cs\oarg\marg{optional argument} typesets an optional argument. For +% example, These macros are defined with \cs\meta, so you can use |\\| for a +% typeset backslash. +% \begin{bothexample} +% \cs\GobbleMOM\marg{first arg}\oarg{optional second arg}\marg{third arg} +% \end{bothexample} +% +% \DescribeMacro{\meta} +% \cs\meta\marg{text} refers to a syntactic placeholder. You would use this +% for example to talk about one of the arguments of a command you've +% introduced, like \meta{text} above, which can contain normal text but is +% broken across lines only at spaces. Within the argument |\\| is a typeset +% backslash. +% +% \section{Miscellaneous} +% +% \DescribeMacro{\newprogram} +% The \package{compsci} package uses the \package{abbrevs} package to define +% the |Program| category of abbreviation. Use +% \cs\newprogram\marg{\\csname}\marg{initial expansion}\oarg{subsequent +% expansion} to define a new abbreviation \marg{\\csname} for a program. +% +% \DescribeMacro{\ProcessDTXFile} +% \cs\ProcessDTXFile can be used by a documentation driver file of the kind +% you might be inclined to make using the \package{doc} package. Its purpose +% is to be able to load a package up to a certain point so that just +% descriptive information can be read without reading in the whole file. +% \cs\ProcessDTXFile\marg{filename} defines the variable +% \cs\JusTLoaDInformatioN and inputs the file \meta{filename}. To be useful, +% the file must have a statement that branches on whether +% \cs\JusTLoaDInformatioN is defined. For an example of its use, see the +% present package. +% +% \DescribeMacro{\MaybeBibliography} +% +% Sorry, you will need to look at the source below. +% +% \DescribeMacro{\AddToCheckSum} +% \cs\AddToCheckSum\marg{number} simply adds \meta{number} globally to the +% checksum counter implemented in the \package{doc} package. This macro +% finds applications when the sources of a package are spread over one or +% more files such as configuration files or files concatenated by a +% \program{Make} process. For an example of its use, see the present package. +% +% \DescribeMacro{\BibTeX} +% The \BibTeX{} logo is provided if it isn't already defined. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{macros for writing about macros (Frankenstein's conscience)} +\def\DoXPackageS {} +\def\fileversion{v1.2} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{compsci}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Requirements and context} +% +% ^^A FIX do check and set boolean for being inside \Doc thing etc. have to +% ^^A branch on all verbatim-like stuff. +% \begin{macrocode} +\RequirePackage{abbrevs,alltt,lips,moredefs,relsize,shortvrb,% + slemph,titles,url,verbatim} +% \end{macrocode} +% +% \section{Hyperlatex option} +% Handle \option{hyperlatex} option here. \todo{Should this inherit globally?} +% Long URLs are so common and screw up LaTeX in the middle of a paragraph that +% a good scheme seems to be to relegate them to footnotes. Make option/switch +% for footnotes and inline. +% +% Actually, when it's a footnote, there's almost never going to be a linebreak, +% unless the url is longer than the textwidth of the footnote...so |\textt{}| +% is probably going to be fine. +% +% Could also use \code{\marginpar{\smaller\url{#1}}}---definitely would have to +% use \cs\url not \cs\textt there. +% +% We undefine \cs\code and \cs\file immediately because we want +% \package{compsci}'s versions not \package{hyperlatex}'s. +% \begin{macrocode} +\DeclareOption{hyperlatex} {% + \FrankenInfo{compsci}{hyperlatex} + \UndefineCS\code + \UndefineCS\file + \AtEndOfPackage { +% \UndefineCS\code hunh????? + \DeleteShortVerb{\|} + \newlet\cs@url\url + \renewcommand*\url [1][] {% + \def\sc@t@a{#1}% + \ifx\sc@t@a\ShortEmpty + \let\sc@t@a\cs@url + \else + \defcommand\sc@t@a [1] {% + #1\footnote{See \texttt{##1}.}% + }% + \fi + \sc@t@a + } + \renewcommand*\email [1][] {% + \def\sc@t@a{#1}% + \ifx\sc@t@a\ShortEmpty + \expandafter\cs@email + \else + #1 \expandafter\cs@email + \fi + } + } +} +\ProcessOptions +% \end{macrocode} +% \todo{Alternative ways to handle things} +% \begin{macrocode} +%% +% \def\sc@t@a {% +% #1% +% \begingroup +% \def\UrlLeft {( see}% +% \def\UrlRight {)}% +% \Url +% }% +%% +% \def\sc@t@a {% +% #1% +% \begingroup +% \def\UrlLeft{\footnote\bgroup}% +% \def\UrlRight {.\egroup}% +% See \Url +% }% +% \end{macrocode} +% +% \section{Textual elements} +% +% \DeleteShortVerb{\|} +% \begin{macro}{\code} +% \begin{macro}{|...|} +% \begin{macro}{\url@ttnobreakstyle} +% We use the \package{url} package to implement \cs\code and the +% \package{shortvrb} package to implement \code{|...|}. There are no +% linebreaks in either. See the respective packages for considerations of +% robustness. +% +% \todo {summarize robustness considerations here.} +% \begin{macrocode} +\MakeShortVerb{\|} +\newcommand*\code {% + \begingroup + \urlstyle{ttnobreak}% + \Url +} +\newcommand\url@ttnobreakstyle {% + \def\UrlFont {\ttfamily}% + \def\UrlSpecials {\do\ {\ }}% + \def\UrlOrds {\do\*\do\-}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \MakeShortVerb{\|} +% +% \begin{environment}{codeexample} +% \begin{environment}{codeexample*} +% What I'm doing here is defining \env{codeexample} and \env{codeexample*} to +% be just like the \package{doc} package's \env{verbatim} and +% \env{verbatim*}. That is, they ignore |%| +% characters at the beginning of lines. +% \begin{macrocode} +\begingroup + \catcode `|=0 + \catcode `[=1 + \catcode `]=2 + \catcode`\{=12 + \catcode`\}=12 + \catcode`\\=12 + |gdef|@xverbatim#1\end{codeexample}[#1|end[codeexample]] + |gdef|@sxverbatim#1\end{codeexample*}[#1|end[codeexample*]] +|endgroup +\newcommand\codeexample {% + \@beginparpenalty + \predisplaypenalty + \@docverbatim + \MacroFont + \frenchspacing + \@vobeyspaces + \@xverbatim +} +\NewName{codeexample*} {} {% + \@beginparpenalty + \predisplaypenalty + \@docverbatim + \MacroFont + \@sxverbatim +} +\newcommand\@docverbatim {% + \trivlist + \item[]% + \if@minipage\else + \vskip\parskip + \fi + \leftskip\@totalleftmargin + \rightskip\z@ + \parindent\z@ + \parfillskip\@flushglue + \parskip\z@ + \@@par + \@tempswafalse + \def\par {% + \if@tempswa + \hbox{}% + \fi + \@tempswatrue + \@@par + \penalty\interlinepenalty + \check@percent + }% + \obeylines + \let\do\do@noligs + \verbatim@nolig@list + \let\do\@makeother + \dospecials +} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \begin{macro}{\MakePercentIgnore} +% \begin{macro}{\MakePercentComment} +% These are defined in the \package{doc} package, which may be loaded. +% \begin{macrocode} +\requirecommand*\MakePercentIgnore{\catcode`\%9\relax} +\requirecommand*\MakePercentComment{\catcode`\%14\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{environment}{codeexamplex} +% The \env{codeexamplex} environment ideally should ignore |%|s in the +% first column and print all others. The best I can do for the moment is to +% ignore |%|s. \todo{use verbatim-write trick} +% \begin{macrocode} +\newenvironment{codeexamplex} {% + \alltt + \def\\{\char`\\}% + \MakePercentIgnore\relax + }{% + \endalltt +} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{typesetexample} +% The \env{typesetexample} environment is simple, it's just the \env{quote} environment. +% \begin{macrocode} +\newenvironment{typesetexample} {% + \quote + }{% + \endquote +} +% \end{macrocode} +% \end{environment} +% +% To implement the \env{bothexample} environments we write out the contents +% of the environment and read them in twice, typesetting them differently +% each time. The \env{verbatimwrite} environment comes from the +% \package{moreverb} package. Reading the text twice seems unavoidable +% because we want to read them with different catcodes each time. +% +% \todo {Figure whether the tab stuff here is going is a help or a +% hindrance.} +% +% \begin{macro}{\verbatim@out} +% \begin{macro}{\end@cs@verbatim@write} +% \begin{macro}{\cs@verbatim@write} +% \begin{macro}{\verbtab@oktrue} +% \begin{macro}{\verbtab@okfalse} +% \begin{macro}{\ifverbtab@ok} +% \begin{macro}{\if@cs@first@line@} +% \begin{macro}{\@cs@first@line@true} +% \begin{macro}{\@cs@first@line@false} +% \begin{macro}{\cs@verbatim@input} +% \begin{macrocode} +\newwrite \verbatim@out +\DefName{end@cs@verbatim@write} {} {% + \immediate\closeout\verbatim@out + \@esphack +} +\defcommand\cs@verbatim@write [1] {% + \@bsphack + \immediate\openout \verbatim@out #1 + \let\do\@makeother\dospecials + \catcode`\^^M\active \catcode`\^^I=12 + \def\verbatim@processline {% + \if@cs@using@doc@ + \immediate\write\verbatim@out{\expandafter\GobbleM\the\verbatim@line}% + \else + \immediate\write\verbatim@out{\the\verbatim@line}% + \fi + }% + \verbatim@start +} +\newboolean{verbtab@ok} +\newboolean{@cs@first@line@} +\ReserveCS\cs@verbatim@input +\@cs@first@line@true +{\catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N + \lowercase{% + \gdef\cs@verbatim@input #1{% + \begingroup + \@verbatim\frenchspacing\@vobeyspaces + \def\verbatim@addtoline##1~{% + \verbatim@line\expandafter{\the\verbatim@line##1}% + }% + \openin\verbatim@in@stream=#1 + \ifeof\verbatim@in@stream + \FrankenError{compsci} + {Can't find file #1!}\@eha + \else + \verbtab@oktrue + \verbatim@line {}% + \def\verbtab@prev@line{PREVINIT~}% + \loop + \read\verbatim@in@stream to \verbtab@line + \ifeof\verbatim@in@stream + \verbtab@okfalse + \else +% \DTypeout{My line is: [\meaning\verbtab@line]}% + \if@cs@first@line@ +% \DTypeout{I'm avoiding printing: [\meaning\verbtab@prev@line]}% + \@cs@first@line@false + \else +% \DTypeout{I'll print: [\meaning\verbtab@prev@line]}% + \expandafter\verbatim@addtoline\verbtab@prev@line + \the\verbatim@line + \par + \verbatim@line {}% + \fi + \let\verbtab@prev@line\verbtab@line + \fi + \ifverbtab@ok \repeat + \closein\verbatim@in@stream + \fi + \endtrivlist + \endgroup + \@doendpe + }% \gdef + }% \lowercase +}% catcodes +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{bothexample} +% \begin{environment}{bothexample*} +% The first \cs\begingroup\lips{}\cs\endgroup I think is necessary to contain +% the verbatim activity. The second is necessary so that activity in the +% example environment does not effect anything outside it. Of course global +% activity will, so be careful! The \cs\minipage effects the second +% group. [Hmm, I don't see a ``second'' group\lips.] +% \begin{macrocode} +\newboolean{@cs@using@doc@} +\newenvironment{bothexample} {% + \@ifundefined{ver@doc.sty} {% + \@cs@using@doc@false + }{% ELSE + \@cs@using@doc@true + } + \par + \begingroup + \cs@verbatim@write{\jobname.vrb} + }{% + \end@cs@verbatim@write + \cs@verbatim@input{\jobname.vrb}% + \endgroup + \par\noindent{\sffamily\larger LOOKS LIKE:}% + \par\smallskip + \noindent\fbox{% + \minipage{\textwidth} + \MakePercentComment + \input{\jobname.vrb}% + \endminipage + }% + \par\medskip +} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \begin{environment}{splitexample} +% \begin{environment}{splitexample*} +% We can't use |#1| in the end-environment part, so we write it out. Again +% we have the problem of |%|s. +% \caveat{This is broken!} ^^A FIX +% ^^A FIX: keep this in step with developments in the presentation of the +% ^^A botheexample stuff. +% \begin{macrocode} +% \newenvironment{gogog}[1] +% {\verbatimwrite{\jobname.vrb}#1} +% {\endverbatimwrite} +\newenvironment{splitexample} [1] {% + \cs@verbatim@write{\jobname.vrb} + #1 + \end@cs@verbatim@write + \codeexample + }{% + \endcodeexample + \par\smallskip + \noindent\fbox{% + \minipage{\textwidth} + \input{\jobname.vrb}% + \endminipage + }% + \par\medskip +} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \begin{macro}{\caveat} +% \begin{environment}{warning} +% \begin{macro}{\cs@caveat} +% \begin{macro}{\todo} +% \begin{environment}{todoenv} +% \begin{macro}{\cs@todo} +% \mbox{} +% \begin{macrocode} +\newcommand\caveat [1] {% + \cs@caveat + #1% + \endgroup + \par +} +\newenvironment{warning} {% + \cs@caveat + }{% + \endgroup + \par +} +\newcommand\cs@caveat {% + \par + \begingroup + \em {\bfseries Warning:}\space +} +\newcommand\todo [1] {% + \cs@todo + #1% + \endgroup + \par +} +\newenvironment{todoenv} {% + \cs@todo + }{% + \endgroup + \par +} +\newcommand\cs@todo {% + \par + \begingroup + \em {\bfseries To do:}\space +} +% \end{macrocode} +% \end{macro} +% \end{environment} +% \end{macro} +% \end{macro} +% \end{environment} +% \end{macro} +% +% \begin{macro}{\program} +% \begin{macro}{\bst} +% \begin{macro}{\class} +% \begin{macro}{\env} +% \begin{macro}{\ext} +% \begin{macro}{\file} +% \begin{macro}{\option} +% \begin{macro}{\package} +% \begin{macro}{\cat} +% \begin{macro}{\typeset} +% Abstract markup of terms and objects. +% \begin{macrocode} +\NewTextFontCommand \program \TMFontProgram % generic name of computer program +\NewTextFontCommand \bst \ttfamily % name of BibTeX bibliography style +\NewTextFontCommand \class \slshape % name of LaTeX class +\NewTextFontCommand \env \ttfamily % name of environment +\NewTextFontCommand \ext \ttfamily % name of file extension +\NewTextFontCommand \option \ttfamily % name of package or class option +\NewTextFontCommand \package \slshape % name of LaTeX package +\NewTextFontCommand \cat \sffamily % name of a category +\newlet \typeset \fbox % text as it appears when typeset +\newlet \file \path % name of disk file +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\email} +% \begin{macro}{\cs@email@nobrace} +% \begin{macro}{\cs@email} +% The \option{hyperlatex} option will change \cs\email at the end of this +% package. +% \begin{macrocode} +\newcommand\cs@email {% + \begingroup + \def\UrlLeft{<}% + \def\UrlRight{>}% + \urlstyle{tt}% + \Url +} +\newcommand\cs@email@nobrace {% + \begingroup +% \def\UrlLeft{<}% +% \def\UrlRight{>}% + \urlstyle{tt}% + \Url +} +\newcommand\email{\cs@email} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \section{Referring to commands} +% +% \begin{macro}{\meta} +% \begin{macro}{\m@ta} +% \begin{macro}{\do@space} +% \begin{macro}{\sp@ce} +% \begin{macro}{\sp@@ce} +% Here I redefine \cs\meta to include a \cs\normalfont right at the beginning +% inside a group, since the command was working strangely when \cs\ttfamily +% was in effect. Also, I redefine |\\| to be a typeset backslash. +% \begin{macrocode} +\begingroup +\obeyspaces% +\catcode`\^^M\active% +\gdef\meta{\begingroup\let\\\textbackslash\normalfont\obeyspaces\catcode`\^^M\active% +\let^^M\do@space\let \do@space% +\def\-{\egroup\discretionary{-}{}{}\hbox\bgroup\itshape}% +\m@ta}% +\endgroup +% \end{macrocode} +% These are simply from the \package{doc} package. +% \begin{macrocode} +\defcommand\m@ta [1] {% + \leavevmode + \hbox\bgroup$\langle$\itshape#1\/$\rangle$\egroup + \endgroup +} +\def\do@space {% + \egroup + \space + \hbox\bgroup\itshape\futurelet\next\sp@ce +} +\def\sp@ce {% + \ifx\next\do@space + \expandafter\sp@@ce + \fi +} +\defcommand\sp@@ce [1] {% + \futurelet\next\sp@ce +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\marg} +% \begin{macro}{\oarg} +% These use \cs\meta and are therefore slightly different than their +% counterparts in \class{ltxdoc}. A tiny bit of breakability is added at the +% beginning. +% \begin{macrocode} +\defcommand*\marg [1] {% + \penalty 9999% + {\ttfamily\char`\{\meta{#1}\char`\}}% +} +\defcommand*\oarg [1] {% + \penalty 9999% + {\ttfamily[\meta{#1}]}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cname} +% \begin{macro}{\cmd} +% \begin{macro}{\cs} +% For referring to a \LaTeX{} macro. The code is a mix from the +% \class{ltxdoc} class and the \package{abbrevs} package. There is no need +% to check for \cs\nocorr commands inside the argument so we skip +% \cs{\text@command}. We might conceivably be in a typewriter slanted, so we +% do check for italic corrections. We don't handle the case of calling this +% in math mode (see the definition of \cs\DeclareTextFontCommand in the +% kernel). +% +% We handle the cases of |\cmd{\foo}| and \cmd\foo differently. The latter +% needs logic to determine the following space, whereas the former does not. +% They both need italic corrections. +% \begin{macrocode} +\NewRobustCommand*\cname [1] {% + \expandafter\code\expandafter{\bslash#1}% +} +\DeclareRobustCommand*\cmd {% + \leavevmode + \@ifnextchar \bgroup + \cs@cmd@grouped + \cs@cmd@ungrouped +} +\newcommand\cs@cmd@grouped [1] {% + \begingroup + \maybe@ic + \code{#1}% + \aftergroup\maybe@ic + \endgroup +} +\newcommand\cs@cmd@ungrouped [1] {% + \begingroup + \maybe@ic + \code{#1}% + \aftergroup\maybe@ic@space + \endgroup +} +\let\cs\cmd +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Miscellaneous} +% +% \begin{macro}{\partname} +% \begin{macro}{\ProcessDTXFile} +% \begin{macro}{\IfJustLoadInformation} +% \begin{macro}{\JusTLoaDInformatioN} +% \begin{macro}{\IfCitations} +% \begin{macro}{\initelyHavECitationS} +% \begin{macro}{\SaveDoXVarS} +% \begin{macro}{\RestoreDoXVarS} +% \begin{macro}{\RestorECitationS} +% \begin{macro}{\AddToCheckSum} +% See the version control section above and all throughout the \Frankenstein +% bundle for examples of when you might want to use these commands. +%% +% ^^A FIX Add ltxdoc check for addtochecksum? +% \begin{macrocode} +\def\partname {% + Part% +} +% \end{macrocode} +% We make sure it's OK to use \cs\def\DoXPackageS multiple times. You might +% need to call packages with options. +% \begin{macrocode} +\newcommand*\ProcessDTXFile [1] {% + \def\filename {#1}% + \def\JusTLoaDInformatioN {}% + \UndefineCS\initelyHavECitationS + \input{#1}% + \UndefineCS\JusTLoaDInformatioN % not necessary in my usage, but safe +} +\newcommand*\IfCitations [1] {% + \@ifundefined{initelyHavECitationS} {% + }{% ELSE + #1\relax + }% +} +\newcommand*\IfJustLoadInformation [1] {% + \@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE + #1\relax + }% +} +\newcommand*\SaveDoXVarS {% + \SaveCS\fileinfo \SaveCS\fileversion + \SaveCS\filedate \SaveCS\docdate + \SaveCS\DoXPackageS + \def\RestorECitationS {% + \UndefineCS\initelyHavECitationS + }% + \IfCitations {% + \let\RestorECitationS\relax + }% +} +\newcommand*\RestoreDoXVarS {% + \RestoreCS\fileinfo \RestoreCS\fileversion + \RestoreCS\filedate \RestoreCS\docdate + \RestoreCS\DoXPackageS + \RestorECitationS +} +\newcommand*\AddToCheckSum [1] {% + \global\advance\check@sum #1% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\newprogram} +% \begin{macro}{\TMFontProgram} +% \begin{macro}{\TMHookProgram} +% \begin{macro}{\TMResetProgram} +% Provide for program abbreviations. +% \begin{macrocode} +\NewAbbrevCategory{Program} +\NewUserAbbrevDefiner{\newprogram}{Program} +\def\TMFontProgram {% + \relsize{-1}\ttfamily +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\BibTeX} +% The \BibTeX{} logo. +% \begin{macrocode} +\providecommand\BibTeX {% + {\rmfamily B\kern-.05em{\scshape i\kern-.025em b}\kern-.08em + T\kern-.1667em\raisebox{-.7ex}{E}\kern-.125emX}% +} +% \end{macrocode} +% \end{macro} +% +% \part{Configuration} +% +% Other things are deferred to a configuration file. +% \begin{macrocode} +\InputIfFileExists{compsci.cfg}{}{} +% \end{macrocode} +% +% The contents of the distributed configuration file are below. +% +% \InputIfFileExists{compsci.cfg}{}{} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/compsci.tex b/macros/latex/contrib/frankenstein/compsci.tex new file mode 100644 index 0000000000..15c25b106f --- /dev/null +++ b/macros/latex/contrib/frankenstein/compsci.tex @@ -0,0 +1,67 @@ +% compsci.tex -- documentation for the compsci LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{compsci.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{compsci} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{compsci.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/dialogue.ins b/macros/latex/contrib/frankenstein/dialogue.ins new file mode 100644 index 0000000000..edb5a74964 --- /dev/null +++ b/macros/latex/contrib/frankenstein/dialogue.ins @@ -0,0 +1,64 @@ +% dialogue.ins -- docstrip driver for the dialogue LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + dialogue.sty or dialogue.stq. This + LaTeX package will work ONLY if it is called dialogue.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + dialogue.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{dialogue.stq}{\from{dialogue.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file dialogue.stq is a faster replacement for the file} +\Msg{* dialogue.sty.} +\Msg{*} +\Msg{* dialogue.stq is stripped of comments (documentation) and must be} +\Msg{* renamed dialogue.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/dialogue.pdf b/macros/latex/contrib/frankenstein/dialogue.pdf new file mode 100644 index 0000000000..4a4f86828a Binary files /dev/null and b/macros/latex/contrib/frankenstein/dialogue.pdf differ diff --git a/macros/latex/contrib/frankenstein/dialogue.sty b/macros/latex/contrib/frankenstein/dialogue.sty new file mode 100644 index 0000000000..190b1be0b7 --- /dev/null +++ b/macros/latex/contrib/frankenstein/dialogue.sty @@ -0,0 +1,273 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% dialogue LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, dialogue.tex +% and dialogue.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{43} +% +%^^A** abstract +% \begin{abstract} +% The \env{dialogue} environment is for citing short passages of scripted +% dialogue. It is not for typsetting a long script. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \section{Dialogue} +% +% An example will have to suffice for most documentation at the moment. +% \cs\attrib is defined in the \package{attrib} package, also in the +% \Frankenstein bundle. +% \begin{bothexample} +% \begin{dialogue} +% \speak{Vladimir} Whare are all these corpses from? +% \speak{Estragon} These skeletons. +% \par\lips\par +% \speak{Vladimir} A charnel-house! A charnel-house! +% +% \attrib{\play{Waiting for Godot}, 41 \normalcitations\cite{beckett:godot}} +% +% \medskip +% \direct{ +% Estragon has exited offstage to right and left and come ``panting'' back +% and fallen into Vladimir's arms. \emph{---Ed.} +% } +% \speak{Estragon} I'm in hell! +% \speak{Vladimir} Where were you? +% \speak{Estragon} They're coming there too! +% \speak{Vladimir} We're surrounded! \direct{\refer{Estragon} makes a rush +% towards back.} Imbecile! There's no way out there. +% \direct{\refer{He} takes \refer{Estragon} by the arms +% and drags him towards front. Gesture towards front.} +% There! Not a soul in sight! Off you go! Quick! +% \direct{\refer{He} pushes \refer{Estragon} towards +% auditorium. \refer{Estragon} recoils in horror.} You +% won't? \direct{\refer{He} contemplates auditorium.} +% Well I can understand that. Wait till I see. +% \direct{\refer{He} reflects.} Your only hope left is to +% disappear. +% +% \attrib{47} +% \end{dialogue} +% \end{bothexample} +% +% \DescribeMacro\direct +% \cs\direct\marg{directions} Inline stage directions. Can be used anywhere. +% +% \DescribeMacro\refer +% \cs\refer\marg{speaker} Refer to a character in a play. Can be used anywhere. +% +% \DescribeEnv{dialogue} +% Inside the \env{dialogue} environment, commands \cs\direct, and \cs\refer +% behave differently, but have the same function. +% +% \DescribeMacro\speak +% \cs\speak\marg{speaker} Introduce the speech of speaker \meta{speaker} +% within a \env{dialogue} environment. +% +% \section{Programmer's interface} +% +% \DescribeMacro\ReferStyle +% \DescribeMacro\DirectStyle +% \DescribeMacro\DialogueLabel +% \DescribeMacro\PreDialogue +% +% These macros are available for adjusting the behavior of the user +% commands. I'm afraid you'll have to read the (easy) code until I write +% better documentation. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{dialogue environment (Frankenstein's mouth)} +\def\DoXPackageS {dialogue,attrib} +\def\initelyHavECitationS {} +\def\fileversion{v1.1} +\def\filedate{1999/03/01} +\def\docdate{1996/04/11} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{dialogue}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Requirements} +% +% \begin{macrocode} +\RequirePackage{blkcntrl,moredefs,relsize} +% \end{macrocode} +% +% \section{The macros} +% +% The standard classes set \cs\partopsep, \cs\parsep, \cs\topsep, and +% \cs\itemsep to positive values. \cs\leftmargin goes to |2.5em| in +% onecolumn. \cs\labelsep is |.5em|; \cs\labelwidth = \cs\leftmargin - +% \cs\labelsep. +% +% \begin{macro}{\refer} +% \begin{macro}{\ReferStyle} +% \begin{macro}{\direct} +% \begin{macro}{\DirectStyle} +% \mbox{} +% \begin{macrocode} +\NewTextFontCommand\refer\ReferStyle + +\newcommand\ReferStyle {% + \scshape +} +\newcommand\direct [1] {% + [{\DirectStyle #1}]% +} +\newcommand\DirectStyle {% + \relsize{-1}% + \slshape +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\DialogueLabel} +% \begin{macro}{\PreDialogue} +% \begin{environment}{dialogue} +% The first line of a new speaker has the speaker's name flush with the left +% margin of the surrounding text, then the default \cs\labelsep, then the +% first line of dialogue. Subsequent lines all begin |2.5em| in, and end +% |2.5em| before the surrounding text. Interparagraph space is the same as +% the surrounding text's. Extra positive stretchability of |.5ex| is added +% between speakers. \todo{Ensure that the units will be relative to the current +% size \emph{in} the environment, not the current size when the setting is +% done.} +% \begin{macrocode} +\newcommand*\DialogueLabel [1] {% + \scshape\lowercase{#1}:\hfil +} +\newcommand\PreDialogue {% + \PreChunk +} +\newenvironment{dialogue} {% + \begin{list}{} {% + \setlength\itemsep{\z@ \@plus .5ex}% + \setlength\parsep{\parskip}% + \setlength\rightmargin{\leftmargin}% + \defcommand\speak [1] {\item[{##1}]}% + \let\makelabel\DialogueLabel + }% + \PreDialogue\relax + }{% + \end{list}% + } +% \end{macrocode} +% \end{environment} +% \end{macro} +% \end{macro} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/dialogue.tex b/macros/latex/contrib/frankenstein/dialogue.tex new file mode 100644 index 0000000000..947cb0ee1a --- /dev/null +++ b/macros/latex/contrib/frankenstein/dialogue.tex @@ -0,0 +1,67 @@ +% dialogue.tex -- documentation for the dialogue LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{dialogue.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{dialogue} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{dialogue.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/frankenstein.bib b/macros/latex/contrib/frankenstein/frankenstein.bib new file mode 100644 index 0000000000..27d598454b --- /dev/null +++ b/macros/latex/contrib/frankenstein/frankenstein.bib @@ -0,0 +1,6378 @@ +@PREAMBLE{ "\hyphenation{pen-guin aes-thetic aes-thet-ics fest-schrift}" } +@PREAMBLE{ "\hyphenation{pen-guin aes-thetic aes-thet-ics fest-schrift}" } +@PREAMBLE{ "\hyphenation{pen-guin aes-thetic aes-thet-ics fest-schrift}" } +@PREAMBLE{ "\hyphenation{pen-guin aes-thetic aes-thet-ics fest-schrift}" } +@PREAMBLE{ "\hyphenation{pen-guin aes-thetic aes-thet-ics fest-schrift}" } +@PREAMBLE{ "\hyphenation{pen-guin aes-thetic aes-thet-ics fest-schrift}" } +@PREAMBLE{ "\hyphenation{pen-guin aes-thetic aes-thet-ics fest-schrift}" } +@STRING{jobs = {Journal of Beckett Studies} } +@STRING{jobsns = {Journal of Beckett Studies, {\normalfont n.s.},} } +@STRING{l-bc = {BC O'Neill} } +@STRING{l-bcburns={BC Burns} } +@STRING{l-bruce = {Bruce Fraser, private collection} } +@STRING{l-hayden= {MIT Hayden} } +@STRING{l-hill = {Geoffrey Hill, private collection} } +@STRING{l-m = {BU Mugar} } +@STRING{l-me = {Matthew Swift, private collection} } +@STRING{l-mmicro= {BU Mugar Micro} } +@STRING{l-mmusic= {BU Music} } +@STRING{l-msy = {BU Special Collection Y} } +@STRING{l-rul = {Reading University Library Beckett Archive} } +@STRING{l-se = {BU Science/Engineering} } +@STRING{l-te = {Tufts Engineering} } +@STRING{l-tw = {Tufts Wessell} } +@STRING{l-unc = {UNC (Chapel Hill) Davis} } +@STRING{l-widener={Harvard Widener} } +@STRING{tbc = {The Beckett Circle: Newsletter of the Samuel Beckett + Society} } + +@Book{ abbey:slickrock, + author = "Edward Abbey and Philip Hyde", + title = "Slickrock", + publisher = "Peregrine Smith", + year = 1987 +} + +@Book{ abbey:solitaire, + author = "Edward Abbey", + title = "Desert Solitaire", + publisher = "Ballantine", + year = 1968 +} + +@Article{ abbott:beckett:grammar, + author = "Porter Abbott, H.", + title = "A Grammar for Being Elsewhere", + journal = "Journal of Modern Literature", + year = 1977, + volume = 6, + number = 1, + pages = "39--46", + month = feb, + invis = "Have photocopy." +} + +@InCollection{ abbott:beckett:harpoon, + author = "Porter Abbott, H.", + title = "The Harpooned Notebook: \book{Malone Dies} and the + Conventions of Intercalated Narrative", + crossref = "beja:beckett:humanistic", + pages = "71--79", + invis = "Have photocopy." +} + +@Book{ abrams:natural, + author = "M. H. Abrams", + title = "Natural Supernaturalism: Tradition and Revolution in + {R}omantic Literature", + publisher = "W.~W. Norton and Co.", + year = 1973, + address = "New York", + call = "PN603.A3 1973", + keywords = "neoplatonism hermetism gnosticism romantic wordsworth + proust", + library = l-me, + annotation = "Sweet book." +} + +@Book{ abrams:romantic, + author = "M. H. Abrams", + title = "The Mirror and the Lamp: {R}omantic Theory and the + Critical Tradition", + publisher = "Oxford University Press", + address = "London", + year = 1953 +} + +@Article{ acheson:beckett:murphy, + author = "James Acheson", + title = "Murphy's Metaphysics", + journal = jobs, + year = 1979, + number = 5, + pages = "9--23", + invis = "Have photocopy." +} + +@Article{ ackerley:beckett:augustine, + author = "Chris Ackerley", + title = "\Wrapquotes{Do Not Despair}: {S}amuel {B}eckett and + {R}obert {G}reene", + journal = jobsns, + year = 1997, + volume = 6, + number = 1, + pages = "119--24", + invis = "Quoting Robert Greene, \Wrapquotes{The Repentance of + Robert Greene}, [1592], in Vol.~12 of \book{The Life and + Complete Works in Prose and Verse of Robert Greene}, edited + by Alexander Grossart (London and Aylesbury: printed for + private circulation, n.d. [1881--86]; reprint, New York: + Russell and Russell, 1964), 151--88 [180--81] FIX what does + last thing mean? I think it means the page range in the + original edition.", + keywords = "augustine beckett thieves theif greene" +} + +@Article{ ackerley:beckett:hiss, + author = "Chris Ackerley", + title = "Samuel {B}eckett's Sibilants; or, Why Does {M}urphy Hiss?", + journal = jobsns, + year = 1998, + volume = 8, + number = 1, + pages = "119-20", + invis = "Have photocopy." +} + +@Book{ ackerley:dp, + author = "C. J. Ackerley", + title = "Demented Particulars: The Annotated \book{Murphy}", + year = 1998, + note = "Published as volume~7 nos. 1--2 of the \journal{Journal of + Beckett Studies}", + invis = "Also published somehow as a ``Journal of Beckett Studies + Book.'' Gontarski's course description on the web gives + details like this: C. J. Ackerley, \book{Demented + Particulars: The Annotated \book{Murphy}}, Journal of + Beckett Studies Books: Tallahassee, FL, 1998." +} + +@Book{ admussen:beckett:manuscripts, + author = "Richard L. Admussen", + title = "The {S}amuel {B}eckett Manuscripts: A Study", + publisher = "G.~K. Hall and Co.", + year = 1979, + address = "Boston", + call = "PR6003.E282Z5623", + library = l-m +} + +@Book{ amiran:beckett:wandering, + author = "Eyal Amiran", + title = "Wandering and Home: {B}eckett's Metaphysical Narrative", + publisher = "Pennsylvania State University Press", + year = 1993, + address = "University Park", + call = "PR6003.E282Z5632 1993", + keywords = "neoplatonism geometry", + library = l-m +} + +@Book{ andonian:beckett:response, + editor = "Cathleen Culotta Andonian", + title = "The Critical Response to Samuel Beckett", + publisher = "Greenwood Press", + year = 1998, + number = 30, + series = "Critical Responses in Arts and Letters", + address = "Westport CT", + call = "PR6003.E282Z6234 1998", + library = l-m +} + +@Article{ anspaugh:beckett:faith, + author = "Kelly Anspaugh", + title = "\Wrapquotes{Faith, Hope, and---What Was It?}: {B}eckett + Reading {J}oyce Reading {D}ante", + journal = jobsns, + year = 1996, + volume = 5, + number = "1--2", + pages = "19--38", + invis = "Have photocopy." +} + +@Book{ aquinas:summa:1, + author = "Aquinas, Thomas, Saint", + title = "Christian Theology ({Ia}. {I})", + volume = 1, + series = "Summa Theologiae", + publisher = "Blackfriars", + address = "Cambridge", + invis = "FIX: check publishers and addresses", + year = 1964, + seriesedition = "60~vols.", + library = l-m +} + +@Book{ argyros:order, + series = "Studies in Literature and Science", + author = "Alex Argyros", + title = "A Blessed Rage for Order", + library = l-m, + call = "B809.6A74 1991", + invis = "FIX Alexander or Alex on title page?", + address = "Ann Arbor", + publisher = "University of Michigan Press", + year = 1991, + annotation = "A devastating attack on deconstruction. Literature + $\rightarrow$ science: all theories of discourse apply to + science. Science $\rightarrow$ literature: science provides + universal context for all discourses. p. 6: ``This book + argues that the only nonmetaphysical way around the impasse + generated by the apotheosis of textuality is through a kind + of foundationalism based on a view of the universe as a + communicative, dynamical, and evolving system. ``Our + awareness of the natural world occurs at many sites within + our individual experience and in human culture {\em in + toto}, and a systematic review of these sites would + certainly include much of what is called the philosophy of + science, and much of what is called poetics and literary + criticism.'' (My note, I think.) ``The difference between + the sciences and arts as they are practiced and theorized + today is exactly that science is conducted in a context + assumed to be manifest, fixed, and interesting, whereas the + arts have lost this context through deconstruction. Each + field has experienced crises which have reconciled these + differences somewhat....'' (my note)." +} + +@Book{ aristophanes:fitts:four, + author = "Aristophanes", + editor = "Dudley Fitts", + title = "Four Comedies", + publisher = "Harcourt Brace Jovanovich", + year = 1962, + address = "San Diego", + annotation = "Includes \play{Lysistrata}, \play{The Frogs}, \play{The + Birds}, and \play{Ladies' Day}" +} + +@Article{ armstrong:beckett:biology, + author = "Gordon Armstrong", + title = "Cultural Politics and the {I}rish Theatre: {S}amuel + {B}eckett and the New Biology", + journal = "Theatre Research International", + year = 1993, + volume = 18, + number = 3, + month = "autumn", + pages = "215--21", + invis = "Have photocopy." +} + +@Book{ atanasijevic:bruno, + author = "Ksenija Atanasijevic", + title = "The Metaphysical and Geometrical Doctrine of {B}runo As + Given in His Work \book{De Triplici Minimo}", + publisher = "Warren H. Green", + year = 1972, + address = "Saint Louis, Missouri", + oyear = 1923, + series = "Modern Concepts of Philosophy", + translator = "George Vid Tomashevich", + call = "B783.D373F72", + library = l-m, + annotation = "Frontmatter filed." +} + +@Book{ auster:nyt, + author = "Paul Auster", + title = "The {N}ew {Y}ork Trilogy", + publisher = "Penguin Books", + year = 1990, + call = "PS3551.U77N49 1990", + library = l-me, + annotation = "City of Glass first in US 1985, Ghosts 1986, The Locked + Room 1986." +} + +@Book{ ayer:perception, + author = "A. J. Ayer and others", + editor = "Graham Macdonald", + title = "Perception and Identity: Essays Presented to {A}.~{J}. + {A}yer, With His Replies", + booktitle = "Perception and Identity: Essays Presented to {A}.~{J}. + {A}yer, With His Replies", + publisher = "Cornell University Press", + year = 1979, + library = l-m +} + +@Book{ baars:plateau, + author = "Donald Baars", + title = "The {C}olorado {P}lateau: A Geologic History", + publisher = "University of New Mexico", + year = 1983 +} + +@Book{ bair:beckett:bio, + author = "Deirdre Bair", + title = "Samuel {B}eckett: A Biography", + publisher = "Summit Books", + year = 1990, + address = "New York", + call = "PR6003.E282Z584 1990 or $\sim$ Z564 1978", + library = l-me, + note = "First published in 1978 by Harcourt Brace Jovanovich (New + York) and Jonathan Cape, but this edition does not appear, + technically, to be a reprint.", + invis = "See reviews in \jobs." +} + +@Book{ baker:beckett:psycho, + author = "Phil Baker", + title = "Beckett and the Mythology of Psychoanalysis", + publisher = "St. Martin's Press", + year = 1997, + address = "New York", + call = "PR6003.E282Z5642 1997", + library = l-m +} + +@Book{ bate:criticism, + title = "Criticism: The Major Texts", + booktitle = "Criticism: The Major Texts", + publisher = "Harcourt Brace Jovanovich", + edition = "Enl.~ed.", + year = 1970, + editor = "Walter Jackson Bate", + address = "San Diego", + library = l-me +} + +@Book{ beckett:company, + title = "Company", + year = 1980, + author = "Samuel Beckett", + publisher = "Grove Press", + address = "New York", + call = "PR6003.E282C65 1980", + library = l-me +} + +@Book{ beckett:company:krance, + author = "Samuel Beckett", + editor = "Charles Krance", + title = "Samuel {B}eckett's + \book{Company}/\linebreak[2]\book{Compagnie} and \play{A + Piece of Monologue}/\linebreak[2]\play{Solo}: A Bilingual + Variorum Edition", + publisher = "Garland Publishing", + year = 1993, + volume = 1400, + series = "Garland Reference Library of the Humanities", + address = "New York", + call = "PR6003.E28C6714 1993", + library = l-me +} + +@Book{ beckett:csp, + author = "Samuel Beckett", + booktitle = "Collected Shorter Plays", + title = "Collected Shorter Plays", + publisher = "Grove Press", + year = 1984, + address = "New York", + library = l-me +} + +@InCollection{ beckett:csp:all, + title = "All That Fall", + crossref = "beckett:csp", + pages = "9--41" +} + +@InCollection{ beckett:csp:krapp, + title = "Krapp's Last Tape", + crossref = "beckett:csp", + pages = "53--63" +} + +@InCollection{ beckett:csp:that, + title = "That Time", + crossref = "beckett:csp", + pages = "225--35" +} + +@Book{ beckett:cspr, + author = "Samuel Beckett", + editor = "S. E. Gontarski", + title = "Samuel {B}eckett: The Complete Short Prose, 1929--1989", + booktitle = "Samuel {B}eckett: The Complete Short Prose, 1929--1989", + publisher = "Grove Press", + year = 1995, + address = "New York", + call = "PR6003.E282A6 1995", + library = l-me +} + +@InCollection{ beckett:dialogues, + title = "Three Dialogues with {G}eorge {D}uthuit", + crossref = "beckett:disjecta", + pages = "138--45", + year = 1949 +} + +@Book{ beckett:disjecta, + author = "Samuel Beckett", + title = "Disjecta: Miscellaneous Writings and a Dramatic Fragment", + booktitle = "Disjecta: Miscellaneous Writings and a Dramatic Fragment", + publisher = "Grove Press", + year = 1984, + editor = "Ruby Cohn", + address = "New York", + library = l-me +} + +@Book{ beckett:dream, + bookauthor = "Samuel Beckett", + author = "Samuel Beckett", + editor = "Eoin O'Brien and Edith Fournier", + title = "Dream of Fair to middling Women", + booktitle = "Dream of Fair to middling Women", + publisher = "Arcade Publishing in association with Riverrun Press", + address = "New York", + year = 1993, + yearcomp = 1932, + call = "PR6003.E282D74 1993", + library = l-me, + invis = "In this edition, references to the title in the + Publisher's Note and the Foreward use a lowercase + `middling'. Copyright date is 1992, but copyright page is + clear on 1993 date of publication. + \citeNP[279]{beckett:cspr} notes: Dublin: The Black Cat + Press, 1992; and New York: Arcade Press, 1993. ISBN for my + (hardcover) edition: 1559702176 (from Amazon). ISBN for + Calder 1993 hardcover: 07145-42121 (from amazon.co.uk and + Calder web). ISBN for Calder 1995 paperback: 07145-4213-X + (from amazon.co.uk)", + annotation = "See \citeNP{gontarski:beckett:editing} and references + therein for discussion of this edition, a preceding edition + from The Black Cat Press (1992), and the manuscript. + Gontarski says, quoting O'Brien in \journal{TLS}: {" +} + +@Book{ beckett:eleu, + author = "Samuel Beckett", + title = "Eleuth{\'e}ria: A Play in Three Acts", + publisher = "Foxrock", + year = 1995, + address = "New York", + flanguage = "French", + translator = "Michael Brodsky", + library = l-me +} + +@Book{ beckett:endgame, + author = "Samuel Beckett", + title = "Endgame", + publisher = "Grove Press", + year = 1958, + address = "New York", + flanguage = "French" +} + +@Book{ beckett:fizzles, + author = "Samuel Beckett", + title = "Fizzles", + publisher = "Grove Press", + address = "New York", + year = 1976, + library = l-me +} + +@Book{ beckett:godot, + author = "Samuel Beckett", + title = "Waiting for {G}odot", + publisher = "Grove Press", + year = 1956, + address = "New York", + edition = "First Evergreen ed.", + oyear = 1954, + opublisher = "Grove Press", + oaddress = "New York", + yearcomp = 1948, + fyear = 1952, + flanguage = "French", + ftitle = "En attendant {G}odot", + translator = "{the author}", + note = "Premiered in French in~1953, in English in~1955", + library = l-me +} + +@Book{ beckett:godot:grove00, + author = "Samuel Beckett", + title = "Waiting for {G}odot", + publisher = "Grove Press", + year = 1997, + address = "New York", + invis = "this is the paperback as seen on amazon.com" +} + +@Book{ beckett:howitis, + author = "Samuel Beckett", + title = "How It Is", + year = 1964, + publisher = "Grove Press", + address = "New York", + translator = "{the author}", + ftitle = "Comment c'est", + flanguage = "French", + faddress = "Paris", + fpublisher = "Les Editions de Minuit", + fyear = 1961, + library = l-me +} + +@Book{ beckett:ill, + author = "Samuel Beckett", + title = "Ill Seen Ill Said", + year = 1981, + publisher = "Grove Press", + address = "New York", + library = l-me +} + +@Book{ beckett:ill:krance, + author = "Samuel Beckett", + editor = "Charles Krance", + title = "Samuel {B}eckett's \book{Mal vu mal + dit}/\linebreak[2]\book{Ill Seen Ill Said}: A Bilingual, + Evolutionary, and Synoptic Variorum Edition", + publisher = "Garland Publishing", + year = 1996, + volume = 1266, + series = "Garland Reference Library of the Humanities", + address = "New York", + library = l-me +} + +@Article{ beckett:letter:killachter, + author = "Samuel Beckett", + title = "Letter [of 22 April 1958] from {S}amuel {B}eckett + concerning manuscript of story \storytitle{Killachter + Meadow}", + journal = "Review of Contemporary Fiction", + year = 1983, + volume = 3, + number = 1, + pages = "156--57" +} + +@Misc{ beckett:letter:yellow, + author = "Samuel Beckett", + note = "Letter to Barney Rosset of Grove Press in the Special + Collections of Syracuse University Library, Syracuse, New + York.", + month = "7~" # apr, + year = 1956 +} + +@Book{ beckett:letters:schneider, + author = "Samuel Beckett and Alan Schneider", + editor = "Maurice Harmon", + title = "No Author Better Served: The Correspondence of {S}amuel + {B}eckett and {A}lan {S}chneider", + publisher = "Harvard University Press", + year = 1998, + address = "Cambridge", + library = l-me +} + +@Book{ beckett:love, + author = "Samuel Beckett", + title = "First Love and Other Shorts", + publisher = "Grove Press", + year = 1974, + address = "New York", + keywords = "{From an Abandoned Work} Enough {Imagination Dead Imagine} + Ping {Not I} Breath", + library = l-me +} + +@Book{ beckett:malone, + author = "Samuel Beckett", + title = "Malone Dies", + publisher = "Grove Press", + year = 1956, + address = "New York", + library = l-me, + invis = "My copy signed by Anne Hoffman, wife of the actor Dustin." +} + +@Book{ beckett:mercier, + author = "Samuel Beckett", + title = "Mercier and {C}amier", + publisher = "Grove Press", + year = 1974, + address = "New York", + library = l-me, + invis = "French Edition 1970. Written between \book{Watt} and + \book{Molloy}." +} + +@Book{ beckett:mexican, + author = "Samuel Beckett", + editor = "Octavio Paz", + title = "Mexican Poetry: An Anthology", + publisher = "Grove", + year = 1985, + address = "New York", + oyear = 1958, + opublisher = "Indiana University Press", + oaddress = "Bloomington", + call = "PQ7263.E5M49 1985", + library = l-me, + invis = "Paz is compiler, Beckett is translator, authors are + various" +} + +@Book{ beckett:molloy, + author = "Samuel Beckett", + title = "Molloy", + year = 1955, + publisher = "Grove Press", + address = "New York", + translator = "Patrick Bowles and Samuel Beckett", + library = l-me, + invis = "My copy signed by Anne Hoffman, wife of the actor Dustin." +} + +@Book{ beckett:murphy, + author = "Samuel Beckett", + title = "Murphy", + year = 1957, + publisher = "Grove Press", + address = "New York", + fyear = 1938, + library = l-me, + invis = "FIX first published by Routledge? Grove ISBN + 0-8021-5037-3" +} + +@Book{ beckett:negro, + author = "Samuel Beckett", + editor = "Alan Warren Friedman", + title = "Beckett in Black and Red: The Translations for {N}ancy + {C}unard's \book{Negro} (1934)", + publisher = "University Press of Kentucky", + year = 2000, + address = "Lexington", + call = "CB235.B43 1999", + library = l-me, + invis = "Beckett is translator, authors are various" +} + +@Book{ beckett:nohowon, + author = "Samuel Beckett", + title = "Nohow On", + publisher = "Riverrun Press", + year = 1983 +} + +@Book{ beckett:notebook:dream, + author = "Samuel Beckett", + editor = "John Pilling", + title = "Beckett's \book{Dream} Notebook", + publisher = "Beckett International Foundation", + year = 1999, + address = "Reading, England", + library = l-me +} + +@Book{ beckett:notebook:endgame, + author = "Samuel Beckett", + editor = "S. E. Gontarski", + title = "Endgame: With a Revised Text", + publisher = "Faber and Faber", + year = 1992, + volume = 2, + series = "The Theatrical Notebooks of Samuel Beckett", + address = "London", + library = l-bc +} + +@Book{ beckett:notebook:godot, + author = "Samuel Beckett", + editor = "Dougald McMillan and James Knowlson", + title = "Waiting for {G}odot: With a Revised Text", + publisher = "Grove Press", + year = 1994, + volume = 1, + series = "The Theatrical Notebooks of Samuel Beckett", + address = "New York", + fyear = 1993, + fpublisher = "Faber and Faber", + faddress = "Great Britain", + call = "PQ2603.E378E53 1994", + library = l-me +} + +@Book{ beckett:notebook:happy, + author = "Samuel Beckett", + editor = "James Knowlson", + title = "Happy Days: The Production Notebook of {S}amuel {B}eckett", + publisher = "Grove Press", + year = 1986, + address = "New York", + fyear = 1985, + fpublisher = "Faber and Faber", + faddress = "London", + library = l-me, + invis = "The Theatrical Notebooks of Samuel Beckett series lists + this book, in retrospect, as an unnumbered member, but this + is not mentioned in the book itself." +} + +@Book{ beckett:notebook:krapp, + author = "Samuel Beckett", + editor = "James Knowlson", + title = "Krapp's Last Tape: With a Revised Text", + publisher = "Grove Press", + year = 1992, + volume = 3, + series = "The Theatrical Notebooks of Samuel Beckett", + address = "New York", + call = "PR6003.E282K7", + library = l-me +} + +@Book{ beckett:notebook:shorter, + author = "Samuel Beckett", + editor = "S. E. Gontarski", + title = "The Shorter Plays: With Revised Texts", + publisher = "Grove Press", + year = 1999, + volume = 4, + series = "The Theatrical Notebooks of Samuel Beckett", + address = "New York", + fyear = 1999, + fpublisher = "Faber and Faber", + faddress = "London", + call = "PR6003.E282A6 1999", + library = l-me, + invis = "Published simultaneously by Grove and Faber and Faber. + Subtitle taken from cataloging-in-publication data rather + than title page" +} + +@Book{ beckett:ohio, + author = "Samuel Beckett", + title = "Three Plays: \play{Ohio Impromptu}, \play{Catastrophe}, + \play{What Where}", + publisher = "Grove Press", + year = 1984, + address = "New York", + library = l-me +} + +@Unpublished{ beckett:pechos, + author = "Samuel Beckett", + title = "Echo's Bones", + note = "Typescript story in the Special Collections of Dartmouth + College Library, Hanover, New Hampshire. 28 pages.", + year = "c. 1934" +} + +@InCollection{ beckett:ping, + author = "Samuel Beckett", + title = "Ping", + crossref = "beckett:cspr", + pages = "193--96" +} + +@Book{ beckett:poems, + author = "Samuel Beckett", + title = "Collected Poems in {E}nglish and {F}rench", + publisher = "Grove Press", + year = 1977, + address = "New York", + library = l-me +} + +@Book{ beckett:pricks, + author = "Samuel Beckett", + title = "More Pricks Than Kicks", + publisher = "Grove Press", + year = 1972, + address = "New York", + fyear = 1934, + fpublisher = "Chatto and Windus", + library = l-me +} + +@Book{ beckett:proust, + author = "Samuel Beckett", + title = "Proust", + year = 1957, + publisher = "Grove Press", + oyear = 1931, + invis = "FIX NEED ORIGINAL PUBLISHER AND ADDRESS", + library = l-me +} + +@Book{ beckett:still, + author = "Samuel Beckett", + title = "Stirrings Still", + publisher = "North Star Line", + year = 1991, + address = "New York", + oyear = 1988, + opublisher = "Blue Moon Books", + illustrator = "Louis le Brocquy", + call = "PR6003.E282S84 1988", + library = l-me +} + +@Book{ beckett:stories, + author = "Samuel Beckett", + title = "Stories and Texts for Nothing", + year = 1967, + oyear = 1958, + publisher = "Grove Press", + address = "New York", + library = l-me +} + +@Book{ beckett:story, + author = "Samuel Beckett", + title = "As the Story Was Told: Uncollected and Late Prose", + publisher = "Riverrun Press", + year = 1990, + address = "New York", + call = "PR6003.E282A9 1990", + library = l-me +} + +@Book{ beckett:story:ricks, + author = "Samuel Beckett", + title = "As the Story Was Told", + publisher = "Rampant Lions Press", + year = 1987, + editor = "Christopher B. Ricks", + address = "Cambridge, England", + call = "PR6003.E282 A923 1987", + library = l-msy, + annotation = "``The variant readings in this edition \lips were + transcribed by Christopher Ricks, and the passages \lips + chosen by him''---Colophon. ``Three hundred and twenty-five + copies were printed''---Colophon." +} + +@Book{ beckett:trilogy, + title = "Three Novels", + year = "1955--58", + author = "Samuel Beckett", + invis = "FIX NEED ORIGINAL PUBLISHER YEAR ETC; new Grove edition + says first Black Cat edition 1965, first Evergreen edition + 1991", + publisher = "Grove Press", + address = "New York", + annotation = "Contains ``the trilogy'': \book{Molloy}, \book{Malone + Dies}, and \book{The Unnamable}", + library = l-me +} + +@Book{ beckett:unnamable, + author = "Samuel Beckett", + title = "The Unnamable", + year = 1958, + publisher = "Grove Press", + address = "New York", + library = l-me, + invis = "My copy signed by Anne Hoffman, wife of the actor Dustin." +} + +@Book{ beckett:watt, + author = "Samuel Beckett", + title = "Watt", + year = 1959, + publisher = "Grove Press", + address = "New York", + oyear = 1953, + opublisher = "Olympia Press", + oaddress = "Paris", + library = l-me +} + +@InCollection{ beckett:wishes, + title = "Human Wishes", + crossref = "beckett:disjecta", + pages = "155--66", + year = 1937 +} + +@Book{ beckett:worst, + author = "Samuel Beckett", + title = "Worstward Ho", + year = 1983, + publisher = "Grove Press", + address = "New York", + call = "PR6003.E282C65 1980", + library = l-me +} + +@InCollection{ beckett:yellow, + author = "Samuel Beckett", + title = "Yellow", + pages = "108--19", + publisher = "New American Library", + year = 1956, + booktitle = "New World Writing", + volume = 10, + series = "New American Library Mentor Books", + address = "New York", + note = "Also in \citeNP{beckett:pricks}, 158--74, with minor + differences." +} + +@Article{ beer:beckett:bilingual, + author = "Ann Beer", + title = "\book{Watt}, {K}nott, and {B}eckett's Bilingualism", + journal = jobs, + year = 1985, + number = 10, + pages = "37--75", + invis = "Have photocopy." +} + +@Book{ beja:beckett:humanistic, + editor = "Morris Beja and S. E. Gontarski and Pierre Astier", + title = "Samuel {B}eckett: Humanistic Perspectives", + booktitle = "Samuel {B}eckett: Humanistic Perspectives", + publisher = "Ohio State University Press", + year = 1983, + address = "Columbus", + library = l-m +} + +@Article{ ben-zvi:beckett:mauthner, + author = "Linda Ben-Zvi", + title = "Fritz {M}authner for Company", + journal = jobs, + year = 1984, + number = 9, + pages = "65--88", + invis = "Have photocopy." +} + +@Book{ benet:readers-encyc, + author = "William Rose Ben{\'e}t", + title = "The Reader's Encyclopedia", + publisher = "Thomas Y. Crowell", + year = 1965, + address = "New York", + edition = "2d~ed.", + library = l-m +} + +@Article{ benson:beckett:hardy, + author = "Michael Benson", + title = "Moving Bodies in {H}ardy and {B}eckett", + journal = "Essays in Criticism", + year = 1984, + volume = 34, + number = 3, + pages = "229--43", + month = jul, + invis = "Have photocopy." +} + +@Book{ blake:job, + author = "William Blake", + title = "Blake's {J}ob: {W}illiam {B}lake's \book{Illustrations of + the Book of Job}", + publisher = "University Press of New England", + year = 1966, + editor = "S. Foster Damon", + call = "NE642.B5A4 1982a", + keywords = "job", + library = l-me +} + +@InCollection{ blissett:jones, + author = "William Blisset", + title = "The Syntax of Violence", + crossref = "matthias:jones", + pages = "193--208" +} + +@Book{ bloom:anxiety:1, + author = "Harold Bloom", + title = "The Anxiety of Influence: A Theory of Poetry", + publisher = "Oxford University Press", + year = 1973, + address = "New York", + library = l-m +} + +@InCollection{ bloom:beckett:intromcv, + author = "Harold Bloom", + title = "Introduction", + crossref = "bloom:beckett:mcv", + pages = "1--5", + invis = "Have photocopy." +} + +@Book{ bloom:beckett:mcv, + editor = "Harold Bloom", + title = "Samuel {B}eckett", + booktitle = "Samuel {B}eckett", + publisher = "Chelsea House Publishers", + year = 1985, + series = "Modern Critical Views", + address = "New York", + library = l-hayden +} + +@Book{ bloom:beckett:trilogy, + editor = "Harold Bloom", + title = "Samuel {B}eckett's \book{Molloy}, \book{Malone Dies}, + \book{The Unnamable}", + booktitle = "Samuel {B}eckett's \book{Molloy}, \book{Malone Dies}, + \book{The Unnamable}", + publisher = "Chelsea House Publishers", + year = 1988, + series = "Modern Critical Interpretations", + address = "New York", + call = "PR6003.E19.M53 1988", + invis = "PR6003.E19.M53 1988 at MIT -- inexplicably differs from LC + CIP data in frontispiece." +} + +@InCollection{ bloom:beckett:trilogyintro, + author = "Harold Bloom", + title = "Introduction", + crossref = "bloom:beckett:trilogy", + pages = "1--12", + invis = "Have photocopy." +} + +@Book{ boden:ai, + title = "The Philosophy of Artificial Intelligence", + editor = "Margaret A. Boden", + year = 1990, + publisher = "Oxford University Press", + library = l-se, + call = "Q335.P48 1990", + invisible = "Frontmatter filed" +} + +@Book{ bomberg:tate, + author = "David Bomberg", + title = "David {B}omberg", + booktitle = "David {B}omberg", + year = 1988, + publisher = "Tate Gallery", + address = "London", + note = "For the exhibition of 17~Feb to 8~May 1988", + call = "N6797.B58A4 1988", + library = l-m +} + +@Article{ bonnerot:jones, + author = "Louis Bonnerot", + title = "David {J}ones and the Notion of Fragments", + journal = "Agenda", + year = "1973--1974", + volume = "11 (4)--12 (1)", + pages = "76--89", + library = l-m +} + +@Book{ bonola:geometry, + author = "Roberto Bonola", + title = "Non-{E}uclidean Geometry: A Critical and Historical Study + of its Development", + publisher = "Open Court Publishing", + year = 1912, + address = "Chicago", + translator = "H. S. Carslaw", + note = "Authorized translation", + call = "QA685.F12", + library = l-se, + annotation = "Frontmatter filed." +} + +@Book{ borges:ficciones, + author = "Jorge Luis Borges", + editor = "Anthony Kerrigan", + title = "Ficciones", + publisher = "Grove Weidenfeld", + year = 1963, + address = "New York", + translator = "{the editor} and others", + flanguage = "Spanish", + fyear = "1956", + fpublisher = "Emec{\'e} Editores", + faddress = "Buenos Aires", + library = l-me +} + +@Book{ boulger:calvin, + author = "James D. Boulger", + title = "The {C}alvinist Temper in {E}nglish Poetry", + publisher = "Mouton Publishers", + address = "The Hague", + year = 1980 +} + +@Book{ brater:beckett:80, + booktitle = "Beckett at 80\slash {B}eckett in Context", + title = "Beckett at 80\slash {B}eckett in Context", + publisher = "Oxford University Press", + year = 1986, + editor = "Enoch Brater", + address = "Oxford", + call = "PR6003.E282Z5717 1986", + library = l-m +} + +@InCollection{ brater:beckett:memory, + author = "Enoch Brater", + title = "The \book{Company} {B}eckett Keep: The Shape of Memory and + One Fabulist's Decay of Lying", + crossref = "beja:beckett:humanistic", + pages = "157--71", + invis = "Have photocopy." +} + +@Article{ brater:beckett:mistakes, + author = "Enoch Brater", + title = "Mis-Takes, Mathematical and Otherwise, in \book{The Lost + Ones}", + journal = "Modern Fiction Studies", + year = 1983, + volume = 29, + number = 1, + pages = "93--109", + month = "spring", + invis = "Have photocopy." +} + +@Book{ brater:beckett:why, + author = "Enoch Brater", + title = "Why {B}eckett", + publisher = "Thames and Hudson", + year = 1989, + address = "New York", + library = l-me +} + +@Article{ breuer:beckett:paradox, + author = "Rolf Breuer", + title = "Paradox in {B}eckett", + journal = "Modern Language Review", + year = 1993, + pages = "559--80", + volume = 88, + month = jul, + invis = "Have photocopy. It's vol 88 part 3." +} + +@Manual{ britannica:15, + author = "Encyclopaedia Britannica", + title = "Encyclopaedia {B}ritannica", + organization = "University of Chicago", + address = "Chicago", + edition = "15th~ed.", + year = 1993 +} + +@Book{ brooke:letters:keynes, + author = "Rupert Brooke", + title = "The Letters of {R}upert {B}rooke", + publisher = "Harcourt, Brace and World", + year = 1968, + editor = "Geoffrey Keynes", + library = l-m, + call = "PR6003.R58Z5 F68", + address = "New York" +} + +@InCollection{ bruno:cpone, + author = "Giordano Bruno", + title = "Concerning the Cause, Principle, and One", + booktitle = "The Infinite in {G}iordano {B}runo, With a Translation of + His Dialogue \book{Concerning the Cause, Principle, and + One}", + translator = "Sidney Greenburg", + publisher = "King's Crown Press", + address = "New York", + year = 1950, + library = l-m, + call = "B783.Z7 F50" +} + +@Book{ bryden:beckett:god, + author = "Mary Bryden", + title = "Samuel {B}eckett and the Idea of {G}od", + publisher = "St. Martin's Press", + year = 1998, + address = "New York", + library = l-m +} + +@InCollection{ bryden:beckett:golgotha, + author = "Mary Bryden", + title = "Figures of {G}olgotha: {B}eckett's Pinioned People", + crossref = "pilling:beckett:onion", + pages = "45--62" +} + +@Article{ bryden:beckett:saintsernin, + author = "Mary Bryden", + title = "The Carved Rats of {S}aint-{S}ernin", + journal = tbc, + year = 1999, + volume = 21, + number = 2, + pages = 9, + month = "fall" +} + +@Article{ bryden:beckett:smiles, + author = "Mary Bryden", + title = "Beckett and the Three {D}antean Smiles", + journal = jobsns, + year = 1995, + volume = 4, + number = 2, + pages = "29--33", + invis = "Have photocopy." +} + +@Book{ bulfinch:myth, + author = "Thomas Bulfinch", + title = "Bulfinch's Mythology", + publisher = "Gramercy Books", + year = 1979, + address = "New York", + library = l-m, + annote = "Contains: The Age of Fable (1855); The Age of Chivalry + (1858); Legends of Charlemagne or Romance of the Middle + Ages (1863)" +} + +@InCollection{ buning:beckett:via, + author = "Marius Buning", + title = "Samuel {B}eckett's Negative Way: Intimations of the + \foreign{Via Negativa} in his Late Plays", + crossref = "jasper:literature", + chapter = 9, + pages = "129--42", + invis = "Have photocopy." +} + +@Book{ burnet:greeks, + author = "John Burnet", + title = "Greek Philosophy: {T}hales to {P}lato", + publisher = "St. Martin's Press", + year = 1964, + address = "New York", + edition = "1st~ed., reset and reprinted", + fyear = 1914, + call = "B171.B85 1968", + library = l-m +} + +@Article{ burrows:beckett:interview, + author = "Rachel Burrows", + title = "Interview with {R}achel {B}urrows, {D}ublin, {B}loomsday, + 1982", + journal = jobs, + year = 1989, + number = "11--12", + pages = "6--15", + note = "Interviewed by S.~E. Gontarski, Martha Feshenfeld, and + Dougald McMillan", + invis = "Have photocopy." +} + +@Book{ butler:beckett:essays, + editor = "Lance St John Butler", + title = "Critical Essays on {S}amuel {B}eckett", + booktitle = "Critical Essays on {S}amuel {B}eckett", + publisher = "Scolar Press", + year = 1993, + number = 4, + series = "Critical Thought Series", + address = "Hants, England", + call = "PR6003.E282Z623 1993", + library = l-bc +} + +@Article{ butler:beckett:review:bryden, + author = "Lance St John Butler", + title = "Review of \book{Samuel Beckett and the Idea of God} by + {M}ary {B}ryden ({N}ew {Y}ork: St. Martin's, 1998)", + journal = tbc, + year = 1999, + volume = 21, + number = 2, + pages = "10--11", + month = "Fall" +} + +@Book{ calder:beckett:60, + editor = "John Calder", + title = "Beckett at~60: A {F}estschrift", + booktitle = "Beckett at~60: A {F}estschrift", + publisher = "Calder and Boyars", + year = 1967, + address = "London", + call = "PR6003.E282Z57", + library = l-m, + invis = "Some good stuff." +} + +@Article{ calder:beckett:bair, + author = "John Calder", + title = "Review of \book{Samuel Beckett: A Biography} by {D}eirdre + {B}air (Jonathan Cape, 1978)", + journal = jobs, + year = 1979, + number = 4, + pages = "74--79", + invis = "Have photocopy." +} + +@Book{ calder:beckett:dare, + title = "As No Other Dare Fail: For {S}amuel {B}eckett on his 80th + Birthday", + key = "John Calder (Publishers)", + publisher = "John Calder", + year = 1986, + address = "London" +} + +@Book{ calder:beckett:reader, + bookauthor = "Samuel Beckett", + author = "Samuel Beckett", + editor = "John Calder", + title = "A {S}amuel {B}eckett Reader", + booktitle = "A {S}amuel {B}eckett Reader", + publisher = "Pan Books", + year = 1983, + address = "London", + call = "PR6003.E282A6 1983" +} + +@InCollection{ calder:beckett:readerintro, + author = "John Calder", + title = "Introduction", + crossref = "calder:beckett:reader", + pages = "9--42", + invis = "Have photocopy." +} + +@Book{ campbell:atlas, + author = "Joseph Campbell", + title = "Historical Atlas of World Mythology", + publisher = "Summerfield Press", + year = 1983, + address = "London", + call = "BL311.C26 1983", + library = l-m, + invis = "Check on the publisher - see Mugar." +} + +@InCollection{ carey:beckett:introjoyce, + author = "Phyllis Carey and Ed Jewinski", + title = "Introduction", + crossref = "carey:beckett:joyce", + pages = "xi--xviii", + invis = "Have photocopy. Contains overview of the book." +} + +@Book{ carey:beckett:joyce, + editor = "Phyllis Carey and Ed Jewinski", + title = "Re: {J}oyce'n {B}eckett", + booktitle = "Re: {J}oyce'n {B}eckett", + publisher = "Fordham University Press", + year = 1992, + address = "New York", + call = "PR8754.R4 1991", + library = l-m, + invis = "Review in JOBS somewhere." +} + +@InCollection{ carey:beckett:pieta, + author = "Phyllis Carey", + title = "Stephen {D}edalus, {B}elacqua {S}huah, and {D}ante's + \foreign{Piet{\`a}}", + crossref = "carey:beckett:joyce", + pages = "104--16", + chapter = 8, + annotation = "Highest quality.", + invis = "Have photocopy." +} + +@Book{ carnap:foundations, + author = "Rudolf Carnap", + title = "Philosophical Foundations of Physics", + publisher = "Basic Books", + year = 1966, + editor = "Martin Gardner", + call = "QC6.F662A", + library = l-m, + annotation = "Frontmatter filed." +} + +@Book{ carroll:complete, + author = "Lewis Carroll", + title = "The Complete Works of {L}ewis {C}arroll", + publisher = "Random House", + year = "n.d.", + library = l-me, + invis = "No ISBN in the book either!" +} + +@Book{ carroll:dante:purgatorio, + author = "John S. Carroll", + title = "Prisoners of Hope: an Exposition of {D}ante's + \book{Purgatorio}", + publisher = "Hodder and Stoughton", + year = 1906, + address = "London", + call = "PQ4447.F06", + library = l-m +} + +@Article{ cassedy:group, + author = "Steven Cassedy", + title = "Mathematics, Relationism, and the Rise of Modern Literary + Aesthetics", + journal = "Journal of the History of Ideas", + year = 1988, + pages = "109--32", + volume = 49, + number = 1, + annotation = "History of how abstract mathematics of mid-19th century + had a direct influence on French Symbolist and Russian + Formalist writers.", + invis = "Have photocopy." +} + +@Article{ castillo:beckett:towns, + author = "Debra A. Castillo", + title = "Beckett's Metaphorical Towns", + journal = "Modern Fiction Studies", + year = 1982, + volume = 28, + number = 2, + pages = "189--200", + month = "summer", + invis = "Have photocopy." +} + +@Book{ chambers-murray, + author = "Sir William Smith and Sir John Lockwood", + title = "Chambers {M}urray {L}atin-{E}nglish Dictionary", + publisher = "W and R Chambers and John Murray", + year = 1976, + address = "Edinburgh and London (respectively)", + note = "Also known as \book{A Smaller Latin-English Dictionary} in + a 1933 edition.", + library = l-me +} + +@Article{ cheng:panther, + author = "Vincent J. Cheng", + title = "Stephen {D}edalus and the Black Panther Vampire", + journal = "James Joyce Quarterly", + year = 1987, + volume = 24, + number = 2, + pages = "161--76", + month = "winter", + library = l-m +} + +@Manual{ chicago, + title = "The {C}hicago Manual of Style", + edition = "13th~ed.", + organization = "University of Chicago Press", + year = 1982, + address = "Chicago", + library = l-me +} + +@Manual{ chicago:14, + title = "The {C}hicago Manual of Style", + edition = "14th~ed.", + organization = "University of Chicago Press", + year = 1993, + address = "Chicago", + call = "Z253.U69 1993", + library = l-me +} + +@InCollection{ coe:beckett:english, + author = "Richard N. Coe", + title = "Beckett's {E}nglish", + crossref = "beja:beckett:humanistic", + pages = "36--57", + invis = "Have photocopy." +} + +@Article{ coetzee:beckett:revisions, + author = "J. M. Coetzee", + title = "The Manuscript Revisions of {B}eckett's \book{Watt}", + journal = "Journal of Modern Literature", + year = 1972, + volume = 2, + pages = "472--80", + invis = "Have photocopy." +} + +@Book{ cohen:rosenberg, + author = "Joseph Cohen", + title = "Journey to the Trenches: The Life of {I}saac {R}osenberg + 1890--1918", + publisher = "Basic Books", + year = 1975, + address = "New York", + call = "PR6035.O67Z6 1975b", + library = l-m +} + +@Book{ cohn:beckett:collection, + title = "Samuel {B}eckett: A Collection of Criticism", + booktitle = "Samuel {B}eckett: A Collection of Criticism", + publisher = "McGraw-Hill", + year = 1975, + editor = "Ruby Cohn", + address = "New York", + library = l-bcburns # l-unc # l-widener, + invis = "Have several of these articles photocopied." +} + +@InCollection{ cohn:beckett:laughter, + author = "Ruby Cohn", + title = "The Laughter of Sad {S}am {B}eckett", + crossref = "friedman:beckett:now", + pages = "185--97", + invis = "Have photocopy." +} + +@Book{ cohn:beckett:play, + author = "Ruby Cohn", + title = "Just Play: {B}eckett's Theater", + publisher = "Princeton University Press", + year = 1980, + address = "Princeton", + library = l-m +} + +@Book{ common-prayer, + key = "Common Prayer", + title = "The Book of Common Prayer and Administration of the + Sacraments and Other Rites and Ceremonies of the Church", + publisher = "Oxford University Press", + address = "New York", + year = 1789, + note = "\Wrapquotes{This edition \lips was \lips reproduced from a + certified edition \lips as adopted by the General + Convention of 1928 and emended by subsequent Conventions.}", + library = l-me +} + +@Book{ companion:mind, + title = "The {O}xford Companion to the Mind", + publisher = "Oxford University Press", + year = 1987, + editor = "Richard L. Gregory", + address = "Oxford", + call = "BF31.O94 1987" +} + +@Book{ concordance:murphy, + editor = "Mich{\`e}le Aina Barale and Rubin Rabinovitz", + title = "A {KWIC} Concordance to {S}amuel {B}eckett's + \book{Murphy}", + booktitle = "A {KWIC} Concordance to {S}amuel {B}eckett's + \book{Murphy}", + publisher = "Garland Publishing", + year = 1990, + volume = 1079, + series = "Garland Reference Library of the Humanities", + address = "New York", + call = "PR6003.E282M8338", + library = l-me +} + +@Book{ concordance:trilogy, + editor = "Mich{\`e}le Aina Barale and Rubin Rabinovitz", + title = "A {KWIC} Concordance to {S}amuel {B}eckett's Trilogy: + \book{Molloy}, \book{Malone Dies}, and \book{The + Unnamable}", + publisher = "Garland Publishing", + year = 1988, + edition = "2~vols.", + volume = 753, + series = "Garland Reference Library of the Humanities", + address = "New York", + call = "PQ2603.E378M633 1988", + library = l-me +} + +@Article{ conley:beckett:color, + author = "Tom Conley", + title = "Samuel {B}eckett: Color, Letter, and Line", + journal = "Visible Language", + year = 1985, + volume = 19, + number = 4, + pages = "484--98", + month = "autumn", + invis = "Have photocopy." +} + +@Article{ connor:beckett:animals, + author = "Steven Connor", + title = "Beckett's Animals", + journal = jobs, + year = 1982, + number = 8, + pages = "29--44", + invis = "Have photocopy." +} + +@Book{ cook:curves, + author = "Theodore Andrea Cook", + title = "The Curves of Life: Being an Account of Spiral Formations + and Their Application to Growth in Nature, to Science and + to Art; with Special reference To the Manuscripts of + {L}eonardo da {V}inci", + publisher = "Dover Publications", + year = 1979, + address = "New York", + oyear = 1914, + keywords = "goldenratio spirals", + library = l-me +} + +@Book{ copleston:phil:1, + oyear = 1946, + volume = 1, + author = "Frederick Copleston", + series = "A History of Philosophy", + title = "Greece and {R}ome", + booktitle = "Greece and {R}ome", + publisher = "Image Books", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@Book{ copleston:phil:2, + oyear = 1950, + volume = 2, + author = "Frederick Copleston", + series = "A History of Philosophy", + publisher = "Image Books", + title = "Augustine to {S}cotus", + booktitle = "Augustine to {S}cotus", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@Book{ copleston:phil:3, + oyear = 1953, + volume = 3, + author = "Frederick Copleston", + series = "A History of Philosophy", + title = "Ockham to {S}uarez", + booktitle = "Ockham to {S}uarez", + publisher = "Image Books", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@Book{ copleston:phil:4, + oyear = 1960, + volume = 4, + author = "Frederick Copleston", + series = "A History of Philosophy", + publisher = "Image Books", + title = "Descartes to {L}eibniz", + booktitle = "Descartes to {L}eibniz", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@Book{ copleston:phil:5, + oyear = 1959, + volume = 5, + author = "Frederick Copleston", + series = "A History of Philosophy", + title = "Hobbes to {H}ume", + booktitle = "Hobbes to {H}ume", + publisher = "Image Books", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@Book{ copleston:phil:6, + oyear = 1960, + volume = 6, + author = "Frederick Copleston", + series = "A History of Philosophy", + publisher = "Image Books", + title = "Wolff to {K}ant", + booktitle = "Wolff to {K}ant", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@Book{ copleston:phil:7, + oyear = 1963, + volume = 7, + author = "Frederick Copleston", + title = "Fichte to {N}ietzsche", + booktitle = "Fichte to {N}ietzsche", + series = "A History of Philosophy", + publisher = "Image Books", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@Book{ copleston:phil:8, + oyear = 1966, + volume = 8, + author = "Frederick Copleston", + title = "Bentham to {R}ussell", + booktitle = "Bentham to {R}ussell", + series = "A History of Philosophy", + publisher = "Image Books", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@Book{ copleston:phil:9, + oyear = 1974, + volume = 9, + author = "Frederick Copleston", + title = "Maine de {B}iran to {S}artre", + booktitle = "Maine de {B}iran to {S}artre", + series = "A History of Philosophy", + publisher = "Image Books", + opublisher = "Newman Press", + year = 1985, + address = "New York", + library = l-me, + seriesedition = "9~vols. in 3~books" +} + +@InCollection{ copleston:phil:bergson, + title = "Henri {B}ergson", + type = "Chapters", + chapter = "9--10", + crossref = "copleston:phil:9" +} + +@InCollection{ copleston:phil:comte, + title = "August {C}omte", + chapter = 5, + crossref = "copleston:phil:9" +} + +@InCollection{ copleston:phil:cusa, + title = "Nicholas of {C}usa", + chapter = 15, + crossref = "copleston:phil:3" +} + +@InCollection{ copleston:phil:pseudo, + title = "The {P}seudo-{D}ionysius", + crossref = "copleston:phil:2", + chapter = 9, + invis = "pages 91--100" +} + +@InCollection{ copleston:phil:schop, + title = "Schopenhauer", + type = "Chapters", + chapter = "13--14", + crossref = "copleston:phil:7" +} + +@InCollection{ cork:bomberg, + author = "Richard Cork", + title = "Bomberg's Odyssey", + crossref = "bomberg:tate" +} + +@Article{ cousineau:beckett:consolation, + author = "Thomas J. Cousineau", + title = "\book{Watt}: Language as Interdiction and Consolation", + journal = jobs, + year = 1979, + number = 4, + pages = "1--13", + invis = "Have photocopy." +} + +@Book{ cronin:beckett:modernist, + author = "Anthony Cronin", + title = "Samuel {B}eckett: The Last {M}odernist", + publisher = "HarperCollins", + year = 1996, + address = "London", + library = l-m, + invis = "This biography seems to be a subset of Knowlson." +} + +@Article{ culik:beckett:math, + author = "Hugh Culik", + title = "Mathematics as Metaphor: {S}amuel {B}eckett and and the + Esthetics of Incompleteness", + journal = "Papers on Language \& Literature", + year = 1993, + volume = 29, + number = 2, + pages = "131--51", + month = "spring", + invis = "Have photocopy." +} + +@InCollection{ culik:beckett:neurological, + author = "Hugh Culik", + title = "Neurological Disorder and the Evolution of {B}eckett's + Maternal Images", + crossref = "butler:beckett:essays", + pages = "366--373", + invis = "Have photocopy." +} + +@Article{ culik:beckett:watt, + author = "Hugh Culik", + title = "The Place of \book{Watt} in {B}eckett's Development", + journal = "Modern Fiction Studies", + year = 1983, + volume = 29, + number = 1, + pages = "57--71", + month = "spring", + invis = "Have photocopy." +} + +@Book{ dakers:wwi, + author = "Caroline Dakers", + title = "The Countryside at War 1914--1918", + publisher = "Constable", + year = 1987, + address = "London", + call = "DA566.4.D35 1987", + library = l-m, + annotation = "Have a few pages photocopied." +} + +@Book{ dallin:folksongs, + author = "Leon Dallin and Lynn Dallin", + title = "Folk Songster", + publisher = "Wm. C. Brown", + year = 1967, + address = "Dubuque" +} + +@Book{ dante:ciardi:inferno, + title = "The Inferno", + author = "Dante Alighieri", + publisher = "New American Library", + year = 1954, + address = "New York", + flanguage = "Italian", + translator = "John Ciardi", + library = l-me +} + +@Book{ dante:ciardi:paradiso, + title = "The Paradiso", + author = "Dante Alighieri", + publisher = "New American Library", + year = 1970, + address = "New York", + flanguage = "Italian", + translator = "John Ciardi", + library = l-me +} + +@Book{ dante:ciardi:purgatorio, + title = "The Purgatorio", + author = "Dante Alighieri", + publisher = "New American Library", + year = 1961, + address = "New York", + flanguage = "Italian", + translator = "John Ciardi", + library = l-me +} + +@Book{ dante:inferno:ciardi, + author = "Dante Alighieri", + title = "The {I}nferno", + publisher = "PenGuin", + year = 1954, + translator = "John Ciardi", + flanguage = "Italian", + library = l-me +} + +@Book{ dante:mandelbaum:comedy, + author = "Dante Alighieri", + title = "The Divine Comedy", + series = "The Divine Comedy", + publisher = "Bantam Books", + year = "1982--86", + address = "New York", + edition = "Bantam Classic~ed.", + flanguage = "Italian", + illustrator = "Barry Moser", + translator = "Allen Mandelbaum", + library = l-me +} + +@Book{ dante:mandelbaum:inferno, + title = "Purgatorio: A Verse Translation", + year = 1982, + crossref = "dante:mandelbaum:comedy", + note = "Notes by Allen Mandelbaum and Gabriel Marruzzo, with Larry + Magnus.", + volume = 1 +} + +@Book{ dante:mandelbaum:paradiso, + title = "Purgatorio: A Verse Translation", + year = 1986, + crossref = "dante:mandelbaum:comedy", + note = "Notes by Anthony Oldcorn and Daniel Feldman, with Giuseppe + Di Scipio", + volume = 3 +} + +@Book{ dante:mandelbaum:purgatorio, + title = "Purgatorio: A Verse Translation", + year = 1984, + crossref = "dante:mandelbaum:comedy", + note = "Notes by Laury Magnus, Allen Mandelbaum, and Anthony + Oldcorn, with Daniel Feldman.", + volume = 2 +} + +@Book{ davidson:angels, + author = "Gustav Davidson", + title = "A Dictionary of Angels Including the Fallen Angels", + publisher = "Free Press", + year = 1967, + address = "New York" +} + +@Book{ davies:beckett:ideal, + author = "Paul Davies", + title = "The Ideal Real: {B}eckett's Fiction and Imagination", + publisher = "Associated University Presses", + year = 1994, + call = "PR6003.E282Z62475 1994", + library = l-m +} + +@Article{ day:panther, + author = "Robert Adams Day", + title = "How {S}tephen Wrote His Vampire Poem", + journal = "James Joyce Quarterly", + year = 1980, + volume = 17, + number = 2, + pages = "183--98", + month = "winter", + library = l-m +} + +@Article{ dearlove:beckett:residual, + author = "J. E. Dearlove", + title = "\Wrapquotes{Last Images}: {S}amuel {B}eckett's Residual + Fiction", + journal = "Journal of Modern Literature", + year = 1977, + volume = 6, + number = 1, + pages = "104--126", + month = feb, + invis = "Have photocopy." +} + +@InCollection{ dearlove:beckett:syntax, + author = "Judith E. Dearlove", + title = "\Wrapquotes{Syntax Upended in Opposite Corners}: + Alterations in {B}eckett's Linguistic Theories", + crossref = "beja:beckett:humanistic", + pages = "122--28", + invis = "Have photocopy." +} + +@InCollection{ doherty:beckett:lowry, + author = "Francis Doherty", + title = "Visions of Hell: {L}owry and {B}eckett", + crossref = "jasper:literature", + pages = "117--28", + chapter = 8, + invis = "Have photocopy." +} + +@Book{ donne:paradoxes, + author = "John Donne", + editor = "Helen Peters", + title = "Paradoxes and Problems", + publisher = "Clarendon Press", + year = 1980, + address = "Oxford", + call = "PR2247.P3 1980" +} + +@Article{ downes:beckett:stomach, + author = "Rackstraw Downes", + title = "Theater for the Free Mind and the Strong Stomach", + journal = "New York Times", + year = 1996, + pages = "H5", + month = "28~" # jul, + invis = "Have clipping." +} + +@Book{ drake:bruno, + author = "Stillman Drake", + title = "Copernicus---Philosophy and Science: {B}runo, {K}epler, + {G}alileo", + publisher = "Burndy Library", + address = "Norwalk, Connecticut", + year = 1973, + library = l-m, + call = "QB36.C8D7", + annotation = "Rough survey of Bruno's life. Claims Bruno was introduced + to the Copernican system in England by the work of a + particular person whose name I forget. That person had made + the addition to Copernicus of not having the stars fixed in + an outer sphere, but spreading outward." +} + +@Article{ driver:beckett:madeleine, + author = "Tom F. Driver", + title = "Beckett by the {M}adeleine", + journal = "Columbia University Forum", + year = 1961, + volume = 4, + number = 3, + pages = "21--25", + month = "summer", + note = "Note: Driver ``reconstructs'' Beckett's words ``from notes + made immediately after'' their conversation (p.~22).", + invis = "Have photocopy. Reprinted in + \cite[217--23]{graver:beckett:heritage}" +} + +@Article{ eade:beckett:scarf, + author = "J. C. Eade", + title = "The Seventh Scarf: A Note on \book{Murphy}", + journal = jobs, + year = 1981, + number = 7, + pages = "115--17", + invis = "Have photocopy." +} + +@Book{ edson:clam, + author = "Russell Edson", + title = "The Clam Theater", + publisher = "Wesleyan University Press", + year = 1973, + volume = 64, + series = "Wesleyan Poetry Program", + address = "Middletown", + call = "PS3509.D583.C5", + library = l-hayden, + annotation = "Full photocopy in files." +} + +@Book{ eiseley:starthrower, + author = "Loren Eiseley", + title = "The Star Thrower", + publisher = "Harvest Books", + year = 1979, + address = "San Diego", + library = l-me, + invis = "ISBN 0-15-684909-7; copyright 1978" +} + +@InCollection{ elam:beckett:arse, + author = "Keir Elam", + title = "\play{Not I}: {B}eckett's Mouth and the Ars(e) Rhetorica", + crossref = "brater:beckett:80", + pages = "124--48" +} + +@Book{ eliot:complete, + author = "T. S. Eliot", + title = "The Complete Poems and Plays 1909--1950", + publisher = "Harcourt Brace Jovanovich", + year = 1980, + address = "New York", + library = l-me +} + +@Book{ eliot:middlemarch:random, + author = "George Eliot", + title = "Middlemarch", + publisher = "Random House", + year = 1984, + address = "New York", + call = "PR4662A1 1984", + library = l-m +} + +@Article{ ellis:beckett:surds, + author = "Reuben J. Ellis", + title = "\Wrapquotes{Matrix of Surds}: {H}eisenberg's Algebra in + {B}eckett's \book{Murphy}", + journal = "Papers on Language \& Literature", + year = 1989, + volume = 25, + number = 1, + pages = "120--23", + month = "winter", + invis = "Have photocopy." +} + +@Book{ ellis:gestalt, + author = "Willis D. Ellis", + title = "A Source Book of Gestalt Psychology", + publisher = "Humanities Press", + year = 1950, + address = "New York", + call = "BF203 F50", + library = l-m +} + +@Book{ ellmann:joyce, + author = "Richard Ellmann", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1982, + address = "New York", + edition = "New and Rev.~ed.", + fyear = 1959, + library = l-m +} + +@Book{ ellmanntest1:joyce, + author = "Richard Ellmanna", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1982, + address = "New York", + edition = "New and Rev.~ed.", + fyear = 1959, + note = "THIS IS A TEST ENTRY ellmanntest1:joyce", + library = l-m +} + +@Book{ ellmanntest2:joyce, + author = "Ell Mann, Richard", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1982, + address = "New York", + edition = "New and Rev.~ed.", + fyear = 1959, + note = "THIS IS A TEST ENTRY ellmanntest2.", + library = l-m +} + +@Book{ ellmanntest3:joyce, + author = "Ell Manna, Richard", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1982, + address = "New York", + edition = "New and Rev.~ed.", + fyear = 1959, + note = "THIS IS A TEST ENTRY ellmanntest3", + library = l-m +} + +@Book{ ellmanntestr1:joyce, + author = "Romulus Ellmanna", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1980, + address = "New York", + edition = "New and Rev.~ed.", + fyear = 1959, + note = "THIS IS A TEST ENTRY ellmanntestr1", + library = l-m +} + +@Book{ ellmanntestr2:joyce, + author = "Ell Mann, Romulus", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1980, + address = "New York", + edition = "New and Rev.~ed.", + fyear = 1959, + note = "THIS IS A TEST ENTRY ellmanntestr2", + library = l-m +} + +@Book{ ellmanntestr3:joyce, + author = "Ell Manna, Romulus", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1980, + address = "New York", + edition = "New and Rev.~ed.", + fyear = 1959, + note = "THIS IS A TEST ENTRY ellmanntestr3", + library = l-m +} + +@Book{ ellmanntestr:joyce, + author = "Romulus Ellmann", + key = "ellmanntestr-key", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1980, + address = "New York", + edition = "New and Rev.~ed.", + note = "THIS IS A TEST ENTRY ellmanntestr", + fyear = 1959, + library = l-m +} + +@Book{ ellmanntestrlate:joyce, + author = "Romulus Ellmann", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1990, + address = "New York", + edition = "New and Rev.~ed.", + note = "THIS IS A TEST ENTRY ellmanntestrlate", + fyear = 1959, + library = l-m +} + +@Book{ ellmanntestrx:joyce, + author = "Romulus Ellmann", + key = "ellmanntestrx-key", + title = "James {J}oyce", + publisher = "Oxford University Press", + year = 1982, + address = "New York", + edition = "New and Rev.~ed.", + note = "THIS IS A TEST ENTRY ellmanntestrx", + fyear = 1959, + library = l-m +} + +@Book{ empson:ambiguity, + author = "William Empson", + title = "Seven Types of Ambiguity", + publisher = "New Directions", + year = 1947, + address = "New York", + call = "PN1031 F603", + library = l-m, + invis = "FIX check coverpage, \manual, and Mugar's notes. I don't + think Mugar is right to call it 3d edition and date it + 1966, it seems to me that this is the 1947 edition + reprinted as a paperback. " +} + +@InCollection{ esslin:beckett:dionysos, + author = "Martin Esslin", + title = "Dionysos' Dianoetic Laugh", + crossref = "calder:beckett:dare", + pages = "15--23" +} + +@InCollection{ esslin:beckett:infinity, + author = "Martin Esslin", + title = "Samuel {B}eckett---Infinity, Eternity", + crossref = "brater:beckett:80", + pages = "110--23" +} + +@Book{ euclid:elements:brit, + author = "Euclid", + title = "The Thirteen Books of {E}uclid's Elements", + publisher = "Encylopaedia Britannica", + year = 1952, + volume = 11, + series = "Great Books of the Western World", + address = "Chicago", + opublisher = "Cambridge University Press", + translator = "Sir Thomas L. Heath", + call = "AC1.G72", + library = l-m +} + +@Book{ farrow:beckett:art, + author = "Anthony Farrow", + title = "Early {B}eckett: Art and Allusion in \book{More Pricks + Than Kicks} and \book{Murphy}", + publisher = "Whitston Publishing", + year = 1991, + address = "Troy, New York", + library = l-bc, + invis = "Have much photocopied. All?" +} + +@Book{ federman:beckett:chaos, + author = "Raymond Federman", + title = "Journey to Chaos: {S}amuel {B}eckett's Early Fiction", + publisher = "University of California Press", + year = 1965, + address = "Berkeley" +} + +@Book{ federman:beckett:works, + author = "Raymond Federman and John Fletcher", + title = "Samuel {B}eckett: His Works and His Critics; An Essay in + Bibliography", + publisher = "University of California Press", + year = 1970, + address = "Berkeley", + library = l-hayden, + call = "Z8086.37.F293" +} + +@Book{ fergusson:dante:purgatorio, + author = "Francis Fergusson", + title = "Dante's Drama of the Mind: A Modern Reading of the + \book{Purgatorio}", + publisher = "Princeton University Press", + year = 1953, + call = "PQ4447F53", + library = l-m +} + +@Book{ festugiere:hermes, + author = "A. J. Festugi{\`e}re", + title = "La R{\'e}v{\'e}lation d'Herm{\`e}s Trism{\'e}giste", + publisher = "Paris", + year = 1950, + note = "Cited in \citeNP{yates:bruno}: page references are to + Yates", + library = l-hayden, + invis = "FIX: need to clear up note by insertion into my original + citation", + call = "BF1598.H6F418 1949" +} + +@Book{ fletcher:beckett:art, + author = "John Fletcher", + title = "Samuel {B}eckett's Art", + publisher = "Chatto and Windus", + year = 1967, + address = "London", + call = "PR6003.E282Z664", + library = l-m +} + +@InCollection{ fowlie:beckett:dante, + author = "Wallace Fowlie", + title = "Dante and {B}eckett", + booktitle = "Dante Among the {M}oderns", + publisher = "University of North Carolina Press", + year = 1985, + editor = "Stuart Y. McDougal", + pages = "128--52", + address = "Chapel Hill and London", + call = "PR473.D27 1985", + library = l-unc, + annotation = "Good on Dante, bad on Beckett." +} + +@Book{ frazer:bough:macmillan, + author = "James George Frazer", + title = "The Golden Bough: A Study in Magic and Religion", + publisher = "Macmillan", + year = 1948, + address = "New York", + edition = "1~vol. Abridged~ed.", + oyear = 1922, + call = "BL310.F72 1948", + library = l-m +} + +@InCollection{ freud:btpp, + title = "Beyond the Pleasure Principle", + year = 1920, + crossref = "freud:se", + pages = "18:1--64" +} + +@Book{ freud:btpp:norton, + author = "Sigmund Freud", + editor = "James Strachey", + title = "Beyond the Pleasure Principle", + publisher = "W.~W. Norton and Co.", + year = 1990, + address = "New York", + opublisher = "Liveright", + oyear = 1961, + oaddress = "New York", + fyear = 1920, + flanguage = "German", + note = "On p.~xxxvii: ``The present translation is a corrected + reprint of the \emph{Standard Edition} version'' (i.e., + English translation of~1955)", + translator = "James Strachey", + call = "BF173.F65 1975", + library = l-me, + invis = "Publishing history given on p.~xxxvii. 1990 date taken + from Norton web site (same ISBN); latest copyright date in + book is 1989. Am making educated guess from copyright dates + about the date of the Liveright edition." +} + +@Book{ freud:civ:norton, + author = "Sigmund Freud", + title = "Civilization and Its Discontents", + publisher = "W.~W. Norton and Co.", + year = 1989, + address = "New York", + edition = "Reprint of the Standard Edition", + translator = "James Strachey", + library = l-me, + annotation = "Publishing history given." +} + +@Book{ freud:egoid:norton, + author = "Sigmund Freud", + title = "The Ego and the Id", + publisher = "W.~W. Norton and Co.", + year = 1989, + editor = "James Strachey", + address = "New York", + edition = "Reprint of the Standard Edition", + translator = "Joan Riviere", + library = l-me, + annotation = "Publishing history given." +} + +@InCollection{ freud:mystic, + title = "A Note upon the \Wrapquotes{Mystic Writing-Pad}", + crossref = "freud:papers:basic:5", + year = 1925, + pages = "175--80", + chapter = 15, + invis = "Have photocopy." +} + +@InCollection{ freud:negation, + title = "Negation", + crossref = "freud:papers:basic:5", + pages = "181--85", + year = 1925, + chapter = "16", + invis = "Have photocopy." +} + +@Book{ freud:papers:basic:4, + author = "Sigmund Freud", + title = "Papers on Metapsychology, Papers on Applied + Psycho-Analysis", + booktitle = "Papers on Metapsychology, Papers on Applied + Psycho-Analysis", + series = "Collected Papers", + year = 1959, + volume = 4, + publisher = "Basic Books in arrangement with Hogarth Press and the + Institute for Psycho-Analysis, London", + address = "New York", + note = "Authorized translation from the German under the + supervision of Joan Riviere.", + xxseries = "The International Psycho-Analytical Library", + xxserieseditor= "Ernest Jones", + xxnumber = 10, + keywords = "psychology psychoanalysis", + fyear = 1925, + call = "BF173.F24 (and elsewhere, weirdly)", + library = l-m +} + +@Book{ freud:papers:basic:5, + author = "Sigmund Freud", + editor = "James Strachey", + title = "Miscellaneous Papers, 1888--1938", + booktitle = "Miscellaneous Papers, 1888--1938", + series = "Collected Papers", + year = "1924--50", + volume = 5, + publisher = "Basic Books in arrangement with Hogarth Press and the + Institute for Psycho-Analysis, London", + address = "New York", + note = "Authorized translation from the German under the + supervision of Joan Riviere.", + xxseries = "The International Psycho-Analytical Library", + xxnumber = 37, + xxserieseditor= "Ernest Jones FIX ALL THIS NONSENSE", + xxxvolume-fyear=1950, + keywords = "psychology psychoanalysis", + call = "BF173.F24 (and elsewhere, weirdly)", + library = l-m +} + +@InCollection{ freud:primalwords, + title = "\article{The Antithetical Sense of Primal Words}: A Review + of a Pamphlet by {K}arl {A}bel, \book{{\"U}ber den + Gegensinn der Urworte}, 1884", + crossref = "freud:papers:basic:4", + year = 1910, + chapter = 10, + pages = "184--91", + invis = "Have photocopy." +} + +@Book{ freud:se, + author = "Sigmund Freud", + title = "The Standard Edition of the Complete Psychological Works + of {S}igmund {F}reud", + booktitle = "The Standard Edition of the Complete Psychological Works + of {S}igmund {F}reud", + publisher = "Hogarth Press and the Institute for Psycho-Analysis", + year = 1961, + address = "London", + translator = "Joan Riviere", + call = "BF173.F53 (and elsewhere perhaps)", + editor = "James Strachey", + library = l-m +} + +@InCollection{ freud:wardeath, + title = "Thoughts for the Times on War and Death", + crossref = "freud:papers:basic:4", + pages = "288--317", + year = 1915, + chapter = "17", + invis = "Have photocopy." +} + +@InCollection{ freud:warneuroses, + title = "Psycho-analysis and War Neuroses", + crossref = "freud:papers:basic:5", + year = 1919, + pages = "83--87", + chapter = "8", + invis = "Have photocopy." +} + +@InCollection{ freud:whywar, + title = "Why War?", + crossref = "freud:papers:basic:5", + pages = "273--87", + year = 1932, + chap = "25", + invis = "Have photocopy." +} + +@Book{ friedman:beckett:now, + editor = "Melvin J. Friedman", + title = "Samuel {B}eckett Now", + booktitle = "Samuel {B}eckett Now", + publisher = "University of Chicago Press", + year = 1970, + address = "Chicago", + library = l-m +} + +@Article{ friedman:beckett:tradition, + author = "Melvin J. Friedman", + title = "Samuel {B}eckett: Tradition and Innovation", + journal = "Contemporary Literature", + year = 1995, + volume = 36, + number = 2, + month = "summer", + pages = "350--61", + note = "Review of \book{Wandering and Home} by Eyal Amiran, + \book{The Beckett Studies Reader} by S.~E. Gontarski, + \book{Innovation in Samuel Beckett's Fiction} by Rubin + Rabinovitz, and \book{Beckett's Dying Words} by Christopher + Ricks.", + invis = "Have photocopy." +} + +@InCollection{ frye:anatomy:bate, + author = "Northrop Frye", + year = 1957, + title = "Anatomy of Criticism", + crossref = "bate:criticism", + pages = "609--25" +} + +@InCollection{ frye:archetype:bate, + author = "Northrop Frye", + year = 1951, + title = "The Archetypes of Literature", + crossref = "bate:criticism", + pages = "601--9" +} + +@InCollection{ frye:beckett:nightmare, + author = "Northrop Frye", + title = "The Nightmare Life in Death", + crossref = "butler:beckett:essays", + pages = "101--108", + invis = "Have photocopy." +} + +@Book{ gardner:circus, + author = "Martin Gardner", + title = "Mathemetical Circus", + booktitle = "Mathemetical Circus", + publisher = "Alfred A. Knopf", + year = 1979, + address = "New York", + invis = "Have certain chapters photocopied." +} + +@InCollection{ gardner:circus:cyclic, + title = "Cyclic Numbers", + crossref = "gardner:circus", + chapter = 10, + pages = "111--22", + invis = "Have photocopy." +} + +@InCollection{ gardner:cyclic:simplicity, + title = "Cyclic Numbers", + crossref = "gardner:circus", + pages = "169--181", + chapter = 14, + invis = "Have photocopy." +} + +@Book{ gardner:dante, + author = "Edmund G. Gardner", + title = "Dante and the Mystics: A Study of the Mystical Aspect of + the \book{Divina Commedia} and its Relations With Some of + its Mediaeval Sources", + publisher = "Haskell House Publishers", + year = 1968, + oyear = 1913, + address = "New York", + call = "PQ4416.F13", + keywords = "neoplatonism", + library = l-m, + invis = "Frontmatter filed." +} + +@Book{ gardner:great-essays, + editor = "Martin Gardner", + title = "Great Essays in Science", + publisher = "Prometheus Books", + year = 1994, + address = "Buffalo", + call = "Q171 .S13 1984", + library = l-me # l-se, + invis = "ISBN 0-87975-853-8 01-07-10 at Amazon 2-3 days list + \$21.00 cost \$16.80 \url{http://www.prometheusbooks.com} + says \$23" +} + +@Book{ gardner:night, + author = "Martin Gardner", + title = "The Night is Large: Collected Essays, 1938--1995", + publisher = "St. Martin's Griffin", + year = 1997, + address = "New York", + library = l-me +} + +@Book{ gardner:puzzles2, + author = "Martin Gardner", + title = "The \journal{Scientific American} Book of Mathematical + Puzzles \& Diversions", + publisher = "Simon and Schuster", + year = 1961, + address = "New York", + edition = "2d~ed.", + invis = "Have certain chapters photocopied." +} + +@Article{ garner:beckett:ponty, + author = "Garner, Jr., Stanton B.", + title = "\article{Still living flesh}: {B}eckett, + {M}erleau-{P}onty, and the Phenomenological Body", + journal = "Theatre Journal", + year = 1993, + volume = 45, + pages = "443--60", + invis = "Have photocopy." +} + +@Book{ gascoigne:works:posies, + author = "George Gascoigne", + editor = "John W. Cunliffe", + title = "The Posies", + series = "The Complete Works of {G}eorge {G}ascoigne", + publisher = "Cambridge University Press", + year = 1969, + address = "Cambridge", + volume = 1, + seriesedition = "2~vols.", + oyear = 1907, + oaddress = "Grosse Pointe, Michigan", + opublisher = "Scholarly Press", + call = "PR2277 F07", + invis = "second volume called The Glasse of Government / The + Princely Pleasures at / Kenelworth Castle / The Steele Glas + / And Other Poems and Prose Works dated 1910/1969. Series + is Cambridge English Classics." +} + +@Book{ gate:beckett:festival, + author = "Gerry Dukes", + title = "The {B}eckett {F}estival: {L}incoln {C}enter {F}estival + 1996", + year = 1996, + publisher = "Gate Theater", + note = "Program for a festival of theater perforamnces by the + (Irish) Gate Theater company at the Lincoln Center in New + York. Dukes wrote the notes for each play", + library = l-me +} + +@Article{ gates:beckett:goon, + author = "David Gates", + title = "He Couldn't Go On, He Went On", + journal = "New York Times Book Review", + year = 1996, + pages = 4, + month = "26~" # may, + invis = "Have clipping." +} + +@Book{ gatti:bruno, + author = "Hilary Gatti", + title = "The {R}enaissance Drama of Knowledge", + publisher = "Routledge", + address = "London", + year = 1989, + call = "PR655G38 1989" +} + +@Book{ geerling:plateau, + author = "Paul Geerling", + title = "Down the Grand Staircase", + publisher = "Westwater", + year = 1981, + annotation = "primer of sw geology" +} + +@Book{ geroch:atob, + author = "Robert Geroch", + title = "Gerneral Relativity From A to B", + publisher = "University of Chicago Press", + year = 1978, + address = "Chicago", + library = l-se, + annotation = "Frontmatter filed." +} + +@InProceedings{ gierow:beckett:nobel, + author = "Karl Ragnar Gierow", + title = "Presentation Address [for {B}eckett's {N}obel {P}rize]", + booktitle = "Samuel {B}eckett, {B}j{\"o}rnstjerne {B}j{\"o}rnson, + {P}earl {B}uck [and] Ivan Bunin", + pages = "3--6", + year = 1971, + series = "Nobel Prize Library", + address = "New York", + publisher = "A. Gregory", + note = "Author is permanent Secretary of the Swedish Academy", + call = "PN6014 .S235", + library = l-m, + invis = "Have photocopy. funny title with braces as given by mugar + computer records " +} + +@Book{ gifford:ulysses, + author = "Don Gifford and Robert J. Seidman", + title = "\book{Ulysses} Annotated", + publisher = "University of California Press", + year = 1988, + address = "Berkeley", + call = "PR6019.O9U647 1988", + keywords = "joyce", + library = l-me +} + +@Book{ gleitman:psych, + author = "Henry Gleitman", + title = "Psychology", + publisher = "W.~W. Norton and Co.", + year = 1986, + address = "New York", + edition = "2d~ed.", + call = "BF121.G58 1986", + keywords = "gestalt", + library = l-me +} + +@Book{ glover:wwi, + title = "The {P}enguin Book of {F}irst {W}orld {W}ar Prose", + publisher = "Penguin Books", + year = 1989, + editor = "Jon Glover and Jon Silkin", + keywords = "wwi", + library = l-me +} + +@Book{ gluck:beckett:joyce, + author = "Barbara Reich Gluck", + title = "Beckett and {J}oyce: Friendship and Fiction", + publisher = "Bucknell University Press", + year = 1979, + address = "Lewisburg", + library = l-bc +} + +@Book{ gobar:genges, + author = "Ash Gobar", + title = "Philosophic Foundations of Genetic Psychology and Gestalt + Psychology: A Comparative Study of the Empirical Basis, + Theoretical Structure, and Epistemological Groundwork of + {E}uropean Biological Psychology", + publisher = "Maritnus Nihjogg", + year = 1968, + address = "The Hague", + call = "BF 203 F68c", + library = l-m +} + +@Book{ goddard:newscience, + author = "Thomas Goddard Bergin and Max Harold Fisch", + title = "The New Science of {G}iambattista {V}ico", + publisher = "Cornell University Press", + year = 1970, + library = l-m, + call = "B3581.P73E4 F48" +} + +@Book{ godfrey:conceptual, + author = "Tony Godfrey", + title = "Conceptual Art", + publisher = "Phaidon Press", + year = 1998, + series = "Art \& Ideas", + address = "London" +} + +@Book{ goethe:faust:kaufmann, + author = "Johann Wolfgang von Goethe", + title = "Faust", + publisher = "Doubleday", + year = 1961, + address = "New York", + note = "Part one and selections from part two", + translator = "Walter Kaufmann", + call = "PT2026.F2K3 1989", + library = l-me, + annotation = "Superior to Arndt's translation, but incomplete." +} + +@Book{ goethe:faust:norton, + author = "Johann Wolfgang von Goethe", + title = "Faust", + publisher = "W.~W. Norton and Co.", + year = 1976, + editor = "Cyrus Hamlin", + address = "New York", + edition = "{N}orton Critical~ed.", + translator = "Walter Arndt", + call = "PT2026.F2A75 1976", + library = l-me, + annotation = "Far inferior to Kaufman's translation." +} + +@Article{ gontarski:beckett:editing, + author = "S. E. Gontarski", + title = "Editing {B}eckett", + journal = "Twentieth Century Literature", + year = 1995, + volume = 41, + number = 2, + pages = "190--207", + month = "summer", + invis = "Have photocopy." +} + +@InCollection{ gontarski:beckett:intent, + author = "S. E. Gontarski", + title = "The Intent of Undoing", + crossref = "gontarski:beckett:undoing", + pages = "1--21" +} + +@InCollection{ gontarski:beckett:introcspr, + author = "S. E. Gontarski", + title = "From Unabandoned Works: {S}amuel {B}eckett's Short Prose", + crossref = "beckett:cspr", + pages = "xi--xxxii" +} + +@Book{ gontarski:beckett:onbeckett, + title = "On {B}eckett: Essays and Criticism", + publisher = "Grove Press", + year = 1986, + editor = "S. E. Gontarski", + address = "New York", + call = "PR6003.E282Z814 1986", + library = l-m +} + +@Article{ gontarski:beckett:quad, + author = "S. E. Gontarski", + title = "\play{Quad I \& II}: {B}eckett's Sinister Mime(s)", + journal = jobs, + year = 1984, + number = 9, + pages = "137--38", + invis = "Have photocopy." +} + +@Book{ gontarski:beckett:undoing, + editor = "S. E. Gontarski", + title = "The Intent of Undoing in {S}amuel {B}eckett's Dramatic + Texts", + booktitle = "The Intent of Undoing in {S}amuel {B}eckett's Dramatic + Texts", + publisher = "Indiana University Press", + year = 1985, + address = "Bloomington" +} + +@Book{ gontarski:reader, + title = "Beckett Studies Reader", + publisher = "University Press of Florida", + year = 1993, + editor = "S. E. Gontarski", + address = "Gainesville", + call = "PR6003.E19.Z5719 1993", + library = l-hayden +} + +@Book{ gordon:beckett:world, + author = "Lois Gordon", + title = "The World of {S}amuel {B}eckett, 1906--1946", + publisher = "Yale University Press", + year = 1996, + address = "New Haven", + call = "PR6003.E282Z6666 1996", + library = l-m +} + +@Article{ gordon:panther, + author = "John Gordon", + title = "Notes in Response to {M}ichael {S}eidel's \book{Ulysses' + Black Panther Vampire}", + journal = "James Joyce Quarterly", + year = 1978, + volume = 15, + number = 3, + pages = "229--35", + month = "spring", + library = l-m +} + +@Article{ gordon:panther:2, + author = "John Gordon", + title = "Haines and the Black Panther", + journal = "James Joyce Quarterly", + year = 1990, + volume = 27, + number = 3, + pages = "587--94", + month = "spring", + library = l-m +} + +@Book{ gose:joyce, + author = "Gose, Jr., Eliot B.", + title = "The Transformation Process in {J}oyce's \book{Ulysses}", + publisher = "University of Toronto Press", + year = 1980, + address = "Toronto", + call = "PR6019.O9U65317", + keywords = "freud bruno", + library = l-m, + invis = "My review on disk." +} + +@Book{ grandin:emergence, + author = "Temple Grandin and Margaret M. Scariano", + title = "Emergence: Labelled Autistic", + publisher = "Arena Press", + year = 1993, + address = "Novato, California", + call = "RC553.A88G73 1986", + library = l-m, + invis = "Have phtocopy of parts. Arena Press is \Wrapquotes{an + imprint of Academic Therapy Publications}. Copyright date + is 1986, then says Updated References (1993)." +} + +@Book{ grant:zero, + author = "Edward Grant", + title = "Much Ado About Nothing: Theories of Space and Vacuum from + the Middle Ages to the Scientific Revolution", + publisher = "Cambridge University Press", + address = "Cambridge", + year = 1981, + library = l-m, + call = "QC173.59S65 G72" +} + +@Book{ graver:beckett:heritage, + editor = "Lawrence Graver and Raymond Federman", + title = "Samuel {B}eckett: The Critical Heritage", + publisher = "Routledge and Kegan Paul", + year = 1979, + address = "London", + call = "PR6003.E282 Z822", + library = l-m +} + +@Article{ green:beckett:augustine, + author = "David [D.] Green", + title = "A Note on {A}ugustine's Thieves", + journal = jobsns, + volume = 3, + number = 2, + year = 1994, + pages = "77--78", + keywords = "augustine beckett thieves thief", + invis = "Have photocopy. This is the same person as + green:beckett:niente (who I know from BU)." +} + +@Article{ green:beckett:niente, + author = "David D. Green", + title = "Beckett's \book{Dream}: More Niente than Bel", + journal = jobsns, + year = 1996, + volume = 5, + number = "1--2", + pages = "67--80", + invis = "Have photocopy. This is the same person as + green:beckett:augustine (who I know from BU)" +} + +@Book{ greenberg:kafkaplanck, + author = "Valerie D. Greenberg", + title = "Transgressive Readings: The Texts of {F}ranz {K}afka and + {M}ax {P}lanck", + address = "Ann Arbor", + publisher = "University of Michigan Press", + year = 1990, + library = l-m +} + +@InCollection{ greene:repentance, + author = "Robert Greene", + editor = "Alexander B. Grosart", + invis = "FIX: is repentance name of volume or of the pagerange I + have w/in it?", + title = "The Repentance of {R}obert {G}reene", + booktitle = "The Life and Complete Works in Prose and Verse of {R}obert + {G}reene", + edition = "15~vols.", + pages = "12:151--88", + publisher = "Russell and Russell", + address = "New York", + year = 1964, + series = "Huth Library", + fyear = 1592, + oyear = "n.d.~[1881--86]", + opublisher = "printed for private circulation", + oaddress = "London and Aylesbury" +} + +@Book{ halliwell:nursery, + editor = "James Orchard Halliwell-Phillipps", + title = "The Nursery Rhymes of {E}ngland, Obtained Principally from + Oral Tradition", + publisher = "Singing Tree Press", + year = 1969, + address = "Detroit", + edition = "3d~ed. with additions", + note = "First printed in London; reprinted Boston, Munroe and + Francis, 1843", + invis = "Don't know when THIS edition was first published, or which + edition was published in 1843.", + library = l-mmusic +} + +@Book{ hallyn:poetry, + title = "The Poetic Structure of the World: {C}opernicus and + {K}epler", + translator = "Donald M. Leslie", + author = "Fernand Hallyn", + year = 1990, + publisher = "Zone Books", + address = "New York", + note = "Distributed by MIT Press, Cambridge, Massachusetts", + library = l-hayden, + call = "QB14.5H3513 1990" +} + +@Book{ hamilton:beckett:condemned, + author = "Alice Hamilton and Kenneth Hamilton", + title = "Condemned to Life: The World of {S}amuel {B}eckett", + publisher = "William B Eerdmans", + year = 1976, + call = "PR6003.E282Z6675", + library = l-m +} + +@Article{ hammond:beckett:syntax, + author = "B. S. Hammond", + title = "Beckett and {P}inter: Towards a Grammar of the Absurd", + journal = jobs, + year = 1979, + number = 4, + pages = "35--42", + invis = "Have photocopy." +} + +@Book{ hardy:dynasts, + author = "Thomas Hardy", + title = "The Dynasts: An Epic Drama of the War with {N}apoleon", + publisher = "Macmillan and Co.", + year = 1954, + oyear = 1924, + call = "PR4750.D9 F24", + library = l-m +} + +@Book{ hardy:poems, + author = "Thomas Hardy", + editor = "James Gibson", + title = "The Complete Poems of {T}homas {H}ardy", + publisher = "Macmillan Publishing", + year = 1976, + address = "London", + call = "PR4741.G5 1982", + keywords = "poetry", + library = l-me +} + +@Book{ hardy:poetical, + author = "Thomas Hardy", + editor = "Samuel Lynn Hynes", + title = "The Complete Poetical Works of {T}homas {H}ardy", + year = 1982, + publisher = "Oxford University Press", + address = "New York", + call = "PR4741.H9 1982", + library = l-tw +} + +@Article{ harper:beckett:irish, + author = "George Mills Harper", + title = "Review of \book{The Irish Beckett} by {J}ohn {P}. + {H}arrington ({S}yracuse: {S}yracuse {U}niversity {P}ress, + 1991)", + journal = jobsns, + year = 1992, + volume = 2, + number = 1, + pages = "131--34", + invis = "Have photocopy." +} + +@Book{ harper:blake, + author = "George Mills Harper", + title = "The Neoplatonism of {W}illiam {B}lake", + publisher = "University of North Carolina Press", + year = 1961, + address = "Chapel Hill", + call = "PR4148.P5F61B", + library = l-m, + annotation = "Frontmatter filed." +} + +@Article{ harrington:beckett:entropy, + author = "John P. Harrington", + title = "Pynchon, {B}eckett, and Entropy: Uses of Metaphor", + journal = "Missouri Review", + year = 1982, + volume = 5, + number = 3, + pages = "129--38", + month = "summer", + invis = "Have photocopy." +} + +@Book{ harrington:beckett:irish, + author = "John P. Harrington", + title = "The {I}rish {B}eckett", + publisher = "Syracuse University Press", + year = 1991, + address = "Syracuse", + call = "PR6003.E282Z6678 1991", + library = l-rul +} + +@Article{ harrington:beckett:local, + author = "John P. Harrington", + title = "A Note on \book{Malone Dies} and Local Phenomena", + journal = jobsns, + year = 1992, + volume = 1, + number = "1--2", + pages = "141--43" +} + +@Book{ harrison:beckett:murphy, + author = "Robert Harrison", + title = "Samuel {B}eckett's \book{Murphy}", + publisher = "University of Georgia Press", + year = 1968, + number = 15, + series = "University of Georgia Monographs", + address = "Athens" +} + +@Book{ harvey:beckett:poet, + author = "Lawrence E. Harvey", + title = "Samuel {B}eckett: Poet and Critic", + publisher = "Princeton University Press", + year = 1970, + address = "Princeton", + call = "PR6003.E282Z668", + library = l-m +} + +@Book{ hay:eliot:negative, + author = "Eloise Knapp Hay", + title = "T. {S}. {E}liot's Negative Way", + publisher = "Harvard University Press", + year = 1982, + address = "Cambridge" +} + +@Book{ hayden:collected, + author = "Robert Earl Hayden", + title = "Collected Poems", + publisher = "Liveright Publishing", + year = 1985, + editor = "Frederick Glaysher", + address = "New York", + call = "PS3515.A9363A17 1985", + library = l-me +} + +@Book{ heisenberg:physics, + author = "Werner Heisenberg", + title = "Physics and Philosophy: The Revolution in Modern Science", + publisher = "Harper and Row", + year = 1962, + address = "New York", + oyear = 1958, + volume = 19, + series = "World Perspective Series", + call = "QC6.F584", + keywords = "relativity qm", + library = l-se, + annotation = "Frontmatter filed." +} + +@Book{ henderson:art, + author = "Linda Dalrympe Henderson", + title = "The Fourth Dimension and Non-{E}uclidean Geometry in + Modern Art", + year = 1983, + publisher = "Princeton University Press", + address = "Princeton", + call = "N6490.H44 1983", + library = l-m # l-te +} + +@Book{ heninger:ren, + author = "S. K. Heninger", + title = "Touches of Sweet Harmony: {P}ythagorean Cosmology and + {R}enaissance Poetics", + publisher = "Huntington Library", + address = "San Marino", + year = 1974 +} + +@Book{ heninger:sidney, + author = "S. K. Heninger", + title = "Sidney and {S}penser: The Poet As Maker", + publisher = "Pennsylvania State University Press", + address = "University Park PA", + year = 1989 +} + +@Article{ henning:beckett:guffaw, + author = "Sylvie Debevec Henning", + title = "The Guffaw of the {A}bderite: \book{Murphy} and the + {D}emocritean Universe", + journal = jobs, + year = 1985, + number = 10, + pages = "5--20", + invis = "Have photocopy." +} + +@Book{ henschen:skull, + author = "Folke Henschen", + title = "The Human Skull: A Cultural History", + publisher = "Thames and Hudson", + year = 1966, + address = "London", + keywords = "skull", + library = l-m, + annotation = "Nice lot of pictures or diagrams. Easy reading." +} + +@Book{ heraclitus:kirk:cosmic, + author = "Heraclitus", + editor = "G. S. Kirk", + title = "The Cosmic Fragments", + publisher = "Cambridge University Press", + year = 1970, + address = "Cambridge" +} + +@Book{ heritage, + title = "The {A}merican {H}eritage Dictionary of the {E}nglish + Language", + publisher = "Houghton Mifflin", + year = 1981, + editor = "William Morris", + address = "Boston", + call = "PE1625 .A54 1981b" +} + +@Book{ hill:collected, + author = "Geoffrey Hill", + title = "Collected Poems", + year = 1986, + publisher = "Andre Deutsch", + address = "London", + oyear = 1985, + library = l-me +} + +@Book{ hill:lords, + author = "Geoffrey Hill", + title = "The Lords of Limit: Essays on Literature and Ideas", + publisher = "Andre Deutsch", + year = 1984, + address = "London", + call = "PR503.H54 1984", + keywords = "Pound", + library = l-m, + invis = "Have photocopy of ``Our Word is Our Bond.''" +} + +@Article{ hill:vaughan, + author = "Geoffrey Hill", + title = "A Pharisee to Pharisees: Reflections on {V}aughan's + \poemtitle{The Night}", + journal = "English", + year = 1989, + volume = 38, + pages = "97--113", + month = "summer" +} + +@InCollection{ hills:jones, + author = "Paul Hills", + title = "The Art of {D}avid {J}ones", + crossref = "jones:tate" +} + +@Article{ hobson:beckett:year, + author = "Harold Hobson", + title = "Samuel {B}eckett, Dramatist of the Year", + journal = "International Theater Annual", + year = 1956, + number = 1, + pages = "153--55", + invis = "London: John Calder; cited in Amiran, but elsewhere too." +} + +@Book{ holman:handbook, + author = "C. Hugh Holman and William Harmon", + title = "A Handbook to Literature", + publisher = "Macmillan", + year = 1986, + address = "New York", + edition = "5th~ed.", + note = "Based on the original edition by William Flint Thrall and + Addison Hibbard" +} + +@Book{ homer:odyssey:fitz, + author = "Homer", + title = "The Odyssey", + publisher = "Random House", + year = 1990, + address = "New York", + oyear = 1963, + note = "Text as corrected and reset in~1961", + edition = "First Vintage Classics~ed.", + translator = "Robert Fitzgerald", + illustrator = "Jackie Schuman", + call = "PA4025.A5F5 1990", + library = l-me +} + +@Book{ hopkins:gardner, + author = "Gerard Manley Hopkins", + title = "Poems and Prose", + publisher = "PenGuin Books", + year = 1953, + editor = "W. H. Gardner", + library = l-me +} + +@Book{ horowitz:bruno, + author = "Irving Louis Horowitz", + title = "The {R}enaissance Philosophy of {G}iordano {B}runo", + publisher = "Coleman-Ross", + address = "New York", + year = 1952, + library = l-m, + call = "B783.Z7 F52", + annotation = "Marxist. Points out improvements of Engels on Bruno. Good + analysis of the conflict between Bruno's dialectic method + and his monistic system." +} + +@Book{ housman:last, + author = "A. E. Housman", + title = "Last Poems", + publisher = "Henry Holt and Co.", + year = 1922, + address = "New York", + call = "PR4809.H15L3 F22a", + library = l-m +} + +@Book{ housman:shropshire, + author = "A. E. Housman", + title = "A {S}hropshire Lad", + publisher = "Colby College Library", + year = 1946, + oyear = 1896, + address = "Waterville, Maine", + call = "PR4809.H15S6 F46", + library = l-m +} + +@Book{ ht:pimander, + author = "Hermes Trismegistus", + title = "Hermes {M}ercurius {T}rismegistus his {D}ivine pymander + [microform] : in seventeen books : together with his second + book called {A}sclepius, containing fifteen chapters with a + commentary / translated formerly out of the {A}rabick into + {G}reek, and thence into {L}atine, and {D}utch, and now out + of the original into {E}nglish by {D}r. {E}verard.", + year = 1657, + publisher = "``Printed by J.~S. for Thomas Brewster''", + address = "London", + library = l-mmicro, + call = "AC4.F61" +} + +@Book{ hume:spenser, + author = "Anthea Hume", + title = "Edmund {S}penser: {P}rotestant Poet", + publisher = "Cambridge University Press", + address = "Cambridge", + year = 1984, + library = l-m, + call = "PR2367.R4H8 1984" +} + +@InCollection{ iser:beckett:negativity, + author = "Wolfgang Iser", + title = "The Pattern of Negativity in {B}eckett's Prose", + crossref = "bloom:beckett:mcv", + pages = "125--36", + annotation = "From \journal{Georgia Review} 3, vol 29, (fall 1975).", + invis = "Have photocopy." +} + +@Article{ israel:beckett:bair, + author = "Calvin Israel", + title = "Review of \book{Samuel Beckett: A Biography} by {D}eirdre + {B}air ({N}ew {Y}ork: {H}arcourt {B}race {J}ovanovich, + 1978)", + journal = jobs, + year = 1979, + number = 4, + pages = "80--85", + invis = "Have photocopy." +} + +@Book{ james:principles, + author = "William James", + title = "The Principles of Psychology", + publisher = "Dover Publications", + year = 1950, + address = "New York", + edition = "2~vols.", + opublisher = "Henry Holt and Co.", + oyear = 1890, + oaddress = "New York", + call = "BF121.F18", + library = l-m +} + +@Book{ jasper:literature, + editor = "David Jasper and Colin Crowder", + booktitle = "European Literature and Theology in the Twentieth Century: + Ends of Time", + title = "European Literature and Theology in the Twentieth Century: + Ends of Time", + publisher = "St. Martin's Press", + year = 1990, + address = "New York", + library = l-hayden +} + +@InCollection{ jewinski:beckett:epiphany, + author = "Ed Jewinski", + title = "James {J}oyce and {S}amuel {B}eckett: From Epiphany to + Anti-Epiphany", + crossref = "carey:beckett:joyce", + pages = "160--74", + chapter = 11, + annotation = "Calls our attention to the suspiciously polished character + of the few published interviews that Beckett gave, in the + context of discussing Beckett's ``misreading'' of Joyce, + after Harold Bloom's \book{The Anxiety of Influence}.", + invis = "Have photocopy." +} + +@Book{ joachim:aristotle, + author = "H. H. Joachim", + title = "Aristotle: The {N}icomachean Ethics", + publisher = "Clarendon Press", + address = "Oxford", + year = 1951, + editor = "D. A. Rees", + library = l-m, + call = "B430.A9 F51" +} + +@Book{ johnson:body, + author = "Mark Johnson", + title = "The Body in the Mind: The Bodily Basis of Meaning, + Imagination, and Reason", + publisher = "University of Chicago Press", + year = 1987, + address = "Chicago", + call = "B105.M4J64 1987", + library = l-me +} + +@Book{ jolas:transition, + editor = "Eugene Jolas", + title = "Transition Workshop", + publisher = "Vanguard Press", + year = 1949, + address = "New York" +} + +@Article{ jones:beckett:murphy, + author = "Anthony Jones", + title = "The {F}rench {M}urphy: From \Wrapquotes{rare bird} to + \Wrapquotes{cancre}", + journal = jobs, + year = 1981, + number = 6, + pages = "37--50", + invis = "Have photocopy." +} + +@Book{ jones:dai, + editor = "Rene Hague", + title = "Dai Greatcoat: A Self-portrait of {D}avid {J}ones in his + letters", + publisher = "Faber and Faber", + year = 1980, + address = "London", + call = "PR6019.O53Z48 1980", + library = l-m +} + +@Book{ jones:epoch, + author = "David Jones", + title = "Epoch and Artist", + publisher = "Chilmark Press (distributed by Random House)", + year = 1959, + address = "New York", + call = "PR6019.O53 A6 1959", + library = l-m +} + +@Article{ jones:hopkins, + author = "David Jones", + title = "An Unpublished Appreciation of {G}erard {M}anley + {H}opkins", + journal = "Agenda", + year = 1993, + volume = 31, + number = 3, + library = l-hill, + pages = "72--80", + note = "Edited by Kathleen Henderson Staudt" +} + +@Book{ jones:ip, + author = "David Jones", + title = "In Parenthesis: seinnyessit e gledyf ym penn maeu", + publisher = "Faber and Faber", + year = 1963, + oyear = 1937, + yearcomp = 1932, + address = "London", + library = l-me +} + +@Book{ jones:lord, + author = "David Jones", + title = "The Sleeping Lord and Other Fragments", + publisher = "Faber and Faber", + year = 1974, + address = "London", + library = l-m +} + +@Book{ jones:tate, + author = "David Michael Jones", + title = "David {J}ones", + booktitle = "David Jones", + year = 1981, + publisher = "Tate Gallery", + address = "London", + note = "Exhibition catalog", + call = "N6797.J58A4 1981", + keywords = "jones wwi", + library = l-m +} + +@Book{ joyce:crit, + author = "James Joyce", + editor = "Ellsworth Mason and Richard Mason", + title = "The Critical Writings of {J}ames {J}oyce", + booktitle = "The Critical Writings of {J}ames {J}oyce", + publisher = "Cornell University Press", + year = 1989, + address = "Ithaca, New York", + oyear = 1959, + call = "PR6019.O9A6 1989", + library = l-me +} + +@InCollection{ joyce:crit:cattle, + title = "Politics and Cattle Disease", + crossref = "joyce:crit", + chapter = 47, + pages = "238--41" +} + +@Book{ joyce:dubliners, + author = "James Joyce", + title = "Dubliners", + publisher = "Penguin Books", + address = "New York", + edition = "Rev.~ed.", + year = 1976, + opublisher = "Viking", + oyear = 1968, + fyear = "1916 (USA)", + library = l-me, + invis = "Copyright date 1967; detailed publication information on + copyright page" +} + +@Book{ joyce:kershner:portrait, + author = "James Joyce", + editor = "R. B. Kershner", + title = "A Portrait of the Artist as a Young Man", + publisher = "St. Martin's Press, Bedford Books", + year = 1993, + series = "Case Studies in Contemporary Criticism", + address = "Boston", + library = l-me +} + +@Book{ joyce:ulysses:1961, + author = "James Joyce", + title = "Ulysses", + publisher = "Random House", + year = 1990, + oyear = 1961, + fyear = 1922, + address = "New York", + edition = "First Vintage International~ed.", + call = "PR6019.O9U4 1990", + invis = "FIX Check on publication dates and editions" +} + +@Book{ joyce:ulysses:gabler, + author = "James Joyce", + editor = "Hans Walter Gabler and others", + title = "Ulysses: The Corrected Text", + publisher = "Random House", + year = 1986, + address = "New York", + fyear = 1922, + edition = "First Vintage Books~ed.", + call = "PR6019.O9U4 1986", + library = l-me +} + +@Book{ joyce:wake, + author = "James Joyce", + title = "Finnegans Wake", + publisher = "PenGuin Books", + year = 1939, + address = "New York", + library = l-me +} + +@Book{ juliet:beckett:conversations, + author = "Charles Juliet", + title = "Conversations with {S}amuel {B}eckett and {B}ram van + {V}elde", + publisher = "Academic Press Leiden", + year = 1995, + fyear = "1973, 1986", + fpublisher = "Editions Fata Morgana", + faddress = "Montpellier", + flanguage = "French", + ftitle = "Rencontres avec Bram van Velde and Rencontre avec Samuel + Beckett", + translator = "Janey Tucker", + library = l-me +} + +@Book{ jung:collected, + author = "C. G. Jung", + title = "The Collected Works of {C}. {G}. {J}ung", + booktitle = "The Collected Works of {C}. {G}. {J}ung", + publisher = "Princeton University Press", + year = 1966, + editor = "Sir Herbert Read and Michael Fordham and Gerhard Adler", + invis = "\Wrapquotes{All the volumes comprising the collected works + constitute number 20 in Bollingen Series, sponsored by + Bollingen Foundation}", + translator = "R. F. C. Hull" +} + +@InCollection{ jung:psych-lit, + title = "Psychology and Literature", + crossref = "jung:collected", + volume = 15, + pages = "84--105", + library = l-me +} + +@Book{ jung:tav, + author = "C. G. Jung", + title = "Analytical Psychology: Its Theory and Practice", + booktitle = "Analytical Psychology: Its Theory and Practice", + publisher = "Vintage Books", + year = 1968, + series = "The Tavistock Lectures", + address = "New York", + call = "BF173.J665 1968b", + library = l-m, + invis = "Have photocopy of Lectures Two and Three." +} + +@InCollection{ jung:tav:3, + title = "Lecture 3", + crossref = "jung:tav", + pages = "78--113", + keywords = "recoil", + invis = "Beckett heard and was moved by this lecture. See + \citeNP{bair:beckett:bio}." +} + +@Book{ keller:scihist, + author = "Evelyn Fox Keller", + title = "Reflections on Gender and Science", + publisher = "Yale University Press", + year = 1985, + library = l-se, + address = "New Haven", + call = "Q175.K28 1985" +} + +@Book{ keller:womsci, + title = "Body/politics: Women and the Discourses of Science", + editor = "Mary Jacobus and Evelyn Fox Keller and Sally Shuttleworth", + publisher = "Routledge", + year = 1990, + address = "New York", + library = l-m, + call = "QP81.5B63 1990" +} + +@Book{ kelsey:paria, + author = "Michael Kelsey", + title = "Hiking and Exploring the {P}aria {R}iver", + publisher = "Kelsey", + year = 1987 +} + +@Book{ kelsey:plateau, + author = "Michael Kelsey", + title = "Canyon Hiking Guide to the {C}olorado {P}lateau", + publisher = "Kelsey", + year = 1986, + annotation = "117 sw canyons" +} + +@Book{ kelsey:rafael, + author = "Michael Kelsey and Dee Ann Finken", + title = "Hiking {U}tah's {S}an {R}afael {S}well", + publisher = "Kelsey", + year = 1990, + annotation = "Incorporates historical material." +} + +@Article{ kennedy:beckett:dante, + author = "Sighle Kennedy", + title = "Beckett's \Wrapquotes{Schoolboy Copy} of {D}ante: A + Handbook for Liberty", + journal = "Dalhousie French Studies", + year = 1990, + volume = 19, + pages = "11--19", + month = "fall--winter", + note = "Special issue titled \Wrapquotes{Exile and + Transcendence}.", + invis = "Have photocopy." +} + +@Book{ kennedy:beckett:murphy, + author = "Sighle Kennedy", + title = "Murphy's Bed: A Study of Real Sources and Sur-real + Associations in {S}amuel {B}eckett's First Novel", + booktitle = "Murphy's Bed: A Study of Real Sources and Sur-real + Associations in {S}amuel {B}eckett's First Novel", + publisher = "Bucknell University Press", + year = 1971, + address = "Lewisburg, Pennsylvania", + keywords = "PR6003.E282M835", + library = l-bc +} + +@Book{ kenner:beckett:study, + author = "Hugh Kenner", + title = "Samuel {B}eckett: A Critical Study", + publisher = "University of California Press", + year = 1968, + address = "Berkeley", + edition = "New~ed.", + call = "PR6003.E282Z76 1968", + library = l-m +} + +@InCollection{ kenner:beckett:syntax, + author = "Hugh Kenner", + title = "Shades of Syntax", + crossref = "cohn:beckett:collection", + pages = "21--31", + library = l-me, + invis = "Have photocopy." +} + +@Book{ klein:elementary, + author = "Felix Klein", + title = "Elementary Mathematics From an Advanced Standpoint", + publisher = "Dover Publications", + year = 1924, + edition = "3d~ed. 2~vols.", + translator = "E. R. Hedrick and C. A. Noble", + call = "QA39.K513 1945", + library = l-se, + annotation = "Frontmatter filed." +} + +@Book{ klein:history, + author = "Felix Klein", + title = "Development of Mathematics in the Nineteenth Century", + publisher = "Math Sci Press", + year = 1979, + address = "Brookline, Massachusetts", + oyear = 1928, + volume = 9, + series = "Lie Groups", + translator = "M. Ackerman", + annote = "Appendices: Kleinian Mathematics from an Advanced + Standpoint, by R. Hermann", + call = "QA26.K6213", + library = l-se, + invis = "Frontmatter filed." +} + +@Book{ klein:lectures, + author = "Felix Klein", + title = "The {E}vanston Colloquium Lectures on Mathematics", + year = 1894, + publisher = "Macmillan and Co", + organization = "Chicago Congress of Mathematics", + address = "New York", + call = "QA7.E93", + library = l-se, + annotation = "Frontmatter filed. These seem quite easy to follow. " +} + +@Article{ klein:panther, + author = "A. M. Klein", + title = "The Black Panther (A Study in Technique)", + journal = "Accent: A Quarterly of New Literature", + year = 1950, + volume = 10, + number = 2, + pages = "139--55", + month = "winter", + library = l-m +} + +@Book{ knowlson:beckett:exhibition, + editor = "James Knowlson", + title = "Samuel {B}ecket: An Exhibition Held at {R}eading + {U}niversity {L}ibrary, {M}ay to {J}uly 1971", + publisher = "Turret Books", + year = 1971, + address = "London", + call = "PR6003.E282Z77", + library = l-m +} + +@Book{ knowlson:beckett:frescoes, + author = "James Knowlson and John Pilling", + title = "Frescoes of the Skull: The Later Prose and Drama of + {S}amuel {B}eckett", + publisher = "John Calder", + year = 1979, + address = "London", + library = l-m +} + +@InCollection{ knowlson:beckett:ghost, + author = "James Knowlson", + title = "Ghost Trio\slash Geister Trio", + crossref = "brater:beckett:80", + pages = "193--207", + invis = "Have photocopy." +} + +@Book{ knowlson:beckett:life, + author = "James Knowlson", + title = "Damned to Fame: The Life of {S}amuel {B}eckett", + publisher = "Simon and Schuster", + year = 1996, + address = "New York", + call = "PR6003.E282Z764 1996", + library = l-me +} + +@InCollection{ knowlson:beckett:pipe, + author = "James Knowlson", + title = "Beckett's \Wrapquotes{Bits of Pipe}", + crossref = "beja:beckett:humanistic", + pages = "16--25", + invis = "Have photocopy." +} + +@Book{ knuth:texbook, + author = "Donald Ervin Knuth", + title = "The \TeX{}book", + publisher = "Addison Wesley", + year = 1986, + address = "Reading MA", + volume = "A", + series = "Computers \& Typesetting", + edition = "16th printing, revised", + fyear = 1984, + illustrator = "Duane Bibby", + library = l-me +} + +@Book{ koffka:gestalt, + author = "K. Koffka", + title = "Principles of Gestalt Psychology", + publisher = "Harcourt, Brace and World", + year = 1935, + address = "New York", + call = "BF203.K64 1963", + library = l-m +} + +@Article{ krance:beckett:physics, + author = "Charles Krance", + title = "Odd Fizzles: {B}eckett and the Heavenly Sciences", + journal = "Bucknell Review", + year = 1983, + volume = 27, + number = 2, + pages = "96--107", + invis = "Have photocopy." +} + +@Article{ kroll:beckett:bel, + author = "Jeri L. Kroll", + title = "Belacqua as Artist and Lover: \Wrapquotes{What a + Misfortune}", + journal = jobs, + number = 3, + year = 1978, + pages = "10--39", + invis = "Have photocopy." +} + +@Article{ kroll:beckett:mccabe, + author = "Jeri L. Kroll", + title = "The Surd as Inadmissible Evidence: The Case of + {A}ttourney-general v. {H}enry {M}c{C}abe", + journal = jobs, + year = 1977, + number = 2, + pages = "47--58", + invis = "Have photocopy." +} + +@Book{ krutch:desert, + author = "Joseph Wood Krutch", + title = "The Desert Year", + publisher = "W. Sloane", + year = 1952, + annotation = "A naturalist's insights and observations concerning the + desert ecosystem." +} + +@Book{ krutch:voice, + author = "Joseph Wood Krutch", + title = "The Voice of the Desert", + publisher = "W. Sloane", + year = 1971, + annotation = "A naturalist's insights and observations concerning the + desert ecosystem." +} + +@Book{ lakoff:johnson, + author = "George Lakoff and Mark Johnson", + title = "Metaphors We Live By", + publisher = "University of Chicago Press", + year = 1980, + address = "Chicago", + call = "P106.L235", + library = l-me +} + +@Book{ lakoff:women, + author = "George Lakoff", + title = "Women, Fire, and Dangerous Things: What Categories Reveal + about the Mind", + publisher = "University of Chicago Press", + address = "Chicago", + year = 1987, + call = "P37.L344 1986", + library = l-me +} + +@Book{ lambrechtse:escalante, + author = "Rudi Lambrechtse", + title = "Hiking the {E}scalante", + publisher = "Wasatch", + year = 1985 +} + +@Book{ lamport:latex, + title = "\LaTeX: A Document Preparation System", + author = "Leslie Lamport", + publisher = "Addison Wesley", + year = 1986, + address = "Reading MA", + call = "Z253.4.L38L35 1985", + library = l-me +} + +@Book{ lanczos:space, + author = "Cornelius Lanczos", + title = "Space Through the Ages: The Evolution of Geometrical Ideas + from {P}ythagoras to {H}ilbert and {E}instein", + publisher = "Academic Press", + year = 1970, + address = "London", + call = "QA21.F70 or QA21.L28", + keywords = "geometry history", + library = l-se # l-te # l-me +} + +@Book{ laplanche:psychoanalysis, + author = "Jean Laplanche", + title = "Life and Death in Psychoanalysis", + publisher = "Johns Hopkins University Press", + year = 1976, + address = "Baltimore", + translator = "Jeffrey Mehlman", + library = l-me, + invis = "Published in France by Flammarion as View et mort en + psychanalyse 1970. Mehlman also has introduction, pp + vii--x." +} + +@Book{ lawlor:geometry, + author = "Robert Lawlor", + title = "Sacred Geometry: Philosophy and Practice", + publisher = "Crossroad Publishing", + year = 1982, + series = "The Illustrated Library of Sacred Imagination", + address = "New York", + call = "QA447.L38 1982", + keywords = "geometry golden-mean music Plato", + library = l-se, + annotation = "Kind of cheesy, but lots of nice diagrams. Neat assortment + of cultural and artistic facts. Bibliography." +} + +@Book{ lawrence:letters:boulton, + author = "D. H. Lawrence", + title = "The Letters of {D}. {H}. {L}awrence", + publisher = "Cambridge University Press", + year = 1979, + editor = "James T. Boulton", + call = "PR6023.A93 Z53 1979", + library = l-m +} + +@Article{ lees:beckett:music, + author = "Heath Lees", + title = "\book{Watt}, Music, Tuning and Tonality", + journal = jobs, + year = 1984, + number = 9, + pages = "5--24", + invis = "Have photocopy; also in gontarski:reader I think" +} + +@Book{ leggett:problems-physics, + author = "A. J. Leggett", + title = "The Problems of Physics", + publisher = "Oxford University Press", + year = 1987, + library = l-me +} + +@Article{ lerner:bruno, + author = "Lawrence S. Lerner and Edward A. Gosselin", + title = "Giordano {B}runo", + journal = "Scientific American", + year = "April 1973", + annotation = "The authors consider Bruno in the political situation + during his time in England. Argue that his scientific + conclusions were farfetched (mainly in The Supper of + Ashes). Those around him would have known this, and also + picked up on many of the iconic references in his + illustrations. They argue he was out to make world peace + between the differing Protestants and Catholics in France, + Spain, and England, and that he used the Copernican + cosmology as an extended metaphor for his mystic peace. + Point out the rebirth idea in the whole Ash Wednesday and + Easter thing as evidence of this. Point out his role to + science: one, in making mankind confident that he could + understand the world, and two, in his + rationalism---knowledge, not faith, gets you understanding + of the world." +} + +@Article{ levy:beckett:conv, + author = "Jay A. Levy", + title = "Conversations with {S}amuel {B}eckett", + journal = "American Scholar", + year = 1992, + volume = 61, + number = 1, + pages = "124--31", + month = "winter", + keywords = "beckett science", + library = l-m, + invis = "Have photocopy." +} + +@Book{ lewis:farrington, + author = "Wyndham Lewis", + title = "Wyndham {L}ewis", + booktitle = "Wyndham {L}ewis", + publisher = "Lund Humphries in association with the City of Manchester + Art Galleries", + year = 1980, + address = "London", + note = "Exhibition held at the Manchester City Art Galley from + 1~Oct to 15~Nov 1980", + call = "N6797.L438A4 1980", + library = l-m +} + +@Book{ lightman:physics, + author = "Alan Lightman", + title = "Great Ideas in Physics", + publisher = "McGraw Hill", + year = 1992, + address = "New York", + call = "QC21.2.L54 1992", + keywords = "qm srt grt thermo", + library = l-me +} + +@Book{ limerick:deserts, + author = "Patricia Nelson Limerick", + title = "Desert Passages: Encounters with {A}merican Deserts", + publisher = "University of New Mexico", + year = 1985, + annotation = "anthology" +} + +@Article{ linden:herbert, + author = "Stanton J. Linden", + title = "Herbert and the Unveiling of {D}iana: Stanza Three of + \poemtitle{Vanitie}", + journal = "George Herbert Journal", + month = "spring", + year = 1978, + volume = 1, + pages = "30--37" +} + +@Book{ lingenfelter:deathvalley, + editor = "Richard E. Lingenfelter and Richard A. Dwyer", + title = "Death {V}alley Lore: Classic Tales of Fantasy, Adventure, + and Mystery", + publisher = "University of Nevada Press", + year = 1988, + invis = "I gave this to Isabel." +} + +@Article{ lippman:beckett:noti, + author = "Carlee Lippman", + title = "Proprioceptive Deficit in {B}eckett's \play{Not I}", + journal = jobsns, + year = 1993, + volume = 2, + number = 2, + pages = "81--83", + invis = "Have photocopy." +} + +@Article{ lizhi:physics, + author = "Fang Lizhi", + title = "Form and Physics", + journal = "Partisan Review", + year = 1991, + volume = 58, + number = 4, + pages = "656--664" +} + +@Article{ lodge:beckett:ping, + author = "David Lodge", + title = "Some Ping Understood", + journal = "Encounter", + year = 1968, + volume = 30, + number = 2, + pages = "85--89", + month = feb, + note = "Also in \citeNP{mccarthy:beckett:essays}, 119--27.", + invis = "Have photocopy." +} + +@Article{ long:beckett:company, + author = "Joseph Long", + title = "The Reading of \book{Company}: {B}eckett and the + Bi-Textual Work", + journal = "Forum for Modern Language Studies ", + year = 1996, + volume = 32, + number = 4, + pages = "314--28", + month = oct, + invis = "Have photocopy." +} + +@InCollection{ longair:newphys, + title = "The New Astrophysics", + author = "Malcolm Longair", + crossref = "newphys" +} + +@Book{ longman:2, + title = "The {L}ongman Anthology of Contemporary {A}merican Poetry: + 1950 to the Present", + publisher = "Longman", + year = 1989, + editor = "Stuart Friebert and David Young", + edition = "2d~ed.", + call = "PS613.L6 1988", + library = l-me +} + +@Book{ lorenz:ethology, + author = "Konrad Lorenz", + title = "The Foundations of Ethology", + publisher = "Springer-Verlag", + year = 1981, + address = "New York", + flanguage = "German", + ftitle = "Vergleichende Verhaltensforschung", + translator = "Konrad Z. Lorenz and Robert Warren Kickert" +} + +@Book{ madison:ponty:phenom, + author = "Gary Brent Madison", + title = "The Phenomenology of {M}erleau-{P}onty", + publisher = "Ohio University Press", + year = 1981, + address = "Athens", + note = "Cited in \citeNP{garner:beckett:ponty}, 451" +} + +@Book{ mann:death, + author = "Thomas Mann", + title = "Death in {V}enice and Seven Other Stories", + publisher = "Vintage Books", + year = 1989, + oyear = 1936, + translator = "H. T. Lowe-Porter", + library = l-me +} + +@Book{ maor:infinity, + author = "Eli Maor", + title = "To Infinity and Beyond: A Cultural History of the + Infinite", + publisher = "Birkh{\"a}user", + address = "Boston", + year = 1987, + library = l-se, + call = "QA9.M316 1987" +} + +@Article{ marculescu:beckett:solipsism, + author = "Ileana Marculescu", + title = "Beckett and the Temptation of Solipsism: + \Wrapquotes{\foreign{Esse est aut percipere aut percipi}}", + journal = jobs, + year = 1989, + number = "11--12", + pages = "53--64", + invis = "Have photocopy." +} + +@Book{ matthias:jones, + title = "David {J}ones: Man and Poet", + publisher = "National Poetry Foundation [at?] University of Maine", + booktitle = "David {J}ones: Man and Poet", + year = 1989, + editor = "John Matthias", + address = "Orono, Maine", + call = "PR6019.O53Z65 1989", + library = l-m +} + +@Book{ mccarthy:beckett:essays, + editor = "Patrick A. McCarthy", + title = "Critical Essays on {S}amuel {B}eckett", + booktitle = "Critical Essays on {S}amuel {B}eckett", + publisher = "G.~K. Hall and Co.", + year = 1986, + address = "Boston", + series = "Critical Essays on Modern British Literature", + call = "PR6003.E282Z622 1986", + library = l-m +} + +@Article{ mccarthy:beckett:principle, + author = "Patrick A. McCarthy", + title = "Review of \book{In Principle, {B}eckett is {J}oyce}, ed. + Friedhelm Rathjen", + journal = jobsns, + year = 1998, + volume = 8, + number = 1, + pages = "141--45", + invis = "Have photocopy." +} + +@Book{ mchugh:wake, + author = "Roland McHugh", + title = "Annotations to \book{Finnegans Wake}", + publisher = "Johns Hopkins University Press", + year = 1991, + address = "Baltimore", + edition = "Rev.~ed.", + call = "PR6019.09F59357", + keywords = "joyce", + library = l-me +} + +@Book{ mclaughlin:kant:antinomies, + author = "Peter McLaughlin", + title = "Kant's Critique of Teleology in Biological Explanation: + Antimony and Teleology", + publisher = "E. Mellen Press", + year = 1990, + address = "Lewiston", + invis = "Have chapter 2 photocopied." +} + +@InCollection{ mcmillan:beckett:allegory, + author = "Dougald McMillan", + title = "Samuel {B}eckett and the Visual Arts: The Embarrassment of + Allegory", + crossref = "cohn:beckett:collection", + pages = "121--35", + keywords = "painting", + annotation = "This article is currently in print in + gontarski:beckett:onbeckett.", + library = l-me, + invis = "Have photocopy." +} + +@Misc{ melville:dick:internet, + author = "Herman Melville", + title = "Moby-Dick", + howpublished = "On the internet", + year = "1855?", + library = l-me +} + +@Book{ melville:dick:newberry, + author = "Herman Melville", + title = "Moby-Dick, or The Whale", + publisher = "Northwestern University Press and The Newberry Library", + address = "Evanston, Illinois", + year = 1988, + editor = "Harrison Hayford and Hershel Parker and G. Thomas + Tanselle", + volume = 6, + series = "The Writings of Herman Melville", + seriesedition = "15~vols.", + call = "PS2380 F68", + library = l-m, + invis = "editors are of multivol work" +} + +@Article{ mercier:beckett:math, + author = "Vivian Mercier", + title = "Poet and Mathematician", + journal = "Hermathena", + year = 1986, + number = 141, + pages = "66--71", + month = "winter", + invis = "Have photocopy." +} + +@Book{ merwin:ladders, + author = "W. S. Merwin", + title = "The Carrier of Ladders", + publisher = "Atheneum", + address = "New York", + year = 1970, + call = "PS 3563 E75C3 F70", + library = l-m, + invis = "have photocopy of \poem{Elegy}" +} + +@Book{ michel:bruno, + author = "Paul Henri Michel", + title = "The Cosmology of {G}iordano {B}runo", + publisher = "Cornell University Press", + address = "Ithaca, New York", + translator = "R. E. W. Maddison", + year = 1973, + library = l-m, + call = "B783.Z7M513" +} + +@Book{ milton:darbishire:paralost, + author = "John Milton", + editor = "Helen Darbishire", + title = "Paradise Lost", + series = "Poetical Works", + year = "1952--55", + publisher = "Clarendon Press", + address = "Oxford", + volume = 1, + seriesedition = "2~vols.", + fyear = 1667, + call = "PR3552 F52", + library = l-m +} + +@Misc{ milton:lost:gutenberg, + author = "John Milton", + title = "Paradise Lost", + howpublished = "Project Gutenberg digital edition", + note = "Contact \texttt{}" +} + +@Book{ milton:paradiselost:ricks, + author = "John Milton", + editor = "Christopher Ricks", + title = "Paradise Lost and Paradise Regained", + year = 1968, + publisher = "PenGuin Books", + series = "Signet Classic Poetry Series", + library = l-me +} + +@Book{ milton:riverside, + author = "John Milton", + editor = "Roy Flannagan", + title = "The {R}iverside {M}ilton", + booktitle = "The {R}iverside {M}ilton", + publisher = "Houghton Mifflin", + year = 1998, + address = "Boston", + library = l-me +} + +@InCollection{ milton:riverside:paralost, + title = "Paradise Lost", + crossref = "milton:riverside", + pages = "296--710", + fyear = 1674 +} + +@Book{ minihan:beckett:photos, + author = "George Minihan and Aidan Higgins", + title = "Samuel {B}eckett: Photographs", + publisher = "George Braziller", + year = 1996, + address = "New York", + note = "Photographs by Minihan, text by Higgins", + library = l-me +} + +@Article{ miskinis:beckett:recurrrence, + author = "Steven Miskinis", + title = "Enduring Recurrence: {S}amuel {B}eckett's Nihilistic + Poetics", + journal = "ELH", + year = 1996, + volume = 63, + number = 4, + pages = "1047--1067", + month = "winter", + invis = "Have photocopy." +} + +@Article{ mitchell:beckett:newworks, + author = "Breon Mitchell", + title = "A {B}eckett Bibliography: New Works 1976--1982", + journal = "Modern Fiction Studies", + year = 1986, + volume = 29, + number = 1, + pages = "131--52", + month = "spring", + invis = "Have photocopy." +} + +@Book{ mlaman, + author = "Joseph Gibaldi", + title = "MLA Style Manual and Guide to Scholarly Publishing", + publisher = "Modern Language Assocation of America", + year = 1998, + address = "New York", + edition = "2d ed." +} + +@Article{ montgomery:beckett:quantum, + author = "Angela Montgomery", + title = "Beckett and Science: \book{Watt} and the Quantum Universe", + journal = "Comparative Criticism", + year = 1991, + volume = 13, + pages = "171--81", + invis = "Have photocopy." +} + +@Article{ mood:beckett:system, + author = "John J. Mood", + title = "\Wrapquotes{The Personal System}---{S}amuel {B}eckett's + \book{Watt}", + journal = "Publications of the Modern Language Association of + America", + year = 1971, + volume = 86, + number = 2, + pages = "255--65", + invis = "Have photocopy." +} + +@Book{ moore:infinity, + author = "A. W. Moore", + title = "The Infinite", + publisher = "Routledge", + address = "London", + year = 1990, + library = l-bruce # l-m, + call = "BD411.M59 1990" +} + +@InCollection{ morot-sir:beckett:insincerity, + author = "Edouard Morot-Sir", + title = "Grammatical Insincerity in \book{The Unnamable}", + crossref = "bloom:beckett:trilogy", + pages = "131--44", + invis = "Have photocopy." +} + +@Book{ murphy:beckett:criticism, + author = "P. J. Murphy and Werner Huber and Rolf Breuer and Konrad + Schoell", + title = "Critique of {B}eckett Criticism: A Guide to Research in + {E}nglish, {F}rench, and {G}erman", + publisher = "Camden House", + year = 1994, + series = "Literary Criticism in Perspective", + address = "Columbia", + call = "PR6003.E282Z6237 1994", + library = l-me # l-m +} + +@Book{ nabokov:lectures, + author = "Vladimir Vladimirovich Nabokov", + title = "Lectures on Literature", + publisher = "Harcourt Brace Jovanovich", + year = 1980, + address = "New York", + call = "PN3499.N3 1980" +} + +@Book{ newphys, + editor = "Paul Davies", + title = "The New Physics", + booktitle = "The New Physics", + publisher = "Cambridge University Press", + year = 1989, + address = "Cambridge", + call = "QC21.2 .N49 1988", + library = l-me +} + +@Book{ nichols:utah, + author = "Gary Nichols", + title = "River Runners' Guide to {U}tah and Adjacent Areas", + publisher = "University of Utah", + year = 1986 +} + +@Book{ nicholson:mountains, + title = "Mountain Gloom and Mountain Glory", + author = "Marjorie Hope Nicholson", + library = l-m +} + +@Book{ nietzsche:will:kaufmann, + author = "Friedrich Wilhelm Nietzsche", + editor = "Walter Kaufmann", + title = "The Will to Power", + publisher = "Vintage Books", + year = 1968, + address = "New York", + ftitle = "Der Wille zur Macht", + translator = "Walter Kaufmann and R. J. Hollingdale", + call = "B3313.W53 E5 1968", + library = l-m, + invis = "Mugar record says c1967" +} + +@Book{ niven:numbers, + author = "Ivan Morton Niven and Herbert S. Zuckerman and Hugh L. + Montgomery", + title = "Theory of Numbers", + publisher = "Wiley", + year = 1991, + address = "New York", + edition = "5th~ed.", + call = "QA241.N734 1991 (MIT); QA241.N56 1991 (BU)", + library = l-hayden # l-se +} + +@Book{ norton:english, + editor = "M. H. Abrams and others", + title = "The {N}orton Anthology of {E}nglish Literature", + publisher = "W.~W. Norton and Co.", + year = 1979, + address = "New York", + edition = "4th~ed. 2~vols.", + call = "PR1109.AZ 1979", + library = l-me +} + +@Book{ norton:modern, + editor = "Richard Ellmann and Robert O'Clair and others", + title = "Norton Anthology of Modern Poetry", + publisher = "W.~W. Norton and Co.", + year = 1988, + address = "New York", + edition = "2d~ed.", + call = "PS613.N67 1988", + keywords = "poetry", + library = l-me +} + +@Book{ norton:modern:test, + editor = "Richard Ellmann and Robert O'Clair and others", + title = "Norton Anthology of Modern Poetry", + publisher = "W.~W. Norton and Co.", + year = 1980, + address = "New York", + edition = "2d~ed.", + call = "PS613.N67 1988", + note = "THIS IS A TEST ENTRY norton:modern:test", + keywords = "poetry", + library = l-me +} + +@Book{ norton:poetry, + editor = "Alexander W. Allison and others", + title = "The {N}orton Anthology of Poetry", + publisher = "W.~W. Norton and Co.", + year = 1983, + address = "New York and London", + edition = "3d~ed.", + call = "PR1174.N6 1983" +} + +@Book{ nurmi:blake:heaven, + author = "Martin K. Nurmi", + title = "Blake's \poemtitle{Marriage of Heaven and Hell}: A + Critical Study", + publisher = "Haskell House", + year = 1972, + address = "New York" +} + +@Book{ o'brien:beckettcountry:alt, + author = "Eoin O'Brien", + title = "The {B}eckett Country: An Exhibition for {S}amuel + {B}eckett's Eightieth Birthday", + publisher = "Black Cat Press", + year = 1986, + address = "Dublin", + note = "catalogue by Eoin O'Brien \& James Knowlson; photography + by David Davidson; ``this exhibition was first held in The + Library, University of Reading [newline] \textit{May 1986}", + invis = "ISBN 0 948050 03 9; only a couple of photos, which are in + the big book; brief notes by pilling, knowlson, o'brien. + can't think what that guy meant by its having his + introductoin -- isn't he mike bott? he surely is not + o'brien, is he? his notes are really just acknowledgements + anyway." +} + +@Book{ obrien:beckett:country, + author = "Eoin O'Brien", + title = "The {B}eckett Country: {S}amuel {B}eckett's {I}reland", + publisher = "Black Cat Press in association with Riverrun Press", + year = 1986, + address = "New York", + call = "PR6003.E2822", + library = l-me +} + +@InCollection{ obrien:dreamforward, + author = "Eoin O'Brien", + title = "Foreward", + year = 1992, + crossref = "beckett:dream", + pages = "xi--xx" +} + +@Book{ odum:negrosongs, + author = "Howard Washington Odum and Guy Benton Johnson", + title = "The {N}egro and His Songs: A Study of Typical {N}egro + Songs in the {S}outh", + publisher = "Greenwood Publishing, Negro Universities Press", + year = 1968, + invis = "FIX put note information into proper fields", + address = "New York", + note = "Reprint of edition of 1925 by University of North Carolina + Press, Chapel Hill", + fyear = 1925, + call = "ML3556 F25", + library = l-m +} + +@Book{ oed:2, + title = "The {O}xford {E}nglish Dictionary", + publisher = "Oxford University Press", + year = 1989, + edition = "2d~ed.", + editor = "J. A. Simpson and E. S. C. Weiner", + address = "New York", + call = "PE1625.O87 1989", + library = l-m +} + +@Book{ ohara:beckett:drives, + author = "J. D. O'Hara", + title = "Samuel {B}eckett's Hidden Drives: Structural Uses of Depth + Psychology", + publisher = "University Press of Florida", + year = 1997, + address = "Gainesville", + call = "PR6003.E282Z7824 1997", + library = l-m +} + +@Article{ ohara:beckett:freud:jobs, + author = "J. D. O'Hara", + title = "Freud and the Narrative of \book{Moran}", + journal = jobsns, + year = 1992, + volume = 2, + number = 1, + pages = "47--63", + invis = "Have photocopy." +} + +@Article{ ohara:beckett:jung:jobs, + author = "J. D. O'Hara", + title = "Jung and the Narratives of \book{Molloy}", + journal = jobs, + year = 1981, + number = 7, + pages = "19--47", + annotation = "A substantially revised version of this essay is in + gontarski:reader.", + invis = "Have photocopy." +} + +@Article{ ohara:beckett:valery, + author = "J. D. O'Hara", + title = "Beckett Backs Down: From Home to {M}urphy via + {V}al{\'e}ry", + journal = jobsns, + year = 1994, + volume = 3, + number = 2, + pages = "37--55", + invis = "Have photocopy." +} + +@Article{ omalley:beckett:krapp, + author = "Kevin O'Malley", + title = "Review of \book{Theatre Workbook~1, Samuel Beckett: + \play{Krapp's Last Tape}}, ed. {J}ames {K}nowlson", + journal = jobs, + year = 1984, + number = 9, + pages = "145--50", + invis = "Have photocopy." +} + +@Article{ oneill:beckett:dante, + author = "Kevin C. O'Neill", + title = "Two Trilogies: Notes on {B}eckett and {D}ante", + journal = "Romance Notes", + year = 1992, + volume = 32, + number = 3, + pages = "235--40", + month = "spring", + invis = "Have photocopy." +} + +@Book{ onions:wwi, + title = "Poetry of the {G}reat {W}ar: An Anthology", + publisher = "St. Martin's Press", + year = 1986, + editor = "Dominic Hibberd and John Onions", + address = "New York", + keywords = "wwi", + library = l-me +} + +@Book{ opie:nursery, + editor = "Iona Opie and Peter Opie", + title = "The {O}xford Dictionary of Nursery Rhymes", + publisher = "Clarendon Press", + year = 1952, + address = "Oxford", + edition = "Corrected~ed.", + fyear = 1951, + library = l-m +} + +@Book{ oppenheim:beckett:onon, + editor = "Lois Oppenheim and Marius Buning", + title = "Beckett On and On\lips", + booktitle = "Beckett On and On\lips", + publisher = "Fairleigh Dickinson University Press", + year = 1996, + address = "Madison" +} + +@Book{ orr:dante, + author = "M. A. Orr", + title = "Dante and the Early Astronomers", + year = 1969, + publisher = "Kennikat Press", + address = "Port Washington, New York", + opublisher = "FIX NEED ORIGINAL PUBLISHER AND ADDRESS", + oyear = 1956, + fyear = 1913, + keywords = "dante astrology astronomy", + library = l-me, + annotation = "Frontmatter filed." +} + +@Book{ ovid:loeb, + author = "{Ovid (Publius Ovidius Naso)}", + title = "Ovid in Six Volumes", + publisher = "Harvard University Press", + year = 1977, + yearcomp = "0007", + series = "Loeb Classical Library", + address = "Cambridge", + edition = "3d~ed.", + translator = "Frank Justus Miller", + library = l-me +} + +@Book{ oxford:christian-names, + author = "E. G. Withycombe", + title = "The {O}xford Dictionary of {E}nglish {C}hristian Names", + publisher = "Oxford University Press", + year = 1969, + address = "Oxford", + edition = "Corrected 2d~ed.", + library = l-m +} + +@Book{ peacham:garden, + author = "Henry Peacham", + title = "The Garden of Eloquence", + publisher = "Scholars' Facsimiles and Reprints", + address = "Gainesville", + year = 1954, + library = l-m, + call = "PN173.B93R", + annotation = "A list of rhetorical terms and their definitions. With + examples?" +} + +@Book{ penrose:emporer, + title = "The Emporer's New Mind: Concerning Computers, Minds, and + The Laws of Physics", + author = "Roger Penrose", + publisher = "Oxford University Press", + address = "New York", + year = 1989 +} + +@Book{ perkins:lithistory, + title = "Is Literary History Possible?", + author = "David Perkins", + library = l-me +} + +@Book{ perkins:romantic, + title = "English {R}omantic Writers", + publisher = "Harcourt Brace Jovanovich", + year = 1967, + editor = "David Perkins", + address = "San Diego", + library = l-me +} + +@Book{ perseus:00-03, + editor = "Gregory R. Crane", + title = "The Perseus Project", + publisher = "\url{http://www.perseus.tufts.edu}", + month = mar, + year = 2000 +} + +@Book{ picatrix, + title = "Picatrix, the Latin Version of the Ghayat al-hakim", + editor = "David Pingree", + note = "Authorship attributed to Maslamah ibn Ahmad al-Majriti", + publisher = "Warburg Institute", + address = "London", + year = 1986, + library = l-mmicro, + call = "BF1608.A7G45 1986" +} + +@Book{ pilling:beckett:beckett, + author = "John Pilling", + title = "Samuel {B}eckett", + publisher = "Routledge and Kegan Paul ", + year = 1976, + address = "London", + call = "PR6003.E282Z786M", + library = l-m +} + +@Book{ pilling:beckett:before, + author = "John Pilling", + title = "Beckett Before {G}odot", + publisher = "Cambridge University Press", + year = 1998, + address = "Cambridge", + call = "PR6003.E282 Z7869 1997", + library = l-m +} + +@Book{ pilling:beckett:companion, + title = "The {C}ambridge Companion to {B}eckett", + publisher = "Cambridge University Press", + year = 1994, + editor = "John Pilling", + address = "Cambridge", + call = "PR6003.E282Z585 1993", + library = l-m +} + +@Book{ pilling:beckett:onion, + editor = "John Pilling and Mary Bryden", + title = "The Ideal Core of the Onion: {R}eading {B}eckett Archives", + publisher = "Beckett International Foundation", + year = 1992, + library = l-bc +} + +@InCollection{ pilling:beckett:shadows, + author = "John Pilling", + title = "A Short Statement with Long Shadows: \book{Watt}'s + {A}rsene and His Kind(s)", + crossref = "oppenheim:beckett:onon", + pages = "61--68", + invis = "Have photocopy." +} + +@InBook{ pompa:vico, + author = "Leon Pompa", + title = "Vico and the Presuppositioons of Historical Knowledge", + pages = "125--40", + crossref = "verene:vico" +} + +@Article{ posnock:beckett:valery, + author = "Ross Posnock", + title = "Beckett, {V}al{\'e}ry and \book{Watt}", + journal = jobs, + year = 1981, + number = 6, + pages = "51--62", + invis = "Have photocopy." +} + +@Book{ powell:plateau, + author = "John Wesley Powell", + title = "The Exploration of the {C}olorado River and Its Canyons", + publisher = "Dover", + year = 1961 +} + +@Book{ princeton:poetics, + editor = "Alex Preminger and T. V. F. Brogan", + title = "The New {P}rinceton Encyclopedia of Poetry and Poetics ", + publisher = "Princeton University Press", + year = 1993, + address = "Princeton", + library = l-me +} + +@Book{ putnam:beckett:caravan, + editor = "Samuel Putnam and Maida Castelhun Darton and George Reavey + and J. Bronowski", + volume = 1, + title = "France, {S}pain, {E}ngland and {I}reland", + series = "The {E}uropean Caravan: An Anthology of the New Spirit in + {E}uropean Literature", + publisher = "Brewer, Warren and Putnam", + year = 1931, + note = "Subsequent volumes were not published.", + call = "PN771.E8 1931", + library = l-bcburns +} + +@InCollection{ qconcepts:penrose, + title = "Gravity and state vector reduction", + booktitle = "Quantum Concepts in Space and Time", + editor = "R. Penrose and C. J. Isham", + author = "Roger Penrose", + publisher = "Clarendon Press", + address = "Oxford", + year = 1986 +} + +@Book{ qg2, + title = "Quantum Gravity 2: A Second {O}xford Symposium", + booktitle = "Quantum Gravity 2: A Second {O}xford Symposium", + publisher = "Clarendon Press", + year = 1981, + editor = "C. J. Isham and R. Penrose and D. W. Sciama", + address = "Oxford", + library = m-se +} + +@InCollection{ qg2:davies, + title = "Is Thermodynamic Gravity a Route to Quantum Gravity?", + author = "Paul Davies", + crossref = "qg2" +} + +@InCollection{ qg2:penrose, + title = "Time-asymmetry and Quantum Gravity", + author = "Roger Penrose", + crossref = "qg2" +} + +@InCollection{ qg2:sciama, + title = "The Irreversible Thermodynamics of Black Holes", + author = "D. W. Sciama", + crossref = "qg2" +} + +@InCollection{ qg2:wald, + title = "Black Holes, Thermodynamics, and Time-reversibility", + author = "Robert M. Wald", + crossref = "qg2" +} + +@Article{ rabinovitz:beckett:aphorisms, + author = "Rubin Rabinovitz", + title = "Samuel {B}eckett's Revised Aphorisms", + journal = "Contemporary Literature", + year = 1995, + volume = 36, + number = 2, + pages = "203--25" +} + +@Book{ rabinovitz:beckett:development, + author = "Rubin Rabinovitz", + title = "The Development of {S}amuel {B}eckett's Fiction", + publisher = "University of Illinois Press", + year = 1984, + address = "Urbana", + call = "PR6003.E282Z7887 1984", + library = l-m +} + +@Book{ rabinovitz:beckett:innovation, + author = "Rubin Rabinovitz", + title = "Innovation in {S}amuel {B}eckett's Fiction ", + publisher = "University of Illinois Press", + year = 1992, + address = "Urbana", + call = "PR6003.E282Z78875 1992", + library = l-m +} + +@InCollection{ rabinovitz:beckett:murphy, + author = "Rubin Rabinovitz", + title = "Using the Concordance: \book{{M}urphy} and Repetition", + crossref = "concordance:murphy", + pages = "xi--xxix" +} + +@InCollection{ rabinovitz:beckett:obscurity, + author = "Rubin Rabinovitz", + title = "Style and Obscurity in {S}amuel {B}eckett's Early Fiction", + crossref = "mccarthy:beckett:essays", + pages = "21--29" +} + +@Article{ rabinovitz:beckett:psych, + author = "Rubin Rabinovitz", + title = "Beckett and Psychology", + journal = jobs, + year = 1989, + number = "11--12", + pages = "65--77", + invis = "Have photocopy." +} + +@Article{ rabinovitz:beckett:translator, + author = "Rubin Rabinovitz", + title = "Samuel {B}eckett, Revisionist Translator", + journal = "Review", + year = 1991, + volume = 13, + note = "Review of \book{Beckett and Babel: An Investigation into + the Status of the Bilingual Work} by Brian Fitch, Toronto: + University of Toronto Press, 1988", + pages = "273--81", + invis = "Have photocopy." +} + +@InCollection{ rabinovitz:beckett:unreliable, + author = "Rubin Rabinovitz", + title = "Unreliable Narrative in \book{Murphy}", + crossref = "beja:beckett:humanistic", + pages = "58--70", + invis = "Have photocopy." +} + +@Book{ random, + editor = "Stuart Berg Flexner and others", + title = "The {R}andom {H}ouse Dictionary of the {E}nglish Language", + publisher = "Random House", + year = 1987, + address = "New York", + edition = "2d~ed.", + call = "PE1625.R3 1987", + library = l-me +} + +@Book{ raven:presocratics, + author = "G. S. Kirk and J. E. Raven and Malcolm Schofield", + title = "The Presocratic Philosophers : A Critical History with a + Selection of Texts", + publisher = "Cambridge University Press", + address = "Cambridge", + year = 1983, + edition = "2d~ed.", + library = l-m +} + +@Book{ rawlins:gestalt, + author = "Ian Rawlins", + title = "Aesthetics and the Gestalt", + publisher = "Thomas Nelson and Sons", + year = 1953, + address = "Edinburgh", + call = "BH221.G74R3 F53", + library = l-m +} + +@InBook{ read:epoch, + title = "The Modern Epoch in Art", + crossref = "read:philart", + pages = "3--35" +} + +@Book{ read:philart, + author = "Herbert Read", + title = "The Philosophy of Modern Art", + booktitle = "The Philosophy of Modern Art", + publisher = "Meridian Books", + address = "New York", + year = 1955, + library = l-me +} + +@Article{ redfern:beckett:funnybone, + author = "Walter Redfern", + title = "A Funny-bone to Pick with {B}eckett", + journal = jobsns, + year = 1998, + volume = 8, + number = 1, + pages = "101--19", + invis = "Have photocopy." +} + +@Book{ redmond:drama, + editor = "James Redmond", + title = "Drama and Philosophy", + booktitle = "Drama and Philosophy", + publisher = "Cambridge University Press", + year = 1990, + number = 12, + series = "Themes in Drama", + address = "Cambridge", + invis = "FIX UNC doesn't list the editor, should this be a journal + or a book in a series?" +} + +@InCollection{ renaud:beckett:mag, + author = "Madeleine Renaud", + title = "Beckett the Magnificant", + crossref = "calder:beckett:60", + pages = "81--83" +} + +@Book{ reynolds:joyce, + author = "Mary T. Reynolds", + title = "Joyce and {D}ante: The Shaping Imagination", + publisher = "Princeton University Press", + year = 1981, + address = "Princeton", + library = l-m, + annotation = "Contains appendix with annotations of Dantean allusions in + all Joyce's works. Many are quite dubious, I think. Page + references to Ulysses are to the 1946 Modern Library + edition, call PR6019.O9U44 1946M (in Mugar)." +} + +@Book{ richardson:guide, + editor = "Kenneth Richardson", + title = "Twentieth Century Writing: A Reader's Guide to + Contemporary Literature", + publisher = "Newnes Books", + year = 1969, + address = "London" +} + +@Book{ ricks:beckett:dying, + author = "Christopher B. Ricks", + title = "Beckett's Dying Words", + publisher = "Oxford University Press", + year = 1993, + series = "The Clarendon Lectures, 1990", + address = "New York", + call = "PR6003.E282Z7924 1993", + keywords = "death bull", + library = l-me # l-tw, + annotation = "Wonderful reading. Chapters: death; words that went dead; + languages, both dead and living; The Irish Bull." +} + +@Book{ ricoeur:freud:philosophy, + author = "Paul Ricoeur", + title = "Freud and Philosophy", + publisher = "Yale University Press", + year = 1970, + series = "The Terry Lectures", + address = "New Haven", + call = "BF173F85Z7.F701b", + translator = "Denis Savage", + library = l-m +} + +@Article{ riding:beckett:embrace, + author = "Alan Riding", + title = "Samuel {B}eckett Gets an {I}rish Embrace", + journal = "New York Times", + year = 1996, + pages = "H5, H12", + month = "28~" # jul, + invis = "Have clipping." +} + +@Book{ riquelme:teller, + author = "Riquelme, John Paul", + title = "Teller and Tale in {J}oyce's fiction: Oscillating + Perspectives", + publisher = "Johns Hopkins University Press", + year = 1983, + address = "Baltimore", + call = "PR6019.O9 Z7847 1983", + keywords = "deconstruction", + library = l-m +} + +@InCollection{ robinson:beckett:bruno, + author = "James E. Robinson", + title = "Bruno and {B}eckett: Coincidence of Contraries", + crossref = "redmond:drama", + pages = "171--83", + invis = "Have photocopy." +} + +@Article{ robinson:beckett:dante, + author = "Michael Robinson", + title = "From Purgatory to Inferno: {B}eckett and {D}ante + revisited", + journal = jobs, + year = 1979, + number = 5, + pages = "69--82", + invis = "Have photocopy." +} + +@Article{ rose:beckett:godot, + author = "Lloyd Rose", + title = "Way to \play{Godot}! {W}ashington {S}hakespeare's Boffo + {B}eckett", + journal = "Washington Post", + year = 1994, + pages = "C11", + month = "25~" # may, + invis = "Have clipping" +} + +@Book{ rosenberg:collected, + author = "Isaac Rosenberg", + title = "The Collected Works of {I}saac {R}osenberg: Poetry, Prose, + Letters, Paintings, and Drawings", + publisher = "Oxford University Press", + year = 1979, + editor = "Ian Parsons", + address = "New York", + call = "PR6035.O67 1979b", + keywords = "wwi rosenberg", + library = l-m +} + +@Book{ rotman:zero, + author = "Brian Rotman", + title = "About Nothing: The Semiotics of Zero" +} + +@Book{ rucker:infinity, + author = "Rudy Rucker", + title = "Infinity and the Mind", + call = l-me +} + +@Book{ rudin:math:analysis, + author = "Walter Rudin", + title = "Principles of Mathematical Analysis", + publisher = "McGraw-Hill", + year = 1976, + series = "International Series in Pure and Applied Mathematics", + address = "New York", + edition = "3d~ed.", + fyear = 1953, + call = "QA300.R8 1976", + library = l-me +} + +@Book{ sacks:wife, + author = "Oliver W. Sacks", + title = "The Man Who Mistook His Wife for a Hat and Other Clinical + Tales", + publisher = "Summit Books", + year = 1985, + address = "New York", + call = "RC351 .S195 1985" +} + +@Book{ salmon:philofsci, + author = "Merrilee H. Salmon and John Earman and Clark Glymour and + James G. Lennox and Peter Machamer and J. E. McGuire and + John D. Norton and Wesley C. Salmon and Kenneth F. + Schaffner", + title = "Introduction to the Philosophy of Science", + publisher = "Prentice Hall", + year = 1992, + address = "Englewood Cliffs, New Jersey", + library = l-me +} + +@Book{ schopenhauer:worldaswill:haldane, + author = "Arthur Schopenhauer", + title = "The World as Will and Idea", + publisher = "Kegan Paul, Trench, Tr{\"u}bner and Co.", + year = 1896, + edition = "3~vols.", + address = "London", + oyear = 1883, + translator = "R. B. Haldane and J. Kemp", + flanguage = "German", + invis = "FIX this is simply copied out of DP's bibliography" +} + +@Book{ schopenhauer:worldaswill:payne, + author = "Arthur Schopenhauer", + title = "The World as Will and Representation", + publisher = "Falcon's Wing Press", + year = 1958, + edition = "2~vols.", + address = "Indian Hills, Colorado", + flanguage = "German", + ftitle = "Die Welt als Wille und Vorstellung", + translator = "E. F. J. Payne", + call = "B3138.E5 F58", + library = l-m +} + +@Book{ scruton:aesth, + author = "Roger Scruton", + booktitle = "The Aesthetic Understanding: Essays in the Philosophy of + Art and Culture", + title = "The Aesthetic Understanding: Essays in the Philosophy of + Art and Culture", + publisher = "Carcanet Press", + year = 1983, + address = "Manchester, England", + call = "BH39.S38 1983" +} + +@InCollection{ scruton:beckett:descartes, + title = "Beckett and the {C}artesian Soul", + crossref = "scruton:aesth", + chapter = 16, + pages = "222--41" +} + +@Book{ scruton:music, + author = "Roger Scruton", + title = "The Aesthetics of Music", + publisher = "Oxford University Press", + year = 1999, + invis = "developed from lectures notes of the class I took" +} + +@Book{ scruton:spinoza, + author = "Roger Scruton", + title = "Spinoza", + publisher = "Oxford University Press", + year = 1986, + address = "Oxford", + call = "B3997 .S34 1986", + library = l-m +} + +@Book{ sebha:descartes:dream, + author = "Gregor Sebha", + editor = "Richard A. Watson", + title = "The Dream of {D}escartes", + publisher = "Southern Illinois University Press", + year = 1987, + series = "The \journal{Journal of the History of Philosophy} + Monograph Series", + address = "Carbondale", + call = "B1873.S43 1987", + library = l-m +} + +@Article{ segre:beckett:ping, + author = "Elisabeth Bregman Segr{\`e}", + title = "Style and Structure in {B}eckett's \book{Ping}: \emph{That + Something Itself}", + journal = "Journal of Modern Literature", + year = 1977, + volume = 6, + number = 1, + pages = "127--47", + month = feb, + invis = "Have photocopy." +} + +@Article{ seidel:panther, + author = "Michael Seidel", + title = "\book{Ulysses'} Black Panther Vampire", + journal = "James Joyce Quarterly", + year = 1976, + volume = 13, + number = 4, + pages = "415--27", + month = "summer", + library = l-m +} + +@Book{ shakes:next, + author = "William Shakespeare", + title = "The Complete Works", + publisher = "Oxford University Press and NeXT Digital Press", + address = "Oxford", + year = 1988, + editor = "Stanley Wells and Gary Taylor and others", + edition = "Digital~ed.", + library = l-me, + invis = "copyright 1986 OUP; 1988 NeXT; actually says Clarendon in + larger letters but OUP by the copyright; gives other + editors; and even more who prepared the digital edition." +} + +@Book{ sharp:folksongs, + author = "Cecil J. Sharp", + editor = "Maud Karpeles", + title = "English Folk Songs from the {S}outhern {A}ppalachians: + Comprising 274 Songs and Ballads with 968 Tunes, Including + 39 Tunes Contributed by {O}live {D}ame {C}ampbell", + publisher = "Oxford University Press", + year = 1932, + address = "London", + edition = "2d and enl.~ed.", + fyear = 1917, + library = l-m, + call = "M1629.S53 E6 1952", + invis = "Sharp should technically be listed as `compiler', though + this seems obvious from the title. Seems like orig + published 1917, 2d and enl. in 1932, 2d impression of this + in 1952." +} + +@Book{ shaw:dict, + author = "Harry Shaw", + title = "Concise Dictionary of Literary Terms", + publisher = "McGraw-Hill", + year = 1972, + address = "New York", + call = "PN44.5.S46 1976", + library = l-me +} + +@Article{ shenker:beckett:moody, + author = "Israel Shenker", + title = "Moody Man of Letters: A Portrait of {S}amuel {B}eckett, + Author of the Puzzling \play{Waiting for Godot}", + journal = "New York Times", + year = 1956, + pages = "sec.~2, pp.~1,~3", + month = "6~" # may, + invis = "Have photocopy. Reprinted in graver:beckett:heritage, + 146." +} + +@InCollection{ shimony:newphys, + author = "Abner Shimony", + title = "The Conceptual Foundations of Quantum Mechanics", + pages = "373--95", + crossref = "newphys", + keywords = "qm", + library = l-me +} + +@Book{ shimony:worldview, + author = "Abner Shimony", + title = "Search for a Naturalistic World View", + publisher = "Cambridge University Press", + year = 1993, + volume = "2~vols.", + address = "Cambridge", + library = l-me +} + +@Book{ shipley:literary-terms, + editor = "Joseph T. Shipley", + title = "Dictionary of World Literary Terms, Forms, Technique, + Criticism", + publisher = "George Allen and Unwin", + year = 1970, + address = "London", + edition = "Rev. and enl.~ed.", + library = l-m +} + +@Book{ shlain:art-physics, + author = "Leonard Shlain", + title = "Art \& Physics: Parallel Visions in Space, Time, and + Light", + publisher = "Quill", + year = 1991, + address = "New York", + library = l-me +} + +@InCollection{ sidney:defence:bate, + author = "Sir Philip Sidney", + title = "An Apology for Poetry", + pages = "82--106", + crossref = "bate:criticism" +} + +@Book{ sidney:love, + author = "Singer, Irving", + title = "The Nature of Love", + publisher = "University of Chicago Press", + address = "Chicago", + year = 1984, + library = l-m, + call = "BD436.S5 1984" +} + +@Book{ silkin:wwi, + title = "The {P}enguin Book of {F}irst {W}orld {W}ar Poetry", + publisher = "Penguin Books", + year = 1981, + editor = "Jon Silkin", + address = "London", + edition = "2d~ed.", + keywords = "poetry wwi", + library = l-me +} + +@Book{ singer:bruno, + author = "Dorothea Waley Singer", + title = "Giordano {B}runo: His Life and Thought (With Annotated + Translation of His Work \book{On the Infinite Universe and + Worlds})", + publisher = "Greenwood Press", + address = "New York", + year = 1968, + library = l-m, + call = "B783.Z7.F502c" +} + +@Book{ singer:meaning, + author = "Singer, Irving", + title = "Meaning in Life : The Creation of Value", + publisher = "Free Press", + address = "New York", + year = 1992, + library = l-m, + call = "BD431.S578 1992" +} + +@Book{ skeat:etym, + author = "Walter W. Skeat", + title = "A Concise Etymological Dictionary of the {E}nglish + Language", + publisher = "Oxford University Press", + year = 1927, + address = "London", + edition = "Corrected impression", + oyear = 1882, + call = "PE1580 F11", + library = l-m, + annotation = "This is the book Joyce read for fun. Probably not the + exact edition he consulted." +} + +@Article{ smith:beckett:aporia, + author = "Anna Smith", + title = "Proceeding by Aporia: Perception and Poetic Language in + {S}amuel {B}eckett's \book{Worstward Ho}", + journal = jobsns, + year = 1993, + volume = 3, + number = 1, + pages = "21--37", + invis = "Have photocopy." +} + +@Book{ solomon:beckett:birth, + author = "Philip H. Solomon", + title = "The Life After Birth: Imagery in {S}amuel {B}eckett's + Trilogy", + publisher = "Romance Monographs", + series = "Romance Monographs", + year = 1975, + number = 15, + address = "University, Mississippi", + call = "PQ2603.E378Z84", + library = l-m, + invis = "Have one chapter photocoped." +} + +@Book{ sondheimer:infinity, + author = "Ernst Sondheimer and Alan Rogerson", + title = "Numbers and Infinity: A Historical Account of Mathematical + Concepts", + publisher = "Cambridge University Press", + address = "Cambridge", + year = 1981, + library = l-se, + call = "QA241.S617" +} + +@Book{ sorabji:space, + author = "Richard Sorabji", + title = "Matter, Space, and Motion", + publisher = "Cornell University Press", + year = 1988, + address = "Ithaca", + call = "QC9.G8S67 1988", + keywords = "neoplatonism geometry", + library = l-m, + annotation = "Frontmatter filed." +} + +@Book{ sorley:letters:wilson, + author = "Charles Hamilton Sorley", + title = "The Collected Letters of {C}harles {H}amilton {S}orley", + publisher = "Cecil Woolf", + year = 1990, + editor = "Jean Moorcroft Wilson", + address = "London", + call = "PR6037.O7 Z48 1990", + keywords = "wwi", + library = l-m, + annotation = "Some pages on file." +} + +@Unpublished{ stachel:relativity, + author = "John Stachel", + title = "Changes in Concepts of Space and Time Brought about by + Relativity", + note = "Paper received from author in spring 1993. Do not know if + published. 34 pages", + library = l-me +} + +@Book{ stegner:powell, + author = "Wallace Stegner", + title = "Beyond the Hundredth Meridian", + publisher = "Houghton Mifflin", + year = 1954, + annotation = "History of Powell's expeditions and subsequent career." +} + +@Article{ steiner:beckett:leastness, + author = "George Steiner", + title = "Leastness", + journal = "New Yorker", + year = 1996, + pages = "92--95", + month = "16~" # sep, + invis = "Have clipping." +} + +@Book{ steppe:joyce, + author = "Wolfhard Steppe and Hans Walter Gabler", + title = "A Handlist to {J}ames {J}oyce's \book{Ulysses}: A Complete + Alphabetical Index to the Critical Reading Text", + publisher = "Garland", + year = 1985, + volume = 582, + series = "Garland Reference Library of the Humanities", + call = "PR6019.O9 U725 1985", + library = l-bc, + annotation = "Raw concordance to \citeNP{joyce:ulysses:gabler}." +} + +@Article{ stern:beckett:inter, + author = "Richard Stern", + title = "Samuel {B}eckett", + journal = "Salmagundi", + year = 1991, + number = "90--91", + pages = "179--90", + month = "spring--summer", + invis = "Have photocopy." +} + +@Book{ stevens:collected, + author = "Wallace Stevens", + title = "The Collected Poems of {W}allace {S}tevens", + year = 1990, + publisher = "Vintage Books", + address = "New York", + oyear = 1954, + opublisher = "Knopf", + oaddress = "New York", + call = "PS3537.T4753 1982", + library = l-me +} + +@Book{ stevens:collected:knopf, + author = "Wallace Stevens", + title = "Collected Poems", + publisher = "Knopf", + year = 1954, + address = "New York", + call = "PS3537.T4753 1954", + library = l-tw +} + +@InCollection{ stevenson:beckett:lobster, + author = "Kay Gilliland Stevenson", + title = "Belacqua in the Moon: {B}eckett's Revisions of + \storytitle{Dante and the Lobster}", + crossref = "mccarthy:beckett:essays", + pages = "36--46", + invis = "Have photocopy. Good discussion." +} + +@Book{ swift:tub, + author = "Jonathan Swift", + editor = "Edward Hodnett", + title = "A Tale of a Tub", + publisher = "AMS Press", + year = 1969, + address = "New York", + fyear = 1930, + fpublisher = "Columbia University Press", + faddress = "New York", + call = "PR3724T3F30", + invis = "have photocopy of a few pages", + library = l-m +} + +@InCollection{ tawney:attack, + author = "R. H. Tawney", + title = "The Attack", + booktitle = "The Attack and Other Papers", + publisher = "Harcourt Brace and Co.", + year = 1953, + address = "New York", + call = "JN234 .F53", + keywords = "wwi", + library = l-m, + annotation = "Title essay is gripping description of a trench attack.", + invis = "First published in 1916 I think" +} + +@Book{ tennyson:norton, + author = "Lord Alfred Tennyson", + title = "Tennyson's Poetry", + publisher = "W.~W. Norton and Co.", + year = 1971, + editor = "Robert W. Hill, Jr.", + invis = "Norton Critical~ed.", + library = l-me +} + +@Book{ texas:beckett:symbols, + editor = "Carlton Lake", + title = "No Symbols Where None Intended: A Catalogue of Books, + Manuscripts, and Other Materials Relating To {S}amuel + {B}eckett in the collections of the {H}umanities {R}esearch + {C}enter", + publisher = "University of Texas at Austin Humanities Research Center", + year = 1984, + address = "Austin" +} + +@Book{ topsfield:beckett:humour, + author = "Valerie Topsfield", + title = "The Humour of {S}amuel {B}eckett", + publisher = "St. Martin's Press", + year = 1988, + address = "New York" +} + +@Book{ torretti:geometry, + author = "Roberto Torretti", + title = "Philosophy of Geometry from {R}iemann to {P}oincar{\'e}", + publisher = "D. Reidel Publishing", + year = 1978, + address = "Dordrecht, Holland", + call = "QA447.T67", + keywords = "geometry", + library = l-se, + annotation = "Frontmatter filed." +} + +@Book{ trautman:spacetime, + author = "W. Kopczy{\'n}ski and A. Trautman", + title = "Spacetime and Gravitation", + publisher = "Polish Scientific Publishers", + year = 1992, + address = "Warsaw", + edition = "Revised translation", + fyear = 1984, + fpublisher = "Pa{\'n}stwowe Wydawnictwo Naukowe", + faddress = "Warsaw", + flanguage = "Polish", + ftitle = "Czasoprzestrze{\'n} i Grawitacja", + translator = "Jerzy Baldyga and Antoni Pol", + invis = "I have in photocopy. List of countries in which book can + be sold is given on copyright page; doesn't include USA." +} + +@InCollection{ turner:night, + author = "Frederick Turner", + title = "The {S}chool of {N}ight", + booktitle = "Natural Classicism: Essays on Literature and Science", + publisher = "University Press of Virginia", + address = "Charlottesville", + year = 1992, + pages = "111--50" +} + +@Book{ tuveson:hermes, + author = "Ernest Lee Tuveson", + title = "The Avatars of Thrice Great {H}ermes: An Approach to + {R}omanticism", + publisher = "Bucknell University Press", + address = "Lewisburg", + year = 1982, + library = l-m, + call = "PR.508.H45T8" +} + +@InCollection{ unger:ayer:exist, + author = "Peter Unger", + title = "I Do Not Exist", + crossref = "ayer:perception", + pages = "235--51", + chapter = 10 +} + +@Book{ van-leunen:handbook, + title = "A Handbook for Scholars", + author = "Mary-Claire van Leunen", + publisher = "Knopf", + year = 1979 +} + +@Book{ vanvelde:catalog, + author = "Bram van Velde", + editor = "Stoullig, Claire", + title = "Bram van Velde: Musee National d'Art Moderne, Centre + Georges Pompidou", + publisher = "Le Centre", + year = 1989, + address = "Paris", + series = "Collection Classiques du XXe siecle, ISSN 0760-5153", + note = "Catalog of an exhibition held 19~Oct 1989 to 1~Jan 1990", + call = "ND 653.V416 A4 1989", + library = l-m, + keywords = "newobject", + annotation = "Contains facsimile of catalog introduction by Beckett: + ``The New Object.'' Many color reproductions. Most of the + text is in French.", + invis = "New Object photocopied, filed." +} + +@Article{ verdicchio:beckett:vico, + author = "Massimo Verdicchio", + title = "Exagmination Round the Fictification of {V}ico and + {J}oyce", + journal = "James Joyce Quarterly", + year = 1989, + volume = 26, + number = 4, + pages = "531--39", + month = "summer", + invis = "Have photocopy." +} + +@Book{ verene:vico, + title = "Giambattista {V}ico's Science of Humanity", + booktitle = "Giambattista {V}ico's Science of Humanity", + editor = "Giorgio Tagliacozzo and Donald Phillip Verene", + publisher = "Johns Hopkins University Press", + year = 1976, + library = l-m, + call = "B3583.G48" +} + +@Book{ vernon:dante:purgatorio, + author = "William Warren Vernon", + title = "Readings on the \book{Purgatorio} of {D}ante: Chiefly + Based on the Commentary of {B}envenuto da {I}mola", + publisher = "Methuen", + year = 1907, + address = "London", + edition = "3d~ed., rev., 2~vols.", + fyear = 1889 +} + +@Book{ virgil:aeneid:fitz, + author = "{Virgil (Publius Vergilius Maro)}", + title = "The {A}eneid", + publisher = "Vintage Books", + year = 1983, + address = "New York", + translator = "Robert Fitzgerald", + library = l-me +} + +@Book{ virgil:aeneid:williams, + author = "{Virgil (Publius Vergilius Maro)}", + title = "The {A}eneid of {V}irgil: Books 1--6", + publisher = "Macmillan", + year = 1972, + editor = "R. D. Williams", + library = l-me +} + +@Book{ virgil:aeneid:wiretap, + author = "{Virgil (Publius Vergilius Maro)}", + title = "The {A}eneid", + publisher = "P.~F. Collier and Son", + year = 1909, + volume = 13, + series = "Harvard Classics", + translator = "John Dryden", + address = "New York", + edition = "Internet Wiretap online~ed." +} + +@Book{ wald:grt, + title = "General Relativity", + author = "Robert M. Wald", + publisher = "University of Chicago Press", + address = "Chicago", + year = 1984, + library = l-me +} + +@Book{ walker:magic, + author = "D. P. Walker", + title = "Spiritual and Demonic Magic from {F}icino to {C}ampanella", + publisher = "Warburg Institute", + address = "University of London", + year = 1958, + note = "Cited in \citeNP{yates:bruno}" +} + +@Book{ webster:3, + editor = "Philip Babcock Gove and others", + title = "Webster's Third New International Dictionary of the + {E}nglish Language, Unabridged: A {M}erriam-{W}ebster", + publisher = "Merriam-Webster", + year = 1993, + address = "Springfield, Massachusetts", + library = l-me +} + +@Manual{ webster:next, + title = "Webster's Ninth New Collegiate Dictionary", + organization = "NeXT Computer and Merriam-Webster", + edition = "First Digital~ed.", + year = 1992, + library = l-me +} + +@InBook{ weiner:sidney, + author = "Andrew D. Weiner", + title = "Sir {P}hilip {S}idney and the Poetics of {P}rotestantism: + A Study of Contexts", + chapter = 1, + publisher = "University of Minnesota Press", + address = "Minneapolis", + year = 1978, + invis = "FIX this looks weird", + library = l-m, + call = "PR2342.A6W4" +} + +@Book{ weyl:symmetry, + author = "Hermann Weyl", + title = "Symmetry", + publisher = "Princeton University Press", + year = 1952, + address = "Princeton" +} + +@InBook{ white:vico, + author = "Hayden White", + title = "The Tropics of History: The Deep Structure of the New + Science", + pages = "65--85", + crossref = "verene:vico" +} + +@Book{ whitman:leaves:norton, + author = "Walt Whitman", + editor = "Sculley Bradley and Harold W. Blodgett", + title = "Leaves of Grass", + publisher = "W.~W. Norton and Co.", + year = 1973, + address = "New York", + oyear = 1965, + opublisher = "New York University Press", + fyear = 1891, + call = "PS3201 1972", + library = l-me, + invis = "Norton Critical~ed." +} + +@Book{ whyte:atomism, + author = "Whyte, Lancelot Law", + title = "Essay on Atomism, From {D}emocritus to 1960", + publisher = "Wesleyan University Press", + address = "Middletown, Connecticut", + year = 1961, + library = l-m, + call = "BD646 F61a" +} + +@Book{ wilde:murray, + author = "Oscar Wilde", + editor = "Isobel Murray", + title = "Oscar Wilde", + publisher = "Oxford University Press", + year = 1989, + series = "Oxford Authors", + address = "Oxford", + call = "PR5812.M87 1989", + keywords = "wilde", + library = l-m, + annotation = "Frontmatter filed." +} + +@InCollection{ will:newphys, + title = "The Renaissance of General Relativity", + author = "Clifford Will", + crossref = "newphys" +} + +@Book{ williams:coyote, + author = "Terry Tempest Williams and John Telford", + title = "Coyote's {C}anyon", + publisher = "Gibbs Smith", + year = 1989 +} + +@Book{ wilson:biophilia, + author = "Edward O. Wilson", + title = "Biophilia", + publisher = "Harvard University Press", + year = 1984, + address = "Cambridge", + call = "QH75.W534 1984", + keywords = "biology", + library = l-me, + invis = "Detailed notes in their own file." +} + +@Book{ wilson:consilience, + author = "Edward O. Wilson", + title = "Consilience: The Unity of Knowledge", + publisher = "Knopf", + year = 1998, + address = "New York", + library = l-me, + call = "B72.W54 1998" +} + +@Book{ wilson:human, + author = "Edward O. Wilson", + title = "On Human Nature", + publisher = "Harvard University Press", + year = 1988, + address = "Cambridge", + call = "GN365.9.W54", + library = l-me, + invis = "paper (L-me) ISBN 0-674-63442-X, cloth 0-674-63441-1" +} + +@Book{ wilson:sociobiology, + author = "Edward O. Wilson", + title = "Sociobiology: The New Synthesis", + publisher = "Belknap Press", + year = 2000, + address = "Cambridge, Massachusetts", + edition = "Twenty-Fifth Anniversary Edition", + library = l-me +} + +@Book{ wind:pagan, + author = "Edgar Wind", + title = "Pagan Mysteries in the {R}enaissance", + publisher = "Barnes and Noble", + address = "New York", + year = 1968, + library = l-m +} + +@Article{ winston:beckett:footnote, + author = "Mathew Winston", + title = "\book{Watt}'s First Footnote", + journal = "Journal of Modern Literature", + year = 1977, + volume = 6, + number = 1, + pages = "69--82", + month = feb, + invis = "Have photocopy." +} + +@Book{ wolfson:religion:history, + author = "Harry Austryn Wolfson", + editor = "Isadore Twersky and George H. Williams", + title = "Studies in the History of Philosophy and Religion", + publisher = "Harvard University Press", + year = 1973, + edition = "2~vols.", + call = "B29.W646", + library = l-m +} + +@Book{ wolosky:beckett:mysticism, + author = "Shira Wolosky", + title = "Language Mysticism: The Negative Way of Language in + {E}liot, {B}eckett, and {C}elan", + publisher = "Stanford University Press", + year = 1995, + address = "Stanford", + call = "PN771 .W65 1995", + library = l-m +} + +@Book{ work:folksongs, + author = "John Wesley Work", + title = "Folk Song of the {A}merican {N}egro", + publisher = "Negro Universities Press", + year = 1969, + address = "New York", + oyear = 1915, + oaddress = "Nashville, Tennessee", + library = l-m +} + +@Book{ yates:bruno, + author = "Frances A. Yates", + title = "Giordano {B}runo and the {H}ermetic Tradition", + publisher = "Routledge and Kegan Paul", + year = 1964, + address = "London", + library = l-m # l-tw, + call = "B783.Z7 F64 or $\sim$.Z7 Y3" +} + +@InCollection{ zeifman:beckett:criticule, + author = "Hersh Zeifman", + title = "\play{Come and Go}: A Criticule", + crossref = "beja:beckett:humanistic", + pages = "137--44", + invis = "Have photocopy." +} + +@InCollection{ zeifman:beckett:religion, + author = "Hersh Zeifman", + title = "Religious Imagery in the Plays of {S}amuel {B}eckett", + crossref = "cohn:beckett:collection", + pages = "85--94", + invis = "Have photocopy." +} + +@Article{ zurbrugg:beckett:irish, + author = "Nicholas Zurbrugg", + title = "Review of {S}amuel {B}eckett Special Issue of + \journal{Irish University Review: A Journal of Irish + Studies} 14 (1), spring 1984", + journal = jobs, + year = 1989, + number = "11--12", + pages = "163--66", + invis = "Have photocopy." +} + +@Book{ zwinger:river, + author = "Ann Swinger", + title = "Run, River, Run: A Naturalist's Journey Down One of the + Great Rivers of the {A}merican {W}est", + publisher = "University of Arizona", + year = 1975 +} + +@Book{ zwinger:wind, + author = "Ann Zwinger", + title = "Wind in the Rock", + publisher = "Harper and Row", + year = 1978 +} diff --git a/macros/latex/contrib/frankenstein/lips.ins b/macros/latex/contrib/frankenstein/lips.ins new file mode 100644 index 0000000000..0188a95fdf --- /dev/null +++ b/macros/latex/contrib/frankenstein/lips.ins @@ -0,0 +1,64 @@ +% lips.ins -- docstrip driver for the lips LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + lips.sty or lips.stq. This + LaTeX package will work ONLY if it is called lips.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + lips.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{lips.stq}{\from{lips.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file lips.stq is a faster replacement for the file} +\Msg{* lips.sty.} +\Msg{*} +\Msg{* lips.stq is stripped of comments (documentation) and must be} +\Msg{* renamed lips.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/lips.pdf b/macros/latex/contrib/frankenstein/lips.pdf new file mode 100644 index 0000000000..4a8a36ea77 Binary files /dev/null and b/macros/latex/contrib/frankenstein/lips.pdf differ diff --git a/macros/latex/contrib/frankenstein/lips.sty b/macros/latex/contrib/frankenstein/lips.sty new file mode 100644 index 0000000000..35b60029ef --- /dev/null +++ b/macros/latex/contrib/frankenstein/lips.sty @@ -0,0 +1,555 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% lips LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, lips.tex +% and lips.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{207} +% +% \begin{abstract} +% The \cs\lips command generates text ellipses that are closer to what +% \manual suggests than what \cs\dots produces. It does the right thing in +% most circumstances, and so is easy to use. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \section{Text Ellipses} +% +% \DescribeMacro{\lips} +% The macro \cs\lips should be used for all text ellipses, that is, ellipses +% not part of a mathematical expression. +% +% \manual does not acknowledge different spacings after different marks of +% punctuation, distinguish interword from intersentence space, or give rules +% about where to break a line near an ellipsis. Given a context where such +% spaces do vary and rules for linebreaks can be given, I arrived at the +% following rules for handling them around ellipses. +% \begin{enumerate} +% \item Pre-, post-, and intra-ellipsis space is normal intra-word space, which +% should be 3-to-em. In \LaTeX{} there is also some glue (it's a +% ``rubber space''). +% \item When non-period punctuation $p$ follows \cs\lips, $p$ is followed by +% the space that normally follows $p$. +% \item A period following \cs\lips is treated as if the period preceded +% \cs\lips. Conceptually, an ellipsis never precedes a period, so +% conceptually there is only one case; but it is convenient to be able to +% type either \code{\lips.} or \code{.\lips}. +% \item Lines are a tiny bit breakable before ellipses and a tiny bit +% breakable after ellipses that are not followed by punctuation. +% \end{enumerate} +% +% In figure~\ref{fig:usage} are examples of correct usage and in +% figure~\ref{fig:comp} is a comparison of \cs\lips to \cs\dots. You can +% substitute any of the characters \code$!"()*+,-/:;=?@[]'`|<>~{}$ for the +% exclamation point in the examples. There can be additional contiguous spaces +% after \cs\lips, just like after any command name. There can also be +% contiguous spaces before \cs\lips. +% +% \begin{figure} +% \DeleteShortVerb{\|} +% \begin{center} +% \begin{tabular}{lc} +% \bfseries source & \bfseries \hspace*{4em} result +% \end{tabular}\par\nobreak +% \par\nobreak +% \begin{tabular}{|lp{1in}|} +% \hline +% \verb*|Hello\lips. And| & Hello\lips. And \\\hline +% \verb*|Hello \lips. And| & Hello \lips. And \\\hline +% \verb*|Hello.\lips And| & Hello.\lips And \\\hline +% \verb*|Hello. \lips And| & Hello. \lips And \\\hline +% \verb*|one,\lips, three| & one,\lips, three \\\hline +% \verb*|one, \lips, three| & one, \lips, three \\\hline +% \verb*|Hello\lips and| & Hello\lips and \\\hline +% \verb*|Hello \lips and| & Hello \lips and \\\hline +% \verb*|Hello!\lips And| & Hello!\lips And \\\hline +% \verb*|Hello! \lips And| & Hello! \lips And \\\hline +% \end{tabular} +% \end{center} +% \caption{\label{fig:usage}Examples of correct usage of \cs\lips.} +% \MakeShortVerb{\|} +% \end{figure} +% +% \begin{figure} +% \begin{center} +% \begin{tabular}{lc} +% \bfseries source & \bfseries \hspace*{4em} result +% \end{tabular}\par +% \par +% \DeleteShortVerb{\|} +% \begin{tabular}{|lp{1in}|} +% \hline +% \verb*|Hello\dots. And| & Hello\dots. And \\ +% \verb*|Hello\lips. And| & Hello\lips. And \\\hline +% \verb*|Hello \dots. And| & Hello \dots. And \\ +% \verb*|Hello \lips. And| & Hello \lips. And \\\hline +% \verb*|Hello.\dots And| & Hello.\dots And \\ +% \verb*|Hello.\lips And| & Hello.\lips And \\\hline +% \verb*|Hello. \dots And| & Hello. \dots And \\ +% \verb*|Hello. \lips And| & Hello. \lips And \\\hline +% \verb*|one,\dots, three| & one,\dots, three \\ +% \verb*|one,\lips, three| & one,\lips, three \\\hline +% \verb*|one, \dots, three| & one, \dots, three \\ +% \verb*|one, \lips, three| & one, \lips, three \\\hline +% \verb*|Hello\dots and| & Hello\dots and \\ +% \verb*|Hello\lips and| & Hello\lips and \\\hline +% \verb*|Hello \dots and| & Hello \dots and \\ +% \verb*|Hello \lips and| & Hello \lips and \\\hline +% \verb*|Hello!\dots And| & Hello!\dots And \\ +% \verb*|Hello!\lips And| & Hello!\lips And \\\hline +% \verb*|Hello! \dots And| & Hello! \dots And \\ +% \verb*|Hello! \lips And| & Hello! \lips And \\\hline +% \end{tabular} +% \end{center} +% \caption{\label{fig:comp}Comparison of \cs\lips with \cs\dots.} +% \MakeShortVerb{\|} +% \end{figure} +% +% \section{Line breaking considerations} +% +% \DescribeMacro\LPNobreakList +% When \cs\lips is followed by certain punctuation (\code|,:;?!)']}/| by +% default), we never want to break a line after the ellipsis and before that +% punctuation. For the other punctuation, such as open parenthesis and open +% quote, we want normally breakable space following the ellipsis. +% \cs\LPNobreakList is a list of those characters before which \cs\lips +% should \emph{never} break a line. To force unbreakable space following +% \cs\lips, follow \cs\lips with a tie (|~|). +% +% \section{Limitations} +% +% \cs\lips does the right thing after \cname{par}, but after \cs\indent or +% \cs\noindent there is an extra preceding space (see the final section on +% testing for an example). Suggestions on how to handle this problem are +% welcome. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{Chicago Manual text ellipses (Frankenstein's lips)} +\def\DoXPackageS {} +\def\initelyHavECitationS {} +\def\fileversion{v2.1} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{lips}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{The macro} +% +% \begin{macro}{\Lips} +% \begin{macro}{\BracketedLips} +% \begin{macro}{\lips} +% \begin{macro}{\olips} +% If we're in math mode, raise an error. If we're in vertical mode, leave it +% and do an ellipsis not breakable at the end. If we're in horizontal mode, +% call \cname{lp@lips@hmode}. +% +% Normally I would use \cs\NewRobustCommand, but this seems not enough reason +% to require the \package{moredefs} package. We reserve the name \cs\lips by +% hand. In the future, this package may require \package{moredefs}. +% \begin{macrocode} +\newcommand*\Lips {} +\let\Lips\relax +\DeclareRobustCommand\Lips {% + \ifmmode + \def\sc@t@a {% + \PackageError{lips} + {Don't use \protect\lips \space in math mode; use \protect\dots.}\@ehc + }% + \else + \ifvmode + \def\sc@t@a {% + \leavevmode + .\nobreak\ .\nobreak\ .\nobreak\ % + }% + \else + \let\sc@t@a\lp@lips@hmode + \fi + \fi + \sc@t@a +} +\newcommand*\BracketedLips {} +\let\BracketedLips\relax +\DeclareRobustCommand\BracketedLips {% + \ifmmode + \def\sc@t@a {% + \PackageError{lips} + {Don't use \protect\lips \space in math mode; use \protect\dots.}\@ehc + }% + \else + \ifvmode + \def\sc@t@a {% + \leavevmode + [.\nobreak\ .\nobreak\ .]\nobreak\ % + }% + \else + \let\sc@t@a\lp@blips@hmode + \fi + \fi + \sc@t@a +} +% \end{macrocode} +% \todo{need the relax to avoid mistaking as optarg in some +% contexts?} In MLA style, that is, with the \option{mla} option, \cs\lips +% gives you brackets, meaning you To get no brackets, use \cs\olips for +% ``original lips,'' that is, ellipses in the original document. \todo{Better +% dox here. Are options case sensitive? If so, make MLA=mla.} +% \begin{macrocode} +\newlet\lips\Lips +\newlet\olips\lips +\DeclareOption{mla} {% + \let\lips\BracketedLips +} +\ProcessOptions +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\lp@lips@hmode} +% \begin{macro}{\lp@blips@hmode} +% \begin{macro}{\GobbleIgnoreSpaces} +% The horizontal mode case. Then we remove the last skip on the horizontal +% list. If the next character is a period, we want to act as if the period +% preceded \cs\lips, so we plonk down a period, a minimally-breakable space, +% then an ellipsis ending with normally-breakable space. This keeps the +% ellipsis on the same line as the sentence it follows if at all possible, +% but allows it to spill onto the next line if there's no other way to avoid +% an overfull line. Then we want to gobble up the period that's about to +% come, and ignore any spaces after it, since we've already inserted proper +% space. +% +% If the next character is not a period, we output a minimally-breakable +% space and an ellipsis. To decide whether to follow it with unbreakable or +% normally-breakable space, we need to know more about the next character +% than just that it is not a period, so we \cs\let it to scratch |a| and call +% \cname{lp@lips@check@punct}. +% +% \todo{document different logic with bracketed lips; how the heck to handle +% greater inter-sentence space?} +% \begin{macrocode} +\newcommand\lp@lips@hmode {% + \unskip + \@ifnextchar . {% + .\penalty9999\ .\nobreak\ .\nobreak\ .\ % + \GobbleIgnoreSpaces + }{% ELSE + \penalty9999\ .\nobreak\ .\nobreak\ .% + \futurelet\sc@t@a\lp@lips@check@punct + }% +} +% hmm, have to keep the check for period i guess because i don't want it in +% nobreaklist? because the break/nobreak is different? because it's more efficient? +\newcommand\lp@blips@hmode {% + \unskip + \@ifnextchar . {% + \penalty9999\ [.\nobreak\ .\nobreak\ .]% + }{% ELSE + \penalty9999\ [.\nobreak\ .\nobreak\ .]% + \futurelet\sc@t@a\lp@lips@check@punct + }% +} +\newcommand\GobbleIgnoreSpaces [1] {% + \ignorespaces +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\LPNobreakList} +% \begin{macro}{\lp@} +% We'd like to use \code{\ifcat.\sc@t@a} for this, but that won't work when +% we get a command sequence in scratch |a|. Bummer. +% Do I really need to define all this punctuation now? It protects against +% something becoming an active char or otherwise changing catcodes after the +% \package{lips} package is loaded. +% \begin{macrocode} +\newcommand*\lp@bang {} +\newcommand*\lp@rparen {} +\newcommand*\lp@comma {} +\newcommand*\lp@slash {} +\newcommand*\lp@colon {} +\newcommand*\lp@semic {} +\newcommand*\lp@q {} +\newcommand*\lp@rbrack {} +\newcommand*\lp@rquote {} +\newcommand*\lp@tilde {} + +\let\lp@bang=! +\let\lp@rparen=) +\let\lp@comma=, +\let\lp@slash=/ +\let\lp@colon=: +\let\lp@semic=; +\let\lp@q=? +\let\lp@rbrack=] +\let\lp@rquote=' +\let\lp@tilde=~ + +% \egroup + +% \end{macrocode} +% I'm making an attempt to put these in order of expected frequency. A +% doublequote could be at the beginning or end of a quotation, so half the time +% you'll have to correct by adding |{}|, so let's leave it out +% so there's one less to check. +% \begin{macrocode} +\newcommand \LPNobreakList {% + \lp@comma \lp@colon \lp@semic + \lp@q \lp@bang + \lp@rparen \lp@rquote \lp@rbrack \egroup + \lp@slash +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\lp@lips@check@punct} +% Add nonbreakable space if scratch |a| is in \cs\LPNobreakList; add +% normally-breakable space otherwise. Add no space at all if scratch |a| is +% a tie---the tie will add nonbreakable space. We use just the guts of +% \cname{@tfor} for efficiency. +% \begin{macrocode} +\newcommand\lp@lips@check@punct {% + \ifx\sc@t@a\lp@tilde + \else + \@tempswatrue + \let\@fortmp\PunctList + \expandafter\@tforloop\LPNobreakList\@nil\@nil\@@\reserved@a {% + \ifx\sc@t@a\reserved@a + \@tempswafalse + \@break@tfor + \fi + }% + \if@tempswa + \ % + \else + \nobreak\ % + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% You might want to compare the \LaTeX{} version (as of 95/12/01). +% \cname{fontdimen3} is the interword stretchability, not interword space. +% \begin{codeexample} +% \DeclareTextCommandDefault{\textellipsis}{% +% .\kern\fontdimen3\font +% .\kern\fontdimen3\font +% .\kern\fontdimen3\font +% } +% \def\mathellipsis{\mathinner{\ldotp\ldotp\ldotp}} +% \DeclareRobustCommand{\dots}{% +% \ifmmode\mathellipsis\else\textellipsis\fi +% } +% \let\ldots\dots +% \end{codeexample} +% +% \part{Testing} +% +% \section{Ante-\cs\lips} +% +% This is some testing. We need some text here as the first paragraph after +% the \cs\section. +% +% : \lips. +% +% : \lips text. +% +% : \lips) +% +% ; \lips. +% +% ; \lips text. +% +% ; \lips) +% +% ! \lips. +% +% ! \lips text. +% +% ! \lips) +% +% t \lips. +% +% t \lips text. +% +% t \lips) +% +% T \lips. +% +% T \lips text. +% +% T \lips) +% +% , \lips. +% +% , \lips text. +% +% , \lips) +% +% \par \lips and (|\par \lips and|) +% \par and (|\par and|) +% +% \par\indent \lips (|\par\indent \lips and|) +% \par\indent and (|\par\indent and|) +% +% \par\noindent \lips and (|\par\noindent \lips and|) +% \par\noindent and (|\par\noindent and|) +% +% \par And.\lips \par (|And.\lips \par|) +% \par And. \par (|And. \par|) +% +% \section{Post-\cs\lips} +% +% \cs\lips before a tie: One two three.\lips~tiedtolips (I doubt you'd want to +% do this.) +% +% \cs\lips before ), e.g., punctuation transparent to spacefactors: +% +% (One two three.\lips)\ This follows the ) with interword space, to compare. +% +% (One two three.\lips) This should follow the ) with intersentence space. +% +% (One two three.\lips\@) This should follow the ) with intersentence space. +% +% \cs\lips before shortverb: \lips |shortverb verbatim stuff| +% +% \cs\lips before \cs\textsf: \lips \textsf{sansserif} +% +% \begin{center} +% \cs\lips before |\\|: \lips \\ +% second line of a \env{center} environment +% \end{center} +% +% \cs\lips before \cs\#: \lips \# +% +% \cs\lips before |<|: \lips < +% +% \cs\lips before an abbrev: \lips \Frankenstein +% +% \cs\lips before \cs\cite: \lips \cite{chicago:14} +% +% \cs\lips before |$|: \lips $f=ma$ ^^A$ +% +%^^A \cs\lips in math mode (error!): $\lips^2$ +% +% \begin{tabular}{ll} +% \cs\lips before |&|: \lips & second column of a \env{tabular} +% \end{tabular} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/lips.tex b/macros/latex/contrib/frankenstein/lips.tex new file mode 100644 index 0000000000..2c60ab165b --- /dev/null +++ b/macros/latex/contrib/frankenstein/lips.tex @@ -0,0 +1,67 @@ +% lips.tex -- documentation for the lips LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{lips.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{lips} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{lips.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/moredefs.ins b/macros/latex/contrib/frankenstein/moredefs.ins new file mode 100644 index 0000000000..65c45b5a42 --- /dev/null +++ b/macros/latex/contrib/frankenstein/moredefs.ins @@ -0,0 +1,64 @@ +% moredefs.ins -- docstrip driver for the moredefs LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + moredefs.sty or moredefs.stq. This + LaTeX package will work ONLY if it is called moredefs.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + moredefs.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{moredefs.stq}{\from{moredefs.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file moredefs.stq is a faster replacement for the file} +\Msg{* moredefs.sty.} +\Msg{*} +\Msg{* moredefs.stq is stripped of comments (documentation) and must be} +\Msg{* renamed moredefs.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/moredefs.pdf b/macros/latex/contrib/frankenstein/moredefs.pdf new file mode 100644 index 0000000000..5555d69f38 Binary files /dev/null and b/macros/latex/contrib/frankenstein/moredefs.pdf differ diff --git a/macros/latex/contrib/frankenstein/moredefs.sty b/macros/latex/contrib/frankenstein/moredefs.sty new file mode 100644 index 0000000000..28c26446c3 --- /dev/null +++ b/macros/latex/contrib/frankenstein/moredefs.sty @@ -0,0 +1,1478 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% moredefs LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, moredefs.tex +% and moredefs.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{793} +% +% \begin{abstract} +% A delightful collection of defining, expansion, and debugging commands that +% make elegant programming in \LaTeX{} fun and easy. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% These macros were written in response to practical programming needs. Most +% of the packages I have written, whether distributed or not, depend on this +% package. Using these constructs has saved me a lot of time and made my code +% much more readable---that is, maintainable and improvable. For examples of +% these macros in useful applications, see the packages in the \Frankenstein +% bundle. +% +% \section{Naming conventions} +% +% The convention is that a capital \emph{E} means the macro expands something +% just once. A lowercase \emph{e}, as in \cs\edef, means the macro expands +% something all the way to unexpandable tokens. +% +% The specification \meta{\\csname} means a control sequence with a preceding +% backslash; the specification \meta{csname} means a control sequence without a +% preceding backslash. \meta{csname} arguments are expanded. Commands which +% take \meta{csname} arguments have |Name| in their names. +% +% When I write \word{package} in this documentation, I mean \LaTeX{} package or +% class. +% +% \section{Conditionals} +% +% \DescribeMacro{\@ifundefined@cs} +% \cname{@ifundefined@cs}\marg{\\csname}\marg{true}\marg{false} executes the +% \meta{true} clause if \meta{\\csname} is not defined, and the \meta{else} +% clause otherwise. +% +% \DescribeMacro{\IfElement...\string\In} +% To check whether a token \meta{thingma} is \cs\ifx-equal to any token in a +% list of tokens stored in a macro \meta{list}, use +% \cs\IfElement\meta{thingma}\cs\In\meta{list}\marg{true}\marg{false}. The +% top-level expansion of \meta{list} must be a list of tokens to compare with +% \meta{thingma} with \cs\ifx. If the \meta{thingma} is in the \meta{list}, +% the \meta{true} clause is executed; otherwise, the \meta{false} clause is +% executed. +% +% \section{Defining commands} +% \subsection{\protect\code{*} and no-\protect\code{*} forms} +% The naming convention of most defining commands in the \LaTeX{} kernel and +% in \package{moredefs} is that the no-|*| form of the command is |long| and +% the |*|-form is not |long|. +% +% \subsection{User commands} +% +% \DescribeMacro\InitCS +% \DescribeMacro{\InitCS*} +% \cs\InitCS and \cname{InitCS*} take one argument, \meta{\\csname}, and +% initialize it to |{}|. +% +% \DescribeMacro\InitName +% \DescribeMacro{\InitName*} +% \cs\InitName and \cname{InitName*} are the same but take an argument +% \meta{csname} without a backslash. +% +% \DescribeMacro\ShortEmpty +% \DescribeMacro\LongEmpty +% To make it easier to avoid the problem of comparing |long| and +% non-|long| macros with \cname{ifx}, compare macros with \cs\ShortEmpty +% and \cs\LongEmpty. +% +% \DescribeMacro\ReserveCS +% \DescribeMacro{\ReserveCS*} +% \cs\ReserveCS\marg{\\csname} reserves \meta{\\csname} for the current +% package's use. The variable is also initialized with the \cs\InitCS or +% \cs\InitCS* as appropriate. +% +% \DescribeMacro\ReserveName +% \DescribeMacro{\ReserveName*} +% \cs\ReserveName and \cname{ReserveName*} are the same but take an argument +% \meta{csname} without a backslash. +% +% \DescribeMacro\SaveCS +% \DescribeMacro\RestoreCS +% \cs\SaveCS\marg{\\csname} saves the present value of \meta{\\csname} in a +% macro (\cname{MDSaved}\meta{csname}). The saved value is restored to +% \meta{\\csname} by \cs\RestoreCS\marg{\\csname}. +% +% \DescribeMacro\SaveName +% \DescribeMacro\RestoreName +% \cs\SaveName and \cname{RestoreName} are the same but take an argument +% \meta{csname} without a backslash. +% +% \DescribeMacro\requirecommand +% \DescribeMacro{\requirecommand*} +% \cs\requirecommand takes arguments like \cs\newcommand and behaves like +% \cs\providecommand (defined in the kernel) with the following difference: +% if the control sequence is already defined, \cs\requirecommand calls +% \cs\CheckCommand to make sure that the new and existing definitions are +% identical, whereas \cs\providecommand assumes that if the control sequence +% is already defined, the existing definition is appropriate. +% \cs\requirecommand, like \cs\defcommand, \emph{guarantees} that a control +% sequence will have the given definition, but \cs\requirecommand also warns +% you if there was a previous and different existing definition. +% +% \DescribeMacro\newtokens +% \DescribeMacro\newlet +% \DescribeMacro\newboolean +% \cs\newtokens\marg{\\csname}, \cs\newlet\marg{\\csname}\marg{\\csname}, +% and \cs\newboolean\marg{csname} give an error if their control sequence +% argument is already defined. \cs\newtokens creates a token variable. +% \cs\newlet does a \cs\let assignment. \cs\newboolean\marg{csname} creates +% three new control sequences: two switches, |\csnametrue| and +% |\csnamefalse|, and a test, |\ifcsname|. \cs\newtokens is \emph{not} +% |outer|. Is there any reason this really matters? +% +% \begin{warning} +% Limitation: You can't use \cs\newlet to \cs\let a command sequence +% to a character with a catcode not equal to 10 (space), 11 (letter), 12 +% (other), or 13 (active). For example, you can't say |\newlet\foo#|. +% Also, you cannot use |=| with \cs\newlet like you can with \cs\let. +% \end{warning} +% +% \DescribeMacro\providetokens +% \DescribeMacro\provideboolean +% \DescribeMacro\providesavebox +% \DescribeMacro\providecounter +% \DescribeMacro\providelength +% Like the kernel's \cs\providecommand, the commands +% \cs\providetokens\marg{\\csname}, \cs\provideboolean\marg{csname}, +% \cs\providesavebox\marg{\\csname}, \cs\providecounter\marg{csname}, and +% \cs\providelength\marg{\\csname} will create a new object (or objects) +% based on the name \meta{\\csname} or \meta{csname} only if they are not +% already defined. See the corresponding commands that begin with |\new| +% instead of |\provide| for a description of what kind of object is created. +% In contrast with \cs\providecommand, however, these commands will write a +% record to the log file if their argument was already defined +% (\cs\providecommand does nothing at all in this case). +% +% \DescribeMacro\UndefineCS +% \DescribeMacro\UndefineName +% \cs\UndefineCS\marg{\\csname} causes \meta{\\csname} to be undefined. +% \cs\UndefineName does the same for a \meta{csname}. Use with caution. +% \cs\global works before them. +% +% \DescribeMacro\defcommand +% \DescribeMacro{\defcommand*} +% \cs\defcommand\marg{\\csname}\oarg{\# of args}\oarg{default for an optarg} +% defines \meta{\\csname} in the same manner as \cs\newcommand except no +% warning or error is issued if \meta{\\csname} is already defined. +% +% \cs\defcommand is very similar to the primitive \cs\def, so why would you +% want to use it? For one thing, the syntax is the same as all the other +% \LaTeX{} defining commands, so it is easier to read, and easier to change +% the word \code{defcommand} to one of the other defining commands. Second, +% \cs\defcommand{}s that take arguments have simpler syntax when defining +% commands are nested. You still have to double the |#| characters in the +% definition body, but the argument specification (e.g., |[n]|) is the same +% as if not nested. +% +% There is a performance-syntax tradeoff; I choose to use \cs\defcommand +% whenever the command to be defined is taking an argument. When it does not +% take an argument, there is no difference between \cs\def and \cs\defcommand +% except that \cs\def is faster. +% +% I see very little reason to ever use \cs\renewcommand. It causes an error +% when the control sequence is \emph{not} already defined. Conceivably this +% is useful during development to catch programming mistakes, but much more +% often I find that I don't care whether the control sequence was defined or +% not, and therefore the error \cs\renewcommand might raise is inappropriate +% and a problem. +% +% \DescribeMacro\NewName +% \DescribeMacro{\NewName*} +% \cs\NewName\marg{csname}\marg{template}\marg{body} defines \meta{csname} to +% expand to \meta{body} using a \TeX-style argument \meta{template}, +% e.g. |#1#2\@nil| or simply |#1#2|. +% If \meta{csname} is already defined, an error will be signalled. +% +% \DescribeMacro\DefName +% \DescribeMacro{\DefName*} +% \cs\DefName is like \cs\NewName but no error is signalled if \meta{csname} +% is already defined. +% +% \DescribeMacro\Global +% If the command \cs\Global immediately precedes \cs\NewName, \cs\DefName, or +% \cs\ToggleBoolean, then the definition will be global. +% +% \todo{Get something like \cs\Global going for all the new commands, not +% just \cs\DefName and \cs\NewName.} +% +% \DescribeMacro\CheckName +% \DescribeMacro{\CheckName*} +% \cs\CheckName is like \cs\NewName but instead of defining the control +% sequence, it checks whether the control sequence has the given definition. +% If so, no action is taken; if not, a warning is given. +% +% \DescribeMacro\RequireName +% \DescribeMacro{\RequireName*} +% \cs\RequireName is to \cs\requirecommand as \cs\NewName is to +% \cs\newcommand. The syntax is +% \cs\RequireName\marg{csname}\marg{template}\marg{body}. +% +% \DescribeMacro\NewTextFontCommand +% \DescribeMacro\NewRobustCommand +% \cs\NewTextFontCommand and \cs\NewRobustCommand are just like the kernel's +% \cs\DeclareTextFontCommand and \cs\DeclareRobustCommand, but they signal an +% error instead of just a warning if their first argument is already defined. +% +% \DescribeMacro\Elet +% \DescribeMacro\EElet +% \cs\Elet expands the second token after it once and then \cs\let{}s the +% first token to the second token. \cs\global works before it. \cs\EElet +% expands the two tokens that come after it once each, and then \cs\let{}s +% the first to the second. \cs\global works before it. +% +% \DescribeMacro\NewUserInfo +% \DescribeMacro{\NewUserInfo*} +% \cs\NewUserInfo\oarg{user-cmd}\marg{variable}, where \meta{variable} has +% some capital letters, will define the lowercase version of \meta{variable} +% to be a user command that redefines \meta{variable} to its argument. The +% argument \meta{user-cmd}, if supplied, is used for the user command, +% overriding the default of the lowercased \meta{variable}. +% +% For example, |\NewUserInfo*\Subtitle| defines a user command +% |\subtitle|\marg{text} which does the equivalent of +% |\defcommand\Subtitle{|\meta{text}|}|. +% +% \cs\NewUserInfo uses \cs\ReserveCS to initialize \meta{variable}; +% \cs\NewUserInfo** uses \cs\ReserveCS*. +% +% These have |@| in their names because they are modelled after kernel +% commands. \todo{Sort out naming comventions and write them down.} +% +% \DescribeMacro{\addto@macro} +% \DescribeMacro{\lg@addto@macro} +% \cname{addto@macro}\marg{\\csname}\marg{tokens} adds \meta{tokens} to the +% end of \marg{\\csname}. The redefinition of \marg{\\csname} is local. The +% kernel provides the global equivalent, \cname{g@addto@macro}. +% \cname{lg@addto@macro} is both |long| and global. +% \caveat{These commands won't work with a \meta{\\csname} that takes +% arguments.} +% \begin{todo} +% Probably it would not be too hard to handle that case. Here is how you would +% do it by hand for one example: +% \begin{codeexample} +% % something like: \def\@chapter[#1]#2{...} +% +% \typeout{\meaning\@chapter} +% +% \renewcommand\addto@macro [2] {% +% \sc@toks@a=\expandafter{#1[##1]{##2}#2}% +% \edef#1[##1]##2{% +% \the\sc@toks@a +% }% +% } +% +% \def\doodie#1{bobo \textsc{#1}} +% \tracingonline1 +% +% \Debug2 +% \addto@macro\@chapter {\doodie blorful} +% \Debug0 +% +% \typeout{\meaning\@chapter} +% \end{codeexample} +% \end{todo} +% +% \DescribeMacro{\prependto@macro} +% \DescribeMacro{\g@prependto@macro} +% \DescribeMacro{\lg@prependto@macro} +% \cname{prependto@macro}\marg{\\csname}\marg{tokens} adds \meta{tokens} to +% the beginning of \marg{\\csname}. The redefinition of \marg{\\csname} is +% local. The global equivalent is \cname{g@prependto@macro}. +% \cname{lg@prependto@macro} is both |long| and global. +% +% \section{Controlling expansion} +% +% \DescribeMacro{\EExpand...\string\In} +% \DescribeMacro{\EExpand*...\string\In} +% \DescribeMacro{\eExpand...\string\In} +% \DescribeMacro{\eExpand*...\string\In} +% \DescribeMacro\eExecute +% \DescribeMacro{\eExecute*} +% A common construction is to \cs\edef a scratch variable to something and +% then execute the scratch variable. The \cs\eExecute macro takes a single +% argument, expands it fully, then executes it. +% +% \cs\eExpand\marg{first tokens}\cs\In\marg{second tokens} expands the +% \meta{first tokens} inside \meta{second tokens} wherever |#1| occurs. +% \cs\EExpand expands the first token of \meta{first tokens} only once. +% These commands can nest. +% +% For example, +% \begin{bothexample} +% \def\a {\b} +% \def\b {Hello } +% \def\x {d} +% \eExpand\a worl\x\In {% +% \def\c {This is a good way to avoid lots of noexpands and +% expandafters. #1. And I continue.}% +% \def\x {boogaloo}% \x is already expanded in the def of \c +% \c +% } +% +% \EExpand\a BLOOB\x\In {% +% \def\x{avoid } +% \edef#1{\b world}% BLOOB\x is syntactic sugar +% This is a good way to \x lots of noexpands and +% expandafters. \a BLOOB\x. And I continue.% +% } +% \end{bothexample} +% The two commands expand to the same three sentences. Here is one more +% example, showing (again) how \cs\EExpand expands only the first token of its +% argument only once:: +% \begin{bothexample} +% \def\x{XXX} +% \def\a{AAA\x} +% \def\b{BBB} +% \EExpand\a\b\In{% +% \def\x{xxx} +% \def\a{aaa} +% \def\b{YYY} +% #1 +% } +% \end{bothexample} +% +% \begingroup +% \catcode`\ =11\relax +% \DescribeMacro{\E@car...\string\@nil } +% \DescribeMacro{\E@cdr...\string\@nil } +% \endgroup +% Let $T$ be the sequence of tokens between \cname{E@car} and \cname{@nil}. +% The first token of $T$ is expanded once, and \cs{\E@car...\@nil} +% expands to the first token of the result. +% +% \cname{E@cdr...\@nil} is similar, but expands to the entire result +% \emph{except} its first token. +% +% For example, after +% \begin{codeexample} +% \def\a {Hello} +% \def\b { world} +% \end{codeexample} +% |\E@car \a there\b.\@nil| would expand first of all to +% |H|\@. And |\E@cdr \a there\b.\@nil| would expand first of all to +% |ellothere\b.|, and then eventually expand fully to |ellothere world.|. +% +% The example is more complicated than you would normally use. Usually you +% want to |car| and |cdr| a sequence of tokens contained in macro |\foo|, and +% this is easy enough with |\E@car\foo\@nil|. To chop off the first token of +% |\foo|, |\edef\foo {\E@cdr\foo\@nil}|. (If you're wondering, the space +% after |\foo| is irrelevant.) +% +% \section{Gobbling} +% +% \DescribeMacro{\Gobble} +% \DescribeMacro{\GobbleM} +% \DescribeMacro{\GobbleO} +% \DescribeMacro{\GobbleMM} +% \DescribeMacro{\GobbleMO} +% \DescribeMacro{\GobbleOM} +% It occurs fairly often that you want to gobble things while \cs\makeatother +% is in effect, so these command names have no |@|'s. The |M| stands for a +% mandatory argument, and the |O| stands for an optional argument. For +% example, suppose there is a command |\foo|\oarg{optarg}\marg{marg}. If you +% |\let\foo\GobbleOM|, then the arguments to |\foo| will be gobbled +% appropriately. +% +% \cs\Gobble is the same as \cs\GobbleM, in imitation of the internal +% \cname{@gobble}. +% +% \section{Option declaration} +% +% The follwing two commands may be used in packages before the +% \cs\ProcessOptions command is issued. +% +% \DescribeMacro\DeclareBooleanOptions +% \cs\DeclareBooleanOptions\marg{on}\marg{off} declares a new boolean +% variable |@|\meta{on}|@| and makes it |true| if the option +% \option{\meta{on}} is given to the package, and |false| if the option +% \option{\meta{off}} is given, or if neither is given. I think it is good +% programming style not to rely on the default, always declaring either +% \meta{on} or \meta{off} with an \cs\ExecuteOptions statement. +% +% \DescribeMacro\DeclareBooleanUserOptions +% \cs\DeclareBooleanUserOptions\marg{on}\marg{off} is like +% \cs\DeclareBooleanOptions, but additionally declares two user commands +% \meta{\\on} and \meta{\\off} which are \cs\let to |\@|\meta{on}|@true| and +% |\@|\meta{off}|@false|, respectively. Use this command when it is sensible +% to change the status of the option after the package has been loaded. +% +% \section{Toggle a boolean} +% +% \DescribeMacro\ToggleBoolean +% \cs\ToggleBoolean\marg{boolean} changes the state of \meta{boolean} from +% |false| to |true| or vice versa. The argument \meta{boolean} should not +% include an initial |if| or final |true| or |false|. The redefinition is +% local unless \cs\Global precedes \cs\ToggleBoolean. +% +% \section{Debugging} +% +% \DescribeMacro\VerboseErrors +% \LaTeX{} by default gives very little context for errors. +% \cs\VerboseErrors\oarg{number} causes \LaTeX{} to give \meta{number} lines +% of context, or the maximum by default. +% +% \DescribeMacro\GVerboseErrors +% Like \cs\VerboseErrors but effective globally. +% +% \DescribeMacro\Debug +% \cs\Debug\marg{number} sets a debugging parameter to \meta{number}. I have +% plans to turn this into a bitwise parameter like many C programs, but right +% now the behavior is to issue a message with \cs\typeout, call +% \cs\VerboseErrors, and use the parameter to assign values to +% \cs\tracingoutput, \cs\tracingpages, \cs\tracingmacros, and +% \cs\tracingcommands. +% +% \DescribeMacro\GDebug +% \cs\GDebug\marg{number} is as \cs\Debug but its assignments are +% \cs\global. +% +% \DescribeMacro\DTypeout +% \DescribeMacro\DDTypeout +% \DescribeMacro\DDDTypeout +% \cs\DTypeout expands to \cs\typeout when \cs\Debug is 1 or greater, and +% \cs\GobbleM otherwise. \cs\DDTypeout is \cs\GobbleM unless \cs\Debug is 2 +% or greater; \cs\DDDTypeout is \cs\GobbleM unless \cs\Debug is 3 or greater. +% +% \DescribeMacro\DGobbleM +% Like \cs\GobbleM but when \cs\Debug is 1 or greater, tells you what it's +% gobbling with a \cs\typeout. +% +% \DescribeMacro\FrankenError +% \DescribeMacro\FrankenWarning +% \DescribeMacro\FrankenInfo +% The commands \cs\FrankenError, \cs\FrankenWarning, and \cs\FrankenInfo are +% defined here for use by other \Frankenstein packages and classes. They are +% simply wrappers for the obvious kernel commands (i.e., substitute +% ``Generic'' for ``Franken''). +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{more defining commands (Frankenstein's brain)} +\def\DoXPackageS {} +\def\fileversion{v1.8} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{moredefs}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Conditionals} +% We start with the conditionals section because we want to use +% \cname{@ifundefined@cs} in this package to make some of the subsequent +% definitions easier to read. +% +% \begin{macro}{\@ifundefined@cs} +% \mbox{} +% \begin{macrocode} +\newcommand*\@ifundefined@cs [1] {% + \edef\reserved@a{% + \expandafter\@gobble\string #1% + }% + \@ifundefined\reserved@a + \@firstoftwo + \@secondoftwo +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\IfElement...\In} +% \mbox{} +% \begin{macrocode} +\newcommand\IfElement{} +\def\IfElement #1\In#2{% + \@tempswafalse + \expandafter \@tfor + \expandafter \sc@t@a + \expandafter :% + \expandafter =#2\do {% + \ifx #1\sc@t@a +% \DTypeout{[\meaning #1] matches element [\meaning\sc@t@a] +% in [\string#2].}% + \@tempswatrue + \@break@tfor + \else +% \DTypeout{[\meaning #1] matches NO elements in [\string #2].}% + \fi + }% + \if@tempswa + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} +% \end{macrocode} +% \end{macro} +% +% \section{Defining commands} +% +% \begin{macro}{\sc@star@or@long} +% \begin{macro}{\sc@star@nothing} +% The macros \cname{sc@star@or@long} and \cname{sc@star@nothing} are parallel +% to the kernel's \cname{@star@or@long} and \cname{l@ngrel@x}, which control +% whether definitions are |long| or not. \cname{sc@star@or@long} causes the +% value of \cname{sc@star@nothing} to be either |*| or empty, depending on +% whether it finds a |*| when it is called. It also sets the kernel's +% \cname{l@ngrel@x} to nothing or \cs\long, respectively. (We need both +% flags at least once.) +% \begin{macrocode} +\newcommand*\sc@star@nothing{} +\newcommand*\sc@star@or@long [1] {% args: defining-command + \@ifstar {% + \let\l@ngrel@x\relax + \def\sc@star@nothing {*}% + #1% + }{% ELSE + \let\l@ngrel@x\long + \def\sc@star@nothing {}% + #1% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\md@check@star} +% Looks for a star with \cname{@ifstar} and sets \cname{sc@star@nothing} to +% |*| if there is a star and \cs\ShortEmpty if not. +% \begin{macrocode} +\newcommand\md@check@star {% + \@ifstar {% + \def\sc@star@nothing {*}% + }{% ELSE + \let\sc@star@nothing \ShortEmpty + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\requirecommand} +% \begin{macro}{\requirecommand*} +% \begin{macro}{\require@command} +% A typical application of the star mechanisms is \cs\requirecommand. +% \begin{macrocode} +\newcommand\requirecommand {% + \sc@star@or@long\require@command +} +\newcommand\require@command [1] {% args: \csname + \@ifundefined@cs{#1} {% + \expandafter\newcommand\sc@star@nothing + }{% ELSE + \expandafter\CheckCommand\sc@star@nothing + }% + {#1}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\InitCS} +% \begin{macro}{\InitCS*} +% \begin{macro}{\InitName} +% \begin{macro}{\InitName*} +% \begin{macro}{\ReserveCS} +% \begin{macro}{\ReserveCS*} +% \begin{macro}{\ReserveName} +% \begin{macro}{\ReserveName*} +% \begin{macro}{\ShortEmpty} +% \begin{macro}{\LongEmpty} +% \mbox{} +% \begin{macrocode} +\newcommand\InitCS {% + \@star@or@long\Init@CS +} +\newcommand\Init@CS [1] {% args: \csname + \l@ngrel@x\def#1{}% +} +\newcommand\InitName {% + \sc@star@or@long\Init@Name +} +\newcommand\Init@Name [1] {% args: csname + \expandafter\DefName\sc@star@nothing{#1}{}{}% +} +\newcommand\ReserveCS {% + \sc@star@or@long\Reserve@CS +} +\newcommand\Reserve@CS [1] {% args: \csname + \expandafter\newcommand\sc@star@nothing{#1} {}% +} +\newcommand\ReserveName {% + \sc@star@or@long\Reserve@Name +} +\newcommand\Reserve@Name [1] {% args: csname + \expandafter\NewName\sc@star@nothing{#1}{} {}% +} +\InitCS*\ShortEmpty +\InitCS\LongEmpty +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\sc@t@a} +% \begin{macro}{\sc@t@b} +% \begin{macro}{\sc@t@c} +% \begin{macro}{\sc@t@d} +% \begin{macro}{\sc@t@e} +% \begin{macro}{\sc@t@f} +% \begin{macro}{\sc@t@g} +% Scratch variables. ^^A FIX +% \begin{macrocode} +\ReserveCS\sc@t@a +\ReserveCS\sc@t@b +\ReserveCS\sc@t@c +\ReserveCS\sc@t@d +\ReserveCS\sc@t@e +\ReserveCS\sc@t@f +\ReserveCS\sc@t@g +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\newtokens} +% \begin{macro}{\newlet} +% Because \cs\newtoks is \cs\outer, we have to fool \cs\def into allowing it +% to be in its argument by using \cname{@nameuse}. +% \begin{macrocode} +\newcommand\newtokens [1] {% args: \csname + \@ifdefinable #1 {% + \@nameuse{newtoks}#1% + }% +} +\newcommand*\newlet [2] {% args: \csname-a \csname-b + \@ifdefinable #1 {% + \let #1#2% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\providetokens} +% \begin{macro}{\providelength} +% \begin{macro}{\providesavebox} +% \begin{macro}{\providecounter} +% \begin{macro}{\newboolean} +% \begin{macro}{\provideboolean} +% The \cs\newboolean command is the same as the one in the \package{ifthen} +% package; so that package won't clash with this one. Isn't +% \cs\requirecommand nice? +% \begin{macrocode} +\newcommand*\providetokens [1] {% args: \csname + \@ifundefined@cs{#1} {% + \@nameuse{newtokens}#1% + }{% ELSE + \FrankenInfo{moredefs}{\protect\providetokens\space is not reallocating + token variable \protect#1.\MessageBreak + The existing contents are [\the#1]}% + }% +} +\newcommand*\providelength [1] {% args: \csname + \@ifundefined@cs{#1} {% + \newlength{#1}% + }{% ELSE + \FrankenInfo{moredefs}{\protect\providelength\space is not reallocating + \protect#1.\MessageBreak + The existing value is [\the#1]}% + }% +} +\newcommand*\providesavebox [1] {% args: \csname + \@ifundefined@cs{#1} {% + \newsavebox{#1}% + }{% ELSE + \FrankenInfo{moredefs}{\protect\providesavebox\space is not reallocating + box \protect#1.}% + }% +} +\newcommand*\providecounter [1] {% args: string + \@ifundefined{c@#1} {% + \newcounter{#1}% + }{% ELSE + \FrankenInfo{moredefs}{\protect\providecounter\space is not reallocating + counter #1.\MessageBreak + The existing value is [\expandafter\number\csname c@#1\endcsname]}% + }% +} +% \end{macrocode} +% The following definition follows the one in the \package{ifthen} package: +% \begin{macrocode} + +% \ProvidesPackage{ifthen} +% [1999/01/07 v1.1a Standard LaTeX ifthen package (DPC)] + +\requirecommand*\newboolean [1] {% args: string + \expandafter + \@ifdefinable\csname if#1\endcsname {% + \expandafter\newif\csname if#1\endcsname + }% +} + +% old def of \cs\newboolean I had before 15 Feb 00: +% \csname newif\expandafter\endcsname\csname if#1\endcsname +% \end{macrocode} +% Notice that \cs\defcommand is not defined yet. +% +% If the \package{ifthen} package is loaded \emph{either} before or +% after this package, the \cs\provideboolean command will be the one defined in +% \package{ifthen}. Otherwise, it will be the one defined here. +% +% There are two minor differences between this definition and the one in the +% \package{ifthen} package: (1) my command will barf on undefined but +% ``undefinable'' commands, e.g., ones that begin with \cs\end, which \LaTeX{} +% reserves; (2) my command writes an informational message to the log file when +% the boolean variable is already defined. I'm not sure how useful the +% informational message is, but the first difference should I think also be in +% the \package{ifthen} package, so \todo{I'm putting it on my list to write the +% \LaTeX{} team requesting this change.} +% \begin{macrocode} +\@ifpackageloaded{ifthen} {% + }{% ELSE + \requirecommand*\provideboolean [1] {% args: string + \@ifundefined {if#1} {% + \newboolean{#1}% + }{% ELSE + \FrankenInfo{moredefs}{\protect\provideboolean\space is not reallocating + \protect#1.\MessageBreak + The value is [\@nameuse{if#1}TRUE\else FALSE\fi]}% + }% + }% +} +% \end{macrocode} +% The following definition is what's in the \package{ifthen} package, for +% reference. +% \begin{macrocode} +% \requirecommand*\provideboolean [1] {% args: string +% \@ifundefined{if#1}{% +% \expandafter +% \newif\csname if#1\endcsname}\relax +% } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\sc@toks@a} +% \begin{macro}{\sc@toks@b} +% \begin{macro}{\addto@macro} +% \begin{macro}{\lg@addto@macro} +% \begin{macro}{\prependto@macro} +% \begin{macro}{\g@prependto@macro} +% \begin{macro}{\lg@prependto@macro} +% There are still missing a couple of the permutations, but I won't add them +% until I need them. You can add them yourself in the configuration file +% \file{moredefs.cfg}. +% \begin{macrocode} +\newtokens\sc@toks@a +\newtokens\sc@toks@b + +\newcommand\addto@macro [2] {% + \sc@toks@a=\expandafter{#1#2}% + \edef#1{% + \the\sc@toks@a + }% +} +\newcommand\lg@addto@macro [2] {% + \sc@toks@a=\expandafter{#1#2}% + \long\xdef#1{% + \the\sc@toks@a + }% +} +\newcommand\prependto@macro [2] {% + \sc@toks@a={#2}% + \sc@toks@b=\expandafter{#1}% + \edef#1{% + \the\sc@toks@a\the\sc@toks@b + }% +} +\newcommand\g@prependto@macro [2] {% + \sc@toks@a={#2}% + \sc@toks@b=\expandafter{#1}% + \xdef#1{% + \the\sc@toks@a\the\sc@toks@b + }% +} +\newcommand\lg@prependto@macro [2] {% + \sc@toks@a={#2}% + \sc@toks@b=\expandafter{#1}% + \long\xdef#1{% + \the\sc@toks@a\the\sc@toks@b + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\UndefineCS} +% \begin{macro}{\UndefineName} +% \cs\global works before them. +% \begin{macrocode} +\newcommand\UndefineCS [1] {% args: \csname + \let#1\@undefined +} +\newcommand\UndefineName [1] {% args: csname + \expandafter\let\csname#1\endcsname\@undefined +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\defcommand} +% \begin{macro}{\defcommand*} +% \begin{macro}{\def@command} +% See the user documentation for a discussion of when to use this insteae of \cs\def. +% \begin{macrocode} +\newcommand\defcommand {% + \@star@or@long\def@command +} +\newcommand\def@command {% + \let\@ifdefinable\@rc@ifdefinable + \new@command +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\DefName} +% \begin{macro}{\DefName*} +% \begin{macro}{\def@name} +% \begin{macro}{\NewName} +% \begin{macro}{\NewName*} +% \begin{macro}{\new@name} +% \begin{macro}{\Global} +% \begin{macro}{\sc@global} +% \cs\Global works before \cs\DefName, \cs\NewName, and \cs\ToggleBoolean +% only! +% \begin{macrocode} +\newcommand\DefName {% + \@star@or@long\def@name +} +\newcommand\def@name [3] {% args: arglist csname body + \sc@global\l@ngrel@x\@namedef{#1}#2{#3}% +} +\newcommand\NewName {% + \@star@or@long\new@name +} +\newcommand\new@name [3] {% args: arglist csname body + \@ifundefined{#1} {% + \sc@global\l@ngrel@x\@namedef{#1}#2{#3}% + }{% ELSE + \defcommand\reserved@a {% + #1% + }% + \@notdefinable + }% +} +\newcommand\sc@global {% + \relax +} +\newcommand\Global {% + \def\sc@global {% + \global\let\sc@global\relax\global + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\CheckName} +% \begin{macro}{\CheckName*} +% \begin{macro}{\check@name} +% \begin{macro}{\RequireName} +% \begin{macro}{\RequireName*} +% \begin{macro}{\require@name} +% \mbox{} +% \begin{macrocode} +\newcommand\CheckName {% + \@star@or@long\check@name +} +\newcommand\check@name [3] {% args: arglist csname body + \expandafter\DefName\sc@star@nothing{reserved@a}{#2}{#3}% + \expandafter\@check@eq\csname #1\endcsname\reserved@a +} +\newcommand\RequireName {% + \sc@star@or@long\require@name +} +\newcommand\require@name [3] {% args: arglist csname body + \@ifundefined{#1} {% + \expandafter\DefName\sc@star@nothing{#1}{#2}{#3}% + }{% ELSE + \expandafter \expandafter + \expandafter \CheckName + \expandafter \sc@star@nothing + \csname #1\endcsname + {#2}{#3}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NewTextFontCommand} +% \begin{macro}{\NewRobustCommand} +% \begin{macro}{\new@robustcommand} +% \begin{macro}{\new@@robustcommand} +% \mbox{} +% \begin{macrocode} +\newcommand\NewTextFontCommand [2] {% args: \csname font-command + \NewRobustCommand#1[1]{% + \ifmmode + \nfss@text{#2##1}% + \else + \leavevmode + {\text@command{##1}% + #2\check@icl ##1\check@icr + \expandafter}% + \fi + }% +} +\newcommand\NewRobustCommand {% + \@star@or@long\new@robustcommand +} +% \end{macrocode} +% We need a second level here because otherwise the \cs\fi that closes +% \cname{@ifdefinable} will become the definition of the closing +% \cname{new@command}. We could use a chain of \cs\expandafter{}s but that +% would be confusing. +% \begin{macrocode} +\newcommand\new@robustcommand [1] {% + \let\sc@t@a\relax + \@ifdefinable #1 {% + \def\sc@t@a {% + \new@@robustcommand #1% + }% + }% + \sc@t@a +} +\newcommand\new@@robustcommand [1] {% + \edef\reserved@a {\string#1}% + \def\reserved@b {#1}% + \edef\reserved@b {% + \expandafter\strip@prefix\meaning\reserved@b + }% + \edef#1{% + \ifx\reserved@a\reserved@b + \noexpand\x@protect + \noexpand#1% + \fi + \noexpand\protect + \expandafter\noexpand\csname + \expandafter\@gobble\string#1 \endcsname + }% + \let\@ifdefinable\@rc@ifdefinable + \expandafter\new@command\csname + \expandafter\@gobble\string#1 \endcsname +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Elet} +% \mbox{} +% \begin{macrocode} +\newcommand\Elet {% + \expandafter\let\expandafter +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EElet} +% \mbox{} +% \begin{macrocode} +\newcommand*\EElet {% + \expandafter\expandafter\expandafter\let\expandafter\expandafter +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NewUserInfo} +% \begin{macro}{\NewUserInfo*} +% \begin{macro}{\new@userinfo} +% Using \cs\lowercase in this macro is tricky, since it gets expanded only in +% \TeX's stomach. +% \begin{macrocode} +\newcommand\NewUserInfo {% + \sc@star@or@long\new@userinfo +} +\newcommand*\new@userinfo [2][] {% args: [\csname] \csname + \expandafter\ReserveCS\sc@star@nothing{#2}% + \def\sc@t@b {#1}% +% \end{macrocode} +% If we were not given the optional user-cmd, define scratch |b| to be a +% lowercase version of the variable, without the backslash. Otherwise use the +% user-cmd given, without the backslash. +% \begin{macrocode} + \ifx\sc@t@b\ShortEmpty + \edef\sc@t@a {% + \edef\noexpand\sc@t@b{% + \E@cdr\string#2\@nil + }% + }% + \lowercase\expandafter{\sc@t@a}% + \else + \edef\sc@t@b {\E@cdr\string#1\@nil}% + \fi +% \end{macrocode} +% Now define the user-cmd to be a redefinition of the variable. +% \begin{macrocode} + \edef\sc@t@a {% + \noexpand\NewName\sc@star@nothing{\sc@t@b}{####1} + {\noexpand\renewcommand\sc@star@nothing\noexpand#2{####1}} + }% + \sc@t@a +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\SaveCS} +% \begin{macro}{\RestoreCS} +% \begin{macro}{\SaveName} +% \begin{macro}{\RestoreName} +% \mbox{} +% \begin{macrocode} +\newcommand\SaveCS [1] {% args: \csname + \expandafter\newlet\csname MDSaved\E@cdr\string#1\@nil\endcsname#1% +} +\newcommand\RestoreCS [1] {% args: \csname + \Elet#1\csname MDSaved\E@cdr\string#1\@nil\endcsname + \UndefineName{MDSaved\E@cdr\string#1\@nil}% +} +\newcommand\SaveName [1] {% args: csname + \ReserveName{MDSaved#1}% + \EElet\csname MDSaved#1\endcsname + \csname #1\endcsname +} +\newcommand\RestoreName [1] {% args: csname + \EElet\csname #1\endcsname + \csname MDSaved#1\endcsname + \UndefineName{MDSaved#1}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Controlling expansion} +% +% \begin{macro}{\EExpand...\In} +% \begin{macro}{\EExpand*...\In} +% \begin{macro}{\sc@EExpand} +% \begin{macro}{\eExpand...\In} +% \begin{macro}{\eExpand*...\In} +% \begin{macro}{\sc@eExpand} +% \begin{macro}{\eExecute} +% \begin{macro}{\eExecute*} +% \begin{macro}{\sc@eExecute} +% Uses \cname{sc@t@a}, \cname{sc@t@b}, \cname{sc@t@c}. +% \begin{macrocode} +\newcommand\eExpand {% + \sc@star@or@long\sc@eExpand +} +\NewName{sc@eExpand} {#1\In#2} {% args: object body + \l@ngrel@x\edef\sc@t@a{#1}% + \expandafter\defcommand\sc@star@nothing\sc@t@b [1] {#2}% + \expandafter \sc@t@b + \expandafter {\sc@t@a}% +} +\newcommand\EExpand {% + \sc@star@or@long\sc@EExpand +} +% \end{macrocode} +% When this is |short|, both the two args are |short|. \cname{sc@star@nothing} +% gets reset by the first \cs\defcommand, so we save it in \cname{sc@t@c}. +% \begin{macrocode} +\NewName{sc@EExpand}{#1\In#2} {% args: object body + \let\sc@t@c\sc@star@nothing + \expandafter \expandafter + \expandafter \defcommand + \expandafter \sc@t@c + \expandafter \sc@t@a + \expandafter {#1}% + \expandafter\defcommand\sc@t@c\sc@t@b [1] {#2}% + \expandafter\sc@t@b + \expandafter{\sc@t@a}% +} +\newcommand\eExecute {% + \sc@star@or@long\sc@eExecute +} +\newcommand\sc@eExecute [1] {% args: body + \l@ngrel@x\edef\sc@t@a {#1}% + \sc@t@a +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\E@car} +% \begin{macro}{\E@cdr} +% \mbox{} +% \begin{macrocode} +\NewName{E@cdr} {#1\@nil} {% + \expandafter\@cdr #1\@nil +} +\NewName{E@car} {#1\@nil} {% + \expandafter\@car #1\@nil +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Gobbling} +% +% \begin{macro}{\Gobble} +% \begin{macro}{\GobbleM} +% \begin{macro}{\GobbleO} +% \begin{macro}{\GobbleMM} +% \begin{macro}{\GobbleMO} +% \begin{macro}{\GobbleOM} +% \begin{macro}{\sc@gobbleO} +% \begin{macro}{\sc@gobbleOM} +% \textsf{M} for mandatory arg, i.e., one token. \textsf{O} for optional arg, +% i.e., a square-brace pair. +% \begin{macrocode} +\newlet\Gobble\@gobble +\newlet\GobbleM\@gobble +\newcommand\GobbleO {% + \@ifnextchar [ + \sc@gobbleO + \relax +} +\newlet\GobbleMM\@gobbletwo +\newcommand\GobbleOM {% + \@ifnextchar [ + \sc@gobbleOM + \Gobble +} +\newcommand\GobbleMO [1] {% + \@ifnextchar [ + \sc@gobbleO + \relax +} +\NewName{sc@gobbleOM} {[#1]#2} + {} +\NewName{sc@gobbleO} {[#1]} + {} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Option declaration} +% +% \begin{macro}{\DeclareBooleanOptions} +% \begin{macro}{\DeclareBooleanUserOptions} +% \mbox{} +% \begin{macrocode} +\newcommand\DeclareBooleanOptions [2] {% args: on off + \newboolean{@#1@}% + \DeclareOption{#1} {% + \@nameuse{@#1@true} + }% + \DeclareOption{#2} {% + \@nameuse{@#1@false} + }% +} +\newcommand\DeclareBooleanUserOptions [2] {% args: on off + \DeclareBooleanOptions{#1}{#2}% + \ReserveName{#1}% + \ReserveName{#2}% + \EElet \csname#1\endcsname\csname @#1@true\endcsname + \EElet \csname#2\endcsname\csname @#1@false\endcsname +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Toggle a boolean} +% +% \begin{macro}{\ToggleBoolean} +% \mbox{} +% \begin{macrocode} +\newcommand\ToggleBoolean [1] {% arg: boolean + \csname if#1\endcsname + \sc@global\csname #1false\endcsname + \else + \sc@global\csname #1true\endcsname + \fi +} +% \end{macrocode} +% \end{macro} +% +% \section{Debugging} +% +% \begin{macro}{\VerboseErrors} +% \begin{macro}{\GVerboseErrors} +% We do not use \cs\setcounter but rather set these counters locally. +% \begin{macrocode} +\newcommand*\VerboseErrors [1][\@M] {% args: [number] + \c@errorcontextlines #1% + \showboxbreadth #1% + \showboxdepth #1% +} +\newcommand*\GVerboseErrors [1][\@M] {% args: [number] + \global\c@errorcontextlines #1% + \global\showboxbreadth #1% + \global\showboxdepth #1% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Debug} +% \begin{macro}{\GDebug} +% \begin{macro}{\md@maybe@global} +% Set \cs\debug to 0, 1, or~2. ^^A remember \cs\showlists +% \begin{macrocode} +\ReserveCS\md@maybe@global +\newcommand*\Debug {% + \let\md@maybe@global\relax + \md@debug +} +\newcommand*\GDebug {% + \let\md@maybe@global\global + \md@debug +} +\newcommand*\md@debug [1] {% args: debug-level + \ifnum #1 > 0% + \let\sc@t@a\@M + \md@maybe@global\def\DTypeout ##1{% + \typeout{##1}% + }% + \md@maybe@global\def\DGobbleM ##1{% + \typeout{DGobbleM: [##1]}% + }% + \ifnum #1 > 1% + \md@maybe@global\def\DDTypeout ##1{% + \typeout{##1}% + }% + \ifnum #1 > 2% + \md@maybe@global\def\DDDTypeout ##1{% + \typeout{##1}% + }% + \fi + \fi + \else + \let\sc@t@a\m@ne + \md@maybe@global\let\DTypeout\GobbleM + \md@maybe@global\let\DDTypeout\GobbleM + \md@maybe@global\let\DDDTypeout\GobbleM + \md@maybe@global\let\DGobbleM\GobbleM + \fi + \md@maybe@global\tracingoutput#1 % + \md@maybe@global\tracingpages#1 % + \md@maybe@global\tracingmacros#1 % + \md@maybe@global\tracingcommands#1 % + \ifx\md@maybe@global\relax + \VerboseErrors[\sc@t@a]% + \typeout{++++ Debugging [#1]\on@line}% + \else + \GVerboseErrors[\sc@t@a]% + \typeout{++++ Global debugging [#1]\on@line}% + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\DTypeout} +% \begin{macro}{\DTypeout} +% \begin{macro}{\DTypeout} +% \begin{macro}{\DGobbleM} +% When the debugging parameter is not set, these commands gobble their +% argument. \todo{Streamline dox about ``debugging parameter''; should be +% something checkable, no?} +% \begin{macrocode} +\newlet\DTypeout\GobbleM +\newlet\DDTypeout\GobbleM +\newlet\DDDTypeout\GobbleM +\newlet\DGobbleM\GobbleM +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\FrankenError} +% \begin{macro}{\FrankenWarning} +% \begin{macro}{\FrankenInfo} +% \mbox{} +% \begin{macrocode} +\newcommand\FrankenWarning [2] {% args: package warning + \GenericWarning % continuation message + {(#1)\@spaces\@spaces\@spaces\@spaces\@spaces} + {Frankenstein (#1) WARNING: #2}% +} +\newcommand\FrankenError [3] {% args: package error-message help-text + \GenericError % args: continuation message where-help what-help + {(#1)\@spaces\@spaces\@spaces\@spaces\@spaces} + {Frankenstein (#1) error: #2} + {See the documenation for the #1 package for more information.} + {#3}% +} +\newcommand\FrankenInfo [2] {% args: package info + \GenericInfo % continuation message + {(#1)\@spaces\@spaces\@spaces\@spaces\@spaces} + {Frankenstein (#1) says: #2}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/moredefs.tex b/macros/latex/contrib/frankenstein/moredefs.tex new file mode 100644 index 0000000000..fa2fcdbed7 --- /dev/null +++ b/macros/latex/contrib/frankenstein/moredefs.tex @@ -0,0 +1,67 @@ +% moredefs.tex -- documentation for the moredefs LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{moredefs.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{moredefs} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{moredefs.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/newclude.ins b/macros/latex/contrib/frankenstein/newclude.ins new file mode 100644 index 0000000000..9c244e03b1 --- /dev/null +++ b/macros/latex/contrib/frankenstein/newclude.ins @@ -0,0 +1,64 @@ +% newclude.ins -- docstrip driver for the newclude LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + newclude.sty or newclude.stq. This + LaTeX package will work ONLY if it is called newclude.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + newclude.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{newclude.stq}{\from{newclude.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file newclude.stq is a faster replacement for the file} +\Msg{* newclude.sty.} +\Msg{*} +\Msg{* newclude.stq is stripped of comments (documentation) and must be} +\Msg{* renamed newclude.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/newclude.pdf b/macros/latex/contrib/frankenstein/newclude.pdf new file mode 100644 index 0000000000..5d32223e97 Binary files /dev/null and b/macros/latex/contrib/frankenstein/newclude.pdf differ diff --git a/macros/latex/contrib/frankenstein/newclude.sty b/macros/latex/contrib/frankenstein/newclude.sty new file mode 100644 index 0000000000..759797767c --- /dev/null +++ b/macros/latex/contrib/frankenstein/newclude.sty @@ -0,0 +1,959 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% newclude LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, newclude.tex +% and newclude.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{208} +% +% \begin{abstract} +% \package{Newclude} is a backwards-compatible reimplementation of the +% \LaTeX{} system for including files. The princpal new features are: (1) +% the restriction that \cs\clearpage{}s must surround an included file is +% removed, (2) the restriction that \cs\include{}s cannot be nested is +% removed, and (3) the provision of hooks executed before and after the +% contents of an included file. Newclude accomplishes the first two by using +% a single \ext{aux} file instead of many. +% +% Still in development, but already useful in many situations, are new +% commands that include partial contents of independent \LaTeX{} files, which +% can also be processed on their own (that is, files that contain +% \cs\documentclass, |\begin{document}|, etc.). \package{Newclude} absorbs +% and supersedes the former package \package{includex}. +% \end{abstract} +% \clearpage +% \tableofcontents +% +% \part{Discussion} +% +% \section{Introduction} +% +% Let us call a file that might be included into another document with a +% command in the \cs\include family a \term{part}. When a part is actually +% included during a particular processing run, let us call it an \term{included +% part}, and when it is not included, let us call it an \term{unincluded part}. +% Notice that an unincluded part is \emph{not} the same as a file that was +% never a candidate for inclusion with a command in the \cs\include family. +% +% The \package{newclude} package adds these features to the standard LaTeX{} +% inclusion system: +% \begin{enumerate} +% \item\label{item:hooks} Hooks \cs\AtBeginInclude and \cs\AtEndInclude are provided. +% \item\label{item:hooks:opt} Optional arguments to \cs\include and friends +% override current values of \cs\AtBeginInclude and \cs\AtEndInclude. +% \item \cname{include*} is like \cs\include but with arbitrary commands +% rather than \cs\clearpage{}s surrounding the part. +% \item \cs\include and friends can be nested. +% \item \cs\includeall cancels the effect of \cs\includeonly. +% \item \cs\IfAllowed\meta{filename} is a new conditional that branches, +% depending on what has been declared in an \cs\includeonly. +% \item Commands \cs\includedoc etc.\ include a part that can be processed +% independently. These features are in development. +% \end{enumerate} +% +% \package{Newclude} accepts three mutually-exclusive package options, with +% \option{tag} the default when no package option is given. +% +% Loading \package{newclude} with the \option{simple} option provides only +% features \ref{item:hooks} and~\ref{item:hooks:opt}. If you don't use either +% of these new features, the standard \LaTeX{} and \package{newclude} inclusion +% systems will behave identically except in some unusual and benign odd cases +% relating the the parsing of the new optional arguments to \cs\include, which +% are discussed below in that command's documentation. +% +% The options \option{tag} and \option{allocate} each implement all the above +% features with a different method. Each method introduces different +% discrepancies from standard \LaTeX{} which are discussed below in sections +% \ref{opt:tag} and~\ref{opt:allocate}. If I discover how to make one method +% never inferior to the other, I will remove the other option from the package. +% +% \section{Usage} +% +% \DescribeMacro\include +% \DescribeMacro\AtBeginInclude +% \DescribeMacro\AtEndInclude +% \cs\include\oarg{prehook}\marg{filename}\oarg{posthook} behaves like +% standard \LaTeX{}'s \cs\include except that it can be nested and the +% contents of the two hook arguments, when they are given, are inserted at +% the beginning and end of the part whenever it is included, overriding the +% current values of \cs\AtBeginInclude and \cs\AtEndInclude. +% +% \caveat{Right square braces (|]|s) in the optional arguments must be +% surrounded by curly braces to avoid confusing the argument parser.} +% +% \caveat{A left square brace (|[|) that immediately follows an +% \cs\include command's mandatory \meta{filename} argument (after optional +% whitespace) will be considered to delimit the beginning of the +% \meta{posthook} argument. If you want an actual left brace character in +% this position, you must precede it with something that will terminate +% \TeX's search for an optional argument, such as \cs\relax, |{}|, or a +% paragraph division (explicit or implicit).} +% +% The commands \cs\AtBeginInclude\meta{tokens} and +% \cs\AtEndInclude\meta{tokens} are analagous to standard \LaTeX{}'s commands +% \cs\AtBeginDocument\meta{tokens} and \cs\AtEndDocument\meta{tokens}. +% +% FIX: multiple instances concatenate? +% +% FIX give name to what's held by atbegininclude so that an override can mention it +% +% When the optional argument \meta{prehook} is given to \cs\include, its +% contents will be used instead of whatever has been specified with +% \cs\AtBeginInclude, for that one inclusion. Likewise, \meta{posthook} will +% be used in place of whatever has been specified with \cs\AtEndInclude for +% that one inclusion. +% +% For example, putting the \cs\chapter declaration in the \meta{prehook} +% argument allows the chapter name, and, optionally, a corresponding \LaTeX{} +% label, to be kept in the including file, rather than the included file: +% \begin{codeexample} +% \include [\chapter{Whales} +% \label{ch:whales}] +% {big-cetecea} +% \end{codeexample} +% +% The \meta{posthook} argument can be used, for example, to delimit or undo +% declarations made in the \meta{prehook} or the included file: FIX: better +% example, since these coudl simple appear before/after the \cs\include +% without ill effect. +% \begin{codeexample} +% \include [\begingroup\larger] % this part in larger type +% {manifesto} +% [\endgroup] +% \end{codeexample} +% +% \DescribeMacro{\include*} +% \DescribeMacro\IncludeSurround +% \DescribeMacro\DefaultIncludeSurround +% \cname{include*}\oarg{prehook}\marg{filename}\oarg{posthook} is like +% \cs\include but omits the usual \cs\clearpage{}s that surround an included +% part, replacing them with \cs\IncludeSurround, which defaults to +% \cs\DefaultIncludeSurround. The contents of \cs\IncludeSurround are +% inserted before the \meta{prehook} or whatever has been specified with +% \cs\AtBeginInclude, and after the \meta{posthook} or whatever has been +% specified with \cs\AtEndInclude. +% +% \caveat{A space gets inserted after an \cname{include*} unless it is +% suppressed by a |%| immediately following. Combined with trailing spaces +% in the included file, this may lead to unwanted spaces. For this reason, +% \cs\DefaultIncludeSurround is initialized to \cname{par}. When the user +% must explicitly change \cs\IncludeSurround to achieve totally smooth flow +% from main file to included file, they are more likely to consult this +% documentation if they spot a problem. Package and class writers should +% take this difficulty into account when changing \cs\DefaultIncludeSurround.} +% +% \DescribeMacro\includeonly +% The \cs\includeonly command is reimplemented, but its usage and behavior is +% the same as the standard \LaTeX{} version. +% +% \DescribeMacro\includeall +% The \cs\includeall command cancels the effect of any \cs\includeonly +% command presently in effect. +% +% If you write an \cs\includeonly so that each file appears on its own line, +% it is particularly easy to add and remove files to include by commenting +% out their lines, but it becomes laborious to comment out the entire +% \cs\includeonly command. It's easy, however, to uncomment a single +% \cs\includeall command when you want to process the entire document. (Or +% \cs\includeall could be inserted from the command line that invokes +% \LaTeX{}, and so on.) +% +% \section{Experimental features} +% +% \DescribeMacro\includeenv +% \cs\includeenv\oarg{prehook}\marg{filename}\marg{environment name}% +% \marg{instance}\oarg{posthook} +% \cs\includeenv*\oarg{prehook}\marg{filename}\marg{environment name}% +% \marg{instance}\oarg{posthook} +% +% \cs\includeenv includes the contents of a single \LaTeX{} environment that +% appears in \meta{filename}. The environment is specified by giving its +% name (\meta{environment}) and an instance of that environment in the file +% (\meta{instance}). Presently, \meta{instance} is ignored, so that it will +% always be the contents of the first occurrence in \meta{filename} of a +% \LaTeX{} environment with the name \meta{environment} that will be +% included. In the future, the \meta{instance} argument may be used to +% specify the $n$th instance of the environment within the file, or further +% specify the environment to be extracted in some other way. +% +% FIX: right now they're required; skip text up to documentclass OR the target, +% then branch? +% +% Good preamble syntactic sugar: |\let\TheMarkupDeclarations\begin| +% +% \todo{You can insert a \cs\usepackage into the main aux file and have it +% loaded properly. If we discover a \cs\usepackage that is not a formatting +% package, one strategy is to insert a corresponding \cs\usepackage into the +% (main) aux file and then bail after the preamble.} +% +% \todo{You can't skip verbatim text via macro argument processing and sugar. +% this means that a major reimplementation of skipping using verbatim methods +% will have to be done.} +% +% The included file is permitted (but not required) to have its own +% \cs\documentclass command and \code{\begin{document}}\lips +% \cs{\end{document}} pair. \cs\includeenv extracts the specified +% environment by processing the preamble if one exists, skipping text up +% until the beginning of the specified environment, processing the contents +% of the environment, and skipping the rest of the included part. +% +% Notice that while a \code{\begin{document}}\lips\code{\end{document}} pair +% may not technically delimit a \LaTeX{} environment, you may nevertheless +% (because it looks exactly like an environment) set \meta{environment} to +% |document| to extract the contents of the \env{document} ``environment'' of +% \meta{filename}. +% +% Consider the following issues when you are tempted to use this +% command. Maybe the \cs\usepackage you are about to disregard is necessary +% to processing the part's contents. Maybe it conflicts with a package +% already loaded at top level. Maybe both! The same holds of course for the +% defining commands like \cs\newcommand that one expects to find in a +% package. +% +% A deep problem with the design of a \LaTeX{} source file exists with +% respect to the function of the preamble. The preamble contains +% declarations that determine how the document below will be formatted. +% Unfortunately, there is no way to make the distinction between: +% \begin{enumerate} +% \item +% declarations that signal that certain markup will appear in the document +% that are either not defined in the \LaTeX{} kernel or are used with a +% different syntax +% \item declarations that describe how a certain instance +% of the document should be formatted +% \end{enumerate} +% Examples in the first category are \code{\usepackage{url}} and \code{FIX +% example}, and examples in the second are \code{\usepackage{times}} and +% \code{FIX}. When you want to include the document or a part of it in +% another document, it is absolutely necessary to make this distinction so +% that declarations in category (1) can be processed and declarations in +% category (2) can be ignored. ^^A FIX: \cat{} is a compsci command? +% +% Adopting a convention on the use of the preamble can overcome this design +% problem, but it will not fix the problem for legacy files whose preambles +% do not obey the convention. Legacy files that contain category (1) +% declarations in their preambles must either be altered or specifically +% accommodated with additional commands. +% +% The convention I suggest is to |\usepackage{preamble}|. \cs\beginmarkup +% \cs\endmarkup. FIX. Can we arrange to load +% +% When \cs\includeenv encounters a \cs\usepackage command in the included +% part, it looks at the packages in the argument of \cs\usepackage and issues +% a warning if the package is not already loaded and does not appear on a +% list of packages known whose use falls entirely within category (2). (See +% the \cs\DeclareFormattingPackage command below.) +% +% The \cs\documentclass command is of course also a category (1) declaration. +% Presently, if \cs\includeenv detects that the arguments to an included +% \cs\documentclass command differ from the arguments of the +% \cs\documentclass command of the including document, it will issue a +% warning, and continue. In the future, I hope to make this behavior smarter +% by having \cs\includeenv take specific actions for specific combinations of +% arguments. For example, if the included document's class implies the use +% of markup not defined in the parent's class, an appropriate action would be +% to define the missing markup commands. A document of class \class{report} +% and a document of class \class{article}, on the other hand, do not (I don't +% think) declare different markup, so that there should be no warning in this +% case. +% +% \DescribeMacro{\includeenv*} +% \cname{includeenv*} is analogous to \cname{include*}, that is, it surrounds +% the included part with \cs\IncludeSurround rather than \cs\clearpage. +% +% \DescribeMacro\includedoc +% \DescribeMacro{\includedoc*} +% \cs\includedoc\oarg{prehook}\marg{file name}\oarg{posthook} is shorthand +% for +% \cs\includeenv\oarg{prehook}\marg{filename}\marg{|document|}\marg{}\oarg{posthook}. +% +% \cname{includedoc*} is analogous to \cname{includeenv*}. +% +% \section{Options} +% +% \subsection{Simple}\label{opt:simple} +% +% If the \option{simple} option is given, the only new feature provided is the +% hooks (features \ref{item:hooks} and~\ref{item:hooks:opt} above). As +% with standard \LaTeX{}, \cs\clearpage{}s surround an \cs\include and nesting +% \cs\include{}s gives an error. \package{Newclude} will only behave +% differently than standard \LaTeX{} command scans for +% possible optional arguments will make a different. +% + +% +% \subsection{Tag}\label{opt:tag} +% The \option{tag} option causes \LaTeX{} to use just one \ext{aux} file. +% This option, which is the default, works well. I am aware of the following +% two differences from the kernel's including system: +% +% \begin{enumerate} +% \item +% If the \LaTeX{} process is stopped during the processing of a part, all +% information normally stored in an \ext{aux} file from that point in the +% document forward is lost. In the kernel's system, processing the document +% twice more would recover any \ext{aux} information previously generated for +% parts. +% +% If \LaTeX{} is always invoked in \cs\nonstopmode (e.g., by \auctex), then +% this difference is only going to occur when there are catastrophic errors +% that cause even \cs\nonstopmode to terminate processing. +% +% \item Other packages and classes that redefine kernel commands that write to +% \cname{@auxout} will cause problems. +% \end{enumerate} +% +% The first difference must be accepted. The second difference can be removed +% on a case by case basis, by specifically coding compatibility with such +% packages and classes. I intend to do this. Here is a list of such packages +% and classes known to me: +% +% \begin{tabular}{l} +% \meta{none so far} +% \end{tabular} +% If you discover any more for this list, please write me! +% +% It's also very easy to revise the other package to be compatible with +% \package{newclude} as it is now. See section~\ref{adapt} below, which +% includes a list of relevant kernel commands. +% +% \subsection{Allocate}\label{opt:allocate} +% +% The second way (the \option{allocate} option) represents my first attempt at +% a solution, and until I am sure it has no advantages over \option{tag} under +% any circumstances, it will continue to be an option. +% +% The \option{allocate} option causes \LaTeX{} to dynamically allocate \TeX{} +% output streams to each part as they are needed. Streams are allocated when +% processing of the part begins, and are reclaimed after the ejection of the +% last page to which the part has contributed. Like the old system, a separate +% \ext{aux} file is created for each part. The limitation of this +% implementation is that \TeX{} only possesses 16 output streams. Each of the +% commands \cs\tableofcontents, \cs\listoffigures, \cs\listoftables, +% \cs\makeglossary, and \cs\makeindex causes \LaTeX{} to use one output stream. +% The remainder (minus any streams required by packages and classes) are +% available for the including system. If $n$ streams are available, the level +% of nesting possible is $n - 1$ minus the maximum number of parts that occur +% on the same page. For example, if 10 streams are available and the parts +% never appear on the same page (the old behavior required by the +% \cs\clearpage{}s), then 8 levels of nesting are possible (which is 8, not 7 +% more than with the old system). The maximum number of parts that may +% contribute the to same page is calculated with the same equation. Note: +% \TeX's page-breaking algorithm looks ahead until it has more than enough +% material to fill one page. You must count all the new \ext{aux} files that +% are opened during a look-ahead as contributing to the page in question, even +% if some of the later ones do not actually contribute to the page after the +% break is chosen. +% +% The \option{allocate} solution is itself implemented in two ways. The system +% either reserves a fixed number of output streams from the start, or will +% dynamically claim and free them as needed. The dynamic solution is the +% default. I do not see much use for the static solution at present. If the +% dynamic system claims streams that are later required, then it is simply a +% question of whether \package{newclude} or the other feature is going to +% signal an error about having no more streams to allocate. +% +% \section{Programmers' interface} +% +% \DescribeMacro\IfAllowed +% \cs\IfAllowed\marg{part name}\marg{true}\marg{false} executes \meta{true} +% if \meta{part-name} is on the list of files to be included and \meta{false} +% otherwise. If there is no list, executes \meta{true}. +% +% \DescribeMacro\IncludeName +% \cs\IncludeName expands to the name of the part currently being processed. +% In the toplevel source file, it will expand to \cs\jobname. +% +% \DescribeMacro\ParentName +% \cs\ParentName expands to the name of the part that includes the part +% currently being processed. In the toplevel source file, expanding +% \cs\ParentName will generate a warning and expand to \cs\jobname (which is +% also what \cs\IncludeName expands to). +% +% FIX: root source file? toplevel? master? principle source? glossary! +% +% \DescribeMacro\DeclareFormattingPackage +% \cs\DeclareFormattingPackage\marg{package name} declares \meta{package +% name} to be a package that only makes formatting declarations, that is, the +% effect of using it falls entirely within category (2). If a formatting +% package occurs in a \cs\usepackage declaration in the preamble of a part +% included by \cs\includeenv, no warning will be given. An example of a +% formatting package is the \package{times} package. No facility is provided +% to distinguish the case when a package is used with or without certain +% package options, so do not declare a package as a formatting package unless +% it is so regardless of the options it is passed. +% +% If you send me the names of formatting packages, I will include them in the +% next release of \package{newclude}. Meanwhile, you may declare them in +% \file{newclude.cfg}. Do the same for your local formatting packages if you +% wish. It does no harm to declare a package as a formatting package more +% than once. +% +% \DescribeMacro\ifSkipPreamble +% \DescribeMacro\SkipPreambletrue +% \DescribeMacro\SkipPreamblefalse +% +% \DescribeMacro\Disable +% \DescribeMacro\DisableAll +% \cs\Disable\marg{tokens} provides a way to ignore additional commands when +% using \cs\includeenv and friends. If you want to cause the macro \cs\foo +% which takes no arguments to be entirely ignored in parts, issue the command +% \code{\Disable{\let\foo\relax}} any time before including the parts you +% want to affect. If \cs\foo takes one mandatory argument, write +% \code{\let\foo\Gobble} instead. If \cs\foo takes one optional and one +% mandatory, write \code{\let\foo\GobbleOM}. And so on. For other examples, +% see the gobbling commands in the \package{moredefs} package (which +% \package{newclude} requires), or write your own. +% +% The arguments to \cs\Disable are accumulated and executed by the command +% \cs\DisableAll, which is executed inside a group that contains a part when +% it is included. +% +% There is no way to undo the effect of issuing a \cs\Disable command. +% +% \section{How to play nicely with \package{newclude}}\label{adapt} +% +% To adapt a package or class for use with the \option{tag} option of +% \package{newclude}: +% \begin{enumerate} +% \item replace |\immediate\write\@auxout| with \cs{\@writeaux} +% \item replace |\protected@write\@auxout| with \cs{\protected@writeaux} +% \item add +% \begin{codeexample} +% \providecommand\@writeaux {% +% \immediate\write\@auxout +% } +% \providecommand\protected@writeaux {% +% \protected@write\@auxout +% } +% \end{codeexample} +% \end{enumerate} +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{A new system for including files (Frankenstein's backbone)} +\def\DoXPackageS {} +\def\fileversion{v2} +\def\filedate{1999/11/02} +\def\docdate{1999/11/02} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{newclude}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Review of the kernel's inclusion system} +% +% One \ext{aux} file is written to disk for the \term{principle source} and one +% for each of the included \term{parts}. The reason to have a separate ones +% for the parts is so that information from the last time the part was included +% is retained in subsequent runs even when the part is excluded by +% \cs\includeonly. Suppose a part is processed once, and on a subsequent run +% its name is removed from the \cs\includeonly list. This run will still read +% in the part's \ext{aux} file, since the \ext{aux} file of any part that was +% \cs\included during the last run is always read. But the information therein +% is not going to be regenerated in this run, since the part will not be +% processed. The main \ext{aux} file is created anew with each run, so this +% information would be lost if it resided there. +% +% To handle writing these multiple \ext{aux} files, the kernel uses two of +% \TeX's output streams. When a routine writes to an auxiliary file, it writes +% to \cname{@auxout}, which is \cs\let to either \cname{@mainaux}, the +% \ext{aux} file for the principle source, or \cname{@partaux} the \ext{aux} +% file for all the parts each in turn. +% +% When encountering an \cs\include command, but before deciding whether or not +% to actually load the part, the kernel writes a command to \cname{@mainaux} +% that will load the part's \ext{aux} file. The main \ext{aux} +% file is loaded by \cs\document, so that \emph{all} \ext{aux} files are read +% in every time the principle source is processed. +% +% If a part is actually loaded, a \term{checkpoint} is written to the part's +% \ext{aux} file consisting of a snapshot of the counters (a record of the +% values of all \LaTeX{} counters). On the next run, if the part is not +% actually loaded, the information in its \ext{aux} file has nevertheless +% already been processed by \cs\document. Processing the checkpoint causes a +% macro to be defined that when invoked restores the counter state. When +% \cs\include does not actually load a part it calls this checkpoint macro +% instead to alter the present counter state. +% +% This system has pitfalls as well as benefits. It is useful to keep the +% bibliography, citations, cross references, and page numbers up to date in +% certain situations, but the results can be confusing sometimes, because +% checkpoints are not documented. (Perhaps this is remedied in the 2d edition +% of the \LaTeX{} manual.) How, besides reading the code, or finding out the +% hard way, is anyone supposed to guess that rearranging two ``deactivated'' +% \cs\include statements in a principle source will bring havoc on the page +% numbers? +% +% \section{Discussion of \package{newclude}'s inclusion system} +% +% The simple removal of the \cs\clearpage{}s that surround an included part +% would cause a problem involving the delayed action of \cs\write commands. +% Suppose a part ending with a \cs\write command ends halfway down a page, and +% another \cs\write occurs in the principle source immediately (or soon) after +% the inclusion. The first must be written to \cname{@partaux} and the second +% to \cname{@mainaux}. If we close \cname{@partaux} while the first \cs\write +% is still pending, that is, before the current page has been shipped out, then +% the \cs\write will be destined for a closed stream and therefore go to the +% log file and terminal. The \cs\clearpage{}s solve this by flushing all +% pending \cs\writes. Then we can close \cname{@partaux} immediately and +% reopen \cname{@mainaux}. +% +% Successful removal of the \cs\clearpage{}s can be accomplished either by +% having the entire document use just one auxiliary file, or by allocating +% additional output streams so that it becomes possible to avoid closing +% \cname{@partaux} until after the current page is shipped out when all the +% \cs\write{}'s to it have been completed. +% +% \section{Package initialization} +% +% \begin{macrocode} +\RequirePackage{moredefs} +% \end{macrocode} +% +% \begin{macrocode} +\InitCS\sc@t@a +\DeclareOption{simple} {% + \input{simple.sto} + \let\sc@t@a\endinput +} +%^^A\DeclareOption{group} {% +%^^A \AtEndOfPackage {\input{group.sto}} +%^^A} +\DeclareOption{tag} {% + \AtEndOfPackage {\input{tag.sto}} +} +\DeclareOption{allocate} {% + \AtEndOfPackage {\input{allocate.sto}} +} +\DeclareBooleanOptions{dynamic}{static} +\ExecuteOptions{tag} +\ProcessOptions +% \end{macrocode} +% If the \option{simple} option has been given, end right here. +% \begin{macrocode} +\sc@t@a +% \end{macrocode} +% +% \section{Simple} +% +% The above option processing causes the file \file{simple.sto} to be loaded +% when the \option{simple} is given. After it is loaded, processing stops. +% When the \option{simple} option is not given, \package{newclude} package code +% continues in section~\ref{sec:common}. +% +% \input{simple.sto} +% +% \section{Common}\label{sec:common} +% +% The code in this section is common to the \option{tag} and \option{allocate} +% options. +% +% \begin{macro}{\nc@t@a} +% \begin{macro}{\nc@t@b} +% \begin{macro}{\nc@t@c} +% \begin{macro}{\nc@toks@a} +% Scratch variables. +% \begin{macrocode} +\ReserveCS\nc@t@a +\ReserveCS\nc@t@b +\ReserveCS\nc@t@c +\newtokens\nc@toks@a +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\IncludeSurround} +% \begin{macro}{\DefaultIncludeSurround} +% \mbox{} +% \begin{macrocode} +\newcommand\DefaultIncludeSurround {% + \par +} +\newlet\IncludeSurround\DefaultIncludeSurround +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\c@IncludeDepth} +% With nested \cs\include{}s, we need some way for the various ones to +% distinguish themselves, so we keep track of the nested depth with the +% |IncludeDepth| counter. +% \begin{macrocode} +\newcounter{IncludeDepth} % starts at 0 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\IfAllowed} +% \begin{macro}{\includeonly} +% \begin{macro}{\includeall} +% I think it's more efficient to define a macro for each included part on the +% list than it is to search through the list possibly twice for each one. +% Other opinions on making this whole thing more efficient? +% +% We are using the usual \LaTeX{} trick of undefined control sequences +% comparing equally with \cs\relax. Empty control sequences are \emph{not} +% the same. Should be followed by \meta{true clause} then \meta{false +% clause}. +% \begin{macrocode} +\newcommand\IfAllowed [1] {% + \@firstoftwo +} +\newcommand\includeall {% + \let\includeonly\Gobble +} +\defcommand\includeonly [1] {% + \@partswtrue +% \DTypeout{INCLUDEONLY}% + \edef\@partlist {\zap@space#1 \@empty}% + \@for\nc@t@a:=\@partlist \do {% + \InitName*{nc@part@\nc@t@a}% + }% + \defcommand\IfAllowed [1] {% args: part-name + \@ifundefined{nc@part@##1} {% +% \DTypeout{##1 NOTALLOWED}% + \let\nc@t@c\@secondoftwo + }{% ELSE +% \DTypeout{##1 ALLOWED}% + \let\nc@t@c\@firstoftwo + }% + \nc@t@c + }% +% \DTypeout{ENDINCLUDEONLY}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\include} +% \begin{macro}{\include*} +% This is the principle user command. The scratch variable \cname{nc@t@b} +% contains what really surrounds the included file. +% \begin{macrocode} +\def\include {% + \@ifstar {% + \let\nc@t@b\IncludeSurround + \nc@include + }{% ELSE + \let\nc@t@b\clearpage + \nc@include + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \section{Experimental common} +% +% \begin{macro}{\Disable} +% \begin{macro}{\DisableAll} +% This allows the disabling hacks. +% \begin{macrocode} +\ReserveCS\DisableAll +\newcommand\Disable [1] {% + \g@addto@macro\DisableAll{#1}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% We start with considering how to quit inputting a file. The idea is to make +% the \code{\end{document}} command of the part call \cs\endinput. But there +% is a hitch that characters on the line after the \code{\end{document}} get +% inserted when you don't want them to. To beat that limitation, we have to do +% some work. +% +% \begin{macro}{\nc@radical@shutdown} +% We will add a bunch of commands to this macro, with the idea of \cs\catcode{}ing +% everything and its brother to a comment. This would be a brute force +% method! +% \begin{macrocode} +\ReserveCS\nc@radical@shutdown +% \end{macrocode} +% First log a message that we're about to do some crazy things. In case +% something goes wrong, this might help. +% \begin{macrocode} +\addto@macro\nc@radical@shutdown {% + \MonsterInfo{newclude} + {\protect\nc@radical@shutdown\space beginning}} +% \end{macrocode} +% Now we start adding \cs\catcode commands. These first two should be +% redundant; but just in case someone changed things\lips. +% \begin{macrocode} +\addto@macro\nc@radical@shutdown{\catcode`\%=14} % 14 = comment +\addto@macro\nc@radical@shutdown{\catcode`\^=7} % 7 = superscript +% \end{macrocode} +% \begin{macro}{\nc@disable@char} +% Next, we define a command we weill use in a loop in a moment. +% \begin{macrocode} +\newcommand\nc@disable@char[1] {% + \addto@macro\nc@radical@shutdown + {\catcode`#1=14}} % 14 = comment +% \end{macrocode} +% The following list contains every keyboard char except these three, which are +% treated specially: |%#|. +% The first is already a comment, and we handle the second in a moment. Each +% character in the following list is \cs\catcode{}d to a comment: +% \begin{macrocode} +\@tfor\sc@t@a:=abcdefghijklmnopqrstuvwxyz% + ABCDEFGHIJKLMNOPQRSTUVWXYZ% + ~!@$&*()_+-=[]|/?.,<>% + 1234567890% + `'";:% + \^\\\{\}\ % this is really the chars "^\{}" and space + \do {\expandafter\nc@disable@char\sc@t@a} +% \end{macrocode} +% We add |#| separately, because it's tricky or impossible to put it into the +% list we just used. +% \begin{macrocode} +\nc@disable@char\# +% \end{macrocode} +% \end{macro} +% We end the macro with \cs\endinput. This has to come after all the previous, +% otherwise, \TeX{} goes ahead and reads to the end of the line immediately, +% with regular catcodes. This is a good theory, I'm not sure it's necessary. +% \begin{macrocode} +\addto@macro\nc@radical@shutdown{\endinput} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nc@radical@shutdown@aftergroup} +% We need to use \cname{nc@radical@shutdown} this way. +% \begin{macrocode} +\newcommand\nc@radical@shutdown@aftergroup {% + \aftergroup\nc@radical@shutdown +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\includedoc} +% \begin{macro}{\includedoc*} +% \mbox{} +% \begin{macrocode} +\newcommand\includedoc {% + \md@check@star + \Expand \sc@star@nothing\In {% + \IncludeEnv##1{document}{}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\includedocskip} +% \begin{macro}{\includedocskip*} +% \mbox{} +% \begin{macrocode} +\newcommand\includedocskip {% + \md@check@star + \Expand \sc@star@nothing\In {% + \IncludeEnvSkip##1{document}{}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\IncludeEnv} +% \begin{macro}{\nc@includeenv} +% \begin{macro}{\nc@@includeenv} +% \mbox{} +% \begin{macrocode} +\newcommand\IncludeEnv [2] {% args: environment instance + \md@check@star + \@ifnextchar [ {% ^^A for Emacs: ] + \nc@includeenv{#1}{#2}% + }{% ELSE + \nc@includeenv{#1}{#2}[]% + }% +} +\NewName{nc@includeenv} {#1#2[#3]} {% args: environment instance [prehook] + \@ifnextchar [ {% ^^A for Emacs: ] + \nc@@includeenv {#1}{#2}{#3}% + }{% ELSE + \nc@@includeenv {#1}{#2}{#3}[]% + }% +} +\NewName{nc@@includeenv} {#1#2#3[#4]} {% args: environment instance prehook [posthook] + \begingroup + \DisableAll + \let\documentclass\GobbleOM + \let\usepackage\GobbleOM + \expandafter\def\csname end#1\endcsname {% + \makeatletter + % POSTHOOK + \nc@radical@shutdown@aftergroup + }% + \expandafter\def\csname #1\endcsname {} % PREHOOK + \endgroup + \par + \Expand \sc@star@nothing\In {% + \include##1{#2}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\NewName {nc@@includeenvskip} {#1#2#3[#4]} {% args: environment instance prehook [posthook] + \begingroup + \DisableAll + \expandafter\def\csname end#1\endcsname {% + \makeatletter + % POSTHOOK + \nc@radical@shutdown@aftergroup + }% + \expandafter\def\csname #1\endcsname {} % PREHOOK + \long\def\documentclass ##1\begin{document}{% + \begingroup + \def\@currenvir{document}% + } + \endgroup + \par + #1% +} +% \end{macrocode} +% +% \section{Tag} +% +% The code in this section is processed when the \option{tag} package option is +% given (or, because the \option{tag} option is the default, when no package +% options are given.) +% +% \input{tag.sto} +% +% \section{Allocate} +% +% The code in this section is processed when the \option{allocate} package +% option is given. +% +% \input{allocate.sto} +% +% \section{Benign packages} +% +% \begin{macro}{\DeclareFormattingPackage} +% \begin{macro}{\nc@formatting@packages} +% \mbox{} +% \begin{macrocode} +\newcommand\DeclareFormattingPackage [1] {% + \addto@macro\nc@formatting@packages{,#1}% +} +\newcommand\nc@formatting@packages {times,helvetic} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/newclude.tex b/macros/latex/contrib/frankenstein/newclude.tex new file mode 100644 index 0000000000..aeaab9f1c7 --- /dev/null +++ b/macros/latex/contrib/frankenstein/newclude.tex @@ -0,0 +1,67 @@ +% newclude.tex -- documentation for the newclude LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{newclude.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{newclude} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{newclude.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/simple.sto b/macros/latex/contrib/frankenstein/simple.sto new file mode 100644 index 0000000000..80fbcabe9a --- /dev/null +++ b/macros/latex/contrib/frankenstein/simple.sto @@ -0,0 +1,58 @@ +% \AddToCheckSum{67} +% +% The \option{simple} option adds the optional argument to \cs\include, and +% does nothing else. +% +% \begin{macro}{\include} +% I'm not really sure why the \cs\relax is there; I'm imitating the kernel's +% command. +% \begin{macrocode} +\defcommand\include {% + \relax + \ifnum\@auxout=\@partaux + \@latex@error{\string\include\space cannot be nested}\@eha + \else + \expandafter\@include + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@include} +% \mbox{} +% \begin{macrocode} +\defcommand\@include [2][] {% + \clearpage + \if@filesw + \immediate\write\@mainaux{\string\@input{#2.aux}}% + \fi + \@tempswatrue + \if@partsw + \@tempswafalse + \edef\reserved@b{#2}% + \@for\reserved@a:=\@partlist\do + {\ifx\reserved@a\reserved@b\@tempswatrue\fi}% + \fi + \if@tempswa + \let\@auxout\@partaux + \if@filesw + \immediate\openout\@partaux #2.aux + \immediate\write\@partaux{\relax}% + \fi +% \end{macrocode} +% All we did was change |#1| to |#2| and add the next line. +% \begin{macrocode} + #1% + \@input@{#2.tex}% + \clearpage + \@writeckpt{#2}% + \if@filesw + \immediate\closeout\@partaux + \fi + \else + \@nameuse{cp@#2}% + \fi + \let\@auxout\@mainaux +} +% \end{macrocode} +% \end{macro} diff --git a/macros/latex/contrib/frankenstein/slemph.cfg b/macros/latex/contrib/frankenstein/slemph.cfg new file mode 100644 index 0000000000..8c6cd08789 --- /dev/null +++ b/macros/latex/contrib/frankenstein/slemph.cfg @@ -0,0 +1,27 @@ +% \iffalse +%% +% Even if you don't want any code in this file, leave the empty file, or else +% loading the \package{slemph} package will consume extra time as it searches +% for this file. +%% +% \fi +% \begin{macrocode} +\def\fileinfo{slemph package configuration} +\def\fileversion{v1.0} +\def\filedate{1996/01/24} +\def\docdate{1996/01/24} +% \end{macrocode} +% +% \AddToCheckSum{12} +% +% \begin{macrocode} +\ProvidesFile{slemph.cfg} +% \end{macrocode} +% +% \begin{macro}{\em} +% Slanted emphasis. +% \begin{macrocode} +\let\em\slswitch +% \end{macrocode} +% \end{macro} + diff --git a/macros/latex/contrib/frankenstein/slemph.ins b/macros/latex/contrib/frankenstein/slemph.ins new file mode 100644 index 0000000000..47b7cb5927 --- /dev/null +++ b/macros/latex/contrib/frankenstein/slemph.ins @@ -0,0 +1,64 @@ +% slemph.ins -- docstrip driver for the slemph LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + slemph.sty or slemph.stq. This + LaTeX package will work ONLY if it is called slemph.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + slemph.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{slemph.stq}{\from{slemph.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file slemph.stq is a faster replacement for the file} +\Msg{* slemph.sty.} +\Msg{*} +\Msg{* slemph.stq is stripped of comments (documentation) and must be} +\Msg{* renamed slemph.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/slemph.pdf b/macros/latex/contrib/frankenstein/slemph.pdf new file mode 100644 index 0000000000..49955c9055 Binary files /dev/null and b/macros/latex/contrib/frankenstein/slemph.pdf differ diff --git a/macros/latex/contrib/frankenstein/slemph.sty b/macros/latex/contrib/frankenstein/slemph.sty new file mode 100644 index 0000000000..f48c93cb76 --- /dev/null +++ b/macros/latex/contrib/frankenstein/slemph.sty @@ -0,0 +1,214 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% slemph LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, slemph.tex +% and slemph.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{41} +% +% \begin{abstract} +% The \package{slemph} package defines the commands \cs\itswitch, \cs\slswitch, +% \cs\textitswitch, and \cs\textslswitch, which switch between slanted or +% italic type and upright type. They can be used to represent emphasis with +% slanted type. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \DescribeMacro\itswitch +% \cs\itswitch calls \cs\itshape if the current font is not italic, and +% \cs\upshape if the current font is italic. +% +% \DescribeMacro\slswitch +% \cs\slswitch calls \cs\slshape if the current font is not slanted, and +% \cs\upshape if the current font is slanted. +% +% \DescribeMacro\textitswitch +% \cs\textitswitch\marg{text} sets its argument with \cs\itshape if the +% current font is not italic, or \cs\upshape if the current font is italic. +% +% \DescribeMacro\textslswitch +% \cs\textslswitch\marg{text} sets its argument with \cs\slshape if the +% current font is not slanted, or \cs\upshape if the current font is slanted. +% +% Regarding all four commands above, notice that the factory definition of +% \cs\em would switch based on whether the current font was \emph{sloped}, +% which includes both slanted and italic type. I think slanted and italic type +% are different enough that you can leave, say, an italic word in the midst of +% a slanted context and it will still communicate to the reader whatever italic +% type signifies in an upright context. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{slanted emphasis (Frankenstein's gait)} +\def\DoXPackageS {} +\def\fileversion{v1.2} +\def\filedate{1999/02/25} +\def\docdate{1999/02/25} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{slemph}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{The switchers} +% +% \begin{macro}{\itswitch} +% \begin{macro}{\textitswitch} +% \begin{macro}{\slswitch} +% \begin{macro}{\textslswitch} +% Normally we would use the \cs\NewRobustCommand and \cs\NewTextFontCommand +% commands from the \package{moredefs} package, but this package is so small we +% might as well do that by hand and avoid dependence on that larger package, +% for efficiency. +% \begin{macrocode} +\newcommand\itswitch {} +\newcommand\slswitch {} +\newcommand\textitswitch {} +\newcommand\textslswitch {} + +\DeclareRobustCommand\itswitch {% + \@nomath\itswitch + \def\reserved@a{it}% + \ifx\f@shape\reserved@a + \upshape + \else + \itshape + \fi +} +\DeclareRobustCommand\slswitch {% + \@nomath\slswitch + \def\reserved@a{sl}% + \ifx\f@shape\reserved@a + \upshape + \else + \slshape + \fi +} +\DeclareTextFontCommand\textitswitch\itswitch +\DeclareTextFontCommand\textslswitch\slswitch +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \part{Configuration} +% +% Load a configuration file. +% \begin{macrocode} +\InputIfFileExists{slemph.cfg}{}{} +% \end{macrocode} +% +% The contents of the distributed configuration file are below. +% +% \InputIfFileExists{slemph.cfg}{}{} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/slemph.tex b/macros/latex/contrib/frankenstein/slemph.tex new file mode 100644 index 0000000000..8a4230cff8 --- /dev/null +++ b/macros/latex/contrib/frankenstein/slemph.tex @@ -0,0 +1,67 @@ +% slemph.tex -- documentation for the slemph LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{slemph.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{slemph} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{slemph.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/tag.sto b/macros/latex/contrib/frankenstein/tag.sto new file mode 100644 index 0000000000..e8bfe0fa16 --- /dev/null +++ b/macros/latex/contrib/frankenstein/tag.sto @@ -0,0 +1,441 @@ +% \AddToCheckSum{441} +% +% \subsection{Writing to \cname{@auxout}} +% +% \todo{ +% Might I need to do \code{\let\protect\@unexpandable@protect} instead of +% \cs\noexpand, in the def of \cname{\protected@writeaux}? +% } +% +% \begin{macro}{\nc@writeaux@main} +% \begin{macro}{\nc@protected@writeaux@main} +% The |main| versions are exactly the same as what they replaced. +% \begin{macrocode} +\newcommand\nc@writeaux@main {% + \immediate\write\@auxout +} +\newcommand\nc@protected@writeaux@main {% + \protected@write\@auxout +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@writeaux@aux} +% \begin{macro}{\nc@protected@writeaux@aux} +% When you remove the \cs\immediate, you have to expand whatever's in the +% argument at the time you invoke \cs\write. \cs\IncludeName and +% \cname{@percentchar}, and other exandables in |#2| will get expanded now. +% The \cname{@percentchar} and the |^^J|s are there because lines written to +% \cname{@auxout} must be on lines by themselves to satisfy \BibTeX. The +% |^^J|s write newlines, and the \cname{@percentchar} eliminates a newline when +% the \ext{aux} file is read in again later. Accommodating \BibTeX{} requires +% special consideration several times below as well. +% \begin{macrocode} +\newcommand\nc@writeaux@aux [1] {% args: write-text + \eExecute {% + \write\@auxout{\string\@auxtag{\IncludeName}{\@percentchar^^J#1^^J}}% + }% +} +\newcommand\nc@protected@writeaux@aux [2] {% args: init-hook write-text + \protected@write\@auxout{#1}{\string\@auxtag{\IncludeName}{\@percentchar^^J#2^^J}}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@writeaux} +% \begin{macro}{\@protected@writeaux} +% We start with the |main| versions. We don't reserve the control sequences +% \cname{@writeaux} and \cname{protected@writeaux} because the hack to adapt +% other packages might have already defined it with \cs\providecommand. +% \begin{macrocode} +\let\@writeaux\nc@writeaux@main +\let\protected@writeaux\nc@protected@writeaux@main +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Kernel redefinitions} +% +% \begin{macro}{\@bibitem} +% \begin{macro}{\@lbibitem} +% \begin{macro}{\label} +% \begin{macro}{\@citex} +% \begin{macro}{\bibliography} +% \begin{macro}{\nocite} +% \begin{macro}{\addtocontents} +% These are simple redefinitions of kernel functions. The changes are the +% substitutions for the writing commands described above. +% \begin{macrocode} +\defcommand*\@bibitem [1] {% + \item + \if@filesw + \@writeaux{\string\bibcite{#1}{\the\value{\@listctr}}}% + \fi + \ignorespaces +} +\DefName*{@lbibitem} {[#1]#2} {% + \item[\@biblabel{#1}\hfill]% + \if@filesw + \begingroup + \let\protect\noexpand + \@writeaux{\string\bibcite{#2}{#1}}% + \endgroup + \fi + \ignorespaces +} +\defcommand*\label [1] {% + \@bsphack + \protected@writeaux{}{\string\newlabel{#1}{{\@currentlabel}{\thepage}}}% + \@esphack +} +\defcommand\addtocontents [2] {% + \protected@writeaux + { + \let\label\Gobble + \let\index\Gobble + \let\glossary\Gobble + } + {\string\@writefile{#1}{#2}}% +} +\DefName*{@citex} {[#1]#2} {% + \let\@citea\@empty + \@cite {% + \@for\@citeb:=#2\do {% + \@citea + \def\@citea{,\penalty\@m\ }% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw + \@writeaux{\string\citation{\@citeb}}% + \fi + \@ifundefined{b@\@citeb} {% + \mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}% + }{% ELSE + \hbox{\csname b@\@citeb\endcsname}% + }% + }% + }{#1}% second arg to \@cite +} +\defcommand*\bibliography [1] {% + \if@filesw + \@writeaux{\string\bibdata{#1}}% + \fi + \@input@{\jobname.bbl}% +} + \defcommand*\bibliographystyle [1] {% + \ifx\@begindocumenthook\@undefined\else + \expandafter\AtBeginDocument + \fi + {\if@filesw + \@writeaux{\string\bibstyle{#1}}% + \fi}% +} +\defcommand*\nocite [1] {% + \@bsphack + \@for\@citeb:=#1\do {% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw + \@writeaux{\string\citation{\@citeb}}% + \fi + \@ifundefined{b@\@citeb} {% + \G@refundefinedtrue + \@latex@warning{Citation `\@citeb' undefined}% + }{}% + }% + \@esphack +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Checkpoints} +% +% \begin{macro}{\@writeckpt} +% \begin{macro}{\@wckptelt} +% The \cname{@charlb}, \cname{@charrb}, and \cname{@percentchar} stuff is to +% satisfy \BibTeX{} (see above). +% \begin{macrocode} +\defcommand*\@writeckpt [1] {% + \if@filesw + \write\@auxout{\string\@setckpt{#1}\@charlb\@percentchar}% + {\let\@elt\@wckptelt + \cl@@ckpt}% + \write\@auxout{\@charrb}% + \fi +} +\defcommand\@wckptelt [1] {% + \write\@auxout{\string\setcounter{#1}{\the\@nameuse{c@#1}}}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Including} +% +% \begin{macro}{\IncludeName} +% \begin{macro}{\ParentName} +% \begin{macro}{\nc@includename@} +% \mbox{} +% \begin{macrocode} +\newcommand\IncludeName {% + \@nameuse{nc@includename@\theIncludeDepth}% +} +\newcommand\ParentName {% + \ifnum\value{IncludeDepth}= 0 + \jobname + \FrankenWarning{newclude}{Requested name of parent of principle source}% + \else +% \end{macrocode} +% The incrementation of the \cs{IncludeDepth} counter is local to the group. +% \begin{macrocode} + \begingroup + \advance\c@IncludeDepth by \m@one + \@nameuse{nc@includename@\theIncludeDepth}% + \endgroup + \fi +} +\NewName {nc@includename@0} {} {\jobname} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@include} +% \begin{macro}{\nc@@include} +% \todo{dox} +% \begin{macrocode} +\newcommand\nc@include [2][] {% args: hook filename + \@ifnextchar [ {%] + \nc@@include{#1}{#2}% + }{% ELSE + \nc@@include{#1}{#2}[]% + }% +} +\NewName{nc@@include}{#1#2[#3]} {% args: prehook filename posthook + \IfAllowed{#2} {% + \nc@t@b % surround the \include with something + \stepcounter{IncludeDepth}% + \DefName*{nc@includename@\theIncludeDepth} {} {#2}% + \let\@writeaux\nc@writeaux@aux + \let\protected@writeaux\nc@protected@writeaux@aux +% \end{macrocode} +% Now execute the text of the optional argument to \cs\include. +% \begin{macrocode} + #1% + \@input@{#2.tex}% + #3% + \@writeckpt{#2}% + \let\@writeaux\nc@writeaux@main + \let\protected@writeaux\nc@protected@writeaux@main +% \end{macrocode} +% We mustn't restore the counter before we have finished using it. +% \begin{macrocode} + \addtocounter{IncludeDepth}{\m@ne}% + \nc@t@b % surround the \include with something + }{% ELSE +% \end{macrocode} +% If the file is not allowed, we don't load it and do two things instead. We +% execute the part's checkpoint, then we write out the part's auxcommands and +% checkpoint again. We must handle the case when the auxcommands isn't +% defined; but the checkpoint will always be defined. +% \begin{macrocode} + \@ifundefined{cp@#2} {% +% \DTypeout{No information on part [#2]!}% + }{% ELSE + \@nameuse{cp@#2}% + \if@filesw% + \nc@write@auxcommands{#2}% + \nc@write@ckpt{#2}% + \fi% if@filesw + }% if@undefined + }% IfAllowed +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@write@auxcommands} +% \begin{macro}{\nc@write@ckpt} +% \todo{dox} +% +% \cs\meaning produces catcode 12's for all chars except spaces which are 10. +% Begin making definitions with |\catcode`\^^M=12| (other). +% \begin{macrocode} +\begingroup +\catcode`\^^M=12 %% double percents mean they're there only because of the catcode +%% +\Global\DefName*{nc@write@auxcommands} {#1} {% args: partname + \@ifundefined{nc@auxcommands@#1} {% + }{% ELSE + \write\@auxout{\string\@auxtag{#1}\@charlb\@percentchar}% + \EExpand*\csname nc@auxcommands@#1\endcsname\In {% + \edef\nc@t@a {% + \expandafter\strip@prefix\meaning ##1% + }% + }% + \edef\nc@t@a {\expandafter\nc@strip@M\nc@t@a\@nil}% +% \DTypeout{The auxcommands: \meaning\nc@t@a}% + \begingroup %% + \catcode`\^^M=12 % other + \nc@for\nc@t@b:=\nc@t@a\do {% +% \DTypeout{auxcommand ITEM: \meaning\nc@t@b}% + \EExpand\nc@t@b\In {% + \write\@auxout{##1}% + }% + }% + \endgroup %% + \write\@auxout{\@charrb}% + }% +}%% +\Global\DefName*{nc@write@ckpt} {#1} {% args: partname + \write\@auxout{\string\@setckpt{#1}\@charlb\@percentchar}% + \EExpand*\csname cp@#1\endcsname\In {% + \edef\nc@t@a {% + \expandafter\strip@prefix\meaning ##1% + }% + }% + \edef\nc@t@a {\expandafter\nc@strip@M\nc@t@a\@nil}% + \begingroup %% + \catcode`\^^M=12 % other + \nc@for\nc@t@b:=\nc@t@a\do {% +% \DTypeout{checkpoint ITEM: \meaning\nc@t@b}% + \EExpand\nc@t@b\In {% + \write\@auxout{##1}% + }% + }% + \endgroup %% + \write\@auxout{\@charrb}% +}%% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@for} +% \begin{macro}{\nc@forloop} +% \begin{macro}{\nc@iforloop} +% \cname{nc@for} is like the kernel's \cname{@for} but divides its list at +% |^^M|$_{12}$ instead of |,|. +% \begin{macrocode} +\Global\NewName{nc@for} {#1:=#2\do#3} {% FIX (what?) + \expandafter \def %% + \expandafter \@fortmp %% + \expandafter {#2}% + \ifx\@fortmp\@empty \else %% + \expandafter\nc@forloop#2^^M\@nil^^M\@nil\@@#1{#3}% + \fi %% +}%% +\Global\NewName{nc@forloop} {#1^^M#2^^M#3\@@#4#5} {% + \def#4{#1}% + \ifx #4\@nnil \else %% + #5% + \def#4{#2}% + \ifx #4\@nnil \else %% + #5% + \nc@iforloop #3\@@#4{#5}% + \fi %% + \fi %% +}%% +\Global\NewName{nc@iforloop} {#1^^M#2\@@#3#4} {% + \def#3{#1}% + \ifx #3\@nnil %% + \expandafter\@fornoop %% + \else %% + #4% + \relax %% + \expandafter\nc@iforloop %% + \fi %% + #2\@@#3{#4}% +}%% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@strip@M} +% This strips a final |^^M|$_{12}$ from its argument. \todo{I think this could be +% built in to \cname{nc@for}.} +% \begin{macrocode} +\Global\NewName{nc@strip@M} {#1^^M\@nil} {#1}%% +% \end{macrocode} +% Finish making definitions with |\catcode`\^^M=12|. +% \begin{macrocode} +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@auxtag} +% \begin{macro}{\@@auxtag} +% We both execute and save. \todo{efficiency? check only once, then redefine +% auxtag?} \todo{dox}. +% +% I could use |\EExpand\In| for clarity, but I go for efficiency on this +% crucial macro. +% +% Begin making definitions with |\catcode`\^^M=12| (other). +% \begin{macrocode} +\begingroup +\catcode`\^^M\active %% double percents mean they're there only because of the catcode +%% +\Global\NewName*{@auxtag} {#1} {% args: partname + \begingroup %% + \catcode`\^^M\active %% + \@@auxtag{#1}% +}%% +\Global\NewName*{@@auxtag} {#1#2} {% args: partname auxcommands + \@ifundefined {nc@auxcommands@#1} {% + \nc@toks@a={#2}% + }{% ELSE + \expandafter \nc@toks@a %% + \expandafter \expandafter %% + \expandafter {\csname nc@auxcommands@#1\endcsname#2}% + }% + \expandafter\xdef\csname nc@auxcommands@#1\endcsname{\the\nc@toks@a}% + #2% + \endgroup %% +}%% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@setckpt} +% \begin{macro}{\@@setckpt} +% \todo{dox} +% \begin{macrocode} +\Global\DefName*{@setckpt} {#1} {% args: partname + \begingroup %% + \catcode`\^^M\active %% + \@@setckpt{#1}% +}%% +% \end{macrocode} +% Finish making definitions with |\catcode`\^^M=12|. +% \begin{macrocode} +\endgroup +% \end{macrocode} +% The \cs\endgroup terminates the change in catcode. +% \begin{macrocode} +\newcommand*\@@setckpt [2] {% args: partname checkpoint + \expandafter\gdef\csname cp@#1\endcsname{#2}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% What this does is effectively remove all the tags. The end of document hook +% is processed before the closing processing of the \ext{aux} files, during +% which checking for things like undefined references is done. At this point +% we do not need the tags. +% \begin{macrocode} +\AtEndDocument {% + \let\@auxtag\@secondoftwo +} +% \end{macrocode} diff --git a/macros/latex/contrib/frankenstein/titles.cfg b/macros/latex/contrib/frankenstein/titles.cfg new file mode 100644 index 0000000000..27b3a5c16d --- /dev/null +++ b/macros/latex/contrib/frankenstein/titles.cfg @@ -0,0 +1,412 @@ +% \iffalse +%% +% Even if you don't want any code in this file, leave the empty file, or else +% loading the \package{titles} package will consume extra time as it searches +% for this file. +%% +% \fi +% \begin{macrocode} +\def\fileinfo{titles package configuration} +\def\fileversion{v1.4} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +% \end{macrocode} +% +% \AddToCheckSum{24} +% +% \begin{macrocode} +\ProvidesFile{titles.cfg} +% \end{macrocode} +% +% \section{User Customization} +% +% Put your own alterations and additions here. For example. +% \begin{macrocode} +% \let\word\textslswitch + \newlet\longpoem\textitswitch + \newlet\film\textitswitch + \newlet\essaytitle\Wrapquotes + \newlet\chaptertitle\Wrapquotes +% \end{macrocode} +% +% \part{Testing} +% +% \begingroup +% \setlength\parindent{0pt} +% \raggedright +% +% \subsection{Question and exclamation marks} +% +% \newcommand\TestQE [1] {% +% Test string: [#1]\qquad Result: +% \IfQuestionOrExclamation{#1} +% {Question or Exclamation} +% {Declarative} +% } +% +% \TestQE{% +% Title% +% } +% +% \TestQE{% +% Title?% +% } +% +% \TestQE{% +% Title!% +% } +% +% \TestQE{% +% Title??% +% } +% +% \TestQE{% +% Title!!% +% } +% +% \TestQE{% +% Title? Title% +% } +% +% \TestQE{% +% Title! Title% +% } +% +% \TestQE{% +% Title!?% +% } +% +% \TestQE{% +% Title?!% +% } +% +% \TestQE{% +% Title? Title?% +% } +% +% \TestQE{% +% Title? Title!% +% } +% +% \TestQE{% +% Title! Title?% +% } +% +% \TestQE{% +% Title?? Title% +% } +% +% \TestQE{% +% Title!! Title% +% } +% +% \subsection{Plain} +% +% \book{Book Title}. Test. +% +% \book{Book Title}, test. +% +% \book{Book Title}; test. +% +% \book{Book Title} test. +% +% \play{Play Title}. Test. +% +% ``Play Title.'' Test. +% +% \play{Play Title}, test. +% +% ``Play Title,'' test. +% +% \play{Play Title}; test. +% +% ``Play Title''; test. +% +% \play{Play Title} test. +% +% ``Play Title'' test. +% +% \play{title}~tie +% +% ``title''~tie +% +% \play{title}\ explicit space +% +% ``title''\ explicit space +% +% \play{title}\space \cs\space +% +% ``title''\space \cs\space +% +% \play{title}/slash +% +% ``title''/slash +% +% \play{title}\/ italcorr +% +% ``title''\/ italcorr +% +% \newpage {\makeatletter +% +% \play{title}\@xobeysp xobey +% +% } +% +% {\makeatletter +% +% ``title''\@xobeysp xobey +% +% } +% \subsection{Nested beginnings} +% +%% +% +% \book{\book{Book Title} begins first book title} and +% outside. +% +% \book{\book{Book Title}, begins first book title}, and +% outside. +% +% \book{\book{Book Title}. begins first book title}. and +% outside. +% +% \book{\book{Book Title}; begins first book title}; and +% outside. +% +%% +% +% \book{\play{Play Title} begins first book title} and +% outside. +% +% \book{\play{Play Title}, begins first book title}, and +% outside. +% +% \book{\play{Play Title}. begins first book title}. and +% outside. +% +% \book{\play{Play Title}; begins first book title}; and +% outside. +% +%% +% +% \play{\book{Book Title} begins first play title} and +% outside. +% +% \play{\book{Book Title}, begins first play title}, and +% outside. +% +% \play{\book{Book Title}. begins first play title}. and +% outside. +% +% \play{\book{Book Title}; begins first play title}; and +% outside. +% +%% +% +% \play{\play{Play Title} begins first play title} and +% outside. +% +% \play{\play{Play Title}, begins first play title}, and +% outside. +% +% \play{\play{Play Title}. begins first play title}. and +% outside. +% +% \play{\play{Play Title}; begins first play title}; and +% outside. +% +%% +% \subsection{Nested endings} +% +% There are too many cases I think to test them all. I'm testing to +% three levels of nesting. +% +% This is a \book{Book Title including \book{Book Title including +% \book{Book Title}} and ending first one} and outside. +% +% This is a \book{Book Title including \book{Book Title including +% \book{Book Title}}, and ending first one}, and outside. +% +% This is a \book{Book Title including \book{Book Title including +% \book{Book Title}}. and ending first one}. and outside. +% +% This is a \book{Book Title including \book{Book Title including +% \book{Book Title}}; and ending first one}; and outside. +% +%% +% +% This is a \book{Book Title including \book{Book Title including +% \play{Play Title}} and ending first one} and outside. +% +% This is a \book{Book Title including \book{Book Title including +% \play{Play Title}}, and ending first one}, and outside. +% +% This is a \book{Book Title including \book{Book Title including +% \play{Play Title}}. and ending first one}. and outside. +% +% This is a \book{Book Title including \book{Book Title including +% \play{Play Title}}; and ending first one}; and outside. +% +%% +% +% This is a \book{Book Title including \play{Play Title including +% \book{Book Title}} and ending first one} and outside. +% +% This is a \book{Book Title including \play{Play Title including +% \book{Book Title}}, and ending first one}, and outside. +% +% This is a \book{Book Title including \play{Play Title including +% \book{Book Title}}. and ending first one}. and outside. +% +% This is a \book{Book Title including \play{Play Title including +% \book{Book Title}}; and ending first one}; and outside. +% +%% +% +% This is a \book{Book Title including \play{Play Title including +% \play{Play Title}} and ending first one} and outside. +% +% This is a \book{Book Title including \play{Play Title including +% \play{Play Title}}, and ending first one}, and outside. +% +% This is a \book{Book Title including \play{Play Title including +% \play{Play Title}}. and ending first one}. and outside. +% +% This is a \book{Book Title including \play{Play Title including +% \play{Play Title}}; and ending first one}; and outside. +% +%% +% +% This is a \play{Play Title including \play{Play Title including +% \play{Play Title}} and ending first one} and outside. +% +% This is a \play{Play Title including \play{Play Title including +% \play{Play Title}}, and ending first one}, and outside. +% +% This is a \play{Play Title including \play{Play Title including +% \play{Play Title}}. and ending first one}. and outside. +% +% This is a \play{Play Title including \play{Play Title including +% \play{Play Title}}; and ending first one}; and outside. +% +%% +% +% This is a \play{Play Title including \play{Play Title including +% \book{Book Title}} and ending first one} and outside. +% +% This is a \play{Play Title including \play{Play Title including +% \book{Book Title}}, and ending first one}, and outside. +% +% This is a \play{Play Title including \play{Play Title including +% \book{Book Title}}. and ending first one}. and outside. +% +% This is a \play{Play Title including \play{Play Title including +% \book{Book Title}}; and ending first one}; and outside. +% +%% +% +% This is a \play{Play Title including \book{Book Title including +% \play{Play Title}} and ending first one} and outside. +% +% This is a \play{Play Title including \book{Book Title including +% \play{Play Title}}, and ending first one}, and outside. +% +% This is a \play{Play Title including \book{Book Title including +% \play{Play Title}}. and ending first one}. and outside. +% +% This is a \play{Play Title including \book{Book Title including +% \play{Play Title}}; and ending first one}; and outside. +% +%% +% +% This is a \play{Play Title including \book{Book Title including +% \book{Book Title}} and ending first one} and outside. +% +% This is a \play{Play Title including \book{Book Title including +% \book{Book Title}}, and ending first one}, and outside. +% +% This is a \play{Play Title including \book{Book Title including +% \book{Book Title}}. and ending first one}. and outside. +% +% This is a \play{Play Title including \book{Book Title including +% \book{Book Title}}; and ending first one}; and outside. +% +%% +% +% \subsection{double and single nosuck} +% \newcommand\note [1] {% +% \medskip{\bfseries #1:}% +% } +% +% \note{OS=open-single\quad OD=open-double\quad CS=close-single\quad +% CD=close-double +% +% The following pairs of lines in medium weight roman should look identical. +% +% The line in typewriter font is the source text. +% +% The following line in medium weight roman is what that source produces. +% +% The third line is what the second line \emph{ought} to produce} +% +% |The word \WrapquotesDN{quoted} is quoted.| +% +% The word \WrapquotesDN{quoted} is quoted. +% +% The word ``quoted'' is quoted. +% +% \medskip +% |The word \WrapquotesSN{scare} is in scare quotes.| +% +% The word \WrapquotesSN{scare} is in scare quotes. +% +% The word `scare' is in scare quotes. +% +% \note{Nesting with no abuttment} +% +% |\WrapquotesDN{The \WrapquotesSN{quick} brown fox \WrapquotesDN{jumped} over the lazy dogs.}| +% +% \WrapquotesDN{The \WrapquotesSN{quick} brown fox \WrapquotesDN{jumped} over the lazy dogs.} +% +% ``The `quick' brown fox ``jumped'' over the lazy dogs.'' +% +% \medskip +% |\WrapquotesSN{The \WrapquotesSN{quick} brown fox \WrapquotesDN{jumped} over the lazy dogs.}| +% +% \WrapquotesSN{The \WrapquotesSN{quick} brown fox \WrapquotesDN{jumped} over the lazy dogs.} +% +% `The `quick' brown fox ``jumped'' over the laxy dogs.' +% +% \note{OS+OS, CD+CS} +% +% |\WrapquotesSN{\WrapquotesSN{The quick} brown fox jumped over the \WrapquotesDN{lazy dogs.}}| +% +% \WrapquotesSN{\WrapquotesSN{The quick} brown fox jumped over the \WrapquotesDN{lazy dogs.}} +% +% `\,`The quick brown fox jumped over the ``lazy dogs.''\,' +% +% \note{OS+OD, CD+CS} +% +% |\WrapquotesSN{\WrapquotesDN{The quick} brown fox jumped over the \WrapquotesSN{lazy dogs.}}| +% +% \WrapquotesSN{\WrapquotesDN{The quick} brown fox jumped over the \WrapquotesSN{lazy dogs.}} +% +% `\,``The quick'' brown fox jumped over the `lazy dogs.'\,' +% +% \note{OD+OD, CS+CD} +% +% |\WrapquotesDN{\WrapquotesDN{The quick} brown fox jumped over the \WrapquotesSN{lazy dogs.}}| +% +% \WrapquotesDN{\WrapquotesDN{The quick} brown fox jumped over the \WrapquotesSN{lazy dogs.}} +% +% ``\,``The quick'' brown fox jumped over the `lazy dogs.'\,'' +% +% \note{OS+OD, CS+CS} +% +% |\WrapquotesSN{\WrapquotesDN{The quick} brown fox jumped over the \WrapquotesSN{lazy dogs.}}| +% +% \WrapquotesSN{\WrapquotesDN{The quick} brown fox jumped over the \WrapquotesSN{lazy dogs.}} +% +% `\,``The quick'' brown fox jumped over the `lazy dogs.'\,' +% +% \endgroup diff --git a/macros/latex/contrib/frankenstein/titles.ins b/macros/latex/contrib/frankenstein/titles.ins new file mode 100644 index 0000000000..f4b650ff4d --- /dev/null +++ b/macros/latex/contrib/frankenstein/titles.ins @@ -0,0 +1,64 @@ +% titles.ins -- docstrip driver for the titles LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + titles.sty or titles.stq. This + LaTeX package will work ONLY if it is called titles.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + titles.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{titles.stq}{\from{titles.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file titles.stq is a faster replacement for the file} +\Msg{* titles.sty.} +\Msg{*} +\Msg{* titles.stq is stripped of comments (documentation) and must be} +\Msg{* renamed titles.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/titles.pdf b/macros/latex/contrib/frankenstein/titles.pdf new file mode 100644 index 0000000000..6dbd535902 Binary files /dev/null and b/macros/latex/contrib/frankenstein/titles.pdf differ diff --git a/macros/latex/contrib/frankenstein/titles.sty b/macros/latex/contrib/frankenstein/titles.sty new file mode 100644 index 0000000000..c2d58e469d --- /dev/null +++ b/macros/latex/contrib/frankenstein/titles.sty @@ -0,0 +1,1312 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% titles LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, titles.tex +% and titles.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{783} +% +%^^A** abstract +% \begin{abstract} +% The \package{titles} package defines macros that typeset the titles of +% books, journals, etc. and handle following spacing and punctuation +% intelligently, based on context. These are useful for bibliographic +% databases, for example. Also defined is other markup like \cs\word, +% \cs\defn, \cs\phrase, etc. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% \section{Options} +% +% There are two package options, \option{british} and \option{american}, the default +% is \option{american}. They select the conventional way to use quotation marks: +% British style is use single quotes, and do not suck following period or comma +% inside; American style is to use double quotes and to suck following period +% or comma inside. +% +% \section{Words and phrases} +% +% \DescribeMacro\word +% Typeset a word or phrase referred to as a noun with \cs\word\marg{word}. +% The argument is not expected to contain punctuation. +% +% \begin{bothexample} +% \word{Elephant} is such a silly word. +% \end{bothexample} +% +% \DescribeMacro\phrase +% Typeset a phrase used as a noun rather than direct quotation with +% \cs\phrase\marg{phrase}. The argument might well have punctuation, +% including final punctuation, which should not be considered to be +% punctuation of the containing sentence. +% +% \begin{bothexample} +% The sentence \phrase{And stop calling me Shirley!} occurs +% twenty-seven times. +% \end{bothexample} +% +% \DescribeMacro{\foreign} +% Typeset a foreign word or phrase with \cs\foreign\marg{foreign text}. +% +% \begin{bothexample} +% I couldn't think of the \foreign{mot juste} at the time. +% \end{bothexample} +% +% \DescribeMacro{\foreignword} +% Typeset a foreign word or phrase referred to as a noun with +% \cs\foreignword\marg{foreign word}. +% +% \begin{bothexample} +% Only later did I realize that the right word was +% \foreignword{bouffon}. +% \end{bothexample} +% +% \caveat {Notice that writing \code{\foreign{\word{text}}} or vice versa is +% not necessarily going to do the right thing. Suppose \cs\foreign and +% \cs\word were both set to \cs\textitswitch (which are in fact the default +% settings below). Then \code{\foreign{\word{text}}} is going to cancel out +% and look just like the surrounding text. This is not the most intuitive +% fact, but it's not worth it to try to make \cs\foreign and \cs\word smart +% enough to see each other inside themselves.} +% +% \DescribeMacro{\term} +% \cs\term\marg{technical term} typesets a techincal term in a different +% font. You might want to use this where a techincal term is first used, or +% defined. One could enhance this macro and \cs\defn to help build an +% automatic glossary +% +% \begin{bothexample} +% This sort of thing is called a \term{blibnil}. +% \end{bothexample} +% +% \DescribeMacro{\defn} +% \cs\defn\marg{definition} typesets a definition, perhaps of a technical +% term. One could enhance this macro and \cs\defn to help build an automatic +% glossary +% +% \begin{bothexample} +% We may describe a \term{blibnil} as \defn{a slibnil with +% three arms}. +% \end{bothexample} +% +% \section{Titles} +% +% \DescribeMacro\book +% \cs\book\marg{book title} typesets a book title. +% +% \begin{bothexample} +% Some people find \book{Moby-Dick} dull, but I thought +% it was exciting. +% \end{bothexample} +% +% \DescribeMacro\journal +% \cs\journal\marg{journal title} typesets a journal title. +% +% \begin{bothexample} +% I liked it so much I started a scholarly journal called +% \journal{The Melville Times} with the inheritance from +% my grandmother. +% \end{bothexample} +% +% \DescribeMacro\music +% \cs\music\marg{music title} typesets a music title. +% +% \begin{bothexample} +% My journal didn't do very well; I moped around my office +% and listened to Schubert's \music{Winterreise}. +% \end{bothexample} +% +% \DescribeMacro\article +% \cs\article\marg{article title} typesets a article title. +% +% \begin{bothexample} +% Then one day I received an article, \article{Pip and +% the Milk of Human Kindness}, by express mail from Wales. +% \end{bothexample} +% +% \DescribeMacro\poemtitle +% \cs\poemtitle\marg{poem title} typesets a poem title. +% +% \begin{bothexample} +% I then wrote my famous poem \poemtitle{Jump for Joy like +% the Butterflies of Troy} in five minutes. +% \end{bothexample} +% +% Sometimes longer poems are distinguished from shorter ones in type when +% they have been published separately as a book [FIX give reference]. This +% package defines a macro \cs\longpoem in the configuration file in the +% following way: +% \begin{codeexample} +% \newlet\longpoem\textitswitch +% \end{codeexample} +% +% \DescribeMacro\play +% \cs\play\marg{play title} typesets a play title. +% +% \begin{bothexample} +% To celebrate the popularity of the article, I took the +% author to the theater to see the acclaimed play +% \play{Grave in Waterloo}, starring Vincent Price. +% \end{bothexample} +% +% \DescribeMacro\craft +% \cs\craft\marg{craft title} typesets a title of a craft or ship. +% +% \begin{bothexample} +% With tears in my heart, I put the author on the \craft{HMS Shangrila} +% bound for Wales. +% \end{bothexample} +% +% \DescribeMacro\species +% \cs\species\marg{[ genus ] species [ subspecies ]} typesets the Latin +% generic and/or specific names for an organism. +% +% \begin{lesson} +% \manual specifies italic type. Genus names should be capitalized, and +% may be abbreviated on subsequent appearances with the initial letter. +% Following designations should be in roman. E.g., ``var.''\ for +% ``variant'' following species name and ``sp.''\ for ``species'' following +% genus name, meaning ``any species in the genus.'' \attrib{7.102--4} +% +% Higher groupings should be in capitalized roman. English derivatives of +% scientific names, e.g., amoeba, are lowercased. \attrib{7.105--6} +% +% \todo{\package{abbrevs} +% category for genus/species and/or datemark for suffixes} +% \end{lesson} +% +% \begin{warning} +% Right now there is a small discrepancy between the behavior of +% \cs\textitswitch and \cs\Wrapquotes regarding what happens when followed by +% a command sequence such as \cs\footnote. I hope to make these things +% completely parallel one day, but for now, realize that after using a +% titling macro that uses \cs\Wrapquotes, you must use |{}| before any +% following command sequence that you want to immediately follow the title +% with no intervening space. The only case I can think of is \cs\footnote. +% If you forget the |{}|, you will have an extra space after the title and before the +% footnotemark. The following example illustrates this behavior and +% contrasts it with \cs\textitswitch: +% \begin{bothexample} +% \newabbrev\foo{Foo} +% +% \book{Foo}\foo +% +% \book{Foo} \foo +% +% \book{Foo}\footnote{footie} +% +% \book{Foo}{}\footnote{footie} +% +% \poemtitle{Foo}\foo +% +% \poemtitle{Foo} \foo +% +% \poemtitle{Foo}\footnote{footie} +% +% \poemtitle{Foo}{}\footnote{footie} +% +% \poemtitle{Foo}.\footnote{footie} +% \end{bothexample} +% \end{warning} +% +% \section{Programmer's interface} +% +% \DescribeMacro\Wrapquotes +% \DescribeMacro\WrapquotesNS +% \DescribeMacro\WrapquotesIS +% \DescribeMacro\WrapquotesNN +% \DescribeMacro\WrapquotesIN +% \DescribeMacro\WrapquotesSN +% \DescribeMacro\WrapquotesDN +% \DescribeMacro\WrapquotesSK +% \cs\Wrapquotes\marg{text} wraps \meta{text} in quotes. Single quotes are +% used initially if the \option{singlequotes} option is given to the +% package, and double quotes if no option or the \option{doublequotes} +% option is given to the package. +% +% When quotation marks inserted by \cs\Wrapquotes and friends are doubled up +% (this occurs sometimes when nesting them), a thinspace (|\,|) is inserted +% between the abutted quotes. +% +% \cs\Wrapquotes will be \cs\let to one of the six macros +% \cs\Wrapquotes\meta{XY}. +% +% In the two-letter suffix \meta{XY}, first letter |N| means ``normal'' and +% |I| means ``inverse.'' These are macros that switch between single and +% double quotes when they nest: an inverse wrapquotes wraps with single +% quotes when a normal wrapquotes would wrap with double quotes, and vice +% versa. First letter |S| for ``single'' and |D| for ``double'' are for +% macros that always wrap with single or double quotes. Spacing and +% punctuation following the closing quotes are handled intelligently by +% macros with second letter |S|, which means means suck a following period +% or comma into the closing quote, that is, if what follows is a comma or +% period, it is pulled inside the quotes (following American practice). +% Second letter |N| means ``nosuck,'' that is, don't suck. Second letter +% |K| means ``kill'': the same as |N| but suppress the effect of any +% punctuation in the quoted argument on spacing that follows the closing +% quotes (i.e., execute \cs\@, which sets the spacefactor to~1000). This is +% only useful in certain technical writing where punctuation in the quoted +% argument should not be considered puncutation of the containing sentence. +% +% A space is inserted after the closing quotes unless what follows is in the +% set |;?:!-)]'\textquoteright{|, in which case no space is inserted.^^A for Emacs: } +% FIX: that would be |\nospacelist| +% +% \DescribeMacro\IfQuestionOrExclamation +% \cs\IfQuestionOrExclamation\marg{text}\marg{true}\marg{false} +% executes \meta{true} clause iff \meta{text} ends with a question mark or +% an exclamation point; executes \meta{false} clause otherwise. +% +% \subsection{Limitations of Wrapquotes and friends} +% ^^A FIX: hmm, can't use \cs or \protect\cs +% \subsubsection{Nesting} +% \begin{warning} +% For proper nesting of \cs\Wrapquotes and friends, user commands must be +% \cs\let to \cs\Wrapquotes or one of the six \cs\Wrapquotes\meta{XY} +% commands instead of using a \cs\def-like defining command. It's OK to +% \cs\let % a user macro to something like \cs\Wrapquotes which itself +% has been % \cs\let to one of the six \cs\Wrapquotes\meta{XY} macros. +% +% The user command which is \cs\let to one of the \cs\Wrapquotes commands +% must furthermore appear in the source. That is, it must not appear as +% the result of an expansion. Among other things, this means that +% nesting won't work properly if you put \cs\Wrapquotes into an abbrev +% (see the \package{abbrevs} package in the \Frankenstein bundle). +% +% For applications where nesting will not occur, there should be nothing +% to worry about. +% \end{warning} +% +% \subsubsection{Italic corrections} +% +% \begin{warning} +% The question of when to insert an italic correction is not nearly as +% simple as it might seem. I cannot figure good rules which cover all +% cases, and I do not trust the behavior of the kernel's macros as a +% guide. So I can not tell you whether this package handles italic +% corrections properly. If you discover behavior which you think is +% wrong, please let me know with an example and an argument. +% \end{warning} +% +% \subsubsection{A slight bug} +% \begin{warning} +% Right now there is a small bug in cases where closing quotes fall at +% the end of italic text, such as +% \begin{bothexample} +% \normalfont +% \book{My love of \poemtitle{Daffodils}}, by H.~Moneysworth. +% \end{bothexample} +% These cases loose because the closing quotation marks and any +% sucked-in punctuation are going to be in roman, not italic, or italic, +% not roman. Only the more obsessive will notice this flaw. I'm sure I +% will come up with a way to handle this for a future version of this +% package. +% \end{warning} +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{title macros (Frankenstein's references)} +\def\DoXPackageS {} +\def\initelyHavECitationS {} +\def\fileversion{v1.2} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{titles}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Requirements} +% +% \begin{macrocode} +\RequirePackage{moredefs,slemph} +% \end{macrocode} +% +% \section{Options} +% +% \begin{macro}{\ti@domelater} +% \begin{macrocode} +\ReserveCS\ti@domelater +\DeclareOption{british} {% + \def\ti@domelater {% + \let\Wrapquotes\WrapquotesNN + \@doublequotes@false + } +} +\DeclareOption{american} {% + \def\ti@domelater {% + \let\Wrapquotes\WrapquotesNS + \@doublequotes@true + } +} +\ExecuteOptions{american} +\ProcessOptions +% \end{macrocode} +% \end{macro} +% +% \section{Wrapquotes} +% +% Here we go! This is not a picnic, so leave your jelly jar home. +% +% \subsection{Titles that are Questions or Exclamations} +% +% \begin{macro}{\IfQuestionOrExclamation} +% \begin{macro}{\ti@checkfor@q} +% \begin{macro}{\ti@checkfor@e} +% \begin{macro}{\ti@prev} +% \begin{macro}{\ti@prev@prev} +% \begin{macro}{\@ti@sw@true} +% \begin{macro}{\@ti@sw@false} +% \begin{macro}{\if@ti@sw@} +% \mbox{} +% \begin{macrocode} +\newcommand\IfQuestionOrExclamation [1] {% + \@tempswafalse + \ti@checkfor@q #1?\@nil + \ti@checkfor@e #1!\@nil + \if@tempswa + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} +% \end{macrocode} +% The large majority of titles will not contain a question mark or exclamation +% point. The large majority of those that do will have a single mark or point +% at the end. We could (I think) use a simpler check that processed all titles +% by looping through to examine the end, but a slightly more complicated check +% will handle the majority of cases very quickly (and at a constant speed, +% rather than proportional to title length) and not greatly slow down +% processing the remaining two unusual cases. We divide our argument (with an +% extra question mark tacked onto the end) into what's before the first +% question mark and what's after it. Then we examine what's after it and +% interpret the results thus: +% \begin{description} +% \item [empty] no question mark in title +% \item [question mark] title ends with question mark (and there are no other +% question marks) +% \item [text ending with one question mark] a question mark occurs in the +% title, but not at the end +% \item [text ending with two question marks] title ends with a question mark +% (and there is a previous question mark) +% \end{description} +% We set switch |a| to true if the title ends with a question mark. +% \begin{macrocode} +\newboolean{@ti@sw@} +\ReserveCS\ti@prev +\ReserveCS\ti@prev@prev +\NewName{ti@checkfor@q} {#1?#2\@nil} {% + \def\sc@t@a{#2}% + \def\sc@t@b{?}% + \ifx\sc@t@a\ShortEmpty + \else + \ifx\sc@t@a\sc@t@b + \@tempswatrue + \else +% \end{macrocode} +% We use a loop to whittle down |#2| until \cname{ti@prev} contains the last +% character and \cname{ti@prev@prev} contains the second-to-last. We know that +% \cname{ti@prev} is going to be a question mark. Iff \cname{ti@prev@prev} is a +% question mark, we are in the final case above. +% \begin{macrocode} + \let\ti@prev\sc@t@a + \let\ti@prev@prev\sc@t@a + \@ti@sw@true + \@whilesw \if@ti@sw@ \fi {% + \ifx\sc@t@a\ShortEmpty + \@ti@sw@false + \else + \let\ti@prev@prev\ti@prev + \let\ti@prev\sc@t@a + \edef\sc@t@a{\E@cdr\sc@t@a\@nil}% + \fi + }% + \edef\ti@prev@prev{\E@car\ti@prev@prev\@nil}% + \ifx\ti@prev@prev\sc@t@b + \@tempswatrue + \fi + \fi + \fi +} +% \end{macrocode} +% Exact same logic applies to exclamation points. +% \begin{macrocode} +\NewName{ti@checkfor@e} {#1!#2\@nil} {% + \def\sc@t@a{#2}% + \def\sc@t@b{!}% + \ifx\sc@t@a\ShortEmpty + \else + \ifx\sc@t@a\sc@t@b + \@tempswatrue + \else + \let\ti@prev\sc@t@a + \let\ti@prev@prev\sc@t@a + \@ti@sw@true + \@whilesw \if@ti@sw@ \fi {% + \ifx\sc@t@a\ShortEmpty + \@ti@sw@false + \else + \let\ti@prev@prev\ti@prev + \let\ti@prev\sc@t@a + \edef\sc@t@a{\E@cdr\sc@t@a\@nil}% + \fi + }% + \edef\ti@prev@prev{\E@car\ti@prev@prev\@nil}% + \ifx\ti@prev@prev\sc@t@b + \@tempswatrue + \fi + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Highlevel macros} +% +% \begin{macro}{\ti@wrapquotes@suck} +% \begin{macro}{\ti@wrapquotes@nosuck} +% These two are the top-level internal macros, and they are pretty sane. One +% sucks in a following period or comma, the other does not. +% \cname{ti@wrapquotes@suck} does not suck, however, when the title ends in a +% question or exclamation point. +% +% The group here is necessary to scope the \cname{@doublequotes@} boolean. +% \begin{macrocode} +\newcommand*\ti@wrapquotes@suck [1] {% +% \DTypeout{top of wrapquotes@suck}% + \IfQuestionOrExclamation {#1} {% + \ti@wrapquotes@nosuck{#1}% + }{% ELSE +% \DTypeout{top of wrapquotes@suck ELSE}% + \begingroup + \if@doublequotes@ +% \DTypeout{double true in suck}% + \@doublequotes@false + \def\sc@t@a {\ti@open@double #1\ti@close@double@suck}% + \else +% \DTypeout{double false in suck}% + \@doublequotes@true + \def\sc@t@a {\ti@open@single #1\ti@close@single@suck}% + \fi + \sc@t@a + \endgroup + }% +} +\newcommand*\ti@wrapquotes@nosuck [1] {% + \begingroup + \if@doublequotes@ +% \DTypeout{double true in nosuck}% + \@doublequotes@false + \def\sc@t@a {\ti@open@double #1\ti@close@double@nosuck}% + \else +% \DTypeout{double false in nosuck}% + \@doublequotes@true + \def\sc@t@a {\ti@open@single #1\ti@close@single@nosuck}% + \fi + \sc@t@a + \endgroup +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\WrapquotesNS} +% \begin{macro}{\WrapquotesIS} +% \begin{macro}{\WrapquotesNN} +% \begin{macro}{\WrapquotesIN} +% \begin{macro}{\WrapquotesSN} +% \begin{macro}{\WrapquotesDN} +% \begin{macro}{\WrapquotesSK} +% \begin{macro}{\Wrapquotes} +% \begin{macro}{\if@doublequotes@} +% \begin{macro}{\@doublequotes@true} +% \begin{macro}{\@doublequotes@false} +% Now we can define the secondary programmers' macros. +% +% We simply reserve \cs\Wrapquotes here, and assign it in the user options +% section above. +% \begin{macrocode} +\newboolean{@doublequotes@} +\newcommand*\WrapquotesNS {% +% \DTypeout{starting wrapquotes NS}% + \ti@wrapquotes@suck +} +\newcommand*\WrapquotesIS {% +% \DTypeout{starting wrapquotes IS}% + \ToggleBoolean{@doublequotes@}% + \ti@wrapquotes@suck +} +\newcommand*\WrapquotesNN {% +% \DTypeout{starting wrapquotes NN}% + \ti@wrapquotes@nosuck +} +\newcommand*\WrapquotesIN {% +% \DTypeout{starting wrapquotes IN}% + \ToggleBoolean{@doublequotes@}% + \ti@wrapquotes@nosuck +} +\newcommand*\WrapquotesSN [1] {% +% \DTypeout{starting wrapquotes SN}% + \begingroup + \ti@open@single #1\ti@close@single@nosuck + \endgroup +} +\newcommand*\WrapquotesDN [1] {% +% \DTypeout{starting wrapquotes DN}% + \begingroup + \ti@open@double #1\ti@close@double@nosuck + \endgroup +} +\newcommand*\WrapquotesSK [1] {% FIX: test +% \DTypeout{starting wrapquotes SK}% + \begingroup + \ti@open@single #1\ti@close@single@nosuck\@% + \endgroup +} +\ReserveCS\Wrapquotes +\ti@domelater +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Opening quotes} +% +% \begin{macro}{\ti@open@double} +% \begin{macro}{\ti@open@single} +% \begin{macro}{\ti@openquote} +% We start by putting an opening mark in scratch |f| with a global +% definition. +% +% I can't remember why it's global. In the macros that close quotes, we want +% to keep that information around past a group end because we're using +% \cs\aftergroup, but that doesn't seem to apply for opening them. Best not +% to change what's not broke, however. +% \begin{macrocode} +\newcommand\ti@open@double {% + \gdef\sc@t@f {\textquotedblleft}% + \ti@openquote +} +\newcommand\ti@open@single {% + \gdef\sc@t@f {\textquoteleft}% + \ti@openquote +} +% \end{macrocode} +% Then we look ahead with scratch |a|. We are looking ahead at the first +% character of the contents of the \cs\Wrapquotes. +% \begin{macrocode} +\newcommand\ti@openquote {% + \futurelet\sc@t@a\ti@@openquote +} +% \end{macrocode} +% Insert the opening mark. Then, if we are about to open another quote, insert +% the space appropriate to separate contiguous quotation marks. +% \begin{macrocode} +\newcommand\ti@@openquote {% + \sc@t@f + \ifx\sc@t@a\WrapquotesNS +% \DTypeout{Quotation marks are doubled up (next is NS); inserting padding.}% + \,% + \else \ifx\sc@t@a\WrapquotesNN +% \DTypeout{Quotation marks are doubled up (next is NN); inserting padding.}% + \,% + \else \ifx\sc@t@a\WrapquotesIN +% \DTypeout{Quotation marks are doubled up (next is IN); inserting padding.}% + \,% + \else \ifx\sc@t@a\WrapquotesIS +% \DTypeout{Quotation marks are doubled up (next is IS); inserting padding.}% + \,% + \else \ifx\sc@t@a\WrapquotesSN +% \DTypeout{Quotation marks are doubled up (next is SN); inserting padding.}% + \,% + \else \ifx\sc@t@a\WrapquotesDN +% \DTypeout{Quotation marks are doubled up (next is DN); inserting padding.}% + \,% + \else \ifx\sc@t@a\WrapquotesSK +% \DTypeout{Quotation marks are doubled up (next is SK); inserting padding.}% + \,% + \else + \fi \fi \fi \fi \fi \fi \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Closing macros that don't suck} +% +% This case that doesn't suck is easier, so we warm up with it. +% +% \begin{macro}{\ti@close@single@nosuck} +% \begin{macro}{\ti@close@double@nosuck} +% \begin{macro}{\ti@close@single@@nosuck} +% \begin{macro}{\ti@close@double@@nosuck} +% \mbox{} +% \begin{macrocode} +\newcommand*\ti@close@single@nosuck {% + \aftergroup\ti@close@single@@nosuck +} +\newcommand*\ti@close@double@nosuck {% + \aftergroup\ti@close@double@@nosuck +} +\newcommand*\ti@close@single@@nosuck {% + \gdef\sc@t@f {\textquoteright}% + \ti@close@quote@nosuck +} +\newcommand*\ti@close@double@@nosuck {% + \gdef\sc@t@f {\textquotedblright}% + \ti@close@quote@nosuck +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ti@close@quote@nosuck} +% \begin{macro}{\if@look@nosuck@} +% \begin{macro}{\@look@nosuck@true} +% \begin{macro}{\@look@nosuck@false} +% \todo{Document this flag. It's a hack, we must set it before each call +% to \cname{ti@q@ifnextcharin} I think. What it stands for is something +% like the presence of the tokens \cname{ti@close@single@nosuck} and +% \cname{ti@close@double@nosuck} in the list of chars to look for, but since +% they aren't really chars they can't go in the list, so instead we set the +% flag. Somewhat cleaner would be putting a flag char in the list, but I +% can't think of what char I could safely use.} +% \begin{macrocode} +\newboolean{@look@nosuck@} +\@look@nosuck@false +\newcommand\ti@close@quote@nosuck {% +% \DTypeout{Starting ti@close@quote@nosuck}% + \@look@nosuck@true +% \end{macrocode} +%% FIX +% Aha, but here is a good reason to leave in |.,| in our substitute for \cs\nospacelist. +% \begin{macrocode} + \expandafter \ti@q@ifnextcharin \expandafter {\nospacelist} {% +% \DTypeout{Found a nosuck no-spacer. C=[\meaning\sc@t@c] F=[\meaning\sc@t@f]}% + \sc@t@f + }{% ELSE +% \DTypeout{Found a nosuck spacer. C=[\meaning\sc@t@c] F=[\meaning\sc@t@f]}% + \sc@t@f\space + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Closing macros that suck} +% +% \begin{macro}{\ti@close@double@suck} +% \begin{macro}{\ti@close@single@suck} +% We need to look ahead beyond the \cs\endgroup that ends +% \cname{Wrapquotes??}. The lookahead mechanism that gets invoked in scratch +% |a| below could handle looking past the \cs\endgroup, but I think it is +% more efficient to skip it by using \cs\aftergroup. +% \begin{macrocode} +\newcommand\ti@close@double@suck {% + \aftergroup\ti@close@double@@suck +} +\newcommand\ti@close@single@suck {% + \aftergroup\ti@close@single@@suck +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ti@close@double@@suck} +% \begin{macro}{\ti@close@single@@suck} +% This part isn't so bad yet. To close the quotes, we again start with the +% closing mark in scratch |f|, with a global definition. +% \begin{macrocode} +\newcommand\ti@close@double@@suck {% + \gdef\sc@t@f {\textquotedblright}% + \ti@close@quote@suck +} +\newcommand\ti@close@single@@suck {% + \gdef\sc@t@f {\textquoteright}% + \ti@close@quote@suck +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nospacelist} +% Put these in the order of their frequency. Anything in \cs\nocorrlist +% should also be in here, most likely. I'm putting in \cname{@xobeysp} +% because it's in the \package{xspace} package, but I can't tell you when it +% would come up. +% \begin{macrocode} +\requirecommand\nospacelist {% + ,.':;?-/\slash~!)]\bgroup\egroup\@sptoken\ \space\/\@xobeysp +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ti@close@quote@suck} +% Then we use \cname{ti@q@ifnextcharin} to look as far ahead as necessary for +% a significant character. The latest significant character found is +% available in scratch |c|. The work of handling all the cases of what we +% might find while looking ahead is divided up between +% \cname{ti@close@quote@suck} and \cname{ti@q@ifnextcharin}. +% \cname{ti@close@quote@suck} handles the last step in the process, and +% \cname{ti@q@ifnextcharin} handles all the steps up to the last. +% +% Here is what \cname{ti@close@quote@suck} does, in English. If we find a +% comma or period, we put it inside the closing quote, and gobble the one we +% found. That is, we print out scratch |c|, then scratch |f|, then gobble a +% character. If we find something in the set given in \cs\nospacelist, do +% not leave a space after the closing mark. That is, just print out scratch +% |f|. If we find something else, we leave a space after the closing mark. +% That is, print scratch |f| and a space. +% \begin{macrocode} +\newcommand\ti@close@quote@suck {% +% \DTypeout{Starting ti@close@quote@suck}% + \@look@nosuck@false + \ti@q@ifnextcharin {.,} {% +% \DTypeout{Found a comma or period. C=[\meaning\sc@t@c] F=[\meaning\sc@t@f]}% + \sc@t@c\sc@t@f\DGobbleM % This gobbles the original punctuation. + }{% ELSE +% \DTypeout {Before second ti@qifnextcharin. C=[\meaning\sc@t@c] F=[\meaning\sc@t@f]}% + \@look@nosuck@true +% \end{macrocode} +% \begin{todoenv} +% Using \cs\nospacelist is inefficient here, since some of the cases, +%^^A for Emacs { +% namely \verb*|,.\@sptoken}|, are never going to be there and shouldn't be +% checked for, since they are passed over by \cname{ti@q@ifnextcharin} before +% the list is compared. But it would be good to have this parallelism between +% \package{abbrevs} and \package{titles}. +% \end{todoenv} +% \begin{macrocode} + \expandafter \ti@q@ifnextcharin \expandafter {\nospacelist} {% +% \DTypeout{Found a suck no-spacer. C=[\meaning\sc@t@c] F=[\meaning\sc@t@f]}% + \sc@t@f + }{% ELSE +% \DTypeout{Found a suck spacer. C=[\meaning\sc@t@c] F=[\meaning\sc@t@f]}% + \sc@t@f\space + }% + }% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Looking ahead} +% +% Now things are getting fun. +% +% \begin{macro}{\ti@q@ifnextcharin} +% \begin{macro}{\ti@q@check} +% \begin{macro}{\ti@q@ifnch} +% \begin{macro}{\ti@q@@ifnch} +% These macros are modeled after the definition of \cname{@ifnextchar} which +% skips spaces. While looking ahead for the next significant character, +% these macros skip spaces, \cs\egroup, \cs\endgroup, \cname{check@icr}, +% \cname{ti@close@double} and \cname{ti@close@single} while doing the right +% thing after each. +% +% The first argument should be a list of tokens. If the next significant +% char is in the list, then the |true| clause is executed, otherwise the +% |false| clause is executed. The next significant char is left in scratch +% |c| so it can be accessed by the clauses. +% +% The three arguments to \cname{ti@q@ifnextcharin} are saved in global +% variables because while looking ahead we must continue past the ends of +% groups. +% +%% FIX +% Not sure I need gdef for scratch |e|. +% \begin{macrocode} +\newcommand\ti@q@ifnextcharin [3] {% args: charlist true false +% \sc@toks@a{#1}% +% \DTypeout{charlist unexpanded is =[\the\sc@toks@a]}% + \gdef\sc@t@e {#1}% + \gdef\sc@t@a {#2}% + \gdef\sc@t@b {#3}% + \ti@q@check +} +% \end{macrocode} +% Having saved the arguments, we look ahead with scratch |c|. This step is not +% in the macro above so that we can jump back to \cname{ti@q@check} whenever we +% want to look ahead another character. +% \begin{macrocode} +\newcommand\ti@q@check {% + \futurelet\sc@t@c\ti@q@ifnch +} +% \end{macrocode} +% Scratch |c| contains the current char. Scratch |d| is the action to take at +% the end of this macro. We attempt to order these possibilities to make +% \cs\Wrapquotes most efficient, though it is a guess which items will be +% encountered most frequently. +% +% The actions taken for each of the possibilities are the following: +% \begin{description} +% \item[\cs\ifvmode] Assume that the \cs\Wrapquotes was the argument of a +% \cs\TextFontCommand from certain \LaTeX{} kernels. Gobble three more tokens +% expected to follow the \cs\ifvmode, execute them, and continue on to look +% ahead another character. See documentation of +% \cname{ti@q@handle@ifvmode} for more details. +% \item[\cname{check@icr}] This means the \cs\Wrapquotes was the +% argument of a \cs\TextFontCommand. Gobble the \cname{check@icr} +% and look ahead another character after we exit the +% group that the \cs\TextFontCommand has given us. +% \item[\cs\endgroup and {\normalfont\ttfamily \}}] Pass right by an \cs\endgroup or +% |}| and look ahead another char. +% \item[\cname{@sptoken} (a non-explicit space)] Handle a non-explicit space by calling +% \cname{ti@q@handle@space}, which gobbles the space and looks ahead +% another char. When the user or a macro has followed the titles with an +% \emph{explicit} space such as a tie, or the +%% \verb*|\ | +% or \cs\space macros, we do nothing and let this be caught by the +% comparison to the tokens in the argument of \cname{ti@q@ifnextcharin}. +% \item[\cname{ti@close@double@suck}, +% \cname{ti@close@single@suck}] +% \item[\cname{ti@close@double@nosuck}, and +% \cname{ti@close@single@nosuck}] We are in a nested +% \cs\Wrapquotes. Call \cname{ti@q@handle@single/double@suck/nosuck} +% as appropriate, which +% gobbles the closequotes token, adds properly-padded closing quotes to +% scratch |f|, and then goes on to look ahead another character. +% \end{description} +% The lookahead process stops when it finds something not on this list. Then +% it compares what it found to the list of characters given to +% \cname{ti@q@ifnextcharin} and executes the |true| or |false| clause as +% appropriate. +% +% First we have to handle the case of finding an \cs\ifvmode. We can't bundle +% this test in with the tests for other tokens, so it gets its own macro, +% \cname{ti@q@handle@ifvmode}, which see for details. The remaining cases are +% handled in \cname{ti@q@@ifnch}. +% \begin{macrocode} +\newcommand\ti@q@ifnch {% +% \DTypeout{The lookahead in ti@q@ifnch: [\meaning\sc@t@c]}% + \ifx\sc@t@c\ifvmode + \let\sc@t@d\ti@q@handle@ifvmode + \else + \let\sc@t@d\ti@q@@ifnch + \fi + \sc@t@d +} +\newcommand\ti@q@@ifnch {% +% \DTypeout{entering ti@q@@ifnch}% +% \expandafter\sc@toks@a\expandafter{\sc@t@c}% +% \DTypeout{ti@q@@ifnch: C expanded once is =[\the\sc@toks@a]}% + \ifx\sc@t@c\check@icr +% \DTypeout{Handling check@icr}% + \defcommand\sc@t@d [1] {% +% \DTypeout{check@icr handler: gobbling [\meaning ##1]}% + ##1\aftergroup\ti@q@check + }% + \else \ifx\sc@t@c\endgroup +% \DTypeout{Handling endgroup}% + \def\sc@t@d {\aftergroup\ti@q@check}% + \else \ifx\sc@t@c\@sptoken +% \DTypeout{Handling space}% + \let\sc@t@d\ti@q@handle@space + \else \ifx\sc@t@c\egroup +% \DTypeout{Handling egroup}% + \def\sc@t@d {\aftergroup\ti@q@check}% + \else \ifx\sc@t@c\ti@close@double@suck +% \DTypeout{Handling ti@close@double@suck}% + \let\sc@t@d\ti@q@handle@double@suck + \else \ifx\sc@t@c\ti@close@single@suck +% \DTypeout{Handling ti@close@single@suck}% + \let\sc@t@d\ti@q@handle@single@suck + \else \ifx\sc@t@c\ti@close@double@nosuck +% \DTypeout{Handling ti@close@double@nosuck}% + \let\sc@t@d\ti@q@handle@double@nosuck + \else \ifx\sc@t@c\ti@close@single@nosuck +% \DTypeout{Handling ti@close@single@nosuck}% + \let\sc@t@d\ti@q@handle@single@nosuck + \else +% \end{macrocode} +% We've handled all the lookahead cases, so now we are left with the simple +% comparison of the next char with the charlist. +% \begin{macrocode} + \@tempswafalse + \expandafter \@tfor + \expandafter \sc@t@g + \expandafter :% + \expandafter =% + \sc@t@e + \do {% + \expandafter\ifx\sc@t@g\sc@t@c +% \DTypeout{We have a match of [\meaning\sc@t@c] +% with [\expandafter\meaning\sc@t@g]}% + \@tempswatrue + \@break@tfor + \else +% \DTypeout{We have NO match between [\meaning\sc@t@c] +% with [\meaning\sc@t@g]}% + \fi + }% + \if@tempswa +% \DTypeout{Choosing true clause [\meaning\sc@t@a]}% + \let\sc@t@d\sc@t@a % the ``true'' clause + \else +% \DTypeout{Choosing false clause [\meaning\sc@t@b]}% + \let\sc@t@d\sc@t@b % the ``false'' clause + \fi + \fi \fi \fi \fi \fi \fi \fi \fi +% \DTypeout{About to fall out of ti@q@@ifnch and do this [\meaning\sc@t@d]}% + \sc@t@d +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ti@q@handle@ifvmode} +% This is in its own macro for clarity and to avoid problems with skipping +% over clauses. +% +% \cname{ti@q@ifnch} has to take two different kinds of \LaTeX{} kernel into +% account. The 1996/12/01 and 1997/06/01 kernels used a different definition +% of \cs\DeclareTextFontCommand: +% \begin{macrocode} +%\def \DeclareTextFontCommand #1#2{% +% \DeclareRobustCommand#1[1] {% +% \ifmmode +% \nfss@text{#2##1}% +% \else +% \leavevmode +% {\text@command{##1}% +% #2\check@icl ##1\ifvmode\else\check@icr\fi +% \expandafter}% +% \fi +% }% +%} +% \end{macrocode} +% All other kernels leave out the check for vertical mode (kernels from +% 1997/12/01 include it when necessary inside \cname{check@icr}). The macro +% \cname{ti@q@ifnch}, which will be called immediately before this point of +% difference, handles both cases by looking for both \cs\ifvmode and +% \cname{check@icr}. For the history, see \LaTeX{} bug report 2646. +% +% The check for \cs\ifvmode must not be part of a nested conditional. \TeX{} +% can't match \cs\if{}s with \cs\fi{}s properly when you nest tests for +% \cs\if-type tokens. See p.~211 of the \TeX{}book. +% +% When we encounter an \cs\ifvmode, we must assume we are inside a +% TextFontCommand declared by one of the two kernel versions mentioned above. +% If not, we are in an unknown situation and we will bomb. Since the error +% message in this case won't be helpful, we warn the user in the log file. +% We use scratch |d| to gobble both the \cs\ifvmode and what we expect will +% follow the \cs\ifvmode, namely \code{\else\check@icr\fi}. After swallowing +% those, we reissue those same commands and then proceed with our lookahead. +% We want to issue those commands, which conditionally introduce an italic +% correction, before looking further ahead. +% \begin{macrocode} +\newcommand\ti@q@handle@ifvmode {% +% \DTypeout{Handling ifvmode}% + \FrankenInfo{titles} + {Handling an \string\ifvmode\space following a title.\MessageBreak + If you now get an error that \string\sc@t@d\space does not\MessageBreak + match its definition, this \string\ifvmode\space is\MessageBreak + unexpected}% + \DefName{sc@t@d} {\ifvmode\else\check@icr\fi} {% + \ifvmode + \else + \check@icr + \fi + \aftergroup\ti@q@check + }% + \sc@t@d +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ti@q@handle@space} +% Handle the case of a following space: gobble the space and call +% \cname{ti@q@check}. +% +% This little bit of trickery sneaks a space in as the \cs\def template, +% thereby causing a space following \cname{ti@q@handle@space} to get gobbled. +% We use the control character \cname{:} and restore its value. +% \begin{macrocode} +\ReserveCS\ti@q@handle@space +\let\sc@t@a\: +\def\:{\ti@q@handle@space} \expandafter\def\: {\ti@q@check} +\let\:\sc@t@a +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ti@q@handle@single@suck} +% \begin{macro}{\ti@q@handle@double@suck} +% Handle the single and double sucking cases: gobble the closequotes token +% with a \cs\def template, add some stuff to scratch |f| and call +% \cname{ti@q@check}. These are put in their own macros only to avoid +% clutter above. +% \begin{macrocode} +\newcommand*\ti@q@handle@double@suck [1] {% +% \DTypeout{handle double suck: gobbling [\meaning#1]}% +% \DTypeout{scratch f before: [\meaning\sc@t@f]}% + \g@addto@macro\sc@t@f {\,\textquotedblright}% +% \DTypeout{scratch f after: [\meaning\sc@t@f]}% + \ti@q@check +} +\newcommand*\ti@q@handle@single@suck [1] {% +% \DTypeout{handle single suck: gobbling [\meaning#1]}% +% \DTypeout{scratch f before: [\meaning\sc@t@f]}% + \g@addto@macro\sc@t@f {\,\textquoteright}% +% \DTypeout{scratch f after: [\meaning\sc@t@f]}% + \ti@q@check +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ti@q@handle@single@nosuck} +% \begin{macro}{\ti@q@handle@double@nosuck} +% Handle the single and double nosucking cases. Add inter-quote space to +% scratch |f| and exit \cname{ti@q@@ifnch} with |true| or |false| depending +% on whether we were looking for it. We had to do it this way instead of the +% normal \cname{if} test above at the end of \cname{ti@q@@ifnch} because +% \cname{ti@close@double@nosuck} is more than one character long. +% \begin{macrocode} +\newcommand*\ti@q@handle@double@nosuck [1] {% +% \DTypeout{handle double nosuck: gobbling [\meaning#1]}% + \if@look@nosuck@ +% \DTypeout{And we're looking for \string\ti@close@double@nosuck.}% + \g@addto@macro\sc@t@f {\,\textquotedblright}% +% \DTypeout{After adding padding, F=[\meaning\sc@t@f]}% + \let\sc@t@d\sc@t@a % the ``true'' clause of ti@q@ifnextcharin + \else +% \DTypeout{But we're not looking for \string\ti@close@double@nosuck.}% +% \DTypeout{F is unchanged, F=[\meaning\sc@t@f]}% + \let\sc@t@d\sc@t@b % the ``false'' clause of ti@q@ifnextcharin + \fi + \ti@q@check +} +\newcommand*\ti@q@handle@single@nosuck [1] {% +% \DTypeout{handle single nosuck: gobbling [\meaning#1]}% + \if@look@nosuck@ +% \DTypeout{And we're looking for \string\ti@close@single@nosuck.}% + \g@addto@macro\sc@t@f {\,\textquoteright}% +% \DTypeout{After adding padding, F=[\meaning\sc@t@f]}% + \let\sc@t@d\sc@t@a % the ``true'' clause of ti@q@ifnextcharin + \else +% \DTypeout{But we're not looking for \string\ti@close@single@nosuck.}% +% \DTypeout{F is unchanged, F=[\meaning\sc@t@f]}% + \let\sc@t@d\sc@t@b % the ``false'' clause of ti@q@ifnextcharin + \fi + \ti@q@check +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Words and phrases} +% +% \begin{macro}{\word} +% \begin{macro}{\foreign} +% \begin{macro}{\foreignword} +% \begin{macro}{\phrase} +% \begin{macro}{\term} +% \begin{macro}{\defn} +% \mbox{} +% \begin{macrocode} +\newlet\word\textitswitch +\newlet\foreign\textitswitch +% \end{macrocode} +% \todo{\cs\phrase is the result of expansion here: what effect will this have +% on its proper nesting, and is this something to worry about?} +% \begin{macrocode} +\newcommand\foreignword [1] {% + \phrase{\word{#1}}% +} +% \end{macrocode} +% The \cs\@ cancels the effect on spacing of any final punctuation in the +% argument. +% \begin{macrocode} +% \newlet\phrase\WrapquotesSK -- whoops, doesn't work as intended, +% \phrase{foo}s puts a space before the following `s' + +% old definition: +\newcommand\phrase [1] {% + \textquoteleft #1\textquoteright\@% +} +\newlet\term\textitswitch +\newlet\defn\textslswitch +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Titles} +% +% \begin{macro}{\book} +% \begin{macro}{\journal} +% \begin{macro}{\music} +% \begin{macro}{\article} +% \begin{macro}{\storytitle} +% \begin{macro}{\poemtitle} +% \begin{macro}{\play} +% \begin{macro}{\craft} +% \begin{macro}{\species} +% \mbox{} +% \begin{macrocode} +\newlet\book\textitswitch +\newlet\journal\textitswitch +\newlet\music\textitswitch +\newlet\article\Wrapquotes +\newlet\storytitle\Wrapquotes +\newlet\poemtitle\Wrapquotes +\newlet\play\textitswitch % \manualref{7.145} +\newlet\craft\textitswitch +\newlet\species\textitswitch +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \part{Configuration} +% +% User alterations and additions and package testing are in a configuration +% file. +% \begin{macrocode} +\InputIfFileExists{titles.cfg}{}{} +% \end{macrocode} +% +% The contents of the \emph{distributed} configuration file are below. +% +% \InputIfFileExists{titles.cfg}{}{} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/titles.tex b/macros/latex/contrib/frankenstein/titles.tex new file mode 100644 index 0000000000..2039ca27dc --- /dev/null +++ b/macros/latex/contrib/frankenstein/titles.tex @@ -0,0 +1,67 @@ +% titles.tex -- documentation for the titles LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{titles.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{titles} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{titles.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/unsupported/README-unsupported b/macros/latex/contrib/frankenstein/unsupported/README-unsupported new file mode 100644 index 0000000000..aadf532c27 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/README-unsupported @@ -0,0 +1,150 @@ + + SOME UNSUPPORTED PARTS OF: + + FRANKENSTEIN + + A Collection of Macros for LaTeX and BibTeX + +------------------------------------------------------------------------ + CONTENTS + + NOTES + general + non-support + PACKAGE DESCRIPTIONS + includex + bits + drama + DISTRIBUTION CONDITIONS + TERMINOLOGY + AUTHOR + +------------------------------------------------------------------------ + NOTES + + general + + Three LaTeX packages are part of the Frankenstein bundle but are + unsupported. They are distributed on CTAN in a subdirectory of the + directory containing the supported Frankenstein filesets (i.e., + CTAN:/macros/latex/contrib/supported/frankenstein/unsupported/). In + a TeX installation, however, supported and unsupported macros, + sources, and documentation should be placed together, (e.g., in + TDS:/texmf/{doc,source,tex}/latex/frankenstein). + + If you wish to use the unsupported packages, download the entire + "frankenstein" directory from CTAN (which will include the + "unsupported" subdirectory). + + To use the Makefile on the unsupported filesets, you must do two + things. + + 1. Copy all the files in the "unsupported" subdirectory into its + parent directory ("frankenstein"). + + 2. Set the variable USE_UNSUP to something nonempty either by: + a. uncommenting the line in the file Makefile, or + b. setting it in your environment, or + c. set the variable on the Make command line, e.g., "make + USE_UNSUP=t all". + + Descriptions of the four unsupported packages are below. + Further important information about the Frankenstein bundle may be + found in the file README. + + Installation instructions are in the file INSTALL. + The bits and drama packages depend on the non-Frankenstein package + "relsize.sty". Please see INSTALL for further information. + + Both the README and INSTALL files are located in the parent + directory of this file (on CTAN) or in the same directory as this + file (in a TeX installation). + + + non-support + + The package filesets in this directory are UNSUPPORTED. They are + furthermore possibly INCOMPLETE and NOT fully DOCUMENTED. + + I hope one day to complete these packages, document them, and + support them. I will gladly listen to feedback on them, but I do + not take the same level of responsibility for them as for the + packages I call "supported". In the meantime, they are made public + under the conditions stated below so that I can refer interested + individuals to them. + + These packages are indeed valuable in certain ways, such as + sometimes working as advertised, but of course I offer no + guarantees. + + +------------------------------------------------------------------------ + PACKAGE DESCRIPTIONS + +------------------------------------------------------------------------ + bits + (Frankenstein's guts) + + Bits provides a programmer's interface for a new idea called a + "bit", which is like an environment but has a title, author, and + other attributes usually only associated with the "document" + environment. + +------------------------------------------------------------------------ + drama + production-format stage script + (Frankenstein's heart) + + Drama defines macros for typesetting a basic production-style stage + script. + +------------------------------------------------------------------------ + includex + extra ways to include files + + Includex allows you to include just the contents of one source file + into another, ignoring the text outside the \begin{document} + ... \end{document} in the included file. See also the supported + "newclude" package, which is intended to supersede includex, though + until I ensure that it is a satisfactory replacement I will keep + includex around. + +------------------------------------------------------------------------ + DISTRIBUTION CONDITIONS + + All Frankenstein files are copyrighted by Matthew Swift and released + under the conditions of the GNU General Public License contained in + the file COPYING, which should be in the parent directory or the + same directory as this file. + + The unsupported filesets in the same directory as this file ought to + be distributed WITH the supported ones. They are useless without + the supported ones. + + I am willing to specially license this code; please simply contact + me with your proposal. + +------------------------------------------------------------------------ + TERMINOLOGY + + fileset: A group of files related to a single LaTeX package, LaTeX + class, or BibTeX bibliography style and any accompanying + option or configuration files. The files in a package or + class fileset have the same root name but different + filename extensions. In bibstyle filesets, some root names + differ by a "-bst" suffix. + + CTAN: Comprehensive TeX Archive Network: a system of TeX-related + file archives available via FTP (see + ftp://ctan.tug.org/tex-archive/CTAN.sites) and often + reproduced on CDROMs. + + TDS: TeX Directory Structure: a recommended directory structure + for TeX installations. See + ftp://ctan.tug.org/tex-archive/tds. + +------------------------------------------------------------------------ + AUTHOR + + Matt Swift + diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.cfg b/macros/latex/contrib/frankenstein/unsupported/bits.cfg new file mode 100644 index 0000000000..c25a476ff1 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/bits.cfg @@ -0,0 +1,20 @@ +% \iffalse +%% +% Even if you don't want any code in this file, leave the empty file, or else +% loading the \package{bits} package will consume extra time as it searches +% for this file. +%% +% \fi +% \begin{macrocode} +\def\fileinfo{Bits package configuration} +\def\fileversion{v1} +\def\filedate{1996/01/24} +\def\docdate{1996/01/24} +% \end{macrocode} +% +% \AddToCheckSum{10} +% +% \begin{macrocode} +\ProvidesFile{bits.cfg} +\InputIfFileExists{monster.cfg}{}{} +% \end{macrocode} diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.ins b/macros/latex/contrib/frankenstein/unsupported/bits.ins new file mode 100644 index 0000000000..f61f9054c5 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/bits.ins @@ -0,0 +1,64 @@ +% bits.ins -- docstrip driver for the bits LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + bits.sty or bits.stq. This + LaTeX package will work ONLY if it is called bits.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + bits.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{bits.stq}{\from{bits.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file bits.stq is a faster replacement for the file} +\Msg{* bits.sty.} +\Msg{*} +\Msg{* bits.stq is stripped of comments (documentation) and must be} +\Msg{* renamed bits.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.pdf b/macros/latex/contrib/frankenstein/unsupported/bits.pdf new file mode 100644 index 0000000000..bd635a1d87 Binary files /dev/null and b/macros/latex/contrib/frankenstein/unsupported/bits.pdf differ diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.sty b/macros/latex/contrib/frankenstein/unsupported/bits.sty new file mode 100644 index 0000000000..630fa00409 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/bits.sty @@ -0,0 +1,1070 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% bits LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, bits.tex +% and bits.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{602} +% +% \newcommand\scheme [2] {\ensuremath{\frac{#1}{#2}}} +% +%^^A** abstract +% \begin{abstract} +% Bits provides a programmer's interface for a new idea called a +% \term{bit}, which is like an environment but has a title, author, and +% other attributes usually only associated with the \env{document} +% environment. +% +% This package is useful but may have problems and is unsupported. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% This documentation is spotty, but should be accurate. Please feel free to +% write me if you can't figure something out. +% +% \section{Basic concepts and terminology} +% \subsection{Users' interface} +% +% A \term{bit} is the smallest part of a document treated as an independent +% unit. Each \term{bit} has an explicit type called a \term{bitstyle}. +% (Examples: generic, story, poem, recipe, letter.) A bit's bitstyle +% determines the markup that is legal within the bit. (Additional declarations +% can be made on a per-bit basis, also; see below.) A bit's formatting is +% determined by both its bitstyle and the copystyle (see below) of the +% document. New bitstyles can be added. +% +% A \term{copystyle} is one of an explicit list of ways to present a collection +% of bits together in a single document. It might well be called a +% ``documentstyle'' and be implemented as a \LaTeX{} documentclass, but if they +% are kept separate, copystyles and documentclasses can coexist with each +% other, and this leads to a greater flexibility when dealing with existing +% documents. The relationship between copystyles and documentclasses is +% discussed further below. New copystyles can be added. +% +% \subsection{Programmers' interface} +% +% The formatting of a bit is considered to involve a fixed number of +% \term{tasks}. Examples of tasks performed near the beginning of formatting a +% bit are inserting some space after the preceding bit, and formatting the +% title of the current bit. Each task must be assigned a \term{procedure} that +% accomplishes that task. (Notice that the null procedure might be a suitable +% procedure for some tasks in some situations.) We call a mapping of some +% tasks to suitable procedures a \term{profile}. We call a profile that maps +% the \emph{complete} set of tasks a \term{scheme}. You need a scheme to +% format a bit, and the scheme to use for a given bit is determined by its +% bitstyle and copystyle. +% +% Now we are in a position to try to visualize the variable space established +% by the \term{bits} package. It's not simple, and if you think of a better +% way, please let me know. +% +% As just explained, to format a bit, you need a scheme, which is a series of +% procedures suitable for a series of certain tasks. To be concrete, let's +% assume there are 4 tasks. Identify each task with a general color. In our +% example, let's use red, blue, green, and yellow. Think of a scheme as a +% stack of colored blocks, each representing a procedure. The top block, +% corresponding to the first task, is red, the second block is blue, the third +% green, and the bottom block, corresponding to the final task, is yellow. +% +% Suppose I create a new scheme, the same as the original except for a slight +% change in the first task. This would be represented by changing the color of +% the red, or top, block to a different shade of red. The precise color of a +% block represents the specific procedure. A general color is associated with +% a task because it is expected that no procedure suitable for one task is +% going to be suitable for another task. The redness of a block represents its +% suitability for the the first task. +% +% (If we wanted to be exact, we would observe that some procedures, such as the +% null procedure, might be suitable for more than one task. OK, let such +% procedures be a shade of grey, with the null task, let us say, being white. +% Then the colored block at each task's position will have either the +% associated color of the task or a shade of grey.) +% +% I have drawn in your mind the picture of two stacks of 4 colored blocks, +% differing only in the shade of the top (red) block. Let's give them the +% names Jack and Jill. Let Jack and Jill represent two bitstyles. You can +% imagine as many bitstyles as you like---Jack, Jill, Hank, Wendy, and +% Beauregard; all are stacks of four colored blocks arranged next to each other +% in a line, a red block on top, a blue block, a green block, and a yellow +% block. Some of the stacks might even have identical blocks. This would mean +% that two bitstyles have the same scheme. You refer to bitstyles by their +% name, so in the future, you could change one bitstyle and make it different +% from the other. In fact, when you create a new bitstyle, it is initially +% simply a copy of an existing bitstyle. Then you can modify the new one if +% you want to. +% +% bitclass? bittype? bitstyle best describes a scheme. bitscheme? +% +% You've almost got the whole picture now. We need to consider copystyles. +% Suppose Jack, Jill, Hank, Wendy, and little Beauregard are all siblings. +% They have the same last name, Grimm. Grimm is the name of a copystyle. +% Across town, or in a parallel universe, there is another set of siblings +% Jack, Jill, etc.\ with a different last name, Beedle. They, too, are +% represented by a line of stacks of colored blocks. Line up the Beedle +% siblings behind the Grimm siblings, and you now have a pile of colored blocks +% 4 high (4 tasks), 5 wide (the 5 bitstyles Jack, Jill, etc.), and 2 deep (the +% 2 copystyles Grimm and Beedle). +% +% That's it. Given a bitstyle (e.g., Hank) and a copystyle (e.g., Beedle), you +% have a particular scheme for formatting a bit. +% +% As you may notice, there is so far no justification for the metaphor of +% family. Nothing I've said yet about tasks and procedures corresponds to the +% metaphor's suggestion that Hank Beedle is probably more similar to Wendy +% Beedle than he is to Hank Grimm; or that when putting together the Beedles in +% a family photograph, there is a certain pleasing aesthetic unity that would +% be lacking if any of those odd-looking Grimms were to stray into the picture. +% In fact, technically, each scheme can be completely different from every +% other scheme, Hank Beedle being as different from Wendy Beedle as he is from +% Hank Grimm. +% +% These metaphors are justified when you consider the way in which new +% copystyles and bistyles are added, and the expected purposes for bitstyles +% and copystyles. +% +% OR: family of Poems, family of recipes. First name is the copystyle. Then a +% document would consist of Hank Poem, Hank Recipe, etc. = Standard Poem, +% Standard Recipe; Fancy Poem, Fancy Recipe. +% +% Or, each family has one Poem, one Recipe, etc. So a document puts together +% members of a family, Poem, Recipe, etc. +% +% \section{Usage} +% +% Bits look like \LaTeX{} environments that take two arguments. (Surprise +% surprise that's exactly what they are.) Here's an example of a bit with +% hypothetical bitstyle ``poem'': +% +% \begin{codeexample} +% \begin{poem}{Butterflies}{\subtitle{An Address to My Stomach}} +% O jittery one, quavering tub, \\ +% Rumble not your complaints so violently! \\ +% Remember your jollitude just last Sunday, \\ +% The pound of bovine ambrosia \\ +% I filled you to the gills with \\ +% To silence you, on this, my wedding day. +% \end{poem} +% \end{codeexample} +% +% \section{Extension and customization} +% \subsection{Customizing an instance of a bit} +% +% Fat little Hank Beedle might come with a note tied around his neck on a piece +% of yarn, with special instructions on his care and feeding from his mother. +% ``Peanuts will give him hives,'' it might say. And ``A quart of sour cream +% is always welcome.'' +% +% \subsection{Adding bitstyles, copystyles, and tasks} +% +% When you add a new bitstyle $B'$, you create a new scheme for each of the +% existing copystyles. You name an existing bitstyle $B$ and zero or more +% profiles. For each existing copystyle $C$, the profiles will be composed +% with the \scheme{B}{C} scheme to obtain the new scheme \scheme{B'}{C}. +% (Notice that if any of the profiles you name are schemes, the choice of $B$ +% is irrelevant, and that if you name no profiles, $B' = B$.) +% +% The procedure is identical when you add a new copystyle. Just swap +% references to copystyles and bibstyles in the last paragraph. +% +% You can add to list of tasks. When you do this, you must assign a default +% procedure for it (part of the \cat{Z} scheme, the universal default). All +% existing bitstyles and copystyles will inherit the same procedure for this +% task. This makes sense because they've presumably all done the task the same +% way before, if they've done it at all. You can promulgate changes with +% \cs\Promulgate etc. +% +% \section{Notes} +% +% FIX; bit type determines its markup; bitstyle is a mapping of tasks to +% procedures. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{basic bits (Frankenstein's guts)} +\def\DoXPackageS {} +\def\fileversion{v1.2} +\def\filedate{2001/08/31} +\def\docdate{2001/08/31} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{bits}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Preliminaries} +% +% \subsection{Requirements} +% +% \begin{macrocode} +\RequirePackage{blkcntrl,letterhead,moredefs,relsize} +% \end{macrocode} +% +% \subsection{Option processing} +% +% \begin{macrocode} +\DeclareOption{poetica} {% + \RequirePackage{poetica} + \newcommand\FullTitlePoetica {% + \begin{Poetica} + \fontshape{t}\selectfont + \BitTitle\\% + \ifx\BitSubtitle\ShortEmpty \else + \BitSubtitle\\% + \fi + \end{Poetica} + } + \AtBeginDocument {% + \let\FullTitle\FullTitlePoetica + } +} +% \end{macrocode} +% FIX: hmm, I think I always want user options so that I can have two different +% packages require a package, and they don't have to match up on their options. +% What about options that can only be used in preamble, that would be the right +% thing for many cases I think. Aak, \cname{ends} can't be defined without +% special handling? Hmm, seems like it can. +% \begin{macrocode} +\DeclareBooleanUserOptions{ends}{noends} +\DeclareBooleanUserOptions{signed}{anonymous} + +\DeclareBooleanOptions{titlepage}{notitlepage} + +\ExecuteOptions{ends,notitlepage,signed} +\ProcessOptions +% \end{macrocode} +% +% \section{Making new copy and bit styles} +% +% \subsection{General stuff} +% +% \begin{macro}{\bt@a} +% \begin{macro}{\bt@b} +% \begin{macro}{\bt@c} +% \begin{macro}{\bt@d} +% \begin{macro}{\bt@e} +% \mbox{} +% \begin{macrocode} +\ReserveCS\bt@a +\ReserveCS\bt@b +\ReserveCS\bt@c +\ReserveCS\bt@d +\ReserveCS\bt@e +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bt@tasks} +% \begin{macro}{\bt@bitstyle@list} +% \begin{macro}{\bt@copystyle@list} +% Comma-separated lists of valid bitstyles, copystyles, and tasks. We start +% them off non-null to bootstrap the system of adding new ones, which adds +% them preceded by a comma. +% \begin{macrocode} +\newcommand\bt@tasks {% + environment,end@bit,begin@bit,interbits,firstbit% + ,settitle,setfirsttitle% +} +\newcommand\bt@bitstyle@list {% + generic% +} +\newcommand\bt@copystyle@list {% + standard% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\if@bt@trymoreschemes@} +% \begin{macro}{\@bt@trymoreschemes@true} +% \begin{macro}{\@bt@trymoreschemes@false} +% \begin{macro}{\bt@list@car} +% \begin{macro}{\bt@list@cdr} +% \cname{bt@list@car} and \cname{bt@list@cdr} expand to the car and cdr of a +% comma-separated list, respectively. +% \begin{macrocode} +\provideboolean{@bt@trymoreschemes@} + +\NewName{bt@list@car}{#1,#2\@nil} {% + #1% +} +\NewName{bt@list@cdr}{#1,#2\@nil} {% + #2% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NewCopystyle} +% \begin{macro}{\NewBitstyle} +% \begin{macro}{\bt@assign@task} +% To define a new style, you specify a base style and a list of profiles. +% Each of these can be empty. If no base style is specified, the root style +% is used (i.e., standard copystyle or generic bitstyle). See discussion +% above. +% \begin{macrocode} +\newcommand\NewCopystyle [2][Z] {% args: [profile-list] new-copystyle + \addto@macro\bt@copystyle@list{,#2}% + \@for\bt@a:=\bt@bitstyle@list \do {% + \@for\bt@b:=\bt@tasks \do {% + \eExpand\bt@b\In {% + \expandafter\bt@assign@task + \expandafter{\bt@a}{#2}{##1}{#1}% + }% + }% + }% +} +\newcommand\NewBitstyle [2][Z] {% args: [scheme-list] new-bitstyle + \addto@macro\bt@bitstyle@list{,#2}% + \@for\bt@a:=\bt@copystyle@list \do {% + \@for\bt@b:=\bt@tasks \do {% + \eExpand\bt@a\In {% + \eExpand\bt@b\In {% +% \eExpandNest\bt@b\In {% FIX? + \bt@assign@task{#2}{##1}{####1}{#1}% + }% + }% + }% + }% +} +\newcommand\bt@assign@task [4] {% args: bitstyle copystyle + % task scheme-list + \@bt@trymoreschemes@true + \edef\bt@d{#4}% scheme-list that diminishes; edef not necessary + \@whilesw\if@bt@trymoreschemes@\fi {% +% \end{macrocode} +% There's at least one element to start; and the last scheme (\cat{Z}) is always +% defined. +% \begin{macrocode} + \edef\bt@c{% + \bt@list@car\bt@d,\@nil + } + \@ifundefined{bt@make@#3@\bt@c} {% + \edef\bt@d{\bt@list@cdr\bt@d,\@nil}% + }{% ELSE + \@nameuse{bt@make@#3@\bt@c}{#1}{#2}% + \@bt@trymoreschemes@false + }% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PromulgateTaskAcrossCopystyles} +% \begin{macro}{\PromulgateTaskAcrossBitstyles} +% \mbox{} +% \begin{macrocode} +\newcommand\PromulgateTaskAcrossCopystyles [3] {% args: task scheme bitstyle + \@for\bt@a:=\bt@copystyle@list \do {% + \@nameuse{bt@make@#1@#2}{#3}{\bt@a}% + }% +} +\newcommand\PromulgateTaskAcrossBitstyles [3] {% args: task scheme copystyle + \@for\bt@a:=\bt@bitstyle@list \do {% + \@nameuse{bt@make@#1@#2}{\bt@a}{#3}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bt@begin@bit@common} +% \begin{macro}{\BitStyle} +% \begin{macro}{\PreBitAll} +% \cname{bt@begin@bit@common} should be called early in the sequence of +% beginning a bit. +% \begin{macrocode} +\providesavebox\sc@box@a +\newcommand\bt@begin@bit@common [2] {% + \title{#1}% +% \end{macrocode} +% We want to clear all optional attributes here, such as subtitle. FIX: should +% be a list of attributes and perhaps even abstract clearing functions on them, etc. +% \begin{macrocode} + \subtitle{}% +% \end{macrocode} +% Execute stuff: FIXME: nice hooks can be set here to execute things later +% We introduce the \par so that extra spaces in the argument are not going to +% mean anything. It would be complicated but possible by means perhaps of +% \cs\nullfont to avoid starting a paragraph here. Arg, the kernel is so +% opaque on how it handles ignoring spaces and what it's doing with everypar. +% \begin{macrocode} + \par #2% + \refstepcounter{bit}% + \ifnum\value{bit} = \@ne + \@nameuse{bt@firstbit@\CopyStyle}% + \else + \@nameuse{bt@interbits@\CopyStyle}% + \fi +} +\ReserveCS\BitStyle +\ReserveCS\PreBitAll +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Schemes} +% +% \subsubsection{The \cat{Z} scheme} +% +% \begin{macro}{\FullTitle} +% The \cat{Z} scheme is always the last resort deafult, and it corresponds to +% the standard copystyle and the generic bitstyle. +% +% FIXME: whenever we have a dummy we have to use DefName or else we error +% FIXME: Aak, when Promulgating we need defnames for everyting! +% \begin{macrocode} +\newcommand\bt@make@environment@Z [2] {% args: bitstyle dummy + \DefName{end#1}{}{}% + \DefName{#1}{##1##2} {% + \DefName{end#1}{} {% + \@nameuse{bt@end@bit@#1@\CopyStyle}{##1}% + }% + \@nameuse{bt@begin@bit@#1@\CopyStyle}{##1}{##2}% + }% +} +\newcommand\bt@make@interbits@Z [2] {% args: dummy copystyle + \DefName{bt@interbits@#2}{} {% + \relax + \par\pagebreak[2]\bigskip\bigskip + \@nameuse{bt@settitle@\BitStyle @#2}% + }% +} +\newcommand\bt@make@firstbit@Z [2] {% args: dummy copystyle + \DefName{bt@firstbit@#2}{} {% + \relax + \par\pagebreak[2]% + \thispagestyle{empty}% + \@nameuse{bt@setfirsttitle@\BitStyle @#2}% + }% +} +\newcommand\bt@make@begin@bit@Z [2] {% args: bitstyle copystyle + \DefName{PreBit#1}{}{}% + \DefName{bt@begin@bit@#1@#2}{##1##2} {% + \def\BitStyle{#1}% + \bt@begin@bit@common{##1}{##2}% + \PreBitAll + \@nameuse{PreBit#1}% + }% +} +\newcommand\bt@make@end@bit@Z [2] {% args: bitstyle copystyle + \DefName{bt@end@bit@#1@#2}{##1} {% + \TheEnd + }% +} +\newcommand\bt@make@settitle@Z [2] {% args: bitstyle copystyle + \DefName{bt@settitle@#1@#2}{} {% + \relax + \begin{center}\FullTitle\end{center} + }% +} +\newcommand\bt@make@setfirsttitle@Z [2] {% args: bitstyle copystyle + \DefName{bt@setfirsttitle@#1@#2}{} {% + \relax + \begin{center}\FullTitle\end{center} + \DTypeout{FIXME setfirsttitle in Z scheme}% + }% +} +% \end{macrocode} +% When there is no subtitle, it sometimes seems better for the title to be set +% one size larger than the copy; but when you have a subtitle, you need the +% title two sizes larger so that the subtitle can be an intermediate size. +% With CM fonts, because their boldface is extended, a bold subtitle at the +% same size as the copy looks good, and larger is too larger. So this is a +% tricky issue. A basic kludge that would work for me, given the font families +% I have an use, would be to check for CM fonts here, or on the other hand +% specifically for an extended boldface, or for Dante/Bulmer, or set a flag in +% my dante.sty or bulmer.sty. +% \begin{macrocode} +\newcommand\FullTitle {% + \relsize{2}\bfseries +% \relsize{1}\bfseries + \BitTitle\\% + \ifx\BitSubtitle\ShortEmpty + \else + \csname sbseries\endcsname % this way it's harmless if undefined + \relsize{-1}\BitSubtitle\\% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{The \cat{P} scheme} +% +% \begin{macro}{\bt@make@setfirsttitle@P} +% \begin{macro}{\bt@make@settitle@P} +% \begin{macro}{\bt@make@end@bit@P} +% \begin{macro}{\bt@make@begin@bit@P} +% The \cat{P} scheme was created for the poem bitstyle. +% \begin{macrocode} +\newcommand\bt@make@begin@bit@P [2] {% args: bitstyle copystyle + \DefName{bt@begin@bit@#1@#2}{##1##2} {% + \def\BitStyle{#1}% + \bt@begin@bit@common{##1}{##2}% + \PreBitAll + \verse % FIX: why does the PreBitAll hook come before \verse and the + % BitHook come after? Why doesn't the PreBitAll come in + % @common@ -- well, so that a bit can put stuff before the hooks. + \@nameuse{PreBit#1}% + }% +} +\newcommand\bt@make@end@bit@P [2] {% args: bitstyle copystyle + \DefName{bt@end@bit@#1@#2}{##1} {% + \relax + \endverse + \TheEnd + }% +} +\newcommand\bt@make@settitle@P [2] {% args: bitstyle copystyle + \DefName{bt@settitle@#1@#2}{} {% + \relax + \begin{verse}\FullTitle\end{verse} + }% +} +\newcommand\bt@make@setfirsttitle@P [2] {% args: bitstyle copystyle + \DefName{bt@setfirsttitle@#1@#2}{} {% + \relax + \begin{verse}\FullTitle\end{verse} + \DTypeout{this is setfirsttitle in P scheme}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{The \cat{R} scheme} +% For the prose bitstyle. +% \begin{macrocode} +\newcommand\bt@make@settitle@R [2] {% + \DefName{bt@settitle@#1@#2}{} {% + \relax + \ifx\BitTitle\ShortEmpty\else + \noindent + \begingroup + \relsize{1}% + \bfseries + \BitTitle + \endgroup + \par\smallskip + \fi + }% +} +% \end{macrocode} +% +% \subsubsection{The \cat{T} scheme} FIX: for what? +% +% \section{The standard copystyle and generic bitstyle} +% +% \begin{macrocode} +\@for\bt@e:=\bt@tasks \do {% + \PromulgateTaskAcrossBitstyles{\bt@e}{Z}{standard} +} +% \end{macrocode} +% +% \section{Bit Styles} +% +% \subsection{Story} +% This is the same as generic. +% \begin{macrocode} +\NewBitstyle{generic} +\NewBitstyle{story} +% \end{macrocode} +% +% \subsection{Poem} +% +% \begin{macrocode} +\NewBitstyle{poem} +\PromulgateTaskAcrossCopystyles{begin@bit}{P}{poem} +\PromulgateTaskAcrossCopystyles{end@bit}{P}{poem} +\PromulgateTaskAcrossCopystyles{settitle}{P}{poem} +\PromulgateTaskAcrossCopystyles{setfirsttitle}{P}{poem} +% \end{macrocode} +% +% \subsection{Prose} +% +% \begin{macrocode} +\NewBitstyle{prose} +\PromulgateTaskAcrossCopystyles{settitle}{R}{prose} +% \end{macrocode} +% +% \section{Copy Styles} +% +% \begin{macrocode} +\NewCopystyle{titlepage} + +\newcommand\bt@make@setfirsttitle@T [2] {% args: bitstyle copystyle + \DefName{bt@setfirsttitle@#1@#2}{} {% + \thispagestyle{empty}% + \vspace*{\fill}% + \begin{center} + {\relsize{5}\BitTitle \\}% + \ifx\BitSubtitle\ShortEmpty\else + {\relsize{3}\BitSubtitle \\}% + \fi + \end{center} + \vfill +% \CoverNotes +% \vfill + \par + \begingroup + \sffamily + \hfill + \begin{tabular}{r@{\hspace{\@ne em}}r} + Copy of:&\todayabbrev \\% + Version of:&\Lastchange \\% + Date:&\Date \\% + \end{tabular} + \par\bigskip\bigskip + \begin{raggedleft} + \def\and{\\}% + \larger\scshape\Author +% \end{macrocode} +% A final |\par| is needed to close the paragraph in raggedleft mode. +% \begin{macrocode} + \par + \end{raggedleft} + \endgroup + \newpage + \setcounter{page}{\@ne}% + }% +} +\PromulgateTaskAcrossBitstyles{setfirsttitle}{T}{titlepage} +% \end{macrocode} +% +% \section{Bit counters and interbit skips} +% +% \begin{macro}{\c@bit} +% \begin{macro}{\c@bitbit} +% \begin{macro}{\c@bitbitbit} +% \mbox{} +% \begin{macrocode} +\providecounter{bit} +\providecounter{bitbit}[bit] +\providecounter{bitbitbit}[bitbit] +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bt@bitskip} +% \begin{macro}{\InterBitBreak} +% \begin{macro}{\InterBitBitBreak} +% \begin{macro}{\InterBitBitBitBreak} +% \cs\medbreak is penalty -100; \cs\smallbreak is 50. FIXME: what's going on +% here? +% \begin{macrocode} +\newcommand\bt@bitskip[1] {% + \par + \ifdim \lastskip < \bigskipamount + \removelastskip + \penalty -500% + #1% + \fi +} +\newcommand\InterBitBreak {% + \bt@bitskip + \bigskip +} +\newcommand\InterBitBitBreak {% + \bt@bitskip + \medskip +} +\newcommand\InterBitBitBitBreak {% + \bt@bitskip + \smallskip +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bitbit} +% \begin{macro}{\bitbitbit} +% \begin{macro}{\bt@bitbit} +% \begin{macro}{\bt@bitbitbit} +% FIXME: These should be made attributes of the Generic Bit Style. +% \begin{macrocode} +\newcommand\bitbit {% + \@ifstar {% + \bt@bitbit{}% + }{% ELSE + \refstepcounter{bitbit}% + \bt@bitbit{\thebitbit\ }% + }% +} +\newcommand{\bt@bitbit} [2] {% + \ifnum\value{bitbit}=\@ne \else + \InterBitBitBreak + \fi + \noindent #1{\relsize{-1}\bfseries #2}% + \par\nobreak + \smallskip +} +\newcommand\bitbitbit {% + \@ifstar {% + \bt@bitbitbit{}% + }{% ELSE + \refstepcounter{bitbitbit}% + \bt@bitbitbit{\thebitbitbit\ }% + }% +} +\newcommand\bt@bitbitbit [2] {% + \ifnum\value{bitbitbit}=\@ne \else + \InterBitBitBitBreak + \fi + \noindent #1{\relsize{-1}\bfseries #2}% + \par\nobreak + \smallskip +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Userinfos} +% +% \begin{macro}{\Author} +% \begin{macro}{\author} +% \begin{macro}{\Lastchange} +% \begin{macro}{\lastchange} +% \begin{macro}{\Date} +% \begin{macro}{\date} +% \begin{macro}{\title} +% \begin{macro}{\BitTitle} +% \begin{macro}{\BitSubtitle} +% \begin{macro}{\Subtitle} +% \begin{macro}{\subtitle} +% When we redefine \cs\author, \cs\date, and \cs\title, we add a new action to +% the original meaning. This means that standard commands like \cs\maketitle +% will still perform as expected, if someone prefers to use that instead of the +% \Frankenstein commands. +% \begin{macrocode} +\SaveCS\date + +\newcommand*\Date {% + \todayabbrev +} +\defcommand\date [1] {% + \MDSaveddate{#1}% + \def\Date{#1}% +} +\SaveCS\title +\ReserveCS\BitTitle + +\defcommand\title [1] {% + \MDSavedtitle{#1}% + \def\BitTitle{#1}% +} +% \end{macrocode} +% Why did I originally want \cs\Subtitle to be a user command instead of \cs\subtitle? +% \begin{macrocode} +\NewUserInfo*[\subtitle]\BitSubtitle +%\NewUserInfo*[\Subtitle]\BitSubtitle +%\newlet\subtitle\Subtitle +\NewUserInfo*\Lastchange +\lastchange{\todayabbrev} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Copystyle} +% \begin{macro}{\copystyle} +% \mbox{} +% \begin{macrocode} +\NewUserInfo*\CopyStyle +\copystyle{standard} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Dates} +% +% \begin{macro}{\today} +% \begin{macro}{\todayabbrev} +% \mbox{} +% \begin{macrocode} +\def\today {% + \number\day\space\ifcase\month\or + January\or February\or + March\or April\or May\or June\or July\or August\or September\or + October\or November\or December\fi\space\number\year +} +\newcommand\todayabbrev {% + \number\day\space\ifcase\month\or + Jan\or Feb\or + Mar\or Apr\or May\or Jun\or Jul\or Aug\or Sep\or + Oct\or Nov\or Dec\fi\space\number\year +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\copywrite} +% This adds a copyright message to the beginning of \cs\Notes. Its single +% argument should be a year. +% \begin{macrocode} +\newcommand\copywrite [1] {% + \edef\Notes {% + \copyright#1 All rights reserved. \Notes + }% +} +% \end{macrocode} +% \end{macro} +% +% \section{Ends} +% +% \begin{macro}{\EndSign} +% It's very hard to attach this thing without allowing a page break before it. FIX. +% \begin{macrocode} +\newcommand\EndSign {% + \par\nobreak + \vspace{2\bigskipamount}% multiplication turns glue into dimen. + \hfill +% \end{macrocode} +% We do this so that |\Author| can have |\\|s in it. +% \begin{macrocode} + \begingroup + \scshape + \let\and\@tabularcr + \begin{tabular}{c} + \Author \\% + \relsize{-1}\itshape\Date + \end{tabular}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\theend} +% User command which (almost) always makes an \cs\EndSign: +% \begin{macrocode} +\newcommand\theend {% + \if@signed@ + \EndSign + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TheEnd} +% The end of a bit calls \cs\TheEnd. The default definition is either +% nothing or \cs\EndSign, depending on some condition. +% \begin{macrocode} +\newcommand\TheEnd {% + \def\sc@t@c {% + prizes% + }% + \let\sc@t@a\EndSign + \ifx\CopyStyle\sc@t@c + \InitCS*\sc@t@a + \else + \if@signed@ + \if@ends@ +% FIX: when you get the footer going... +% \ifnum\value{page} < 2% +% \InitCS*\sc@t@a +% \fi + \else + \InitCS*\sc@t@a + \fi + \else + \InitCS*\sc@t@a + \fi + \fi + \sc@t@a +} +% \end{macrocode} +% \end{macro} +% +% \section{Version control} +% +% We use macros instead of boxes, because at this point some of the macros in +% the boxes may change their meaning. +% +% Algorithm: We will maintain two \cs\hbox es |to \textwidth| each time +% \cs\MakeCover is called. Set the footboxes to |\v@idbox| here. Whenever +% |\MakeCover| is called, it should stack another |\vbox| with the right +% information in it into both boxes. The information is expanded, and thus the +% macro contents can change between calls to |\MakeCover|, but the box being +% built inserts two different |\vboxes| with their value at the moment. +% +% \begin{macro}{\bt@vcbox} +% \begin{macro}{\VersionControlString} +% \begin{macro}{\VersionControlAuthorString} +% \mbox{} +% \begin{macrocode} +\newcommand\BTVersionWord {Version} +\newcommand\BTCopyWord {Copy} +\newcommand\bt@vcbox {% + \footnotesize + \ifx\Lastchange\ShortEmpty\else + {\bfseries \BTVersionWord:} {\slshape \Lastchange}% + \fi + \hspace{\@ne em}% + {\bfseries \BTCopyWord:} {\slshape \todayabbrev}% +} +\newcommand\VersionControlString {% + \hfill \bt@vcbox \hfill +} +% \end{macrocode} +% I should assign some names to the various meanings of and, like protect. +% \begin{macrocode} +\newcommand\VersionControlAuthorString {% + \bt@vcbox \hfill {\scshape\def\and{\unskip, \ignorespaces}\Author}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\whitespace} +% \mbox{} +% \begin{macrocode} +\requirecommand\whitespace {% + \bigbreak +} +% \end{macrocode} +% \end{macro} +% +% \part{Configuration} +% +% We leave the rest to a configuration file. +% \begin{macrocode} +\InputIfFileExists{bits.cfg}{}{} +% \end{macrocode} +% +% The contents of the distributed configuration file are below. +% +% \InputIfFileExists{bits.cfg}{}{} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/unsupported/bits.tex b/macros/latex/contrib/frankenstein/unsupported/bits.tex new file mode 100644 index 0000000000..dca970a548 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/bits.tex @@ -0,0 +1,67 @@ +% bits.tex -- documentation for the bits LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{bits.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{bits} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{bits.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/unsupported/drama.ins b/macros/latex/contrib/frankenstein/unsupported/drama.ins new file mode 100644 index 0000000000..d2fb308754 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/drama.ins @@ -0,0 +1,64 @@ +% drama.ins -- docstrip driver for the drama LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + drama.sty or drama.stq. This + LaTeX package will work ONLY if it is called drama.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + drama.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{drama.stq}{\from{drama.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file drama.stq is a faster replacement for the file} +\Msg{* drama.sty.} +\Msg{*} +\Msg{* drama.stq is stripped of comments (documentation) and must be} +\Msg{* renamed drama.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/unsupported/drama.pdf b/macros/latex/contrib/frankenstein/unsupported/drama.pdf new file mode 100644 index 0000000000..ccc6013db5 Binary files /dev/null and b/macros/latex/contrib/frankenstein/unsupported/drama.pdf differ diff --git a/macros/latex/contrib/frankenstein/unsupported/drama.sty b/macros/latex/contrib/frankenstein/unsupported/drama.sty new file mode 100644 index 0000000000..b74e90f974 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/drama.sty @@ -0,0 +1,488 @@ +%^^A* legal notices +% \iffalse +% +% This program is part of the Frankenstein bundle for LaTeX. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% drama LaTeX package. It will work ONLY if it is placed in a +% proper directory. Files called README, INSTALL, drama.tex +% and drama.ins should have also been distributed to you +% with this file. See them for more information on how to typeset +% the documentation with LaTeX and how to generate a version of this +% file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{314} +% +%^^A** abstract +% \begin{abstract} +% Defines macros for typesetting a basic production-style stage script. +% +% This package is useful but may have problems and is unsupported. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% +% I am close to handling the insertion of a ``continued'' message at the top +% of the page when a speech is broken across the page. But it's not there +% yet. +% +% \DescribeEnv{script} +% This is the only environment so far, for a basic production-style stage +% script. It is implemented as a bitstyle: see the \package{bits} package +% for details of use. I think you only need to issue an +% \cs\author\marg{author's name} and \cs\date\marg{date} command. Also, +% create an empty file called \file{bits.cfg} on your system (or put the +% \cs\author declaration in it). +% +% Options come in pairs (boldface is default): +% \begin{description} +% \item[\textmd{oneact}/multiact] Multiact scripts use act numbers; oneacts +% just have scenes. +% \end{description} +% +% \DescribeMacro\character +% \cs\character\marg{full description}\marg{name}\marg{csname} defines a new +% character. \meta{full description} is used in the dramatis personae +% listing. \meta{name} is the name to use to refer to the character in stage +% directions, and to introduce their speeches. \cs\character defines a +% command |\|\meta{csname} which prints \meta{name} in the font given in +% \cs\DirectStyle. Use this in stage directions. It is an abbreviation +% macro of category \cat{Character}; following spacing is handled +% automatically for you. See the \package{abbrevs} package for details. Also +% defined is the command +% \DescribeMacro\SpeakAppend +% |\|\meta{csname}|says|, which is used to introduce the character's +% speeches. The suffix ``says'' can be changed by redefining \cs\SpeakAppend +% before using \cs\character. You can also define it before loading the +% \package{drama} package. +% +% \DescribeMacro\scene +% \DescribeMacro\act +% Use \cs\scene and \cs\act to start acts and scenes. +% +% \DescribeMacro\direct +% \DescribeMacro\setstage +% \cs\direct\marg{stage directions}. Use \cs\setstage\marg{stage directions} +% at the beginning of scenes and acts. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{drama package (Frankenstein's heart)} +\def\DoXPackageS {} +\def\initelyHavECitationS {} +\def\fileversion{v0.2} +\def\filedate{1996/05/05} +\def\docdate{1996/05/05} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{drama}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \begin{macrocode} +\RequirePackage{abbrevs,bits,dialogue,moredefs,relsize} +%\RequirePackage{xmark} +\let\sc@mark\Gobble +\VerboseErrors + +\DeclareBooleanOptions{oneact}{multiact} +\ProcessOptions +% \end{macrocode} +% +% \section{characters} +% +% \begin{macro}{\SpeakAppend} +% \begin{macro}{\sc@cast} +% \begin{macro}{\character} +% +% \begin{macrocode} +\providecommand\SpeakAppend {says} +\ReserveCS\sc@cast +\NewUserAbbrevDefiner\NewCharacterAbbrev{Character} +\let\TMFontCharacter\scshape +\newcommand*\character [3] {% args: dramper name csname + \expandafter\NewCharacterAbbrev\csname #3\endcsname{#2}% + \NewName* {#3\SpeakAppend} {} {% + \speak{#2}% + }% + \addto@macro\sc@cast{,#1}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% The |\@cdr| gets rid of the first silly comma. +% \begin{macrocode} +\newcommand\DramPer {% + \ifx\sc@cast\LongEmpty\else + {\larger\scshape Cast}% + \relax\begin{verse} + \edef\sc@t@a{\E@cdr\sc@cast\@nil}% + \@for\sc@t@b:=\sc@t@a \do {% + \sc@t@b\\% + }% + \relax\end{verse}% +% \end{macrocode} +% Prepare for another set of characters. +% \begin{macrocode} + \InitCS\sc@cast + \bigbreak + \fi +} +% \end{macrocode} +% +% \subsubsection{sectioning} +% +% \begin{macro}{\sc@toks@saved@output} +% We pull some fancy stuff with the output routine here. The algorithm is a +% simpler version of Knuth's \cite[260ff]{knuth:texbook}. +% \begin{macrocode} +\newtokens\sc@toks@saved@output +\sc@toks@saved@output=\output +% \end{macrocode} +% \end{macro} +% +% The |\sc@botmark|, if not empty, will contain text to be inserted at the top +% of the next page. It must contain vertical not horizontal material. +% +% We actually need to communicate the boolean |sc@directing| via the mark, +% because only the information in the marks is guaranteed to reflect the state +% at the end of the page, and not several lines later. +% \begin{macrocode} +\providelength\sc@len + +\newcommand\sc@outputwrapper {% + \setlength{\sc@len}{\dp255}% + \the\sc@toks@saved@output + \def\sc@t@b {% + \sc@botmark + \addtolength{\sc@len}{-\prevdepth}% + \kern\sc@len + }% + \InitCS\sc@t@a + \ifx\sc@botmark\ShortEmpty + \let\sc@t@a\sc@t@b + \else + \ifsc@directing + \let\sc@t@a\sc@t@b + \fi + \fi + \sc@t@a +} +\newcommand\script {% + \MakeDirectTakeArg + \relax\begin{Script}% +} +\NewName{endscript} {} {% + \relax\end{Script}% +} +\NewName{script*} {} {% + \MakeDirectTakeNoArg + \relax\begin{Script}% +} +\NewName{endscript*} {} {% + \relax\end{Script}% +} +\newcommand\sc@make@begin@bit@D [2] {% args: bitstyle copystyle + \DefName{sc@begin@bit@#1@#2}{##1##2} {% + \def\BitStyle{#1}% + \sc@begin@bit@common{##1}{##2}% + \PreBitAll +% +% \ClaimXMarkTwo +% \FrankenInfo{drama}{The script environment is changing \protect\output.}% +% \output={\sc@outputwrapper}% +% \let\maxdepth\maxdimen +% \let\@maxdepth\maxdimen + \if@oneact@ + \def\thepage {% + \arabic{bitbitbit}\hspace{\@ne em}\arabic{page}% + }% + \else + \def\thepage {% + \arabic{bitbit}--\arabic{bitbitbit}\hspace{\@ne em}\arabic{page}% + }% + \fi + \DramPer +% + \@nameuse{PreBit#1}% + }% +} +\newcommand\sc@make@end@bit@D [2] {% args: bitstyle copystyle + \DefName{sc@end@bit@#1@#2}{##1} {% + \sc@possiblyfinishdirecting + \TheEnd + \FrankenInfo{drama}{\protect\output is back to normal now.}% + }% +} +\NewBitstyle{Script} +\PromulgateComponentAcrossCopystyles{end@bit}{D}{Script} +\PromulgateComponentAcrossCopystyles{begin@bit}{D}{Script} + +\newcommand\act {% + \sc@possiblyfinishdirecting + \sc@mark{\ShortEmpty}% + \stepcounter{bitbit}% + \pagebreak[3]% + \bigskip + \centerline{\relsize{2}Act \thebitbit}% + \par + \nobreak + \smallskip +} +\newcommand\scene {% + \sc@possiblyfinishdirecting + \sc@mark{\ShortEmpty}% + \stepcounter{bitbitbit}% + \pagebreak[3]% + \bigskip + \centerline{\relsize{1}Scene \thebitbitbit}% + \par + \nobreak + \smallskip +} +% \end{macrocode} +% +% \subsubsection{speakers and stage directions} +% +% \begin{macrocode} +\newlength{\halfacross} + \setlength{\halfacross}{\textwidth} + \divide\halfacross by 2 +\newlength{\quarteracross} + \setlength{\quarteracross}{\textwidth} + \divide\quarteracross by 4 + +\newenvironment{DramaTab} [1] {% + \relax\begin{list}{} {% + \setlength{\leftmargin}{#1}% + \setlength{\listparindent}{\z@}% + \sloppy + }% + \item\relax + }{% + \relax\end{list}% +} +\newcommand\setstage [1] {% + \relax\begin{DramaTab}{\halfacross}% + \DirectStyle + \DirectOpen + \ignorespaces + #1% + \unskip + \DirectClose + \relax\end{DramaTab}% +} +% \end{macrocode} +% +% It is a question of style whether to announce the speaker's name a second +% time, if his speech continues after a stage direction in a paragraph by +% itself. If the page breaks immediately before the stage direction, or +% duringit, no continuation message will be given. If it breaks after the +% stage direction, and before the next speaker is announced with the |\speak| +% command, a continuation message appropriate to the speaker \emph{before} the +% stage direction is given. Of course, sectioning commands will cancel any +% continuation messages. +% +% Communicating via the mark is giving me a problem. I need to solve this +% problem and replace @sc@bool with mark information. +% +% Also, when using the no-argument form on a source with arguments, you cannot +% swallow the spaces with |\ignorespaces|, because the open brace shields them. +% +% There are problems with certain combinations of taking arguments and +% reannouncing speakers after a stage direction. I should draw a chart, and +% see how I can handle things. +% \begin{macro}{\DirectOpen} +% \begin{macro}{\DirectClose} +% \mbox{} +% \begin{macrocode} +\newcommand\DirectOpen {\textrm{(}} +\newcommand\DirectClose {\textrm{)}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\newboolean{sc@directing} + +\newcommand*\DirectNoArg {% + \sc@noargs@finishdirecting + \sc@direct +} +\newcommand\DirectWithArg [1] {% + \sc@args@finishdirecting + \sc@direct + #1% + \sc@really@finishdirecting +} +\newcommand\sc@direct {% + \global\let\sc@lastmark\sc@themark + \sc@mark{\ShortEmpty}% + \sc@directingtrue + \pagebreak[0]% mild encouragement + \relax\begin{DramaTab}{\quarteracross}% + \DirectStyle + \DirectOpen + \ignorespaces +} +\newcommand\sc@really@finishdirecting {% + \unskip + \DirectClose + \relax\end{DramaTab} + \sc@directingfalse +% \sc@mark\expandafter{\sc@lastmark}% FIXME: +} +% \end{macrocode} +% Looks like args version is null. +% \begin{macrocode} +\ReserveCS\sc@args@finishdirecting +\newcommand\sc@noargs@finishdirecting {% + \ifsc@directing + \sc@really@finishdirecting + \fi +} +\ReserveCS\sc@possiblyfinishdirecting +\newcommand\MakeDirectTakeArg {% + \let\sc@possiblyfinishdirecting\sc@args@finishdirecting + \let\direct\DirectWithArg +} +\newcommand\MakeDirectTakeNoArg {% + \let\sc@possiblyfinishdirecting\sc@noargs@finishdirecting + \let\direct\DirectNoArg +} +% \end{macrocode} +% +% \todo{Do penalties better?} +% +% \begin{macro}{\GiveSpeaker} +% \begin{macrocode} +\newcommand\GiveSpeaker [1] {% + \par + \centerline{\textsc{#1}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\GiveSpeakerContinued} +% The space is explicit for clarity. +% \begin{macrocode} +\newcommand\GiveSpeakerContinued [1] {% + \GiveSpeaker{#1\space\rlap{\textsl{(continued)}}}% +} +\newcommand\speak [1] {% + \sc@possiblyfinishdirecting + \sc@mark{\ShortEmpty}% + \pagebreak[2]% + \smallskip + \sc@mark{\GiveSpeakerContinued{#1}}% + \GiveSpeaker{#1}% + \par + \nopagebreak + \noindent +} +% \end{macrocode} +% \end{macro} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/unsupported/drama.tex b/macros/latex/contrib/frankenstein/unsupported/drama.tex new file mode 100644 index 0000000000..99b7c8c2e0 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/drama.tex @@ -0,0 +1,67 @@ +% drama.tex -- documentation for the drama LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{drama.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{drama} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{drama.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} diff --git a/macros/latex/contrib/frankenstein/unsupported/includex-test.tex b/macros/latex/contrib/frankenstein/unsupported/includex-test.tex new file mode 100644 index 0000000000..4539bd840b --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/includex-test.tex @@ -0,0 +1,206 @@ +%* filecontents +% $Id: includex-test.tex,v 1.2 1999/02/27 05:09:26 swift Exp $ + +%** includex-test-aux.tex +\begin{filecontents}{includex-test-aux.tex} +This text is in a separate file that just contains text, and some \LaTeX\ code. +For a change, let's quote \emph{Moby Dick}, chapter~94: +\begin{quotation} % + Squeeze!\ squeeze!\ squeeze!\ all the morning long; I squeezed that sperm + till I myself almost melted into it; I squeezed that sperm till a strange + sort of insanity came over me; and I found myself unwittingly squeezing my + co-laborers' hands in it, mistaking their hands for the gentle globules. + Such an abounding, affectionate, friendly, loving feeling did this avocation + beget; that at last I was continually squeezing their hands, and looking up + into their eyes sentimentally; as much as to say,---Oh!\ my dear fellow + beings, why should we longer cherish any social acerbities, or know the + slightest ill-humor or envy! Come; let us squeeze hands all round; nay, let + us all squeeze ourselves into each other; let us squeeze ourselves + universally into the very milk and sperm of kindness. + + Would that I could keep squeezing that sperm for ever! For now, since by many + prolonged, repeated experiences, I have perceived that in all cases man must + eventually lower, or at least shift, his conceit of attainable felicity; not + placing it anywhere in the intellect or the fancy; but in the wife, the + heart, the bed, the table, the saddle, the fire-side, the country; now that I + have perceived all this, I am ready to squeeze case eternally. In thoughts + of the visions of the night, I saw long rows of angels in paradise, each with + his hands in a jar of spermaceti. +\end{quotation} +\end{filecontents} +%** includex-test-aux1.tex +\begin{filecontents}{includex-test-aux1.tex} +\documentclass{article} + +\usepackage{alltt} + +\newcommand\preamblecmd + {This line is due to the preamble of the included file.} + +\tdisable +\tdisableone{flue} +\tdisableopt[glue]{shoe} +\tdisabletwo{blue}{grue} + +\begin{document} + +\tdisable +\tdisableone{flue} +\tdisableopt[glue]{shoe} +\tdisabletwo{blue}{grue} + +\preamblecmd + +This file could be compiled on its own. + +\begin{alltt} +Here is yet another quotation from Beckett, this time from \emph{Watt} +(45--46). +\end{alltt} + +\begin{quotation} + The crocuses and the larch turning green every year a week before the others + and the pastures red with uneaten sheep's placentas and the long summer days + and the new-mown hay and the wood-pigeon in the morning and the cuckoo in the + afternoon and the corncrake in the evening and the wasps in the jam and the + smell of the gorse and the look of the gorse and the apples falling and the + children walking in the dead leaves and the larch turning brown a week before + the others and the chestnuts falling and the howling winds and the sea + breaking over the pier and the first fires and the hooves on the road and the + consumptive postman whistling \emph{The Roses Are Blooming in Picardy} and + the standard oil-lamp and of course the snow and to be sure the sleet and + bless your heart the slush and every fourth year the February d\`eb\^acle and + the endless April showers and the crocuses and then the whole bloody business + starting all over again. +\end{quotation} + +Notice, just as one single thing among dozens, that ``crocus'' +sounds like ``croak us.'' + +\end{document}Error 1 in radical shutdown! +Error 2 in radical shutdown! + +None of this text should ever be set. + +\end{filecontents} +%** includex-test-aux.sty +\begin{filecontents}{includex-test-aux.sty} +\renewcommand\autotest {% + This text is coming from the definition of $\backslash$\texttt{autotest} that + is in the auxiliary file. +} + +\typeout{Autoload file being loaded!} + +\newcommand\madbomber {% + \emph{I am the mad bomber!}% +} + +\end{filecontents} + +%* main document + +\documentclass{article} +\usepackage{includex,compsci} + +\begin{document} +%* Intro +\def\fileversion{v1} +\def\filedate{1999/02/26} + +\makeatletter +\def\StripV #1{\E@cdr #1\@nil} +\makeatother + +\date{Version: \StripV\fileversion \qquad Date: \filedate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{Testing the \package{includex} package} +\maketitle + +\section{New ways to include} + +This will take several pages. + +First, check that we can |\include| as usual, so the rest of this page should +be blank, and the Melville quote should be alone on the next page. + +\include{includex-test-aux} + +This should be on a new page. Now we include the same thing, but it should +come immediately here because we use |\include*|: + +\include*{includex-test-aux} + +And this paragraph should immediately follow the Melville. Now, we check +|\includedoc| and |\includedoc*| in a similar manner. The included file is +going to use the |alltt| environment. We have loaded the package in the parent +file. The |\usepackage| command in the included file should be disabled; if +not, there will be an error when it tries to redefine the environment. Also, +we disable several commands that will produce an error if they are not. This +should be the last text on this page. + +\newcommand\tdisable{\typeout{Error with \protect\tdisable.}} +\newcommand\tdisableone[1]{\typeout{Error with \protect\tdisableone.}} +\newcommand\tdisableopt[2][]{\typeout{Error with \protect\tdisableopt.}} +\newcommand\tdisabletwo[2]{\typeout{Error with \protect\tdisabletwo.}} + +\disable{\let\tdisable\relax} +\disable{\let\tdisableone\Gobble} +\disable{\let\tdisableopt\GobbleOM} +\disable{\let\tdisabletwo\GobbleMM} + +\makeatletter +\newcommand\checkp {% + \@ifundefined{preamblecmd} {% + \DTypeout{Preamblecmd undefined.}% + }{% ELSE + \DTypeout{Preamblecmd is: (\preamblecmd).}% +% \let\preamblecmd\relax + }% +} +\makeatother +\checkp + +\includedoc{includex-test-aux1} + +\checkp + +And this should be on a new page. The first line should have said it +comes from the preamble. + +The |\includedoc| family of commands puts the included file into a group. So +|\preamblecmd| is not defined now. + +Now we do the same thing over, but the file should appear immediately. + +\includedoc*{includex-test-aux1} + +\checkp + +And this paragraph should immediately follow the Beckett. Finally, we have to +check |\includedocskip| and |\includedocskip*|. The difference will be that +the first line will say it comes from the parent. This should be the last text +on the page. + +\newcommand\preamblecmd {% + This def of preamblecmd comes from the parent. +} + +\includedocskip{includex-test-aux1} + +\checkp +This should be on a new page. And once again, the quote should follow +immediately here: + +\includedocskip*{includex-test-aux1} + +\checkp + +And this text should immediately follow the quote. + +%* end + +END OF TEST + +\end{document} + diff --git a/macros/latex/contrib/frankenstein/unsupported/includex.ins b/macros/latex/contrib/frankenstein/unsupported/includex.ins new file mode 100644 index 0000000000..87907d4bd6 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/includex.ins @@ -0,0 +1,64 @@ +% includex.ins -- docstrip driver for the includex LaTeX package +% +% Copyright (C) 1995-2001 Matthew Swift +% Please see the copyright notice in \preamble below. + +% This file, when run through TeX or LaTeX, will generate fast loadable files +% from the .sty, .cls, or .bst files mentioned below. + +\input docstrip +\keepsilent + +\preamble + + This program is part of the Frankenstein bundle for LaTeX. + + Copyright (C) 1995-2001 Matthew Swift + + This file may have one of TWO names, either + includex.sty or includex.stq. This + LaTeX package will work ONLY if it is called includex.sty + and placed in a proper directory. This file should have been + distributed to you with a DIFFERENT file (also) called + includex.sty which functions identically to this one + but contains documentation in comments. This file works faster, + but the other should be kept because it contains the documentation + for this LaTeX package. Files called README and INSTALL should have + also been distributed to you with this file; see them for more + information. + + This program is free software; you may redistribute it and/or + modify it under the conditions of the LaTeX Project Public + License, either version 1.2 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. + + 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 + LaTeX Project Public License for more details. + +\endpreamble + +\askforoverwritefalse + +% This will get changed to either nothing or \nopostamble. + + +\generate{\file{includex.stq}{\from{includex.sty}{}}} + +\Msg{} +\Msg{***********************************************************************} +\Msg{*} +\Msg{* The file includex.stq is a faster replacement for the file} +\Msg{* includex.sty.} +\Msg{*} +\Msg{* includex.stq is stripped of comments (documentation) and must be} +\Msg{* renamed includex.sty and placed where LaTeX can find it} +\Msg{* before it may be used.} +\Msg{*} +\Msg{***********************************************************************} +\Msg{} + +\endbatchfile diff --git a/macros/latex/contrib/frankenstein/unsupported/includex.pdf b/macros/latex/contrib/frankenstein/unsupported/includex.pdf new file mode 100644 index 0000000000..e452557a80 Binary files /dev/null and b/macros/latex/contrib/frankenstein/unsupported/includex.pdf differ diff --git a/macros/latex/contrib/frankenstein/unsupported/includex.sty b/macros/latex/contrib/frankenstein/unsupported/includex.sty new file mode 100644 index 0000000000..0d0c58a8f6 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/includex.sty @@ -0,0 +1,492 @@ +%^^A* legal notices +% \iffalse +% +% This file is part of the Frankenstein bundle, comprising the +% files listed in the file Manifest.txt. You should have +% received the complete bundle when you received this file. +% +% Copyright 1995-2001 Matt Swift . +% +% This file contains both the code and documentation for the +% includex LaTeX package. It will work ONLY if it is placed in +% a proper directory. Files called README, INSTALL, +% includex.tex includex.ins, and includex.dvi +% should have also been distributed to you with this file. See +% README for more information on how to generate a version of +% this file that will work faster than this one. +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +% \fi +% +%^^A* checks +% +%^^A NOTE: The character table, with two %'s, will get written to all files. +%% \CharacterTable +%% {Upper-case \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 +%% Lower-case \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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \CheckSum{227} +% +% \begin{abstract} +% Includex allows you to include just the contents of one source file into +% another, ignoring the text outside the +% \code{\begin{document}}\lips\code{\end{document}} in the included file. +% +% This package is useful but may have problems and is unsupported. +% +% See also the \package{newclude} package. +% \end{abstract} +% \tableofcontents +% +% \part{Discussion} +% \section{Including Files} +% +% \DescribeMacro{\include*} +% \cs\include was always pretty useless to me because it did a \cs\clearpage +% before and after the \cs\input. The macro |\include*| is defined below to be +% like \cs\include but without the \cs\clearpage s. +% +% The other thing we do is define a command \cs\includedoc, which includes a +% file which is allowed to have its own \cs\documentclass and |\begin{document}| +% and |\end{document}| and \cs\usepackage commands. +% +% This opens up a whole new world of truly modular \LaTeX{} files. There is +% even nothing special about extracting the |document| environment, we can +% extract \emph{any} environment, or perhaps even other things. +% +% There are some problems, however. Maybe the \cs\usepackage is necessary, +% maybe it would conflict. Same with other commands like the \cs\newcommand +% family. It is simply not (yet) an issue in \LaTeX{} design to consider the +% implications of parent files. The problems are not insurmountable. We can +% begin by working with a convention, and ultimately maybe make some changes in +% certain macros. I will be getting to all this. I admit I have not looked +% carefully to see whether the design specifications of \LaTeX3{} address these +% important issues. +% +% The macros here will be useful in many circumstances, when the included files +% are themselves simple. +% +% \DescribeMacro{\includedoc} +% \DescribeMacro{\includedoc*} +% \DescribeMacro{\includedocskip} +% \DescribeMacro{\includedocskip*} +% There are now two main commands, \cs\includedoc and \cs\includedocskip, +% each with a |*| version analogous to the new \cmd{include*}. Each take a +% filename as an argument just like \cs\include. +% +% \cs\includedoc\marg{filename} reads everything in the file except for +% \cs\documentclass, \cs\usepackage, |\begin{document}|, |\end{document}| +% (and whatever follows it). +% +% \cs\includedocskip\marg{filename} does the same except it also skips +% everything between \cs\documentclass and |\begin{document}|. +% +% \DescribeMacro{\disable} +% At present there is a makeshift way to ignore additional commands when +% using \cs\includedoc and \cs\includedocskip. If you want to cause \cs\foo +% which takes no arguments to be disabled, say |\disable{\let\foo\relax}|. If +% \cs\foo takes one mandatory argument, say |\let\foo\Gobble| instead. If +% \cs\foo takes one optional and one mandatory, say |\let\foo\GobbleOM|. If +% \cs\foo takes two mandatory arguments, say |\let\foo\GobbleMM|. For other +% permutations of arguments, you can extrapolate from the macros defined +% below. +% +% \StopEventually{} +% +% \part{Implementation} +% +% \section{Version control} +% +% \begin{macro}{\fileinfo} +% \begin{macro}{\DoXUsepackagE} +% \begin{macro}{\HaveECitationS} +% \begin{macro}{\fileversion} +% \begin{macro}{\filedate} +% \begin{macro}{\docdate} +% \begin{macro}{\PPOptArg} +% These definitions must be the first ones in the file. +% \begin{macrocode} +\def\fileinfo{extra ways to include files} +\def\DoXPackageS {} +\def\fileversion{v0.6a} +\def\filedate{1999/02/23} +\def\docdate{1999/02/23} +\edef\PPOptArg {% + \filedate\space \fileversion\space \fileinfo +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% If we're loading this file from a \cs\ProcessDTXFile command (see the +% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined; +% othewise we assume it is not (that's why the FunkY NamE). +% +% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed +% in \cs\DoXPackageS (needed to typeset the documentation for this file) and +% then bail out. Otherwise, we're using this file in a normal way as a +% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in +% the \ext{dtx} file, and, if you're reading the typeset documentation of this +% package, would appear just above. (It's OK to call \cs\usepackage with an +% empty argument or \cs\relax, by the way.) +% \begin{macrocode} +\makeatletter% A special comment to help create bst files. Don't change! +\@ifundefined{JusTLoaDInformatioN} {% + }{% ELSE (we know the compsci package is already loaded, too) + \UndefineCS\JusTLoaDInformatioN + \SaveDoXVarS + \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined + \usepackage{#1}% + }% + \RestoreDoXVarS + \makeatother + \endinput +}% A special comment to help create bst files. Don't change! +% \end{macrocode} +% +% Now we check for \LaTeX2e and declare the LaTeX package. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{includex}[\PPOptArg] +% \end{macrocode}^^A special comment to help create bst files. Don't change! +% +% ^^A NOTE: We have to compensate for the above backslashes, which are not +% ^^A actually in the .dtx file the author works on, by adding to the +% ^^A CheckSum. +%% +% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this. +% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however... +% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file +% ^^A that precede it. +% \IfCitations {% +% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in +% } ^^A the .dtx file, we need 2 more in the CheckSum. +% +% +% \section{Requirements} +% +% Now we declare the package, check for \LaTeX2e, and load the other packages +% needed. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{includex} +\RequirePackage{moredefs} +% \end{macrocode} +% +% \section{Disabling things} +% +% \begin{macro}{\disable} +% This allows the disabling hacks. +% \begin{macrocode} +\ReserveCS\DisableMonster % This line is elsewhere for main package +\newcommand\disable[1] {% + \g@addto@macro\DisableMonster{#1}% +} +% \end{macrocode} +% \end{macro} +% +% \section{New things} +% +% \begin{macro}{\sc@saved@include} +% \begin{macro}{\include} +% \begin{macro}{\sc@include} +% \begin{macro}{\sc@@include} +% This is a simple redefinition of \cs\include without the \cs\clearpage +% commands. Nothing tricky going on. +% \begin{macrocode} +\newlet\sc@saved@include\include +\renewcommand\include {% + \@ifstar + \sc@include + \sc@saved@include +} +\newcommand\sc@include {% + \relax + \ifnum\@auxout=\@partaux + \@latex@error{\string\include\space cannot be nested}\@eha + \else + \expandafter\sc@@include + \fi +} +\newcommand\sc@@include[1] {% + \if@filesw + \immediate\write\@mainaux{\string\@input{#1.aux}}% + \fi + \@tempswatrue + \if@partsw + \@tempswafalse + \edef\@tempb{#1}% + \@for \@tempa:=\@partlist + \do{\ifx\@tempa + \@tempb + \@tempswatrue + \fi}% + \fi + \if@tempswa + \let\@auxout\@partaux + \if@filesw + \immediate\openout\@partaux #1.aux% + \immediate\write\@partaux{\relax}% + \fi + \@input@{#1.tex}% + \@writeckpt{#1}% + \if@filesw +% NOTE: Robin took out the \immediate here. +% \immediate\closeout\@partaux + \closeout\@partaux + \fi + \else + \@nameuse{cp@#1}% + \fi + \let\@auxout\@mainaux +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Now we start dealing with the much more tricky extraction of the |document| +% environment. +% +% We start with considering how to quit inputting a file. The idea is to make +% the |\end{document}| command of the included file call \cs\endinput. But +% there is a hitch that characters on the line after the |\end{document}| get +% inserted when you don't want them to. To beat that limitation, we have to do +% some work. +% +% \begin{macro}{\sc@radical@shutdown} +% We will add a bunch of commands to this macro, with the idea of \cs\catcode ing +% everything and its brother to a comment. This would be a brute force +% method! +% \begin{macrocode} +\ReserveCS\sc@radical@shutdown +% \end{macrocode} +% First log a message that we're about to do some crazy things. In case +% something ever goes wrong, this might help. +% \begin{macrocode} +\addto@macro\sc@radical@shutdown {% + \PackageInfo{includex}{\protect\sc@radical@shutdown\space beginning}% +} +% \end{macrocode} +% Now we start adding \cs\catcode commands. These first two should be +% redundant; but just in case someone changed things\lips. +% \begin{macrocode} +\addto@macro\sc@radical@shutdown{\catcode`\%=14} % 14 = comment +\addto@macro\sc@radical@shutdown{\catcode`\^=7} % 7 = superscript +% \end{macrocode} +% \begin{macro}{\sc@disable@char} +% Next, we define a command we weill use in a loop in a moment. +% \begin{macrocode} +\newcommand\sc@disable@char[1] {% + \addto@macro\sc@radical@shutdown + {\catcode`#1=14}} % 14 = comment +% \end{macrocode} +% \end{macro} +% The following list contains every keyboard char except these three, which are +% treated specially: |%#|. +% The first is already a comment, and we handle the second in a moment. Each +% character in the following list is \cs\catcode d to a comment: +% \begin{macrocode} +\@tfor\sc@t@a:=abcdefghijklmnopqrstuvwxyz% + ABCDEFGHIJKLMNOPQRSTUVWXYZ% + ~!@$&*()_+-=[]|/?.,<>% + 1234567890% + `'";:% + \^\\\{\}\ % this is really the chars "^\{}" and space + \do {\expandafter\sc@disable@char\sc@t@a} +% \end{macrocode} +% We add |#| separately, because it's tricky or impossible to put it into the +% list we just used. +% \begin{macrocode} +\sc@disable@char\# +% \end{macrocode} +% We end the macro with \cs\endinput. This has to come after all the previous, +% otherwise, \TeX{} goes ahead and reads to the end of the line immediately, +% with regular catcodes. This is a good theory, I'm not sure it's necessary. +% \begin{macrocode} +\addto@macro\sc@radical@shutdown{\endinput} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sc@radical@shutdown@aftergroup} +% We need to use |\sc@radical@shutdown| this way. +% \begin{macrocode} +\newcommand\sc@radical@shutdown@aftergroup {% + \aftergroup\sc@radical@shutdown +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sc@begindoc@toks} +% \begin{macro}{\sc@enddoc@toks} +% These are for \cs\AtBeginIncludedDocument and \cs\AtEndIncludedDocument. +% \begin{macrocode} +\newtoks\sc@begindoc@toks +\sc@begindoc@toks{} +\newtoks\sc@enddoc@toks +\sc@enddoc@toks{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\AtBeginIncludedDocument} +% The analogue of \cs\AtBeginDocument. +% \begin{macrocode} +\newcommand\AtBeginIncludedDocument[1] {% + \sc@begindoc@toks\expandafter{\the\sc@begindoc@toks#1}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AtEndIncludedDocument} +% The analogue of \cs\AtEndDocument +% \begin{macrocode} +\newcommand\AtEndIncludedDocument[1] {% + \sc@enddoc@toks\expandafter{\the\sc@enddoc@toks#1}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\includedoc} +% \begin{macro}{\includedoc*} +% Now we start from the other end, defining the user command. +% \begin{macrocode} +\newcommand\includedoc {% +% Robin's new: + \@ifstar {% + \def\sc@includebit@cmd{\include*}\sc@includebit + }{% ELSE + \let\sc@includebit@cmd\include\sc@includebit + }% +} + +% My old: +% {\sc@includebit} +% {\clearpage +% \sc@includebit[\clearpage]}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\sc@includebit} +% The commented-out code is for some eventual extensions. +% +% Interface is \cmd{sc@includebit}\oarg{postlude}\marg{file} (where +% \oarg{postlude} is command(s) to be executed after the inclusion is +% complete); it is assumed that \cmd{sc@includebit@cmd} is either \cs\include +% or \cmd{include*} +% \begin{macrocode} +\newcounter{sc@count} +\newcounter{bit} +\newcommand\sc@includebit [2] [] {% + \setcounter{sc@count}{\thebit}% + \begingroup + \DisableMonster + \let\usepackage\GobbleOM +% Robin's new: + \def\enddocument {% + \makeatletter + \the\sc@enddoc@toks + \sc@radical@shutdown@aftergroup + } +% My old: +% \let\enddocument\sc@radical@shutdown@aftergroup + \let\documentclass\GobbleOM + \let\documentstyle\GobbleOM % why worry about branching if 2.09.. + \def\document {% + \the\sc@begindoc@toks + }% + \def\IncludedJobname {#2}% + \sc@includebit@cmd{#2}% + \endgroup + \par + #1 +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\includedocskip} +% \begin{macro}{\includedocskip*} +% Now we make a similar command that \emph{entirely} skips the preamble, +% whereas \cs\includedoc only skipped those commands that we specifically +% disabled. Obviously this whole business of the preamble needs to be +% radically reconceived if convenient modularity of documents is to be had. At +% the moment, no distinction is made between things like \cs\newcommand and +% \cs\usepackage that should be exported to a parent file, and those things that +% should not. +% \begin{macrocode} +\newcommand\includedocskip {% + \@ifstar {% + \sc@includebitskip + }{% ELSE + \clearpage + \sc@includebitskip[\clearpage]% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% I tried combining |\sc@includebitskip| and |\sc@includebit| but something +% changed when I used a conditional to do this. I'm sure the problem could be +% figured out and the two combined. +% +% \begin{macro}{\sc@includebitskip} +% We begin skipping with the \cs\documentclass or \cs\documentstyle command, and +% stop with the |\begin{document}| command. With some hacking to the new +% |verbatim| environment, this could be done. I haven't done this yet, so this +% is implemented by stuffing everything into a macro argument. I can't think +% of a \cs\begin occurring between \cs\documentclass the \cs\begin document, but +% that will screw things up if it does. +% +% The commented lines here are once again for a future extension. +% \begin{macrocode} +\newcommand\sc@includebitskip [2] [] {% + \setcounter{sc@count}{\thebit}% + \begingroup + \DisableMonster + \let\enddocument\sc@radical@shutdown@aftergroup + \long\def\documentclass ##1\begin{% + \begingroup + \def\@currenvir{document}% + \GobbleM + }% "{document}" is still to be read. + \let\documentstyle\documentclass + \include*{#2}% + \endgroup + \par + #1\relax +} +% \end{macrocode} +% \end{macro} +% +% \Finale diff --git a/macros/latex/contrib/frankenstein/unsupported/includex.tex b/macros/latex/contrib/frankenstein/unsupported/includex.tex new file mode 100644 index 0000000000..b2072b0808 --- /dev/null +++ b/macros/latex/contrib/frankenstein/unsupported/includex.tex @@ -0,0 +1,67 @@ +% includex.tex -- documentation for the includex LaTeX package. +% +% This program is part of the Frankenstein bundle for LaTeX2e. +% +% Copyright (C) 1995-2001 Matt Swift +% +% This program is free software; you may redistribute it and/or +% modify it under the conditions of the LaTeX Project Public +% License, either version 1.2 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. +% +% 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 +% LaTeX Project Public License for more details. +% +\documentclass{ltxdoc} +\makeatletter +\def\part {% + \clearpage + \@afterindentfalse + \secdef\@part\@spart +} +\def\StripV #1{\E@cdr #1\@nil} +\makeatother +\usepackage{attrib,compsci} +\newbook\manual {Chicago\nocite{chicago:14} Manual of Style}[Chicago Manual] +\newbook\MLAman {The\nocite{mlaman} MLA Style Manual and Guide to Scholarly Publishing} + [The MLA Style Manual] +\newtheorem{lessoninternal}{Lesson} +\newenvironment{lesson} {% + \let\AttribInit\sffamily + \let\PreTrib\textsection + \let\PostTrib\ShortEmpty + \lessoninternal + } {% + \endlessoninternal + } +\newcommand\manualref [1] {\textsf{\S #1}} +\ProcessDTXFile{includex.sty} +\newlet\MaybeABib\relax +\IfCitations { + \def\MaybeABib {% + \newpage + \bibliographystyle{achicago}% + \bibliography{frankenstein}% + } + \SaveDoXVarS + \usepackage{achicago} + \RestoreDoXVarS +} +\CodelineIndex +\EnableCrossrefs +\begin{document} +\date{Version: \StripV\fileversion \qquad Date: \filedate\\ + \relsize{-2}Documentation revision: \docdate} +\author{Matt Swift \email{swift@alum.mit.edu}} +\title{The \textsf{includex} LaTeX package \\\smaller \fileinfo} +\maketitle +\DocInput{includex.sty} +\MaybeABib +\newpage +\PrintIndex +\end{document} -- cgit v1.2.3