%\iffalse THIS IS A META COMMENT %==================================================================== % Master Bibliography Style % for customizing bibliographic style files (.bst) % with the help of docstrip.tex % and the auxiliary program makebst.tex %-------------------------------------------------------------------- % (See version and date in the \ProvidesFile command below) %-------------------------------------------------------------------- % This file supports numerical and author-year citation styles % for natbib, harvard, astronom, authordate, apalike % It also supports languages other than English %-------------------------------------------------------------------- % This file is self-documenting: simply LaTeX it! % (Alternatively, extract documentation driver with option `driver') %==================================================================== % %<*!tail> %------------------------------------------------------------------- % The original source file contains the following version information: %\fi % \ProvidesFile{merlin.mbs}[1996/12/16 3.82 (PWD)] %\iffalse % % NOTICE: % This file may be used for non-profit purposes. % It may not be distributed in exchange for money, % other than distribution costs. % % The author provides it `as is' and does not guarantee it in any way. % % Copyright (C) 1994, 1995, 1996 Patrick W. Daly % Max-Planck-Institut f\"ur Aeronomie % Postfach 20 % D-37189 Katlenburg-Lindau % Germany % % E-mail: daly@linmpi.mpae.gwdg.de %------------------------------------------------------------------- % %<*a&!a> % The following ensures that the driver part is not seen by makebst % The driver part must not contain any \end other than \end{document} ! \ifx\endoptions\undefined\let\tempx=\relax\else \long\def\tempx#1\end#2{}\fi\tempx % %<*driver> \NeedsTeXFormat{LaTeX2e}% \documentclass[a4paper,10pt,twoside]{article}% \usepackage{doc}% \raggedbottom \CodelineNumbered \RecordChanges % Comment out next line to print coding \OnlyDescription \setlength{\oddsidemargin}{0.5\paperwidth} \addtolength{\oddsidemargin}{-0.5\textwidth} \addtolength{\oddsidemargin}{-1in} \setlength{\evensidemargin}{\oddsidemargin} \begin{document} \DocInput{merlin.mbs} \end{document} % % END OF META COMMENT \fi % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \CheckSum{277} % \setcounter{StandardModuleDepth}{1} % \setcounter{IndexColumns}{2} % \setlength{\IndexMin}{10cm} % % \changes{1.0}{1993 Aug 16}{Initial version} % \changes{2.0}{1994 Jan 31}{Add multilingual capabilities} % \changes{2.1--2.5}{1995 May 2}{Changes to \texttt{babel.mbs} parallel 1.3--1.7 % in \texttt{genbst.mbs}} % \changes{1.3(2.1)}{1994 Jul 1}{Change documentation to \LaTeXe} % \changes{1.3(2.1)a}{1994 Sep 1}{Alter wording of article title capitalization % choice} % \changes{1.4(2.2)}{1994 Sep 5}{Add full author name possibilities} % \changes{1.4(2.2)}{1994 Sep 5}{Fix up some punctuations} % \changes{1.4(2.2)a}{1994 Sep 7}{Add possibility to put titles in quotes} % \changes{1.5(2.3)}{1994 Sep 15}{Accommodate new \texttt{harvard.sty}} % \changes{1.5(2.3)}{1994 Sep 15}{Add full names for \texttt{natbib} v5.3} % \changes{1.5(2.3)a}{1994 Oct 11}{Add option so year can contain any text} % \changes{1.5(2.3)b}{1995 Jan 18}{Allow edited by to be in parentheses} % \changes{1.5(2.3)b}{1995 Jan 18}{Allow (year) to have no punctuation % following} % \changes{1.5(2.3)c}{1995 Jan 20}{Journal volume numbers with more choice} % \changes{1.6(2.4)}{1995 Feb 2}{Date with no punctuation preceding it} % \changes{1.6(2.4)}{1995 Feb 2}{Editor names can be reversed like authors'} % \changes{1.6(2.4)}{1995 Feb 2}{Can abbreviate `edited by' to `ed(s).'} % \changes{1.6(2.4)}{1995 Feb 2}{Released version} % \changes{1.7(2.5)}{1995 Feb 9}{Add \texttt{seq-key} option} % \changes{3.0}{1995 Mar 15}{Becomes \texttt{merlin.mbs}, with language % support in additional files} % \changes{3.0}{1995 Feb 27}{Allow full author names to be reversed} % \changes{3.0}{1995 Mar 1}{Add \texttt{isbn} field option} % \changes{3.0}{1995 Mar 3}{Citation names can be bold or small caps} % \changes{3.0}{1995 Mar 8}{Colon and space may follow year} % \changes{3.0}{1995 Mar 15}{Names can be reversed, dotless intials} % \changes{3.0}{1995 Mar 17}{Volume, number can be followed by semi-colon} % \changes{3.0}{1995 Mar 20}{Allow word editor or ed to be in parentheses} % \changes{3.0}{1995 Mar 20}{Abbreviated journal names can have dots removed} % \changes{3.1}{1995 May 4}{Fix `edited by' so it is not abbreviated % automatically with `editor'} % \changes{3.1}{1995 May 6}{Re-do head/tail options to allow easy update of % older \texttt{.dbj} files} % \changes{3.2}{1995 May 19}{Minimum number of authors can be up to 6, not 5} % \changes{3.2}{1995 May 19}{Allow date as part of journal spec., for medical % journals} % \changes{3.2}{1995 May 19}{Suppress `pages' and `pp'} % \changes{3.2}{1995 May 19}{Allow date to be `1994 Jul', with or without dot} % \changes{3.2}{1995 Jun 7}{Authors as Jones C.T.} % \changes{3.2}{1995 Jun 16}{Sort without \emph{von} part} % \changes{3.2}{1995 Jul 31}{Release as version 3.2} % \changes{3.3}{1995 Aug 7}{Extra labels put in braces so they are treated % as one unit by natbib} % \changes{3.3}{1995 Aug 7}{Publisher's address can precede name} % \changes{3.3}{1995 Sep 4}{Add full authors only if different from short list} % \changes{3.4}{1995 Sep 5}{Add number of references as argument to % \texttt{thebibliography} environment} % \changes{3.4}{1995 Sep 28}{Fix placement of \texttt{bolden} in % \texttt{format.vol.num.pages}} % \changes{3.4}{1995 Sep 28}{Add possibility of date between volume and pages} % \changes{3.4}{1995 Sep 28}{Word `and' can be in normal font in citations} % \changes{3.5}{1995 Oct 4}{Tech Reports to have titles like books} % \changes{3.5}{1995 Oct 9}{Delimit \texttt{\char`\\harvardyearright} properly} % \changes{3.5}{1995 Oct 9}{Add option to sort by year (numerical only)} % \changes{3.5}{1995 Oct 12}{Allow multiple journal-name files} % \changes{3.5}{1995 Oct 16}{Allow months in dates even for author-year} % \changes{3.5}{1995 Oct 24}{Fix sorting bug for limited number of authors} % \changes{3.5}{1995 Oct 30}{Add \texttt{named} format for author--year cites} % \changes{3.6}{1995 Nov 2}{Blocks can be separated by semi-colons} % \changes{3.6}{1995 Nov 23}{Journal titles in normal font} % \changes{3.6}{1995 Nov 23}{Volume subnumber added to pages} % \changes{3.6}{1995 Nov 24}{Book pages in parentheses} % \changes{3.6}{1995 Dec 7}{Put Jr at end for AGU author style} % \changes{3.6}{1995 Dec 7}{Put `and' in same font in list and citation} % \changes{3.6}{1996 Jan 30}{Allow `et al' to be in normal font} % \changes{3.6a}{1996 Feb 1}{Fix bugs with \texttt{xand} option} % \changes{3.7}{1996 Feb 2}{Fix small caps with NFSS} % \changes{3.7}{1996 Feb 5}{Fix clash of \texttt{emphasize} and % \texttt{purify\$}} % \changes{3.8}{1996 Feb 29}{Add \texttt{alpha}-type style} % \changes{3.8}{1996 Mar 1}{Style alpha is never unsorted} % \changes{3.8}{1996 Mar 12}{Allow blanks between blocks} % \changes{3.8}{1996 Mar 12}{Publisher in parentheses} % \changes{3.8}{1996 Mar 15}{Allow author-year to be sorted by year} % \changes{3.8}{1996 Mar 16}{Cited `and' resets only one attribute} % \changes{3.8}{1996 Mar 19}{Allow date to be between volume and number} % \changes{3.81}{1996 Jun 17}{Add \texttt{\char`\\natexlab} for \texttt{natbib} 6.3} % \changes{3.81}{1996 Jun 19}{Fix coding for adding `page' to journals} % \changes{3.81}{1996 Jun 19}{Add `volume' to journals} % \changes{3.81}{1996 Jun 19}{Remove word `in'} % \changes{3.81}{1996 Jun 19}{Place publisher before chapter/pages} % \changes{3.81}{1996 Jun 25}{Allow period after date} % \changes{3.81}{1996 Jun 26}{Commas between blocks, except for article titles % where period comes} % \changes{3.81}{1996 Sep 12}{Allow comma before date} % \changes{3.81}{1996 Sep 13}{Reorganize incollection organization and % publisher} % \changes{3.81}{1996 Sep 13}{Allow edition to come before publisher} % \changes{3.81}{1996 Sep 16}{Allow author--year to be in citation order} % \changes{3.81}{1996 Sep 16}{Publisher, address, date can all be in % parentheses} % \changes{3.81}{1996 Sep 18}{Remove extraneous hyphen before % \texttt{\char`\\getans}} % \changes{3.82}{1996 Nov 15}{Allow pages at end before notes} % \changes{3.82}{1996 Nov 15}{Fix bug with quoted titles when title missing} % \changes{3.82}{1996 Dec 16}{Fix bug that put comma before publisher in % parentheses} % \changes{3.82}{1996 Dec 16}{Allow AGU author style with full names} % % \pagestyle{myheadings} % \markboth{P. W. Daly}{A General Master Bibliography Style} % % \title{{\bfseries A Master Bibliographic Style File}\\ % for numerical, author--year, multilingual applications} % % \author{Patrick W. Daly} % % \GetFileInfo{merlin.mbs} % \date{This paper describes file \texttt{\filename},\\ % version \fileversion{} from \filedate} % % \maketitle % % \MakeShortVerb{\|} % % \parskip=1ex \parindent=0pt % % \newcommand{\btx}{{\sc Bib}\TeX} % \newcommand{\dtx}{\textsf{docstrip}} % % \section{Introduction} % A problem facing users of \btx{} is that there is no standard for % formatting lists of references. Publishers and journals insist % on completely arbitrary placement of commas, colons, and ordering of % entries. Furthermore, author--year styles of citations are supported by % certain special \LaTeX{} packages, but each for only a very limited % number of bibliographic styles. Finally, most such style files are for % English only, and any adaptations to other languages must duplicate the % entire spectrum of such files. % % All of these obstacles are in principle easily overcome by simply % reprogramming \btx{} by means of an appropriate \emph{bibliographic style % file} (extension \texttt{.bst}). \btx{} is in fact extremely flexible; % unfortunately its programming language is very low-level, permitting only % the most basic of hacks for the normal user. % % The solution to this is a \emph{generic} or \emph{master bibliographic % style file} (extension \texttt{.mbs}) containing \dtx{} options for % alternative coding. By selecting the desired options, one can customize a % \texttt{.bst} file to one's needs. % % This file, \texttt{\filename}, is my latest version of a general-purpose % \texttt{.mbs} file to meet as many bibliographic needs as possible. % It was originally assembled from Oren Patashnik's standard files {\tt % plain.bst} and \texttt{unsrt.bst}, plus his non-standard file {\tt % apalike.bst}, a very basic author--year citation style. % It has since evolved extensively as I have added features found in % available \texttt{.bst} files, and those demanded by publishers or % suggested to me by many user/contributors. % % To produce a customized bibliographic style (\texttt{.bst}) file from this % master file, simply \TeX{} or \LaTeX{} the `program' \texttt{makebst.tex}. % When asked for the name of the master file, answer with % \begin{quote}\tt\filename\end{quote} % and then reply to the questions in the following menus. The last question % is whether you want to generate the \texttt{.bst} file right away. % % More details on this process and on the options available are to be found % in the rest of this article. % % \section{History of this File} % % Since the first release of this generic file, in November 1993, under the % name \texttt{genbst.mbs}, I have received innumerable % suggestions for additions, most of which I have tried to include. Often % this has resulted in reorganizing the coding, and adding new functions. % The resulting \texttt{.bst} files are now quite different from those of % Patashnik, although the underlying ideas are the same. % % A second version was released shortly afterwards that paralleled the first % one except that it included support for languages other than English. % That file was named \texttt{babel.mbs}, following the \texttt{babel} % system of Johannes Braams. Although I always viewed it as version 2 of % \texttt{genbst.mbs}, all additions to the one were also included in the % other. This of course was tedious and prone to error. I looked forward to % the day when \texttt{babel.mbs} would become the only supported version. % The reason I was reluctant to do that before was that the overhead per % language was fairly high, and I dreaded to think how large the file would % become when 20 or 30 languages were added. % % I have now found a way to put the language definitions into separate files, % one per language. This means that new languages do not burden the basic % file, and that users need only keep those support files that might % interest him or her. New ones may also be made up locally by hacking an % existing language definition file. (The file \texttt{english.mbs} is % supplied only for this purpose.) % % For this reason, \texttt{\filename} is released as version~3 of % \texttt{genbst.mbs} and \texttt{babel.mbs}. In spite of the new name, it % should be regarded as their direct successor. Needless to say, this means % that the earlier two \texttt{.mbs} files will no longer be maintained. % % To include language support, all explicit English words like % \textsl{editor} and \textsl{chapter} have been replaced by functions % whose definitions may be altered in the resulting \texttt{.bst} file % (less desirable method) or which may be redefined by an external % language definition file (preferred method). Alternatively, one can select % the pseudo-language named \texttt{babel} which inserts \LaTeX{} commands % for the explicit words, the definitions of which must be % contained in a file called {\tt babelbst.tex}. Only the languages English % and \texttt{babel} are included internally to \texttt{\filename}; all % others are contained in external language definition files. % % Another new feature is the possibility of including a file containing % prestored shorthand designations for certain journal names. Such a file % is provided for physics journals, but others could be made up using this % one as a model. See Section~\ref{sec:jnames}. % % To take advantage of these external files, one must use % \texttt{makebst} version~3; \texttt{\filename} may still be used with % earlier versions, but without the external files. % % \def\temp{merlin.mbs}\ifx\temp\filename % This file is now named after the legendary magician in the hope that it % can produce wonders by incanting the right magic formulas. However, one % should bear in mind that even Merlin was not omnipotent. It would be too % much to hope that all bibliographic wishes will be fulfilled quickly and % easily, but we shall try as best we can. Watch the wizardry at work! % \fi % % \section{About Master Bibliographic Style Files} % % For details about how master bibliography style files are to be % constructed, see the documentation on \texttt{makebst}. Here only a % rough overview is given. % % \subsection{The \dtx{} Program} % The \dtx{} program, written by Frank Mittelbach, is now a fundamental % part of the \LaTeXe{} installation. Its original purpose is to remove % comment lines from documented files, but has the secondary function of % selecting alternative lines of coding. % % A master \btx{} bibliographic style file is one that, when processed by % \dtx{} with selected options, produces a regular \btx{} \texttt{.bst} % file with the desired features. % % In this sense, \dtx{} functions something like a C preprocessor. In fact, % Oren Patashnik's original \texttt{.bst} files were all produced from a single % source file by means of the preprocessor. The advantage of \dtx{} is that % it is portable to all installations with \TeX. % % \subsection{The \dtx{} Batch Job} % % The \dtx{} program can be run either interactively, where the user must % answer questions via the keyboard, or by means of a batch job where all % the inputs are prepared in a file beforehand. For producing a \btx{} % style file from a master file, the batch job method is the only feasible % one, simply because of the large number of options available. (There is % another reason for employing a batch job: the interactive method adds an % |\endinput| command at the end, something that \btx{} will protest % about.) % % The batch job files in general do not have any particular extension but I % use \texttt{.dbj} for \emph{\dtx{} batch job}. These files are useful % because they document the options used to produce the \texttt{.bst} file, % and they may be edited to experiment with alternative options. % % \subsection{The \texttt{makebst} Program} % % It is possible to make up a batch job file by hand using the option % information listed in Section~\ref{sec:options}, but my accompanying % program \texttt{makebst} simplifies the task considerably. It reads menu % information in the master file itself in order to present the user with % an interactive list of choices, translating the answers into appropriate % options that are then written to a batch job file. % % To run it, simply process \texttt{makebst.tex} with \TeX\ or \LaTeX, and % answer the questions. The first of these is whether you want some % instructions or not, and the second is the name of the \texttt{.mbs} that % you want to use. The next query is about the name of the desired % \texttt{.bst} file (which will also be the root name of the batch job). % After that, all further questions come from menu information in the % master file. % % At the very end, \texttt{makebst} asks if it should run the batch job for % you. Isn't that a fine service? % % \section{Multilingual Adaptation} % The original \texttt{.bst} files from Oren Patashnik contain explicit % English words that are output into the final text. Since \LaTeX{} is % increasingly being used for other languages, and since the official % version since December 1991 also uses macros in place of explicit words, % it seems appropriate for \btx{} to follow suit. % % In this master bibliographic style file {\tt\filename}, all explicit % words have been replaced by functions: e.g., the word \textsl{editor} has % become the function \texttt{bbl.editor}. Depending on the language option % chosen, this function is defined to be the text {\tt"editor"}, % {\tt"Redakteur"}, or {\tt"redacteur"}, for English, German, and French, % respectively. % % There is another special `language' called \texttt{babel} that instead inserts % the text |"\bbleditor{}"|; the definitions of these \LaTeX{} commands % must be in a separate file named \texttt{babelbst.tex} that is read in at % the start of the bibliography. % % Only English and \texttt{babel} are supported directly in % \texttt{\filename}; all other language definitions are contained in % separate definition files, e.g., \texttt{french.mbs}, \texttt{german.mbs}. % % The language selection is made during the \texttt{makebst} run, which % asks for the name of the language definition file as the first menu item. If % either English or \texttt{babel} is wanted, reply with the default, which % is \texttt{\filename} itself; otherwise give the name of the desired % language file. % % \begin{quote}\slshape % \textbf{Note:} the language definition files can only be used with % \texttt{makebst} version~3 or later, and % % with an external definition file, the \dtx{} run requires two passes % through \texttt{\filename}, doubling the processing time. % \end{quote} % % \subsection{Adding a New Language Definition File} % % To create a new language definition file, simply take one of the existing % ones, like \texttt{english.mbs}, and replace the explicit English words % with their translations. There are, however, a number of points that can % complicate this procedure. % % \begin{enumerate} % \item % Do not forget to change the documentation in the file, especially % version number, date, author. % % \item % There are option menus that need to be translated too. It might also be % desirable to add or remove options. In most cases, the options in the % language files involve possible abbreviations, like % \begin{quote} % \verb!\mes{^^JABBREVIATE WORD `PAGES':}!\\ % \verb!\optdef{*}{}{`Page(s)'}{(no abbreviation)}!\\ % \verb!\optdef{a}{pp}{`Page' abbreviated}{as p. or pp.}!\\ % \verb!\getans! % \end{quote} % % In this example, the option \texttt{pp} appears later in the definition % \begin{quote} % \verb!FUNCTION {bbl.pages}!\\ % \verb+%{ "pages" }+\\ % \verb!%{ "pp." }! % \end{quote} % This a \emph{local} option, that only affects the coding in the definition % file. It is possible to add more local options. % % \item % However, all options, whether activated by the main file or by the % definition file, apply to both. In other words, there really is no such % thing as a local option. In the above example, \texttt{pp} is only % local because it is never used in \texttt{\filename}. % % \item % Add the name of the language as an option, with % \begin{quote} % \verb!\mes{^^JOptions for ENGLISH}!\\ % \verb!\wr{\spsp\spsp\sep english\pc: English language}! % \end{quote} % (This is how options are added without |\optdef| and |\getans|.) The % main file just might recognize it in order to take some % language-specific action. The least it should do is add a comment at % the start of the \texttt{.bst} file stating for which language it is to % be used. % % \item % There could be some problems with edition numbers due to language % dependent ways of treating ordinal numbers (1st, 2nd, 3rd in English; % 1$^{\mbox{\scriptsize re}}$, 2$^{\mbox{\scriptsize e}}$, % 3$^{\mbox{\scriptsize e}}$ in French; 1., 2., 3., in German). Some % accommodation already exists for the oddball language English, and % further hacking may be needed for others. % % \item % If there should be any need for a double-quote character in % the translations (German needs it for umlauts) then there is trouble % because the \btx{} strings do not allow it. Instead, use the command % |\qq|, as in the German word |F\qq{u}nfte| for {\sl F\"unfte} (fifth). % It is then vital to add the option \texttt{umlaut} with % \begin{quote} % \verb!\wr{\spsp\spsp\sep umlaut\pc: Activate umlaut command}! % \end{quote} % % Bernd Raichle points out that |\^^b| can be used in place of |\"| % within \btx{} code. One can thus replace |F\qq{u}nfte| with |F\^^b unfte| % and do away with the \texttt{umlaut} option. % % \end{enumerate} % % \subsection{Changing \texttt{babelbst.tex} for a New Language} % % Alternatively, a new language can be added by % modifying the file \texttt{babelbst.tex} and selecting the language {\tt % babel} for the \texttt{.bst} file. If this is the only language to be used, % then just change the English words in the definitions. % % However, some form of switching would be more desirable. With \TeX\ % version 3, there is a |\language| parameter to control the hyphenation % patterns, and this could be used to select the correct language. For % example, if language 0 is English and language 1 German, then put the % English version of \texttt{babelbst.tex} into \texttt{englbst.tex} and the % German % version in \texttt{germbst.tex}. Then \texttt{babelbst.tex} could contain: % \begin{quote}\begin{verbatim} % \ifcase\language \input{englbst} \or \input{germbst} % \else \input{englbst} \fi % \end{verbatim} % \end{quote} % % This is of course installation dependent. % % \subsection{Extracting the Sample \texttt{babelbst.tex} File} % % A sample \texttt{babelbst.tex} (for English) is contained in this master % file. Extract it with \dtx{} and the option \texttt{bblbst}. It may be % edited (and possibly renamed) for other languages as needed. % % \subsection{Problem with Edition Numbers} % Something to note here is the ordinal numbers for editions. \btx{} % demands that the field \texttt{edition} be given in the database as a word % \textsl{First}, \textsl{Second}, etc., or as \textsl{1st}, \textsl{2nd}, % etc. This is bad policy % because it is language dependent. So what I do is to test for the words % \textsl{first} through \textsl{fifth} (case independently) and replace them % with language-dependent equivalents. If the {\tt} option is selected, % these equivalents are ordinal numbers for that language. Any other words % cannot be interpreted and must be printed as is. % % However, if the \texttt{edition} is given as a number, with or without % following letters, then the numbers 1 through 5 are replaced by their % words; any higher numbers just have the ordinal ending (\textsl{th} % in English) added to them. % % These numbers are only used with the word \textsl{edition} or % its equivalent in other languages, so the translators need % to provide only the one gender, e.g., feminine for both German and % French. % % \section{Prestoring Names of Journals}\label{sec:jnames} % % The standard \texttt{.bst} files contain the names of some 20 journals % in the field of computing, stored as macros for easy reference within the % database \texttt{.bib} files. For example, the \textsl{Journal of % Computer and System Sciences} can be referred to as \texttt{jcss}. % With the option \texttt{jabr} (for journal abbreviation) this same % shorthand produces \textsl{J.~Comput. Syst. Sci.}. % % Some \texttt{.bst} files for physics journals include additional journal % names, and it is conceivable that other faculties might wish to prepare % their own such lists, with each name present in a full or abbreviated % form. Such an external file can now be added with \texttt{\filename} and % \texttt{makebst} version~3. % % As a model, I supply a file \texttt{physjour.mbs} with the names of % physics journals which I have taken from other \texttt{.bst} files. % I also have a contributed file \texttt{photjour.mbs} containing names of % optics journals. % % In fact, version~3.5 can even include multiple journal-name files. % Thus one can decide whether to include both, one, or none of the above % files. % % \section{Updating Older \texttt{.dbj} Files}\label{sec:update} % If you have existing \texttt{.dbj} files for generating \texttt{.bst} % files from the older version \texttt{genbst.mbs}, these may be run with % \texttt{\filename} by simply changing the name of the source % \texttt{.mbs} file. For example, where the older \texttt{.dbj} file contains % the line % \begin{quote} % |\generateFile{mystyle.bst}{f}{\from{genbst.mbs}{%| % \end{quote} % edit the file so that \texttt{genbst.mbs} is replaced by % \texttt{\filename}. The resulting \texttt{mystyle.bst} file will then be % an updated version of the older one, containing all the same features. % % \section{Acknowledgements} % I wish to thank all the people who have taken the trouble to send me % suggestions or special requests. Admittedly, it has been out of % self-interest on their part, since they had bibliographic needs to be % met. And I have often questioned the need for many of their demands. Yet, % that is part of the bibliographic jungle that I am trying to eliminate. % If I thought that bibliographies were arbitrarily formatted before I % started this project, I have more than sufficient confirmation since % then. The fault lies not with the poor contributors, but with the % publishers who cannot agree on a decent standard. % % I especially want to thank Frank Mittelbach, not only for creating \dtx{} % in the first place, but also for sending me his bibliographic requirements, % and for suggesting an improvement to \texttt{makebst}. % % And finally, all of us must thank Oren Patashnik for providing \btx; % without its flexibility and programmability (in spite of the complexity % of the language) the master bibliographic styles would not be possible at % all. % % \section{The Options}\label{sec:options} % Here I present a list of all the \dtx{} options that are % available in this file {\tt\filename}. % The normal user can skip this section since he will probably make use % of the menus via \texttt{makebst}. These are described in % Section~\ref{sec:menu}. The menus provide much more informative prompts % than the heavily abbreviated option names listed here. In other words, % the options described in this section are meant for internal (programmer) % usage, while the normal interface for the user is the menus. % % I have tried to avoid % conflicts with mutually exclusive options by always letting one dominate if % more than one has been specified. Such options have the same prefix, such % as \texttt{nm-rev} and \texttt{nm-init}. % If one uses \texttt{makebst} to produce the % \dtx{} batch job, then it is impossible to give mutually % exclusive options unless one edits the batch file oneself afterwards. % (Anything is possible with computer freaks!) % % Most mutually exclusive options have the same prefix before the hyphen. % % \newenvironment{opt}{% % \begin{list}{}{\labelwidth2cm \leftmargin2.5cm \labelsep1em \rightmargin0pt % \def\makelabel##1{\ttfamily##1 \hfill}}}{\end{list}} % \textbf{Citation style:} whether or not a numerical or author--year system % is to be used. % \begin{opt} % \item[--] default is numerical, standard \LaTeX, as for {\tt % plain.bst}.\\ % |\bibitem{key}...| % \item[cite] special for listing entire databases; the cite key is used % as the label so it may be listed.\\ % |\bibitem[key]{key}...| % \item[ay] for author--year style of citations. Various forms of |\bibitem| % are provided under this option, to support different types % of \LaTeX{} styles for interfacing with the author--year system. % \item[alph] for \texttt{alpha.bst} style of citations; essentially numerical % but an abbreviation of the author names plus year is used as % the label. % \end{opt} % % If \texttt{ay} has been selected, then the type of author--year interface % is selectable. Some of these, like \texttt{natbib} and \texttt{harvard} % exist in two versions because of updates in these systems. % \begin{opt} % \item[--] default is the system I invented for my \texttt{natbib.sty}.\\ % |\bibitem[author(year)]{key}...| % \item[nat] for extended format of \texttt{natbib.sty} version 5.3\\ % |\bibitem[author(year)full author]{key}...| % \item[alk] for the \texttt{apalike.sty} of Oren Patashnik and related % systems\\ % |\bibitem[author, year]{key}...| % \item[har] for the Harvard family of styles (with \texttt{harvard.sty}).\\ % |\harvarditem[short]{long}{year}{key}...| % \item[harnm] for the extended Harvard family, containing some extra commands % used by \LaTeXe\ version 2.0.3 of \texttt{harvard.sty} % \item[ast] for astronomy family of styles (with \texttt{astron.sty}).\\ % |\bibitem[\protect\astroncite{author}{year}]{key}...| % \item[cay] for the Chicago family of styles (with \texttt{chicago.sty}).\\ % |\bibitem[\protect\citeauthoryear{long}{short}{year}]{key}...| % \item[nmd] for the `named' variant of Chicago (with \texttt{named.sty}).\\ % |\bibitem[\protect\citeauthoryear{author}{year}]{key}...| % \item[cn] for the ``author--date'' group of styles (with {\tt % authordate1-4.sty})\\ % |\bibitem[\protect\citename{author, }year]{key}...| % \end{opt} % % \textbf{Sequence:} the order in which the references are listed. % \begin{opt} % \item[--] default is alphabetical by all authors, date, title % \item[seq-yr] order by year, authors, title % \item[seq-no] sequence by citation order % \item[seq-lab] (author--year) by label, date, title (means that Daly % precedes Daly and Williams, precedes Daly et al.) % \item[seq-key] (author--year) like \texttt{seq-lab} except that for % identical authors and year, the cite keyword is used % instead of the title % \item[vonx] ignore \emph{von} part of name when ordering (default is % to consider \emph{von} as part of the whole surname) % \end{opt} % % \textbf{Language selection:} the translations of certain explicit words. % \begin{opt} % \item[--] default is English, for \textsl{and}, \textsl{chapter}, % \textsl{editor}, etc.; % \item[babel] replace words with \LaTeX{} commands that are defined % in the file \texttt{babelbst.tex}; % \end{opt} % % If one of the external language definition files is used, then the name of % its language should be in the list of active options. Many other language % names are already included as options in this main file simply for the % purpose of adding a comment at the start of the \texttt{.bst} file. % % \textbf{Names formatting:} how initials and surnames are to be combined. % \begin{opt} % \item[--] default is full names, given names first % \item[nm-revf] full names, surname first % \item[nm-init] initials plus surname % \item[nm-rev] surname plus initials % \item[nm-rev1] surname plus initials (1st name only) then initials % plus surname % \item[nm-revv1] same as \texttt{nm-rev1} but with full names % \item[nm-rv] as \texttt{nm-rev}, but initials without dots % \item[nm-rvv] as \texttt{nm-rev}, but initials without spaces % \item[nm-rvx] as \texttt{nm-rev}, but initials without dots or spaces % \item[ed-rev] editors' names are reversed the same as authors' % \item[aunm-semi] a semi-colon is placed between author names instead of % a comma % \end{opt} % % \textbf{Number of names:} normally all names listed (in reference list) % \begin{opt} % \item[nmlm] limit number of names % \item[x1...x9] (with \texttt{nmlm}) maximum number of names to appear % \item[m1...m6] (with \texttt{nmlm}) minimum number before \textsl{et al.} % written; % no check for consistency is taken; one \texttt{x} and % one \texttt{m} number must be given, and {\tt x}$\le${\tt m} % \end{opt} % % \textbf{Names font:} in the reference list % \begin{opt} % \item[--] default is names in normal typeface % \item[nmft-sc] names in small caps % \item[nmft-it] names in italics % \item[nmft-bf] names in bold % \item[nmand-rm] `and' in normal font, not same as authors'. % \end{opt} % % \textbf{Block punctuation:} between logical sections (not mutually % exclusive) % \begin{opt} % \item[--] default is period after each logical section, including end % \item[blk-com] use commas, except at very end (changes \textsl{In} to % \textsl{in}) % \item[blk-tit] like \texttt{blk-com} except period follows titles of % articles and books % \item[blk-tita] like \texttt{blk-com} except period follows article title % \item[com-semi] with \texttt{blk-com}, uses semi-colon instead of comma % \item[com-blank] with \texttt{blk-com}, uses blanks instead of comma % \item[in-col] puts a colon after \textsl{In} or \textsl{in} for edited works % \item[in-x] suppresses the word \textsl{in} for edited works % \item[fin-bare] no punctuation at the very end % \item[au-col] puts a colon after the author/editor block % \end{opt} % % \textbf{Date:} position and enclosure % \begin{opt} % \item[--] default is date at end, before notes; for author--year, % date consists only of year, no month % \item[dt-jnl] date at end as for default, except for journal articles % where it follows the journal name as part of specification % \item[dt-end] date goes after any notes % \item[dt-beg] date goes after authors' names % \item[yr-par] date in parentheses () % \item[yr-brk] date in brackets [] % \item[yr-com] date preceded by comma and space % \item[yr-col] date preceded by colon and space % \item[yr-per] date preceded by period and space % \item[yr-blk] date preceded by space % \item[dtrev] date as year month instead of month year % \item[dtbf] date bold face % \item[aymth] include month even for author-year % \item[yrp-x] suppresses punctuation following month, year when date % is just after authors % \item[yrp-col] adds colon and space after date when just after authors % \item[yrp-semi] adds semi-colon and space after date when just after authors % \item[yrp-per] adds period and space after date % \item[yrpp-xsp] removes blank following year punctuation % \item[note-yr] permits text (like ``in press'') in the \texttt{year} field % \end{opt} % % \textbf{Article in journal:} style of title, volume, pages % \begin{opt} % \item[--] default is: Title. \textit{Journal}, vol(num):p1--p2 % \item[volp-sp] as above, but with a space, vol(num):~p1--p2 % \item[volp-semi] semi-colon instead of colon: vol(num);~p1--p2 % \item[volp-com] comma and space instead of colon: vol(num),~p1--p2 % \item[volp-blk] only space instead of colon: vol(num)~p1--p2 % \item[volp-dt] date between volume and pages: vol(num), (1994) p1--p2 % \item[vol-bf] volume in bold % \item[vol-it] volume in italics % \item[vol-2bf] volume and number bold % \item[vnum-x] no number for journals, only volume % \item[vnum-sp] space between, as vol (num) % \item[vnum-cm] replace vol(num) with vol, num % \item[vnum-nr] replace vol(num) with vol, no. num % \item[vnum-h] replace vol(num) with vol, \#num % \item[vnum-dt] as vol (year) num % \item[vnum-pg] as vol, (num)p1--(num)p2 % \item[jpg-1] only starting page given % \item[jwdpg] include `page' or `pp' for articles % \item[jwdvol] include `volume' or `vol' for articles % \item[jnm-x] no punctuation after journal name % \item[tit-it] article title in italics % \item[tit-q] article title in single quotes % \item[tit-qq] article title in double quotes % \item[jtit-x] no article title (applies only to journals and % collections) % \item[atit-u] article title capitalized as in entry, default is % sentence capitalization (first word and words following % colons) % \item[jxper] abbreviated journal names have periods removed, as % `Phys Rev' % \item[jttl-rm] name of journal not in italics % \item[pp-last] pages appear at end, before any notes % \end{opt} % % \textbf{Thesis title:} formatted like a book or article % \begin{opt} % \item[--] default is like a book title % \item[thtit-a] titles of PhD and Master theses formatted like articles % \end{opt} % % \textbf{Technical Report title:} formatted like book or article % \begin{opt} % \item[--] default is like an article title % \item[trtit-b] titles of technical reports formatted like books % \end{opt} % % \textbf{Books:} title font style, pages, and address location % \begin{opt} % \item[--] default is italicized % \item[btit-rm] book title plain % \item[bkpg-par] pages in books place in parentheses % \item[add-pub] publisher's address before name, colon separated % \item[pub-par] publisher and address in parentheses % \item[pub-date] publisher with address and date in parentheses % \item[pre-pub] publisher placed before chapter and page information % \item[pre-edn] edition before publisher % \end{opt} % % \textbf{ISBN number:} include or not % \begin{opt} % \item[--] default is no ISBN number % \item[isbn] include an ISBN number as optional entry for books, booklets, % incollections, inproceedings % \end{opt} % % \textbf{Abbreviations:} of various words, default is no abbreviations % \begin{opt} % \item[pp] abbreviate \textsl{page(s)} as \textsl{p.} and \textsl{pp.} % \item[ppx] no word \textsl{page(s)} or abbreviation % \item[ed] abbreviate \textsl{editor(s)} as \textsl{ed.} and % \textsl{eds.} % \item[abr] abbreviate \textsl{volume}, \textsl{edition}, % \textsl{technical report}, etc. % \item[mth-bare] months abbreviated without dots % \item[jabr] abbreviate names of prestored journals % \item[ord] write edition numbers as 1st, 2nd, instead as words. % \end{opt} % % \textbf{Editor:} alternative for \emph{in edited} work % \begin{opt} % \item[--] ``in \emph{names}, editors, \emph{title}'' % \item[edpar] ``in \emph{names} (editors), \emph{title}'' % \item[edby] ``in \emph{title}, edited by \emph{names}'' % \item[edby-par] ``in \emph{title} (edited by \emph{names})'' % \item[edcap] (with \texttt{edby-par}) capitalizes ``Edited by'' or % ``Editor'' % \item[edbyx] (with \texttt{edby} or \texttt{edby-par}) replaces text % \textsl{edited by} by \textsl{editor(s)} before the names, % \item[edbyy] (with \texttt{edby} or \texttt{edby-par}) replaces text % \textsl{edited by} by \textsl{editor(s)} after the names, % as ``in \emph{title}, \emph{names}, editors''. % \end{opt} % % \textbf{Citation label:} what is written by the |\cite| command % \begin{opt} % \item[--] default is no special font % \item[lab-it] label (names printed by |\cite|) in italics % \item[lab-sc] label in small caps % \item[lab-bf] label in bold face % \item[and-rm] word `and' in labels in normal font % \item[xlab-it] extra label (letter after year) in italics % \end{opt} % % \textbf{Emphasis:} defines what `italicized' really means % \begin{opt} % \item[--] default is |\em| (can switch between |\it| % and |\rm| % \item[em-it] use |\it| instead (always italic) % \item[em-x] no emphasis % \end{opt} % % \textbf{Special punctuation:} % \begin{opt} % \item[amper] use \& in place of \textsl{and} % \item[varand] use command |\BIBand| in place of \textsl{and} % \item[and-xcom] no comma before last \textsl{and} of an author list % (citations and references) % \item[and-com] add comma before \textsl{and} even for two authors (in list of % references) % \item[xand] no \textsl{and} in an author list (references) % \item[etal-it] \textsl{et al.} in italics % \item[etal-rm] \textsl{et al.} in roman % \end{opt} % % \textbf{Font commands:} % \begin{opt} % \item[--] use \LaTeX~2.09 font commands % \item[nfss] use |\textbf|, |\textit|, |\emph| in place of |\bf|, |\it|, % and |\em|; only works then with \LaTeXe % \end{opt} % % \section{The Menu Information}\label{sec:menu} % Here I describe the options and menu information for this particular % master file \texttt{\filename}. To construct a \dtx{} driver file % to generate a desired \texttt{.bst} file, simply process \texttt{makebst.tex} % with \TeX\ or \LaTeX, and give % \begin{quote}\tt\filename\end{quote} % when prompted for the name of the master file. Then answer the questions % in the menus that follow. The menu information is extracted from here. % % All the menu information is nested between \dtx{} guard options % |%<*options>| \dots\ |%|, and the last command is % |\endoptions|. The rest of the file is nested between % \begin{quote} % |%<*!options&!driver&!bblbst>| \dots\ || % \end{quote} % in order to exclude it if \dtx{} is used to % extract the menu information, the documentation driver, or the % \texttt{babelbst.tex} file. % % The main coding is divided into two sections, the \emph{head} and % \emph{tail}; in between come any external language or journal name % support files. The head part is marked with the \dtx{} guard option % || and the tail with ||. This roundabout means of doing % things makes it possible to process \texttt{\filename} with \texttt{.dbj} % files that were generated for the older \texttt{genbst.mbs} file by % simply changing the name of the source file as shown in % Section~\ref{sec:update}. If both \texttt{head} and \texttt{tail} (and % \texttt{exlang}) options are omitted, as they are in the older % \texttt{.dbj} files, \texttt{\filename} is processed completely in one % pass. To include external files, two passes are needed, one for each % part, with the external file(s) coming in between. % % Note too that if the internal language commands are taken (i.e., if % \texttt{exlang} option is not given) then the default language is % English, which is tested for as ||. This too permits the simple % update of older \texttt{.dbj}, at least for English. % % \subsection*{Selecting Language} % Explicit words in the bibliography style, such as \textsl{and}, % \textsl{editor}, etc., % are represented by functions \texttt{bbl.and}, \texttt{bbl.editor}, and so on. % By default these functions translate to the normal English text, but % other languages are also possible. % % The definitions of these functions for other languages are contained in % external files. At this point, we can make use of features in % \texttt{makebst} (version~3.0 or later) to ask for the name of such a % definition file, and store it in |\cfile|. If no external file is % specified, then the internal definitions are taken, for which there are % two possibilities: English or \LaTeX{} commands (Babel). % % The commands |\MBswitch|, |\mes|, |\MBaskfile|, |\wr|, |\pc|, |\spsp| are % defined in \texttt{makebst.tex}. % % If |\MBswitch| does not exist, then the version of \texttt{makebst} % cannot support external files. % % \begin{macrocode} %<*options> \mes{<<< For more information about the meanings of^^J% <<< the various options, see the section on ^^J% <<< Menu Information in the .mbs file documentation.} \mes{^^JEXTERNAL FILES:} \expandafter\ifx\csname MBswitch\endcsname\relax \mes{^^J**************^^J% Makebst version is less than 3.0^^J% Cannot add external file for language definition^^J% **************} \def\cfile{}\def\jfile{}\else \MBaskfile{^^JName of language definition file}(\mroot.\mext)i\cfile \edef\ctemp{\mroot.\mext} \ifx\ctemp\cfile\def\cfile{}\fi % \end{macrocode} % % A second type of external file that can be added is one containing names % of journals that are to be prestored into the \texttt{.bst} file. % Several file names are allowed here, with the root names separated by % commas, and with the common extension added at the end. To assist later % parsing of the names, an additional comma is added before the extension. % % Note that in this case |\MBaskfile| treats the file(s) as output, i.e., % it does not check if the file(s) actually exist. % % The macro |\Mgetnext| allows the root names to be extracted from the % list of file names. % \begin{macrocode} \def\jfile{} \ask{\yn}{^^JInclude file(s) for extra journal names? (NO)} \if!\yn!\else\if\yn n\else\if\yn N\else \MBaskfile{^^JFile to include}(physjour,photjour.mbs)o\jfile \edef\jfile{\froot,.\fext} \fi\fi\fi \fi \def\Mgetnext#1,#2.#3??{\def\froot{#1}\def\Mrest{#2}\def\fext{#3}} % \end{macrocode} % % If no external files are specified, then both |\cfile| and |\jfile| are % empty. In this case, do \emph{not} set the options \texttt{head} and % \texttt{tail}, which control the \dtx{} passes through % \texttt{filename}. Now only one pass is made. % % If there is an external definition file, or if an external list of % journal names, then some extra text must be % written to fit in with that already written by \texttt{makebst}. This is % explained in that documentation. The |\MBswitch| command turns the curly % braces |{..}| into normal characters, and the parentheses |(..)| take on % their grouping functionality. This permits unbalances braces to be % written to the output file. % % \begin{macrocode} \if!\cfile\jfile!\else \begingroup\MBswitch \wr(\spsp head,\string\MBopta}) \if!\cfile!\else \wr(\string\from{\cfile}{\string\MBopta}) \fi \if!\jfile!\else \let\jxfile\jfile \loop % \end{macrocode} % % Parse the list of journal name files, adding a new |\from| for each one. % % \begin{macrocode} \expandafter\Mgetnext\jxfile?? \wr(\string\from{\froot.\fext}{\string\MBopta}) \edef\jxfile(\Mrest.\fext) \if!\Mrest!\def\Mtst(1)\else\def\Mtst()\fi \if!\Mtst! \repeat \fi \wr(\string\from{\mroot.\mext}{tail,\string\MBopta}}) \wr(\string\def\string\MBopta{\pc) \endgroup \fi % \end{macrocode} % % Ask whether % explicit English words wanted or \LaTeX{} commands whose definitions are % to be found in the file \texttt{babelbst.tex}. % % \begin{macrocode} \if!\cfile! \mes{^^JINTERNAL LANGUAGE SUPPORT:} \optdef{*}{}{English}{words used explicitly} \optdef{b}{babel}{Babel}{(words replaced by commands defined in babelbst.tex)} \getans \else \wr{\spsp\spsp\sep exlang\pc: External language file} \def\sep{,} \fi % \end{macrocode} % % \subsection*{Author--year or numerical} % The first question is whether a numerical or author--year citation style % is to be used. If the latter, the supporting system is my {\tt % natbib.sty}, which expects |\bibitem| to have an optional argument % containing the short form of the authors, plus year in parentheses. % E.g., % \begin{quote} % |\bibitem[Daly et al.(1990)]{key}...| % \end{quote} % There is now a newer version of \texttt{natbib.sty} (v5.3) that % supports an optional full author list too, as % \begin{quote} % |\bibitem[Daly et al.(1990)Daly, Keppler, and Williams]{key}...| % \end{quote} % Other systems are also supported, such as the Harvard family of % bibliography styles (with \texttt{harvard.sty}), which have entries in the % form % \begin{quote} % |\harvarditem[Daly et al.]{Daly, Keppler,|\\ % | and Williams}{1990}{key}...| % \end{quote} % or the astronomy family (with \texttt{astron.sty}) with entries like % \begin{quote} % |\bibitem[\protect\astroncite{Daly et al.}{1990}]{key}...| % \end{quote} % or the Chicago family (with \texttt{chicago.sty}) with entries like % \begin{quote} % |\bibitem[\protect\citeautheryear{Daly, Keppler, and|\\ % | Williams}{Daly et al.}{1990}]{key}...| % \end{quote} % or the `named' variant of Chicago (with \texttt{named.sty}) with entries like % \begin{quote} % |\bibitem[\protect\citeauthoryear{Daly et al.}{1990}]{key}...| % \end{quote} % or the so-called ``author--date'' group (with \texttt{authordate1-4.sty}) % with entries of the form % \begin{quote} % |\bibitem[\protect\citename{Daly et al.}1990]{key}...| % \end{quote} % Finally, there is the \texttt{apalike} format of Oren Patashnik, for use % with \texttt{apalike.sty} that has entries of the form % \begin{quote} % |\bibitem[Daly et al., 1990]{key}...| % \end{quote} % % In addition to numerical or author--year citation styles, there is also a % \texttt{cite} style available in which the label is the same as the cite % key. This is for listing entire contents of databases with the cite key % visible. % % A flag |\ifnumerical| is established because some of the following menu % features depend on which system is to be used. % % \begin{macrocode} \newif\ifnumerical \numericalfalse \newif\ifmytemp\mytempfalse \mes{^^JSTYLE OF CITATIONS:} \optdef{*}{}{Numerical}{as in standard LaTeX} \optdef{a}{ay}{Author-year}{with some non-standard interface} \optdef{b}{alph}{Alpha style}{(labels like DAL90)} \optdef{c}{cite}{Cite key}{(special for listing contents of bib file)} \getans \numericaltrue \if\ans a\numericalfalse\fi \mytemptrue \if\ans b\mytempfalse\fi \ifnumerical\else \mes{^^JAUTHOR--YEAR SUPPORT SYSTEM:} \optdef{*}{nat}{Natbib}{for use with natbib.sty v5.3} \optdef{o}{}{Older Natbib}{without full authors citations} \optdef{l}{alk}{Apalike}{for use with apalike.sty} \optdef{h}{har}{Harvard}{system with harvard.sty} \optdef{a}{ast}{Astronomy}{system with astron.sty} \optdef{c}{cay}{Chicago}{system with chicago.sty} \optdef{n}{nmd}{Named}{system with named.sty} \optdef{d}{cn}{Author-date}{system with authordate1-4.sty} \getans % \end{macrocode} % The \texttt{harvard} family has been extended for \LaTeXe, and the new % \texttt{.bst} files allow the word \textsl{and} and the brackets around years % to be variable with commands. A URL entry is added, for the on-line % network reference. These features may be added too. % \begin{macrocode} \if\ans h% \mes{^^JHARVARD EXTENSIONS INCLUDED:} \optdef{*}{harnm}{With Harvard extensions}{for LaTeX2e version of harvard.sty} \optdef{n}{}{Older Harvard}{style, for LaTeX 2.09} \getans\fi \fi % \end{macrocode} % % \subsection*{Ordering of the listed references} % Choices here depend on citation style. The default in both cases is % alphabetical order of all authors. For numerical style, one may also % choose an unsorted order, which means the order is the same as the original % citations. This corresponds to \texttt{unsrt.bst}. Order of citation is % also offered for author--year for \texttt{natbib}-type styles that can % also be used for numerical listings. % % Another possibility is to order first by year, then authors. This too only % makes sense for numerical citations. However, it is offered for author--year % in the event that a \texttt{natbib}-type style is used for numerical % listings. % % For the alpha style, the ordering is by label only, so no option is % offered here (|\ifnumerical| is \meta{true} and |\ifmytemp| is \meta{false}). % % For author--year, the second choice is by label. (The label is the % optional |\bibitem| argument, and is what is printed in place of the % |\cite| command.) With this option, all the papers with the same first % author are ordered so that the one-author papers come first, followed by % the two-author papers, followed by the multiple-author papers. This is a % more sensible system for author--year citations, and is demanded by some % journals (like JGR). % % One problem that can arise here is when two or more references have the % same set of authors and year; normally they are then ordered by the % title, ignoring initial words like \textsl{the} and \textsl{a}, with the % letters a, b, % c, \dots, added to the year. This can mean that a set of references with % a natural sequence will be put into a different order. An alternative is % to order them by the citation keyword instead of by title. This of course % assumes that the keywords in this case reflect that natural sequence. % \begin{macrocode} \ifnumerical \ifmytemp \mes{^^JORDERING OF REFERENCES:} \optdef{*}{}{Alphabetical}{by all authors} \optdef{c}{seq-no}{Citation order}{(unsorted, like unsrt.bst)} \optdef{d}{seq-yr}{Year ordered}{and then by authors} \getans \fi \else \mes{^^JORDERING OF REFERENCES:} \optdef{*}{}{Alphabetical}{by all authors} \optdef{l}{seq-lab}{By label}% {(Jones before Jones and James before Jones et al)} \optdef{k}{seq-key}{By label and cite key}{instead of label and title, as above} \optdef{d}{seq-yr}{Year ordered}{and then by authors (for publication lists)} \optdef{c}{seq-no}{Citation order}{(unsorted, only meaningful for numericals)} \getans \fi % \end{macrocode} % The standard \btx\ styles consider the \emph{von} part of the name to be a % fixed part of the surname. European usage tends to alphabetize ignoring these % honorifics. % \begin{macrocode} \if\ans c\else \mes{^^JORDER ON VON PART:} \optdef{*}{}{Sort on von part}{(de la Maire before Defoe)} \optdef{x}{vonx}{Sort without von part}{(de la Maire after Mahone)} \getans \fi % \end{macrocode} % % \subsection*{Formatting author names} % The default is that the full names of the authors are listed, given names % first, unabbreviated. Of course, if only the initials have been given in % the \texttt{.bib} file, then that is all that can appear in the list. Other % possibilities are to use initials (even if full names in the \texttt{.bib} % file) either before or after the surnames. A specialty of the journals of % the American Geophysical Union is to have only the first name with % reversed initials. % % If the reference is part of a larger work with editors, then the editor % names appear later in the reference text, usually as ``edited by \dots'' % or as ``\emph{names} (editors)''. In these cases, the editor names are % not usually reversed (surname first) even if the authors' names are. % An option is provided to format such editor names exactly as the authors'. % \begin{macrocode} \mes{^^JAUTHOR NAMES:} \optdef{*}{}{Full, surname last}{(John Frederick Smith)} \optdef{f}{nm-revf}{Full, surname first}{(Smith, John Frederick)} \optdef{i}{nm-init}{Initials + surname}{(J. F. Smith)} \optdef{r}{nm-rev}{Surname + initials}{(Smith, J. F.)} \optdef{s}{nm-rv}{Surname + dotless initials}{(Smith J F)} \optdef{x}{nm-rvx}{Surname + pure initials}{(Smith JF)} \optdef{y}{nm-rvv}{Surname + spaceless initials}{(Smith J.F.)} \optdef{a}{nm-rev1}{Only first name reversed, initials}% {(AGU style: Smith, J. F., H. K. Jones)} \optdef{b}{nm-revv1}{First name reversed, with full names}% {(Smith, John Fred, Harry Kab Jones)} \getans \mytempfalse \if\ans r\mytemptrue\fi \if\ans s\mytemptrue\fi \if\ans a\mytemptrue\fi \if\ans f\mytemptrue\fi \if\ans x\mytemptrue\fi \if\ans y\mytemptrue\fi \ifmytemp \mes{^^JEDITOR NAMES IN COLLECTIONS:} \if\ans r \optdef{*}{}{Editor names NOT reversed}{as edited by J. J. Smith} \fi \if\ans s \optdef{*}{}{Editor names NOT reversed}{as edited by J J Smith} \fi \if\ans a \optdef{*}{}{Editor names NOT reversed}{as edited by J. J. Smith} \fi \if\ans x \optdef{*}{}{Editor names NOT reversed}{as edited by JJ Smith} \fi \if\ans f \optdef{*}{}{Editor names NOT reversed}{as edited by John James Smith} \fi \if\ans y \optdef{*}{}{Editor names NOT reversed}{as edited by J.J. Smith} \fi \optdef{r}{ed-rev}{Editor names reversed}{just like authors'} \getans \fi \mes{^^JPUNCTUATION BETWEEN AUTHOR NAMES:} \optdef{*}{}{Author names separated by commas}{} \optdef{s}{aunm-semi}{Names separated by semi-colon}{} \getans % \end{macrocode} % % \subsection*{Number of authors} % Normally the complete list of authors as given in the \texttt{.bib} file is % presented in the reference list. However, some journals prefer to limit % them to a maximum. If there are more than this maximum number of author % names, then a minimum number plus \textsl{et al.} are listed. % % Because no test for consistency of the numbers is carried out in the % \texttt{.bst} file itself (it might be possible, but I found it too complex), % this is done here. % \begin{macrocode} \mes{^^JNUMBER OF AUTHORS:} \optdef{*}{}{All authors}{included in listing} \optdef{l}{nmlm}{Limited authors}{(et al replaces missing names)} \getans \if\ans l \loop \ask{\num}{Maximum number of authors (1-9)} \ifnum\num>9\relax \mes{*** Must be between 1 and 9} \repeat \wr{\spsp\spsp\sep x\num\pc: Maximum of \num\space authors} \mes{\spsp You have selected maximum \num\space authors} \ifnum\num>6\def\numx{6}\else\edef\numx{\num}\fi \loop \ask{\num}{Minimum number (before et al given) (1-\numx)} \ifnum\num>\numx \mes{*** Must be between 1 and \numx} \repeat \wr{\spsp\spsp\sep m\num\pc: Minimum of \num\space authors} \mes{\spsp You have selected minimum \num\space authors} \fi % \end{macrocode} % % \subsection*{Typeface of names} % The author names in the list of references normally appear in the current % typeface. This may be changed to small caps, bold, or italics. % \begin{macrocode} \mes{^^JTYPEFACE FOR AUTHORS IN LIST OF REFERENCES:} \optdef{*}{}{Normal font for authors}{} \optdef{s}{nmft-sc}{Small caps authors}{(\string\sc)} \optdef{i}{nmft-it}{Italic authors}{(\string\it\space or \string\em)} \optdef{b}{nmft-bf}{Bold authors}{(\string\bf)} \getans \mytempfalse \if\ans i\mytemptrue\fi \if\ans s\mytemptrue\fi \if\ans b\mytemptrue\fi \ifmytemp \mes{^^JFONT FOR `AND' THE IN LIST:} \optdef{*}{}{`And' in author font}{(JONES AND JAMES)} \optdef{r}{nmand-rm}{`And' in normal font}{(JONES and JAMES)} \getans \fi % \end{macrocode} % % \subsection*{Position of date} % This applies to author--year style only. It makes sense to put the date % immediately after the author list, since the two items (author and year) % are the identifiers of the reference. Default position is at the % end of the references, before any notes. It is also possible to place % it even after the notes. % % Medical journals have a system where the date is part of the journal % specification, as Lancet 1994;45(2):34--40. Otherwise the date appears at % the end. % \begin{macrocode} \mes{^^JDATE POSITION:} \optdef{*}{}{Date at end}{} \optdef{b}{dt-beg}{Date after authors}{} \optdef{j}{dt-jnl}{Date part of journal spec.}{(as 1994;45:34-40) else at end} \optdef{e}{dt-end}{Date at very end}{after any notes} \getans \if\ans b\mytemptrue\else\if\ans j\mytemptrue\else\mytempfalse\fi\fi % \end{macrocode} % % \subsection*{Format of date} % The year may be enclosed in parentheses, brackets, or preceded by a % colon. If none of these are selected, the date (month plus year) appears. % For author--year, the date normally consists only of the year, no month, % but this may be overridden. % % If the date comes just after the authors, then one might want special % punctuation following it, like a colon, or space only. The latter is % probably desirable if the date is brackets or parentheses. % % The date can even be put into bold face. % \begin{macrocode} \ifnumerical \mes{^^JDATE FORMAT:} \optdef{*}{}{Plain month and year}{without any brackets} \optdef{p}{yr-par}{Date in parentheses}{as (May 1993)} \optdef{b}{yr-brk}{Date in brackets}{as [May 1993]} \optdef{c}{yr-col}{Date preceded by colon}{as `: May 1993'} \optdef{d}{yr-per}{Date preceded by period}{as `. May 1993'} \optdef{m}{yr-com}{Date preceded by comma}{as `, May 1993'} \optdef{s}{yr-blk}{Date preceded by space}{only, as ` May 1993'} \getans \mes{^^JREVERSED DATE:} \optdef{*}{}{Date as month year}{} \optdef{r}{dtrev}{Date as year month}{} \getans \else \mes{^^JDATE FORMAT: (no months for author-year)} \optdef{*}{}{Year plain}{without any brackets} \optdef{p}{yr-par}{Year in parentheses}{as (1993)} \optdef{b}{yr-brk}{Year in brackets}{as [1993]} \optdef{c}{yr-col}{Year preceded by colon}{as `: 1993'} \optdef{d}{yr-per}{Year preceded by period}{as `. 1993'} \optdef{m}{yr-com}{Date preceded by comma}{as `, 1993'} \optdef{s}{yr-blk}{Year preceded by space}{only, as ` 1993'} \getans \mes{^^JINCLUDE MONTHS:} \optdef{*}{}{Date is year only}{without the month} \optdef{m}{aymth}{Include month in date}{} \getans \if\ans m \mes{^^JREVERSED DATE:} \optdef{*}{}{Date as month year}{} \optdef{r}{dtrev}{Date as year month}{} \getans \fi \fi \ifmytemp \mes{^^JDATE PUNCTUATION:} \optdef{*}{}{Date with standard block punctuation}{(comma or period)} \optdef{c}{yrp-col}{Colon after date}{as 1994:} \optdef{s}{yrp-semi}{Semi-colon after date}{as 1994;} \optdef{p}{yrp-per}{Period after date}{even when blocks use commas} \optdef{x}{yrp-x}{No punct. after date}{} \getans \mes{^^JBLANK AFTER DATE:} \optdef{*}{}{Space after date}{and punctuation} \optdef{x}{yrpp-xsp}{No space after date}{as 1994:45} \getans \fi \mes{^^JDATE FONT:} \optdef{*}{}{Date in normal font}{} \optdef{b}{dtbf}{Date in bold face}{} \getans % \end{macrocode} % % Normally in author--year citations, the \texttt{year} entry is truncated % to the last 4 characters, which should be the 4 digits of the year. Some % users have requested the possibility of suppressing this truncation so % that they may put text in the \texttt{year} field, such as ``in press.'' % Another use for it is when years are given as ``1968--72''. Actually, % I have no idea why the year should be truncated at all. % \begin{macrocode} \ifnumerical\else \mes{^^JTRUNCATE YEAR:} \optdef{*}{note-yr}{Year text full}{as 1990--1993 or `in press'} \optdef{t}{}{Year truncated}{to last 4 digits} \getans \fi % \end{macrocode} % % \subsection*{Article title in journal} % The title of an article in a journal or in a collection (a book, or % conference proceedings) may appear plain, in italics, within single % or double quotes. % % Furthermore, it may have sentence capitalization (first % word and word following colon) or be capitalized as in the \texttt{.bib} file % entry. That is why it is recommended to capitalize the entry text as it % should appear when fully capitalized, putting words that are always % capitalized in braces. Example: % \begin{quote} % |TITLE="The Results of the {Giotto} Mission"| % \end{quote} % which produces either ``The results of the Giotto mission'' or ``The % Results of the Giotto Mission'', depending on option. % % Additionally, the article titles may be fully suppressed. % \begin{macrocode} \mes{^^JTITLE OF ARTICLE:} \optdef{*}{}{Title plain}{with no special font} \optdef{i}{tit-it}{Title italic}{(\string\em)} \optdef{q}{tit-q}{Title in single quotes}{(`Title')} \optdef{d}{tit-qq}{Title in double quotes}{(``Title'')} \getans \mes{^^JCAPITALIZATION OF ARTICLE TITLE:} \optdef{*}{}{Sentence style}{(first word and those in braces)} \optdef{t}{atit-u}{Title style}{(just as in bib entry)} \getans \mes{^^JARTICLE TITLE PRESENT:} \optdef{*}{}{Article title present}{in journals and proceedings} \optdef{x}{jtit-x}{No article title}{} \getans % \end{macrocode} % % \subsection*{Journal names} % Abbreviated journal names normally contain periods; the periods may be % removed with this option. In fact, only letters, numbers, and spacing are % retained. % \begin{macrocode} \mes{^^JJOURNAL NAMES:} \optdef{*}{}{Periods in journal names}{are retained, as `Phys. Rev.'} \optdef{x}{jxper}{Dotless journal names}{as `Phys Rev'} \getans % \end{macrocode} % Journal title is normally printed in italics; can be left in normal font. % \begin{macrocode} \mes{^^JJOURNAL TITLE FONT:} \optdef{*}{}{Journal title italics}{} \optdef{r}{jttl-rm}{Journal title normal}{font} \getans % \end{macrocode} % % \subsection*{Title of Theses and Technical Reports} % The title of a these (PhD or Master's) is normally treated the same % as that of a book. Optionally, it may be formatted like that of % an article. % % The title of a technical report is normally treated the same as that % of an article. Optionally, it may be formatted like that of a book. % % \begin{macrocode} \mes{^^JTHESIS TITLE:} \optdef{*}{}{Thesis titles like books}{} \optdef{a}{thtit-a}{Thesis title like article}{} \getans \mes{^^JTECHNICAL REPORT TITLE:} \optdef{*}{}{Tech. report title like articles}{} \optdef{b}{trtit-b}{Tech. report title like books}{} \getans % \end{macrocode} % % \subsection*{Journal reference} % Great diversity of opinion exists as to how a journal reference is to be % formatted. It consists of a volume, possibly a number, and page limits. % The number is really only necessary if the page numbers within one volume % start at 1 for each physical `number'. Since journals are often bound % together in one volume later, it makes more sense to number the pages % continuously through the whole volume. However, this is not always so, % and then the `number' is necessary for the full specification. % % A number of styles for journal specifications are % \begin{quote} % \begin{tabular}{l@{\qquad}l} % 21(2):33--55 & 21, no.\ 2: 33--55\\ % \textbf{21}(2):33--55 & \textbf{21}, \#2, 33--55\\ % \textit{21}(2), 33--55 & \textit{21} (2); 33--55 \\ % 21(2) (1995) 33--55 & 21, (2)33--(2)55\\ % 21(2) 33--55 & vol.~21 (2), pp.~33--55 % \end{tabular} % \end{quote} % % Here both start and stop page numbers have been given; often only the % start page is wanted. % % \begin{macrocode} \mes{^^JJOURNAL VOLUME NUMBER:} \optdef{*}{}{Volume plain}{as vol(num)} \optdef{i}{vol-it}{Volume italic}{as {\string\em\space vol}(num)} \optdef{b}{vol-bf}{Volume bold}{as {\string\bf\space vol}(num)} \optdef{d}{vol-2bf}{Volume and number bold}{as {\string\bf\space vol(num)}} \getans % \end{macrocode} % % The form of the `number' is also given: in parentheses, with `no.', % with \#, or omitted. % \begin{macrocode} \mes{^^JJOURNAL VOL AND NUMBER:} \optdef{*}{}{Journal vol(num)}{as 34(2)} \optdef{s}{vnum-sp}{Journal vol (num)}{as 34 (2)} \optdef{c}{vnum-cm}{Journal vol, num}{as 34, 2} \optdef{n}{vnum-nr}{Journal vol, no. num}{as 34, no. 2} \optdef{h}{vnum-h}{Journal vol, \string\# number}{as 34, \string\#2} \optdef{p}{vnum-pg}{Journal vol, number(page)}{as 34, (2)33} \optdef{d}{vnum-dt}{Journal vol (year) num}{as 34 (1994) 2} \optdef{x}{vnum-x}{Journal vol, no number}{as 34} \getans \mes{^^JVOLUME PUNCTUATION:} \optdef{*}{}{Volume with colon}{as vol(num):ppp} \optdef{s}{volp-sp}{Volume with colon and space}{as vol(num): ppp} \optdef{h}{volp-semi}{Volume with semi-colon}{as vol(num); ppp} \optdef{c}{volp-com}{Volume with comma}{as vol(num), ppp} \optdef{b}{volp-blk}{Volume with blank}{as vol(num) ppp} \optdef{d}{volp-dt}{Volume with date}{as vol(num), date ppp} \getans \mes{^^JPAGE NUMBERS:} \optdef{*}{}{Start and stop page numbers}{given} \optdef{f}{jpg-1}{Only start page number}{} \getans \mes{^^JWORD `PAGE' IN ARTICLES:} \optdef{*}{}{Article pages numbers only}{as 234-256} \optdef{p}{jwdpg}{Include `page' in articles}{as pp. 234--256} \getans % \end{macrocode} % % Some journals want page numbers at the end, even for books, proceedings, as % well as for journals. % \begin{macrocode} \mes{^^JPOSITION OF PAGES:} \optdef{*}{}{Pages given mid text}{as is normal} \optdef{e}{pp-last}{Pages at end}{but before any notes} \getans \mes{^^JWORD `VOLUME' IN ARTICLES:} \optdef{*}{}{Article volume as number only}{as 21} \optdef{p}{jwdvol}{Include `volume' in articles}{as vol. 21} \getans % \end{macrocode} % % It is possible to decide whether the journal name should be % separated from the following specifications with a blank or comma. % \begin{macrocode} \mes{^^JJOURNAL NAME PUNCTUATION:} \optdef{*}{}{Comma after journal}{name} \optdef{x}{jnm-x}{Space after journal}{name} \getans % \end{macrocode} % % \subsection*{Books} % The title of a book (as opposed to an article in a book or journal) is % normally italicized. This may be set to the regular font. % % The page numbers in books may be set in parentheses, as (pp.\ 345--350). % \begin{macrocode} \mes{^^JBOOK TITLE:} \optdef{*}{}{Book title italic}{(\string\em)} \optdef{p}{btit-rm}{Book title plain}{(no font command)} \getans \mes{^^JPAGES IN BOOKS:} \optdef{*}{}{Book pages normal}{as pp. 50-55} \optdef{p}{bkpg-par}{Book pages in parentheses}{as (pp. 50-55)} \getans % \end{macrocode} % Some psychology journals wish to have the publisher's address preceding % the name, separated by colon, as % \begin{quote}New York: Wiley and Sons\end{quote} % % Some journals (e.g.\ Nature) put publisher in parentheses with date, % as (Wiley and Sons, New York, 1983). These normally put the date in % parentheses at the end anyway, so this is a merging of the two sets of % parentheses. % \begin{macrocode} \mes{^^JPUBLISHER ADDRESS:} \optdef{*}{}{Publisher, address}{as Harcourt, New York} \optdef{a}{add-pub}{Address: Publisher}{as New York: Harcourt} \getans \mes{^^JPUBLISHER IN PARENTHESES:} \optdef{*}{}{Publisher as normal block}{without parentheses} \optdef{p}{pub-par}{Publisher in parentheses}{} \optdef{d}{pub-date}{Publisher and date in parentheses}{(Oxford, 1994)} \getans \mes{^^JPUBLISHER POSITION:} \optdef{*}{}{Publisher after chapter, pages}{} \optdef{p}{pre-pub}{Publisher before chapter, pages}{} \optdef{e}{pre-edn}{Publisher after edition}{} \getans % \end{macrocode} % \subsection*{ISBN number} % Books normally possess an ISBN number. This may be included as an % optional entry for \texttt{book}, \texttt{inbook}, \texttt{booklet}, % \texttt{incollection}, \texttt{proceedings}, \texttt{inproceedings}. % \begin{macrocode} \mes{^^JISBN NUMBER:} \optdef{*}{isbn}{Include ISBN}{for books, booklets, etc.} \optdef{x}{}{No ISBN}{} \getans % \end{macrocode} % % \subsection*{Edited by} % For an article within an edited collection, the normal form is % \begin{quote} % In J. K. James, editor, \emph{Title of Collection} \dots % \end{quote} % Alternative forms are % \begin{quote} % In J. K. James (editor), \emph{Title} \dots\\ % In \emph{Title}, edited by J. K. James \dots\\ % In \emph{Title} (Edited by J. K. James) \dots % \end{quote} % \begin{macrocode} \mes{^^JEDITOR IN WHOLE BOOK:} \optdef{*}{}{Word `editor' after name}{of book editor without author} \optdef{a}{edpar}{`(editor)'}{in parentheses, after name} \getans \mes{^^JEDITOR IN COLLECTIONS:} \optdef{*}{}{.., editor, booktitle}{of collection} \optdef{b}{edby}{Booktitle, edited by .. }{} \optdef{p}{edby-par}{Booktitle (edited by ..)}{} \optdef{e}{edby}{Booktitle, editor ..}{} \optdef{k}{edby-par}{Booktitle (editor..)}{} \optdef{j}{edby}{Booktitle, .., editor}{} \optdef{m}{edby-par}{Booktitle (.., editor)}{} \getans \mytempfalse \if\ans e\mytemptrue\fi \if\ans k\mytemptrue\fi \ifmytemp \wr{\spsp\sep edbyx\pc: Replace `edited by' by `editor(s)'} \fi \mytempfalse \if\ans j\mytemptrue\fi \if\ans m\mytemptrue\fi \ifmytemp \wr{\spsp\sep edbyy\pc: Replace `edited by..' by `.., editor(s)'} \fi \mytempfalse \if\ans p\mytemptrue\fi \if\ans k\mytemptrue\fi \ifmytemp \mes{^^JCAPITALIZE `EDITOR' OR `EDITED BY':} \optdef{*}{}{`(editor,..)' or `(edited by..)'}{in lowercase} \optdef{c}{edcap}{`(Editor,..)' or `(Edited by..)'}{in uppercase} \getans \fi % \end{macrocode} % % \subsection*{Block punctuation} % Blocks are logical sections of the reference specification, such as the % author block, the journal block, editor block, etc. These are normally % separated by periods, but alternatively a comma may be used. Another % choice is to use commas except after titles where a period is given. % % \LaTeX\ offers an \texttt{openbib} option, which means that the blocks % are not only new sentences, but new lines as well. This can only % function when the default option here is taken, for then the command % |\newblock| is placed between the blocks. This command is normally % defined to do nothing, but \LaTeX\ redefines it to issue a new line % when open bibliographies are wanted. % \begin{macrocode} \mes{^^JPUNCTUATION BETWEEN SECTIONS (BLOCKS):} \optdef{*}{}{\string\newblock\space after blocks} {(periods or new lines with openbib option)} \optdef{c}{blk-com}{Comma between blocks}{} \optdef{s}{blk-com}{Semi-colon between blocks}{} \optdef{b}{blk-com}{Blanks between blocks}{} \optdef{t}{blk-tit}{Period after titles of articles, books, etc}{else commas} \optdef{a}{blk-tita}{Period after titles of articles}{else commas} \getans \if\ans s \wr{\spsp\spsp\sep com-semi\pc: Semi-colon replaces comma between blocks} \fi \if\ans b \wr{\spsp\spsp\sep com-blank\pc: Blank replaces comma between blocks} \fi \mes{^^JPUNCTUATION AFTER AUTHORS:} \optdef{*}{}{Author block normal}{with regular block punctuation} \optdef{c}{au-col}{Author block with colon}{} \getans % \end{macrocode} % % \subsection*{\textsl{In} with colon} % When referring to works in a collection, one begins the block describing % that collection with \textsl{In}. Optionally, one may add a colon. % \begin{macrocode} \mes{^^JPUNCTUATION AFTER `IN':} \optdef{*}{}{Space after `in'}{for edited works or proceedings} \optdef{c}{in-col}{Colon after `in'}{(as `In: ...')} \optdef{x}{in-x}{No word `in'}{for edited works} \getans % \end{macrocode} % % \subsection*{Final punctuation} % The punctuation at the end of the reference is normally a period. This % may be suppressed. % \begin{macrocode} \mes{^^JFINAL PUNCTUATION:} \optdef{*}{}{Period at very end}{of the listed reference} \optdef{x}{fin-bare}{No period at end}{} \getans % \end{macrocode} % % \subsection*{Abbreviations} % A number of words may be abbreviated: pages, editors, volume, chapter, % and so on. The first two may be independently set to abbreviation, the % rest with a single option. % % Additionally, the edition numbers may be % output as words (first, second, etc.) or as numbers (1st, 2nd, etc.). % (Recall that the input in the \texttt{.bib} file is always as English % words.) % \begin{macrocode} \if!\cfile! \mes{^^JABBREVIATE WORD `PAGES':} \optdef{*}{}{`Page(s)'}{(no abbreviation)} \optdef{a}{pp}{`Page' abbreviated}{as p. or pp.} \optdef{x}{ppx}{`Page' omitted}{} \getans \mes{^^JABBREVIATE WORD `EDITORS':} \optdef{*}{}{`Editor(s)'}{(no abbreviation)} \optdef{a}{ed}{`Editor' abbreviated}{as ed. or eds.} \getans \mes{^^JOTHER ABBREVIATIONS:} \optdef{*}{}{No abbreviations}{of volume, edition, chapter, etc} \optdef{a}{abr}{Abbreviations}{of such words} \getans \if\ans a \mes{^^JMONTHS WITH DOTS:} \optdef{*}{}{Months with dots}{as Jan.} \optdef{x}{mth-bare}{Months without dots}{as Feb Mar} \getans \fi \mes{^^JEDITION NUMBERS:} \optdef{*}{}{Write out editions}{as first, second, third, etc} \optdef{n}{ord}{Numerical editions}{as 1st, 2nd, 3rd, etc} \getans % \end{macrocode} % % The above choices about abbreviations are made only if the internal % languages are taken (English or \texttt{babel}). For an external language % definition file, these choices, along with possible other ones, are made % in the external file, which is read in at this point. % \begin{macrocode} \else \input\cfile \fi % \end{macrocode} % % This file contains the standard set of stored journal names present in % the basic bibliography style files. If other files containing journal % names are to be included, they may only contain the option \texttt{jabr} % since that option is selected here. No option menus from the journal-name % files will be read in. % \begin{macrocode} \mes{^^JSTORED JOURNAL NAMES:} \optdef{*}{}{Full journal names}{for prestored journals} \optdef{a}{jabr}{Abbreviated journal names}{} \getans % \end{macrocode} % \subsection*{Citation label} % This applies to author--year style only. The label is the text written % by the |\cite| command, and for author--year style, this is something like % `Daly et al.\ (1990b)'. One may select italics for the authors and for the % extra label attached to the year. The year always remains plain. % % If a font is selected for the cited authors, then the word `and' may be % optionally put in the normal font. % % It is not possible to select the type of brackets for the year, since % this is determined by the \LaTeX{} style option that manages the % author--year citations. This is not standard \LaTeX, so that there are a % number of private style files for achieving this. % \begin{macrocode} \ifnumerical\else \mes{^^JFONT OF CITATION LABELS IN TEXT:} \optdef{*}{}{Cited authors plain}{as result of \string\cite\space command} \optdef{i}{lab-it}{Cited authors italic}{} \optdef{s}{lab-sc}{Cited authors small caps}{} \optdef{b}{lab-bf}{Cited authors bold}{} \getans \mytempfalse \if\ans i\mytemptrue\fi \if\ans s\mytemptrue\fi \if\ans b\mytemptrue\fi \ifmytemp \mes{^^JFONT FOR `AND' IN CITATIONS:} \optdef{*}{}{Cited `and' in author font}{} \optdef{r}{and-rm}{Cited `and' in normal font}{} \getans \fi \mes{^^JFONT OF EXTRA LABEL:^^J(The extra letter on the year)} \optdef{*}{}{Extra label plain}{} \optdef{i}{xlab-it}{Extra label italic}{} \getans \fi % \end{macrocode} % % \subsection*{Variations on \textsl{and}} % It is possible to replace the word \textsl{and} with an ampersand \&, and to % specify whether a comma is to precede \textsl{and} in a list of more than two % names. % % A variable \textsl{and} may be provided for with the command |\BIBand| % in place of the word. In this case, the command must be defined in the % document file or some other package called. (This is intended for situations % where an ampersand is wanted in parenthetical citations, but the word in % textual ones.) % % \begin{macrocode} \mes{^^JAMPERSAND:} \optdef{*}{}{Use word `and'}{in author lists} \optdef{a}{amper}{Use ampersand}{in place of `and'} \optdef{v}{varand}{Use \string\BIBand}{in place of `and'} \getans \mes{^^JCOMMA BEFORE `AND':} \optdef{*}{}{Comma before `and'}{as `Tom, Dick, and Harry'} \optdef{n}{and-xcom}{No comma before `and'}{as `Tom, Dick and Harry'} \optdef{c}{and-com}{Comma with 2 authors}{as `Tom, and Harry'} \getans \mes{^^JNO `AND' IN REFERENCE LIST:} \optdef{*}{}{With `and'}{before last author in reference list} \optdef{x}{xand}{No `and'}{as `Tom, Dick, Harry'} \getans % \end{macrocode} % % \subsection*{Font of \textsl{et al}} % One can chose that \textsl{et~al.}\ be put into italics. % Or, if the authors are in a different font from the regular one, the % \textsl{et~al.}\ can still be Roman. % \begin{macrocode} \mes{^^JFONT OF `ET AL':} \optdef{*}{}{Plain et al}{} \optdef{i}{etal-it}{Italic et al}{} \optdef{r}{etal-rm}{Roman et al}{even when authors something else} \getans % \end{macrocode} % % \subsection*{Define emphasis} % In everything that been mentioned so far, italicization should be % understood to mean `emphasize' in the \LaTeX{} sense. This means that the % command |\em| is used. This is not the same as |\it|, which is always % italics. Rather, with |\em|, the font style switches between |\rm| and % |\it| depending on the context. Here one may choose to true italics, or % to switch off italics altogether. % \begin{macrocode} \mes{^^JEMPHASIS:^^J(affects all so-called italics)} \optdef{*}{}{Use emphasis}{ie, \string\em, allows font switching} \optdef{i}{em-it}{Use true italics}{ie, \string\it, absolute italics} \optdef{x}{em-x}{No italics}{at all} \getans % \end{macrocode} % \subsection*{New Font Selection Scheme} % Bold face, italics, and emphasis are made with the \LaTeX~2.09 commands. % This makes them compatible with \LaTeXe{} as well, but it is possible that % in future they might die out. Also, they might not be provided with % future classes. Allow an option to use the New Font Selection Scheme (NFSS) % font commands in \LaTeXe. If this option is taken, then the \texttt{.bst} % file may only be used with \LaTeXe. % \begin{macrocode} \mes{^^JNEW FONT SELECTION SCHEME:} \optdef{*}{}{No NFSS}{use 2.09 font commands} \optdef{n}{nfss}{NFSS}{use \string\textbf, \string\emph, not \string\bf, \string\em} \getans % \end{macrocode} % % Terminate the options list. If a language definition file has been called, % then we have a closing brace too many, so add another dummy opening brace. % \begin{macrocode} \if!\cfile\jfile!\else \begingroup\MBswitch \wr(,{\pc) \endgroup \fi \endoptions % % \end{macrocode} % \StopEventually{\PrintChanges} % % \section{The Bibliographic Coding} % % \begin{macrocode} %<*!options&!driver&!bblbst> %<*!tail> % For use with BibTeX version 0.99a or later %------------------------------------------------------------------- %<*!exlang> % % This bibliography style file is intended for texts in ENGLISH %<*babel> % This bibliography style file requires a file named babelbst.tex % containing the definitions of word commands like \bbleditor, etc. % % %<*exlang> % This bibliography style file is intended for texts in % % BAHASA % % BRAZILIAN % % CATALAN % % CROATIAN % % CZECH % % DANISH % % DUTCH % % ENGLISH % % ESPERANTO % % FINNISH % % FRENCH % % GALACIAN % % GERMAN % % HUNGARIAN % % ITALIAN % % NORWEGIAN % % NORWEGIAN % % POLISH % % PORTUGUESE % % ROMANIAN % % RUSSIAN % % SLOVAK % % SLOVENIAN % % SPANISH % % SWEDISH % % TURKISH % %<*ay> % This is an author-year citation style bibliography. As such, it is % non-standard LaTeX, and requires a special package file to function properly. % Such a package is natbib.sty by Patrick W. Daly %<*alk> % or: apalike.sty by Oren Patashnik % The form of the \bibitem entries is % \bibitem[Jones et al., 1990]{key}... % %<*!(har|ast|alk|cay|nmd|cn)> % The form of the \bibitem entries is % \bibitem[Jones et al.(1990)]{key}... % % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... % The essential feature is that the label (the part in brackets) consists % of the author names, as they should appear in the citation, with the year % in parentheses following. There must be no space before the opening % parenthesis! % % With natbib v5.3, a full list of authors may also follow the year. % In natbib.sty, it is possible to define the type of enclosures that is % really wanted (brackets or parentheses), but in either case, there must % be parentheses in the label. % The \cite command functions as follows: % \cite{key} ==>> Jones et al. (1990) % \cite[]{key} ==>> (Jones et al., 1990) % \cite[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) % \cite[e.g.][]{key} ==>> (e.g. Jones et al., 1990) % \cite[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) % \citeauthor{key} Jones et al. % % \citefullauthor{key} Jones, Baker, and Smith % \citeyear{key} 1990 % %<*har> % or: harvard.sty by Peter Williams and Thorsten Schnier % % (needs natbib v5.3 or harvard v2.0.3) % The form of the bibitem entries is % \harvarditem[Jones et al.]{Jones, Baker, and Smith}{1990}{key}... % %<*cay> % or: chicago.sty % The form of the bibitem entries is % \bibitem[\protect\citeauthoryear{Jones, Baker, and Smith} % {Jones et al.}{1990}{key}... % %<*nmd> % or: named.sty % The form of the bibitem entries is % \bibitem[\protect\citeauthoryear{Jones et al.}{1990}]{key}... % %<*ast> % or: astron.sty % The form of the bibitem entries is % \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}... % %<*cn> % or: authordate1-4.sty % The form of the bibitem entries is % \bibitem[\protect\citename{Jones et al.}1990]{key}... % % %<*!ay> %<*!alph&!cite> % This is a numerical citation style, and as such is standard LaTeX. % %<*alph> % This is a labelled citation style similar to the standard alpha.bst, % where labels are of the form Dal90 or DBK89. % %<*cite&!alph> % This is a special pseudo-numerical bibliography style, intended to be % used to list all the entries in a bib database % % It requires no extra package to interface to the main text. % The form of the \bibitem entries is % % \bibitem{key}... % % \bibitem[label]{key}... % % \bibitem[key]{key}... %<*!cite|alph> % Usage of \cite is as follows: %<*!alph&!cite> % \cite{key} ==>> [#] % \cite[chap. 2]{key} ==>> [#, chap. 2] % where # is a number determined by the ordering in the reference list. % %<*alph> % \cite{key} ==>> [label] % \cite[chap. 2]{key} ==>> [label, chap. 2] % The order in the reference list is by label. % %<*seq-no&!alph> % The order in the reference list is that by which the works were originally % cited in the text, or that in the database. % %<*!seq-no&!alph> % The order in the reference list is alphabetical by authors. % % % %--------------------------------------------------------------------- % \end{macrocode} % \changes{1.5(2.3)}{1994 Sep 16}{Add URL entry type for \texttt{harnm} option} % The new \texttt{harvard.sty} of \LaTeXe{} includes an entry URL, or % rather it is included in the new \texttt{.bst} files for it. Add it % here too, but only for option \texttt{harnm}. % % \changes{3.0}{1995 Mar 1}{Add optional entries \texttt{isbn}} % Books normally have an ISBN number. % This entry is (optionally) included, modelled after that in % \texttt{xbtxbst.doc}. % \begin{macrocode} ENTRY { address author booktitle chapter edition editor howpublished institution % isbn journal key month note number organization pages publisher school series title type % URL volume year } {} % { label } % { label extra.label sort.label } % { label extra.label sort.label short.list } INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } STRINGS { s t } FUNCTION {output.nonnull} { 's := output.state mid.sentence = % { ", " * write$ } % { "; " * write$ } % { " " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {fin.entry} %<*!fin-bare> { add.period$ write$ % %<*fin-bare> { duplicate$ empty$ 'pop$ 'write$ if$ % newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } % \end{macrocode} % % \begin{macro}{`add.blank'} % \changes{1.5(2.3)b}{1995 Jan 10}{Add function} % When text is printed with \texttt{output} or % \texttt{output.check}, the \texttt{output.state} is set such that % a comma will precede the next output text. For special effects, we want to % suppress this comma, inserting a blank instead. Hence the % \texttt{output.state} is changed to \texttt{before.all}, meaning no % punctuation is to be inserted. % \begin{macrocode} FUNCTION {add.blank} { " " * before.all 'output.state := } % \end{macrocode} % \end{macro} % \begin{macro}{`add.colon'} % \changes{3.4}{1995 Sep 28}{Add macro} % \begin{macrocode} %<*au-col> FUNCTION {add.colon} { empty$ 'skip$ { before.all 'output.state := ":" output add.blank } if$ } % % \end{macrocode} % \end{macro} % % \begin{macro}{`no.blank.or.punct'} % \changes{3.2}{1995 May 19}{Add function} % \changes{3.2}{1995 May 30}{Present only for option \texttt{yrpp-xsp}} % Another frill is to suppresss both blanks and punctuation. The |\hspace| % permits a line break at this point. % \begin{macrocode} %<*yrpp-xsp> FUNCTION {no.blank.or.punct} { "\hspace{0pt}" * before.all 'output.state := } % % \end{macrocode} % \end{macro} % % \begin{macro}{`date.block'} % \changes{3.0}{1995 Mar 9}{Add function} % \changes{3.81}{1996 Jun 25}{Add option \texttt{yrp-per}} % The \texttt{date.block} function is used for special punctuating effects % after the date. % \begin{macrocode} FUNCTION {date.block} { %<*!yrp-x> % ":" * %<*!yrp-col> % ";" * %<*!yrp-semi> % new.block %<(blk-com|blk-tit|blk-tita)&!yrp-per> skip$ %<(blk-com|blk-tit|blk-tita)&yrp-per> new.sentence % % % %<*yrp-x|yrp-col|yrp-semi> % add.blank % no.blank.or.punct % } % \end{macrocode} % \end{macro} % % \begin{macrocode} FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } % \end{macrocode} % \begin{macro}{`non.stop'} % \changes{1.4(2.2)a}{1994 Sep 8}{Add to test if last character % is punctuation: . ! ?} % This function (my invention) tests if the last character in the string % on the stack is \texttt{. ! ?} by using \texttt{add.period\$}. It is to % be used for conditional italic correction or adding commas. % \begin{macrocode} FUNCTION {non.stop} { duplicate$ "}" * add.period$ #-1 #1 substring$ "." = } % \end{macrocode} % \end{macro} % \begin{macrocode} %<*!ay> FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } % FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } %<*!ay> FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } % FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } % \end{macrocode} % \begin{macro}{`emphasize'} % Emphasis can be either italic or the alternating font. The font command % may be NFSS or regular \LaTeX~2.09 declarations. %\changes{1.3(2.1)}{1994 Jul 1}{Add \texttt{nfss} option} % \begin{macrocode} FUNCTION {emphasize} %<*!em-x> { duplicate$ empty$ { pop$ "" } %<*!nfss> % { "{\em " swap$ * "\/}" * } % { "{\it " swap$ * "\/}" * } % %<*nfss> % { "\emph{" swap$ * "}" * } % { "\textit{" swap$ * "}" * } % if$ } % %{ skip$ } %<*nmft-bf|vol-bf|vol-2bf|lab-bf|dtbf> % \end{macrocode} % \end{macro} % \begin{macro}{`bolden'} % The bold font command may be NFSS or the regular \LaTeX~2.09 declaration. %\changes{1.3(2.1)}{1994 Jul 1}{Add \texttt{nfss} option} % \begin{macrocode} FUNCTION {bolden} { duplicate$ empty$ { pop$ "" } % { "{\bf " swap$ * "}" * } % { "\textbf{" swap$ * "}" * } if$ } % %<*lab-sc|nmft-sc> % \end{macrocode} % \end{macro} % \begin{macro}{`scaps'} % To put text into small caps. %\changes{3.0}{1995 Mar 3}{Add function} % \begin{macrocode} FUNCTION {scaps} { duplicate$ empty$ { pop$ "" } % { "{\sc " swap$ * "}" * } % { "\textsc{" swap$ * "}" * } if$ } % %<*and-rm|nmand-rm|etal-rm> % \end{macrocode} % \end{macro} % \begin{macro}{`roman.list'} % \changes{3.4}{1995 Sep 28}{Add function} % \begin{macro}{`roman.cite'} % \changes{3.8}{1996 Mar 16}{Add function} % These functions are use to print the words `and' and `et al.' in the % authors' names in the regular font. Since the list of references and the % citations can in principle have different author fonts, we need two such % commands. For non-NFSS, these just select |\rm|, but for NFSS, the one % attribute specifying the authors' fonts is reset. % % \begin{macrocode} FUNCTION {roman.list} { duplicate$ empty$ { pop$ "" } % { "{\rm " swap$ * "}" * } %<*nfss> % { "{\mdseries " swap$ * "}" * } %<(nmft-it|nmft-sc)&!nmft-bf> { "{\upshape " swap$ * "}" * } % { "{\normalfont " swap$ * "}" * } % if$ } FUNCTION {roman.cite} %{ roman.list } %<*nfss> { duplicate$ empty$ { pop$ "" } % { "{\mdseries " swap$ * "}" * } %<(lab-it|lab-sc)&!lab-bf> { "{\upshape " swap$ * "}" * } % { "{\normalfont " swap$ * "}" * } if$ } % % % \end{macrocode} % \end{macro}\end{macro} % % \begin{macro}{`capitalize'} % \changes{3.0}{1995 Mar 7}{Add capitalizing function} % Capitalizing is easy for regular languages, but for \texttt{babel}, % some trickery stuff is needed; definitions of |\capitalize| and % |\Capitalize| are written to the \texttt{.bbl} file. % \begin{macrocode} FUNCTION {capitalize} %{ "u" change.case$ "t" change.case$ } %{ "\capitalize" swap$ * } % \end{macrocode} % \end{macro} % % \begin{macro}{`space.word'} % \changes{2.0}{1994 Jan 31}{Add function to space out words; necessary % for the multilingual functions.} % The function \texttt{space.word} adds a space before and after the word or % words currently on the stack. This was added for the \texttt{bbl.}$nnn$ % functions, that contain only a word without spacing, but replace explicit % text in the originals that were spaced out. Its seems more flexible to % define the word functions to be without spacing. % \begin{macrocode} FUNCTION {space.word} { " " swap$ * " " * } % Here are the language-specific definitions for explicit words. % Each function has a name bbl.xxx where xxx is the English word. %<*!exlang> % \end{macrocode} % \end{macro} % \begin{macro}{`bbl.xxx'} % \changes{2.0}{1994 Jan 31}{Replace all explicit words with functions % of the form \texttt{bbl.xxx}.} % \changes{3.6}{1996 Jan 15}{Add option \texttt{varand}} % These are the default English words. There is no default language % option: one of \texttt{english} or \texttt{babel} must be given. % \begin{macrocode} %<*!babel> % The language selected here is ENGLISH FUNCTION {bbl.and} %{ "and"} %{ "\BIBand{}"} FUNCTION {bbl.editors} %{ "editors" } %{ "eds." } FUNCTION {bbl.editor} %{ "editor" } %{ "ed." } FUNCTION {bbl.edby} { "edited by" } FUNCTION {bbl.edition} %{ "edition" } %{ "edn." } FUNCTION {bbl.volume} %{ "volume" } %{ "vol." } FUNCTION {bbl.of} { "of" } FUNCTION {bbl.number} %{ "number" } %{ "no." } FUNCTION {bbl.nr} { "no." } FUNCTION {bbl.in} { "in" } FUNCTION {bbl.pages} %{ "pages" } %{ "pp." } %{ "" } FUNCTION {bbl.page} %{ "page" } %{ "p." } %{ "" } FUNCTION {bbl.chapter} %{ "chapter" } %{ "chap." } FUNCTION {bbl.techrep} %{ "Technical Report" } %{ "Tech. Rep." } FUNCTION {bbl.mthesis} { "Master's thesis" } FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } FUNCTION {bbl.first} %{ "First" } %{ "1st" } FUNCTION {bbl.second} %{ "Second" } %{ "2nd" } FUNCTION {bbl.third} %{ "Third" } %{ "3rd" } FUNCTION {bbl.fourth} %{ "Fourth" } %{ "4th" } FUNCTION {bbl.fifth} %{ "Fifth" } %{ "5th" } FUNCTION {bbl.st} { "st" } FUNCTION {bbl.nd} { "nd" } FUNCTION {bbl.rd} { "rd" } FUNCTION {bbl.th} { "th" } %<*!abr> MACRO {jan} {"January"} MACRO {feb} {"February"} MACRO {mar} {"March"} MACRO {apr} {"April"} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"October"} MACRO {nov} {"November"} MACRO {dec} {"December"} % %<*abr> MACRO {jan} {"Jan."} MACRO {feb} {"Feb."} MACRO {mar} {"Mar."} MACRO {apr} {"Apr."} MACRO {may} {"May"} MACRO {jun} {"Jun."} MACRO {jul} {"Jul."} MACRO {aug} {"Aug."} MACRO {sep} {"Sep."} MACRO {oct} {"Oct."} MACRO {nov} {"Nov."} MACRO {dec} {"Dec."} % % % \end{macrocode} % % Here are the definitions for \texttt{babel} option, i.e., explicit % translations are not used, but rather only \LaTeX{} macros that must be % defined in the file \texttt{babelbst.tex}. This could allow automatic % language selection. % \begin{macrocode} %<*babel> % The BABEL language selection is made here; definitions in babelbst.tex. FUNCTION {bbl.and} { "\bbland{}"} FUNCTION {bbl.editors} %{ "\bbleditors{}" } %{ "\bbleds{}" } FUNCTION {bbl.editor} %{ "\bbleditor{}" } %{ "\bbled{}" } FUNCTION {bbl.edby} { "\bbledby{}" } FUNCTION {bbl.edition} %{ "\bbledition{}" } %{ "\bbledn{}" } FUNCTION {bbl.volume} %{ "\bblvolume{}" } %{ "\bblvol{}" } FUNCTION {bbl.of} { "\bblof{}" } FUNCTION {bbl.number} %{ "\bblnumber{}" } %{ "\bblno{}" } FUNCTION {bbl.nr} { "\bblno{}" } FUNCTION {bbl.in} { "\bblin{}" } FUNCTION {bbl.pages} %{ "\bblpages{}" } %{ "\bblpp{}" } %{ "" } FUNCTION {bbl.page} %{ "\bblpage{}" } %{ "\bblp{}" } %{ "" } FUNCTION {bbl.chapter} %{ "\bblchapter{}" } %{ "\bblchap{}" } FUNCTION {bbl.techrep} %{ "\bbltechreport{}" } %{ "\bbltechrep{}" } FUNCTION {bbl.mthesis} { "\bblmthesis{}" } FUNCTION {bbl.phdthesis} { "\bblphdthesis{}" } FUNCTION {bbl.first} %{ "\bblfirst{}" } %{ "\bblfirsto{}" } FUNCTION {bbl.second} %{ "\bblsecond{}" } %{ "\bblsecondo{}" } FUNCTION {bbl.third} %{ "\bblthird{}" } %{ "\bblthirdo{}" } FUNCTION {bbl.fourth} %{ "\bblfourth{}" } %{ "\bblfourtho{}" } FUNCTION {bbl.fifth} %{ "\bblfifth{}" } %{ "\bblfiftho{}" } FUNCTION {bbl.st} { "\bblst{}" } FUNCTION {bbl.nd} { "\bblnd{}" } FUNCTION {bbl.rd} { "\bblrd{}" } FUNCTION {bbl.th} { "\bblth{}" } MACRO {jan} {"\bbljan{}"} MACRO {feb} {"\bblfeb{}"} MACRO {mar} {"\bblmar{}"} MACRO {apr} {"\bblapr{}"} MACRO {may} {"\bblmay{}"} MACRO {jun} {"\bbljun{}"} MACRO {jul} {"\bbljul{}"} MACRO {aug} {"\bblaug{}"} MACRO {sep} {"\bblsep{}"} MACRO {oct} {"\bbloct{}"} MACRO {nov} {"\bblnov{}"} MACRO {dec} {"\bbldec{}"} % % \end{macrocode} % % \begin{macro}{`eng.ord'} % \changes{2.0}{1994 Jan 31}{Add function to format English ordinals.} % This function adds English endings for ordinals 1, 2, 3. However, if % the second last digit is 1, then the ending is `th' for all last digits. % So far, all other languages included do not have this problem, and it is % sufficient to add the \textsl{th} equivalent. This might change with further % languages. % % This function must be included with \texttt{babel} too, since that includes % English. This means that the language definition files must also provide % for |\bblst|, |\bblnd|, and |\bblrd|, setting them all equal to |\bblth|. % % \begin{macrocode} %<*english|!exlang> FUNCTION {eng.ord} { duplicate$ "1" swap$ * #-2 #1 substring$ "1" = { bbl.th * } { duplicate$ #-1 #1 substring$ duplicate$ "1" = { pop$ bbl.st * } { duplicate$ "2" = { pop$ bbl.nd * } { "3" = { bbl.rd * } { bbl.th * } if$ } if$ } if$ } if$ } % % \end{macrocode} % \end{macro} % % \begin{macrocode} % % %<*!head> % \end{macrocode} % \end{macro} % % \begin{macrocode} %<*!jabr> MACRO {acmcs} {"ACM Computing Surveys"} MACRO {acta} {"Acta Informatica"} MACRO {cacm} {"Communications of the ACM"} MACRO {ibmjrd} {"IBM Journal of Research and Development"} MACRO {ibmsj} {"IBM Systems Journal"} MACRO {ieeese} {"IEEE Transactions on Software Engineering"} MACRO {ieeetc} {"IEEE Transactions on Computers"} MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} MACRO {ipl} {"Information Processing Letters"} MACRO {jacm} {"Journal of the ACM"} MACRO {jcss} {"Journal of Computer and System Sciences"} MACRO {scp} {"Science of Computer Programming"} MACRO {sicomp} {"SIAM Journal on Computing"} MACRO {tocs} {"ACM Transactions on Computer Systems"} MACRO {tods} {"ACM Transactions on Database Systems"} MACRO {tog} {"ACM Transactions on Graphics"} MACRO {toms} {"ACM Transactions on Mathematical Software"} MACRO {toois} {"ACM Transactions on Office Information Systems"} MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} MACRO {tcs} {"Theoretical Computer Science"} % %<*jabr> MACRO {acmcs} {"ACM Comput. Surv."} MACRO {acta} {"Acta Inf."} MACRO {cacm} {"Commun. ACM"} MACRO {ibmjrd} {"IBM J. Res. Dev."} MACRO {ibmsj} {"IBM Syst.~J."} MACRO {ieeese} {"IEEE Trans. Softw. Eng."} MACRO {ieeetc} {"IEEE Trans. Comput."} MACRO {ieeetcad} {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} MACRO {ipl} {"Inf. Process. Lett."} MACRO {jacm} {"J.~ACM"} MACRO {jcss} {"J.~Comput. Syst. Sci."} MACRO {scp} {"Sci. Comput. Programming"} MACRO {sicomp} {"SIAM J. Comput."} MACRO {tocs} {"ACM Trans. Comput. Syst."} MACRO {tods} {"ACM Trans. Database Syst."} MACRO {tog} {"ACM Trans. Gr."} MACRO {toms} {"ACM Trans. Math. Softw."} MACRO {toois} {"ACM Trans. Office Inf. Syst."} MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} MACRO {tcs} {"Theoretical Comput. Sci."} % % \end{macrocode} % % \begin{macro}{`write.url'} % \changes{1.5(2.3)}{1994 Sep 16}{Add \texttt{write.url} for option % \texttt{harnm}} % This function taken over from \texttt{agsm.sty}, the main \texttt{harvard} % bib style. % \begin{macrocode} %<*harnm> FUNCTION {write.url} { URL empty$ { skip$ } { "\newline\harvardurl{" URL * "}" * write$ newline$ } if$ } % % \end{macrocode} % \end{macro} % % \begin{macro}{`format.names'} % \changes{1.5(2.3)}{1994 Sep 16}{Add \texttt{harvard} command for `and' with % new option \texttt{harnm}} % \changes{3.0}{1995 Feb 27}{Add option \texttt{nm-revf}} % \changes{3.0}{1995 Mar 15}{Add option \texttt{nm-rvx}} % \changes{3.2}{1995 Jun 7}{Add option \texttt{nm-rvv}} % \changes{3.6}{1995 Dec 7}{Jr to go at end with \texttt{nm-rev1} (AGU style)} % \changes{3.6}{1995 Dec 8}{Add option \texttt{nmand-rm}} % \changes{3.6}{1996 Jan 30}{Add option \texttt{etal-rm}} % \changes{3.7}{1996 Feb 5}{Add option \texttt{aunm-semi}} % \changes{3.82}{1996 Dec 16}{Add option \texttt{nm-revv1} (AGU style with full % names)} % The \texttt{harvard} package now (version 2.0.3, for \LaTeXe) uses % |\harvardand| in place of the word \textsl{and} so that it can be changed % at run time. This is allowed for with the option \texttt{harnm}, which % need not be used only with the \texttt{har} option. % This seems like a useless feature for \texttt{.bst} files made from % this multilanguage source. However, it is included anyway, which means % if \texttt{harnm} option selected, one must redefine |\harvardand| % in the document for the language being used. % \begin{macrocode} INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } %<*!nm-rev1&!nm-revv1> { s nameptr % "{f.~}{vv~}{ll}{, jj}" format.name$ 't := %<*!nm-init> % "{vv~}{ll}{, jj}{, f.}" format.name$ 't := %<*!nm-rev> % "{vv~}{ll}{ jj}{ f{~}}" format.name$ 't := %<*!nm-rv> % "{vv~}{ll}{ jj}{ f{}}" format.name$ 't := %<*!nm-rvx> % "{vv~}{ll}{ jj}{ f{.}.}" format.name$ 't := %<*!nm-rvv> % "{vv~}{ll}{, jj}{, ff}" format.name$ 't := %<*!nm-revf> "{ff~}{vv~}{ll}{, jj}" format.name$ 't := % % % % % % % %<*nm-rev1> { nameptr #1 > { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := } { s nameptr "{vv~}{ll}{, f.}{, jj}" format.name$ 't := } if$ % %<*!nm-rev1&nm-revv1> { nameptr #1 > { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := } { s nameptr "{vv~}{ll}{, ff}{, jj}" format.name$ 't := } if$ % nameptr #1 > { %<*nmlm> % nameptr #2 = % nameptr #3 = % nameptr #4 = % nameptr #5 = % nameptr #6 = % nameptr #7 = % numnames #1 > and % numnames #2 > and % numnames #3 > and % numnames #4 > and % numnames #5 > and % numnames #6 > and % numnames #7 > and % numnames #8 > and % numnames #9 > and { "others" 't := #1 'namesleft := } 'skip$ if$ % namesleft #1 > % { ", " * t * } % { "; " * t * } { %<(and-com|xand)&!aunm-semi> "," * %<(and-com|xand)&aunm-semi> ";" * %<*!and-xcom&!and-com&!xand> numnames #2 > % { "," * } % { ";" * } 'skip$ if$ % t "others" = % { " et~al." * } % { " " * "et~al." roman.list * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * t * } % { bbl.and roman.list space.word * t * } % { " \& " * t * } % % { " \harvardand\ " * t * } % { " " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.names.ed'} % \changes{1.6(2.4)}{1995 Feb 2}{Add option \texttt{ed-rev} to allow editor % to be formatted just like authors'} % \changes{3.0}{1995 Feb 27}{Option \texttt{nm-revf} to act just as default} % When editors are used in place of authors to identify the work, the % names are always formatted just like authors'. However, in collections, % where ``edited by'' or ``\emph{names} (editors)'' are given, it is % normal not the reverse the names, even if the authors' are. The option % \texttt{ed-rev} sees to it that editor names are always formatted exactly % like those of authors, being reversed if necessary. % % The option \texttt{nm-revf} in this case acts the same as the default % when no \texttt{nm-} option given: full names with surname last. Therefore % it is not necessary to test for it at all, since it, like the default, % has the lowest priority: any other \texttt{nm-} option clobbers it. % % The option \texttt{aunm-semi} will put a semi-colon between editor names, just % as for authors, when \texttt{ed-rev} selected, in keeping with the idea % that in this case both authors and editors are to be formatted the same. % \begin{macrocode} FUNCTION {format.names.ed} %{ format.names } %<*!ed-rev> { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr % "{f.~}{vv~}{ll}{, jj}" %<*!nm-init&!nm-rev&!nm-rev1> % "{ff~}{vv~}{ll}{, jj}" %<*!nm-revv1> % "{f{~}~}{vv~}{ll}{ jj}" %<*!nm-rv> % "{f{}~}{vv~}{ll}{ jj}" %<*!nm-rvx> % "{f{.}.~}{vv~}{ll}{ jj}" %<*!nm-rvv> "{ff~}{vv~}{ll}{, jj}" % % % % % format.name$ 't := nameptr #1 > { namesleft #1 > % { ", " * t * } % { "; " * t * } { %<(and-com|xand)&!aunm-semi> "," * %<(and-com|xand)&aunm-semi> ";" * %<*!and-xcom&!and-com&!xand> numnames #2 > % { "," * } % { ";" * } 'skip$ if$ % t "others" = % { " et~al." * } % { " " * "et~al." roman.list * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * t * } % { bbl.and roman.list space.word * t * } % { " \& " * t * } % % { " \harvardand\ " * t * } % { " " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } % % \end{macrocode} % \end{macro} % \begin{macrocode} %<*ay> FUNCTION {format.key} { empty$ { key field.or.null } { "" } if$ } % % \end{macrocode} % \begin{macro}{`format.authors'} % \begin{macrocode} FUNCTION {format.authors} { author empty$ { "" } { % author format.names scaps %<*!nmft-sc> % author format.names bolden %<*!nmft-bf> % author format.names emphasize %<*!nmft-it> author format.names % % % } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.editors'} % \changes{3.0}{1995 Mar 20}{Add option \texttt{edpar}} % The option \texttt{edpar} puts the word `editor' in parentheses. % In \texttt{genbst.mbs}, this occurred automatically with the option % \texttt{ed}, to abbreviate `editor' to `ed'. In \texttt{babel.mbs}, % this was not the case, because of complications with the word functions. % Now this possibility is added as a special option, which means there is % some inconsistency with older \texttt{.dbj} files that called \texttt{ed}: % the abbreviated `ed' is not put in parentheses unless \texttt{edpar} is % also called. % \begin{macrocode} FUNCTION {format.editors} { editor empty$ { "" } { % editor format.names scaps %<*!nmft-sc> % editor format.names bolden %<*!nmft-bf> % editor format.names emphasize %<*!nmft-it> editor format.names % % % editor num.names$ #1 > %<*!edpar> { ", " * bbl.editors * } { ", " * bbl.editor * } % %<*edpar> { " (" * bbl.editors * ")" * } { " (" * bbl.editor * ")" * } % if$ } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.in.editors'} % \changes{3.0}{1995 Mar 20}{Add option \texttt{edpar}} % See the note about the option \texttt{edpar} above. % \begin{macrocode} FUNCTION {format.in.editors} { editor empty$ { "" } { editor format.names.ed %<*!edby&!edby-par> editor num.names$ #1 > %<*!edpar> { ", " * bbl.editors * } { ", " * bbl.editor * } % %<*edpar> { " (" * bbl.editors * ")" * } { " (" * bbl.editor * ")" * } % if$ % } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.isbn'} % \changes{3.0}{1995 Mar 1}{Add function} % \begin{macrocode} %<*isbn> FUNCTION {format.isbn} { isbn empty$ { "" } { % new.block "ISBN " isbn * } if$ } % % \end{macrocode} % \end{macro} % % \begin{macro}{`format.title'} % \changes{1.4(2.2)a}{1994 Sep 7}{Add enquote function to put titles in quotes, % such that punctuation is inside quotes.} % \changes{3.8}{1996 Apr 17}{Fix bug in quoted title and \texttt{blk-com}} % \begin{macrocode} FUNCTION {format.title} { title empty$ { "" } % { title "t" change.case$ % { title % emphasize %<*!tit-it&(tit-q|tit-qq)> "\enquote{" swap$ * %<*blk-com> non.stop % { ",} " * } % { ";} " * } % { "} " * } { "} " * } if$ % % add.period$ "}" * % } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`end.quote.title'} % \changes{3.82}{1996 Nov 15}{Add macro to finish off quoted titles} % For a quoted title, the punctuation appears in the quotes. For commas % between block, this means the inter-block punctuation is already present, % so it must be suppressed after every \texttt{format.title output}. This % is done by setting the \texttt{output.state} to \texttt{before.all}, but % only if there really was a title. Call this macro every time after % titles are output. % \begin{macrocode} %<*blk-com&(tit-q|tit-qq)> FUNCTION {end.quote.title} { title empty$ 'skip$ { before.all 'output.state := } if$ } % % \end{macrocode} % \end{macro} % % \begin{macro}{`make.full.names'} % \changes{1.1}{1993 Nov 12}{Add key labels to \texttt{calc.long.label} and % get {\tt'author} and {\tt'editor} in right order when author % missing.} % \changes{1.4(2.2)}{1994 Sep 5}{Remove \texttt{calc.long.label} and % \texttt{format.long.lab.names}, replacing them with % \texttt{format.full.names}, \texttt{make.full.names}, and adding % \texttt{author.editor.key}, \texttt{author.key}, and \texttt{editor.key}} % \changes{1.4(2.2)a}{1994 Sep 7}{Remove option \texttt{and-com} from % \texttt{make.full.names}} % \changes{1.5(2.3)}{1994 Sep 15}{Add full names for \texttt{natbib} v5.3} % \changes{3.6}{1995 Dec 8}{Suppress `and' in full list if suppressed in short} % \changes{3.6}{1995 Dec 8}{Font of `and' in lists same as in citations} % In versions before 2.2, there were two functions \texttt{calc.long.label} % and \texttt{format.long.lab.names} that made up the string % \texttt{long.label} for each entry. This contains the full author list. % However, there was a bug in the one routine, entered by mistake when an % earlier bug was removed, and more seriously, the string % \texttt{long.label} was limited to \texttt{entry.max\$} characters, 100 on % my system. Author lists were truncated. Thus, \texttt{make.full.names} % is used instead to enter the full list of names directly in the % \texttt{output.bibitem} function, without an intermediate string. This % involves changing the order of some function definitions, especially % \texttt{output.bibitem} must come later. % \begin{macrocode} %<*har|cay|nat> FUNCTION {format.full.names} {'s := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv~}{ll}" format.name$ 't := nameptr #1 > { %<*nmlm> % nameptr #2 = % nameptr #3 = % nameptr #4 = % nameptr #5 = % nameptr #6 = % numnames #1 > and % numnames #2 > and % numnames #3 > and % numnames #4 > and % numnames #5 > and % numnames #6 > and % numnames #7 > and % numnames #8 > and % numnames #9 > and { "others" 't := #1 'namesleft := } 'skip$ if$ % namesleft #1 > { ", " * t * } { %<*!and-xcom> numnames #2 > { "," * } 'skip$ if$ % t "others" = % { " et~al." * } % { " " * "et~al." roman.cite * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * t * } % { bbl.and roman.cite space.word * t * } % { " \& " * t * } % % { " \harvardand\ " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {author.editor.key.full} { author empty$ { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.full.names } if$ } { author format.full.names } if$ } FUNCTION {author.key.full} { author empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { author format.full.names } if$ } FUNCTION {editor.key.full} { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.full.names } if$ } FUNCTION {make.full.names} { type$ "book" = type$ "inbook" = or 'author.editor.key.full { type$ "proceedings" = 'editor.key.full 'author.key.full if$ } if$ % emphasize % bolden % scaps } % % \end{macrocode} % \end{macro} % % \begin{macro}{`output.bibitem'} %\changes{1.1}{1993 Nov 12}{Test for missing year, set to {\tt????}.} % The \texttt{output.bibitem} function formats the |\bibitem| entries. %\changes{1.4(2.2)}{1994 Sep 5}{Move to later location, add % \texttt{make.full.names} instead of inserting string \texttt{long.label}} %\changes{1.5(2.3)}{1994 Sep 16}{Add option \texttt{nat} for full author list % for \texttt{natbib.sty} version~5.3} % \begin{macrocode} FUNCTION {output.bibitem} { newline$ %<*ay> % "\bibitem[" write$ % "\harvarditem" write$ % "\protect\citeauthoryear{" write$ % "\protect\astroncite{" write$ % "\protect\citeauthoryear{" make.full.names * "}{" * write$ % "\protect\citename{" write$ % label write$ % make.full.names duplicate$ label = % 'skip$ % { "[" label * "]" * write$ } % if$ % "{" swap$ * "}{" * write$ % year duplicate$ empty$ % ", }" year duplicate$ empty$ % "}{" year duplicate$ empty$ % { pop$ "????" } % 'skip$ % if$ % extra.label * "}{" * write$ % * extra.label * "]{" * write$ % * extra.label * "}]{" * write$ % "]{" write$ % ")]{" write$ % ")" make.full.names duplicate$ short.list = % { pop$ } % { * } % if$ % "]{" * write$ % % "\bibitem{" write$ % "\bibitem[" label * "]{" * write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } % \end{macrocode} % \end{macro} % % \begin{macro}{`bracket.number'} % \changes{3.6}{1995 Nov 23}{Add function to put `number' on pages} % For the scheme in which the `number' is added to the pages, provide this % function which is called in \texttt{num.pages}. This adds number at % the start and after any hyphens. % \begin{macrocode} %<*vnum-pg> FUNCTION {bracket.number} { number empty$ 'skip$ { "(" number * ")" * * } if$ } FUNCTION {num.pages} { 't := "0" 's := "" bracket.number { t empty$ not } { t #1 #1 substring$ "-" = { "1" 's := } { "1" s = 'bracket.number 'skip$ if$ "0" 's := } if$ t #1 #1 substring$ * t #2 global.max$ substring$ 't := } while$ } % % \end{macrocode} % \end{macro} % \begin{macrocode} FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } % \end{macrocode} % % \begin{macro}{`word.in'} % \changes{2.0}{1994 Jan 31}{Function \texttt{word.in} constructed out of % \texttt{bbl.in} or \texttt{bbl.iin}.} % \changes{3.0}{1995 Feb 16}{Use only \texttt{bbl.in} and capitalize it % as necessary; remove \texttt{bbl.iin}} % \changes{3.81}{1996 Jun 19}{Add option \texttt{in-x} to suppress `in'} % The function \texttt{word.in} prints the word \textsl{in} for references % that are % contained in a larger work, or in conference proceedings. One may have a % colon after the word with the option \texttt{in-col}. If blocks of text are % to be separated with commas (option \texttt{blk-com}) then the word remains % in lower case, as it is defined in \texttt{bbl.in}; but if blocks act as % sentences, then it must be capitalized.^^A by using \texttt{bbl.iin}. % \begin{macrocode} FUNCTION {word.in} %{ "" } %<*!in-x> %{ bbl.in %{ bbl.in capitalize % ":" * " " * } % % \end{macrocode} % \end{macro} % \begin{macro}{`format.date'} % \changes{1.4(2.2)}{1994 Sep 6}{Add option \texttt{yr-per} to put period % before date} % \changes{1.5(2.3)}{1994 Sep 16}{Add \texttt{harvard} bracket names to year % with new option \texttt{harnm}} % \changes{1.6(2.4)}{1995 Feb 2}{Add \texttt{yr-blk} for no punctuation before % the date} % \changes{3.2}{1995 May 19}{Add \texttt{dtrev} option for year month} % \changes{3.2}{1995 May 19}{Add \texttt{mth-bare} for dotless abbreviation % of months} % \changes{3.4}{1995 Sep 28}{Add \texttt{volp-dt} for date after volume} % \changes{3.5}{1995 Oct 9}{Add brace pair after % \texttt{\char`\\harvardyearright}} % \changes{3.5}{1995 Oct 16}{Add \texttt{aymth} option for months in dates} % \changes{3.8}{1996 Mar 19}{Add \texttt{vnum-dt} option} % \changes{3.81}{1996 Sep 12}{Add \texttt{yr-com} option} % \changes{3.82}{1996 Dec 12}{Fix bug that left off extra label for plain year} % The new \texttt{harvard.sty} allows variable brackets around the date % in the reference list. It uses |\harvardyearleft| and |\harvardyearright| % in the \texttt{.bst} files. Allow this with the option \texttt{harnm}, % which could actually be used without the \texttt{har} option. Note that % this overrides the other year formatting options. % \begin{macrocode} %<*ay> FUNCTION {format.date} { year duplicate$ empty$ { "empty year in " cite$ * "; set to ????" * warning$ pop$ "????" } 'skip$ if$ %<*aymth> month empty$ 'skip$ { month % swap$ " " * swap$ * } if$ % purify$ % % bolden extra.label * %<*!harnm> %<*yr-par|yr-brk|yr-col|yr-blk|yr-com|yr-per> % before.all 'output.state := % " (" swap$ * ")" * % " [" swap$ * "]" * % ": " swap$ * % ", " swap$ * % after.sentence 'output.state := % " " swap$ * % % % " \harvardyearleft " swap$ * "\harvardyearright{}" * } % %<*!ay> FUNCTION {format.date} { year empty$ { month empty$ { "" } { "there's a month but no year in " cite$ * warning$ month } if$ } { month empty$ 'year % { month " " * year * } % { year " " * month * } if$ % purify$ } if$ % bolden %<*yr-par|yr-brk|yr-col|yr-com|yr-per|yr-blk> duplicate$ empty$ 'skip$ { % before.all 'output.state := % " (" swap$ * ")" * % " [" swap$ * "]" * % ": " swap$ * % ", " swap$ * % after.sentence 'output.state := % " " swap$ * } if$ % } % % \end{macrocode} % \end{macro} % \begin{macrocode} FUNCTION {format.btitle} %{ title emphasize %{ title } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { bbl.volume volume tie.or.space.connect series empty$ 'skip$ { bbl.of space.word * series emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { bbl.number } { bbl.number capitalize } if$ number tie.or.space.connect series empty$ { "there's a number but no series in " cite$ * warning$ } { bbl.in space.word * series * } if$ } if$ } { "" } if$ } % \end{macrocode} % % \begin{macro}{`is.num'} % \changes{2.0}{1994 Jan 31}{Add function to test for digit.} % This function takes the single-character string on the stack and returns % 1 if it is a digit, else 0. % \begin{macrocode} FUNCTION {is.num} { chr.to.int$ duplicate$ "0" chr.to.int$ < not swap$ "9" chr.to.int$ > not and } % \end{macrocode} % \end{macro} % % \begin{macro}{`extract.num'} % \changes{2.0}{1994 Jan 31}{Add function to extract leading number from % a literal string.} % This function tests the string on the stack to see if it begins with a % number. If so, that number is left on the stack; if the string contains % no numbers at the start, it is left unchanged. The idea is to convert % \textsl{1st} to \textsl{1} and leave \textsl{first} as is. % This is used by {\tt convert.edition}. % \begin{macrocode} FUNCTION {extract.num} { duplicate$ 't := "" 's := { t empty$ not } { t #1 #1 substring$ t #2 global.max$ substring$ 't := duplicate$ is.num { s swap$ * 's := } { pop$ "" 't := } if$ } while$ s empty$ 'skip$ { pop$ s } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`convert.edition'} % \changes{2.0}{1994 Jan 31}{Add function to convert \texttt{edition} entry % text from word to a function} % The function \texttt{convert.edition} takes the text in the field % \texttt{edition} and changes it to the language-specific equivalent. As % originally planned for \btx, this field should contain the words % \textsl{First}, \textsl{Second}, etc. Being so explicit, % it is not so easy to translate, nor to % convert to \textsl{1st}, \textsl{2nd}, etc., if one wanted. % This function carries out the translation, by changing % \textsl{first} or \textsl{1} to \texttt{bbl.first}, and so % on. The field is reduced to lower case to make it case insensitive. If no % translation is found, then the original text in \texttt{edition} is used % instead, as it stands. However, if the original is a number greater than % the maximum for which text is provided, then \texttt{bbl.th} is added to % it. % \begin{macrocode} FUNCTION {convert.edition} { edition extract.num "l" change.case$ 's := s "first" = s "1" = or { bbl.first 't := } { s "second" = s "2" = or { bbl.second 't := } { s "third" = s "3" = or { bbl.third 't := } { s "fourth" = s "4" = or { bbl.fourth 't := } { s "fifth" = s "5" = or { bbl.fifth 't := } { s #1 #1 substring$ is.num % { s bbl.th * 't := } % { s eng.ord 't := } { edition 't := } if$ } if$ } if$ } if$ } if$ } if$ t } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.edition'} % \changes{2.0}{1994 Jan 31}{Add call to \texttt{convert.edition}} % This function formats the text for the edition specification, such as % ``Second edition''. It combines the edition number with the word % \textsl{edition}. % \begin{macrocode} FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { convert.edition "l" change.case$ " " * bbl.edition * } { convert.edition "t" change.case$ " " * bbl.edition * } if$ } if$ } % \end{macrocode} % \end{macro} % \begin{macrocode} INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } % \end{macrocode} % \begin{macro}{`format.pages'} % \changes{3.6}{1995 Nov 24}{Add option \texttt{bkpg-par}} % \begin{macrocode} FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check %<*!bkpg-par> { bbl.pages pages n.dashify tie.or.space.connect } { bbl.page pages tie.or.space.connect } % %<*bkpg-par> { "(" bbl.pages pages n.dashify tie.or.space.connect ")" * * } { "(" bbl.page pages tie.or.space.connect ")" * * } % if$ } if$ } % \end{macrocode} % \end{macro} % \begin{macrocode} %<*jpg-1> FUNCTION {first.page} { 't := "" { t empty$ not t #1 #1 substring$ "-" = not and } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } while$ } % % \end{macrocode} % % \begin{macro}{`format.journal.pages'} % \changes{3.82}{1996 Nov 15}{Remove from \texttt{format.vol.num.pages} to % be a separate function} % \begin{macrocode} FUNCTION {format.journal.pages} { pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages } %<*!jpg-1> % { " " * pages n.dashify * } % { " " * pages num.pages n.dashify * } % { " " * bbl.pages "~" * * pages n.dashify * } %<*!volp-dt> % { ": " * pages n.dashify * } % { ": " * pages num.pages n.dashify * } % { ": " * bbl.pages "~" * * pages n.dashify * } %<*!volp-sp> % { " " * pages n.dashify * } % { " " * pages num.pages n.dashify * } % { " " * bbl.pages "~" * * pages n.dashify * } %<*!volp-blk> % { ", " * pages n.dashify * } % { ", " * pages num.pages n.dashify * } % { ", " * bbl.pages "~" * * pages n.dashify * } %<*!volp-com> % { "; " * pages n.dashify * } % { "; " * pages num.pages n.dashify * } % { "; " * bbl.pages "~" * * pages n.dashify * } %<*!volp-semi> % { ":" * pages n.dashify * } % { ":" * pages num.pages n.dashify * } % { ":" * bbl.pages "~" * * pages n.dashify * } % % % % % % %<*jpg-1> % { " " * pages first.page * } % { " " * pages first.page num.pages * } % { " " * bbl.page "~" * * pages first.page * } %<*!volp-dt> % { ": " * pages first.page * } % { ": " * pages first.page num.pages * } % { ": " * bbl.page "~" * * pages first.page * } %<*!volp-sp> % { " " * pages first.page * } % { " " * pages first.page num.pages * } % { " " * bbl.page "~" * * pages first.page * } %<*!volp-blk> % { ", " * pages first.page * } % { ", " * pages first.page num.pages * } % { ", " * bbl.page "~" * * pages first.page * } %<*!volp-com> % { "; " * pages first.page * } % { "; " * pages first.page num.pages * } % { "; " * bbl.page "~" * * pages first.page * } %<*!volp-semi> % { ":" * pages first.page * } % { ":" * pages first.page num.pages * } % { ":" * bbl.page "~" * * pages first.page * } % % % % % % if$ } if$ } % \end{macrocode} % \end{macro} % \begin{macro}{`format.vol.num.pages'} % \changes{1.4(2.2)}{1994 Sep 6}{Add option \texttt{volp-sp} to put space % after colon in vol:~page.} % \changes{1.5(2.3)c}{1995 Jan 20}{Add options \texttt{vnum-h}, % \texttt{vnum-nr} and \texttt{vnum-x} for various formats of % journal vol number} % \changes{1.7(2.5)}{1995 Feb 9}{Add options \texttt{vnum-sp} and % \texttt{vnum-cm}} % \changes{3.0}{1995 Mar 17}{Add option \texttt{volp-semi}} % \changes{3.4}{1995 Sep 28}{Put \texttt{bolden} in right place for % \texttt{vol-2bf} option} % \changes{3.8}{1996 Mar 19}{Put date between volume and number} % \changes{3.8}{1996 Mar 19}{Add possibilitity of `page' word} % \changes{3.81}{1996 Jun 19}{Activate \texttt{jwdpg} option properly} % \changes{3.81}{1996 Jun 19}{Add possibilitity of `volume' word} % \changes{3.82}{1996 Nov 15}{Add option \texttt{pp-last}} % The option \texttt{vnum-dt} is most unpleasing. There should be more choice % about how the number is formatted. It should be a separate option from % the \texttt{vnum-} series, but it was a special wish. Option \texttt{jwdpg} % is also part of this special wish. (Was not properly programmed until 3.81). % % The option \texttt{pp-last} is similar to \texttt{vnum-dt}, and might % actually be able to replace it if used correctly with other options. But % that is speculation on my part. What it does is to suppress the pages % in the formatting macros, and sees to it that the pages are added just % before any notes in those entries that take pages. This applies to more than % just \texttt{article}, but to \texttt{inbook}, \texttt{incollection} as well. % \begin{macrocode} FUNCTION {format.vol.num.pages} { volume field.or.null %<*jwdvol> volume empty$ 'skip$ { bbl.volume "~" * swap$ * } if$ % % bolden % emphasize % format.date * %<*!vnum-x&!vnum-pg> number empty$ 'skip$ { % "~(" number * ")" * * % ", " number * * % ", " bbl.nr * number tie.or.space.connect * % ", \#" number * * % " " number * * % "(" number * ")" * * volume empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ } if$ % % bolden % format.date * % format.journal.pages } % \end{macrocode} % \end{macro} % \begin{macrocode} FUNCTION {format.chapter.pages} { chapter empty$ % 'format.pages % { "" } { type empty$ { bbl.chapter } { type "l" change.case$ } if$ chapter tie.or.space.connect %<*!pp-last> pages empty$ 'skip$ { ", " * format.pages * } if$ % } if$ } % \end{macrocode} % \begin{macro}{`format.in.ed.booktitle'} % \changes{1.5(2.3)b}{1995 Jan 18}{Add option \texttt{edby-par} to put editors % in parentheses} % \changes{1.6(2.4)}{1995 Feb 2}{If \texttt{ed} and \texttt{edby} given % together, abbreviate `edited by' to `ed(s).'} % \changes{3.1}{1995 May 2}{Add option \texttt{edbyx} to replace `edited by' % by `ed(s).'} % \changes{3.81}{1996 Jun 26}{Add option \texttt{edcap}} % Prior to version 3.81, the \textsl{Editor} or \textsl{Edited by} in % parentheses was meant to be capitalized, but this did not work properly. % Now the option \texttt{edcap} produces this, and default is not capitalized. % \begin{macrocode} FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { editor empty$ { word.in booktitle emphasize * } % { word.in format.in.editors * ", " * % booktitle emphasize * } %<*edby|edby-par> { word.in booktitle emphasize * % ", " * % " (" * % bbl.edby %<*edbyx> editor num.names$ #1 > { bbl.editors } { bbl.editor } if$ % % capitalize % * " " * format.in.editors * %<*edbyy> ", " * editor num.names$ #1 > { bbl.editors } { bbl.editor } if$ * % % ")" * } % if$ } if$ } % \end{macrocode} % \end{macro} % \begin{macrocode} %<*!ay> FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and % key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } % FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type "t" change.case$ } if$ } FUNCTION {format.tr.number} { type empty$ { bbl.techrep } 'type if$ number empty$ { "t" change.case$ } { number tie.or.space.connect } if$ } % \end{macrocode} % % \begin{macro}{`format.article.crossref'} %\changes{1.3(2.1)}{1994 Jul 1}{Emphasize \texttt{journal} with % \texttt{emphasize}, not explicitly} % The \texttt{journal} field was emphasized emplicitly, but it should be % done by command. % \begin{macrocode} FUNCTION {format.article.crossref} { %<*!ay> key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { word.in journal emphasize * } if$ } { word.in key * " " *} if$ % % word.in " \cite{" * crossref * "}" * } % \end{macrocode} % \end{macro} % \begin{macrocode} %<*!ay> FUNCTION {format.crossref.editor} { editor #1 "{vv~}{ll}" format.name$ editor num.names$ duplicate$ #2 > % { pop$ " et~al." * } % { pop$ " " * "et~al." roman.list * } % { pop$ " " * "et~al." emphasize * } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = % { " et~al." * } % { " " * "et~al." roman.list * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * editor #2 "{vv~}{ll}" format.name$ * } % { " \& " * editor #2 "{vv~}{ll}" format.name$ * } % % { " \harvardand\ " * editor #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } % % \end{macrocode} % % \begin{macro}{`format.book.crossref'} %\changes{1.3(2.1)}{1994 Jul 1}{Emphasize \texttt{series} with % \texttt{emphasize}, not explicitly} % The \texttt{series} field was emphasized emplicitly, but it should be % done by command. % \begin{macrocode} FUNCTION {format.book.crossref} { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ word.in } %<(blk-com|blk-tita)> { bbl.volume volume tie.or.space.connect % { bbl.volume capitalize % volume tie.or.space.connect bbl.of space.word * } if$ %<*!ay> editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { series emphasize * } if$ } { key * } if$ } { format.crossref.editor * } if$ % " \cite{" * crossref * "}" * } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.incoll.inproc.crossref'} %\changes{1.3(2.1)}{1994 Jul 1}{Emphasize \texttt{booktitle} with % \texttt{emphasize}, not explicitly} % The \texttt{booktitle} field was emphasized emplicitly, but it should be % done by command. % \begin{macrocode} FUNCTION {format.incoll.inproc.crossref} { %<*!ay> editor empty$ editor field.or.null author field.or.null = or { key empty$ { booktitle empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ "" } { word.in booktitle emphasize * } if$ } { word.in key * " " *} if$ } { word.in format.crossref.editor * " " *} if$ % % word.in " \cite{" * crossref * "}" * } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.publisher'} % \changes{3.3}{1995 Aug 7}{Add option \texttt{add-pub} which makes use % of this function} % \changes{3.8}{1996 Mar 12}{Add option \texttt{pub-par} to put publisher % in parentheses} % \changes{3.81}{1996 Sep 16}{Add option \texttt{pub-date} to put publisher % and date in parentheses together} % \changes{3.82}{1996 Dec 16}{Add \texttt{add.blank} for \texttt{pub-par}} % Psychology journals often want \textit{address}: \textit{publisher}. % % \textsl{Nature} wants publisher and date in parentheses, and when both % are there, they are merged into one set. % Call function \texttt{add.blank} before parentheses so suppress preceding % punctuation, which looks strange when publisher in parentheses. % \begin{macrocode} FUNCTION {format.publisher} { publisher empty$ { "empty publisher in " cite$ * warning$ } 'skip$ if$ "" %<*pub-date&!ay> year empty$ { "empty year in " cite$ * warning$ } 'skip$ if$ % %<*!(pub-date&ay)> address empty$ publisher empty$ and % year empty$ and 'skip$ { % % add.blank "(" * %<*add-pub> address empty$ 'skip$ { address * } if$ publisher empty$ 'skip$ % %<*!add-pub> publisher empty$ { address empty$ 'skip$ { address * } if$ } { publisher * address empty$ 'skip$ { ", " * address * } if$ } % %<*add-pub> { address empty$ 'skip$ { ": " * } if$ publisher * } % if$ %<*pub-date&!ay> year empty$ 'skip$ { publisher empty$ address empty$ and 'skip$ { ", " * } if$ year * } if$ % %<*pub-date&ay> year duplicate$ empty$ { "empty year in " cite$ * "; set to ????" * warning$ pop$ "????" } 'skip$ if$ publisher empty$ address empty$ and { * } { ", " swap$ * * } if$ % % ")" * %<*!(pub-date&ay)> } if$ % output } % \end{macrocode} % \end{macro} % \changes{1.5(2.3)b}{1995 Jan 18}{Add option \texttt{yrp-x} to suppress % punctuation following date at beginning} % \changes{3.0}{1995 Mar 8}{Add option \texttt{yrp-col} to add colon after % date at beginning} % \changes{3.0}{1995 Mar 20}{Add option \texttt{jxper} to remove periods % from journal name} % \changes{3.2}{1995 May 19}{Add option \texttt{dt-jnl} to make date part of % the journal specification, follows journal name.} % \changes{3.4}{1995 Sep 28}{Add option \texttt{au-col}} % \changes{3.6}{1995 Nov 23}{Add option \texttt{jttl-rm}} % \changes{3.7}{1996 Feb 5}{Put \texttt{purify\$} before \texttt{emphasize}} % \changes{3.81}{1996 Jun 26}{Add option \texttt{blk-tita} for article only} % \begin{macrocode} FUNCTION {article} { output.bibitem format.authors "author" output.check % author format.key output % author add.colon % format.date "year" output.check % date.block % new.block %<*!jtit-x> format.title "title" output.check % end.quote.title % new.block % new.sentence % crossref missing$ { journal % purify$ % emphasize "journal" output.check % add.blank %<*!dt-beg&!dt-end&dt-jnl&!volp-dt&!vnum-dt> format.date "year" output.check date.block % format.vol.num.pages output % format.date "year" output.check } { format.article.crossref output.nonnull format.pages output } if$ % format.journal.pages % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url } % \end{macrocode} %\changes{2.0a}{1994 Aug 30}{Fix up \texttt{new.sentence} so not added with % \texttt{blk-com}} % \begin{macrocode} FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check % editor format.key output % editor add.colon } { format.authors output.nonnull % author add.colon crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ % format.date "year" output.check % date.block % new.block format.btitle "title" output.check crossref missing$ { format.bvolume output % new.block % new.sentence format.number.series output % format.edition output % new.sentence format.publisher } { % new.block % new.sentence format.book.crossref output.nonnull % format.date "year" output.check } if$ % format.edition output % format.date "year" output.check % format.isbn output % new.block note output %<*!dt-beg&dt-end&!pub-date> % new.block format.date "year" output.check % fin.entry % write.url } FUNCTION {booklet} { output.bibitem format.authors output % author format.key output % author add.colon % format.date "year" output.check % format.date output % date.block % new.block format.title "title" output.check % end.quote.title % new.block % new.sentence howpublished output address output % format.date "year" output.check % format.date output % new.block note output %<*ay&!dt-beg&dt-end> % new.block format.date "year" output.check % %<*!ay&!dt-beg&dt-end> % format.isbn output % new.block format.date output % fin.entry % write.url } % \end{macrocode} % The medical journals, with option \texttt{dt-jnl}, have the date as part of % the journal specification. For chapters in books, they want date and pages % to appear at the end, with a space between them. (For journals, there is to be % no space.) Suppress the chapter specification (for now). % % The \texttt{dt-jnl} option usually behaves as the default, except for some % special entries, like this one. % \begin{macrocode} FUNCTION {inbook} { output.bibitem author empty$ { format.editors "author and editor" output.check % editor format.key output % editor add.colon } { format.authors output.nonnull % author add.colon crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ % format.date "year" output.check % date.block % new.block format.btitle "title" output.check crossref missing$ { % format.publisher format.bvolume output %<*dt-beg|dt-end|!dt-jnl> format.chapter.pages "chapter and pages" output.check % % new.block % new.sentence format.number.series output % format.edition output % new.sentence % format.publisher } { %<*dt-beg|dt-end|!dt-jnl> format.chapter.pages "chapter and pages" output.check % % new.block % new.sentence format.book.crossref output.nonnull % format.date "year" output.check } if$ % format.edition output % format.date "year" output.check % format.isbn output %<*!dt-beg&!dt-end&dt-jnl> % year "year" output.check % date.block add.blank format.pages "pages" output.check % % format.pages "pages" output.check % new.block note output %<*!dt-beg&dt-end&!pub-date> % new.block format.date "year" output.check % fin.entry % write.url } FUNCTION {incollection} { output.bibitem format.authors "author" output.check % author format.key output % author add.colon % format.date "year" output.check % date.block % new.block %<*!jtit-x> format.title "title" output.check % end.quote.title % new.block % new.sentence % crossref missing$ { format.in.ed.booktitle "booktitle" output.check % format.publisher format.bvolume output format.number.series output % format.edition output % format.chapter.pages output % new.sentence % format.publisher % format.edition output % format.date "year" output.check } { format.incoll.inproc.crossref output.nonnull % format.chapter.pages output } if$ % format.isbn output %<*!dt-beg&!dt-end&dt-jnl> % year "year" output.check % date.block add.blank format.pages "pages" output.check % % format.pages "pages" output.check % new.block note output %<*!dt-beg&dt-end&!pub-date> % new.block format.date "year" output.check % fin.entry % write.url } % \end{macrocode} % % \begin{macro}{`inproceedings'} % \changes{3.81}{1996 Sep 13}{Reorganize organization/publisher} % \begin{macrocode} FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check % author format.key output % author add.colon % format.date "year" output.check % date.block % new.block %<*!jtit-x> format.title "title" output.check % end.quote.title % new.block % new.sentence % crossref missing$ { format.in.ed.booktitle "booktitle" output.check %<*!pre-pub> format.bvolume output format.number.series output %<(dt-beg|dt-end|!dt-jnl)&!pp-last> format.pages output % % new.sentence publisher empty$ { organization output address output % format.date "year" output.check } { organization output format.publisher } if$ % format.date "year" output.check %<*pre-pub> format.bvolume output format.number.series output %<(dt-beg|dt-end|!dt-jnl)|!pp-last> format.pages output % } { format.incoll.inproc.crossref output.nonnull % format.pages output } if$ % format.isbn output %<*!dt-beg&!dt-end&dt-jnl> % year "year" output.check % date.block add.blank format.pages "pages" output.check % % format.pages "pages" output.check % new.block note output %<*!dt-beg&dt-end&!pub-date> % new.block format.date "year" output.check % fin.entry % write.url } % \end{macrocode} % \end{macro} % % \begin{macrocode} FUNCTION {conference} { inproceedings } %<*ay> FUNCTION {manual} { output.bibitem format.authors output author format.key output % author add.colon % format.date "year" output.check % date.block % new.block format.btitle "title" output.check % new.sentence % organization address new.block.checkb organization output address output format.edition output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url } % %<*!ay> FUNCTION {manual} { output.bibitem author empty$ { organization empty$ 'skip$ { organization output.nonnull address output } if$ } { format.authors output.nonnull } if$ % author add.colon % format.date "year" output.check % format.date output % date.block % new.block format.btitle "title" output.check % new.sentence author empty$ { organization empty$ { % address new.block.checka address output } 'skip$ if$ } { % organization address new.block.checkb organization output address output } if$ format.edition output % format.date "year" output.check % format.date output % new.block note output %<*ay&!dt-beg&dt-end> % new.block format.date "year" output.check % %<*!ay&!dt-beg&dt-end> % new.block format.date output % fin.entry % write.url } % % \end{macrocode} % \begin{macro}{`masterthesis'} % \changes{2.0}{1994 Feb 7}{Add \texttt{thtit-a} to format thesis titles like % articles instead of books.} % To format a master's thesis. % \begin{macrocode} FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check % author format.key output % author add.colon % format.date "year" output.check % date.block % new.block % format.btitle "title" output.check % format.title "title" output.check % end.quote.title % new.block % new.sentence bbl.mthesis format.thesis.type output.nonnull school "school" output.check address output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url } % \end{macrocode} % \end{macro} % \begin{macrocode} FUNCTION {misc} { output.bibitem format.authors output % author format.key output % author add.colon % format.date "year" output.check % format.date output %<*ay> % date.block % new.block format.title output % end.quote.title % new.block % new.sentence % %<*!ay> % title howpublished new.block.checkb format.title output % end.quote.title % new.sentence % howpublished new.block.checka % howpublished output % format.date "year" output.check % format.date output % new.block note output %<*ay&!dt-beg&dt-end> % new.block format.date "year" output.check % %<*!ay&!dt-beg&dt-end> % new.block format.date output % fin.entry % write.url % empty.misc.check } % \end{macrocode} % \begin{macro}{`phdthesis'} % \changes{2.0}{1994 Feb 7}{Add \texttt{thtit-a} to format thesis titles like % articles instead of books.} % To format a doctoral thesis. % \begin{macrocode} FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check % author format.key output % author add.colon % format.date "year" output.check % date.block % new.block % format.btitle "title" output.check % format.title "title" output.check % end.quote.title % new.block % new.sentence bbl.phdthesis format.thesis.type output.nonnull school "school" output.check address output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url } % \end{macrocode} % \end{macro} % \begin{macrocode} %<*ay> FUNCTION {proceedings} { output.bibitem format.editors output editor format.key output % editor add.colon % format.date "year" output.check % date.block % new.block format.btitle "title" output.check format.bvolume output format.number.series output address output % new.sentence organization output publisher output % format.date "year" output.check % format.isbn output % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url } % %<*!ay> FUNCTION {proceedings} { output.bibitem editor empty$ { organization output } { format.editors output.nonnull } if$ % editor add.colon % format.date "year" output.check % date.block % new.block format.btitle "title" output.check format.bvolume output format.number.series output address empty$ { editor empty$ { publisher new.sentence.checka } { organization publisher new.sentence.checkb organization output } if$ publisher output % format.date "year" output.check } { address output.nonnull % format.date "year" output.check % new.sentence editor empty$ 'skip$ { organization output } if$ publisher output } if$ % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url } % % \end{macrocode} % % \begin{macro}{`techreport'} % \changes{3.5}{1995 Oct 4}{Add option \texttt{trtit-b}} % \begin{macrocode} FUNCTION {techreport} { output.bibitem format.authors "author" output.check % author format.key output % author add.colon % format.date "year" output.check % date.block % new.block % format.btitle "title" output.check % format.title "title" output.check % end.quote.title % new.block % new.sentence format.tr.number output.nonnull institution "institution" output.check address output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url } % \end{macrocode} % \end{macro} % % \begin{macrocode} FUNCTION {unpublished} { output.bibitem format.authors "author" output.check % author format.key output % author add.colon % format.date "year" output.check % format.date output % date.block % new.block format.title "title" output.check % end.quote.title % new.block % new.sentence note "note" output.check %<*ay&!dt-beg&dt-end> % new.block format.date "year" output.check % %<*!ay&!dt-beg&dt-end> % new.block format.date output % fin.entry % write.url } FUNCTION {default.type} { misc } READ % \end{macrocode} % % \begin{macro}{`sortify'} % \changes{3.8}{1996 Feb 29}{Do not allow unsorted alphas} % In \texttt{btxbst.doc}/\texttt{.mbs}, the \texttt{sortify} function is % left out for unsorted alpha-style citations. This leads to an error, % because it is still used. So leave it in here too. \emph{In fact, do away % with unsorted alpha style, since it is as useless as unsorted author--year % listings.} % \begin{macrocode} %<*ay|alph|!seq-no> FUNCTION {sortify} { purify$ "l" change.case$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} INTEGERS { len } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } % \end{macrocode} % % \begin{macro}{`format.lab.names'} % \changes{3.8}{1996 Feb 29}{Add option \texttt{alph} for \texttt{alpha.bst} % style of labels} % The function \texttt{format.lab.names} formats by author--year or the % \texttt{alpha} style as in the original \texttt{alpha.bst}. % Only major difference is that there should be no unsorted (\texttt{seq-no}) % versions of this. Patashnik was clearly very unhappy about accommodating % such an animal, and in fact, his unsorted alpha style crashes \btx. % I also provide the \texttt{vonx} option here to ignore the \textsl{von} % part of the name. % \begin{macrocode} %<*!ay&alph> INTEGERS { et.al.char.used } FUNCTION {initialize.et.al.char.used} { #0 'et.al.char.used := } EXECUTE {initialize.et.al.char.used} FUNCTION {format.lab.names} { 's := s num.names$ 'numnames := numnames #1 > { numnames #4 > { #3 'namesleft := } { numnames 'namesleft := } if$ #1 'nameptr := "" { namesleft #0 > } { nameptr numnames = { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = { "{\etalchar{+}}" * #1 'et.al.char.used := } % { s nameptr "{v{}}{l{}}" format.name$ * } % { s nameptr "{l{}}" format.name$ * } if$ } % { s nameptr "{v{}}{l{}}" format.name$ * } % { s nameptr "{l{}}" format.name$ * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ numnames #4 > { "{\etalchar{+}}" * #1 'et.al.char.used := } 'skip$ if$ } % { s #1 "{v{}}{l{}}" format.name$ % { s #1 "{l{}}" format.name$ duplicate$ text.length$ #2 < { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } 'skip$ if$ } if$ } % %<*ay> FUNCTION {format.lab.names} { 's := s #1 "{vv~}{ll}" format.name$ s num.names$ duplicate$ #2 > % { pop$ " et~al." * } % { pop$ " " * "et~al." roman.cite * } % { pop$ " " * "et~al." emphasize * } { #2 < 'skip$ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = % { " et~al." * } % { " " * "et~al." roman.cite * } % { " " * "et~al." emphasize * } %<*!harnm> %<*!amper> { bbl.and % roman.cite space.word * s #2 "{vv~}{ll}" format.name$ * } % % { " \& " * s #2 "{vv~}{ll}" format.name$ * } % % { " \harvardand\ " * s #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } % % \end{macrocode} % \end{macro} % % Have to be very careful with the options \texttt{ay}, \texttt{alph}, and % \texttt{seq-no} here. The first two are actually mutually exclusive, and % \texttt{ay} should dominate. The \texttt{seq-no} option only applies for % numerical (\texttt{!ay}) but not alphabetic (\texttt{alph}) selections. % This whole block of coding dealing with labels is only included for % author--year or alphabetic or ordered numerical. % That is, \texttt{ay} or \texttt{alph} or \texttt{!seq-no} is true. % \begin{macrocode} %<*ay|alph> FUNCTION {author.key.label} { author empty$ { key empty$ { cite$ #1 #3 substring$ } % 'key % { key #3 text.prefix$ } if$ } { author format.lab.names } if$ } FUNCTION {author.editor.key.label} { author empty$ { editor empty$ { key empty$ { cite$ #1 #3 substring$ } % 'key % { key #3 text.prefix$ } if$ } { editor format.lab.names } if$ } { author format.lab.names } if$ } % %<*!ay&alph> FUNCTION {author.key.organization.label} { author empty$ { key empty$ { organization empty$ { cite$ #1 #3 substring$ } { "The " #4 organization chop.word #3 text.prefix$ } if$ } { key #3 text.prefix$ } if$ } { author format.lab.names } if$ } FUNCTION {editor.key.organization.label} { editor empty$ { key empty$ { organization empty$ { cite$ #1 #3 substring$ } { "The " #4 organization chop.word #3 text.prefix$ } if$ } { key #3 text.prefix$ } if$ } { editor format.lab.names } if$ } % %<*ay> FUNCTION {editor.key.label} { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.lab.names } if$ } % \end{macrocode} % \begin{macro}{`calc.short.authors'} % \changes{3.3}{1995 Sep 4}{Add function to store short list of authors % for later test} % \begin{macrocode} FUNCTION {calc.short.authors} { type$ "book" = type$ "inbook" = or 'author.editor.key.label { type$ "proceedings" = 'editor.key.label 'author.key.label if$ } if$ % emphasize % bolden % scaps 'short.list := } % \end{macrocode} % \end{macro} % \begin{macro}{`calc.label'} % \changes{1.5(2.3)a}{1994 Oct 11}{Add option \texttt{note-yr}} % \changes{3.0}{1995 Mar 3}{Add options \texttt{lab-bf} and \texttt{lab-sc}} % \changes{3.3}{1995 Sep 4}{Use \texttt{calc.short.authors}} % \changes{3.8}{1996 Feb 29}{Add \texttt{calc.label} from \texttt{alpha.bst}} % \begin{macrocode} FUNCTION {calc.label} { calc.short.authors short.list % "(" % ", " * year duplicate$ empty$ { pop$ "????" } % { purify$ #-1 #4 substring$ } % 'skip$ if$ * 'label := } % %<*!ay&alph> FUNCTION {calc.label} { type$ "book" = type$ "inbook" = or 'author.editor.key.label { type$ "proceedings" = 'editor.key.organization.label { type$ "manual" = 'author.key.organization.label 'author.key.label if$ } if$ } if$ duplicate$ year field.or.null purify$ #-1 #2 substring$ * 'label := year field.or.null purify$ #-1 #4 substring$ * sortify 'sort.label := } % %<*ay> % \end{macrocode} % \end{macro} % \begin{macro}{`calc.short.label'} % \changes{3.3}{1995 Sep 4}{Use \texttt{calc.short.authors}} % \begin{macrocode} %<*har|cay|nmd|ast|cn> FUNCTION {calc.short.label} { calc.short.authors short.list 'label := } % % % \end{macrocode} % \end{macro} % \begin{macro}{`sort.format.names'} % \changes{1.7(2.5)}{1995 Feb 9}{Make ordering of `et al' works by year % and authors and not just year} % \changes{3.0}{1995 Feb 27}{Option \texttt{nm-revf} to act just as default} % \changes{3.2}{1995 Jun 16}{Add option \texttt{vonx} so sorting ignores the % \emph{von} part of the name} % \changes{3.5}{1995 Oct 24}{For limited authors, sort only on those present} % \changes{3.5}{1995 Oct 24}{`Et al' considered author before all others} % \begin{macrocode} FUNCTION {sort.format.names} { 's := #1 'nameptr := "" s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr %<*!nm-init&!nm-rev&!nm-rev1&!nm-rv&!nm-rvx&!nm-rvv> % "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" % "{ll{ }}{ ff{ }}{ jj{ }}" % %<*nm-init|nm-rev|nm-rev1|nm-rv|nm-rvx|nm-rvv> % "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" % "{ll{ }}{ f{ }}{ jj{ }}" % format.name$ 't := nameptr #1 > { %<*nmlm> % nameptr #2 = % nameptr #3 = % nameptr #4 = % nameptr #5 = % nameptr #6 = % numnames #1 > and % numnames #2 > and % numnames #3 > and % numnames #4 > and % numnames #5 > and % numnames #6 > and % numnames #7 > and % numnames #8 > and % numnames #9 > and { "others" 't := #1 'namesleft := } 'skip$ if$ % " " * namesleft #1 = t "others" = and { "aaaaa" * } %<*seq-lab|seq-key> { numnames #2 > nameptr #2 = and { "zz" * year field.or.null * " " * } 'skip$ if$ t sortify * } % % { t sortify * } if$ } { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} FUNCTION {sort.format.title} { 't := "A " #2 "An " #3 "The " #4 t chop.word chop.word chop.word sortify #1 global.max$ substring$ } FUNCTION {author.sort} { author empty$ { key empty$ { "to sort, need author or key in " cite$ * warning$ "" } { key sortify } if$ } { author sort.format.names } if$ } FUNCTION {author.editor.sort} { author empty$ { editor empty$ { key empty$ { "to sort, need author, editor, or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } { author sort.format.names } if$ } %<*ay> FUNCTION {editor.sort} { editor empty$ { key empty$ { "to sort, need editor or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } %<*seq-no> INTEGERS { seq.num } FUNCTION {init.seq} { #0 'seq.num :=} EXECUTE {init.seq} FUNCTION {int.to.fix} { "000000000" swap$ int.to.str$ * #-1 #10 substring$ } % % \end{macrocode} % \begin{macro}{`presort'} % \changes{3.81}{1996 Sep 16}{Add option \texttt{seq-no} to author--year} % For unsorted author--year, make up the final sorting order in % \texttt{sort.label} with the original sequence number, for unsorting later. % \begin{macrocode} FUNCTION {presort} { calc.label label sortify " " * %<*!seq-no> type$ "book" = type$ "inbook" = or 'author.editor.sort { type$ "proceedings" = 'editor.sort 'author.sort if$ } if$ #1 entry.max$ substring$ % %<*seq-no> seq.num #1 + 'seq.num := seq.num int.to.fix % 'sort.label := sort.label * " " * % " " * year field.or.null * %<*!seq-key&!seq-yr> title field.or.null sort.format.title % % cite$ * #1 entry.max$ substring$ 'sort.key$ := } % \end{macrocode} % \end{macro} % \begin{macrocode} % %<*!ay> FUNCTION {author.organization.sort} { author empty$ { organization empty$ { key empty$ { "to sort, need author, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { author sort.format.names } if$ } FUNCTION {editor.organization.sort} { editor empty$ { organization empty$ { key empty$ { "to sort, need editor, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { editor sort.format.names } if$ } FUNCTION {presort} %<*alph> { calc.label sort.label " " * type$ "book" = % %{ type$ "book" = type$ "inbook" = or 'author.editor.sort { type$ "proceedings" = 'editor.organization.sort { type$ "manual" = 'author.organization.sort 'author.sort if$ } if$ } if$ % * " " * year field.or.null sortify % * " " * % swap$ * title field.or.null sort.format.title * #1 entry.max$ substring$ 'sort.key$ := } % ITERATE {presort} SORT % % \end{macrocode} % \begin{macro}{`forward.pass'} % \changes{3.4}{1995 Sep 5}{Include number of references in argument to % \texttt{thebibliography} environment} % With version~6.0 of \texttt{natbib}, the author-year styles can also be % used for numerical citations; then the \texttt{thebibliography} environment % must have an argument indicating the length of the longest label. % Simply count the references and add this number as the argument. % \begin{macrocode} %<*ay> STRINGS { last.label next.extra } INTEGERS { last.extra.num number.label } FUNCTION {initialize.extra.label.stuff} { #0 int.to.chr$ 'last.label := "" 'next.extra := #0 'last.extra.num := #0 'number.label := } FUNCTION {forward.pass} { last.label label = { last.extra.num #1 + 'last.extra.num := last.extra.num int.to.chr$ 'extra.label := } { "a" chr.to.int$ 'last.extra.num := "" 'extra.label := label 'last.label := } if$ number.label #1 + 'number.label := } % %<*!ay&alph> STRINGS { longest.label last.sort.label next.extra } INTEGERS { longest.label.width last.extra.num } FUNCTION {initialize.longest.label} { "" 'longest.label := #0 int.to.chr$ 'last.sort.label := "" 'next.extra := #0 'longest.label.width := #0 'last.extra.num := } FUNCTION {forward.pass} { last.sort.label sort.label = { last.extra.num #1 + 'last.extra.num := last.extra.num int.to.chr$ 'extra.label := } { "a" chr.to.int$ 'last.extra.num := "" 'extra.label := sort.label 'last.sort.label := } if$ } % % \end{macrocode} % \end{macro} % \begin{macro}{`reverse.pass'} % \changes{3.3}{1995 Aug 7}{Put extra label in braces} % The extra label is added in braces so that natbib can treat it as one unit. % This allows extra labels to be more than one letter long. For non-NFSS % emphasizing, this is no problem, since labels go in |{\em a}|, but for % non-emphasizing and for NFSS, it caused troubles without the braces. % The trouble arises with multiple citations in one |\cite| in which % authors and years are the same, and only the extra label is given for % the next one. Note: |\emph{a}| is more than one letter long in this sense, % so it is not just a problem for more than 26 papers with same authors and % year. % % \changes{3.81}{1996 Jun 17}{Add \texttt{\char`\\natexlab}} % The command |\natexlab| now encloses the extra label for \texttt{natbib} % styles. This command normally just prints its argument, but for numerical % citation mode, it swallows its argument. This allows the extra labels to % be suppressed for numerical citations where they are superfluous. % The enclosing braces mentioned above must be included here to make the % entire extra label text a single token for \texttt{natbib}. % \begin{macrocode} %<*ay> FUNCTION {reverse.pass} { next.extra "b" = { "a" 'extra.label := } 'skip$ if$ extra.label 'next.extra := extra.label % emphasize duplicate$ empty$ 'skip$ { "{\natexlab{" swap$ * "}}" * } if$ 'extra.label := % label extra.label * 'label := } % %<*!ay&alph> FUNCTION {reverse.pass} { next.extra "b" = { "a" 'extra.label := } 'skip$ if$ label extra.label * 'label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ extra.label 'next.extra := } % % \end{macrocode} % \end{macro} % % \begin{macrocode} %EXECUTE {initialize.extra.label.stuff} %EXECUTE {initialize.longest.label} %<*ay|alph> ITERATE {forward.pass} REVERSE {reverse.pass} % %<*ay> FUNCTION {bib.sort.order} { sort.label " " * year field.or.null sortify % swap$ * " " * %<*!seq-key&!seq-yr> title field.or.null sort.format.title % % cite$ * #1 entry.max$ substring$ 'sort.key$ := % calc.short.label } ITERATE {bib.sort.order} SORT % %<*!ay&!alph> STRINGS { longest.label } INTEGERS { number.label longest.label.width } FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} %<*!cite> { number.label int.to.str$ 'label := number.label #1 + 'number.label := % %{ cite$ 'label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } EXECUTE {initialize.longest.label} ITERATE {longest.label.pass} % % \end{macrocode} % % \begin{macro}{`begin.bib'} % \changes{2.0}{1994 Jan 31}{For \texttt{german}, add the definition of % {\tt\protect\bslash qq} to replace double-quote character.} % \changes{2.0}{1994 Jan 31}{For \texttt{babel}, read in file % \texttt{babelbst.tex} in \texttt{thebibliography} to define the word % commands.} % \changes{3.4}{1995 Sep 5}{Add number of references as argument} % The function \texttt{begin.bib} writes the initial text to the \texttt{.bbl} % file. The most important matter here is that the \texttt{thebibliography} % environment is invoked. % \begin{macrocode} FUNCTION {begin.bib} %<*!ay&alph> { et.al.char.used { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ } 'skip$ if$ preamble$ empty$ % %{ preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ % "\begin{thebibliography}{" number.label int.to.str$ * "}" * % "\begin{thebibliography}{" longest.label * "}" * write$ newline$ % "\newcommand{\enquote}[1]{`#1'}" % "\newcommand{\enquote}[1]{``#1''}" % write$ newline$ % "\let\qq=\" quote$ * write$ newline$ %<*ay> "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi" write$ newline$ % %<*babel> "\input{babelbst.tex}" write$ newline$ "\newcommand{\Capitalize}[1]{\uppercase{#1}}" write$ newline$ "\newcommand{\capitalize}[1]{\expandafter\Capitalize#1}" write$ newline$ % } EXECUTE {begin.bib} % \end{macrocode} % \end{macro} % \begin{macrocode} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib} % % % \end{macrocode} % % \section{The File \texttt{babelbst.tex} for English} % The following contains the definitions for the \texttt{babel} language % selection as they apply to English. This file may be extracted with % \dtx{} and the option \texttt{bblbst}. % \begin{macrocode} %<*bblbst> % This is babelbst.tex for English. % It should serve as a model for other languages. % Alternatively, store it under a different name (e.g. englbst.tex) % and then \input it with a command in babelbst.tex. \def\bbland{and} \def\bbleditors{editors} \def\bbleds{eds.} \def\bbleditor{editor} \def\bbled{ed.} \def\bbledby{edited by} \def\bbledition{edition} \def\bbledn{edn.} \def\bblvolume{volume} \def\bblvol{vol.} \def\bblof{of} \def\bblnumber{number} \def\bblno{no.} \def\bblin{in} \def\bblpages{pages} \def\bblpp{pp.} \def\bblpage{page} \def\bblp{p.} \def\bblchapter{chapter} \def\bblchap{chap.} \def\bbltechreport{Technical Report} \def\bbltechrep{Tech. Rep.} \def\bblmthesis{Master's thesis} \def\bblphdthesis{Ph.D. thesis} \def\bblfirst{First} \def\bblfirsto{1st} \def\bblsecond{Second} \def\bblsecondo{2nd} \def\bblthird{Third} \def\bblthirdo{3rd} \def\bblfourth{Fourth} \def\bblfourtho{4th} \def\bblfifth{Fifth} \def\bblfiftho{5th} \def\bblst{st} \def\bblnd{nd} \def\bblrd{rd} \def\bblth{th} \def\bbljan{January} \def\bblfeb{February} \def\bblmar{March} \def\bblapr{April} \def\bblmay{May} \def\bbljun{June} \def\bbljul{July} \def\bblaug{August} \def\bblsep{September} \def\bbloct{October} \def\bblnov{November} \def\bbldec{December} % % \end{macrocode} % % \Finale