% \def\fileversion{ver.~2.0j} % \def\filedate{1994/12/12} % \def\docdate {1994/07/06} % \CheckSum{3744} %\iffalse % % Copyright (C) 1992-1994 by Frank Bennett. All rights reserved. % % This file contains the entire LexiTeX package. The LexiBib % package for BibTeX is contained in the separate file % lexibib.doc. % % % To get started with unpacking, run this file through DOCSTRIP % giving `driver' as the extraction option, with the extension % `ins'. Then run the resulting lexitex.ins file through LaTeX, % which will strip all of the files in the package. This % requires about 10-15 minutes on my 33mhz Linux box, with % an X server running; your mileage may vary. To print % the manual, edit the lexitex.man file to your taste and run % it through LaTeX. To make the reference cards, run lexicard.tex % through LaTeX. % % IMPORTANT NOTICE: % % You are not allowed to change this file. You may however copy % this file to a file with a different name and then change the % copy if (a) you do not charge for the modified code, (b) you % acknowledge LexiTeX and its author(s) in the new file, if it % is distributed to others, and (c) you attach these same % conditions to the new file. % % You are not allowed to distribute this file alone. You are not % allowed to take money for the distribution or use of this file % (or a changed version) except for a nominal charge for copying % etc. % % You are allowed to distribute this file under the condition that % it is distributed with all of its contents, intact. % % For error reports, or offers to help make LexiTeX a more powerful, % friendlier, and better package, please contact me on % fbennett@clus1.ulcc.ac.uk %\fi % % % \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty} % \DoNotIndex{\@flushglue,\@gobble,\@input} % \DoNotIndex{\@makefnmark,\@makeother,\@maketitle} % \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa} % \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue} % \DoNotIndex{\@thanks,\@thefnmark,\@topnum} % \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin} % \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces} % \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup} % \DoNotIndex{\cal,\csname,\def,\documentstyle,\dospecials,\edef} % \DoNotIndex{\egroup} % \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist} % \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global} % \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn} % \DoNotIndex{\ifcase} % \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item} % \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower} % \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing} % \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc} % \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut} % \DoNotIndex{\strutbox} % \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt} % \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@} % \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim} % \DoNotIndex{\`,\catcode,\end,\escapechar,\frenchspacing,\glossary} % \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle} % \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode} % \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip} % \DoNotIndex{\nopagebreak} % \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle} % \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb} % \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar} % \DoNotIndex{\[,\{,\},\]} % \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode} % \DoNotIndex{\baselineskip,\begin,\tw@} % \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q} % \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H} % \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z} % \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0} % \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_} % \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother} % \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment} % \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined} % \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc} % \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar} % \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode} % \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting} % \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf} % \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse} % \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault} % \DoNotIndex{\bfdefault} % \setcounter{StandardModuleDepth}{1} % \MakeShortVerb{\"} % % \title{User's Guide\\to\\\LexiTeX\\{\large a context-sensitive citation engine % for \LaTeX}\thanks{% % This file has version number \fileversion{} dated \filedate{}. % The documentation was last revised on \docdate. % }} % \author{Frank G. Bennett, Jr.\thanks{The text and source code % contained in this file are % \copyright~1992--1994 by Frank G. Bennett, Jr. This file can % be freely distributed; the sole condition of use is that % acknowledgement to the author be made in any published work % produced using \LexiTeX. % The author wishes to thank % Steve Bellovin, George Greenwade and Boris Pevzner for their % helpful comments on earlier versions on \LexiTeX. Gratitude % is also owed to Marcia Elliot and Yoshiko Makino, LL.B. % finalists in the Law Department of the School of Oriental % and African Studies in 1993 and 1994 respectively, who % prepared extended essays using the initial release of \LexiTeX.}} % \maketitle % % \begin{abstract} % \noindent This {\tt doc} file contains all of the code and % documentation for \LexiTeX, a set of macros % that enables \LaTeX\ to produce cross-referenced % in-footnote citations for legal and other materials % from a single list of citations % specified at the top of the document or in a separate citation % source file. Citations produced by \LexiTeX\ conform to % the style specified in the {\sl Uniform % System of Citation} (the `Blue Book'). This style will also % generate tables of authorities if required. % \end{abstract} % % % \tableofcontents % \newpage % % % % \bigskip % \begin{lexilist} % \newbook{bluebook}{}{A Uniform System of Citation}{19th ed.\ 1989} % \newbook{knuth}{D.E. Knuth}{The \TeX book}{1990} % \newbook{leunen}{M.-C. van Leunen}{A Handbook for Scholars} % {1979} % \end{lexilist} % \lexiforcefoots % \hfill {``Now comes the fun part.''}\par % \smallskip % {\hfill ---Donald Knuth}\lexicite{knuth}+{176}.% % % \bigskip % \section{Preface to release 2.0} % % This {\tt doc}-format release of \LexiTeX{} replaces the set % of files released in June of 1993. There is no change in % the syntax used to declare citations, but that for nickname % invocations of a cite {\em has\/} changed; some editing of % documents prepared for use with the initial release may be % required before they will run with the new version. % The syntax of the {\tt lexicite.tex} file % has also changed. Any alterations that you have made to % your existing file must be replicated by hand in the new % {\tt lexicite.tex} style definition file. The new syntax % in that file has changed only slightly, and the way to % proceed should be readily apparent. If you made any % changes to this file, please send me a note of them, so that % they can maybe be included in a future release. % % \subsection{Changes over the previous release} % \begin{itemize} % \item {\bf List input:} It is now possible to input citations from a % separate file, and use nickname references throughout % the text. This opens the prospect of linking \BibTeX\ % databases with \LexiTeX\ documents once appropriate % \BibTeX\ styles are developed. It also greatly simplifies % document editing, since one no longer need worry about % assuring that the first use of a citation is in the form % of a declaration. % % \item {\bf List macro storage:} Citation information is now stored in % list macro form. This has made it possible to edit macros % during processing with \LaTeX, which is necessary both for % the list-input feature, and for several enhancements planned % for the future. % % \item {\bf Redundant {\tt\string\xdef} of \meta{cite type % name}{\tt faces}:} % The % last release redefined this macro every time a declaration was % made of a new citation---unnecessary, since this information % is common to all citations declared in a particular style. % This redundancy has been eliminated by moving the relevant % definition inside {\tt\string\newcitestyle} where it belongs. % It therefore executes once for each cite type, during the % processing of {\tt lexicite.tex} at start-up. % % \item {\bf Redundant arguments:} One of the central processing macros % in the old storage routines passed data to a chaining macro % both as arguments to that macro {\em and\/} as defined % temporary token registers. This bit of confusing and time-wasting % silliness has been eliminated. % % \item {\bf Print routine simplification:} The print routine is still an % uncommented mass of conditions, but the method for selecting % long- or short-form citations has been changed from the % passing of macro arguments and the use of separate print % macros to an {\tt\string\if} toggle. This allows a much % higher degree of control in further development of the style. % \end{itemize} % % \subsection{Desiderata and future undevelopment} % \begin{itemize} % \item The `anon' style names in {\tt lexicite.tex} are now % optional. Citations with an author argument, or without a % last citation part, automatically drop their bridging % punctuation, so these styles are no longer necessary. % % \item We should be able to draw upon an existing list macro in % \LaTeX{} in the {\tt\string\@law@clean} routine. I don't % know enough about \LaTeX's inner workings to do this; % if anyone wants to have a go or suggest how to go about % doing things in a less cumbersome way, please do. % % \item Parallel citations should be supported. % % \item Hereinafter references should be supported. % % \item There should be support for cross-referenced styles other % than the Blue Book. % % \item Cross-referencing to different chapters in the same book % should refer back to the first cite to the book, rather than % seeing each as a separate source. This is difficult, but % nothing is impossible. % % \item Internal sorting of the tables of references could be added. % % \item \BibTeX\ styles exporting in \LexiTeX\ format would now % allow full support for legal publications in \LaTeX. % % \item There should be more meaningful error messages. %\end{itemize} % \newpage % \pagenumbering{arabic} % \section{Introduction} % % This guide outlines the use of \LexiTeX, a suite of macros % for use with the \LaTeX\ typesetting system that automates % the formatting of cross-referenced citations in the style % specified by the so-called Blue Book.\lexicite{bluebook}{} % Using this package, it is possible to maintain a list % of cases, articles, books and statutes, and incorporate % these into the document in properly cross-referenced % footnotes using simple nickname flags. The list of % sources may be written into the document, or may be % included from a separate file of citations. % % This package is still under development. This means that % there are some citation forms that it cannot produce % automatically. It does not (or should not) mean that the % behaviour of the formatting engine is in any way % unstable or unpredictable. If you find a bug, please % inform me, and it will be dealt with as soon as possible. % The main citation forms that \LexiTeX\ cannot produce automatically % at present are parallel citations to court decisions, % and `hereinafter' short-forms. The latter is, at least % for U.S. materials, a minor drawback. The former is more % serious, and also more difficult to provide for. That % said, I do have strategies for providing both, and a future % release supporting both of these citation forms is planned. % I use \LexiTeX\ every % day in my own work; these enhancements {\em will\/} % be provided in due course. % % The ultimate aim in the development of this package is to allow % the integration of bibliographies of legal materials stored in \BibTeX\ % format into \LaTeX\ documents, following conventions similar % to those used in preparing ``conventional'' documents with % bibliographies. When this is achieved, it % will be possible for users to enjoy automated cross-referencing % facilities without any need to prepare citations specially for digestion % by \LexiTeX; the syntax for declaring citations, described % below, will become an interface syntax for transporting citation % details between \BibTeX\ and \LexiTeX. % % Even at present, for the user who has access to \LaTeX\ and % is willing to learn a new % method of entering citations, this package should make it % possible to produce a more professional memorandum with less % fuss, in the long run, than required using a straight word-processor. % % This guide contains basic instructions on the use of % \LexiTeX. Users who wish to know more about the inner % working of the macros should obtain a copy of this % guide that contains the commented listing of the code. % % \section{Entering citations} % % \subsection{Generally} % % Within a document, there are just two forms for entering % citations: a declaration form, and a nickname form. % A cite declaration feeds \LexiTeX\ the information it needs % to generate references to a particular source. % A nickname cite tells \LexiTeX\ to expand that citation % in the form appropriate to a particular place in the % document. Declarations take the form: % % \begin{quote} % {\tt\string\new\meta{style name}\{\meta{nickname}\}% % \meta{arguments\ldots}} % \end{quote} % % The various style names are defined in the file % {\tt lexicite.tex}. The citation style in which a cite % is declared determines % the typefaces used in various parts of its printed form, % the punctuation that appears between % its elements, and whether it will be handled (in % making short form citations and generating tables) as % a cite to an article, a book, a case or a statute. % You can edit the {\tt lexicite.tex} file to add % entries or change the behaviour of existing citations, % but the distributed file should cover most needs. % % The style name also determines the number of arguments % required by the declaration macro for cites of that % style. The maximum possible number of arguments (apart % from page references, about which more later) is six. % For example, the cite declaration {\tt\string\newarticle} % requires all six arguments (nickname, author, title, % source, page number and year), while the {\tt\string\newbook} % style takes four (nickname, author, title, year). % Study the examples in Table 1; % with a little practice, the entry of citations in \LexiTeX\ % format will become second nature, at least for common sources. % % One item worthy of special note is that citation styles which % make use of the second argument (that immediately following % the nickname) and the very last argument will automatically % eliminate any bridging punctuation pertaining to these arguments % if they are % missing. So you can equally well type: % \begin{quote} % \begin{verbatim} % \newanonbook{bloggs}{The Boop Diaries}{1994} %\end{verbatim} % \end{quote} % for which the author argument is unnecessary, or: % \begin{quote} % \begin{verbatim} % \newbook{bloggs}{}{The Boop Diaries}{1994} %\end{verbatim} % \end{quote} % for which the author argument is simply empty. % % Cite declarations can be included in your document in either of two % ways: directly in the text as above, or via list input. The only % difference between the two is that the latter are placed % within a {\tt lexilist} environment. Citations % declared within this environment may be entered directly in % the document, or may be included from another file using % {\tt\string\input}. All of the following entries are valid: % % \begin{quote} % \begin{verbatim} % \begin{lexilist} % \newbook{ramsrose}{J.M.~Ramseyer \& F.~Rosenbluth} % {Japan's Political Marketplace}{1993} % \end{lexilist} % % \begin{lexilist} % \input mycites.tex % \end{lexilist} % % \begin{lexilist} % \newbook{ramsrose}{J.M. Ramseyer \& F. Rosenbluth}{Japan's % Political Marketplace}{1993} % \input mycites.tex % \end{lexilist} %\end{verbatim} % \end{quote} % % You can use multiple input files, and you can have more than % one "lexilist" environment in a single document. % % Citations entered within a {\tt lexilist} environment do not % print themselves at that point, but their information is % stored for future use. You should therefore put the {\tt lexilist} % environment at the top of your document, to be sure \LaTeX\ knows % about your citations before it needs them. % % While citations can be declared in the text where they are % first used, % there are advantages to using the {\tt % lexilist} environment. Collecting citation details % in one place makes it easier to clip % citations from one document and include them in another. % It is also possible to use a common database of citations % for several documents.\footnote{Careful with this, % though; remember that each citation uses up a little % memory; \TeX\ will eventually run out of space. % On my system (NTT-J\TeX~1.52 compiled as a big \TeX) % the capacity appears to be about 1,000--1,500 citations. % Too small for a database, but large enough for most % individual documents.} % Some short forms change if two works % by the same author are cited in the document; list input assures % that these citations will be correct throughout the text. It is % also convenient to have all of your citations in one place; this % makes it easier to snip a citation out of one document and include % it in another. Nonetheless, there may be times when you % want to enter a citation declaration directly into your text. % You can. It will work exactly like a list input declaration, % but it will expand into the full form of the citation at the % point where it is entered. % % Nickname citations are entered in the following form: % % \begin{quote} % "\lexicite{"\meta{nickname}"}" % \end{quote} % % There may be times when you want to use a full-form % citation in a particular spot. This is permitted by % the Blue Book.% %\footnote{`\thinspace``{\em Supra}'' and ``hereinafter'' % {\em may} be used \ldots' (emphasis added). \lexicite{bluebook}+{22}.} % If you want to force a full-form citation, you can use % "\lexicitefull" instead of "lexicite". Otherwise the % reference will automatically shift to sort-form if % appropriate in the context. If you set the toggle % "\lexiforcefoots" at the top of your % document, \LexiTeX\ will create a footnote when it finds % a "\lexicite" command in the text, and place the % formatted citation inside it.\footnote{Remember, however, that an % explicit space should be placed after % the {\tt\string\lexicite} command and its arguments (if any) if a space should % follow it.} % % \subsection{Pinpointing references} % % Citations often refer to a particular page in a work, % and page references work differently for long- and short-form % citations. These differences are handled automatically % by \LexiTeX, drawing upon the style information contained in the % citation style used to create the original cite. To append % an additional page reference, just type a {\tt+} after % the \LexiTeX\ reference, followed by the page number % in squiggly braces. This works for initial declarations, % full-form nickname citations and short-form nickname citations % (But for initial declarations, please note % that the {\tt+} goes {\em after\/} the last argument % of the declaration): % % \begin{quote} % \begin{verbatim} % \newbook{walk}{}{Walker's Britain}{1992}+{126} % \end{verbatim} % \end{quote} % \begin{quote} % \begin{verbatim} % \lexicite{walk}+{126} % \end{verbatim} % \end{quote} % \begin{quote} % \begin{verbatim} % \lexicitefull{walk}+{126} % \end{verbatim} % \end{quote} % \subsection{Multiple page references} % % To add a reference to more than one page, the following % syntax is used: % % \begin{quote} % \begin{verbatim} % \lexicite{walk}++{{126}\& {132}} %\end{verbatim} % \end{quote} % The "++" tells \LexiTeX\ that plural page or section references % are called for. Page references themselves should be enclosed % within their own braces, and an outer set of braces must % enclose the group. Valid separators between individual % page or section references are "\&", "\," and "\dash". % These control characters should {\em always\/} be used % instead of raw punctuation; they are used in the production % of tables.\footnote{Actually, this only applies to statute % references, but life is simpler if you keep things uniform.} % % \subsection{``Advanced'' features} % % \subsubsection{Producing tables} % % Most articles do not include tables of cases and statutory % references, and law review articles seldom include a bibliography. % But if you wish to typeset a book, or if you must check % the citations for an extensive article against the original % sources, tables of cases and statutes are useful. % % \LexiTeX\ can generate tables of references % automatically. % The production of tables is a three-stage process. First, % the raw table data must be generated using \hbox{\LaTeX}. Then this % raw data is sorted and formatted using the "makeindex"% %\footnote{The {\tt makeindex} utility is \copyright{} % 1989 by Chen \& Harrison International Systems, Inc.; \copyright{} % 1988 by Olivetti Research Center; and \copyright{} % 1987 by Regents of the University of California. It is currently % maintained by Nelson Beebe, "beebe@math.utah.edu".} % utility. Finally, \TeX\ is run on the document again to % create the full text containing the finished tables. % % When the document is run through \TeX\ the first time, % the appropriate declarations must appear in the preamble % of the document (i.e. between {\tt\string\document\-style} % and {\tt\string\begin\{document\}}). The commands for % each type of table are: {\tt\string\make\-book\-table}, % {\tt\string\make\-article\-table}, {\tt\string\make\-case\-table}, % and {\tt\string\make\-statute\-table}. When \TeX\ is run % with these commands present in the preamble, files with % the respective extensions {\tt.btb}, {\tt.atb}, {\tt.ctb} and % {\tt.stb} will be produced. % These must then be processed into properly formatted % lists using {\tt makeindex}.% %\footnote{The documentation for % {\tt makeindex} will explain how it should be set % up for your system. On a UNIX or DOS installation, % the basic requirements are that the {\tt makeindex} % program be in your search path, and that the appropriate % environment variable (usually {\tt indexstyle}) be set---% % this tells {\tt makeindex} where to find the style % files that tell it exactly how to format the finished % table lists.} On a UNIX or DOS system you would type the % following for each type of table: % \begin{itemize} % \small % \item % {\tt makeindex -s lexibook.ist -o} \meta{file name}".bok" \meta{file name}".btb" % \item % {\tt makeindex -s lexiarti.ist -o} \meta{file name}".art" \meta{file name}".atb" % \item % {\tt makeindex -s lexicase.ist -o} \meta{file name}".cas" \meta{file name}".ctb" % \item % {\tt makeindex -s lexistat.ist -o} \meta{file name}".sta" \meta{file name}".stb" % \end{itemize} % You should then check to be sure the appropriate % command or commands among {\tt\string\print\-case\-table}, % {\tt\string\printstatutetable}, {\tt\string\print\-article\-table} and % {\tt\string\print\-book\-table} % are in the appropriate places in your document.% %\footnote{In other words, at the location where the relevant % table should appear.} % Run the document % through \LaTeX\ again, and the tables should appear in the printed % output. % To avoid typing the detailed commands required by {\tt makeindx}, % you might prefer to write a script or batch file for your % site that does this automatically for you. % % For books, articles and cases, only the full citation of the % work or source is written to the table file. For statutes, however, % \LexiTeX\ writes both the full citation of the statute and % any section reference that you have specified, as a % sub-entry. When the statute table is sorted, these entries % will be arranged in a column below the statute name. % This formatting can of course be altered by a wizard. % You may find that statute sections appear out of their % proper numerical order. This is because {\tt makeindx} % performs an alphabetical sort, in which 1's come first, % 2's come second, etc., regardless of the number of digits % which follow. Can't have everything. In these cases, % you need to rearrange the entries by hand before printing. % % \subsubsection{Selective printing} % % The simple syntax described so far is sufficient for most situations. % However, for some references---particularly references to % statutes---greater flexibility is required. \LexiTeX\ provides % three special characters that can be used to suppress printing % within a document. The characters, and their functions, are % as follows: % % \begin{description} % \item[\tt\string^] Putting a "^" at the start and end of a % piece of text within the pinpointing argument to a citation % causes that text to be printed only in the text, and only % when the citation is printed in full form; it will be % omitted from the tables when they are printed, and from % short-form citations. This is useful for including % explanatory comments on an individual's title, for example, % in an initial citation. It can also be used to prevent % subsections of a statute from being entered on the % tables. % % \item[\tt\string_] Putting a "_" at the start and end % of a piece of text within the pinpointing argument causes % that text to be printed only in the tables, but to be % omitted from the text itself. % % \item[\tt\string|] Placing a page or section number between % "|" characters inside a pinpointing reference to a {\em % statute\/} causes that section number to be suppressed % when the text is printed, but causes a full entry for % the citation, pinpointed to that page or section number, % to be written on the statute table raw data file. This % is useful as a way of coping with section ranges; \LexiTeX\ % does not know what the intervening section numbers are, % but using this feature you can tell it explicitly. % \end{description} % % It is also possible to suppress the printing of an entire citation % in the text % by placing a "*" character immediately after the citation. % This can be used to assure that a manually-typed citation % is correctly cross-referenced by later cites to the same % source. %\StopEventually{\printbooktable} % % \section{The Citation Engine: {\tt lexitex.sty}} % % \subsection{Initialization} % \subsubsection{Hello!} % To start things off on the right foot, we tell the world % who we are. % \begin{macrocode} %<*lexitex> %\ProvidesPackage{lexitex}[1994/12/07] %\ProvidesPackage{lexitexm}[1994/12/07] \NeedsTeXFormat{LaTeX2e}[1993/11/11] % \end{macrocode} % \subsubsection{Customizable text elements} % The user may wish to tailor the text contained in the % following control sequence definitions to suit their own % language and taste. % % \begin{macro}{\casetablename} % \begin{macro}{\statutetablename} % \begin{macro}{\articletablename} % \begin{macro}{\booktablename} % The use of these four % definitions is obvious. % \begin{macrocode} \def\casetablename{Table of Cases}% \def\statutetablename{Table of Statutes}% \def\articletablename{Table of Articles}% \def\booktablename{Table of Books}% % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\supra} % The following definition specifies the string used to refer to % a cite that occurs in a previous footnote, or in a preceding % citation to the same source within the same footnote. It is % not used in cross-referencing cases and statutes. The extra % internal braces only serve to limit the scope of % {\tt\string\em}. An italic space ("\/") is not added, since % this might be followed by a period. % \begin{macrocode} \def\supra {, {\em supra}}% % \end{macrocode} % \end{macro} % The {\tt\string\Id} macro defined here is used in referring to % immediately preceding works, in the same or in a preceding % footnote. If the context demands that {\em Id.} be lower case % when it occurs, the user can switch it to lower case by entering % {\tt\string\lowcase} immediately before an in-text citation % declaration or citation nickname. The lower case macro thus % invoked turns itself off after {\em id.} has printed, so no % grouping is required. % \begin{macrocode} \def\Id{{\em\@law@lettercase Id.}}% % \end{macrocode} % These two tokens hold the text used to indicate the note or % page number where a previous reference occurs. These are only % used in short-form citations. % \begin{macrocode} \newtoks\@ltok@userconetop% \newtoks\@ltok@userconetopplural% \newtoks\@ltok@userptop% \newtoks\@ltok@useratbridge% \newtoks\@ltok@useratbridgeplural% \newtoks\@ltok@infoot \@ltok@infoot={\ note\ } \newtoks\@ltok@onpage \@ltok@onpage={\ page\ } % \end{macrocode} % The following tokens are used in making proof sheets. % Change the content of these to taste, {\em except % for\/} "\@ltok@citeforproof" and "\@ltok@otherciteforproof", % which mustn't be changed. % \begin{macrocode} \newtoks\@ltok@proofcitelast \@ltok@proofcitelast{{Editor, publisher and stuff, 1994}} \newtoks\@ltok@proofpage \@ltok@proofpage{{12345}} \newtoks\@ltok@proofciteone \@ltok@proofciteone{{Source}} \newtoks\@ltok@prooftitle \@ltok@prooftitle{{Title of work}} \newtoks\@ltok@proofauthor \@ltok@proofauthor{{Author's name}} % \end{macrocode} % \subsubsection{User selectable switches} % The Blue Book\lexicite{bluebook}{} allows us to refer % to statutes in a long form or a short form in subsequent % references. The long form consists of the name of the Act (if % any) plus its source details and the section number. The short % form consists of the source details alone.\footnote{{\em See} % \lexicite{bluebook}+{25}.} % I'm all in favour % of saving ink; the default is for short form statute citations. % You can have long form subsequent cites by setting % "\statuteverboseon" at the top of your document. If you need % some other form, let me know; statutes are complex, and rather % than trying to do everything from the get-go, this really has % to be demand led. % \begin{macrocode} \newif\if@law@statuteverbose \def\statuteverboseon{\@law@statuteverbosetrue} \def\statuteverboseoff{\@law@statuteverbosefalse} \statuteverboseoff % \end{macrocode} % \begin{macro}{\lexiforcefoots} % This fun little item is used to toggle the "\lexicite" % macros to create a footnote if none was typed literally % into the text. Great finger-saver for shortie footnotes. % Conceived on a whim, implementing this turned out to be % non-trivial. I hope you find it useful! % \begin{macrocode} \newif\if@law@lexiforcefoots \def\lexiforcefoots{\global\@law@lexiforcefootstrue} % \end{macrocode} % \end{macro} % \subsubsection{Alternative shorthanding configurations} % The following changes make the "_", "^" and "|" characters active, % but set them to expand into the form which is normally expected % of them in English text. % Use of these shorthand characters is explained in the {\sl % User's Guide}. % The reason this is done globally is that these are used in shorthand % formatting expressions that occur mostly in footnotes. In % standard \LaTeX, footnote text is read in as an argument to the % {\tt\string\footnote} command. It is therefore impossible for a % \LexiTeX{} citation macro to redefine the character as active before % it is read by \hbox{\TeX}. So if we don't set them as active now, % we can't. This seems to live with {\tt index.sty}, but I'm % told it blows up with {\tt german.sty}. If you absolutely % positively have to avoid having these characters set active,% %\footnote{This manual and code readout cannot be printed with % these shorthand characters in force, for example.} % you can strip this file using the % "noshorthanding" option. % When \LexiTeX\ is stripped in this way, you can use % {\tt\string\TB} (table only) instead of % {\tt\string_}, {\tt\string\TX} (text only) instead of {\tt\string^}, and % {\tt\string\CT} (clone in table) instead of {"|"}. It's a lot % uglier that way, and harder to read, but it should work. % If anyone has suggestions % for how to fix this better, I'm on "fbennett@clus1.ulcc.ac.uk" . % \begin{macrocode} %<*!noshorthanding> \ifcat\noexpand_\noexpand~\else \global\catcode`\_=13 \global\let_\sb \fi \ifcat\noexpand^\noexpand~\else \global\catcode`\^=13 \global\let^\sp \fi \ifcat\noexpand|\noexpand~ \else \global\edef\@boondoggle{|} \global\catcode`\|=13 \global\edef|{\@boondoggle} \fi % % \end{macrocode} % The shorthanding definitions have to behave differently % in different contexts. The definitions shown here are all pretty % nearly self-explanatory. Some redefinitions are contained % elsewhere in the code, and are documented where they occur. % \begin{macrocode} \gdef\@law@barkill{\def_##1_{}\def|##1|{}\def^{}} \gdef\@law@barnil{\def_{}\def^##1^{}\def|{}} \gdef\@law@barinfull{\def^{}} \gdef\@law@barinshort{\def^##1^{}} % \end{macrocode} % The following definitions simply replicate those used for % shorthanding; they will only be valid if they are asked for % when this file is run through {\tt docstrip}. This file must % be stripped for one or the other, but cannot be stripped for % both. Again, if anyone has any ideas \ldots % \begin{macrocode} %<*noshorthanding> \gdef\@law@barkill{\def\TB##1\TB{}% \def\CT##1\CT{}% \def\TX{}}% \gdef\@law@barnil{\def\TB{}% \def\TX##1\TX{}% \def\CT{}}% \gdef\@law@barinfull{\def\TX{}}% \gdef\@law@barinshort{\def\TX##1\TX{}} % % \end{macrocode} % \changes{2.0g}{94/08/12}{Added {\tt\protect\string\protect\bridges} macro to % allow users to specify pinpoint bridges that diverge from the % cite style default.} % \begin{macrocode} \def\bridges#1#2#3#4#5{% \@ltok@userconetop{#1}% \@ltok@userconetopplural{#2}% \@ltok@userptop{#3}% \@ltok@useratbridge{#4}% \@ltok@useratbridgeplural{#5}% } % \end{macrocode} % \subsubsection{Miscellaneous other macros} % Sometimes it might be nice to avoid using {\tt--} for some % reason, so a macro is defined here. Same thing for exclamation % points. One possible use for the latter is to avoid errors % when an exported table is sorted by {\tt makeindex}. % \begin{macrocode} \def\dash{--} \def\exclaim{!}% % \end{macrocode} % The {\tt\string\Id} macro contains its own period. Therefore a % period supplied by the user becomes redundant. This macro is % redefined to gobble this extra period when necessary. % \begin{macrocode} \def\@law@gobble{} % \end{macrocode} % If you think \LexiTeX\ is spiffy, you might want to adorn your % documents with a logo, so one is defined here. It is % {\tt\string\protect}ed just like the \LaTeX\ logo. % \begin{macrocode} \def\p@LexiTeX{{\reset@font\rm\ \unskip\hbox{L% \kern-.06em\hbox{\sc e}% \kern-.05em\hbox{\sc x}% \kern-.05em\lower.65ex\hbox{I}% \kern-.18emT% \kern-.1667em\lower.65ex\hbox{E}% \kern-.125emX}}}% \def\LexiTeX{\protect\p@LexiTeX}% \def\p@LexiBib{{\reset@font\rm\ \unskip\hbox{L% \kern-.06em\hbox{\sc e}% \kern-.05em\hbox{\sc x}% \kern-.05em\hbox{\sc i}% \kern-.06em{\sc B}% \kern-.05em\hbox{\sc i}% \kern-.05em{\sc b}}}}% \def\LexiBib{\protect\p@LexiBib}% % \end{macrocode} % \subsubsection{New environment} % There is just one new environment in \LexiTeX, and all it does % is set the list-input toggle to true, so that input citations % will feed into memory but not print. % \begin{macrocode} \newenvironment{lexilist}% {\@law@listinputtingtrue}{\@law@listinputtingfalse} % \end{macrocode} % \subsubsection{Token registers} % The following are used as temporary token registers in various % places. % \begin{macrocode} \newtoks\@ltok@a \newtoks\@ltok@b \newtoks\@ltok@argtwo \newtoks\@ltok@pagesstring % \end{macrocode} % The following token registers are used for temporary storage of % typeface information. % \begin{macrocode} \newtoks\@ltok@authormainface \newtoks\@ltok@authoroptionface \newtoks\@ltok@titlemainface \newtoks\@ltok@titleoptionface \newtoks\@ltok@citefirstmainface \newtoks\@ltok@citefirstoptionface \newtoks\ltokspecialface % \end{macrocode} % One token register is needed to store the name of the current cite type % (as declared using {\tt\string\newcitestyle} in the {\tt % lexicite.tex} file). With this string in hand, all of the % typeface and punctuation bridge information can be recovered % for that type of citation. % \begin{macrocode} \newtoks\@ltok@citetype% % \end{macrocode} % Tokens to store info on whether a cite is in a footnote or in % the main text, and the name of the cite style, in case we % need it. % \begin{macrocode} \newtoks\@ltok@whereitsat \newtoks\@ltok@stylename % \end{macrocode} % Ho-hum. Now we're going to need a bunch of token registers to % stash the information for a cite. Token registers have to be % used in processing, in order to provide expansion control. % \begin{macrocode} \newtoks\@ltok@nickname \newtoks\@ltok@author \newtoks\@ltok@name \newtoks\@ltok@citefirst \newtoks\@ltok@citepage \newtoks\@ltok@citelast \newtoks\@ltok@pageorfootno \newtoks\@ltok@hereinafter \newtoks\@ltok@bigsourcecite \newtoks\@ltok@bigsourcepage % \end{macrocode} % We also need token registers for citation bridge information. % \begin{macrocode} \newtoks\@ltok@atot \newtoks\@ltok@ttocone \newtoks\@ltok@conetop \newtoks\@ltok@conetopplural \newtoks\@ltok@ptop \newtoks\@ltok@ptoctwo \newtoks\@ltok@atbridge \newtoks\@ltok@atbridgeplural % \end{macrocode} % % \begin{macrocode} \newtoks\@ltok@plistmacro % \end{macrocode} % A counter is required to keep track of the number of cites in a % footnote, and to store the number that occurred in the previous % footnote. % \begin{macrocode} \newcounter{citesinfoot} \newcounter{citeslastfoot} % \end{macrocode} % \subsubsection{If initializations} % We need a toggle so we can turn the print routine on and off; % this is necessary for list inputting, and for making phantom % references to sources in order to handle weird citation forms. % \begin{macrocode} \newif\if@law@printcite % \end{macrocode} % The next one is used by the list-input environment. % \begin{macrocode} \newif\if@law@listinputting % \end{macrocode} % The next if will be used to toggle the print routine between % long and short citation forms. % \begin{macrocode} \newif\if@law@longcite % \end{macrocode} % This will tell us whether we are in a footnote or not. % \begin{macrocode} \newif\if@law@infoot % \end{macrocode} % The next "\if" will let us know if the same work was cited % immediately before the current cite, and if so, whether % we should pay any attention to a page reference, if given. % These are adjusted by % {\tt\string\@law@justabovecheck}. % \begin{macrocode} \newif\if@justabove \newif\if@l@quiteexact % \end{macrocode} % The next condition will control the way print output is done % in short citation forms; it should set to false for articles % and books, and to true for cases and statutes. % \begin{macrocode} \newif\if@nosupra % \end{macrocode} % The next is used to signal the presence of {\tt ++} % as the argument linking a reference to a page/section number argument. % This toggles plural bridges on, and % tells the file output routine that, for statutes, each section number % should be attached to a complete copy of the citation % information. These copies are later reassembled in a set of % table entries by {\tt makeindex}. % \begin{macrocode} \newif\if@law@multipages % \end{macrocode} % A single "\if" controls whether a table of cases or statutes is % exported. % \begin{macrocode} \newif\if@writecasetable \newif\if@writestatutetable \newif\if@writearticletable \newif\if@writebooktable % \end{macrocode} % \subsubsection{Macro initializations} % The following is a grab-bag of small macros with % simple functions. There is more to say about what % other macros use them for than about they themselves, % so I've put them in the front matter of the code. % % First is a little something to force a lowercase {\em id.} if % necessary. The operation of {\tt\string\normcase} is % obvious enough; it defines the case-switching macro % to a no-op. \verb+\lowcase+ works by setting % the case toggle to force a lowercase letter. The % use of \verb+\aftergroup+ allows everything to be turned back % on without losing the lowercase letter. This was % designed by trial and error; there may be a better way. % \begin{macrocode} \def\normcase{\def\@law@lettercase{}} \def\lowcase{\def\@law@lettercase##1{{\aftergroup\normcase\lowercase{##1}}}} \normcase % \end{macrocode} % The \LexiTeX{} nickname macros are now kept out of the name % space by executing them via \verb+\csname\endcsname+, % and adding a prefix that makes the macro inaccessible % by direct reference within the document. This change % was recommended by a user---sorry out there, I can't % remember who! Note that any nickname can now contain % numbers and other stuff, which is handy for cases, which % should be organized according to deciding court and date. % If in-text references are being "forced" into footnotes, % the footnote toggles are set to true here; the footnote % itself is created later, after any optional arguments have % been gobbled. Note that footnote forcing will % only take effect for "\lexicite" citations, not for % in-text declarations. We need a new counter for footnotes, % so that we can keep track of footnote numbers while processing % forced footnotes outside of the footnote environment. % \changes{2.0e}{6 August 1994}{Added the {\tt\protect\string\protect\lexibib} % code and related macros, which allow selective printing of % coments, holdings, questions and fact patterns direct from % a \LexiBib database. A veritable production line for % casebooks now---if we can overcome the 3,000 character limit % of \BibTeX!} % \changes{2.0f}{94/08/11}{Added code for leading volume numbers.} % \begin{macrocode} \newcount\c@law@footnote% \newif\if@law@forcing% \def\volno{}% % \end{macrocode} % % \begin{macro}{\lexicite} % \begin{macro}{\@lexicite} % \begin{macro}{\lexicitefull} % \begin{macro}{\@lexicitefull} % These constitute the user interface for invoking citations. % \begin{macrocode} \def\lexicite{\@ifnextchar:{\@lexicite}{\@lexicite::}}% % \end{macrocode} % % \begin{macrocode} \def\@lexicite:#1:#2{% \def\volno{#1\ }% \@ifundefined{@lnick@#2}{% \expandafter\def\csname @lnick@#2\endcsname{{\small\bf }}}% {\relax}% \if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi% \global\c@law@footnote\c@footnote% \if@law@infoot% \global\@law@forcingfalse% \else% \if@law@lexiforcefoots% \@law@footnoteprefix% \advance\c@law@footnote by 1% \global\@law@forcingtrue% \else% \fi% \fi% \csname @lnick@#2\endcsname}% % \end{macrocode} % % \begin{macrocode} \def\lexicitefull{\@ifnextchar:{\@lexicitefull}{\@lexicitefull::}}% % \end{macrocode} % % \begin{macrocode} \def\@lexicitefull:#1:#2{% \def\volno{#1\ } \@ifundefined{@lnick@#2}{% \expandafter\def\csname @lnick@#2\endcsname{{\small\bf }}}% {\global\@law@longcitetrue}% \if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi% \if@law@infoot% \global\c@law@footnote\c@footnote% \else\if@law@lexiforcefoots% \@law@footnoteprefix% \advance\c@law@footnote by 1% \global\@law@forcingtrue% \fi% \fi\csname @lnick@#1\endcsname}% % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\lexibib} % This is used bye \LexiBib{} to declare citations in a {\tt lexilist} % environment. Use of a single macro permits % {\tt\string\theholding} and its friends to work more simply. % \begin{macrocode} \def\lexibib#1{\csname new#1\endcsname}% % \end{macrocode} % \end{macro} % % \begin{macro}{\@law@showholding} % \begin{macro}{\@law@hideholding} % \begin{macro}{\holding} % \begin{macro}{\theholding} % These macros allow database storage of itemized details of a % case holding, and their recall using {\tt\string\theholding}. % \begin{macrocode} \def\@law@showholding#1{\def\holding{\@law@hideholding} \begin{enumerate}#1\end{enumerate}} % \end{macrocode} % % \begin{macrocode} \def\@law@hideholding#1{} % \end{macrocode} % % \begin{macrocode} \def\holding{\@law@hideholding} % \end{macrocode} % % \begin{macrocode} \def\theholding{\def\lexibib##1##2##3##4##5##6##7{% \edef\@law@temp{\the\@ltok@nickname} \def\@law@temptwo{##2} \ifx\@law@temp\@law@temptwo\def\holding{\@law@showholding} \else\def\holding{\@law@hideholding}\fi} \@input {\jobname.bbl}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\@law@showcomment} % \begin{macro}{\@law@hidecomment} % \begin{macro}{\comment} % \begin{macro}{\thecomment} % These macros allow database storage of % comments on a case, % and their recall using {\tt\string\thecomment}. % \begin{macrocode} \def\@law@showcomment#1{\def\comment{\@law@hidecomment} #1} % \end{macrocode} % % \begin{macrocode} \def\@law@hidecomment#1{} % \end{macrocode} % % \begin{macrocode} \def\comment{\@law@hidecomment} % \end{macrocode} % % \begin{macrocode} \def\thecomment{\def\lexibib##1##2##3##4##5##6##7{% \edef\@law@temp{\the\@ltok@nickname} \def\@law@temptwo{##2} \ifx\@law@temp\@law@temptwo\def\comment{\@law@showcomment} \else\def\comment{\@law@hidecomment}\fi} \@input {\jobname.bbl}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\@law@showquestions} % \begin{macro}{\@law@hidequestions} % \begin{macro}{\questions} % \begin{macro}{\thequestions} % These macros allow database storage of itemized questions on a case, % and their recall using {\tt\string\thequestions}. % \begin{macrocode} % \begin{macrocode} \def\@law@showquestions#1{\def\questions{\@law@hidequestions} \begin{enumerate}#1\end{enumerate}} % \end{macrocode} % % \begin{macrocode} \def\@law@hidequestions#1{} % \end{macrocode} % % \begin{macrocode} \def\questions{\@law@hidequestions} % \end{macrocode} % % \begin{macrocode} \def\thequestions{\def\lexibib##1##2##3##4##5##6##7{% \edef\@law@temp{\the\@ltok@nickname} \def\@law@temptwo{##2} \ifx\@law@temp\@law@temptwo\def\questions{\@law@showquestions} \else\def\questions{\@law@hidequestions}\fi} \@input {\jobname.bbl}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\@law@showfacts} % \begin{macro}{\@law@hidefacts} % \begin{macro}{\facts} % \begin{macro}{\thefacts} % These macros allow database storage of the facts of a case, % and their recall using {\tt\string\thefacts}. % \begin{macrocode} \def\@law@showfacts#1{\def\facts{\@law@hidefacts} #1} % \end{macrocode} % % \begin{macrocode} \def\@law@hidefacts#1{} % \end{macrocode} % % \begin{macrocode} \def\facts{\@law@hidefacts} % \end{macrocode} % % \begin{macrocode} \def\thefacts{\def\lexibib##1##2##3##4##5##6##7{% \edef\@law@temp{\the\@ltok@nickname} \def\@law@temptwo{##2} \ifx\@law@temp\@law@temptwo\def\facts{\@law@showfacts} \else\def\facts{\@law@hidefacts}\fi} \@input {\jobname.bbl}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % The following piece of nasty business adds a zeroed counter % to the front of the \LaTeX\ footnote routine, so that we can % keep track of how many cites there are in a footnote. % \begin{macrocode} \let\@law@foothold=\footnote \def\footnote#1{\@law@footnoteprefix\@law@foothold{#1}% \global\@law@infootfalse}% \def\@law@footnoteprefix{\global\@law@infoottrue% \ifnum\the\c@citesinfoot=1\relax% \let\@law@lastcite\@law@currentcite% \else% \def\@law@lastcite{\@dummy}% \fi% \setcounter{citesinfoot}{0}} % \end{macrocode} % The {\tt *.ist} files that accompany {\tt lexitex.sty} use % \verb+\leaderfill+ instead % of \verb+\dotfill+. When I get around to changing them, this % can be cut. % \begin{macrocode} \let\leaderfill=\dotfill % \end{macrocode} % We need to initialize the list macro used as a workspace % by the list macro handlers. % \begin{macrocode} \def\@law@templistmacro{} \def\@law@tempplistmacro{} % \end{macrocode} % These macros are used for \verb+\if+-branching in various % formatting routines. % \begin{macrocode} \def\@law@case{case} \def\@law@statute{statute} \def\@law@article{article} \def\@law@book{book} % \end{macrocode} % \subsection{Main macros} % \subsubsection{Utility macros} % This section contains larger macros that perform major % tasks and smaller bits of code that are complex in their operation. % \begin{macro}{\@law@unstashparas} % When this is implemented, the above chain of "futurelet" macros % will be linked to this "\@law@unstashparas" routine, which fetches % any parallel items, and then (in "\@law@setup") performs the restash % of the citation if necessary. % \begin{macrocode} %<*parabeta> [HEREIN GOES THE PARALLEL CITATION UNPACKING STUFF] [NOTE THAT THIS SHOULD RECYCLE TO ARGSCHECK WHEN DONE] [THIS CAN USE TEMPLISTMACRO, BECAUSE EVERYTHING HAS BEEN TRANSFERRED TO REGISTERS BY THIS POINT] % % \end{macrocode} % \end{macro} % This is a rough set of routines; if anyone has a % suggestion on how to more elegantly clean % most of \LaTeX's control sequences for export, % I would be most grateful to hear from them. % The effect of these routines is to convert % control sequences % that might be sent to the output files into % harmless strings. This is necessary because % the file cannot be written at the time \verb+\@law@cleanup+ % is called; the page references would be incorrect. % The definitions are local; bracketing the clean command and % its arguments will leave the cleaned text in the macro, % but restore command strings to operation when \LaTeX\ % passes out of the current group. % The "\ifx" condition at the start is meant to catch empty % strings fed to the routine. Without it, things can blow up. % The use of "\@law@barnil" (somewhere in the middle) makes the vertical-bar % character turn wimpish and disappear, which is what we want. % Otherwise it prints weird stuff when it is fed back in through % the external table. % \begin{macrocode} \gdef\@law@clean#1#2{% \def\protect##1{\string##1\space}% \xdef\@law@cleantemp{\the#1}% \ifx\@law@cleantemp\empty% \edef#2{}% \else% %<*!noshorthanding> \def^{\string^}% \def_{\string_}% % \@law@barnil% \def\exclaim{\string\exclaim}% \def\hbox{\string\hbox}% \def\&{\string\&}\def\%{\string\%}% \def\hskip{\string\hskip}% \def\jintercharskip{\string\jintercharskip}% \def\char{\string\char}% \def~{\string~}\def\/{\string\/}% \def\\{\string\\}\def\ {\string\ }\def\sc{\string\sc\space}% \def\rm{\string\rm\space}\def\bf{\string\bf\space}% \def\em{\string\em\space}% \def\={\string\=}% \def\`{\string\`}\def\'{\string\'}% \def\^{\string\^}\def\"{\string\"}\def\~{\string\~}% \def\.{\string\.}\def\u{\string\u}\def\v{\string\v}% \def\H{\string\H\space}\def\t{\string\t\space}\def\c{\string\c\space}% \def\d{\string\d\space}\def\b{\string\b\space}\def\oe{\string\oe\space}% \def\ae{\string\ae\space}\def\aa{\string\aa\space}\def\o{\string\o\space}% \def\l{\string\l\space}\def\ss{\string\ss\space}% \def\OE{\string\OE\space}\def\AE{\string\AE\space}% \def\AA{\string\AA\space}% \def\O{\string\O\space}\def\L{\string\L\space}% \def\dag{\string\dag\space}\def\ddag{\string\ddag\space}% \def\S{\string\S\space}% \def\P{\string\P\space}% \def\TeX{\string\TeX\space}\def\LaTeX{\string\LaTeX\space}% \def\LexiTeX{\string\LexiTeX\space}% \def\BibTeX{\string\BibTeX\space}\def\-{\string\-}% \xdef\@law@temp{\the#1}% \xdef#2{\expandafter\expandafter\expandafter\@gobble\expandafter% \string\csname\@law@temp\endcsname}% \fi} % \end{macrocode} % This routine runs the cleaning routine on every % token register that we want to send to the external % files. The result is stored in a macro, since we % need the registers for the next citation, and because it % will be safe to fully expand the contents after cleaning. % \begin{macrocode} \def\@law@cleanup{% \@law@clean\@ltok@authormainface\@law@authormainfacetemp% \@law@clean\@ltok@authoroptionface\@law@authoroptionfacetemp% \@law@clean\@ltok@author\@law@authortemp% \@law@clean\@ltok@titlemainface\@law@titlemainfacetemp% \@law@clean\@ltok@titleoptionface\@law@titleoptionfacetemp% \@law@clean\@ltok@argtwo\@law@argtwotemp% \@law@clean\@ltok@name\@law@nametemp% \@law@clean\@ltok@citepage\@law@citepagetemp% \@law@clean\@ltok@citefirstmainface\@law@citefirstmainfacetemp% \@law@clean\@ltok@citefirstoptionface\@law@citefirstoptionfacetemp% \@law@clean\@ltok@citefirst\@law@citefirsttemp% \@law@clean\@ltok@conetop\@law@conetoptemp% \@law@clean\@ltok@citelast\@law@citelasttemp% \@law@clean\@ltok@ptop\@law@ptoptemp} % \end{macrocode} % \subsubsection{Declaration of citation types} % This section contains macros used in creating the citation % declaration macros actually entered in the document by the user. % \paragraph{{\tt @newcite} and its friends} % The following macros are used to define the macro % suites that relate to particular citation types. % These are normally invoked by entries in the {\tt lexicite.tex} % file, but the \verb+\newcitestyle+ macro is accessible % within the document as well. % The \verb+\newcitestyle+ macro expects the following arguments: % \begin{enumerate} % \item the nickname of the citation style to be created; % \item a list of typeface and cite type options, in the % syntax required by \verb+\@newciteoptions+; % \item a list of cite bridges, in the syntax required % by \verb+\@newcitebridges+; % \item an integer giving the number of arguments the % finished cite-generation macro will accept; and % \item an argument consisting of a balanced list of six arguments % indicating which of the six possible \LexiTeX\ arguments % will be used. % \end{enumerate} % The last two of these are fed to \verb+\newcommand+ as formatting % arguments in the creation of citation style macros. % In operation, the token register assignments % performed by \verb+\@newcitebridges+ and\verb+\@law@parsefaces+ % are memorized by freezing them in macros whose names are % derived from the name of the citation style. The freezing % operation is carried out by a list of token assignments % within the storage macros. The macros are \verb+\xdef+ed, % but the expansion of everything % except the existing contents of the registers (inserted % at one level of expansion using \verb+\the+) is prevented % with \verb+\noexpand+s. The % macro containing the faces is created inside \verb+\newcitestyle+ % itself to save an argument position in the definition of % \verb+\@law@parsefaces+; we've used up seven, and there are % only two to go. This could be done with list % macros as well, but this method probably runs a little % faster because it does the job directly. The trade-off % is that the \meta{cite type name}{\tt faces} macros % contain a lot of non-informative text % (the names of the token registers); but there are not % many citation types, so it is probably worth the cost. % in memory. % % Note that as of this release, citation declarations % defined with \verb+\newcitestyle+ {\em always\/} begin % with \verb+\new+. This will help simplify the integration % of \BibTeX\ and \LexiTeX. % \begin{macrocode} \def\newcitestyle#1#2#3#4#5{% \@newcitebridges#1#3% \expandafter\@law@parsefaces#2% \expandafter\xdef\csname#1faces\endcsname{% \noexpand\global\noexpand\@ltok@authormainface\noexpand{% \the\@ltok@authormainface\noexpand}% \noexpand\global\noexpand\@ltok@authoroptionface\noexpand{% \the\@ltok@authoroptionface\noexpand}% \noexpand\global\noexpand\@ltok@titlemainface\noexpand{% \the\@ltok@titlemainface\noexpand}% \noexpand\global\noexpand\@ltok@titleoptionface\noexpand{% \the\@ltok@titleoptionface\noexpand}% \noexpand\global\noexpand\@ltok@citefirstmainface\noexpand{% \the\@ltok@citefirstmainface\noexpand}% \noexpand\global\noexpand\@ltok@citefirstoptionface\noexpand{% \the\@ltok@citefirstoptionface\noexpand}% \noexpand\global\noexpand\@ltok@citetype\noexpand{% \the\@ltok@citetype\noexpand}}% \expandafter\newcommand\csname new#1\endcsname[#4]% {\@newcite{#1}#5}} % \end{macrocode} % The following are parsing routines that are called by \verb+\newcitestyle+. % In \verb+\@law@parsefaces+, the seven arguments are the string of letters % in the second argument of \verb+\newcitestyle+. % This function has been drastically simplified over % the first release. I should have done % it this way in the first place and saved myself a lot of % aggravation. The code should run a lot faster to boot. % \begin{macrocode} \def\@law@parsefaces#1#2#3#4#5#6#7{% \@law@parseoneoption\@ltok@authormainface#1% \@law@parseoneoption\@ltok@authoroptionface#2% \@law@parseoneoption\@ltok@titlemainface#3% \@law@parseoneoption\@ltok@titleoptionface#4% \@law@parseoneoption\@ltok@citefirstmainface#5% \@law@parseoneoption\@ltok@citefirstoptionface#6% \@law@parselastoption\@ltok@citetype#7} % \def\@law@parseoneoption#1#2{% \if#2s\global#1{\sc}\fi% \if#2i\global#1{\em}\fi% \if#2b\global#1{\bf}\fi% \if#2r\global#1{\rm}\fi% \if#2S\global#1{\sc}\fi% \if#2I\global#1{\em}\fi% \if#2B\global#1{\bf}\fi% \if#2R\global#1{\rm}\fi} % \def\@law@parselastoption#1#2{% \if#2a\global#1{article}\fi% \if#2b\global#1{book}\fi% \if#2c\global#1{case}\fi% \if#2s\global#1{statute}\fi% \if#2A\global#1{article}\fi% \if#2B\global#1{book}\fi% \if#2C\global#1{case}\fi% \if#2S\global#1{statute}\fi} % \end{macrocode} % Bridges are stored literally, without parsing, so it's % easy to stash them directly in a single macro that % is fed the arguments. The assignments here are stored % by the same method outlined in the description of % \verb+\newcitestyle+, above. % \changes{2.0h}{94/11/22}{Added a set of token registers (c through % j), used in the newcitebridges macro. Initial storage, with the % scope of the xdef contained in that macro, to token registers % prevents expansion. Corrects a bug that arose with the use of % makestatutetable etc with the newly reorganized storage scheme of % lexitex.sty.} % \begin{macrocode} \newtoks\@ltok@c% \newtoks\@ltok@d% \newtoks\@ltok@e% \newtoks\@ltok@f% \newtoks\@ltok@g% \newtoks\@ltok@h% \newtoks\@ltok@i% \newtoks\@ltok@j% \def\@newcitebridges#1[a]#2[t]#3[c]#4[p]#5(pl)#6[rp]#7[e]:[id]#8(pl)#9[xrf]{% \@ltok@c{#2}% \@ltok@d{#3}% \@ltok@e{#4}% \@ltok@f{#5}% \@ltok@g{#6}% \@ltok@h{#7}% \@ltok@i{#8}% \@ltok@j{#9}% \expandafter\xdef\csname#1bridges\endcsname{% \noexpand\global\noexpand\@ltok@atot\noexpand{\the\@ltok@c\noexpand}% \noexpand\global\noexpand\@ltok@ttocone\noexpand{\the\@ltok@d\noexpand}% \noexpand\global\noexpand\@ltok@conetop\noexpand{\the\@ltok@e\noexpand}% \noexpand\global\noexpand\@ltok@conetopplural\noexpand{\the\@ltok@g\noexpand}% \noexpand\global\noexpand\@ltok@ptop\noexpand{\the\@ltok@f\noexpand}% \noexpand\global\noexpand\@ltok@ptoctwo\noexpand{\the\@ltok@h\noexpand}% \noexpand\global\noexpand\@ltok@atbridge\noexpand{\the\@ltok@i\noexpand}% \global\@ltok@atbridgeplural\noexpand{\the\@ltok@j\noexpand}}}% % \end{macrocode} % \subsubsection{Declaration of citation nicknames} % The following macros are called by the macros generated % by the \verb+\newcitestyle+ macro and its arguments. % Their effect is to create nickname macros which can then % be called by the user with the \verb+lexicite+ and % \verb+\lexicitefull+ commands, with the nickname as % a single argument in braces. % This macro is called by % \verb+\new+\meta{citation type name}. While this macro always takes % seven arguments, some of these may be masked off % from the user, if fewer than the full possible six % arguments were called for in the final argument fed % to \verb+\newcitestyle+ in creating the particular % \verb+\new+\meta{citation type name} macro that is % doing the calling. The arguments are there, the user just % can't put anything into them.\\ % The \verb+\@law@authortracing+ % macro is actually just a temporary macro; I gave it a % descriptive name because it was a struggle to keep my % head around what it does as I was programming this. % What happens is that a token assignment of the % author's name followed by a trip to the cleaning routine % is used to store a harmless string consisting of the % entire contents of the author's name field in the % \verb+\@law@authortracing+ macro. Then this {\em name\/} % is defined as a macro, expanding to {\tt 1} or {\tt 2}, % depending on whether it has been defined once already. % The macro may look something % like \verb+\Jayeff Huggins~Jr.+. Drastic, but effective. % Try doing that with a WordPerfect macro \ldots % \changes{2.0g}{94/08/12}{Added new if statement, % {\tt\protect\string\protect\if@law@specialbridges}, to indicate whether % a special bridge had been noticed before restash by % {\tt\protect\string\protect\@law@unstasheverything}.} % \begin{macrocode} \newif\if@law@specialbridges% \def\@newcite#1#2#3#4#5#6#7{% {\@ltok@a={#3}\@law@clean\@ltok@a\@law@temp \expandafter\ifx\csname\@law@temp\endcsname\relax% \expandafter\expandafter\expandafter\xdef\expandafter% \csname\@law@temp\endcsname{1}% \else% \expandafter\expandafter\expandafter\xdef\expandafter% \csname\@law@temp\endcsname{2}% \fi}% % \end{macrocode} % The \verb+\@law@stasheverything+ macro creates the % list macro that can be used to retrieve all citation % details at a later point in the document. \verb+\@law@makecitenick+ % creates the short macro that knows how to unstash the stored % information. Note that this is where things end % if we are inside the \verb+lexilist+ environment.\footnote{% % The previous release used a {\tt\string\@law@stashinfo} macro % that % took nine arguments. The last two were just % toggles, in effect, for the creation of a long- and a % short-form nickname macro. Passing the information in % this way required the definition of two separate invocation % macros, one for full-form citing and one for short-form % citing. % This was messy. We now do all of this with % true toggles that change the behaviour of a single % set of routines. This means: % \begin{itemize} % \item We don't need two macros; and % \item The stash routines can be included in {\tt\string\@newcite} % itself---information needn't be passed through macro arguments % at all, which helps speed things up. % \end{itemize} % We have to start by emptying the contents of the temporary % list macro; a beta version didn't do this, and loading cites % took an amazingly long time. I had problems with ``{\tt TeX capacity % exceeded}'' messages, and {\tt\string\tracingmacros=2} showed that every % cite was a stack containing the desired cite---and every preceding % citation as well!} % \changes{2.0g}{94/08/12}{Added conditional code for user % bridges to {\tt\protect\@newcite}.} % \begin{macrocode} \def\@law@templistmacro{}% \def\@law@tempplistmacro{}% \xdef\@law@temp{\the\@ltok@useratbridgeplural}% \ifx\@law@temp\empty% \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \else% \@law@addtoken\@ltok@userconetop\tocitelist% \@law@addtoken\@ltok@userconetopplural\tocitelist% \@law@addtoken\@ltok@userptop\tocitelist% \@law@addtoken\@ltok@useratbridge\tocitelist% \@law@addtoken\@ltok@useratbridgeplural\tocitelist% \fi% \@law@addargument{#1}\tocitelist% \@law@addtoken\@ltok@bigsourcepage\tocitelist% (not yet implemented) \@law@addtoken\@ltok@bigsourcecite\tocitelist% (not yet implemented) \@law@addtoken\@ltok@hereinafter\tocitelist% (not yet implemented) % \end{macrocode} % Two fields are made nil during stash; they will be filled % when the macro is first unpacked. % \begin{macrocode} \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \@law@addtoken\@ltok@citetype\tocitelist% cite type \@law@addargument{#7}\tocitelist% cite last part \@law@addargument{#6}\tocitelist% cite page \@law@addargument{#5}\tocitelist% cite first part \@law@addargument{#4}\tocitelist% name of work \@law@addargument{#3}\tocitelist% author \@law@addargument{#2}\tocitelist% nickname \def\@law@tempplistmacro{}% \@law@paracheckone{#2}}% % \end{macrocode} % % \changes{2.0i}{94/11/23}{Added and tested storage routines for an % arbitrary number of parallel citations. Complementary table % output and print routines still to come.} % \begin{macro}{\@law@paracheckone} % \begin{macro}{\@law@parachecktwo} % \begin{macro}{\@law@getpara} % The following three macros look ahead (after the initial % arguments to a cite declaration have been digested but {\em % before\/} the cite information has been stored to the list % macro) for a {\tt =} sign, which signals parallel citation % details. If a {\tt =} sign is found, a further check is made % for a {\tt [}, which signals a set of special bridges for the % upcoming parallel citation. Note the use of two {\tt =} signs % in braces as the first argument to {\tt\string\@ifnextchar}. % This is required because of the internal syntax of the % {\tt\string\@ifnextchar} macro. % \changes{2.0j}{94/12/06}{Cut the second {\tt =} from the {\tt % @law@paracheck} and {\tt @law@getpara} macros; it looks as though this was a % limitation that is overcome in \LaTeX{} 2.09 compatibility % mode; {\tt ==} was a necessary hack in \LaTeX{} 2.09 on my old % system, but was producing garbage {\tt =} signs before the % start of the document with NTT-J\LaTeX2e{} in 2.09 % compatibility mode.} % \begin{macrocode} \def\@law@paracheckone#1{% \def\@law@temp{{#1}}% \@ifnextchar{=} {\expandafter\expandafter\expandafter\@law@parachecktwo \expandafter\@law@temp\@gobble}% {\@@newcite{#1}}}% % \end{macrocode} % % \begin{macrocode} \def\@law@parachecktwo#1{\@ifnextchar[% {\@law@getpara{#1}}% {\@law@getpara{#1}[,,,,]}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % The following add a single set of parallel citation details % into a list macro used as a holding area for this purpose. % \begin{macrocode} \def\@law@getpara#1[#2,#3,#4,#5,#6]#7#8{% \def\@law@temp{{#1}}% \@law@addpargument{{#2}{#3}{#4}{#5}{#6}{#7}{#8}}\tolist% \@ifnextchar{=} {\expandafter\expandafter\expandafter \@law@paracheckone\expandafter\@law@temp\@gobble}% {\@@newcite{#1}}} % \end{macrocode} % % \begin{macrocode} \def\@@newcite#1{% % \end{macrocode} % The list macro of parallel citation details built by the % routines above is stored as a single item in the general list macro of % citation details. % \begin{macrocode} \@ltok@a\expandafter{\@law@tempplistmacro}% \@law@addtoken\@ltok@a\tocitelist% \expandafter\global\expandafter\let\csname @ldata@#1\endcsname=\@law@templistmacro% \@ltok@userconetop{}% \@ltok@userconetopplural{}% \@ltok@userptop{}% \@ltok@useratbridge{}% \@ltok@useratbridgeplural{}% % \end{macrocode} % Having stashed everything, we're ready to make the nickname % macro itself, and print the long form of the cite. We set % "\@law@temp" equal to the nickname macro, and expand after % the condition so that arguments can be examined---otherwise % the first thing the nickname sees will be the "\fi". % \begin{macrocode} \@law@makecitenick{#1}% % \end{macrocode} % % \begin{macrocode} \if@law@listinputting\def\@law@nick{}\else% \def\@law@nick{\lexicitefull{#1}}\fi\@law@nick}% % \end{macrocode} % This macro adds one argument item "#1" to the end % of list macro "\@law@templistmacro". This and the % other list handlers are modelled on the examples in % Knuth's \TeX book.\lexicite{knuth}+{378}{} % This and the other macros in this set do their work on % one list macro, \verb+\@law@templistmacro+, in order % to avoid the need for lots of \verb+\expandafter+s. % \begin{macrocode} \def\@law@addargument#1\tocitelist{% \@law@leftappendargument#1\to\@law@templistmacro} \long\def\@law@leftappendargument#1\to#2{\@ltok@a={\\{#1}}% \@ltok@b=\expandafter{#2}% \xdef#2{\the\@ltok@a\the\@ltok@b}} % \end{macrocode} % This macro adds the contents of one token register to % the temporary list macro. % \begin{macrocode} \def\@law@addtoken#1\tocitelist{\@law@leftappendtoken#1\to\@law@templistmacro} \long\def\@law@leftappendtoken#1\to#2{% \xdef\@law@temp{\noexpand\\\noexpand{\the#1\noexpand}}% \@ltok@a=\expandafter{\@law@temp}% \@ltok@b=\expandafter{#2}% \xdef#2{\the\@ltok@a\the\@ltok@b}} % \end{macrocode} % This macro cuts one token-register item \verb+#1+ from the % end of list macro "\@law@templistmacro". The lopoff % portion is almost straight out of the TeXbook, except % that it stores the lopped element in a token register % instead of a macro. % \begin{macrocode} \def\@law@cut#1\fromcitelist{\@law@lop\@law@templistmacro\to#1} \def\@law@lop#1\to#2{\expandafter\@law@lopoff#1\@law@lopoff#1#2}% \long\def\@law@lopoff\\#1#2\@law@lopoff#3#4{\global#4={#1}\gdef#3{#2}} % \end{macrocode} % % \begin{macro}{\@law@addpargument} % \begin{macro}{\@law@addptoken} % \begin{macro}{\@law@pcut} % The following three macros are used to manipulate a list % macro containing parallel citation details. % \begin{macrocode} \def\@law@addpargument#1\tolist{% \@law@leftappendpargument#1\to\@law@tempplistmacro} \long\def\@law@leftappendpargument#1\to#2{\@ltok@a={\\{#1}}% \@ltok@b=\expandafter{#2}% \xdef#2{\the\@ltok@a\the\@ltok@b}} % \end{macrocode} % % \begin{macrocode} \def\@law@addptoken#1\tolist{\@law@leftappendptoken#1\to\@law@tempplistmacro} \long\def\@law@leftappendptoken#1\to#2{% \xdef\@law@temp{\noexpand\\\noexpand{\the#1\noexpand}}% \@ltok@a=\expandafter{\@law@temp}% \@ltok@b=\expandafter{#2}% \xdef#2{\the\@ltok@a\the\@ltok@b}} % \end{macrocode} % % \begin{macrocode} \def\@law@pcut#1\fromlist{\@law@lop\@law@tempplistmacro\to#1} \def\@law@lop#1\to#2{\expandafter\@law@lopoff#1\@law@lopoff#1#2}% \long\def\@law@lopoff\\#1#2\@law@lopoff#3#4{\global#4={#1}\gdef#3{#2}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % This macro turns off the gobbling feature (it may be % turned on during execution, if {\em Id.} is used), % erases any pinpoint reference information that is % hanging around, and if we are in a footnote, it % increments the counter that was set to zero at the % start of the footnote. It then % unpacks all of the info for the cite % whose nickname is given in \verb+#1+, and puts it into token registers for % further processing. After it unpacks the list macro % \verb+\@ldata@+\meta{nickname}, it unpacks the formatting % details appropriate % to the style in which it was declared. % After the list is unpacked, % {\em if\/} there is no record of a footnote or page number, % then this is the first printing of the cite. The note/page % and footnote/page number details need to be stored, and % then everything has to be {\em repacked\/} % for future reference under the appropriate list macro name. % The list macro strategy allows on-the-fly editing of % macros which adds greatly to the flexibility of % the style.\\ % Note the "parabeta" guard below. When we turn on support for % parallel citations, we will need to do the restash work later, % after checking for any attached items. % \begin{macrocode} \def\@law@unstasheverything#1{% \def\@law@gobble{}% \global\@ltok@argtwo{}% \if@law@infoot% \addtocounter{citesinfoot}{1}% \fi% \expandafter\let\expandafter\@law@templistmacro\csname @ldata@#1\endcsname% \@law@cut\@ltok@plistmacro\fromcitelist% \@law@cut\@ltok@nickname\fromcitelist% \@law@cut\@ltok@author\fromcitelist% \@law@cut\@ltok@name\fromcitelist% \@law@cut\@ltok@citefirst\fromcitelist% \@law@cut\@ltok@citepage\fromcitelist% \@law@cut\@ltok@citelast\fromcitelist% \@law@cut\@ltok@citetype\fromcitelist% \@law@cut\@ltok@whereitsat\fromcitelist% \@law@cut\@ltok@pageorfootno\fromcitelist% \@law@cut\@ltok@hereinafter\fromcitelist% \@law@cut\@ltok@bigsourcecite\fromcitelist%(not yet implemented) \@law@cut\@ltok@bigsourcepage\fromcitelist%(not yet implemented) \@law@cut\@ltok@stylename\fromcitelist% \csname \the\@ltok@stylename bridges\endcsname% \csname \the\@ltok@stylename faces\endcsname% % \end{macrocode} % The following lines check one of the special bridge fields % for content. If it is empty, we leave the bridges alone. % Otherwise, we replace the default bridges with those selected % by the user for this citation. % \changes{2.0g}{94/08/12}{Added conditional bridges code % for cutting from the citation stack to % {\tt\protect\@law@unstasheverything}.} % \begin{macrocode} \@law@cut\@ltok@a\fromcitelist% \xdef\@law@temp{\the\@ltok@a}% \ifx\@law@temp\empty% \else% \@ltok@atbridgeplural\@ltok@a% \@law@cut\@ltok@atbridge\fromcitelist% \@law@cut\@ltok@ptop\fromcitelist% \@law@cut\@ltok@conetopplural\fromcitelist% \@law@cut\@ltok@conetop\fromcitelist% \@law@specialbridgestrue \fi% \edef\@law@temp{\the\@ltok@whereitsat}% \ifx\@law@temp\empty% \global\@law@longcitetrue% % \end{macrocode} % \changes{2.0d}{27 July 1994}{Added a write to the {\tt aux} % file for initial uses of a citation. This is the first step toward the % \protect\BibTeX\ linkup. (later moved to {\tt\protect\string\protect\lexicite})} % \begin{macrocode} \if@law@infoot% \global\@ltok@whereitsat\@ltok@infoot% \global\@ltok@pageorfootno=\expandafter{\the\c@law@footnote}% \else% \global\@ltok@whereitsat\@ltok@onpage% \global\@ltok@pageorfootno=\expandafter{\the\c@page}% \fi% % \end{macrocode} % \changes{2.0g}{94/08/12}{Added code for re-stashing special % bridges to {\tt\protect\string\protect\@law@unstasheverything}.} % \begin{macrocode} \if@law@specialbridges% \@law@addtoken\@ltok@conetop\tocitelist% \@law@addtoken\@ltok@conetopplural\tocitelist% \@law@addtoken\@ltok@ptop\tocitelist% \@law@addtoken\@ltok@atbridge\tocitelist% \@law@addtoken\@ltok@atbridgeplural\tocitelist% \else% \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \@law@addargument{}\tocitelist% \fi% \@law@addtoken\@ltok@stylename\tocitelist% style name \@law@addtoken\@ltok@bigsourcepage\tocitelist%(not yet implemented) \@law@addtoken\@ltok@bigsourcecite\tocitelist%(not yet implemented) \@law@addtoken\@ltok@hereinafter\tocitelist% (not yet implemented) \@law@addtoken\@ltok@pageorfootno\tocitelist% (1)(b) stash the footnote bridge \@law@addtoken\@ltok@whereitsat\tocitelist% (2)(b) footnote number \@law@addtoken\@ltok@citetype\tocitelist% cite type \@law@addtoken\@ltok@citelast\tocitelist% cite last part \@law@addtoken\@ltok@citepage\tocitelist% cite page \@law@addtoken\@ltok@citefirst\tocitelist% cite first part \@law@addtoken\@ltok@name\tocitelist% name of work \@law@addtoken\@ltok@author\tocitelist% author \@law@addtoken\@ltok@nickname\tocitelist% nickname \@law@addtoken\@ltok@plistmacro\tocitelist% \global\expandafter\let\csname @ldata@#1\endcsname\@law@templistmacro% \fi% } % \end{macrocode} % \subsubsection{Calling citation nicknames} % The nickname macro defined by this routine % (\verb+\@lnick@+\meta{nickname}), is immensely % more compact than in the % first release. \verb+\@law@argscheck+ eventually % leads to \verb+\@law@setup+ after a series of % checks for optional arguments. For the longest time I used % a "\the" statement for the contents of "\@law@argscheck"; "\noexpand" works % just as well and is much simpler to arrange. % \begin{macrocode} \def\@law@makecitenick#1{% \expandafter\xdef\csname @lnick@#1\endcsname{% \noexpand\@law@unstasheverything\noexpand{#1\noexpand}% \noexpand\@law@argscheck}} % \end{macrocode} % \begin{macro}{\@law@argscheck} % This is a chain of macros that look forward for the % markers {\tt *}, {\tt +}, {\tt -}, {\tt ++} and {\tt -+}, % gobbling the markers and setting toggles along the way. % The toggles control whether the cite will print, % and whether \LexiTeX\ will assume there is a single or a % multiple page/section reference (or none at all, if % no flag is seen). % \begin{macrocode} \long\def\@law@argscheck{% \@ifnextchar+{\@law@printcitetrue\expandafter\@law@argscheckplusplus\@gobble}% {\@law@multipagesfalse\@law@argschecktwo}} % \long\def\@law@argscheckplusplus{% \@ifnextchar+{\@law@multipagestrue\expandafter\@law@getargs\@gobble}% {\@law@argscheckplusminus}} % \long\def\@law@argscheckplusminus{% \@ifnextchar-{\@law@multipagestrue\expandafter\@law@getargs\@gobble}% {\@law@multipagesfalse\@law@getargs}} % \long\def\@law@argschecktwo{% \@ifnextchar-{\@law@printcitefalse\expandafter\@law@getargs\@gobble}% {\@law@argscheckthree}} % \long\def\@law@argscheckthree{% \@ifnextchar*{\@law@printcitefalse\expandafter\@law@setup\@gobble}% {\global\@law@printcitetrue\@law@setup}} % \end{macrocode} % These macros are part of the above chain; they are called % if a flag is found and \LexiTeX\ has finished its search for % more. \verb+\@law@barnil+ redefines the shorthanding % characters so that matter will be suppressed or interatively % written to the output files as appropriate. % \begin{macrocode} \def\@law@getargs{\begingroup\@law@barnil\@law@@getargs} % \def\@law@@getargs#1{\global\@ltok@argtwo{#1}% \endgroup\@law@setup} % \end{macrocode} % \end{macro} % \begin{macro}{\@law@newcitefirst} % The following code will be used to kick off the existing "\@newcite" % routine when hereinafter-style references come to be supported. % \begin{macrocode} %<*hereinafters> \def\@law@newcitefirst{\@ifnextchar[]{\catcode`\[=?? \catcode`\]=?? \expandafter\@law@newcitesecond\@law@grabhereinafter} {\@law@newcite}} \def\@law@grabhereinafter#1{\@ltok@hereinafter={#1} \catcode`\[=?? \catcode`\]=??} % % \end{macrocode} % \end{macro} % \subsubsection{Table writes and preliminary formatting} % Once the printing information has been stashed, the % \verb+\@lnick@+\meta{nickname} macro can be used % to extract and print it. After extracting the % information and storing it in token registers, % this looks forward to gather any pinpointing argument % that has been appended to the macro in the text. % Once all the the necessary information has been % collected, the \verb+\@law@setup+ macro tidies up % the formatting of the cite and writes it to the % export file, if the creation of tables for that % type of citation has been toggled on. It then % invokes the print routine. % % This set of macros supports the operation of \verb+\@law@setup+ % by redefining one control character and several command % strings in such a way that they will write a complete % entry to the output file for the citation for each pinpointing % reference that follows them. This relevant only for % statute citations, which are organized as two-level % indexes, with the statute section cited at the second level. % The special function of the vertical bar character % is to write an entry to the table in this way, without % writing anything in the document. This may be necessary % where a range of sections is cited; \LexiTeX\ has no way % of knowing whether the intervening sections are % continuous, so references to them cannot be done automatically. % \begin{macrocode} \def\setcherpage#1{\@ltok@argtwo{#1}\write@one@statute@entry}% \def\MiekosPatience{\def\,{\setcherpage}\def\&{\setcherpage}% \def\dash{\setcherpage}\def|##1|{\setcherpage{##1}}% \expandafter\setcherpage\the\@ltok@pagesstring}% % \end{macrocode} % This macro assumes that all citation information stored % for the cite has already been retrieved to appropriate token % registers. The redefinition of the backslash character % here allows it to be used to select the alternate % typeface within a citation argument. The alternate % typeface can be changed for all documents by editing % the {\tt lexicite.tex} file. Grouping braces enclosing % all operations within \verb+\@law@setup+ mean than % weird stuff turned on the sole purpose of exporting to % tables and printing the citation will turn itself off % when the print routine is finished. % A routine (\verb+\@law@justabovecheck+) is run to % figure out what the citation context is---how % a cross-reference should be formatted---and % once it's found out what it needs to know about % the last citation, information on the current citation % is tucked away for reference by this the context-checking % routine next time around. % A series of checks % is performed so that superfluous bridges for which there % is no corresponding argument can be erased. % Then a file % write is performed to the appropriate export file, if % creation of that table has been toggled on. And finally % the print routine is called. The \verb+\@law@gobble+ % that follows the end of the group is used to eat % a superfluous period if necessary. It is brought to % life, if appropriate, by the print routine. % \begin{macrocode} \long\def\@law@setup{% % \end{macrocode} % The following operations restash the citation details if % necessary; by this point we will have grabbed any parallel % citation details that we needed. % The backslash character is redefined as a self-resetting % font-switching macro. % \begin{macrocode} {\def\@law@firstslash{\begingroup\def\\{\@law@secondslash}% \the\ltokspecialface}% \def\@law@secondslash{\endgroup\def\\{\@law@firstslash}}% \def\\{\@law@firstslash}% % \end{macrocode} % This carries out the necessary checks on the context of the % current citation. % \begin{macrocode} \@law@justabovecheck% % \end{macrocode} % Now that the \verb+\@law@justabovecheck+ macro has been run, % it is time to set up for the next comparison. % Take note that this source was cited, and of any specific page % reference it contains, IF we are in a footnote % \begin{macrocode} \if@law@infoot% \xdef\@law@currentcite{\the\@ltok@author\the\@ltok@name\the\@ltok@citefirst% \the\@ltok@citepage\the\@ltok@citelast}% \xdef\@law@lastpage{\the\@ltok@argtwo}% \fi% % \end{macrocode} % A number of further tidying-up operations are appropriate % regardless of the form in which the citation will % be printed. If certain elements are missing, their % related bridges must be erased if the citation is not % going to look awful. % \begin{macrocode} \xdef\@law@temp{\the\@ltok@author}% \ifx\@law@temp\empty% \xdef\@law@temptwo{\the\@ltok@citefirst}% \ifx\@law@temptwo\empty% \global\@ltok@ttocone{}% \fi% \global\@ltok@atot{}% \fi% \xdef\@law@temp{\the\@ltok@citelast}% \ifx\@law@temp\empty% \global\@ltok@ptoctwo{}% \fi% \def\@law@temptwo{()}% \ifx\@law@temp\@law@temptwo% \global\@ltok@ptoctwo{}% \global\@ltok@citelast{}% \fi% \xdef\@law@temp{\the\@ltok@citepage}% \ifx\@law@temp\empty% \global\@ltok@ptop{}% \fi% \xdef\@law@temp{\the\@ltok@argtwo}% \ifx\@law@temp\empty% \global\@ltok@ptop{}% \xdef\@law@temptwo{\the\@ltok@citepage}% \ifx\@law@temptwo\empty% \global\@ltok@conetop{}% \fi% \fi% % \end{macrocode} % Now we run a series of checks to determine the class % of citation we are dealing with, and if tables % for that type of citation have been turned on, an export is performed. % \begin{macrocode} \xdef\@law@temp{\the\@ltok@citetype}% \ifx\@law@temp\@law@case% \if@writecasetable\write@one@case@entry% \fi% \fi% \ifx\@law@temp\@law@statute% \if@writestatutetable% \if@law@multipages% {\@ltok@pagesstring\@ltok@argtwo% \MiekosPatience}% \else% \write@one@statute@entry% \fi% \fi% \fi% \ifx\@law@temp\@law@article% \if@writearticletable\write@one@article@entry% \fi% \fi% \ifx\@law@temp\@law@book% \if@writebooktable\write@one@book@entry% \fi% \fi% % \end{macrocode} % And here the \verb+\@law@setup+ routine comes to an end; % punt to the print routine, possibly followed by a gobble, % if {\em Id.} is printed. If footnote ``forcing'' % is in effect, the printed text is placed in the argument % to a vanilla footnote command. % \begin{macrocode} \if@law@forcing{\@law@foothold% {\@law@print}\global\@law@infootfalse}% \else\@law@print\fi}\@law@gobble} % \end{macrocode} % \subsection{Output routines} % Once the citation has been unpacked and the % basic tidying up appropriate to all appearances % of the citation has been carried out, it is time % to ship its contents to the various output routines. % \subsubsection{The print macro} % This section contains the code for the print routine and % its supporting macros. We begin with the supporting stuff. % \begin{macro}{\@law@justabovecheck} % Check if immediately preceding cite is the same as this one. % This macro is called immediately before the citation is % printed. There are lots of conditions, but the structure % is just a straightforward nesting of \verb+\if+ statements, % each of which sets a toggle or toggles appropriately. % In the end, this macro tells us: % \begin{itemize} % \item Whether the immediately-preceding citation is to % the same work; and if it is % \item Whether the preceding cite had no pinpoint % page reference; and if it had one % \item Whether the pages referred to by the two cites % are exactly identical. % \end{itemize} % Try {\em that\/} with % WordPerfect! % If \LexiTeX\ isn't getting the decisions right, let me know. % \begin{macrocode} \def\@law@justabovecheck{% \xdef\@law@temptwo{\the\@ltok@author\the\@ltok@name% \the\@ltok@citefirst\the\@ltok@citepage% \the\@ltok@citelast}% \ifx\@law@lastcite\@law@temptwo% \ifnum\the\c@citesinfoot=1\relax% \@law@justabovecheckdetails% \else% \ifx\@law@currentcite\@law@temptwo% \@law@justabovecheckdetails% \else% \@justabovefalse% \fi% \fi% \else% \ifnum\the\c@citesinfoot>1\relax% \ifx\@law@currentcite\@law@temptwo% \@law@justabovecheckdetails% \else% \@justabovefalse% \fi% \fi% \fi} \def\@law@justabovecheckdetails{% \ifx\@law@lastpage\empty% \@justabovetrue% \@l@quiteexactfalse% \else% \xdef\@law@temp{\the\@ltok@argtwo}% \ifx\@law@temp\empty% \@justabovefalse% \else% \@justabovetrue% \ifx\@law@temp\@law@lastpage% \@l@quiteexacttrue% \else% \@l@quiteexactfalse% \fi% \fi% \fi} % \end{macrocode} % \end{macro} % There is just one macro that does the printing, and it % is a big one---the rest of this heading is dedicated % to this single macro. % \begin{macrocode} \def\@law@print{% % \end{macrocode} % This toggles the printing on and off. We can't catch % it earlier, because the long citation form toggle can't % be touched until after printing. % \begin{macrocode} \if@law@printcite% \begingroup \def\@law@firstslash{\begingroup\def\\{\@law@secondslash}% \the\ltokspecialface}% \def\@law@secondslash{\endgroup\def\\{\@law@firstslash}}% \def\\{\@law@firstslash}% % \end{macrocode} % There are two halves to the macro; one for long cite forms, % the other for short. Long cite forms are in the first % half. % \begin{macrocode} \if@law@longcite% % \end{macrocode} % Long citations are pretty straightforward; we've gathered all % the information we needed; now we just need to plunk it % all down in order, pretty much. The one exception is the % page bridges. If the location page exists, we leave the % singular bridge alone. If no location page exists, {\em and\/} % the pinpoint reference is plural, then we install a plural % bridge. % \begin{macrocode} \xdef\@law@temp{\the\@ltok@citepage}% \ifx\@law@temp\empty% \if@law@multipages% \global\@ltok@conetop\@ltok@conetopplural% \fi% \fi% % \end{macrocode} % First to print is the author field (the second argument to the % citation declaration command), followed by the % author-to-title punctuation bridge. The enclosing % braces limit the scope of the special active character % definitions of "^", "_" and "|". % \begin{macrocode} \global\ltokspecialface=\@ltok@authoroptionface% {\the\@ltok@authormainface% \@law@barinfull\the\@ltok@author}\the\@ltok@atot% % \end{macrocode} % Next comes similar treatment for the title. % \begin{macrocode} \global\ltokspecialface=\@ltok@titleoptionface% {\the\@ltok@titlemainface% \@law@barinfull\the\@ltok@name}\the\@ltok@ttocone% % \end{macrocode} % And for the first citation part. Ho-hum \ldots % \begin{macrocode} \global\ltokspecialface=\@ltok@citefirstoptionface% {\the\@ltok@citefirstmainface% \@law@barinfull\the\@ltok@citefirst}\the\@ltok@conetop% % \end{macrocode} % Next comes the location page and its following % bridge. Both of these may be blank. No funny % business with the shorthand active characters is % required, since we assume this will not contain % any special text for which they will be required. % \begin{macrocode} \the\@ltok@citepage\the\@ltok@ptop% % \end{macrocode} % A special use of "\," is defined before we expand % the optional argument stuff. % \begin{macrocode} {\def\,{,}\@law@barkill\the\@ltok@argtwo}% \the\@ltok@ptoctwo% % \end{macrocode} % And finally, we print the final portion of the citation. % \begin{macrocode} {\@law@barinfull\the\@ltok@citelast}% % \end{macrocode} % This else marks the boundary between long-form citations % (which we have seen are relatively simple to print) % and short-form citations (which are rather complex). % This "\else" matches the "\if@law@longcite" conditional. % \begin{macrocode} \else% % \end{macrocode} % The footnote number and the accompanying bridge % should not appear in a short-form citation if % the citation being printed first occurred in the % current footnote. Rather than suppressing printing, % we just set the relevant tokens to nil. % \begin{macrocode} \ifnum\the\@ltok@pageorfootno=\the\c@law@footnote\relax% \if\@ltok@whereitsat\@ltok@infoot% \global\@ltok@whereitsat{}% \global\@ltok@pageorfootno{}% \fi% \fi% % \end{macrocode} % If \LexiTeX\ found a \verb!++! or a \verb!+-! marker % linking a pinpointing argument, the bridges preceding % the page references must be set to their plural form. % This change applies to both long and short form citations. % \begin{macrocode} \if@law@multipages% \@ltok@conetop\@ltok@conetopplural% \@ltok@atbridge\@ltok@atbridgeplural% \fi% % \end{macrocode} % If for some reason either the pinpoint argument is nil, % or it {\em and\/} the location page token register is nil, % we set the accompanying bridges to nil. % \begin{macrocode} \xdef\@law@temp{\the\@ltok@argtwo}% \ifx\@law@temp\empty% \global\@ltok@ptop{}% \global\@ltok@atbridge{}% \xdef\@law@temptwo{\the\@ltok@citepage}% \ifx\@law@temptwo\empty% \global\@ltok@conetop{}% \fi% \fi% % \end{macrocode} % Special forms of tidying-up may be appropriate to % each of the four classes of citation. An appropriate % cleaning macro is called here. % \begin{macrocode} \csname @law@\the\@ltok@citetype preformat\endcsname% % \end{macrocode} % If it has been found that the same citation has been % used immediately previous to this instance, % we use {\em Id.} If the "\@justabove" test showed % that {\em Id.} by itself is appropriate, we prepare % to eat any period immediately following the citation % macro. Otherwise, we tack on the pinpoint reference % and its accompanying bridge. A fail-safe conditional % reverts to the original plan if the pinpoint reference % is empty. % \begin{macrocode} \if@justabove% {\def\,{,}% \Id% \if@l@quiteexact% \gdef\@law@gobble{\@ifnextchar.{\@gobble}{}}% \else% \the\@ltok@atbridge{\@law@barkill\the\@ltok@argtwo}% \xdef\@law@temptwo{\the\@ltok@argtwo}% \ifx\@law@temptwo\empty% \gdef\@law@gobble{\@ifnextchar.{\@gobble}{}}% \fi% \fi}% % \end{macrocode} % If {\em Id.} was not called for, we have to create % a proper short-form reference. This "\else" corresponds % with the "\@justabove" toggle, above. % \begin{macrocode} \else% % \end{macrocode} % The author will be used in any case. Note that the author % and its following bridge may have been set to nil, above. % \begin{macrocode} \global\ltokspecialface=\@ltok@authoroptionface% {\the\@ltok@authormainface% % print whatever there if for the author \@law@barinshort\the\@ltok@author}\the\@ltok@atot% % \end{macrocode} % The title information is also used, if it is present. % \begin{macrocode} \global\ltokspecialface=\@ltok@titleoptionface% {\the\@ltok@titlemainface% % \end{macrocode} % If we have specified a nickname for this cite for % `hereinafter' references, we use it instead of the % title of the work. %<*parabeta> [DWEEZLE: a test and a token register replacement goes here.] % % \begin{macrocode} \@law@barinshort\the\@ltok@name}% % \end{macrocode} % At this point, we must make decisions concerning whether % to use the {\em supra\/} cross-referencing form. This % depends on the type of citation we are working on. % The "\@nosupra" condition is set to true if we are working % on a case or a statute, otherwise it is set to false. % \begin{macrocode} \xdef\@law@temp{\the\@ltok@citetype}% \ifx\@law@temp\@law@case% \@nosupratrue% \else% \ifx\@law@temp\@law@statute% \@nosupratrue% \else% \@nosuprafalse% \fi% \fi% % \end{macrocode} % Now we put the result of the above test to work. % First, the citation form for cases or statutes, which % do not permit the {\em supra\/} form. % \begin{macrocode} \if@nosupra% % \end{macrocode} % We will always use the first part of the citation % (usually the source of the work). % \begin{macrocode} \the\@ltok@ttocone% \global\ltokspecialface=\@ltok@citefirstoptionface% {\the\@ltok@citefirstmainface% \@law@barinshort\the\@ltok@citefirst}% % \end{macrocode} % If the pinpoint reference is empty, we tack on the % location page after the appropriate bridge. Otherwise, % we do nothing for the present; any pinpoint reference % will be produced later on. % Note that the bridge % used here will only be in plural form if something was % given for use as a pinpoint reference. % \begin{macrocode} \the\@ltok@conetop% \xdef\@law@temp{\the\@ltok@argtwo}% \ifx\@law@temp\empty% \the\@ltok@citepage% \fi% % \end{macrocode} % Now we deal with resources other than cases and statutes. % This needs just the {\em supra\/} bridge, plus the % footnote or page number information pointing to the earlier % citation. % \begin{macrocode} \else% \supra\the\@ltok@whereitsat\the\@ltok@pageorfootno% \the\@ltok@atbridge% \fi% % \end{macrocode} % The pinpoint reference, if present, is used for all % forms of citation. % \begin{macrocode} {\def\,{,}% {\@law@barkill\the\@ltok@argtwo}}% % \end{macrocode} % The following routine prints the second citation part % if the citation is to a statute, and the first citation % part was empty. I can't think of a situation where this % is necessary, offhand, but it was included in the original % coding, so I must have had a stylistic reason for putting % it there \ldots % \begin{macrocode} \xdef\@law@temp{\the\@ltok@citetype}% \ifx\@law@temp\@law@statute% \xdef\@law@temptwo{\the\@ltok@citefirst}% \ifx\@law@temp\empty% \the\@ltok@ptoctwo{\@law@barinshort\the\@ltok@citelast}% \fi% \fi% % \end{macrocode} % In order, these close "\if@justabove", "\if@law@longcite" % and "\if@law@printcite". % \begin{macrocode} \fi% \fi% \endgroup% \fi% <- end of if@law@printcite % \end{macrocode} % The "\@law@gobble" here will consume a period inserted % automatically after a forced footnote, if the printed % form turned out to be an {\em Id.}. See the concluding % code of "\@law@setup". % \changes{2.0c}{26 July 1994}{Moved {\tt\protect\string% % \protect\@law@forcingfalse} outside of a conditional % expression at the end of the print routine, to correct % the failure of the forcing mechanism to work more than once.} % \begin{macrocode} \global\@law@longcitefalse\global\def\volno{}% \if@law@forcing.\gdef\@law@gobble{\@ifnextchar.{\@gobble}{}}% \fi\global\@law@forcingfalse% \@law@gobble}% % \end{macrocode} % \paragraph{Print format subroutines} % \begin{macro}{\@law@casepreformat} % This is empty; no special preparations are necessary % for the printing of a case citation. % \begin{macrocode} \def\@law@casepreformat{}% % \end{macrocode} % \end{macro} % \begin{macro}{\@law@statutepreformat} % If short statutory references are in force, % the title and the following bridge are set to nil, % if some reference is provided in the first citation % part. % \begin{macrocode} \def\@law@statutepreformat{% \if@law@statuteverbose% \else% \xdef\@law@temp{\the\@ltok@citefirst}% \ifx\@law@temp\empty% \else% \global\@ltok@name{}% \global\@ltok@ttocone{}% \fi% \fi% }% % \end{macrocode} % \end{macro} % \begin{macro}{\@law@articlepreformat} % If a work by the identical author has been cited more than once, we leave % everything intact (the print routine does the necessary culling); % otherwise, we cut the title here. The use of "\@law@authortracing" % is explained above. % \begin{macrocode} \def\@law@articlepreformat{% \xdef\@law@temp{\the\@ltok@author}% \ifx\@law@temp\empty% \else% {\@law@clean\@ltok@author\@law@authortracing% \expandafter\expandafter\expandafter\if\expandafter% \csname\@law@authortracing\endcsname2% \else% \global\@ltok@atot{}\global\@ltok@name{}% \fi}\fi}% % \end{macrocode} % \end{macro} % \begin{macro}{\@law@bookpreformat} % This provides the same treatment given to articles. % \begin{macrocode} \def\@law@bookpreformat{% \xdef\@law@temp{\the\@ltok@author}% \ifx\@law@temp\empty% \else% {\@law@clean\@ltok@author\@law@authortracing% \expandafter\expandafter\expandafter\if\expandafter% \csname\@law@authortracing\endcsname2% \else% \global\@ltok@atot{}\global\@ltok@name{}% \fi}\fi}% % \end{macrocode} % \end{macro} % \subsection{Proof sheets} % The following macros produce a proof sheet that shows all % of the permutations of a citation that I can think of. % This is useful for those who have to design new citation styles. % This is a pretty straightforward exercise, except for the % task of feeding a cite declaration exactly the right % arguments; this requires re-definition of "\newcitestyle" % and the re-parsing of the "lexicite.tex" file. % % If you find permutations that are not represented here, % let me know and I'll add them. % \changes{2.0b}{22/vii/94}{Complete re-write of the parsing % routines for proof pages, to eliminate much unnecessary % complexity.} % % \begin{macrocode} \def\lexihashcheck#1#2{\def\@law@temp{#2}\ifx\@law@temp\empty% #1={}\fi} \def\scancitestyle#1#2#3#4#5#6#7{% \begingroup \lexihashcheck\@ltok@proofcitelast{#7} \lexihashcheck\@ltok@proofpage{#6} \lexihashcheck\@ltok@proofciteone{#5} \lexihashcheck\@ltok@prooftitle{#4} \lexihashcheck\@ltok@proofauthor{#3} \expandafter\xdef\csname @law@#1proofdata\endcsname{% \noexpand{proofcite\noexpand}% \the\@ltok@proofauthor \the\@ltok@prooftitle \the\@ltok@proofciteone \the\@ltok@proofpage \the\@ltok@proofcitelast} \expandafter\xdef\csname @law@#1otherproofdata\endcsname{% \noexpand{othercite\noexpand}% \the\@ltok@proofauthor \the\@ltok@prooftitle \the\@ltok@proofciteone \the\@ltok@proofpage \the\@ltok@proofcitelast} \endgroup} \def\lexiproofs{\begingroup\def\newcitestyle##1##2##3##4##5{% \scancitestyle{##1}##5}\catcode`\#=12% \input lexicite.tex\endgroup} \def\proofpagefor#1{\centerline{\Large \LexiTeX\ Proof Page} \medskip \centerline{\large for} \medskip \centerline{\Large\tt\string\new#1} \bigskip \def\citestyledeclaration{\csname new#1\endcsname} \expandafter\let\expandafter\proofciteargs \csname @law@#1proofdata\endcsname \expandafter\let\expandafter\otherciteargs \csname @law@#1otherproofdata\endcsname \c@footnote=0 \thispagestyle{empty} The footnotes to this text give many of the permutations of the \LexiTeX\ citation style named {\tt\string\new#1}. Unfortunately, I cannot guarantee that it covers them all. This page is produced by the command sequence {\tt\string\proofpagefor\string{\string}}, where {\tt } is the name of a citation style (without a leading {\tt\string\new}). Used to proofread citation styles before they are put to use in typesetting your documents, it can help you avoid unexpected results.\\ \begin{enumerate} \item We begin with a full-form citation in the {\tt #1} style, with no pinpoint page reference appended.\footnote{% \expandafter\citestyledeclaration\proofciteargs.} \item Next, we have the full form of the citation, {\em with\/} a pinpoint page reference.\footnote{\lexicitefull{proofcite}+{7890}.} \item Finishing with full-form references, we then have a full citation with a plural pinpoint reference. In this instance we use {\tt\string\dash} between the plural elements.\footnote{\lexicitefull{proofcite}++{{78}\dash{90}}.} \item In the next instance, we have several short-form references to the same work. No pinpoint references are given in this series of examples.\footnote{\lexicite{proofcite}. \lexicite{proofcite}. \lexicite{proofcite}.} \item We do the same again, but this time the three references have singular pinpoint references, each of which is different. As above, the second will be in {\em Id.} form, following Blue Book convention.\footnote{\lexicite{proofcite}+{67}. \lexicite{proofcite}+{78}. \lexicite{proofcite}+{89}.} \item Then we do the same again, but with plural pinpoint references. This time, we link the page references with {\tt\string\&}.\footnote{\lexicite{proofcite}++{{67} \& {89}}. \lexicite{proofcite}+{{78} \& {90}}. \lexicite{proofcite}+{{67} \& {89}}.} \item Now we insert cite to a work by the same author.\footnote{\expandafter\citestyledeclaration\otherciteargs.} \item A cite to the same work as that in the previous footnote is given here. It should reduce to {\em Id.}\footnote{\lexicite{othercite}.} \item Styles of articles and books will give differing results when two works by the same author exist. We therefore repeat the citations of item 4, above.\footnote{\lexicite{proofcite}. \lexicite{proofcite}. \lexicite{proofcite}.} \item Then we repeat the references from 5, above.\footnote{\lexicite{proofcite}+{67}. \lexicite{proofcite}+{78}. \lexicite{proofcite}+{89}.} \item And from item 6, above.\footnote{\lexicite{proofcite}++{{67} \& {89}}. \lexicite{proofcite}+{{78} \& {90}}. \lexicite{proofcite}+{{67} \& {89}}.} \end{enumerate} \newpage} % \end{macrocode} % Finally, we input the user-editable supporting files. % \begin{macrocode} \input lexicite.tex \input lexitabl.tex % % \end{macrocode} % \subsubsection{Proof sheet master document} % The following short document will generate proof sheets % for all of the primary styles on the system. With the standard % distribution, this produces twelve pages of output. % \begin{macrocode} %<*proofsheets> \documentclass{article} \usepackage{lexitex}[1994/12/07] \begin{document} \lexiproofs \def\newcitestyle#1#2#3#4#5{\proofpagefor{#1}} \input lexicite.tex \end{document} % % \end{macrocode} % % \subsection{Macros for data export} % % It may be possible to merge at least three of these % export routines together. The current configuration % works, however, so that task will have to wait for % another day. These macros are based on \LaTeX\ indexing % routines---to such an extent that I don't fully understand % myself exactly what some of the code actually does. % Works though, and many thanks to Leslie Lamport. % % \paragraph{Cases} The items under each of these sections % are the same, although the content of the macros varies slightly. % We first address cases. % % \begin{macro}{\thecasetable} % This sets up the page for a case table---places the section % header and the running header, and defines the appropriate % macro to use for "\item". % \begin{macrocode} %<*lexitabl> \ProvidesFile{lexitabl.tex}[1994/12/07] \def\thecasetable{\section*{\casetablename}% \@mkboth{\uppercase{\casetablename}}{\uppercase{\casetablename}}% \thispagestyle{plain}\parindent\z@% \parskip\z@ plus.3\p@\relax\let\item\@ctbitem}% % \end{macrocode} % \end{macro} % \begin{macro}{\endthecasetable} % This was just borrowed. It restores the text to one-column % mode if the case table started that way---probably either % redundant or incorrect, since the two-column code has been % cut from the original \LaTeX\ model in the "\thecasetable" macro. % \begin{macrocode} \def\endthecasetable{% \if@restonecol\onecolumn% \else\clearpage% \fi}% % \end{macrocode} % \end{macro} % \begin{macro}{\casetablespace} % This sets up the correct vertical spacing inside the case table. % Season to taste. % \begin{macrocode} \def\casetablespace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}% % \end{macrocode} % \end{macro} % \begin{macro}{\printcasetable} % This simply jumps down the page an appropriate amount, % defines a double-backslash appropriately, and imports the % sorted data file of case citations and page numbers. % I wonder, however, whether this can be correctly set up; % using this strategy, the special typeface will simply be % that which happens to be defined when the table is printed; % we haven't yet pulled the {\em cases\/} off the shelf. % Further, I believe that the double-backslashes that are % exported to the raw data file end up half-expanded there; % no double-backslashes should be left when the file is % re-input here. If there {\em is\/} a problem here, it is % not surprising that it hasn't cropped up in documents % yet, since "\\" is most often used to restore to roman % from a funny typeface. If trouble {\em does\/} emerge, % it will be dead easy to fix. % \begin{macrocode} \def\printcasetable{% { \raggedright% \def\@ctbitem##1{\par\smallskip\rule{8pt}{0cm}}% \def\@law@firstslash{\begingroup\def\\{\@law@secondslash}% \the\ltokspecialface}% \def\@law@secondslash{\endgroup\def\\{\@law@firstslash}}% \def\\{\@law@firstslash}% \@input{\jobname.cas}}}% % \end{macrocode} % \end{macro} % \begin{macro}{\makecasetable} % Tricky, or at least sensitive, operations happen here. % This defines the declaration that is put in the preamble % to trigger the creation of a raw data table for cases. % It performs two functions: opening the output file, % and defining the macro that is used to write and entry % on the file. % \begin{macrocode} \def\makecasetable{% % \end{macrocode} % We open the output file immediately. The "\if@filesw" % condition brackets the entire macro; I don't know what % it's for. % \begin{macrocode} \if@filesw \newwrite\@casetablefile% \immediate\openout\@casetablefile=\jobname.ctb% % \end{macrocode} % Then the write macro is defined. "\@bsphack" is a mystery % to me, and so is "\@sanitize". The definition of % "\protect" here just makes a string of anything preceded % by "\protect"; character codes don't matter, since this % exported data will be re-read afresh later. % \begin{macrocode} \def\write@one@case@entry{\@bsphack\begingroup% \def\protect####1{\string####1\space}\@sanitize% % \end{macrocode} % "\thepage" is set to nil now; it is redefined (I think) % during the actual file write, so that it accords with the % actual page on which the entry is printed. % \begin{macrocode} \let\thepage\relax% % \end{macrocode} % The "\@law@cleanup" macro here effectively "\protect"s % things that could expand into unprintable commands during % export. % \begin{macrocode} \@law@cleanup% % \end{macrocode} % This is straight \LaTeX\ strategy still. I'm not sure why % I'm not quite sure why "\@tempa" is "\edef"ed and then % expanded outside the group. It may simply be that this % assures that "\@tempa" does not consume memory unnecessarily. % Alternatively, it may assure that the conditions inside the % group govern one level of expansion, and those outside the % group govern another. If anyone can clarify this, % I would appreciate it. % % The literal write of "\casetableentry" is the macro that % will formats and prints an entry in the finished table. % \begin{macrocode} \edef\@tempa{\write\@casetablefile{\string\casetableentry% % \end{macrocode} % Here, it's just a matter of putting down the citation details. % The "\@ltok@nickname" register has its own set of brackets; % "\casetableentry" will see it as its first argument, and % it will throw it away. It is used only to establish the % order of the sort for "makeindex". % \begin{macrocode} {{\the\@ltok@nickname}% {{\@law@titlemainfacetemp% \ltokspecialface=\noexpand{\@law@titleoptionfacetemp\noexpand}% \@law@nametemp}% \the\@ltok@ttocone% {\@law@citefirstmainfacetemp% \ltokspecialface=\noexpand{\@law@citefirstoptionfacetemp\noexpand}% \@law@citefirsttemp}% \@law@conetoptemp% \@law@citepagetemp% \the\@ltok@ptoctwo\@law@citelasttemp}}{\thepage}}}% \expandafter\endgroup\@tempa% % \end{macrocode} % I haven't a clue what the concluding code to this internally defined % portion of the macro is for. Sorry. % \begin{macrocode} \if@nobreak% \ifvmode% \nobreak% \fi% \fi% \@esphack}% % \end{macrocode} % We finish by telling the rest of the style to pay attention % to case table options, and by reminding the user of what % is going on with his file. % \begin{macrocode} \@writecasetabletrue \typeout{Writing case table file \jobname.ctb;}\fi} % \end{macrocode} % \end{macro} % \paragraph{Statutes} Herein the stuff for exporting % statute data. % % \begin{macro}{\thestatutetable} % This corresponds to "\thecasetable", above. It's the same % darn thing, except that it turns on columns. % \begin{macrocode} \def\thestatutetable{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi% \twocolumn\section*{\statutetablename}% \@mkboth{\uppercase{\statutetablename}}% {\uppercase{\statutetablename}}% \thispagestyle{plain}\parindent\z@% \parskip\z@ plus.3\p@\relax\let\item\@stbitem}% % \end{macrocode} % \end{macro} % \begin{macro}{\endthestatutetable} % This corresponds to "\endthecasetable", above. % \begin{macrocode} \def\endthestatutetable{% \if@restonecol\onecolumn% \else\clearpage% \fi}% % \end{macrocode} % \end{macro} % \begin{macro}{\statutetablespace} % \begin{macrocode} \def\statutetablespace{\par \vskip 10\p@ plus5% \p@ minus3\p@\relax}% \def\printstatutetable{% { \def\@law@firstslash{\begingroup\def\\{\@law@secondslash}% \the\ltokspecialface}% \def\@law@secondslash{\endgroup\def\\{\@law@firstslash}}% \def\\{\@law@firstslash}% \def\@stbitem##1{\par\hangindent 20\p@}% \@input{\jobname.sta}}}% % \end{macrocode} % \end{macro} % Define declaration that makes a statute table. % \begin{macrocode} \def\makestatutetable{% \if@filesw \newwrite\@statutetablefile% \immediate\openout\@statutetablefile=\jobname.stb% \def\write@one@statute@entry{\@bsphack\begingroup% \def\protect####1{\string####1\space}\@sanitize% \let\thepage\relax% \@law@cleanup% \edef\@tempa{\write\@statutetablefile{\string% \statutetableentry% {{\the\@ltok@nickname}% {{\@law@titlemainfacetemp% \ltokspecialface=\noexpand{\@law@titleoptionfacetemp\noexpand}% \@law@nametemp}% \the\@ltok@ttocone% {\@law@citefirstmainfacetemp% \ltokspecialface=\noexpand{\@law@citefirstoptionfacetemp\noexpand}% \@law@citefirsttemp}}% \ifx\@law@argtwotemp\empty\else!% {\@law@conetoptemp\@law@argtwotemp}\fi}{\thepage}}}% \expandafter\endgroup\@tempa% \if@nobreak% \ifvmode% \nobreak% \fi% \fi% \@esphack}% \@writestatutetabletrue \typeout{Writing statute table file \jobname.stb;}\fi} % \end{macrocode} % \paragraph{Articles} % \begin{macrocode} \def\thearticletable{\section*{\articletablename}% \@mkboth{\uppercase{\articletablename}}% {\uppercase{\articletablename}}% \thispagestyle{plain}\parindent\z@% \parskip\z@ plus.3\p@\relax\let\item\@ctbitem}% \def\endthearticletable{% \if@restonecol\onecolumn% \else\clearpage% \fi}% % \end{macrocode} % \begin{macrocode} \def\articletablespace{\par \vskip 10\p@ plus5% \p@ minus3\p@\relax}% % \end{macrocode} % \begin{macrocode} \def\printarticletable{% { \raggedright% \def\@law@firstslash{\begingroup\def\\{\@law@secondslash}% \the\ltokspecialface}% \def\@law@secondslash{\endgroup\def\\{\@law@firstslash}}% \def\\{\@law@firstslash}% \def\@ctbitem##1{\par\smallskip\rule{15pt}{0cm}}% \@input{\jobname.art}}}% % \end{macrocode} % This sets up for the creation of an external table % of articles file. % \begin{macrocode} \def\makearticletable{% \if@filesw \newwrite\@articletablefile% \immediate\openout\@articletablefile=\jobname.atb% \def\write@one@article@entry{\@bsphack\begingroup% \def\protect####1{\string####1\space}\@sanitize% \let\thepage\relax \@law@cleanup% \edef\@tempa{% \write\@articletablefile{% \string\articletableentry% {{\the\@ltok@nickname}% {{\@law@authormainfacetemp% \ltokspecialface=\noexpand{\@law@authoroptionfacetemp\noexpand}% \@law@authortemp}% \the\@ltok@atot% {\@law@titlemainfacetemp% \ltokspecialface=\noexpand{\@law@titleoptionfacetemp\noexpand}% \@law@nametemp}% \the\@ltok@ttocone% {\@law@citefirstmainfacetemp% \ltokspecialface=\noexpand{\@law@citefirstoptionfacetemp\noexpand}% \@law@citefirsttemp}% \@law@conetoptemp% \@law@citepagetemp% \the\@ltok@ptoctwo\@law@citelasttemp}}{\thepage}}}% \expandafter\endgroup\@tempa% \if@nobreak% \ifvmode% \nobreak% \fi% \fi% \@esphack}% \@writearticletabletrue \typeout{Writing article table file \jobname.atb;}\fi} % \end{macrocode} % \paragraph{Books} % \begin{macrocode} \def\thebooktable{\section*{\booktablename}% \@mkboth{\uppercase{\booktablename}}{\uppercase{\booktablename}}% \thispagestyle{plain}\parindent\z@% \parskip\z@ plus.3\p@\relax\let\item\@ctbitem}% % \end{macrocode} % \begin{macrocode} \def\endthebooktable{% \if@restonecol\onecolumn% \else\clearpage% \fi}% % \end{macrocode} % \begin{macrocode} \def\booktablespace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}% % \end{macrocode} % \begin{macrocode} \def\printbooktable{% { \raggedright% \def\@law@firstslash{\begingroup\def\\{\@law@secondslash}% \the\ltokspecialface}% \def\@law@secondslash{\endgroup\def\\{\@law@firstslash}}% \def\\{\@law@firstslash}% \def\@ctbitem##1{\par\smallskip\rule{15pt}{0cm}}% \@input{\jobname.bok}}}% % \end{macrocode} % This sets up for the creation of an external table % of books file. % \begin{macrocode} \def\makebooktable{% \if@filesw \newwrite\@booktablefile% \immediate\openout\@booktablefile=\jobname.btb% \def\write@one@book@entry{\@bsphack\begingroup% \def\protect####1{\string####1\space}\@sanitize% \let\thepage\relax \@law@cleanup% \edef\@tempa{\write\@booktablefile{\string% \booktableentry{{\the\@ltok@nickname}% {{\@law@authormainfacetemp% \ltokspecialface=\noexpand{\@law@authoroptionfacetemp\noexpand}% \@law@authortemp}% \the\@ltok@atot% {\@law@titlemainfacetemp% \ltokspecialface=\noexpand{\@law@titleoptionfacetemp\noexpand}% \@law@nametemp}% \the\@ltok@ttocone% {\@law@citefirstmainfacetemp% \ltokspecialface=\noexpand{\@law@citefirstoptionfacetemp\noexpand}% \@law@citefirsttemp}% \the\@ltok@ptoctwo\@law@citelasttemp}}% {\thepage}}}% \expandafter\endgroup\@tempa% \if@nobreak% \ifvmode% \nobreak% \fi% \fi% \@esphack}% \@writebooktabletrue \typeout{Writing book table file \jobname.btb;}\fi} % % \end{macrocode} % \subsubsection{Citation style definitions} % The style definitions are also stored in a separate file, % to make it easier and less risky for users to play with % the styles to produce desired output. Table 3 % provides a guide to the macro arguments and their functions. % \paragraph{Books} The styles used for citing books and % book-like things follow. % \begin{macrocode} %<*lexicite> \ProvidesFile{lexicite.tex}[1994/12/07] \newcitestyle{book}% {srsrrrB} {[a],\ [t][c]\ [p](pl)\ [rp]\ [e]:[id]\ at~(pl)\ at~[xrf]} {4}% {{#1}{#2}{#3}{}{}{(#4)}}% % \def\newanonbook#1#2#3{\newbook{#1}{}{#2}{#3}} % \newcitestyle{news}% {rrirrrA} {[a],\ [t],\ [c], p.~[p],\ at~(pl),\ at~[rp]\ [e]:[id]\ at~(pl)\ at~[xrf]} {6}% {{#1}{#2}{#3}{#4}{#5}{(#6)}}% % \newcitestyle{man}% {riririB} {[a],\ [t][c],\ [p](pl),\ [rp]\ [e]:[id]\ at~(pl)\ at~[xrf]} {4}% {{#1}{#2}{#3}{}{}{(#4)}}% % \def\newanonman#1#2#3{\newman{#1}{}{#2}{#3}} % \end{macrocode} % \paragraph{Articles} Styles used for articles follow. % There is currently just one, because the Blue Book is % pretty consistent on this type of work. Note % that this may be used to cite chapters in books and stuff % as well. % \begin{macrocode} \newcitestyle{article}% {rsirsrA} {[a],\ [t],\ [c]\ [p],\ (pl),\ [rp]\ [e]:[id]\ at~(pl)\ at~[xrf]} {6}% {{#1}{#2}{#3}{#4}{#5}{(#6)}}% % \def\newanonarticle#1#2#3#4#5{\newarticle{#1}{}{#2}{#3}{#4}{#5}} % \end{macrocode} % \paragraph{Cases} There are several styles for cases; we pretty % much need a separate style for each jurisdiction. % \begin{macrocode} \newcitestyle{case}% {rrirrsC} {[a][t],\ [c]\ [p],\ (pl),\ [rp]\ [e]:[id]\ at~(pl)\ at~[xrf]} {5}% {{#1}{}{#2}{#3}{#4}{(#5)}}% % \newcitestyle{ecase}% {rrirriC} {[a][t],\ [c]\ [p],\ (pl),\ [rp][e]:[id]\ at~(pl)\ at~[xrf]} {4}% {{#1}{}{#2}{#3}{#4}{}}% % \newcitestyle{jcase}% {rrririC} {[a][t],\ [c]\ p.~[p],\ (pl),\ [rp][e]:[id]\ at~(pl)\ at~[xrf]} {4}% {{#1}{}{#2}{#3}{#4}{}}% % \end{macrocode} % \paragraph{Statutes} There are several of these. More may % need to be added on an {\em ad hoc\/} basis. % \begin{macrocode} \newcitestyle{statute}% {rrrsrsS} {[a][t],\ [c]\ \S~[p](pl)\ \S\S~[rp]\ [e]:[id]\ \S~(pl)\ \S\S~[xrf]} {4}% {{#1}{}{#2}{#3}{}{(#4)}}% % \newcitestyle{shortstatute}% {rrrsrsS} {[a][t][c]\ \S~[p](pl)\ \S\S~[rp]\ [e]:[id]\ \S~(pl)\ \S\S~[xrf]} {3}% {{#1}{}{#2}{}{}{(#3)}}% % \newcitestyle{jstatute}% {rrrsrsS} {[a][t][c]\ \S~[p](pl)\ \S\S~[rp]\ [e]:[id]\ \S~(pl)\ \S\S~[xrf]} {3}% {{#1}{}{}{#2}{}{(#3)}}% % \end{macrocode} % \paragraph{Temporary hacks} These citation forms have special % bridges hard-wired into them. The plan for the future is to % use a prefix macro to alter the behaviour of "\newstatute" and % its friends, instead of proliferating custom macros like this. % \begin{macrocode} \newcitestyle{shortstatuteart}% {rrrsrsS} {[a][t][c]\ art.~[p](pl)\ arts.~[rp]\ [e]:[id]\ art.~(pl)\ arts.~[xrf]} {3}% {{#1}{}{#2}{}{}{(#3)}}% % \newcitestyle{constitutionart}% {rrrsrsS} {[a][t][c]\ art.~[p](pl)\ arts.~[rp]\ [e]:[id]\ art.~(pl)\ arts.~[xrf]} {3}% {{#1}{}{#2}{}{}{(#3)}}% % \newcitestyle{constitutionsch}% {rrrsrsS} {[a][t][c]\ sch.~[p](pl)\ schs.~[rp]\ [e]:[id]\ sch.~(pl)\ schs.~[xrf]} {3}% {{#1}{}{#2}{}{}{(#3)}}% % % \end{macrocode} % \subsection{Article table style} % articletable.ist: index style for tables of articles % % \begin{macrocode} %<*lexiarti> keyword "\\articletableentry" actual '*' delim_n ",~" delim_0 "\~\\leaderfill" preamble "\\begin{thearticletable}\n" postamble "\n\n\\end{thearticletable}\n" group_skip "\n\n \\articletablespace\n" % % \end{macrocode} % \paragraph{Book table style} % \begin{macrocode} %<*lexibook> keyword "\\booktableentry" delim_n ",~" delim_0 "\~\\leaderfill" preamble "\\begin{thebooktable}\n" postamble "\n\n\\end{thebooktable}\n" group_skip "\n\n \\booktablespace\n" % % \end{macrocode} % \paragraph{Case table style} % \begin{macrocode} %<*lexicase> keyword "\\casetableentry" delim_n ",~" delim_0 "\~\\leaderfill" preamble "\\begin{thecasetable}\n" postamble "\n\n\\end{thecasetable}\n" group_skip "\n\n \\casetablespace\n" % % \end{macrocode} % \paragraph{Statute table style} % \begin{macrocode} %<*lexistat> keyword "\\statutetableentry" delim_n "\$\\rightarrow\$" delim_0 "\~\\leaderfill" preamble "\\begin{thestatutetable}\n" postamble "\n\n\\end{thestatutetable}\n" group_skip "\n\n \\statutetablespace\n" % % \end{macrocode} % \section{The Driver File} % \begin{macrocode} %<*driver> \def\batchfile{lexitex.ins} \input docstrip \preamble IMPORTANT NOTICE:^^M You are not allowed to change this file. You may however copy this file to a file with a different name and then change the copy if you obey the restrictions on file changes described at the end of lexitex.doc under RESTRICTIONS.^^M You are NOT ALLOWED to distribute this file alone. You are NOT ALLOWED to take money for the distribution or use of this file (or a changed version) except for a nominal charge for copying etc.^^M You are allowed to distribute this file under the condition that it is distributed with all of its contents, intact.^^M If you receive only some of these files from someone, complain!^^M However, if these files are distributed by established suppliers as part of a complete TeX distribution, and the structure of the distribution would make it difficult to distribute the whole set of files, *those parties* are allowed to distribute only some of the files provided that it is made clear that the user will get a complete distribution-set upon request to that supplier (not me). Notice that this permission is not granted to the end user.^^M For error reports in case of UNCHANGED versions contact me on fbennett@clus1.ulcc.ac.uk \endpreamble \generateFile{lexitex.sty}{t}{\from{lexitex.doc}{lexitex}} \generateFile{lexitexm.sty}{t}{\from{lexitex.doc}{lexitex,noshorthanding}} \generateFile{lexicite.tex}{t}{\from{lexitex.doc}{lexicite}} \generateFile{lexitabl.tex}{t}{\from{lexitex.doc}{lexitabl}} \generateFile{lexiarti.ist}{t}{\from{lexitex.doc}{lexiarti}} \generateFile{lexibook.ist}{t}{\from{lexitex.doc}{lexibook}} \generateFile{lexicase.ist}{t}{\from{lexitex.doc}{lexicase}} \generateFile{lexistat.ist}{t}{\from{lexitex.doc}{lexistat}} \generateFile{lexitex.man}{t}{\from{lexitex.doc}{manual}} \generateFile{lexicard.tex}{t}{\from{lexitex.doc}{refcards}} \generateFile{lexiproo.tex}{t}{\from{lexitex.doc}{proofsheets}} % %<*manual> % dimensions from ltugboat.sty: \documentclass{ltxdoc} \usepackage{lexitexm} \pagenumbering{roman} \EnableCrossrefs %\DisableCrossrefs % Say \DisableCrossrefs if index is ready \RecordChanges % Gather update information \CodelineIndex % Index code by line number \OnlyDescription % comment out for implementation details %\OldMakeindex % use if your MakeIndex is pre-v2.9 \begin{document} \DocInput{lexitex.doc} \end{document} % % \end{macrocode} % \begin{macrocode} %<*refcards> \catcode`\@=11 \catcode`\"=\active \def"{\verb"} \documentclass{article} \usepackage{lexitex} \pagestyle{empty} \oddsidemargin -10pt \evensidemargin -10pt \topmargin -47pt \headheight 12pt \headsep 25pt \footskip 75pt \textheight 9in \textwidth 6.75in \columnsep .375in \columnseprule 0pt \begin{document} \newlength{\cardwidth} \setlength{\cardwidth}{\textwidth} \newlength{\cardsep} \setlength{\cardsep}{\fboxsep} \addtolength{\cardwidth}{-4\cardsep} \addtolength{\cardwidth}{-15pt} \newlength{\subcardwidth} \setlength{\subcardwidth}{0.5\cardwidth} \addtolength{\subcardwidth}{-6\cardsep} \hyphenation{con-sti-tu-tion} \small \begin{tabular}{|c|c|c|} \cline{1-1}\cline{3-3} \begin{minipage}[t]{\subcardwidth} \flushbottom\rule{0cm}{12pt} \centerline{\bf\large\LexiTeX\footnote[1]{% \raggedright\LexiTeX\ is by Frank G. Bennett, Jr., Lecturer in Law at the~School of Oriental and African Studies, University of London.\\ (Internet) {\tt fbennett@clus1.ulcc.ac.uk}} Reference Card} \bigskip \fbox{\sc Style Template} $+$ \fbox{\sc Blueprint}$\longrightarrow$\\ \rule{0cm}{12pt}$\hookrightarrow$\fbox{\sc Citation Template} $+$ \fbox{\sc Text}$\longrightarrow$\\ \rule{0cm}{12pt}$\hookrightarrow$\fbox{\sc Nickname} $+$ Maybe a \fbox{\sc Page Reference}\\[\medskipamount] \noindent After a~citation template declaration for a~particular work, use the~nickname to refer to that source thereafter.\\[\medskipamount] \noindent The~style template is called once, by {\tt lexi\-tex.sty} at startup. Blueprints for use by the style template are contained in {\tt lexi\-cite.tex}. The~dis\-tribution contains blueprints for the style template which will suit most purposes.\\[\medskipamount] \noindent {\bf Options and Special Commands}\\ \begin{description} \item[{\tt\string\lowcase}] before any \LexiTeX\ citation, forces {\em Id.}\ to lowercase, should it occur. \item[{\tt \string\lexicite\{blah\}}] is used to cite the source with the nickname {\tt blah}. \item[{\tt\string\\...\string\\}]marks special typeface (usually roman) with\-in an argument of a~citation template declaration. \end{description} \begin{itemize} \item[{\tt *}] used immediately after a \LexiTeX\ citation, suppresses output of a~bare citation template declaration or nickname. \item[{\tt -}] used between a \LexiTeX\ citation and an optional page or section reference, suppresses output of the~citation template declaration or nickname, and of the page reference. \end{itemize} \rule{0cm}{.5pc} \end{minipage} & & \begin{minipage}[t]{\subcardwidth} \rule{0cm}{.5pc} \begin{itemize} \item[{\tt+}] appends a~page or section number when typed after a citation template declaration or a~nickname. Always enclose in braces: \verb=+{123}=. \item[{\tt++}] appends a~plural page or section argument to any \LexiTeX\ citation. Enclose page numbers in braces, and separate items with \verb+\,+, \verb+\&+ or \verb+\dash+ (ranges not supported, but do no harm when used with non-statute citation templates and nicknames). \item[{\tt+-}] appends a~singular page or section argument, but writes multiple references to the table file. Most often used in combination with \verb+^...^+ and \verb+_..._+ to cope with references to multiple subsections of a single statutory provision. \item[{\tt\string^}] used within appended page or section references to enclose material that will appear only in the text, not in the table file. Used in all other arguments to enclose material that will appear only in initial or full-form citations. \item[{\tt\string_}] used within appended page or section references to enclose material that will appear only in the table file, not in the text. \end{itemize} \medskip \noindent {\bf Tables}\\[\smallskipamount] \noindent To write external table files, use: \begin{quote} \verb+\makebooktable+ (makes \verb+*.btb)+\\ \verb+\makearticletable+ (makes \verb+*.atb)+\\ \verb+\makecasetable+ (makes \verb+*.ctb)+\\ \verb+\makestatutetable+ (makes \verb+*.stb)+ \end{quote} \noindent Process the~external table file using \verb+makeindx+ with the~appropriate style file and output file name: \begin{quote} \verb+lexibook.ist+ $\rightarrow$\ \verb+*.bok+\\ \verb+lexiarti.ist+ $\rightarrow$\ \verb+*.art+\\ \verb+lexicase.ist+ $\rightarrow$\ \verb+*.cas+\\ \verb+lexistat.ist+ $\rightarrow$\ \verb+*.sta+ \end{quote} \noindent Place finished tables in the~document using: \begin{quote} \verb+\printbooktable+\\ \verb+\printarticletable+\\ \verb+\printcasetable+\\ \verb+\printstatutetable+ \end{quote} \vspace{3pt} \end{minipage}\\ \cline{1-1}\cline{3-3} \end{tabular}\\ {\small \begin{tabular}{|c|} \hline \begin{minipage}{\cardwidth} \renewcommand{\thefootnote}{\alph{footnote}} \centerline{\rule{0cm}{12pt}\large\bf Sample {\tt lexicite.tex} blueprint entry for \LexiTeX} \bigskip "\newcitestyle{article"\footnotemark[1]"}%"\\ " {rsirsr"\footnotemark[2]"A"\footnotemark[3]"}%"\\ " {[a],\ "\footnotemark[4]"[t],\ "\footnotemark[4] "[c]\ "\footnotemark[4] "[p],\ "\footnotemark[4] "(pl),\ "\footnotemark[4] "[rp]\ "\footnotemark[4] "[e]:[id]\ at~"\footnotemark[4] "(pl)\ at~"\footnotemark[4] "[xrf]}%"\\ " {6}"\footnotemark[5]"%"\\ " {{\#1}"\footnotemark[6]"{\#2}"\footnotemark[6]"{#3}"\footnotemark[6]"{\#4}"\footnotemark[6]"{#5}"\footnotemark[6]"{(\#6)}"\fo otnotemark[6]"}%"\\ \footnotetext[1]{This gives the name of the citation template to be generated.} \footnotetext[2]{The first part of this list of arguments consists always of exactly six letters: the first three pairs set the main and alternative typefaces for the author, title and first-cite-part portions of the citation. {\tt r}, {\tt s}, {\tt b} and {\tt i} select roman, small caps, boldface and italic type as the main typeface. These letter flags are not case sensitive. The alternative typefaces may the be specially selected in the text arguments to a citation using {\tt\string\\...\string\\}.} \footnotetext[3]{The last letter in this list sets the classification of citations declared with the resulting style macro. {\tt a}, {\tt b}, {\tt c} and {\tt s} will classify all citations generated by this citation template as being to articles, books, cases or statutes, respectively. This letter flag is not case sensitive.} \footnotetext[4]{These are the citation bridges that will be placed between the portions of the citation indicated. Two bridges, singular and plural, are given between {\tt [p]} (page) and {\tt [rp]} (reference page), and between {\tt [id]} ({\em id.} or {\em supra\/}) and {\tt [xrf]} (cross-reference).} \footnotetext[5]{This argument states how many arguments the finished citation template will accept. It must be a number between {\tt 1} and {\tt 6}.} \footnotetext[6]{Six pairs of matched braces must appear inside this argument. Any other than the first (which represents the citation nickname) may be left empty, but the bridges must of course take this into account. The number of arguments inserted here must correspond with the number stated on the line above.} \vspace{3pt} \end{minipage}\\ \hline \end{tabular}}\\ {\small \begin{tabular}{|c|}\hline \begin{minipage}{\cardwidth} \centerline{\large\bf\rule{0cm}{12pt}Standard \LexiTeX\ ver.~2.0i Citation Templates} \bigskip \def\ts{\vspace{6pt}} \small \begin{verbatim} \newbook{blah1}{B. Cardozo}{The Growth of The Law}{1924}+{15}. \end{verbatim} $\hookrightarrow$\newbook{blah1}{B. Cardozo}{The Growth of the Law}{1924}+{15}. \ts \begin{verbatim} \newbook{blah2}{}{Eastern Air Lines, Inc., 1978 Annual Report}{1979}+{15}. \end{verbatim} $\hookrightarrow$\newbook{blah2}{}{Eastern Air Lines, Inc., 1978 Annual Report}{1979}+{15}. \ts \begin{verbatim} \newman{blah3}{Comics Magazine Ass'n of America}{Press Release No.~51}{Sept.~16, 1954}+{15}. \end{verbatim} $\hookrightarrow$\newman{blah3}{Comics Magazine Ass'n of America}{Press Release No.~51}{Sept.~16, 1954}+{15}. \ts \begin{verbatim} \newman{blah4}{}{Telephone conversation with Douglas Borisky, Senior Revising Editor of the \\Columbia Law Review\\}{Apr. 10, 1986}. \end{verbatim} $\hookrightarrow$\newman{blah4}{}{Telephone conversation with Douglas Borisky, Senior Revising Editor of the \\Columbia Law Review\\}{Apr. 10,\newline 1986}. \ts \begin{verbatim} \newarticle{blah5}{Cox}{Federalism and Individual Rights}{73~Nw.~U.L. Rev.}{1}{1978}+{15}. \end{verbatim} $\hookrightarrow$\newarticle{blah5}{Cox}{Federalism and Individual Rights}{73~Nw.~U.L. Rev.}{1} {1978}+{15}. \ts \begin{verbatim} \newarticle{blah6}{\\O.W. Holmes\\}{Law in Science and Science in Law}{\\in\\ Collected Legal Papers}{210}{1920}. \end{verbatim} $\hookrightarrow$\newarticle{blah6}{\\O.W. Holmes\\}{Law in Science and Science in Law}{\\in\\ Collected Legal Papers}{210}{1920}. \ts \begin{verbatim} \newarticle{blah7}{Maitland}{The Mystery of Seisin}{\\in\\ 3 Select Essays in Anglo-American Legal History}{591}{1909}. \end{verbatim} $\hookrightarrow$\newarticle{blah7}{Maitland}{The Mystery of Seisin}{\\in\\ 3 Select Essays in Anglo-American Legal History}{591}{1909}. \ts \begin{verbatim} \newnews{blah8}{}{Abscam Jury Sees Videotape of Deal}{San Francisco Chron., Aug.~14, 1980} {14, col.~1}{}. \end{verbatim} $\hookrightarrow$\newnews{blah8}{}{Abscam Jury Sees Videotape of Deal}{San Francisco Chron., Aug.~14, 1980}{14, col.~1}{}. \ts \begin{verbatim} \newcase{blah9}{Baker v.\ Fortney}{299~S.W.2d}{563}{Mo.\ Ct.\ App.\ 1957}+{564}. \end{verbatim} $\hookrightarrow$\newcase{blah9}{Baker v.\ Fortney}{299~S.W.2d}{563}{Mo.\ Ct.\ App.\ 1957}+{564}. \ts \begin{verbatim} \newecase{blah10}{Clough Mill Ltd v Martin}{[1984] 3~All ER}{982}+{986}. \end{verbatim} $\hookrightarrow$\newecase{blah10}{Clough Mill Ltd v Martin}{[1984] 3~All ER}{982}+{986}. \ts \begin{verbatim} \newjcase{blah11}{Decision of the Tokyo District Court, February 18, 1988}{Hanrei jih\=o, n.~1295} {132}+{133}. \end{verbatim} $\hookrightarrow$\newjcase{blah11}{Decision of the Tokyo District Court, February 18, 1988}{Hanrei jih\=o, n.~1295}{132}+{133}. \ts \begin{verbatim} \newstatute{blah12}{Robinson-Patman Act}{15~U.S.C.}{1982}+{{13^--13b^}\, {21^a^}}. \end{verbatim} $\hookrightarrow$\newstatute{blah12}{Robinson-Patman Act}{15~U.S.C.}{1982}++{{13--13b}\, {21a}}. \ts \begin{verbatim} \newconstitutionart{blah13}{Federal Constitution}{1957}+{1}. \end{verbatim} $\hookrightarrow$\newconstitutionart{blah13}{Federal Constitution}{1957}+{1}. \ts \begin{verbatim} \newconstitutionsch{blah14}{Federal Constitution}{1957}+{1}. \end{verbatim} $\hookrightarrow$\newconstitutionsch{blah14}{Federal Constitution}{1957}+{1}. \vspace{3pt} \end{minipage}\\ \hline \end{tabular} } \end{document} % % \end{macrocode} % \changes{beta}{15 May 1993}{Put all typeface selectors in the % print routine in braces, so that punctuation does not get caught up in % the game. Things are a bit messy; the % problem has been solved by rearranging the bridges so that they conform % to their % preceding text, but the full wax will be to set them all in roman.} % \changes{beta}{19 May 1993}{Cite to previous work in the same footnote, % where there is an intervening source, should produce {\protect\em supra}, % without a footnote number reference. Fixed.} % \changes{beta}{25 May 1993}{Fixed failure to suppress section % markers in statute % tables for cites with no section specified.} % \changes{beta}{25 May 1993}{Fixed failure to properly % truncate short book citations % where the author has not been previously cited.} % \changes{beta}{26 May 1993}{Fixed problem with use of {\tt\protect\string\protect\ldots} % (was appending a comma % to the three dots).} % \changes{beta}{8 June 1993}{Completed addition of % {\tt\protect\string\protect^...\protect\string\protect^}, % {\tt\protect\string\protect_...\protect\string\protect_} and % {\tt\protect\string\protect|...\protect\string\protect|}.} % \changes{beta}{9 June 1993}{fixed % {\tt\protect\string\protect\gdef} % bug in definitions % of {\tt\protect\string\protect^}, {\tt\protect\string\protect|} % and {\tt\protect\string\protect_} as active % characters, so that these defs are % {\tt\protect\string\protect\def}, % and turn off % under grouping.} % \changes{beta}{11 June 1993}{localized use of % {\tt\protect\string\protect\@law@barkill} % in full and short % print routines, to prevent chaos.} % \changes{prerelease}{5 June 1994}{General proofreading and tidying-up. % Discovered % that placement of {\tt\protect\string\protect\newcite} % macro was initiating a complete % parsing of the string produced by % {\tt\protect\string\protect\@newciteoptions} every time % a new citation was declared. Moved higher so it only happens % once. \LexiTeX\ will not be any faster to load, and there are % no memory savings from this particular change, but running % should be a little quicker. % Also cut out a couple of declarations that % went unused.} % \changes{prerelease}{5 June 1994}{ % Found that the old {\tt\protect\string\protect\@law@stashinfo} % macro was being % passed at least six arguments that were duplicated in % token registers! This was fixed in the course of the % (start of) complete re-drafting of the citation-defining % routines. The time saved should make the finished macros % faster, although some speed will be lost on list-macro % parsing.} % \changes{prerelease}{5 June 1994}{Completed all list-macro routines, with the exception of % the cutting and adding macros themselves.} % \changes{prerelease}{5 June 1994}{{\em Drastically\/} % simplified % parsing of typeface choices by % cutting out all of the {\tt\protect\string\protect\@ifnextchar} % rubbish, and getting % all typeface options at one go, parsing them with a % generic macro. The trade-off is that there have to be % exactly seven arguments passed to % {\tt\protect\string\protect\@law@parseoptions}. % And so eliminated all the prone-to-error syntax surrounding % these typeface selectors. Not much of a loss. Should load and % be a lot faster to load now.} % \changes{prerelease}{5 June 1994}{Changed the syntax for specifying bridges in the % {\tt lexicite.tex} file. May not be all that much more readable, % but at least now it fits on one line most of the time.} % \changes{prerelease}{6 June 1994}{First trial of revised code---it % works! Minor debugging not worthy of note.} % \changes{prerelease}{11 June 1994}{Set to work on adding comments in DOCSTRIP % format. Realized that this is going to be a very big file % by the time it's done, and can't wait to get finished and be shut % of it for the time being. Also began investigating \BibTeX\ % and its style language. Correspondence with Nelson Beebe and % George Greenwade concerning a \BibTeX/\LexiTeX\ link-up.} % \changes{prerelease}{24 June 1994}{Concluded that using % a separate ``{\tt\protect\string\protect\@law@stasheverything}'' macro % was unnecessary; merged with {\tt\protect\string\protect\@newcite}. From % six arguments and six token registers to no data shunting % at all in this routine. Again, a little speed gained.} % \changes{2.0}{6 July 1994}{Release to known users % of first running DOCSTRIP version of code} % \changes{2.0a}{7 July 1994}{Minor fix to {\tt lexicite.tex} % file.} % \changes{2.0b}{23 July 1994}{Major redrafting of code for % proof pages completed. File to generate proof pages for % all styles on system incorporated in {\tt lexitex.doc} for % distribution.} % \changes{2.0b}{23 July 1994}{Redrafting of {\tt % \protect\string\protect\@justabovecheck} routine, after % numerous glitches showed up % on the proof pages.} % \changes{2.0b}{23 July 1994}{Version 2.0b released on the world.} % \changes{2.0j}{94/12/06}{Numerous bug fixes and some tidying % up.} % \begin{macrocode} \endinput % \end{macrocode} %% \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 \~} %% % \Finale \PrintIndex \PrintChanges