% \iffalse meta-comment -*- mode: doctex -*- % % Master bibliography style for francais.bst and francaissc.bst % % Copyright (C) 2012-2024 Vincent Goulet % % This file may be distributed and/or modified under the conditions % of the LaTeX Project Public License, either version 1.3c of this % license or (at your option) any later version. The latest version % of this license is in: % % https://www.latex-project.org/lppl.txt % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Vincent Goulet % . % % This work derives from merlin.mbs, part of the custom-bib % collection, a contribution to the LaTeX2e system. % Copyright 1994-2011 Patrick W Daly % Max-Planck-Institut f\"ur Sonnensystemforschung % Max-Planck-Str. 2 % D-37191 Katlenburg-Lindau % Germany % E-mail: daly@mps.mpg.de % %<*!tail> % (The following notice appears in bst files generated from this file) % ------------------------------------------------------------------- % Name and version information of the main mbs file: %\fi % \ProvidesFile{francais-bst.mbs}[2024/02/13 v2.0a (VG, PWD, AO, DPC)] %\iffalse % %<*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[article,oneside,11pt,x11names,french]{memoir} \usepackage{babel} \usepackage{metalogo} \usepackage{enumitem} %% Le chargement de doc.sty cause des conflits avec memoir. Il faut: %% %% - annuler la définition de l'environnement 'glossary' de memoir; %% - remettre en place les définitions standards des commandes pour %% le glossaire sur lesquelles se base doc.sty (nécessaire aussi %% pour l'index, mais il n'est pas utilisé). \let\theglossary\relax % avoid conflict with doc.sty \let\endtheglossary\relax % avoid conflict with doc.sty \makeatletter \def\makeglossary{% \newwrite\@glossaryfile \immediate\openout\@glossaryfile=\jobname.glo \def\glossary{\@bsphack\begingroup \@sanitize \@wrglossary}\typeout {Writing glossary file \jobname.glo }% \let\makeglossary\@empty } \@onlypreamble\makeglossary \def\@wrglossary#1{% \protected@write\@glossaryfile{}% {\string\glossaryentry{#1}{\thepage}}% \endgroup \@esphack} \def\glossary{\@bsphack\begingroup\@sanitize\@index} \@twosidefalse\@mparswitchfalse % turn off twoside option \makeatother \usepackage{doc} \def\changes#1#2#3{\glossary{#1>#3}} % simplification \DisableCrossrefs \CodelineNumbered \RecordChanges \OnlyDescription \DontCheckModules %% Polices de caractères \iftutex \usepackage[babel=true]{microtype} \usepackage{fontspec} \usepackage{unicode-math} \setmainfont{STIXTwoText} [ Extension = .otf, UprightFont = *-Regular, BoldFont = *-SemiBold, ItalicFont = *-Italic, BoldItalicFont = *-SemiBoldItalic, Numbers = {Proportional,OldStyle}, Scale = 1, Ligatures = TeX ] \setsecheadstyle{\normalfont\Large\sffamily\bfseries\raggedright} \setsubsecheadstyle{\normalfont\large\sffamily\bfseries\raggedright} \setsubsubsecheadstyle{\normalfont\sffamily\bfseries\raggedright} \else \usepackage[babel=true]{microtype} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[stix2]{newtxmath} \fi \usepackage[book,medium,proportional,oldstyle,scale=0.92]{FiraSans} \usepackage[medium,lining,scale=0.90]{FiraMono} %% Couleurs \usepackage{xcolor} \definecolor{link}{rgb}{0,0.4,0.6} % liens internes \definecolor{url}{rgb}{0.6,0,0} % liens externes \definecolor{citation}{rgb}{0,0.5,0} % citations %% Hyperliens \AtEndPreamble{% \usepackage{bookmark} % charge hyperref \hypersetup{% colorlinks = true, urlcolor = {url}, linkcolor = {link}, citecolor = {citation}} \bookmarksetup{% open = true, depth = 3, numbered = true} } %% Désactiver le niveau des chapitres de memoir \let\chapter\relax \counterwithout{section}{chapter} %% Aligner à gauche l'environnement enumerate \setlist[enumerate]{leftmargin=*,align=left} %% Configurer le glossaire \addto\extrasfrench{% \def\glossaryname{Historique des versions}} \GlossaryPrologue{\section*{\glossaryname}% \addcontentsline{toc}{section}{\glossaryname}} \setcounter{GlossaryColumns}{2} \setlength{\GlossaryMin}{5cm} %% Commandes sémantiques additionnelles \let\class\textsf \let\pkg\textbf \makeatletter \renewcommand\code{\bgroup\@makeother\_\@makeother\~\@makeother\$\code@} \def\code@#1{{\normalfont\ttfamily\hyphenchar\font=-1 #1}\egroup} \makeatother \newcommand*\frbstname{francais} \newcommand*\frscbstname{francaissc} \newcommand*\frbst{\code{\frbstname}} \newcommand*\frscbst{\code{\frscbstname}} \newcommand*\btx{\textsc{Bib}\TeX} \newcommand*\dtx{\textsf{docstrip}} %% Redéfinir \year pour utiliser l'information de \filedate plutôt %% que la date de compilation \def\parsedate#1/#2/#3\relax{\def\year{#1}} %% Convertir la date en format ISO \def\isodate#1/#2/#3\relax{#1-#2-#3} \MakeShortVerb{\|} \begin{document} \DocInput{francais-bst.mbs} \end{document} % % end of meta-comment \fi % \GetFileInfo{francais-bst.mbs} % \expandafter\parsedate\filedate\relax % % \changes{1.0}{2012-10-18}{Version initiale.} % \changes{1.0a}{2013-05-03}{Corrections à la documentation dans le % fichier \texttt{README}.} % \changes{1.1}{2013-05-12}{Modifications à \texttt{francaissc.bst} % pour que la conjonction «et» et le marqueur «et collab.» soient en % romain plutôt qu'en petites capitales. Merci à François Legendre % \url{f.legendre@gmail.com} pour le tuyau.} % \changes{1.1}{2013-05-12}{Introduction d'un numéro de version.} % \changes{2.0}{2023-10-28}{Documentation améliorée en format PDF.} % \changes{2.0}{2023-10-28}{Le titre d'un rapport technique est % maintenant composé comme celui d'un livre, plutôt que comme celui % d'un article.} % \changes{2.0}{2023-10-28}{Les URL ne sont plus précédées de % l'étiquette «URL».} % \changes{2.0}{2023-10-28}{La présentation des identificateurs % d'objets numériques (DOI) a été complètement révisée.} % \changes{2.0}{2023-10-28}{Le numéro ISSN n'est plus affiché dans les % notices bibliographiques (il demeure permis dans les bases de % données).} % \changes{2.0}{2023-10-28}{La disposition de certains éléments dans % la notice bibliographique a été révisée.} % \changes{2.0a}{2024-02-13}{Correction de coquilles dans la % documentation.} % % \title{Styles bibliographiques {\frbst} et {\frscbst}} % \author{Vincent Goulet \\ École d'actuariat, Université Laval} % \date{Version {\fileversion} du {\expandafter\isodate\filedate\relax}} % % \maketitle % % \section{Introduction} % % Les styles bibliographiques {\frbst} et {\frscbst} permettent de % composer des bibliographies en français conformes aux règles de % présentation de la méthode auteur-date proposées dans l'ouvrage de % référence de Marie Malo, \emph{Guide de la communication écrite au % cégep, à l'université et en entreprise} (Québec Amérique, 1996). % % Les styles ont été développés à l'origine à l'aide du programme % \code{makebst} de Patrick W.~Daly. Le fichier maitre de styles % bibliographiques \code{\filename} dérive étroitement du fichier % \code{merlin.mbs} du paquetage % % \href{https://ctan.org/pkg/custom-bib}{\pkg{custom-bib}}. % % \section{Installation} % \label{sec:installation} % % Les styles bibliographiques sont distribués dans le paquetage % % \href{https://ctan.org/pkg/francais-bst}{\pkg{francais-bst}} % % via le réseau de sites \emph{Comprehensive {\TeX} Archive Network} % (CTAN). Le paquetage fait partie des distributions {\TeX} standards % telles que {TeX}~Live, Mac{\TeX} et MiK{\TeX}. % % Je recommande fortement d'installer ou de mettre à jour le paquetage % à l'aide du gestionnaire de paquetages de votre distribution {\TeX}. % Par exemple, avec {\TeX}~Live, vous pouvez effectuer ces opérations % dans l'assistant graphique, ou encore avec l'une ou l'autre des % commandes ci-dessous: % \begin{quote} % \code{tlmgr install francais-bst} % \end{quote} % ou % \begin{quote} % \code{tlmgr update francais-bst} % \end{quote} % % S'il vous est impossible d'installer des paquetages ou de mettre à % jour la distribution {\TeX} --- notamment si vous utilisez une % plateforme de rédaction en ligne --- vous pouvez procéder à une % installation simplifiée des styles, mais dont la portée sera % limitée à votre projet. Pour ce faire, téléchargez l'archive % % \begin{quote} % \code{francais-bst-project-install.zip} % \end{quote} % depuis le % % \href{https://gitlab.com/vigou3/francais-bst/-/releases}{% % dépôt du projet \code{francais-bst}} % % et décompressez celle-ci dans le répertoire de votre projet. Vous % disposerez alors de tous les fichiers essentiels du paquetage à % l'intérieur de ce projet. % % % Si votre expertise {\TeX} vous pousse à préférer une installation % manuelle avec accès à l'intégralité du code source des styles % bibliographiques, consultez les instructions qui se trouvent dans le % fichier \code{README.md} du paquetage. % % % \section{Utilisation des styles bibliographiques} % \label{sec:utilisation} % % Les styles {\frbst} et {\frscbst} sont conçus pour composer des % bibliographies selon la méthode auteur-date dans des documents en % français. Ils reposent sur les paquetages % % \href{https://ctan.org/pkg/babel}{\pkg{babel}} % % et % % \href{https://ctan.org/pkg/natbib}{\pkg{natbib}}. % % Ce dernier doit être chargé avant \pkg{babel}. Le préambule du % document devrait donc contenir les commandes: % \begin{quote} % \cmdprint{\usepackage}\code{\{natbib\}} \\ % \cmdprint{\usepackage}\code{[french]\{babel\}} % \end{quote} % % Je recommande fortement d'enregistrer le code source d'un ouvrage en % français dans le codage de caractères % % \href{https://fr.wikipedia.org/wiki/UTF-8}{UTF-8} % % et de le compiler avec un moteur {\TeX} moderne qui prend d'emblée % en charge ce type de codage, comme {\XeLaTeX}. Vous pourrez ainsi % entrer les lettres accentuées directement au clavier («\code{é}») % sans devoir passer par les commandes {\TeX} («\code{{\bs}'e}»). % % Si vous utilisez toujours {\LaTeX} ou {pdf\LaTeX}, vous devrez % charger les polices T1 pour que la césure de mots fonctionne % adéquatement avec les mots comportant des lettres accentuées: % \begin{quote} % \cmdprint{\usepackage}\code{[T1]\{fontenc\}} % \end{quote} % Les guillemets français «~» devraient normalement apparaitre % correctement dans la bibliographie (notamment autour des titres % d'articles). Si ce n'est pas le cas, essayez aussi de charger les % paquetages % \href{https://ctan.org/pkg/ae}{\pkg{ae}} % % et % \href{https://ctan.org/pkg/aeguill}{\pkg{aeguill}}: % \begin{quote} % \cmdprint{\usepackage}\code{\{ae,aeguill\}} % \end{quote} % % Enfin, pour utiliser les styles de bibliographie, insérez dans le % document l'une ou l'autre des commandes % \begin{quote} % \cmdprint{\bibliographystyle}\code{\{francais\}} \\ % \cmdprint{\bibliographystyle}\code{\{francaissc\}} % \end{quote} % % \section{Caractéristiques des styles bibliographiques} % \label{sec:caracteristiques} % % Les styles {\frbst} et {\frscbst} sont conçus pour produire des % bibliographies auteur-date conformes aux règles de typographie % française. % % Avec le style {\frbst}, les noms d'auteurs apparaissent en police % standard tant dans la bibliographie que dans dans les citations. % C'est la pratique usuelle au Québec. Avec le style {\frscbst}, les % noms d'auteurs apparaissent plutôt en petites capitales dans la % bibliographie et dans les citations. Cela semble être la pratique % usuelle en France et ailleurs dans la Francophonie. % % Les styles prennent en charge tous les types de documents standards % de {\BibTeX} (\code{article}, \code{book}, \code{proceedings}, % etc.), ainsi que tous les champs standards (\code{author}, % \code{title}, \code{journal}, etc.). Ils ajoutent toutefois les % champs suivants: % \begin{description}[font=\mdseries\ttfamily,style=nextline,leftmargin=3em] % \item[doi] L'identificateur d'objet numérique (DOI) d'une ressource. % Entrez la valeur sous la forme % \meta{préfixe}\code{/}\meta{suffixe} (par exemple: % \code{10.1000/182}). Les styles créent automatiquement un % hyperlien vers la ressource. % \item[isbn] Le numéro international normalisé du livre (ISBN) d'un % ouvrage. Lorsque disponible, le numéro est affiché dans la liste % des références. % \item[issn] Le numéro international normalisé des publications en % série (ISSN) d'une publication en série, tel qu'un magazine. Bien % que permis dans la base de données bibliographiques, ce numéro % n'est pas affiché dans la liste des références. % \item[language] La langue de la référence, exprimée selon la % nomenclature de \pkg{babel}. Inclure cette information dans une % entrée assure que la coupure des mots du titre sera effectuée % selon les règles de la langue de celui-ci. % \item[url] L'adresse URL de la référence. Si une adresse URL et un % identificateur DOI sont tous deux présents dans la base de % données, ce dernier aura priorité. % \end{description} % % \section{Personnalisation des mots-clés} % \label{sec:personnalisation} % % Les bibliographies comportent nombre de termes et de locutions --- % \emph{editor}, \emph{edited by}, \emph{et~al.}, etc. --- qui doivent % être adaptés pour le français. Les styles {\frbst} et {\frscbst} ont % recours aux définitions qui se trouvent dans le fichier de % localisation \code{francaisbst.tex}. % % Vous pouvez personnaliser le fichier \code{francaisbst.tex} pour % l'adapter à vos besoins. Pour ce faire, créez une copie du fichier % livré dans le paquetage \pkg{francais-bst} et modifiez cette copie. % Placez ensuite votre version de \code{francaisbst.tex} dans le % répertoire de votre projet ou, encore mieux, dans l'arborescence % {\TeX} de votre répertoire personnel, normalement sous % \begin{quote} % \code{\$TEXMFHOME/tex/latex/francais-bst/francaisbst.tex} % \end{quote} % % \section{Production des styles bibliographiques} % \label{sec:production} % % Les fichiers de styles bibliographiques \code{\frbstname.bst} et % \code{\frscbstname.bst}, et le fichier de localisation % \code{francaisbst.tex} sont générés à partir du fichier maitre de % styles bibliographiques \code{\filename} en compilant leurs scripts % de génération respectifs avec {\LaTeX}: % \begin{quote} % \code{latex francais.dbj} \\ % \code{latex francaissc.dbj} \\ % \code{latex francaisbst.dbj} % \end{quote} % % \section{Changements par rapport à \texorpdfstring{\code{merlin.mbs}}{merlin.mbs}} % \label{sec:changements} % % Cette section documente les changements apportés au fichier % \code{merlin.mbs} du paquetage \pkg{custom-bib} pour produire le % fichier maitre de styles bibliographiques \code{\filename}. % % \begin{enumerate} % \item La fonction \code{format.url} a été retravaillée pour produire % une URL simplifiée pour les identificateurs d'objet numérique % (DOI). La définition de \code{merlin.mbs} produit une URL de la % forme % \begin{quote} % URL \texttt{http://dx.doi.org/\meta{doi}} % \end{quote} % La nouvelle définition produit plutôt % \begin{quote} % doi: \meta{doi} % \end{quote} % Lorsque le paquetage \pkg{hyperref} est chargé, \meta{doi} est un % hyperlien vers ce qui est aujourd'hui l'URL recommandée pour les % DOI: \code{https://doi.org/\meta{doi}}. Le texte et l'hyperlien % sont produits par la commande \cmd{\urldoi} qui est insérée dans % le fichier \texttt{.bbl}. Vous pouvez redéfinir cette commande % dans votre document pour l'adapter à vos besoins, si désiré. % \item La commande \cmd{\urlprefix} est vide, de sorte que «URL» % n'apparait pas devant les URL dans la bibliographie. De nouveau, % vous pouvez redéfinir la commande dans votre document si désiré. % \item Les guillemets français «~» sont produits par la commande % \cmd{\frquote} de \pkg{babel-french} (version $\geq$ 3.1) plutôt % qu'avec les commandes \cmd{\guillemotleft} et % \cmd{\guillemotright}. % \item Les définitions françaises de mots-clés se trouvent dans % \code{francaisbst.tex}, plutôt que dans \code{babelbst.tex}. % \item L'option \code{bblbst} permet d'extraire le fichier % \code{francaisbst.tex}. % \item L'information sur le menu de \code{makebst} est reléguée à la % documentation complète. Désactiver la commande % \cmd{\OnlyDescription} dans \code{\filename}, puis compiler le % fichier avec {pdf\LaTeX} ou {\XeLaTeX} pour obtenir la % documentation complète. % \end{enumerate} % % \StopEventually{\PrintChanges} % % \begin{quote} % \itshape À partir de ce point, la documentation est celle, en % anglais, du fichier \code{merlin.mbs}, dont l'auteur est Patrick % W.~Daly. % \end{quote} % % \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}\code{\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{francaisbst.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. 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> \expandafter\ifx\csname beginoptiongroup\endcsname\relax \mes{^^J******************^^J% !!!!!! VERSION CLASH !!!!!!!!!^^J% This mbs file requires makebst version 4.0 or more^^J% You must update makebst to run it with this mbs file^^J% No docstrip batch file can be produced on this run^^J% ******************} \let\temp\endinput\else\let\temp\relax\fi\temp \newif\ifnumerical \newif\ifmytemp \mes{<<< For more information about the meanings of^^J% <<< the various options, see the section on ^^J% <<< Menu Information in the .mbs file documentation.} \umes{EXTERNAL 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% **************} \umes{No included files.}% \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 \umes{Name of language file: \string\cfile=\cfile.}% % \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)} \mytempfalse \if!\yn!\else\if\yn n\else\if\yn N\else\mytemptrue\fi\fi\fi \ifmytemp \MBaskfile{^^JFile to include}(physjour,geojour,photjour.mbs)o\jfile \edef\jfile{\froot,.\fext} \umes{Name of included files: \string\jfile=\jfile.}% \else \umes{No included files.}% \fi \fi%MBswitch \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 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 unbalanced 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 there is a need for % explicit English words or \LaTeX{} commands whose definitions are % to be found in the file \texttt{francaisbst.tex}. % % \begin{macrocode} \beginoptiongroup{INTERNAL LANGUAGE SUPPORT (if no external language file)}% {\if!\cfile!\relax*\fi}% \optdef{*}{}{English}{words used explicitly} \optdef{b}{babel}{Babel} {(words replaced by commands defined in francaisbst.tex)} \getans \endoptiongroup \if!\cfile!\relax\else \wr{\spsp\spsp exlang,\pc: External language file} \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 % \code{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. % % The \texttt{alph} option produces labels as in \texttt{alpha.bst}; options % \texttt{alf-1} and \texttt{alf-f} modify these. Standard is: first three % letters of the single author (Dal90 for Daly, 1990) and first letters of % first three authors (DK90 for Daly and Kopka, 1990). Alternatives are first % three letters of the first author, no matter how many authors there are, and % full name of first author. % \begin{macrocode} \beginoptiongroup{STYLE OF CITATIONS:}{} \optdef{*}{}{Numerical}{as in standard LaTeX} \optdef{a}{ay}{Author-year}{with some non-standard interface} \optdef{b}{alph}{Alpha style, Jon90 or JWB90}{for single or multiple authors} \optdef{o}{alph,alf-1}{Alpha style, Jon90}{even for multiple authors} \optdef{f}{alph,alf-f}{Alpha style, Jones90}{(full name of first author)} \optdef{c}{cite}{Cite key}{(special for listing contents of bib file)} \getans \endoptiongroup \if\ans a\numericalfalse\else\numericaltrue\fi \if\ans b\mytempfalse \else\mytemptrue \fi \beginoptiongroup{HTML OUTPUT (if non author-year citations)} {\ifnumerical*\fi} \optdef{*}{}{Normal LaTeX}{output} \optdef{h}{html}{Hypertext}{output, in HTML code, in paragraphs} \optdef{n}{html,htlist}{Hypertext list}{with sequence numbers} \optdef{k}{html,htdes}{Hypertext with keys}{for viewing databases} \getans \endoptiongroup \beginoptiongroup{AUTHOR--YEAR SUPPORT SYSTEM (if author-year citations)} {\ifnumerical\else*\fi} \optdef{*}{nat}{Natbib}{for use with natbib v5.3 or later} \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. These features may be added too. % The URL field used to be exclusively part of Harvard, but now exists % independently of it too. % % \begin{macrocode} \beginoptiongroup{HARVARD EXTENSIONS INCLUDED (if Harvard support selected)} {\if\ans h*\fi}% \optdef{*}{harnm}{With Harvard extensions}{for LaTeX2e version of harvard.sty} \optdef{n}{}{Older Harvard}{style, for LaTeX 2.09} \getans \endoptiongroup \endoptiongroup % \end{macrocode} % % \subsection*{Language switching} % A \texttt{language} field can be present to specify the original language of % the reference; with \verb!\setlanguage!, the hyphenation patterns are set for % setting the title in that language. % \begin{macrocode} \beginoptiongroup{LANGUAGE FIELD}{} \optdef{*}{}{No language field}{} \optdef{l}{lang}{Add language field}{to switch hyphenation patterns temporarily} \getans \endoptiongroup % \end{macrocode} % % \subsection*{Annotations} % Annotations to a reference are additional information not normally printed % out in the list of references. They are used for listing databases. % The coding here was offered by Soren Dayton. % \begin{macrocode} \beginoptiongroup{ANNOTATIONS:}{} \optdef{*}{}{No annotations}{will be recognized} \optdef{a}{annote}{Annotations}{in annote field or in .tex file of citekey name} \getans \endoptiongroup % \end{macrocode} % % \subsection*{Presentations} % Presentations are talks at meetings, oral or poster, that are not otherwise % published. The author making the presentation is indicated with the \texttt{key} % entry, which is the speaker's number within the author list. The font used % to highlight the speaker is either bold or italics, depending on the secondary % option, otherwise not highlighted. % \begin{macrocode} \beginoptiongroup{PRESENTATIONS:}{} \optdef{*}{}{Do not add presentation type}{for conference talks} \optdef{p}{pres}{Add presentation, speaker not highlighted}{} \optdef{b}{pres,pres-bf}{Presentation, speaker bold face}{} \optdef{i}{pres,pres-it}{Presentaion, speaker italic}{} \optdef{c}{pres,pres-sc}{Presentaion, speaker in small caps}{} \getans \endoptiongroup % \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} \let\ans\relax \beginoptiongroup{ORDERING OF REFERENCES (if non-author/year and non-alph)} {\ifnumerical\ifmytemp*\fi\fi}% \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} \optdef{r}{seq-yrr}{Reverse year ordered}{and then by authors} \getans \endoptiongroup % \beginoptiongroup{ORDERING OF REFERENCES (if author-year citations)} {\ifnumerical\else*\fi}% \optdef{*}{}{Alphabetical}{by all authors} \optdef{l}{seq-lab}{By label}% {(Jones before Jones and James before Jones et al)} \optdef{m}{seq-labc}{By label and cite order}% {(like above but all Jones et al ordered as cited)} \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{r}{seq-yrr}{Reverse year ordered}{and then by authors (most recent first)} \optdef{c}{seq-no}{Citation order}{(unsorted, only meaningful for numericals)} \getans \endoptiongroup % \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} \beginoptiongroup{ORDER ON VON PART (if not citation order)} {\if\ans c\else*\fi}% \optdef{*}{}{Sort on von part}{(de la Maire before Defoe)} \optdef{x}{vonx}{Sort without von part}{(de la Maire after Mahone)} \getans \endoptiongroup % \end{macrocode} % % Sorting normally treats authors with the same surname but different initials % or first name separately; but a strict ordering by cite label would lump all % Smiths together. % \begin{macrocode} \beginoptiongroup{IGNORE FIRST NAMES (if author-year citations)} {\ifnumerical\else*\fi}% \optdef{*}{}{Respect first names}{or initials, treat as different authors} \optdef{x}{xintls}{Sort on surname only}{and treat all Smiths as one} \getans \endoptiongroup % \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} \beginoptiongroup{AUTHOR NAMES:}{} \optdef{*}{ed-au}{Full, surname last}{(John Frederick Smith)} \optdef{f}{nm-revf}{Full, surname first}{(Smith, John Frederick)} \optdef{i}{nm-init,ed-au}{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{w}{nm-rvvc}{Surname + comma + spaceless initials}{(Smith, J.F.)} \optdef{x}{nm-rvx}{Surname + pure initials}{(Smith JF)} \optdef{y}{nm-rvcx}{Surname + comma + pure initials}{(Smith, JF)} \optdef{z}{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 \endoptiongroup \mytempfalse \if\ans f\mytemptrue\fi \if\ans r\mytemptrue\fi \if\ans s\mytemptrue\fi \if\ans x\mytemptrue\fi \if\ans y\mytemptrue\fi \if\ans a\mytemptrue\fi \if\ans b\mytemptrue\fi \beginoptiongroup{EDITOR NAMES IN COLLECTIONS (if author names reversed)} {\ifmytemp*\fi} \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 \if\ans b \optdef{*}{}{Editor names NOT reversed}{as edited by John James Smith} \fi \optdef{r}{ed-rev}{Editor names reversed}{just like authors'} \getans \beginoptiongroup{POSITION OF JUNIOR (if author names reversed)} {} \optdef{*}{jnrlst}{Junior comes last}{as Smith, John, Jr.} \optdef{m}{}{Junior between}{as Smith, Jr., John} \getans \endoptiongroup \endoptiongroup \beginoptiongroup{JUNIOR PART IN THE CITATION (if author-year citations)} {\ifnumerical\else*\fi}% \optdef{*}{}{No `junior' part in the citations}{but in the ref listing} \optdef{j}{jnrlab}{`Junior' in citations}{as well as in ref listing} \getans \endoptiongroup \beginoptiongroup{PUNCTUATION BETWEEN AUTHOR NAMES:}{} \optdef{*}{}{Author names separated by commas}{} \optdef{s}{aunm-semi}{Names separated by semi-colon}{} \optdef{h}{aunm-sl}{Names separated by slash}{/} \getans \endoptiongroup \beginoptiongroup{ADJACENT REFERENCES WITH REPEATED NAMES:}{} \optdef{*}{}{Author/editor names always present}{} \optdef{d}{nmdash}{Repeated author/editor names replaced by dash}{} \optdef{2}{nmdash,nmd-2}{Repeated author/editor names replaced by 2 dashes}{} \optdef{3}{nmdash,nmd-3}{Repeated author/editor names replaced by 3 dashes}{} \getans \endoptiongroup % \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} \beginoptiongroup{NUMBER OF AUTHORS IN BIBLIOGRAPHY:}{} \optdef{*}{}{All authors}{included in listing} \optdef{l}{nmlm}{Limited authors}{(et al replaces missing names)} \getans \endoptiongroup \if\ans l \loop \ask{\num}{Maximum number of authors (1-99)} \ifnum\num>99\relax \mes{*** Must be between 1 and 99} \repeat \def\parsenum#1#2{\if#2\relax\wr{\spsp\spsp x#1,\pc: Maximum of #1\space authors} \else\wr{\spsp\spsp x#10,x#2,\pc: Maximum of #1#2\space authors}\fi} \expandafter\parsenum\num\relax \mes{\spsp You have selected maximum \num\space authors} \edef\numx{\num} \loop \ask{\num}{Minimum number (before et al given) (1-\numx)} \ifnum\num>\numx \mes{*** Must be between 1 and \numx} \repeat \def\parsenum#1#2{\if#2\relax\wr{\spsp\spsp m#1,\pc: Minimum of #1\space authors} \else\wr{\spsp\spsp m#10,m#2,\pc: Minimum of #1#2\space authors}\fi} \expandafter\parsenum\num\relax \mes{\spsp You have selected minimum \num\space authors} \fi % \end{macrocode} % % Something that I finally added after being asked many times, is to allow for % more than one name in the citation before inserting \textsl{et~al.} % to allow more than 2 authors before truncating % \begin{macrocode} \beginoptiongroup{AUTHORS IN CITATIONS:}{} \optdef{*}{}{One author et al}{for three or more authors} \optdef{m}{mcite}{Some other truncation scheme}{} \getans \endoptiongroup \mytempfalse \if\ans m\mytemptrue\fi \beginoptiongroup{MAX AUTHORS BEFORE ET AL: (if regular cite not selected)} {\ifmytemp*\fi}% \optdef{*}{mct-1}{One et al}{} \optdef{2}{mct-2}{One, Two et al}{} \optdef{3}{mct-3}{One, Two, Three et al}{} \optdef{4}{mct-4}{One, Two, Three, Four et al}{} \optdef{5}{mct-5}{One, Two, Three, Four, Five et al}{} \optdef{6}{mct-6}{One, Two, Three, Four, Five, Six et al}{} \getans \endoptiongroup \beginoptiongroup{MAX AUTHORS WITHOUT ET AL: (if regular cite not selected)} {\ifmytemp*\fi}% \optdef{*}{mct-x2}{Two authors without truncating}{} \optdef{3}{mct-x3}{Three authors}{without truncating} \optdef{4}{mct-x4}{Four authors}{without truncating} \optdef{5}{mct-x5}{Five authors}{without truncating} \optdef{6}{mct-x6}{Six authors}{without truncating} \getans \endoptiongroup % \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. % % Alternatively, the surnames only can be formatted, with the first names in the % regular font. One can also specify that the words `and' and `et~al.'\ should be % in the regular font, or that `et~al.'\ be italic. % % Another possibility is that the names be put into a command |\bibnamefont{..}|, % which must be defined in the \LaTeX\ document. By default, this command does % not format its argument. There is also a |\bibfnamefont| command for the first % names, to be user-defined. % % Editor names in a collection or in a book will not normally have these % fonts applied to them; this may be additionally selected. % % \begin{macrocode} \beginoptiongroup{TYPEFACE FOR AUTHORS IN LIST OF REFERENCES:}{} \optdef{*}{}{Normal font for author names}{} \optdef{s}{nmft,nmft-sc}{Small caps authors}{(\string\sc)} \optdef{i}{nmft,nmft-it}{Italic authors}{(\string\it\space or \string\em)} \optdef{b}{nmft,nmft-bf}{Bold authors}{(\string\bf)} \optdef{u}{nmft,nmft-def}{User defined author font}{(\string\bibnamefont)} \getans \endoptiongroup \mytempfalse \if\ans i\mytemptrue\fi \if\ans s\mytemptrue\fi \if\ans b\mytemptrue\fi \if\ans u\mytemptrue\fi \beginoptiongroup{FONT FOR FIRST NAMES (if non-default font for authors)} {\ifmytemp*\fi}% \optdef{*}{}{First names same font as surnames}{} \optdef{r}{fnm-rm}{First names in normal font}{} \optdef{u}{fnm-def}{First names in user defined font}{(\string\bibfnamefont)} \getans \beginoptiongroup{EDITOR NAMES IN INCOLLECTION ETC:}{} \optdef{*}{}{Editors incollection normal font}{} \optdef{a}{nmfted}{Editors incollection like authors}{font} \getans \endoptiongroup \beginoptiongroup{FONT FOR `AND' IN LIST:}{} \optdef{*}{}{`And' in author font}{(JONES AND JAMES)} \optdef{r}{nmand-rm}{`And' in normal font}{(JONES and JAMES)} \getans \endoptiongroup \endoptiongroup % \end{macrocode} % % \subsection*{Names in 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. % % This parallels the font selection for the names in the list of references % except that there no choice for the first names, since only surnames % are used in the labels. A user-defined |\citefontname| may also % be selected, but this \emph{must} be defined by the user since there % will be no default definition for it. % % 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} \beginoptiongroup{FONT OF CITATION LABELS IN TEXT (if author-year citations)} {\ifnumerical\else*\fi}% \optdef{*}{}{Cited authors plain}{as result of \string\cite\space command} \optdef{i}{lab,lab-it}{Cited authors italic}{} \optdef{s}{lab,lab-sc}{Cited authors small caps}{} \optdef{b}{lab,lab-bf}{Cited authors bold}{} \optdef{u}{lab,lab-def}{User defined citation font}{(\string\citenamefont)} \getans \mytempfalse \if\ans i\mytemptrue\fi \if\ans s\mytemptrue\fi \if\ans b\mytemptrue\fi \if\ans u\mytemptrue\fi \beginoptiongroup{FONT FOR `AND' IN CITATIONS (if non-default font for citation lables)} {\ifmytemp*\fi}% \optdef{*}{}{Cited `and' in author font}{} \optdef{r}{and-rm}{Cited `and' in normal font}{} \getans \endoptiongroup \beginoptiongroup{FONT OF EXTRA LABEL (The extra letter on the year)}{} \optdef{*}{}{Extra label plain}{} \optdef{i}{xlab-it}{Extra label italic}{} \getans \endoptiongroup \endoptiongroup % \end{macrocode} % % \subsection*{Label for missing author names} % % If the author and/or editor is missing, the standard \texttt{.bst} files % use the \texttt{key} field in place of the names for purposes of ordering the % entries. % % For author--year styles, the \texttt{key} field is even inserted in the % reference list and in the label in place of the authors. Optionally, one can % suppress the year in this case, which causes \texttt{natbib} (version~7) % to print only that key text as a code designation for the work. Thus if % \texttt{KEY = "CS1-345"} and there are no authors, then |\citep| produces % (CS1-345) and |\citet| simply CS1-345. That is, they behave like % |\citeauthor|. If \texttt{natbib} did not recognize the blank year, one would % get (CS1-345, ) and CS1-345 (). (Earlier versions of \texttt{natbib} crash on % a blank year.) % \begin{macrocode} \beginoptiongroup{LABEL WHEN AUTHORS MISSING (if author-year citations)} {\ifnumerical\else*\fi}% \optdef{*}{keyxyr}{Year blank when KEY replaces missing author}{(for natbib 7.0)} \optdef{y}{}{Year included when KEY replaces missing author}{} \getans \endoptiongroup % \end{macrocode} % % \subsection*{Missing date} % A missing date can be set to ???? or simply left blank. In the latter case, % \texttt{natbib} version~7 will print only the authors without any year % punctuation or brackets. % % \begin{macrocode} \beginoptiongroup{MISSING DATE (if author-year citations)} {\ifnumerical\else*\fi}% \optdef{*}{}{Missing date set to ????}{in label and text} \optdef{b}{blkyear}{Missing date left blank}{} \getans \endoptiongroup % \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} \beginoptiongroup{DATE 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 \endoptiongroup \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} \beginoptiongroup{DATE FORMAT (if non author-year citations)} {\ifnumerical*\fi}% \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 \beginoptiongroup{SUPPRESS MONTH:}{} \optdef{*}{}{Date is month and year}{} \optdef{x}{xmth}{Date is year only}{} \getans \endoptiongroup \beginoptiongroup{REVERSED DATE (if including month)} {\if\ans x\else*\fi}% \optdef{*}{}{Date as month year}{} \optdef{r}{dtrev}{Date as year month}{} \getans \endoptiongroup \endoptiongroup \beginoptiongroup{DATE FORMAT (if author-year citations)} {\ifnumerical\else*\fi}% \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 \beginoptiongroup{INCLUDE MONTHS:}{} \optdef{*}{}{Date is year only}{without the month} \optdef{m}{aymth}{Include month in date}{} \getans \endoptiongroup \beginoptiongroup{REVERSED DATE (if including month)} {\if\ans m*\fi}% \optdef{*}{}{Date as month year}{} \optdef{r}{dtrev}{Date as year month}{} \getans \endoptiongroup \endoptiongroup \beginoptiongroup{DATE PUNCTUATION (if date not at end)} {\ifmytemp*\fi}% \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 \beginoptiongroup{BLANK AFTER DATE:}{} \optdef{*}{}{Space after date}{and punctuation} \optdef{x}{yrpp-xsp}{No space after date}{as 1994:45} \getans \endoptiongroup \endoptiongroup \beginoptiongroup{DATE FONT:}{} \optdef{*}{}{Date in normal font}{} \optdef{b}{dtbf}{Date in bold face}{} \getans \endoptiongroup % \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} \beginoptiongroup{TRUNCATE YEAR (if author-year citations)} {\ifnumerical\else*\fi}% \optdef{*}{note-yr}{Year text full}{as 1990--1993 or `in press'} \optdef{t}{}{Year truncated}{to last 4 digits} \getans \endoptiongroup % \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 or even in guillemets. The last is best with T1 coding; a % poor man's version for OT1 is provided; \LaTeXe\ is required in both cases. % % 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} \beginoptiongroup{TITLE OF ARTICLE:}{} \optdef{*}{}{Title plain}{with no special font} \optdef{i}{tit-it}{Title italic}{(\string\em)} \optdef{q}{tit-qq,qt-s}{Title and punctuation in single quotes}{(`Title,' ..)} \optdef{d}{tit-qq}{Title and punctuation in double quotes}{(``Title,'' ..)} \optdef{g}{tit-qq,qt-g}{Title and punctuation in guillemets}{(<> ..)} \optdef{x}{tit-qq,qt-s,qx}{Title in single quotes}{(`Title', ..)} \optdef{y}{tit-qq,qx}{Title in double quotes}{(``Title'', ..)} \optdef{z}{tit-qq,qt-g,qx}{Title in guillemets}{(<>, ..)} \getans \endoptiongroup \mytempfalse \if\ans q\mytemptrue\fi \if\ans d\mytemptrue\fi \if\ans g\mytemptrue\fi \if\ans x\mytemptrue\fi \if\ans y\mytemptrue\fi \if\ans z\mytemptrue\fi \beginoptiongroup{COLLECTION/PROCEEDINGS TITLES (if quoted title)} {\ifmytemp*\fi}% \optdef{*}{bt-qq}{Quote collection and proceedings titles}{too} \optdef{x}{}{Collection and proceedings titles not in quotes}{} \getans \endoptiongroup \beginoptiongroup{CAPITALIZATION OF ARTICLE TITLE:}{} \optdef{*}{}{Sentence style}{(capitalize first word and those in braces)} \optdef{t}{atit-u}{Title style}{(just as in bib entry)} \getans \endoptiongroup \beginoptiongroup{ARTICLE TITLE PRESENT:}{} \optdef{*}{}{Article title present}{in journals and proceedings} \optdef{x}{jtit-x}{No article title}{} \getans \endoptiongroup % \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} \beginoptiongroup{JOURNAL NAMES:}{} \optdef{*}{}{Periods in journal names}{are retained, as `Phys. Rev.'} \optdef{x}{jxper}{Dotless journal names}{as `Phys Rev'} \getans \endoptiongroup % \end{macrocode} % Journal name is normally printed in italics; can be left in normal font. % \begin{macrocode} \beginoptiongroup{JOURNAL NAME FONT:}{} \optdef{*}{}{Journal name italics}{} \optdef{r}{jttl-rm}{Journal name normal}{font} \getans \endoptiongroup % \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} \beginoptiongroup{THESIS TITLE:}{} \optdef{*}{}{Thesis titles like books}{} \optdef{a}{thtit-a}{Thesis title like article}{} \optdef{x}{thtit-x}{No thesis title}{} \getans \endoptiongroup \beginoptiongroup{TECHNICAL REPORT TITLE:}{} \optdef{*}{}{Tech. report title like articles}{} \optdef{b}{trtit-b}{Tech. report title like books}{} \getans \endoptiongroup \beginoptiongroup{TECHNICAL REPORT NUMBER:}{} \optdef{*}{}{Tech. report and number plain}{as `Tech. Rep. 123'} \optdef{i}{trnum-it}{Tech. report and number italic}% {as `{\string\it\space Tech. Rep. 123'}} \getans \endoptiongroup % \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. % % I am only aware of one journal that used to reset the pagination for each % `number', in which case the number was part of the page designation. % I had erroneously provided an option \texttt{vnum-pg} to achieve this, but I % now realize that instead, for this one journal, the database entries must % contain \texttt{pages="(2)33--2(55)"}. This option has been removed at % version 3.84. % % 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(1995), 33-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. % % It is also possible to include the year as part of the journal specification, % in which case the year is always in parentheses, attached snugly or with space % to the volume, or preceding the pages. % % \begin{macrocode} \beginoptiongroup{JOURNAL VOLUME:}{} \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 \endoptiongroup % \end{macrocode} % % The form of the `number' is also given: in parentheses, with `no.', % with \#, or omitted. The \texttt{vnum-b} option is meant to be used % with \texttt{jdt-v} and \texttt{jdt-vs} but could be used alone. % \begin{macrocode} \beginoptiongroup{JOURNAL 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{b}{vnum-b}{Journal vol number}{as 34 2} \optdef{x}{vnum-x}{Journal vol, without number}{as 34} \getans \endoptiongroup \beginoptiongroup{VOLUME 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} \getans \endoptiongroup \beginoptiongroup{YEAR IN JOURNAL SPECIFICATION:}{} \optdef{*}{}{Journal year like others}{as given by date position} \optdef{v}{jdt-v}{Journal vol(year)}{as 34(1995)} \optdef{s}{jdt-vs}{Journal vol (year)}{as 34 (1995)} \optdef{p}{jdt-p}{Year with pages}{as 34(2), (1995) 1345--1387} \optdef{c}{jdt-pc}{Year, comma, pages}{as 34(2), (1995), 1345--1387} \getans \endoptiongroup \beginoptiongroup{PAGE NUMBERS:}{} \optdef{*}{}{Start and stop page numbers}{given} \optdef{f}{jpg-1}{Only start page number}{} \getans \endoptiongroup \beginoptiongroup{LARGE PAGE NUMBERS:}{} \optdef{*}{}{No separators for large page numbers}{} \optdef{c}{pgsep-c}{Comma inserted over 9999}{as 11,234} \optdef{s}{pgsep-s}{Thin space inserted over 9999}{as 11 234} \optdef{p}{pgsep-p}{Period inserted over 9999}{as 11.234} \getans \endoptiongroup \beginoptiongroup{WORD `PAGE' IN ARTICLES:}{} \optdef{*}{}{Article pages numbers only}{as 234-256} \optdef{p}{jwdpg}{Include `page' in articles}{as pp. 234--256} \getans \endoptiongroup % \end{macrocode} % % Some journals want page numbers at the end, even for books, proceedings, as % well as for journals. % \begin{macrocode} \beginoptiongroup{POSITION OF PAGES:}{} \optdef{*}{}{Pages given mid text}{as is normal} \optdef{e}{pp-last}{Pages at end}{but before any notes} \getans \endoptiongroup \beginoptiongroup{WORD `VOLUME' IN ARTICLES:}{} \optdef{*}{}{Article volume as number only}{as 21} \optdef{p}{jwdvol}{Include `volume' in articles}{as vol. 21} \getans \endoptiongroup % \end{macrocode} % % Fiddle with the format and location of the number/series for collections and % inproceedings. % \begin{macrocode} \beginoptiongroup{NUMBER AND SERIES FOR COLLECTIONS:}{} \optdef{*}{num-xser}{Allows number without series}{and suppresses word "number"} \optdef{s}{}{Standard BibTeX}{as: "number 123 in Total Works"; error if number and no series} \getans \endoptiongroup \beginoptiongroup{POSITION OF NUMBER AND SERIES:}{} \optdef{*}{}{After chapter and pages}{as in standard BibTeX} \optdef{t}{numser}{Just before publisher}{or organization} \getans \endoptiongroup % \end{macrocode} % % Fiddle with the format and location of series and volume with books and collections. % \begin{macrocode} \beginoptiongroup{VOLUME AND SERIES FOR BOOKS/COLLECTIONS:}{} \optdef{*}{}{Vol. 23 of Series}{as in standard BibTeX} \optdef{s}{ser-vol}{Series, vol. 23}{} \getans \endoptiongroup \beginoptiongroup{POSITION OF VOLUME AND SERIES FOR INCOLLECTIONS:}{} \optdef{*}{}{Series and volume after the editors}{} \optdef{e}{ser-ed}{Series and volume after booktitle}{and before editors} \getans \endoptiongroup % \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} \beginoptiongroup{JOURNAL NAME PUNCTUATION:}{} \optdef{*}{}{Comma after journal}{name} \optdef{x}{jnm-x}{Space after journal}{name} \getans \endoptiongroup % \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} \beginoptiongroup{BOOK TITLE:}{} \optdef{*}{}{Book title italic}{(\string\em)} \optdef{p}{btit-rm,bt-rm}{Book title plain}{(no font command)} \getans \endoptiongroup \beginoptiongroup{PAGES IN BOOKS:}{} \optdef{*}{}{Pages in book plain}{as pp. 50-55} \optdef{p}{bkpg-par}{Pages in book in parentheses}{as (pp. 50-55)} \optdef{x}{bkpg-x}{Pages in book bare}{as 50-55} \getans \endoptiongroup \beginoptiongroup{TOTAL PAGES OF A BOOK:}{} \optdef{*}{}{Total book pages not printed}{} \optdef{p}{pg-bk}{For book: 345 pages}{or pp.} \optdef{a}{pg-bk,pg-pre}{Total book pages before publisher}{} \getans \endoptiongroup % \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} \beginoptiongroup{PUBLISHER ADDRESS:}{} \optdef{*}{}{Publisher, address}{as Harcourt, New York} \optdef{a}{add-pub}{Address: Publisher}{as New York: Harcourt} \getans \endoptiongroup \beginoptiongroup{PUBLISHER 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)} \optdef{c}{pub-date,pub-xc}{Publisher and date in parentheses, no comma}{(Oxford 1994)} \optdef{f}{pub-date,pub-xpar}{Publisher and date without parentheses}{Oxford, 1994} \optdef{k}{pub-date,pub-xpar,pub-xc}{Publisher and date, no parentheses, no comma}{Oxford 1994} \getans \endoptiongroup \beginoptiongroup{PUBLISHER POSITION:}{} \optdef{*}{}{Publisher after chapter, pages}{} \optdef{p}{pre-pub}{Publisher before chapter, pages}{} \optdef{e}{pre-edn}{Publisher after edition}{} \getans \endoptiongroup % \end{macrocode} % % \subsection*{ISBN, ISSN, DOI numbers} % 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}. % However, it should be suppressed for \texttt{inbook} etc.\ when % there is a crossref to another book with the ISBN number. % % Periodicals contain an ISSN number. Add this to \texttt{article}, or % course, but also to \texttt{inproceedings} and \texttt{proceedings}, since % they are sometimes printed in a periodical. % % Journal articles that appear online are given a DOI number, something more % robust than a URL that can change as machines are upgraded. % The American Geophysical Union (AGU) uses the DOI as part of the % page number substitution for electronic journals, placing the number % where the pages would normally appear. % \begin{macrocode} \beginoptiongroup{ISBN NUMBER:}{} \optdef{*}{isbn}{Include ISBN}{for books, booklets, etc.} \optdef{x}{}{No ISBN}{} \getans \endoptiongroup \beginoptiongroup{ISSN NUMBER:}{} \optdef{*}{issn}{Include ISSN}{for periodicals} \optdef{x}{}{No ISSN}{} \getans \endoptiongroup \beginoptiongroup{DOI NUMBER:}{} \optdef{*}{doi}{Include DOI}{as "doi: number"} \optdef{u}{url-doi}{Format DOI as URL //doi.org/doi}{(must give url options!)} \optdef{a}{agu-doi,doi}{Insert DOI AGU style}{as part of page number} \optdef{x}{}{No DOI}{} \getans \endoptiongroup % \end{macrocode} % % \subsection*{Editor of book without author} % % This is normally % \begin{quote} % J. K. James, editor % \end{quote} % but may also be % \begin{quote} % J. K. James, (editor)\\ % J. K. James (editor), % \end{quote} % Alternatively, the word \textsl{editor} may be capitalized and/or % abbreviated. % % \begin{macrocode} \beginoptiongroup{`EDITOR' AFTER NAMES (EDITED BOOKS WITHOUT AUTHORS):}{} \optdef{*}{}{Word `editor' after name}{} \optdef{a}{edpar}{`Name (editor),'}{in parentheses, after name, comma after} \optdef{b}{edpar,bkedcap}{`Name (Editor),'}{as above, editor upper case} \optdef{c}{edparc}{`Name, (editor)'}{in parentheses, after name, comma between} \optdef{d}{edparc,bkedcap}{`Name, (Editor)'}{as above, editor upper case} \optdef{e}{edparxc}{`Name (editor)'}{in parentheses, after name, no commas} \optdef{f}{edparxc,bkedcap}{`Name (Editor)'}{as above, editor upper case} \getans \endoptiongroup % \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} % If none of the \texttt{edby} variations is used, then the same system is % used as for edited books, i.e. \texttt{edpar} applies. % \begin{macrocode} \beginoptiongroup{EDITOR IN COLLECTIONS:}{} \optdef{*}{}{Same as for edited book}{(names before booktitle)} \optdef{b}{edby}{In booktitle, edited by .. }{(where .. is names)} \optdef{p}{edby-par}{In booktitle (edited by ..)}{} \optdef{c}{edby-parc}{In booktitle, (edited by ..)}{} \optdef{e}{edby,edbyx}{In booktitle, editor ..}{} \optdef{f}{edby,edbyw}{In booktitle, (editor) ..}{} \optdef{k}{edby-par,edbyx}{In booktitle (editor..)}{} \optdef{g}{edby-parc,edbyx}{In booktitle, (editor..)}{} \optdef{j}{edby,edbyy}{In booktitle, .., editor}{} \optdef{m}{edby-par,edbyy}{In booktitle (.., editor)}{} \getans \endoptiongroup \mytempfalse \if\ans p\mytemptrue\fi \if\ans k\mytemptrue\fi \if\ans c\mytemptrue\fi \if\ans f\mytemptrue\fi \beginoptiongroup{CAPITALIZE `EDITOR' OR `EDITED BY' (if editor capitalizable)} {\ifmytemp*\fi}% \optdef{*}{}{`(editor,..)' or `(edited by..)'}{in lower case} \optdef{c}{edcap}{`(Editor,..)' or `(Edited by..)'}{in upper case} \getans \endoptiongroup % \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} \beginoptiongroup{PUNCTUATION 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,com-semi}{Semi-colon between blocks}{} \optdef{b}{blk-com,com-blank}{Blanks between blocks}{} \optdef{t}{blk-tit}{Period after titles of articles, books, etc}{else commas} \optdef{u}{blk-tit,tit-col}{Colon after titles of articles, books, etc}{else commas} \optdef{a}{blk-tita}{Period after titles of articles}{else commas} \optdef{d}{blk-tita,tit-col}{Colon after titles of articles}{else commas} \getans \endoptiongroup \mytempfalse \if\ans c\mytemptrue\fi \if\ans s\mytemptrue\fi \if\ans b\mytemptrue\fi \if\ans t\mytemptrue\fi \if\ans a\mytemptrue\fi \beginoptiongroup{PUNCTUATION BEFORE NOTES (if not using \string\newblock)} {\ifmytemp*\fi}% \optdef{*}{}{Notes have regular punctuation}{like all other blocks} \optdef{p}{blknt}{Notes preceded by period}{} \getans \endoptiongroup \beginoptiongroup{PUNCTUATION AFTER AUTHORS:}{} \optdef{*}{}{Author block normal}{with regular block punctuation} \optdef{c}{au-col}{Author block with colon}{} \getans \endoptiongroup % \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} \beginoptiongroup{PUNCTUATION AFTER `IN':}{} \optdef{*}{}{Space after `in'}{for incollection or inproceedings} \optdef{c}{in-col}{Colon after `in'}{(as `In: ...')} \optdef{i}{in-it}{Italic `in'}{and space} \optdef{d}{in-col,in-it}{Italic `in' and colon}{} \optdef{x}{in-x}{No word `in'}{for edited works} \getans \endoptiongroup \beginoptiongroup{`IN' WITH JOURNAL NAMES (if using 'in' with collections)} {\if\ans x\else*\fi} \optdef{*}{}{No `in' before journal name}{} \optdef{i}{injnl}{Add `in' before journal name}{in style for incollection} \getans \endoptiongroup % \end{macrocode} % % \subsection*{Final punctuation} % The punctuation at the end of the reference is normally a period. This % may be suppressed. % \begin{macrocode} \beginoptiongroup{FINAL PUNCTUATION:}{} \optdef{*}{}{Period at very end}{of the listed reference} \optdef{x}{fin-bare}{No period at end}{} \getans \endoptiongroup % \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} \beginoptiongroup{ABBREVIATE WORD `PAGES' (if not using external language file)} {\if!\cfile!\relax*\fi}% \optdef{*}{}{`Page(s)'}{(no abbreviation)} \optdef{a}{pp}{`Page' abbreviated}{as p. or pp.} \optdef{x}{ppx}{`Page' omitted}{} \getans \beginoptiongroup{ABBREVIATE WORD `EDITORS':}{} \optdef{*}{}{`Editor(s)'}{(no abbreviation)} \optdef{a}{ed}{`Editor' abbreviated}{as ed. or eds.} \getans \endoptiongroup \beginoptiongroup{OTHER ABBREVIATIONS:}{} \optdef{*}{}{No abbreviations}{of volume, edition, chapter, etc} \optdef{a}{abr}{Abbreviations}{of such words} \getans \endoptiongroup \beginoptiongroup{ABBREVIATION FOR `EDITION' (if abbreviating words)} {\if\ans a*\fi}% \optdef{*}{}{`Edition' abbreviated as `edn'}{} \optdef{a}{ednx}{`Edition' abbreviated as `ed'}{} \getans \beginoptiongroup{MONTHS WITH DOTS:}{} \optdef{*}{}{Months with dots}{as Jan.} \optdef{x}{mth-bare}{Months without dots}{as Feb Mar} \getans \endoptiongroup \endoptiongroup \beginoptiongroup{EDITION NUMBERS:}{} \optdef{*}{xedn}{Editions as in database}{saving much processing memory} \optdef{w}{}{Write out editions}{as first, second, third, etc} \optdef{n}{ord}{Numerical editions}{as 1st, 2nd, 3rd, etc} \getans \endoptiongroup \endoptiongroup % \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} \umes{Reading external language file \string\cfile=\cfile}% \if!\cfile!\relax\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 options \texttt{jabr} % or \texttt{jaa} since these options are selected here. No option % menus from the journal-name files will be read in. % \begin{macrocode} \beginoptiongroup{STORED JOURNAL NAMES:}{} \optdef{*}{}{Full journal names}{for prestored journals} \optdef{a}{jabr}{Abbreviated journal names}{} \optdef{s}{jabr,jaa}{Abbreviated with astronomy shorthands}{like ApJ and AJ} \getans \endoptiongroup % \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} \beginoptiongroup{AMPERSAND:}{} \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 \endoptiongroup \beginoptiongroup{COMMA 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 even with 2 authors}{as `Tom, and Harry'} \getans \endoptiongroup \beginoptiongroup{COMMA BEFORE `AND' EVEN FOR COLLECTION EDITORS (if using comma before `and' with authors)} {\if\ans c*\fi}% \optdef{*}{and-com-ed}{Comma with 2 editors}{in collections} \optdef{x}{}{Two editors without comma}{as `Tom and Harry'} \getans \endoptiongroup \beginoptiongroup{NO `AND' IN REFERENCE LIST:}{} \optdef{*}{}{With `and'}{before last author in reference list} \optdef{x}{xand}{No `and'}{as `Tom, Dick, Harry'} \getans \endoptiongroup \beginoptiongroup{COMMA BEFORE `ET AL':}{} \optdef{*}{}{Comma before `et al'}{in reference list} \optdef{x}{etal-xc}{No comma before `et al'}{} \getans \endoptiongroup % \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} \beginoptiongroup{FONT 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 \endoptiongroup % \end{macrocode} % % \subsection*{Additional Data Fields}\label{sec:revtex} % The American Physical Society's REV\TeX\ package contains \btx\ support % with a \texttt{bst} file generated from a variant of % \texttt{\filename}. The extra fields are also available here. % \begin{itemize} % \item \textbf{collaboration}: A collaboration name associated with a % reference. % \item \textbf{eprint}: The e-print citation for the reference (Los Alamos % or otherwise). E-print numbers can be turned into hyperlinks to the % online article. The output is\\ % \hspace*{2em}|\eprint{|\textit{eprint-spec}|}| % \item \textbf{archive}: is an optional argument for |\eprint|, as\\ % \hspace*{2em}|\eprint[|\textit{archive-des}|]{|\textit{eprint-spec}|}|\\ % The \textit{archive-des} is some code such as \texttt{arXiv} that is % translated to a base URL by a class or package file. The default definition % of |\eprint| ignores \textit{archive-des} and prints \textit{eprint-spec} % as a URL. % \item \textbf{url}: A URL associated with the reference. Can be turned % into a hyperlink. % \end{itemize} % % A collaboration appears as part of the author list and the other two % appear at the end of the citaton. The URL field can be selected % independently of this option. % % In addition there are new fields for journals like Phys.\ Rev.~D that % no longer use page numbers. % \begin{itemize} % \item \textbf{eid}: Electronic article identifier. % \item \textbf{numpages}: Number of pages in an article. For use in % conjunction with the \textbf{eid} field when page counts are % desired. Deprecated when submitting to Phys.\ Rev. % % The \texttt{eprint} (with \texttt{archive}) and \texttt{url} fields may be % included independently of the other REV\TeX\ fields. % % The \texttt{eid} field is now always included, although it is optional for % the bibliography entries. This electronic identifier is a replacement for the % page number in electronic journals: it is the sequence number in the printed % volume. If present, it will be used in place of the page number. % % \end{itemize} % % \begin{macrocode} \beginoptiongroup{ADDITIONAL REVTeX DATA FIELDS:}{} \optdef{*}{}{No additional fields}{for REVTeX} \optdef{r}{revdata,eprint,url,url-blk}{Include REVTeX data fields} {collaboration, eid, eprint, archive, numpages, url} \getans \mytemptrue \if\ans r\mytempfalse\fi \beginoptiongroup{E-PRINT DATA FIELD: (without REVTeX fields)} {\ifmytemp*\fi} \optdef{*}{}{Do not include eprint field}{} \optdef{e}{eprint}{Include eprint and archive fields}{for electronic publications} \getans \endoptiongroup % \end{macrocode} % % \subsection*{URL address} % For electronic documents with an Internet address, add a URL entry. % Harvard already has this, but here it is done for all styles. % The URL text will be set with the \verb!\url! command in the \texttt{url} % package by Donald Arseneau. This package must be loaded for the command % to work right. It allows line breaks at punctuations. Otherwise, % \verb!\texttt! is used instead, with no line breaks. The URL text is preceded % by \verb!\urlprefix! which defaults to ``URL '' but may be redefined by the % user to be whatever s/he wants. The final space must be included. % % Note: selecting the REV\TeX\ fields automatically includes this, so the % offer only is made if REV\TeX\ has been rejected. % % \begin{macrocode} \beginoptiongroup{URL ADDRESS: (without REVTeX fields)}{\ifmytemp*\fi} \optdef{*}{}{No URL}{for electronic (Internet) documents} \optdef{u}{url,url-blk}{Include URL}{as regular item block} \optdef{n}{url,url-nt}{URL as note}{} \optdef{l}{url,url-nl}{URL on new line}{after rest of reference} \getans \endoptiongroup \endoptiongroup % \end{macrocode} % % \subsection*{Reference Component Tagging} % If reference component tagging is enabled, we % apply tags like |\bibinfo| and |\eprint| to the fields of data % in the content of the |\bibitem| statement. We also ensure that % these commands have a default meaning within the scope of the |thebibliography| % environment. The default definitions simply print the field and ignore the % tag. However, other programs or packages might make use of the tag % information to separate authors from title, for example. % % \begin{macrocode} \beginoptiongroup{REFERENCE COMPONENT TAGS:}{} \optdef{*}{}{No reference component tags} {in the \string\bibitem\space entries} \optdef{b}{bibinfo}{Reference component tags} {like \string\bibinfo\space in the content of \string\bibitem} \getans \endoptiongroup % \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} \beginoptiongroup{EMPHASIS: (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} \optdef{u}{em-ul}{Underlining}{in place of italics, best with ulem package} \getans \endoptiongroup % \end{macrocode} % % \subsection*{Plain \TeX\ compatibility} % Bold face, italics, and emphasis are made with the \LaTeXe\ commands, % which makes them incompatible with the obsolete \LaTeX2.09, and with % Plain \TeX. There are also some extra testing for existing commands % that best work with \LaTeXe\ syntax. % % If the bibliography style file is to be fully compatible with Plain \TeX, % do not select the option \texttt{nfss} but do take \texttt{plntx}. % \begin{macrocode} \beginoptiongroup{COMPATIBILITY WITH PLAIN TEX:}{} \optdef{*}{nfss}{Use LaTeX commands}{which may not work with Plain TeX} \optdef{t}{plntx}{Use only Plain TeX}{commands for fonts and testing} \getans \endoptiongroup % \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 %</options> % \end{macrocode} % % \section{The Bibliographic Coding} % % \begin{macrocode} %<*!options&!driver&!bblbst> %<*!tail> % For use with BibTeX version 0.99a or later % ------------------------------------------------------------------- %<*(!nmft&(nmft-it|nmft-sc|nmft-bf|nmft-def))|(!lab&(lab-it|lab-bf|lab-sc|lab-def))> % WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING % The input dbj file contains one of the options %<nmft-it|nmft-sc|nmft-bf|nmft-def> % nmft-it, nmft-bf, nmft-sc, or nmft-def %<lab-it|lab-sc|lab-bf|lab-def> % lab-it, lab-bf, lab-sc, or lab-def % without the corresponding general option(s): %<nmft-it|nmft-sc|nmft-bf|nmft-def> % nmft %<lab-it|lab-sc|lab-bf|lab-def> % lab % (You may be using an older dbj with a newer version of merlin.mbs) % Please edit your dbj file to add the general option(s) and reprocess. % %</(!nmft&(nmft-it|nmft-sc|nmft-bf|nmft-def))|(!lab&(lab-it|lab-bf|lab-sc|lab-def))> %<*!exlang> %<!babel> % This bibliography style file is intended for texts in ENGLISH %<*babel> % This bibliography style file requires a file named francaisbst.tex % containing the definitions of word commands like \bbleditor, etc. %</babel> %</!exlang> %<*exlang> % This bibliography style file is intended for texts in %<bahasa> % BAHASA %<brazilian> % BRAZILIAN %<catalan> % CATALAN %<croatian> % CROATIAN %<czech> % CZECH %<danish> % DANISH %<dansk> % DANSK %<dutch> % DUTCH %<english> % ENGLISH %<esperanto> % ESPERANTO %<finnish> % FINNISH %<french> % FRENCH %<galacian> % GALACIAN %<german> % GERMAN %<hungarian> % HUNGARIAN %<italian> % ITALIAN %<norwegian> % NORWEGIAN %<norsk> % NORWEGIAN %<polski> % POLISH %<polish> % POLISH %<portuguese> % PORTUGUESE %<romanian> % ROMANIAN %<russian> % RUSSIAN %<slovak> % SLOVAK %<slovenian> % SLOVENIAN %<slovene> % SLOVENIAN %<spanish> % SPANISH %<swedish> % SWEDISH %<turkish> % TURKISH %</exlang> %<*!html> %<*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}... %</alk> %<*!(har|ast|alk|cay|nmd|cn)> % The form of the \bibitem entries is % \bibitem[Jones et al.(1990)]{key}... %<nat> % \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! %<nat> % 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: % \citet{key} ==>> Jones et al. (1990) %<nat> % \citet*{key} ==>> Jones, Baker, and Smith (1990) % \citep{key} ==>> (Jones et al., 1990) %<nat> % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., 1990, p. 32) % \citeauthor{key} ==>> Jones et al. %<nat> % \citeauthor*{key} ==>> Jones, Baker, and Smith % \citeyear{key} ==>> 1990 %</!(har|ast|alk|cay|nmd|cn)> %<*har> % or: harvard.sty by Peter Williams and Thorsten Schnier %<harnm> % (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}... %</har> %<*cay> % or: chicago.sty % The form of the bibitem entries is % \bibitem[\protect\citeauthoryear{Jones, Baker, and Smith} % {Jones et al.}{1990}{key}... %</cay> %<*nmd> % or: named.sty % The form of the bibitem entries is % \bibitem[\protect\citeauthoryear{Jones et al.}{1990}]{key}... %</nmd> %<*ast> % or: astron.sty % The form of the bibitem entries is % \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}... %</ast> %<*cn> % or: authordate1-4.sty % The form of the bibitem entries is % \bibitem[\protect\citename{Jones et al.}1990]{key}... %</cn> %</ay> %<*!ay> %<*!alph&!cite> % This is a numerical citation style, and as such is standard LaTeX. %</!alph&!cite> %<*alph> % This is a labelled citation style similar to the standard alpha.bst, % where labels are of the form Dal90 or DBK89. %</alph> %<*cite&!alph> % This is a special pseudo-numerical bibliography style, intended to be % used to list all the entries in a bib database %</cite&!alph> % It requires no extra package to interface to the main text. % The form of the \bibitem entries is %<!alph&!cite> % \bibitem{key}... %<alph> % \bibitem[label]{key}... %<!alph&cite> % \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> %<*alph> % \cite{key} ==>> [label] % \cite[chap. 2]{key} ==>> [label, chap. 2] % The order in the reference list is by label. %</alph> %<*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> %<*!seq-no&!alph> % The order in the reference list is alphabetical by authors. %</!seq-no&!alph> %</!cite|alph> %</!ay> %</!html> %<*html> % This bibliographic style file produces HTML output instead of LaTeX. % The LaTeX special characters are not translated, so that the output % (which has the .bbl ending still) will have to be further massaged, % and renamed with .html or .htm. The title and heading may also need % to be revised. % %<htlist&!htdes> % The output is a numbered list. %<htdes> % The output is an unnumbered list with the keys printed %<htdes> % before each entry. %<!htlist&!htdes> % The output is lists each entry as one paragraph. %</html> % ------------------------------------------------------------------- % \end{macrocode} % % \begin{macro}{`ENTRY'} % 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}. % % Books normally have an ISBN number. % This entry is (optionally) included, modelled after that in % \texttt{xbtxbst.doc}. % \begin{macrocode} ENTRY { address %<annote> annote %<eprint> archive author booktitle chapter %<revdata> collaboration %<doi|url-doi> doi edition editor eid %<eprint> eprint howpublished institution %<isbn> isbn %<issn> issn journal key %<lang> language month note number %<revdata> numpages organization pages publisher school series title type %<url|harnm|revdata> url volume year } {} %<!ay&!alph> { label } %<!ay&alph> { label extra.label sort.label } %<ay> { label extra.label sort.label short.list } % \end{macrocode} % \end{macro} % % \begin{macrocode} INTEGERS { output.state before.all mid.sentence after.sentence after.block } % \end{macrocode} % % \begin{macro}{`init.state.consts'} % \begin{macrocode} FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } % \end{macrocode} % \end{macro} % % |s| and |t| are general-purpose scratch registers whose value does not persist % past the end of a function. They also do not appear to be used to communicate % between functions or to be clobbered within a sub-function call. Hopefully. % \begin{macrocode} STRINGS { s t} % \end{macrocode} % % \begin{macro}{`output.nonnull'} % \begin{macrocode} FUNCTION {output.nonnull} { 's := output.state mid.sentence = %<!blk-com|(!com-semi&!com-blank)> { ", " * write$ } %<blk-com&com-semi> { "; " * write$ } %<blk-com&!com-semi&com-blank> { " " * write$ } { output.state after.block = { add.period$ write$ newline$ %<!html> "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } % \end{macrocode} % \end{macro} % % \begin{macro}{`output'} % \begin{macrocode} FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`output.check'} % \begin{macrocode} FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`fin.entry'} % I have often been asked to add an annotation function. This suggestion is % from Soren Dayton; it inputs a file with the same name as the cite key, or % uses the text in the \texttt{annote} field. It will only work with \LaTeXe. % \begin{macrocode} FUNCTION {fin.entry} %<*!fin-bare> { add.period$ write$ %</!fin-bare> %<*fin-bare> { duplicate$ empty$ 'pop$ 'write$ if$ %</fin-bare> %<html&htdes> "</dd>" write$ %<html&!htdes&htlist> "</li>" write$ %<html&!htdes&!htlist> "</p>" write$ newline$ %<*annote> %<*!html> annote missing$ { "\bibAnnoteFile{" cite$ * "}" * write$ newline$ } { "\bibAnnote{" cite$ * "}{" * annote * "}" * write$ newline$ } if$ %</!html> %<*html> "<blockquote><strong>Key:</strong> " cite$ * write$ annote missing$ { newline$ } { "<br><strong>Annotation:</strong>" write$ newline$ annote write$ newline$ } if$ "</blockquote>" write$ newline$ %</html> %</annote> } % \end{macrocode} % \end{macro} % % \begin{macro}{`new.block'} % \begin{macrocode} FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`new.sentence'} % \begin{macrocode} FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`add.blank'} % 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'} % \begin{macrocode} %<*au-col|tit-col> FUNCTION {add.colon} { duplicate$ empty$ 'skip$ { ":" * add.blank } if$ } %</au-col|tit-col> % \end{macrocode} % \end{macro} % % \begin{macro}{`no.blank.or.punct'} % 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} %<*!html> { "\hspace{0pt}" * before.all 'output.state := } %</!html> %<html>{ before.all 'output.state := } %</yrpp-xsp> % \end{macrocode} % \end{macro} % % \begin{macro}{`date.block'} % The \texttt{date.block} function is used for special punctuating effects % after the date. % \begin{macrocode} FUNCTION {date.block} { %<*!yrp-x> %<yrp-col> ":" * %<*!yrp-col> %<yrp-semi> ";" * %<*!yrp-semi> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&!yrp-per> skip$ %<(blk-com|blk-tit|blk-tita)&yrp-per> new.sentence %</!yrp-semi> %</!yrp-col> %</!yrp-x> %<*yrp-x|yrp-col|yrp-semi> %<!yrpp-xsp> add.blank %<yrpp-xsp> no.blank.or.punct %</yrp-x|yrp-col|yrp-semi> } % \end{macrocode} % \end{macro} % % \begin{macro}{`not'} % \begin{macrocode} FUNCTION {not} { { #0 } { #1 } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`and'} % \begin{macrocode} FUNCTION {and} { 'skip$ { pop$ #0 } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`or'} % \begin{macrocode} FUNCTION {or} { { pop$ #1 } 'skip$ if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`non.stop'} % 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} %<*!tit-it&tit-qq> FUNCTION {non.stop} { duplicate$ "}" * add.period$ #-1 #1 substring$ "." = } %</!tit-it&tit-qq> % \end{macrocode} % \end{macro} % % \begin{macro}{`remove.dots'} % This macro removes any periods from the string on the stack. To be used % for undotting journal names, months, and juniors. Previously % \texttt{purify\$} was used for this, but that removes more than just % dots. % % May 2007, Joseph A. Wright (Morning Star, UK) contributed a revision to allow % the dot accent |\.| to be retained. % \begin{macrocode} %<*nm-rv|nm-rvx|nm-rvcx|mth-bare|jxper> STRINGS {z} FUNCTION {remove.dots} { 'z := "" { z empty$ not } { z #1 #2 substring$ duplicate$ "\." = { z #3 global.max$ substring$ 'z := * } { pop$ z #1 #1 substring$ z #2 global.max$ substring$ 'z := duplicate$ "." = 'pop$ { * } if$ } if$ } while$ } %</nm-rv|nm-rvx|nm-rvcx|mth-bare|jxper> % \end{macrocode} % \end{macro} % % \begin{macro}{`new.block.checka'} % \begin{macrocode} %<*!ay> FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } %</!ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`new.block.checkb'} % \begin{macrocode} FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`new.sentence.checka'} % \begin{macrocode} %<*!ay> FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } %</!ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`new.sentence.checkb'} % \begin{macrocode} %<*!ay> FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } %</!ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`field.or.null'} % \begin{macrocode} FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`emphasize'} % Emphasis can be either italic or the alternating font. The font command % may be NFSS or regular \LaTeX~2.09 declarations. % \begin{macrocode} FUNCTION {emphasize} %<*!em-x> { duplicate$ empty$ { pop$ "" } %<html> { "<i>" swap$ * "</i>" * } %<*!html> %<em-ul> { "\uline{" swap$ * "}" * } %<*!em-ul> %<*!nfss> %<!em-it> { "{\em " swap$ * "\/}" * } %<em-it> { "{\it " swap$ * "\/}" * } %</!nfss> %<*nfss> %<!em-it> { "\emph{" swap$ * "}" * } %<em-it> { "\textit{" swap$ * "}" * } %</nfss> %</!em-ul> %</!html> if$ } %</!em-x> %<em-x>{ skip$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`bolden'} % The bold font command may be NFSS or the regular \LaTeX~2.09 declaration. % \begin{macrocode} %<*nmft-bf|vol-bf|vol-2bf|lab-bf|dtbf|pres-bf> FUNCTION {bolden} { duplicate$ empty$ { pop$ "" } %<html> { "<b>" swap$ * "</b>" * } %<*!html> %<!nfss> { "{\bf " swap$ * "}" * } %<nfss> { "\textbf{" swap$ * "}" * } %</!html> if$ } %</nmft-bf|vol-bf|vol-2bf|lab-bf|dtbf|pres-bf> % \end{macrocode} % \end{macro} % % \begin{macro}{`scaps'} % To put text into small caps. % \begin{macrocode} %<*lab-sc|nmft-sc|pres-sc> FUNCTION {scaps} { duplicate$ empty$ { pop$ "" } %<html> { skip$ } %<*!html> %<!nfss> { "{\sc " swap$ * "}" * } %<nfss> { "\textsc{" swap$ * "}" * } %</!html> if$ } %</lab-sc|nmft-sc|pres-sc> % \end{macrocode} % \end{macro} % % \begin{macro}{`bib.name.font'} % \begin{macro}{`bib.fname.font'} % \begin{macro}{`cite.name.font'} % Define functions for formatting the author/editor names, one for the % surnames (\texttt{bib.name.font}) and one for the first names % (\texttt{bib.fname.font}). These could be identical, or the latter is % deactivated if first names are not to be formatted, only the last names. % % For citations, we have \texttt{cite.name.font}. Here only surnames appear. % % It is also possible to have a user-defined font command for each, which the % user must define in his work. These are |\bibnamefont{}| and |\bibfnamefont{}|, % and some defaults are provided that simply repeat the arguments. Two commands % are needed if \texttt{nmft-def} and \texttt{fnm-def} are both given. % % If neither \texttt{fnm-def} nor \texttt{fnm-rm} are given, then the first names % are formatted the same as the surnames. % \begin{macrocode} %<*nmft> FUNCTION {bib.name.font} %<nmft-it>{ emphasize } %<!nmft-it&nmft-bf>{ bolden } %<!nmft-it&!nmft-bf&nmft-sc>{ scaps } %<*!nmft-it&!nmft-bf&!nmft-sc&nmft-def> { duplicate$ empty$ { pop$ "" } %<!html> { "\bibnamefont{" swap$ * "}" * } %<html> { skip$ } if$ } %</!nmft-it&!nmft-bf&!nmft-sc&nmft-def> FUNCTION {bib.fname.font} %<!fnm-rm&!fnm-def>{ bib.name.font } %<fnm-rm>{ skip$ } %<*!fnm-rm&fnm-def> { duplicate$ empty$ { pop$ "" } %<!html> { "\bibfnamefont{" swap$ * "}" * } %<html> { skip$ } if$ } %</!fnm-rm&fnm-def> %</nmft> % \end{macrocode} % % \begin{macrocode} %<*lab> FUNCTION {cite.name.font} %<lab-it>{ emphasize } %<!lab-it&lab-bf>{ bolden } %<!lab-it&!lab-bf&lab-sc>{ scaps } %<*!lab-it&!lab-bf&!lab-sc&lab-def> { duplicate$ empty$ { pop$ "" } %<!html> { "\citenamefont{" swap$ * "}" * } %<html> { skip$ } if$ } %</!lab-it&!lab-bf&!lab-sc&lab-def> %</lab> % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{`tie.or.space.prefix'} % The function \texttt{tie.or.space.prefix} determines whether % the top item on the stack requires a tie character and % slips that (or a space character if not) ahead of it. % At this point a font switch or other function can be applied to % the top item on the stack, and the appropriate space found % just ahead of it on the stack. % % The sequence \texttt{tie.or.space.prefix} \texttt{*} \texttt{*} is a common idiom % for joining the top two stack objects with a tie or space % depending on the length of the top object. % % Another idiom is to apply \texttt{tie.or.space.prefix}, apply a font switch, % and then swap and join. In this case the tie or space follows the object. % \begin{macrocode} FUNCTION {tie.or.space.prefix} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`capitalize'} % 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} %<!babel>{ "u" change.case$ "t" change.case$ } %<babel>{ "\capitalize" swap$ * } % \end{macrocode} % \end{macro} % % \begin{macro}{`space.word'} % 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$ * " " * } % \end{macrocode} % \end{macro} % % \begin{macrocode} % Here are the language-specific definitions for explicit words. % Each function has a name bbl.xxx where xxx is the English word. % \end{macrocode} % % \begin{macrocode} %<*!exlang> % \end{macrocode} % % \begin{macro}{`bbl.xxx'} % 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} %<!varand|html>{ "and"} %<varand&!html>{ "\protect\BIBand{}"} FUNCTION {bbl.etal} { "et~al." } FUNCTION {bbl.editors} %<!ed>{ "editors" } %<ed>{ "eds." } FUNCTION {bbl.editor} %<!ed>{ "editor" } %<ed>{ "ed." } FUNCTION {bbl.edby} { "edited by" } FUNCTION {bbl.edition} %<!abr>{ "edition" } %<abr&!ednx>{ "edn." } %<abr&ednx>{ "ed." } FUNCTION {bbl.volume} %<!abr>{ "volume" } %<abr>{ "vol." } FUNCTION {bbl.of} { "of" } FUNCTION {bbl.number} %<!abr>{ "number" } %<abr>{ "no." } FUNCTION {bbl.nr} { "no." } FUNCTION {bbl.in} { "in" } FUNCTION {bbl.pages} %<!pp&!ppx>{ "pages" } %<pp>{ "pp." } %<!pp&ppx>{ "" } FUNCTION {bbl.page} %<!pp&!ppx>{ "page" } %<pp>{ "p." } %<!pp&ppx>{ "" } %<*revdata> FUNCTION {bbl.eidpp} { "pages" } %</revdata> FUNCTION {bbl.chapter} %<!abr>{ "chapter" } %<abr>{ "chap." } FUNCTION {bbl.techrep} %<!abr>{ "Technical Report" } %<abr>{ "Tech. Rep." } FUNCTION {bbl.mthesis} { "Master's thesis" } FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } %<*!xedn> FUNCTION {bbl.first} %<!ord>{ "First" } %<ord>{ "1st" } FUNCTION {bbl.second} %<!ord>{ "Second" } %<ord>{ "2nd" } FUNCTION {bbl.third} %<!ord>{ "Third" } %<ord>{ "3rd" } FUNCTION {bbl.fourth} %<!ord>{ "Fourth" } %<ord>{ "4th" } FUNCTION {bbl.fifth} %<!ord>{ "Fifth" } %<ord>{ "5th" } FUNCTION {bbl.st} { "st" } FUNCTION {bbl.nd} { "nd" } FUNCTION {bbl.rd} { "rd" } FUNCTION {bbl.th} { "th" } %</!xedn> %<*!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> %<*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."} %</abr> %</!babel> % \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{francaisbst.tex}. This could allow automatic % language selection. % \begin{macrocode} %<*babel> % The BABEL language selection is made here; definitions in francaisbst.tex. FUNCTION {bbl.and} { "\bbland{}"} FUNCTION {bbl.etal} { "\bbletal{}"} FUNCTION {bbl.editors} %<!ed>{ "\bbleditors{}" } %<ed>{ "\bbleds{}" } FUNCTION {bbl.editor} %<!ed>{ "\bbleditor{}" } %<ed>{ "\bbled{}" } FUNCTION {bbl.edby} { "\bbledby{}" } FUNCTION {bbl.edition} %<!abr>{ "\bbledition{}" } %<abr>{ "\bbledn{}" } FUNCTION {bbl.volume} %<!abr>{ "\bblvolume{}" } %<abr>{ "\bblvol{}" } FUNCTION {bbl.of} { "\bblof{}" } FUNCTION {bbl.number} %<!abr>{ "\bblnumber{}" } %<abr>{ "\bblno{}" } FUNCTION {bbl.nr} { "\bblno{}" } FUNCTION {bbl.in} { "\bblin{}" } FUNCTION {bbl.pages} %<!pp&!ppx>{ "\bblpages{}" } %<pp>{ "\bblpp{}" } %<!pp&ppx>{ "" } FUNCTION {bbl.page} %<!pp&!ppx>{ "\bblpage{}" } %<pp>{ "\bblp{}" } %<!pp&ppx>{ "" } FUNCTION {bbl.chapter} %<!abr>{ "\bblchapter{}" } %<abr>{ "\bblchap{}" } FUNCTION {bbl.techrep} %<!abr>{ "\bbltechreport{}" } %<abr>{ "\bbltechrep{}" } FUNCTION {bbl.mthesis} { "\bblmthesis{}" } FUNCTION {bbl.phdthesis} { "\bblphdthesis{}" } %<*revdata> FUNCTION {bbl.eidpp} { "\bbleidpp{}" } %</revdata> %<*!xedn> FUNCTION {bbl.first} %<!ord>{ "\bblfirst{}" } %<ord>{ "\bblfirsto{}" } FUNCTION {bbl.second} %<!ord>{ "\bblsecond{}" } %<ord>{ "\bblsecondo{}" } FUNCTION {bbl.third} %<!ord>{ "\bblthird{}" } %<ord>{ "\bblthirdo{}" } FUNCTION {bbl.fourth} %<!ord>{ "\bblfourth{}" } %<ord>{ "\bblfourtho{}" } FUNCTION {bbl.fifth} %<!ord>{ "\bblfifth{}" } %<ord>{ "\bblfiftho{}" } FUNCTION {bbl.st} { "\bblst{}" } FUNCTION {bbl.nd} { "\bblnd{}" } FUNCTION {bbl.rd} { "\bblrd{}" } FUNCTION {bbl.th} { "\bblth{}" } %</!xedn> 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{}"} %</babel> % \end{macrocode} % % \begin{macro}{`eng.ord'} % 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)&!xedn> 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$ } %</(english|!exlang)&!xedn> % \end{macrocode} % \end{macro} % % \begin{macrocode} %</!exlang> % \end{macrocode} % % \begin{macrocode} %</!tail> % \end{macrocode} % % \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> % \end{macrocode} % % Journal abbreviations have been revised from the original Patashnik % ones with help of Conrado Badenas and the IUA recommendations. % \begin{macrocode} %<*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. Software Eng."} MACRO {ieeetc} {"IEEE Trans. Comput."} MACRO {ieeetcad} {"IEEE Trans. Comput. Aid. Des."} MACRO {ipl} {"Inf. Process. Lett."} MACRO {jacm} {"J.~ACM"} MACRO {jcss} {"J.~Comput. Syst. Sci."} MACRO {scp} {"Sci. Comput. Program."} MACRO {sicomp} {"SIAM J. Comput."} MACRO {tocs} {"ACM Trans. Comput. Syst."} MACRO {tods} {"ACM Trans. Database Syst."} MACRO {tog} {"ACM Trans. Graphic."} MACRO {toms} {"ACM Trans. Math. Software"} MACRO {toois} {"ACM Trans. Office Inf. Syst."} MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."} MACRO {tcs} {"Theor. Comput. Sci."} %</jabr> % \end{macrocode} % % \begin{macro}{`bibinfo.check'} % Define functions that encapsulate the argument % in a \TeX\ macro that allows for further processing when the % bibliography is processed, or allows for a separate computer % program to parse the |\bibitem| contents. % % The following table summarizes how each of the \btx{} entries % is accessed for output; these are the points where % the \texttt{format.bibinfo} or \texttt{bibinfo.check} functions % are called. % \subsubsection*{Trapped via \texttt{format.bibinfo}} % \begin{description} % \item[ \texttt{author} ]\texttt{format.names} % \item[ \texttt{collaboration} ]\texttt{format.authors} % \item[ \texttt{editor} ]\texttt{format.editors} (\texttt{book}, \texttt{inbook}, \texttt{proceedings}), \texttt{format.names.ed} (\texttt{format.in.ed.booktitle}) % \item[ \texttt{eid} ]\texttt{format.journal.eid} (\texttt{format.vol.num.pages}, article) checks the output from \texttt{format.journal.pages} % \item[ \texttt{isbn} ]\texttt{format.isbn} % \item[ \texttt{issn} ]\texttt{format.issn} % \item[ \texttt{journal} ]\texttt{format.article.crossref}, article % \item[ \texttt{numpages} ]\texttt{format.journal.eid} % \item[ \texttt{organization} ]\texttt{format.organization.address} (\texttt{inproceedings}, \texttt{proceedings}), \texttt{manual} % \item[ \texttt{pages} ]\texttt{format.book}.pages (\texttt{book}, \texttt{booklet}), \texttt{format.pages} (\texttt{format.journal.pages}, \texttt{format.chapter.pages}, \texttt{article}, \texttt{inbook}, \texttt{incollection}, \texttt{inproceedings}) % \item[ \texttt{publisher} ]\texttt{format.publisher.address} (like \texttt{output.check}, \texttt{inproceedings}, \texttt{proceedings}) % \item[ \texttt{title} ]\texttt{format.title}, \texttt{format.btitle}, \texttt{misc}, \texttt{presort}, \texttt{bib.sort.order} % \item[ \texttt{volume} ]\texttt{format.bvolume}, \texttt{format.vol.num.pages}, \texttt{format.book.crossref} % \item[ \texttt{year} ]in optional argument of \texttt{\char`\\bibitem}, \texttt{format.date} (as part of date), \texttt{format.year}, \texttt{format.org.or.pub} % \item[ \texttt{booktitle} ]\texttt{format.in.ed.booktitle} (\texttt{incollection}, \texttt{inproceedings}), \texttt{format.incoll.inproc.crossref} % \item[ \texttt{howpublished} ]\texttt{booklet}, \texttt{misc} % \item[ \texttt{edition} ]\texttt{convert.edition.format.edition} % \item[ \texttt{institution} ]\texttt{techreport} % \item[ \texttt{school} ]\texttt{mastersthesis}, \texttt{phdthesis} % \item[ \texttt{address} ]\texttt{format.org.or.pub}, \texttt{booklet}, \texttt{manual}, \texttt{mastersthesis}, \texttt{phdthesis}, \texttt{techreport} % \item[ \texttt{chapter} ]\texttt{format.chapter.pages} % \item[ \texttt{number} ]\texttt{format.number.series}, \texttt{format.vol.num.pages}, \texttt{format.tr.number} % \item[ \texttt{series} ]\texttt{format.bvolume}, \texttt{format.number.series}, \texttt{format.book.crossref} % \item[ \texttt{type} ]\texttt{format.chapter.pages}, \texttt{format.thesis.type}, \texttt{format.tr.number} % \item[ \texttt{month} ]\texttt{format.date} % \item[ \texttt{note} ]\texttt{format.note} % \item[ \texttt{annote} ]\texttt{fin.entry} % \end{description} % % \subsubsection*{Encapsulated via \texttt{\char`\\url}} % \begin{description} % \item[ \texttt{url} ]\texttt{format.url} (\texttt{\char`\\harvardurl}, \texttt{\char`\\url}), \texttt{format.url} (\texttt{\char`\\url}), \texttt{format.note} (\texttt{\char`\\url}) % \end{description} % % \subsubsection*{Encapsulated via \texttt{\char`\\doi}} % \begin{description} % \item[ \texttt{doi} ]\texttt{format.doi} (\texttt{\char`\\doi}) % \end{description} % % \subsubsection*{Encapsulated via \texttt{\char`\\eprint}} % \begin{description} % \item[ \texttt{eprint} ]\texttt{format.eprint} % \item[ \texttt{archive} ]\texttt{format.eprint} % \end{description} % % \subsubsection*{Not encapsulated:} % \begin{description} % \item[ \texttt{key} ]cite key % \item[ \texttt{language} ]operand of \texttt{\char`\\selectlanguage} % \end{description} % % \subsubsection*{\texttt{bibinfo} tag, but not a \btx{} field} % \begin{description} % \item[ \texttt{date} ]\texttt{format.date} % \end{description} % % Provides robust access to fields, checking against \texttt{missing\$} % and \texttt{empty\$}. A \dtx{} option allows giving % a warning if either is the case. % % If not, it encapsulates the argument in a \TeX\ macro |\bibinfo|. % The encapsulation is enabled by the \texttt{bibinfo} \dtx{} option: % if turned off, it simply pops the unneeded object. % % \texttt{field} \texttt{string} \texttt{->} \texttt{encapsulated-field} % % \texttt{empty} \texttt{string} \texttt{->} \texttt{empty} % Side effect: warning. % \begin{macrocode} FUNCTION {bibinfo.check} { swap$ duplicate$ missing$ { %<bibinfo.warning> swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ %<!bibinfo.warning> pop$ pop$ "" } { duplicate$ empty$ { %<bibinfo.warning> swap$ "empty " swap$ * " in " * cite$ * warning$ %<!bibinfo.warning> swap$ pop$ } { swap$ %<bibinfo> "\bibinfo{" swap$ * "}{" * swap$ * "}" * %<!bibinfo> pop$ } if$ } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`bibinfo.warn'} % Replaces \texttt{output.check} % with \texttt{bibinfo.warn} followed by \texttt{output}. % % \texttt{field} \texttt{string} \texttt{->} \texttt{encapsulated-field} % % \texttt{empty} \texttt{string} \texttt{->} \texttt{empty} % % Side effect: warning if the field is empty. % Note: if the \dtx{} option \texttt{bibinfo} is not in effect, % then no encapsulation is done. % \begin{macrocode} FUNCTION {bibinfo.warn} { swap$ duplicate$ missing$ { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" } { duplicate$ empty$ { swap$ "empty " swap$ * " in " * cite$ * warning$ } { swap$ %<bibinfo> "\bibinfo{" swap$ * "}{" * swap$ * "}" * %<!bibinfo> pop$ } if$ } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.eprint'} % The access function for the \texttt{eprint} field. % % If the \texttt{bibinfo} \dtx{} option is selected, then this function % encapsulates the argument in a \TeX\ macro |\eprint|. % % \texttt{->} \texttt{encapsulated-URL} % \begin{macrocode} %<*eprint> FUNCTION {format.eprint} { eprint duplicate$ empty$ 'skip$ { "\eprint" archive empty$ 'skip$ { "[" * archive * "]" * } if$ "{" * swap$ * "}" * } if$ } %</eprint> % \end{macrocode} % \end{macro} % % \begin{macro}{`write.url'} % This function taken over from \texttt{agsm.sty}, the main \texttt{harvard} % bib style. For non-Harvard styles that want to add the URL on a new line % after the reference, use this function too, but defined slightly % differently. % \begin{macrocode} %<*(harnm|url-nl)&!revdata> FUNCTION {write.url} %<*!html> { %<*url-doi&url> doi empty$ { url } { "http://dx.doi.org/" doi * } if$ %</url-doi&url> %<!url-doi|!url> url duplicate$ empty$ { pop$ } %<harnm> { "\newline\harvardurl{" swap$ * "}" * write$ newline$ } %<!harnm&url-nl> { "\newline\urlprefix\url{" swap$ * "}" * write$ newline$ } if$ } %</!html> %<*html> { %<*url-doi&url> doi empty$ { url } { "http://dx.doi.org/" doi * } if$ %</url-doi&url> %<!url-doi|!url> url duplicate$ empty$ { pop$ } { duplicate$ "<br><a href=" quote$ * swap$ * quote$ * ">" * swap$ * "</a>" * write$ newline$ } if$ } %</html> %</(harnm|url-nl)&!revdata> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.url'} % This function is reworked for \texttt{\filename} to provide a % cleaner URL for DOIs. The definition of \cmd{\urldoi} is written in % the \texttt{.bbl} file by the function \texttt{begin.bib}. When the % package \pkg{hyperref} is loaded, the \meta{doi} is a hyperlink to % \texttt{https://doi.org/\meta{doi}}. % \begin{macrocode} %<*(url-blk&!harnm)|revdata> FUNCTION {format.url} { %<url-doi&url> doi empty$ %<url-doi&url> { url duplicate$ empty$ { pop$ "" } %<!html> { "\urlprefix\url{" swap$ * "}" * } %<html> { %<html> duplicate$ "<a href=" quote$ * swap$ * quote$ * %<html> ">" * swap$ * "</a>" * %<html> } if$ %<*url-doi&url> } { doi %<!html> "\doiprefix\urldoi{" swap$ * "}" * %<html> duplicate$ "doi:<a href=" quote$ * "https://doi.org/" * %<html> swap$ * quote$ * ">" * swap$ * "</a>" * } if$ %</url-doi&url> } %</(url-blk&!harnm)|revdata> % \end{macrocode} % \end{macro} % % \begin{macro}{`check.speaker'} % The \texttt{presentation} type uses the \texttt{key} entry to indicate which % author is the speaker, as the sequence number in the author list. The speaker's % name is put into a different font, depending on the extra option. If no font % is specified, all names are the same. % \begin{macrocode} INTEGERS { nameptr namesleft numnames } %<*pres-bf|pres-it|pres-sc> FUNCTION {check.speaker} { key empty$ 'skip$ { key nameptr int.to.str$ = { %<pres-bf> bolden %<pres-it&!pres-bf> emphasize %<pres-sc&!pres-it&!pres-bf> scaps } 'skip$ if$ } if$ } %</pres-bf|pres-it|pres-sc> % \end{macrocode} % \end{macro} % \begin{macro}{`format.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. % % The location of the junior part for reversed name is not obvious. Prior % to version 4.0, I always had it attached to the last name, as % Smith, Jr, John, put it probably is better as Smith, John, Jr. For the % AGU \texttt{nm-rev1} I always did it this way, probably because I had a % good AGU example to follow. Dilemma: do I just change them all or add an % option to do it? The option will maintain consistency with older % versions, but this could also be considered a bug fix rather than a new % feature. Solution: use the option, since I have found other \texttt{.bst} % files from Beebe and Harvard that put junior between surname and first % name. % % |bibinfo| is a variable used to store a string telling it whether the % names being formatted are authors or editors, since this function is called % for both purposes. Every call to this function must push the string onto the stack % just before the call. % \begin{macrocode} STRINGS { bibinfo} % \end{macrocode} % % Stack note: if the names argument is a non-nil list, this function returns % one object on the stack, the formatted list of names. % % \texttt{names`string} \texttt{bibinfo`string} \texttt{->} \texttt{author-list`string} % \begin{macrocode} FUNCTION {format.names} { 'bibinfo := duplicate$ empty$ 'skip$ { 's := "" 't := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr % \end{macrocode} % Here is the author formatting when the names are not set in any special % font, or when the entire name set in a single special font. % \begin{macrocode} %<*!(nmft&(fnm-rm|fnm-def))> %<*!nm-rev1&!nm-revv1> %<nm-init> "{f.~}{vv~}{ll}{, jj}" %<*!nm-init> %<nm-rev&!jnrlst> "{vv~}{ll}{, jj}{, f.}" %<nm-rev&jnrlst> "{vv~}{ll}{, f.}{, jj}" %<*!nm-rev> %<nm-rv&!jnrlst> "{vv~}{ll}{ jj}{ f{~}}" %<nm-rv&jnrlst> "{vv~}{ll}{ f{~}}{ jj}" %<*!nm-rv> %<nm-rvx&!jnrlst> "{vv~}{ll}{ jj}{ f{}}" %<nm-rvx&jnrlst> "{vv~}{ll}{ f{}}{ jj}" %<*!nm-rvx> %<nm-rvcx&!jnrlst> "{vv~}{ll}{, jj}{, f{}}" %<nm-rvcx&jnrlst> "{vv~}{ll}{, f{}}{, jj}" %<*!nm-rvcx> %<nm-rvv&!jnrlst> "{vv~}{ll}{ jj}{ f{.}.}" %<nm-rvv&jnrlst> "{vv~}{ll}{ f{.}.}{ jj}" %<*!nm-rvv> %<nm-rvvc&!jnrlst> "{vv~}{ll}{, jj}{, f{.}.}" %<nm-rvvc&jnrlst> "{vv~}{ll}{, f{.}.}{, jj}" %<*!nm-rvvc> %<nm-revf&!jnrlst> "{vv~}{ll}{, jj}{, ff}" %<nm-revf&jnrlst> "{vv~}{ll}{, ff}{, jj}" %<*!nm-revf> "{ff~}{vv~}{ll}{, jj}" %</!nm-revf> %</!nm-rvvc> %</!nm-rvv> %</!nm-rvcx> %</!nm-rvx> %</!nm-rv> %</!nm-rev> %</!nm-init> %</!nm-rev1&!nm-revv1> %<*nm-rev1> duplicate$ #1 > { "{f.~}{vv~}{ll}{, jj}" } %<!jnrlst> { "{vv~}{ll}{, jj}{, f.}" } %<jnrlst> { "{vv~}{ll}{, f.}{, jj}" } if$ %</nm-rev1> %<*!nm-rev1&nm-revv1> duplicate$ #1 > { "{ff~}{vv~}{ll}{, jj}" } %<!jnrlst> { "{vv~}{ll}{, jj}{, ff}" } %<jnrlst> { "{vv~}{ll}{, ff}{, jj}" } if$ %</!nm-rev1&nm-revv1> format.name$ %<nm-rv|nm-rvx> remove.dots %<nmft&nmand-rm> bib.name.font %</!(nmft&(fnm-rm|fnm-def))> % \end{macrocode} % Here is the author formatting when the first and last names are % set in (possibly different) special fonts. % % The junior part is optionally between the reversed names, or after them. % \begin{macrocode} %<*nmft&(fnm-rm|fnm-def)> %<*!nm-rev1&!nm-revv1> %<*nm-init> "{f.}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ %</nm-init> %<*!nm-init> %<*nm-rev> "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj, }{f.}" %<jnrlst> "{f.}{, jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ %</nm-rev> %<*!nm-rev> %<*nm-rv> "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj }{f{~}}" %<jnrlst> "{f{~}}{ jj}" format.name$ duplicate$ empty$ 'skip$ { remove.dots bib.fname.font " " swap$ * } if$ %</nm-rv> %<*!nm-rv> %<*nm-rvx> "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj }{f{}}" %<jnrlst> "{f{}}{ jj}" format.name$ duplicate$ empty$ 'skip$ { remove.dots bib.fname.font " " swap$ * } if$ %</nm-rvx> %<*!nm-rvx> %<*nm-rvcx> "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj, }{f{}}" %<jnrlst> "{f{}}{, jj}" format.name$ duplicate$ empty$ 'skip$ { remove.dots bib.fname.font ", " swap$ * } if$ %</nm-rvcx> %<*!nm-rvcx> %<*nm-rvv> "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj }{f{.}.}" %<jnrlst> "{f{.}.}{ jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font " " swap$ * } if$ %</nm-rvv> %<*!nm-rvv> %<*nm-rvvc> "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj, }{f{.}.}" %<jnrlst> "{f{.}.}{, jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ %</nm-rvvc> %<*!nm-rvvc> %<*nm-revf> "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj, }{ff}" %<jnrlst> "{ff}{, jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ %</nm-revf> %<*!nm-revf> "{ff}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ %</!nm-revf> %</!nm-rvvc> %</!nm-rvv> %</!nm-rvcx> %</!nm-rvx> %</!nm-rv> %</!nm-rev> %</!nm-init> %</!nm-rev1&!nm-revv1> %<*nm-rev1> nameptr #1 > { "{f.}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ } { "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj, }{f.}" %<jnrlst> "{f.}{, jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ } if$ %</nm-rev1> %<*!nm-rev1&nm-revv1> nameptr #1 > { "{ff}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ } { "{vv~}{ll}" format.name$ bib.name.font s nameptr %<!jnrlst> "{jj, }{ff}" %<jnrlst> "{ff}{, jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ } if$ %</!nm-rev1&nm-revv1> * %</nmft&(fnm-rm|fnm-def)> bibinfo bibinfo.check %<*pres-bf|pres-it|pres-sc> type$ "presentation" = { check.speaker } 'skip$ if$ %</pres-bf|pres-it|pres-sc> 't := nameptr #1 > { %<*nmlm> %<m1> nameptr #1 %<m2> nameptr #2 %<m3> nameptr #3 %<m4> nameptr #4 %<m5> nameptr #5 %<m6> nameptr #6 %<m7> nameptr #7 %<m8> nameptr #8 %<m9> nameptr #9 %<m0> nameptr #0 %<m10> #10 + %<m20> #20 + %<m30> #30 + %<m40> #40 + %<m50> #50 + %<m60> #60 + %<m70> #70 + %<m80> #80 + %<m90> #90 + #1 + = %<x1> numnames #1 %<x2> numnames #2 %<x3> numnames #3 %<x4> numnames #4 %<x5> numnames #5 %<x6> numnames #6 %<x7> numnames #7 %<x8> numnames #8 %<x9> numnames #9 %<x0> numnames #0 %<x10> #10 + %<x20> #20 + %<x30> #30 + %<x40> #40 + %<x50> #50 + %<x60> #60 + %<x70> #70 + %<x80> #80 + %<x90> #90 + > and { "others" 't := #1 'namesleft := } 'skip$ if$ %</nmlm> namesleft #1 > %<!aunm-semi&!aunm-sl> { ", " * t * } %<aunm-semi> { "; " * t * } %<aunm-sl&!aunm-semi> { "/ " * t * } { s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ %<(and-com|xand)&!aunm-semi&!aunm-sl> "," * %<(and-com|xand)&aunm-semi> ";" * %<(and-com|xand)&aunm-sl&!aunm-semi> "/" * %<*!and-xcom&!and-com&!xand> numnames #2 > %<etal-xc> t "others" = not and %<!aunm-semi&!aunm-sl> { "," * } %<aunm-semi> { ";" * } %<aunm-sl&!aunm-semi> { "/" * } 'skip$ if$ %</!and-xcom&!and-com&!xand> t "others" = { %<nmft&!nmand-rm&!(fnm-rm|fnm-def)&(etal-it|etal-rm)> bib.name.font %<*!etal-it> %<nmft&(nmand-rm|(fnm-rm|fnm-def))&!etal-rm> " " * bbl.etal bib.name.font * %<!(nmft&(nmand-rm|(fnm-rm|fnm-def)))|etal-rm> " " * bbl.etal * %</!etal-it> %<etal-it> " " * bbl.etal emphasize * %<nmft&!nmand-rm&!(fnm-rm|fnm-def)&!(etal-it|etal-rm)> bib.name.font } %<*!xand> { %<*!harnm> %<!amper> bbl.and %<amper> "\&" %</!harnm> %<harnm> "\harvardand{}" %<nmft&!nmand-rm&(fnm-rm|fnm-def)> bib.name.font space.word * t * } %</!xand> %<xand> { " " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ %<*nmft&!nmand-rm&!(fnm-rm|fnm-def)> t "others" = 'skip$ { bib.name.font } if$ %</nmft&!nmand-rm&!(fnm-rm|fnm-def)> } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.names.ed'} % 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 to 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{ed-au} is identical to \texttt{ed-rev}, but is more % logical. It means editors (in incollections) are formatted exactly like % authors, with all the font, reversing, and number limitations. This is % selected automatically with \texttt{nm-init} and \texttt{nm-} default to save % programming memory. % % 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 options \texttt{aunm-semi} and \texttt{aunm-sl} will put a semi-colon or % slash between editor names, just as for authors, when \texttt{ed-rev} not % selected, in keeping with the idea that in this case both authors and editors % are to be formatted the same. % % This function either dispatches to \texttt{format.names} or executes code % which is similar. In the latter case, names are always presented first % followed by surname (``last name''); name limit processing (\texttt{nmlm}) is not executed; % and endgame processing differs in being qualified by \texttt{nmfted}. % % Stack note: if the names (second) argument is a non-nil list, this function returns % with one object on the stack, the formatted list of names. % % \texttt{names`string} \texttt{bibinfo`string} \texttt{->} \texttt{author-list`string} % \begin{macrocode} FUNCTION {format.names.ed} { %<ed-rev|ed-au> format.names %<*!ed-rev&!ed-au> 'bibinfo := duplicate$ empty$ 'skip$ { 's := "" 't := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr % \end{macrocode} % Editor name is handled as a single object, with no separation of first and last name. % \begin{macrocode} %<*!(nmft&nmfted&(fnm-rm|fnm-def))> %<nm-init|nm-rev|nm-rev1> "{f.~}{vv~}{ll}{, jj}" %<*!nm-init&!nm-rev&!nm-rev1> %<nm-revv1> "{ff~}{vv~}{ll}{, jj}" %<*!nm-revv1> %<nm-rv> "{f{~}~}{vv~}{ll}{ jj}" %<*!nm-rv> %<nm-rvx> "{f{}~}{vv~}{ll}{ jj}" %<*!nm-rvx> %<nm-rvcx> "{f{}~}{vv~}{ll}{ jj}" %<*!nm-rvcx> %<nm-rvv|nm-rvvc> "{f{.}.~}{vv~}{ll}{ jj}" %<*!nm-rvv&!nm-rvvc> "{ff~}{vv~}{ll}{, jj}" %</!nm-rvv&!nm-rvvc> %</!nm-rvcx> %</!nm-rvx> %</!nm-rv> %</!nm-revv1> %</!nm-init&!nm-rev&!nm-rev1> format.name$ %<nm-rv|nm-rvx|nm-rvcx> remove.dots %<nmft&nmfted&nmand-rm> bib.name.font %</!(nmft&nmfted&(fnm-rm|fnm-def))> % \end{macrocode} % Editor first and last name handled separately. % \begin{macrocode} %<*(nmft&nmfted&(fnm-rm|fnm-def))> %<*nm-init|nm-rev|nm-rev1> "{f.}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ %</nm-init|nm-rev|nm-rev1> %<*!nm-init&!nm-rev&!nm-rev1> %<*nm-revv1> "{ff}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ %</nm-revv1> %<*!nm-revv1> %<*nm-rv> "{f{~}}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { remove.dots bib.fname.font " " swap$ * } if$ %</nm-rv> %<*!nm-rv> %<*nm-rvx|nm-rvcx> "{f{}}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { remove.dots bib.fname.font " " swap$ * } if$ %</nm-rvx|nm-rvcx> %<*!nm-rvx&!nm-rvcx> %<*nm-rvv|nm-rvvc> "{f{.}.}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font " " swap$ * } if$ %</nm-rvv|nm-rvvc> %<*!nm-rvv&!nm-rvvc> "{ff}" format.name$ duplicate$ empty$ 'skip$ { tie.or.space.prefix bib.fname.font swap$ * } if$ s nameptr "{vv~}{ll}" format.name$ bib.name.font * s nameptr "{jj}" format.name$ duplicate$ empty$ 'skip$ { bib.fname.font ", " swap$ * } if$ %</!nm-rvv&!nm-rvvc> %</!nm-rvx&!nm-rvcx> %</!nm-rv> %</!nm-revv1> %</!nm-init&!nm-rev&!nm-rev1> * %</(nmft&nmfted&(fnm-rm|fnm-def))> bibinfo bibinfo.check 't := nameptr #1 > { namesleft #1 > %<!aunm-semi&!aunm-sl> { ", " * t * } %<aunm-semi> { "; " * t * } %<aunm-sl&!aunm-semi> { "/ " * t * } { s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ %<(and-com-ed|xand)&!aunm-semi&!aunm-sl> "," * %<(and-com-ed|xand)&aunm-semi> ";" * %<(and-com-ed|xand)&aunm-sl&!aunm-semi> "/" * %<*!and-xcom&!and-com-ed&!xand> numnames #2 > %<etal-xc> t "others" = not and %<!aunm-semi&!aunm-sl> { "," * } %<aunm-semi> { ";" * } %<aunm-sl&!aunm-semi> { "/" * } 'skip$ if$ %</!and-xcom&!and-com-ed&!xand> t "others" = { %<nmft&nmfted&!nmand-rm&!(fnm-rm|fnm-def)&(etal-it|etal-rm)> bib.name.font %<*!etal-it> %<nmft&nmfted&(nmand-rm|(fnm-rm|fnm-def))&!etal-rm> " " * bbl.etal bib.name.font * %<!(nmft&nmfted&(nmand-rm|(fnm-rm|fnm-def)))|etal-rm> " " * bbl.etal * %</!etal-it> %<etal-it> " " * bbl.etal emphasize * %<nmft&nmfted&!nmand-rm&!(fnm-rm|fnm-def)&!(etal-it|etal-rm)> bib.name.font } %<*!xand> { %<*!harnm> %<!amper> bbl.and %<amper> "\&" %</!harnm> %<harnm> "\harvardand{}" %<nmft&nmfted&!nmand-rm&(fnm-rm|fnm-def)> bib.name.font space.word * t * } %</!xand> %<xand> { " " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ %<*nmft&nmfted&!nmand-rm&!(fnm-rm|fnm-def)> t "others" = 'skip$ { bib.name.font } if$ %</nmft&nmfted&!nmand-rm&!(fnm-rm|fnm-def)> } if$ %</!ed-rev&!ed-au> } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.key'} % \begin{macrocode} %<*ay> FUNCTION {format.key} { empty$ { key field.or.null } { "" } if$ } %</ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.authors'} % % \begin{macrocode} FUNCTION {format.authors} { author "author" format.names %<*revdata> duplicate$ empty$ 'skip$ { collaboration "collaboration" bibinfo.check duplicate$ empty$ 'skip$ { " (" swap$ * ")" * } if$ * } if$ %</revdata> } % \end{macrocode} % \end{macro} % % \begin{macro}{`get.bbl.editor'} % Use this function universally when accessing the ``editor'' text entity. % \begin{macrocode} FUNCTION {get.bbl.editor} { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.editors'} % 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. % % Note that the code here is very similar to code in \texttt{format.in.ed.booktitle}; % the two should be kept coordinated. % \begin{macrocode} FUNCTION {format.editors} { editor "editor" format.names duplicate$ empty$ 'skip$ { %<!edpar&!edparxc> "," * " " * get.bbl.editor %<bkedcap> capitalize %<edpar|edparc|edparxc> "(" swap$ * ")" * * } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.in.editors'} % See the note about the option \texttt{edpar} above. % % \end{macro} % % \begin{macro}{`format.book.pages'} % \begin{macrocode} %<*pg-bk> FUNCTION {format.book.pages} { pages "pages" bibinfo.check duplicate$ empty$ 'skip$ { " " * bbl.pages * } if$ } %</pg-bk> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.isbn'} % \begin{macrocode} %<*isbn> FUNCTION {format.isbn} { isbn "isbn" bibinfo.check duplicate$ empty$ 'skip$ { %<!blk-com&!blk-tit&!blk-tita> new.block "ISBN " swap$ * } if$ } %</isbn> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.issn'} % \begin{macrocode} %<*issn> FUNCTION {format.issn} { issn "issn" bibinfo.check duplicate$ empty$ 'skip$ { %<!blk-com&!blk-tit&!blk-tita> new.block "ISSN " swap$ * } if$ } %</issn> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.doi'} % DOIs like URLs are encapsulated by their own commands, so need no \texttt{bibinfo.check}. % \begin{macrocode} %<*doi|(url-doi&!url)> FUNCTION {format.doi} { doi empty$ { "" } { %<!blk-com&!blk-tit&!blk-tita> new.block %<!html> "\doi{" doi * "}" * %<html> "doi:" doi * } if$ } %</doi|(url-doi&!url)> % \end{macrocode} % \end{macro} % % \begin{macro}{`select.language'} % The \texttt{language} field code has been provided by Bernd Feige, of the % University of Freiburg. % \begin{macrocode} %<*lang> FUNCTION {select.language} { duplicate$ empty$ 'pop$ { language empty$ 'skip$ { "{\selectlanguage{" language * "}" * swap$ * "}" * } if$ } if$ } %</lang> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.note'} % Notes should be entered as though they were a sentence on their own. % However, if they appear mid-sentence rather than after a block or sentence, % the first letter must be lowercase. Thus if a note begins with a proper % noun, it must be in braces. To avoid a warning about unmatched braces % with the \texttt{change.case\$} function, check first if the leading % character is an opening brace. % % With options \texttt{url,url-nt}, the URL text is treated as a note, and % added here. It is output directly, not prepended to the note text. This % means, if the note is to be a new sentence, the URL text starts that % sentence, and the regular note is added to that sentence, comma between. % % \begin{macrocode} FUNCTION {format.note} { %<*url-nt&!revdata> url empty$ 'skip$ %<!html> { "\urlprefix\url{" url * "}" * output } %<html> { "<a href=" quote$ * url * quote$ %<html> * ">" * url * "</a>" * output } if$ %</url-nt&!revdata> note empty$ { "" } { note #1 #1 substring$ duplicate$ "{" = 'skip$ { output.state mid.sentence = { "l" } { "u" } if$ change.case$ } if$ note #2 global.max$ substring$ * "note" bibinfo.check } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.title'} % For a quoted title, any punctuation in the title goes inside the quote. % Otherwise, the comma or period following the title also goes inside. % Exception is with \texttt{qx} option, in which case the comma goes % outside, even when punctuation present; for period (\texttt{!blk-com}) % is added outside only when punctuation is absent. % \begin{macrocode} FUNCTION {format.title} { title %<*!atit-u> duplicate$ empty$ 'skip$ { "t" change.case$ } if$ %</!atit-u> "title" bibinfo.check %<*tit-it|tit-qq|lang> duplicate$ empty$ 'skip$ { %<tit-it> emphasize %<*!tit-it&tit-qq> "\enquote{" swap$ * %<*!qx> %<*blk-com> non.stop %<!com-semi&!com-blank> { ",} " * } %<com-semi> { ";} " * } %<!com-semi&com-blank> { "} " * } { "} " * } if$ %</blk-com> %<!blk-com> add.period$ "}" * %</!qx> %<*qx> %<*blk-com> %<!com-semi&!com-blank> "}, " * %<com-semi> "}; " * %<!com-semi&com-blank> "} " * %</blk-com> %<!blk-com> "}" * %</qx> %</!tit-it&tit-qq> %<lang> select.language } if$ %</tit-it|tit-qq|lang> } % \end{macrocode} % \end{macro} % % \begin{macro}{`end.quote.title'} % 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-qq> FUNCTION {end.quote.title} { title empty$ 'skip$ { before.all 'output.state := } if$ } %</blk-com&tit-qq> % \end{macrocode} % \end{macro} % % \begin{macro}{`end.quote.btitle'} % Similar to |end.quote.title| except that it is only applied if titles of % proceedings and collections are quoted, and if % neither \texttt{edby}, \texttt{edby-par}, nor \texttt{edby-par} are selected % (this is the default case in the relevant menu of the \texttt{makebst.tex} run). % These options add text after the booktitle, % so additional punctuation need not be suppressed. Unless there is no editor! % % Note: this function is called after the result of \texttt{format.in.ed.booktitle} % has been output, and attempts to predict what that output had been. % Would it not be better to call this function while that result is still % on the stack? % \begin{macrocode} %<*bt-qq> FUNCTION {end.quote.btitle} { booktitle empty$ 'skip$ %<!edby&!edby-par&!edby-parc> { before.all 'output.state := } %<*edby|edby-par|edby-parc> { editor empty$ { before.all 'output.state := } 'skip$ if$ } %</edby|edby-par|edby-parc> if$ } %</bt-qq> % \end{macrocode} % \end{macro} % % \begin{macro}{`make.full.names'} % 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 := "" 't := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr %<!jnrlab> "{vv~}{ll}" format.name$ %<*jnrlab> %<!nm-rv&!nm-rvv&!nm-rvx&!nm-rvcx> "{vv~}{ll}{, jj}" format.name$ %<nm-rv|nm-rvv|nm-rvx|nm-rvcx> "{vv~}{ll}{ jj}" format.name$ %</jnrlab> %<lab&and-rm> cite.name.font 't := nameptr #1 > { %<*nmlm> %<m1> nameptr #1 %<m2> nameptr #2 %<m3> nameptr #3 %<m4> nameptr #4 %<m5> nameptr #5 %<m6> nameptr #6 %<m7> nameptr #7 %<m8> nameptr #8 %<m9> nameptr #9 %<m0> nameptr #0 %<m10> #10 + %<m20> #20 + %<m30> #30 + %<m40> #40 + %<m50> #50 + %<m60> #60 + %<m70> #70 + %<m80> #80 + %<m90> #90 + #1 + = %<x1> numnames #1 %<x2> numnames #2 %<x3> numnames #3 %<x4> numnames #4 %<x5> numnames #5 %<x6> numnames #6 %<x7> numnames #7 %<x8> numnames #8 %<x9> numnames #9 %<x0> numnames #0 %<x10> #10 + %<x20> #20 + %<x30> #30 + %<x40> #40 + %<x50> #50 + %<x60> #60 + %<x70> #70 + %<x80> #80 + %<x90> #90 + > and { "others" 't := #1 'namesleft := } 'skip$ if$ %</nmlm> namesleft #1 > { ", " * t * } { s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ t "others" = { %<lab&!and-rm&(etal-it|etal-rm)> cite.name.font %<*!etal-it> %<lab&and-rm&!etal-rm> " " * bbl.etal cite.name.font * %<!lab|!and-rm|etal-rm> " " * bbl.etal * %</!etal-it> %<etal-it> " " * bbl.etal emphasize * %<lab&!and-rm&!(etal-it|etal-rm)> cite.name.font } { %<*!harnm> %<*!and-xcom> numnames #2 > { "," * } 'skip$ if$ %</!and-xcom> %<!amper> bbl.and %<amper> "\&" %</!harnm> %<harnm> "\harvardand{}" space.word * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ %<*lab&!and-rm> t "others" = 'skip$ { cite.name.font } if$ %</lab&!and-rm> } 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$ } %</har|cay|nat> % \end{macrocode} % \end{macro} % % \begin{macro}{`output.bibitem'} % A user has pointed out to me that if the label argument in square brackets % are put into braces (within the squares) it is then resistent to any % problems if square braces should appear within the label. Do this, but % only for the \texttt{nat} option. % \begin{macrocode} FUNCTION {output.bibitem} { newline$ %<*!html> %<*ay> %<!har&!nat> "\bibitem[" write$ %<!har&nat> "\bibitem[{" write$ %<har> "\harvarditem" write$ %<nmd> "\protect\citeauthoryear{" write$ %<ast> "\protect\astroncite{" write$ %<cay> "\protect\citeauthoryear{" make.full.names * "}{" * write$ %<cn> "\protect\citename{" write$ %<!har> label write$ %<har> make.full.names duplicate$ label = %<har> 'skip$ %<har> { "[" label * "]" * write$ } %<har> if$ %<har> "{" swap$ * "}{" * write$ %<har> year duplicate$ empty$ %<cn> ", }" year duplicate$ empty$ %<cay|nmd|ast> "}{" year duplicate$ empty$ %<(har|cn|cay|nmd|ast)&blkyear> { pop$ "" } %<(har|cn|cay|nmd|ast)&!blkyear> { pop$ "????" } %<har|cn|cay|nmd|ast> 'skip$ %<har|cn|cay|nmd|ast> if$ %<har> extra.label * "}{" * write$ %<cn> * extra.label * "]{" * write$ %<cay|nmd|ast> * extra.label * "}]{" * write$ %<alk> "]{" write$ %<!(har|cay|nmd|ast|alk|cn|nat)> ")]{" write$ %<nat> ")" make.full.names duplicate$ short.list = %<nat> { pop$ } %<nat> { * } %<nat> if$ %<nat> "}]{" * write$ %</ay> %<!ay&!(cite|alph)> "\bibitem{" write$ %<!ay&(cite|alph)> "\bibitem[" label * "]{" * write$ cite$ write$ "}" write$ newline$ "" %</!html> %<*html> %<*htdes> "<dt><strong><tt>" write$ cite$ write$ "</tt></strong></dt>" write$ newline$ "<dd>" %</htdes> %<htlist&!htdes> "<li>" %<!htlist&!htdes> "<p>" %</html> before.all 'output.state := } % \end{macrocode} % \end{macro} % % \begin{macro}{`if.digit'} % Add \texttt{if.digit} and \texttt{n.separate} to convert large page numbers % to a separated number. % \begin{macrocode} %<*pgsep-c|pgsep-s|pgsep-p> FUNCTION {if.digit} { duplicate$ "0" = swap$ duplicate$ "1" = swap$ duplicate$ "2" = swap$ duplicate$ "3" = swap$ duplicate$ "4" = swap$ duplicate$ "5" = swap$ duplicate$ "6" = swap$ duplicate$ "7" = swap$ duplicate$ "8" = swap$ "9" = or or or or or or or or or } % \end{macrocode} % \end{macro} % % \begin{macro}{`n.separate'} % \texttt{pgsep-s}, \texttt{pgsep-p} % Large page numbers are to be separated in threes, with thin space, comma % or period. The number must be 5 digits before the separation occurs. % No provision is made for numbers of 7 or more digits. % \begin{macrocode} FUNCTION {n.separate} { 't := "" #0 'numnames := { t empty$ not } { t #-1 #1 substring$ if.digit { numnames #1 + 'numnames := } { #0 'numnames := } if$ t #-1 #1 substring$ swap$ * t #-2 global.max$ substring$ 't := numnames #5 = { duplicate$ #1 #2 substring$ swap$ #3 global.max$ substring$ %<pgsep-c> "," swap$ * * %<pgsep-p> "." swap$ * * %<pgsep-s&!html> "\," swap$ * * %<pgsep-s&html> " " swap$ * * } 'skip$ if$ } while$ } %</pgsep-c|pgsep-s|pgsep-p> % \end{macrocode} % \end{macro} % % \begin{macro}{`n.dashify'} % \begin{macrocode} FUNCTION {n.dashify} { %<pgsep-c|pgsep-s|pgsep-p> n.separate '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} % \end{macro} % % \begin{macro}{`word.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. % \begin{macrocode} FUNCTION {word.in} %<in-x>{ "" } %<*!in-x> %<blk-com|blk-tita>{ bbl.in %<!blk-com&!blk-tita>{ bbl.in capitalize %<in-col> ":" * %<in-it> emphasize " " * } %</!in-x> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.date'} % 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, except for the preceding punctuation. % \begin{macrocode} %<*ay> FUNCTION {format.date} { year "year" bibinfo.check duplicate$ empty$ { %<*!blkyear> "empty year in " cite$ * "; set to ????" * warning$ pop$ "????" %</!blkyear> } 'skip$ if$ %<*aymth> month "month" bibinfo.check duplicate$ empty$ 'skip$ { %<dtrev> swap$ " " * swap$ } if$ * %<mth-bare> remove.dots %</aymth> %<dtbf> bolden extra.label * %<*!harnm> %<*yr-par|yr-brk|yr-col|yr-blk|yr-com|yr-per> before.all 'output.state := %<yr-par> " (" swap$ * ")" * %<!yr-par&yr-brk> " [" swap$ * "]" * %<!yr-par&!yr-brk&yr-col> ": " swap$ * %<!yr-par&!yr-brk&!yr-col&yr-com> ", " swap$ * %<!yr-par&!yr-brk&!yr-col&!yr-com&yr-per> after.sentence 'output.state := %<!yr-par&!yr-brk&!yr-col&!yr-com&!yr-per&yr-blk> " " swap$ * %</yr-par|yr-brk|yr-col|yr-blk|yr-com|yr-per> %</!harnm> %<*harnm> before.all 'output.state := " \harvardyearleft " swap$ * "\harvardyearright{}" * %<yr-col> ":" swap$ * %<!yr-col&yr-com> "," swap$ * %<!yr-col&!yr-com&yr-per> after.sentence 'output.state := %<!yr-col&!yr-com&!yr-per&yr-blk> " " swap$ * %</harnm> } %</ay> %<*!ay> FUNCTION {format.date} { %<!xmth> month "month" bibinfo.check %<xmth> "" duplicate$ empty$ year "year" bibinfo.check duplicate$ empty$ { swap$ 'skip$ { "there's a month but no year in " cite$ * warning$ } if$ * } { swap$ 'skip$ { %<showstack> month year %<!dtrev> swap$ " " * swap$ } if$ * %<mth-bare> remove.dots } if$ %<dtbf> bolden %<*yr-par|yr-brk|yr-col|yr-com|yr-per|yr-blk> duplicate$ empty$ 'skip$ { before.all 'output.state := %<yr-par> " (" swap$ * ")" * %<!yr-par&yr-brk> " [" swap$ * "]" * %<!yr-par&!yr-brk&yr-col> ": " swap$ * %<!yr-par&!yr-brk&!yr-col&yr-com> ", " swap$ * %<!yr-par&!yr-brk&!yr-col&!yr-com&yr-per> after.sentence 'output.state := %<!yr-par&!yr-brk&!yr-col&!yr-com&!yr-per&yr-blk> " " swap$ * } if$ %</yr-par|yr-brk|yr-col|yr-com|yr-per|yr-blk> } %</!ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.year'} % For the options that put the year into the journal specifications, use a % special formatter separate from the regular date formatter. % The year is always in parentheses (except for appended to journal name). % \begin{macrocode} %<*jdt-p|jdt-pc|jdt-v|jdt-vs> FUNCTION{format.year} { year "year" bibinfo.check duplicate$ empty$ { "empty year in " cite$ * %<ay&!blkyear> "; set to ????" * warning$ %<ay&!blkyear> pop$ "????" } { %<!ay&jdt-vs> " (" swap$ * ")" * %<!ay&!jdt-vs> "(" swap$ * ")" * } if$ %<*ay> extra.label * %<jdt-vs> " (" swap$ * ")" * %<!jdt-vs> "(" swap$ * ")" * %</ay> } %</jdt-p|jdt-pc|jdt-v|jdt-vs> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.btitle'} % \begin{macrocode} FUNCTION {format.btitle} { title "title" bibinfo.check duplicate$ empty$ 'skip$ { %<!btit-rm> emphasize %<lang> select.language } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`either.or.check'} % \begin{macrocode} FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.bvolume'} % \begin{macrocode} FUNCTION {format.bvolume} { volume empty$ { "" } { bbl.volume volume tie.or.space.prefix "volume" bibinfo.check * * series "series" bibinfo.check duplicate$ empty$ 'pop$ %<*!ser-vol> { swap$ bbl.of space.word * swap$ emphasize * } %</!ser-vol> %<ser-vol> { emphasize ", " * swap$ * } if$ "volume and number" number either.or.check } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.number.series'} % \begin{macrocode} FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } %<*num-xser> { series empty$ { number "number" bibinfo.check } { output.state mid.sentence = { bbl.number } { bbl.number capitalize } if$ number tie.or.space.prefix "number" bibinfo.check * * bbl.in space.word * series "series" bibinfo.check * } if$ } %</num-xser> %<*!num-xser> { output.state mid.sentence = { bbl.number } { bbl.number capitalize } if$ number tie.or.space.prefix "number" bibinfo.check * * series empty$ { "there's a number but no series in " cite$ * warning$ } { bbl.in space.word * series "series" bibinfo.check * } if$ } %</!num-xser> if$ } { "" } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`is.num'} % This function takes the single-character string on the stack and returns % 1 if it is a digit, else 0. % \begin{macrocode} %<*!xedn> 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'} % 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 \code{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'} % 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} { 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 %<!english&exlang> { s bbl.th * 't := } %<english|!exlang> { s eng.ord 't := } { edition 't := } if$ } if$ } if$ } if$ } if$ } if$ t } %</!xedn> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.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 duplicate$ empty$ 'skip$ { %<!xedn> convert.edition output.state mid.sentence = { "l" } { "t" } if$ change.case$ "edition" bibinfo.check " " * bbl.edition * } if$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} INTEGERS { multiresult } % \end{macrocode} % % \begin{macro}{`multi.page.check'} % \begin{macrocode} 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} % \end{macro} % % \begin{macro}{`format.pages'} % \begin{macrocode} FUNCTION {format.pages} { pages duplicate$ empty$ 'skip$ { duplicate$ multi.page.check { %<!bkpg-x&!ppx> bbl.pages swap$ n.dashify } { %<!bkpg-x&!ppx> bbl.page swap$ } if$ %<!bkpg-x&!ppx> tie.or.space.prefix "pages" bibinfo.check %<!bkpg-x&!ppx> * * %<bkpg-par> "(" swap$ * ")" * } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`first.page'} % \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$ } %</jpg-1> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.journal.pages'} % Note: this function gets called with something on the stack. % It may be the volume and number. % \begin{macrocode} FUNCTION {format.journal.pages} { pages duplicate$ empty$ 'pop$ { swap$ duplicate$ empty$ { pop$ pop$ format.pages } { %<volp-sp> ": " * %<*!volp-sp> %<volp-blk> " " * %<*!volp-blk> %<volp-com> ", " * %<*!volp-com> %<volp-semi> "; " * %<!volp-semi> ":" * %</!volp-com> %</!volp-blk> %</!volp-sp> %<!jdt-v&!jdt-vs&jdt-p> format.year * " " * %<!jdt-v&!jdt-vs&!jdt-p&jdt-pc> format.year * ", " * swap$ %<jpg-1> first.page %<!jpg-1> n.dashify %<*jwdpg> pages multi.page.check 'bbl.pages 'bbl.page if$ swap$ tie.or.space.prefix %</jwdpg> "pages" bibinfo.check %<jwdpg> * * * } if$ } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.journal.eid'} % % This function is called with something on the stack (journal vol, number) % and appends \texttt{eid} and \texttt{numpages} if those field are non-empty. % Very similar to \texttt{format.journal.pages}. % % For the AGU style of including the DOI as part of the EID, the DOI number % is appended too. % \begin{macrocode} FUNCTION {format.journal.eid} { eid "eid" bibinfo.check duplicate$ empty$ 'pop$ { swap$ duplicate$ empty$ 'skip$ { %<volp-sp> ": " * %<*!volp-sp> %<volp-blk> " " * %<*!volp-blk> %<volp-com> ", " * %<*!volp-com> %<volp-semi> "; " * %<!volp-semi> ":" * %</!volp-com> %</!volp-blk> %</!volp-sp> } if$ swap$ * %<*revdata> numpages empty$ 'skip$ { bbl.eidpp numpages tie.or.space.prefix "numpages" bibinfo.check * * " (" swap$ * ")" * * } if$ %</revdata> } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.vol.num.pages'} % Version 3.84, I have rationalized several options that placed the date in the % journal specifications. It was rather chaotic before, but now it should be % more systematic. This means some options have been removed, something that I % do not like to do. % % The option \texttt{pp-last} suppresses 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 duplicate$ empty$ 'skip$ { %<jwdvol> bbl.volume swap$ tie.or.space.prefix "volume" bibinfo.check %<jwdvol> * * } if$ %<vol-bf&!vol-2bf> bolden %<!vol-bf&!vol-2bf&vol-it> emphasize %<jdt-v|jdt-vs> format.year * %<*!vnum-x> number "number" bibinfo.check duplicate$ empty$ 'skip$ { swap$ duplicate$ empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ swap$ %<vnum-sp> "~(" swap$ * ")" * %<!vnum-sp&vnum-cm> ", " swap$ * %<!vnum-sp&!vnum-cm&vnum-nr> ", " bbl.nr * number tie.or.space.prefix pop$ * swap$ * %<!vnum-sp&!vnum-cm&!vnum-nr&vnum-h> ", \#" swap$ * %<!vnum-sp&!vnum-cm&!vnum-nr&!vnum-h&vnum-b> " " swap$ * %<!vnum-sp&!vnum-cm&!vnum-nr&!vnum-h&!vnum-b> "(" swap$ * ")" * } if$ * %<!vol-bf&vol-2bf> bolden %</!vnum-x> %<*!pp-last> eid empty$ { format.journal.pages } { format.journal.eid } if$ %</!pp-last> } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.chapter.pages'} % \begin{macrocode} FUNCTION {format.chapter.pages} { chapter empty$ %<!pp-last> 'format.pages %<pp-last> { "" } { type empty$ { bbl.chapter } { type "l" change.case$ "type" bibinfo.check } if$ chapter tie.or.space.prefix "chapter" bibinfo.check * * %<*!pp-last> pages empty$ 'skip$ { ", " * format.pages * } if$ %</!pp-last> } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`bt.enquote'} % This is to place the booktitle for proceedings and collections into quotes. % If punctuation is to be included, then add a comma unless a stop already % exists, or add a period under the only circumstances that % |format.in.ed.booktitle| is followed by |new.sentence|. % \begin{macrocode} %<*bt-qq> FUNCTION {bt.enquote} { duplicate$ empty$ 'skip$ { "\enquote{" swap$ * %<*!qx> non.stop { ",} " * } { "}, " * } if$ %</!qx> %<*qx> "}, " * %</qx> } if$ } %</bt-qq> % \end{macrocode} % % \end{macro} % % \begin{macro}{`format.booktitle'} % The function \texttt{format.booktitle} pushes one object % (the book title, suitably encapsulated) onto the stack. % It is currently used in \texttt{format.incoll.inproc.crossref} % and in \texttt{format.in.ed.booktitle}, and should be used whenever accessing % the \texttt{booktitle} field for eventual output. % % If the book title is empty or missing, the function pushes an empty string. % \begin{macrocode} FUNCTION {format.booktitle} { booktitle "booktitle" bibinfo.check %<!bt-qq&!bt-rm> emphasize %<bt-qq> bt.enquote } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.in.ed.booktitle'} % 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. % % Notes on \dtx{} options: % \begin{itemize} % \item % The following combinations are available through the \texttt{makebst.tex} interface: % \begin{quote} % \verb+(+ \\ % \verb+ <default>+ \\ % \verb+ |edby ( |edbyx |edbyy|edbyw[edcap])+ \\ % \verb+ |edby-par (|edcap|edbyx[edcap]|edbyy )+ \\ % \verb+ |edby-parc(|edcap|edbyx )+ \\ % \verb+)+ % \end{quote} % \item % \texttt{edby}, \texttt{edby-par}, and \texttt{edby-parc} are mutually exclusive % and, except for the default, exhaustive. % \item % \texttt{edbyx}, \texttt{edbyw}, and \texttt{edbyy} are mutually exclusive % and, except for the default, exhaustive. % \item % \texttt{edcap} is independent of the above two groups of options. % \item % When parentheses need to be applied, we make sure that the respective % \dtx{} guard expressions are mutually exclusive. % It makes no sense for \texttt{edbyw} to be in effect if either of % \texttt{edby-par} or \texttt{edby-parc} is in effect. % \item % \texttt{makebst.tex} only activates \texttt{edcap} in certain cases, % but we do no checking here, applying it consistently to the % ``editor'' text entity. % \item % The code between \texttt{<!edpar>} and \verb+<edpar\|edparc>+ % \emph{must} match the corresponding code in \texttt{format.editors}. % This means that in the default case, formatting is controlled by % a \dtx{} mechanism entirely different from the other cases. % \item \texttt{ser-ed} has been added to suit AGU. Result of series plus % volume to go between booktitle and editors; must remove \texttt{format.bvolume} % from \texttt{incollection} and \texttt{inproceedings}. % \end{itemize} % % \begin{macrocode} FUNCTION {format.in.ed.booktitle} { format.booktitle duplicate$ empty$ 'skip$ { %<showstack>% btitle %<*ser-ed> format.bvolume duplicate$ empty$ 'pop$ { ", " swap$ * * } if$ %</ser-ed> editor "editor" format.names.ed duplicate$ empty$ 'pop$ { %<*!(edby|edby-par|edby-parc)> %<showstack>% btitle ednms %<!edpar&!edparxc> "," * " " * get.bbl.editor %<bkedcap> capitalize %<edpar> "(" swap$ * "), " * %<!edpar&(edparc|edparxc)> "(" swap$ * ") " * %<!edpar&!(edparc|edparxc)> ", " * * swap$ %<showstack>% eds btitle %</!(edby|edby-par|edby-parc)> %<*edby|edby-par|edby-parc> %<showstack>% btitle ednms %<edbyx|edbyy|edbyw> get.bbl.editor %<!(edbyx|edbyy|edbyw)> bbl.edby %<edcap> capitalize %<!(edby-par|edby-parc)&edbyw> "(" swap$ * ")" * %<showstack>% btitle ednms ed %<(edby-par|edby)&edbyy> swap$ "," * " " * swap$ * %<showstack>% btitle ednms-ed %<(edby-par|edby-parc)&!edbyw> "(" swap$ * ")" * swap$ %<edby|edby-parc> "," * " " * swap$ %</edby|edby-par|edby-parc> %<showstack>% btitle ednms-ed (or ednms-ed btitle) * } if$ %<showstack>% btitle-ednms-ed (or ednms-ed-btitle) (or btitle) word.in swap$ * } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`empty.misc.check'} % \begin{macrocode} %<*!ay> FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and %<!seq-no|alph> key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } %</!ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.thesis.type'} % \begin{macrocode} FUNCTION {format.thesis.type} { type duplicate$ empty$ 'pop$ { swap$ pop$ "t" change.case$ "type" bibinfo.check } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.tr.number'} % \begin{macrocode} FUNCTION {format.tr.number} { number "number" bibinfo.check type duplicate$ empty$ { pop$ bbl.techrep } 'skip$ if$ "type" bibinfo.check swap$ duplicate$ empty$ { pop$ "t" change.case$ } { tie.or.space.prefix * * } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.article.crossref'} % The \texttt{journal} field was emphasized emplicitly, but it should be % done by command. % \begin{macrocode} FUNCTION {format.article.crossref} { %<*!ay> key duplicate$ empty$ { pop$ journal duplicate$ empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ } { "journal" bibinfo.check emphasize word.in swap$ * } if$ } { word.in swap$ * " " *} if$ %</!ay> %<ay> word.in %<!html> " \cite{" * crossref * "}" * %<html> " <tt>" * crossref * "</tt>" * } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.crossref.editor'} % \begin{macrocode} %<*!ay> FUNCTION {format.crossref.editor} { editor #1 "{vv~}{ll}" format.name$ %<nmft&nmfted&nmand-rm> bib.name.font "editor" bibinfo.check editor num.names$ duplicate$ #2 > { pop$ %<nmft&nmfted&!nmand-rm&(etal-it|etal-rm)> bib.name.font "editor" bibinfo.check " " * bbl.etal %<etal-it> emphasize * %<nmft&nmfted&!nmand-rm&!(etal-it|etal-rm)> bib.name.font %<nmft&nmfted&!nmand-rm&!(etal-it|etal-rm)> "others" 't := } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { %<nmft&nmfted&!nmand-rm&(etal-it|etal-rm)> bib.name.font "editor" bibinfo.check " " * bbl.etal %<etal-it> emphasize * %<nmft&nmfted&!nmand-rm&!(etal-it|etal-rm)> bib.name.font %<nmft&nmfted&!nmand-rm&!(etal-it|etal-rm)> "others" 't := } { %<*!harnm> %<!amper> bbl.and space.word %<amper> " \& " %</!harnm> %<harnm> " \harvardand\ " * editor #2 "{vv~}{ll}" format.name$ %<nmft&nmfted&nmand-rm> bib.name.font "editor" bibinfo.check * } if$ } if$ } if$ %<*nmft&nmfted&!nmand-rm> t "others" = 'skip$ { bib.name.font "editor" bibinfo.check } if$ %</nmft&nmfted&!nmand-rm> } %</!ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`format.book.crossref'} % The \texttt{series} field was emphasized emplicitly, but it should be % done by command. % \begin{macrocode} FUNCTION {format.book.crossref} { volume duplicate$ empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ pop$ word.in } { bbl.volume %<!(blk-com|blk-tita)> capitalize swap$ tie.or.space.prefix "volume" bibinfo.check * * 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$ %</!ay> %<!html> " \cite{" * crossref * "}" * %<html> " <tt>" * crossref * "</tt>" * } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.incoll.inproc.crossref'} % 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$ { format.booktitle duplicate$ empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ } { word.in swap$ * } if$ } { word.in key * " " *} if$ } { word.in format.crossref.editor * " " *} if$ %</!ay> %<ay> word.in %<!html> " \cite{" * crossref * "}" * %<html> " <tt>" * crossref * "</tt>" * } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.org.or.pub'} % 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. % % MPG Jahrbuch wants publisher and year, but without parentheses. Add % \texttt{pub-nopar} to be used with \texttt{pub-date}. % % Have now (3.87.h) extended this function to include the organization, if % present. This is for \texttt{inproceedings} and \texttt{proceedings} where % the publisher is optional, and organization too. If the publisher is missing, % but the organization present, it is formatted like the publisher. This % complication comes from styles that want the publisher/organization to have % the date included, all in parentheses. % % This function is called by \texttt{format.publisher.address} and % \texttt{format.organization.address}, each putting the appropriate text % into the stack first. % % \begin{macrocode} FUNCTION {format.org.or.pub} { 't := "" %<*pub-date&!ay> year empty$ { "empty year in " cite$ * warning$ } 'skip$ if$ %</pub-date&!ay> %<*!(pub-date&ay)> address empty$ t empty$ and %<pub-date> year empty$ and 'skip$ { %</!(pub-date&ay)> %<pub-par|(pub-date&!pub-xpar)> add.blank "(" * %<*add-pub> address "address" bibinfo.check * t empty$ 'skip$ %</add-pub> %<*!add-pub> t empty$ { address "address" bibinfo.check * } { t * address empty$ 'skip$ { ", " * address "address" bibinfo.check * } if$ } %</!add-pub> %<*add-pub> { address empty$ 'skip$ { ": " * } if$ t * } %</add-pub> if$ %<*pub-date&!ay> year empty$ 'skip$ { t empty$ address empty$ and 'skip$ %<!pub-xc> { ", " swap$ * * } %<pub-xc> { " " swap$ * * } if$ year "year" bibinfo.check %<dtbf> bolden * } if$ %</pub-date&!ay> %<*pub-date&ay> year duplicate$ empty$ %<*!blkyear> { "empty year in " cite$ * "; set to ????" * warning$ pop$ "????" } %</!blkyear> %<*blkyear> { "empty year in " cite$ * warning$ pop$ "" } %</blkyear> %<!dtbf> { "year" bibinfo.check extra.label * } %<dtbf> { "year" bibinfo.check bolden extra.label * } if$ t empty$ address empty$ and { * } %<!pub-xc> { ", " swap$ * * } %<pub-xc> { " " swap$ * * } if$ %</pub-date&ay> %<pub-par|(pub-date&!pub-xpar)> ")" * %<*!(pub-date&ay)> } if$ %</!(pub-date&ay)> } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.publisher.address'} % \begin{macrocode} FUNCTION {format.publisher.address} { publisher "publisher" bibinfo.warn format.org.or.pub } % \end{macrocode} % \end{macro} % % \begin{macro}{`format.organization.address'} % \begin{macrocode} FUNCTION {format.organization.address} { organization "organization" bibinfo.check format.org.or.pub } % \end{macrocode} % \end{macro} % % \begin{macro}{`name.or.dash'} % This function stores what is on the stack, compares it with previous value, % and replaces it with a long dash if they are equal. What is on the stack % should be author or editor names for the current entry. % \begin{macrocode} %<*nmdash> STRINGS {oldname} FUNCTION {name.or.dash} { 's := oldname empty$ { s 'oldname := s } { s oldname = %<*!au-col> %<!nmd-2&!nmd-3> { "---" } %<nmd-2&!nmd-3> { "---{}---" } %<nmd-3> { "---{}---{}---" } %</!au-col> %<*au-col> %<!nmd-2&!nmd-3> { "---" add.blank } %<nmd-2&!nmd-3> { "---{}---" add.blank } %<nmd-3> { "---{}---{}---" add.blank } %</au-col> { s 'oldname := s } if$ } if$ } %</nmdash> % \end{macrocode} % \end{macro} % % \begin{macro}{`article'} % \begin{macrocode} FUNCTION {article} { output.bibitem format.authors "author" output.check %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<*dt-beg&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v> format.date "year" output.check date.block %</dt-beg&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v> %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block %<*!jtit-x> format.title "title" output.check %<blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<*blk-tit|blk-tita> %<!tit-col> new.sentence %<tit-col> add.colon %</blk-tit|blk-tita> %</!jtit-x> crossref missing$ { journal %<jxper> remove.dots "journal" bibinfo.check %<!jttl-rm> emphasize %<injnl> word.in swap$ * "journal" output.check %<jnm-x> add.blank %<*!dt-beg&!dt-end&dt-jnl&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v> format.date "year" output.check date.block %</!dt-beg&!dt-end&dt-jnl&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v> format.vol.num.pages output %<doi&agu-doi> format.doi output %<*!dt-beg&!dt-end&!dt-jnl&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v> format.date "year" output.check %</!dt-beg&!dt-end&!dt-jnl&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v> } { format.article.crossref output.nonnull %<!pp-last> format.pages output } if$ %<*pp-last> eid empty$ { format.journal.pages } { format.journal.eid } if$ %</pp-last> %<issn> format.issn output %<(doi|(url-doi&!url))&!agu-doi> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v> %<eprint> format.eprint output %<*revdata> format.url output %</revdata> fin.entry %<harnm|url-nl> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`book'} % \begin{macrocode} FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check %<ay> editor format.key output %<!edpar&(edparc|edparxc)&!au-col> add.blank %<au-col> add.colon %<nmdash> name.or.dash } { format.authors output.nonnull %<au-col> add.colon %<nmdash> name.or.dash crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ %<dt-beg&!pub-date> format.date "year" output.check %<dt-beg&!pub-date> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.btitle "title" output.check crossref missing$ { format.bvolume output %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %<!numser> format.number.series output %<pre-edn> format.edition output %<!blk-com&!blk-tit&!blk-tita> new.sentence %<numser> format.number.series output %<pg-bk&pg-pre> format.book.pages output format.publisher.address output } { %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon format.book.crossref output.nonnull %<!dt-beg&!dt-end&pub-date> format.date "year" output.check } if$ %<!pre-edn> format.edition output %<!dt-beg&!dt-end&!pub-date> format.date "year" output.check %<isbn> format.isbn output %<pg-bk&!pg-pre> format.book.pages output %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end&!pub-date> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end&!pub-date> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`booklet'} % \begin{macrocode} FUNCTION {booklet} { output.bibitem format.authors output %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<ay&dt-beg> format.date "year" output.check %<!ay&dt-beg> format.date output %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.title "title" output.check %<blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon howpublished "howpublished" bibinfo.check output address "address" bibinfo.check output %<ay&!dt-beg&!dt-end> format.date "year" output.check %<!ay&!dt-beg&!dt-end> format.date output %<isbn> format.isbn output %<pg-bk> format.book.pages output %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*ay&!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</ay&!dt-beg&dt-end> %<*!ay&!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date output %</!ay&!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`inbook'} % 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. % % Restore the chapter specification (2004 Feb 9) after someone complained. % There are still some bugs here. If some date punctuation is specified, say % with \texttt{yrp-semi} for a semi-colon after the year, this appears always, % even if there is no text following. But then this to be an unlikely wish anyway, % since such punctuation options are best suited for \texttt{dt-beg}. % \begin{macrocode} FUNCTION {inbook} { output.bibitem author empty$ { format.editors "author and editor" output.check %<ay> editor format.key output %<au-col> add.colon %<nmdash> name.or.dash } { format.authors output.nonnull %<au-col> add.colon %<nmdash> name.or.dash crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ %<dt-beg&!pub-date> format.date "year" output.check %<dt-beg&!pub-date> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.btitle "title" output.check crossref missing$ { %<pre-pub&numser> format.number.series output %<pre-pub> format.publisher.address output format.bvolume output %<*dt-beg|dt-end|!dt-jnl|a|!a> format.chapter.pages "chapter and pages" output.check %</dt-beg|dt-end|!dt-jnl|a|!a> %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %<!numser> format.number.series output %<pre-edn> format.edition output %<!blk-com&!blk-tit&!blk-tita> new.sentence %<!pre-pub&numser> format.number.series output %<!pre-pub> format.publisher.address output } { %<*dt-beg|dt-end|!dt-jnl|a|!a> format.chapter.pages "chapter and pages" output.check %</dt-beg|dt-end|!dt-jnl|a|!a> %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon format.book.crossref output.nonnull %<!dt-beg&!dt-end&!dt-jnl&pub-date> format.date "year" output.check } if$ %<!pre-edn> format.edition output %<!dt-beg&!dt-end&!dt-jnl&!pub-date> format.date "year" output.check %<*isbn> crossref missing$ { format.isbn output } 'skip$ if$ %</isbn> %<*(!dt-beg&!dt-end&dt-jnl)&!pub-date> format.date "year" output.check date.block %</(!dt-beg&!dt-end&dt-jnl)&!pub-date> %<pp-last> format.pages "pages" output.check %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end&!pub-date> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end&!pub-date> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`incollection'} % \begin{macrocode} FUNCTION {incollection} { output.bibitem format.authors "author" output.check %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<dt-beg&!pub-date> format.date "year" output.check %<dt-beg&!pub-date> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block %<*!jtit-x> format.title "title" output.check %<blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %</!jtit-x> crossref missing$ { format.in.ed.booktitle "booktitle" output.check %<bt-qq> end.quote.btitle %<pre-pub&numser> format.number.series output %<pre-pub> format.publisher.address output %<!ser-ed> format.bvolume output %<!numser> format.number.series output %<pre-edn> format.edition output format.chapter.pages output %<!blk-com&!blk-tit&!blk-tita> new.sentence %<!pre-pub&numser> format.number.series output %<!pre-pub> format.publisher.address output %<!pre-edn> format.edition output %<!dt-beg&!dt-end&!dt-jnl&!pub-date> format.date "year" output.check %<isbn> format.isbn output } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ %<*(!dt-beg&!dt-end&dt-jnl)&!pub-date> format.date "year" output.check date.block %</(!dt-beg&!dt-end&dt-jnl)&!pub-date> %<pp-last> format.pages "pages" output.check %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end&!pub-date> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end&!pub-date> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`inproceedings'} % \begin{macrocode} FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<dt-beg&!pub-date> format.date "year" output.check %<dt-beg&!pub-date> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block %<*!jtit-x> format.title "title" output.check %<blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %</!jtit-x> crossref missing$ { format.in.ed.booktitle "booktitle" output.check %<bt-qq> end.quote.btitle %<*!pre-pub> %<!ser-ed> format.bvolume output %<!numser> format.number.series output %<(dt-beg|dt-end|!dt-jnl)&!pp-last> format.pages output %</!pre-pub> %<!blk-com&!blk-tit&!blk-tita> new.sentence %<numser> format.number.series output publisher empty$ { format.organization.address output } { organization "organization" bibinfo.check output format.publisher.address output } if$ %<!dt-beg&!dt-end&!dt-jnl&!pub-date> format.date "year" output.check %<*pre-pub> format.bvolume output %<!numser> format.number.series output %<(dt-beg|dt-end|!dt-jnl)&!pp-last> format.pages output %</pre-pub> %<isbn> format.isbn output %<issn> format.issn output } { format.incoll.inproc.crossref output.nonnull %<(dt-beg|dt-end|!dt-jnl)&!pp-last> format.pages output } if$ %<*!dt-beg&!dt-end&dt-jnl&!pp-last> %<!pub-date> format.date "year" output.check %<!pub-date> date.block %<jdt-v|jdt-vs|jdt-p|!jdt-pc> add.blank format.pages "pages" output.check %</!dt-beg&!dt-end&dt-jnl&!pp-last> %<pp-last> format.pages "pages" output.check %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end&!pub-date> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end&!pub-date> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`conference'} % \begin{macrocode} FUNCTION {conference} { inproceedings } % \end{macrocode} % \end{macro} % % \begin{macro}{`manual'} % \begin{macrocode} %<*ay> FUNCTION {manual} { output.bibitem format.authors output author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<dt-beg> format.date "year" output.check %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.btitle "title" output.check %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %<!blk-com&!blk-tit&!blk-tita> organization address new.block.checkb organization "organization" bibinfo.check output address "address" bibinfo.check output format.edition output %<!dt-beg&!dt-end> format.date "year" output.check %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } %</ay> %<*!ay> FUNCTION {manual} { output.bibitem author empty$ { organization "organization" bibinfo.check duplicate$ empty$ 'pop$ { output address "address" bibinfo.check output } if$ } { format.authors output.nonnull } if$ %<au-col> add.colon %<nmdash> name.or.dash %<ay&dt-beg> format.date "year" output.check %<!ay&dt-beg> format.date output %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.btitle "title" output.check %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon author empty$ { organization empty$ { %<!blk-com&!blk-tit&!blk-tita> address new.block.checka address "address" bibinfo.check output } 'skip$ if$ } { %<!blk-com&!blk-tit&!blk-tita> organization address new.block.checkb organization "organization" bibinfo.check output address "address" bibinfo.check output } if$ format.edition output %<ay&!dt-beg&!dt-end> format.date "year" output.check %<!ay&!dt-beg&!dt-end> format.date output %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*ay&!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</ay&!dt-beg&dt-end> %<*!ay&!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date output %</!ay&!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } %</!ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`mastersthesis'} % To format a master's thesis. % \begin{macrocode} FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<dt-beg> format.date "year" output.check %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block %<*!thtit-x> %<!thtit-a> format.btitle %<thtit-a> format.title "title" output.check %<thtit-a&blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %</!thtit-x> bbl.mthesis format.thesis.type output.nonnull school "school" bibinfo.warn output address "address" bibinfo.check output %<!dt-beg&!dt-end> format.date "year" output.check %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`misc'} % \begin{macrocode} FUNCTION {misc} { output.bibitem format.authors output %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<ay&dt-beg> format.date "year" output.check %<!ay&dt-beg> format.date output %<*ay> %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.title output %<blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %</ay> %<*!ay> %<!blk-com&!blk-tit&!blk-tita> title howpublished new.block.checkb format.title output %<blk-com&tit-qq> end.quote.title %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %<!blk-com&!blk-tit&!blk-tita> howpublished new.block.checka %</!ay> howpublished "howpublished" bibinfo.check output %<ay&!dt-beg&!dt-end> format.date "year" output.check %<!ay&!dt-beg&!dt-end> format.date output %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*ay&!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</ay&!dt-beg&dt-end> %<*!ay&!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date output %</!ay&!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url %<!ay> empty.misc.check } % \end{macrocode} % \end{macro} % % \begin{macro}{`phdthesis'} % To format a doctoral thesis. % \begin{macrocode} FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<dt-beg> format.date "year" output.check %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block %<*!thtit-x> %<!thtit-a> format.btitle %<thtit-a> format.title "title" output.check %<thtit-a&blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %</!thtit-x> bbl.phdthesis format.thesis.type output.nonnull school "school" bibinfo.warn output address "address" bibinfo.check output %<!dt-beg&!dt-end> format.date "year" output.check %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`presentation'} % \begin{macrocode} %<*pres> FUNCTION {presentation} { output.bibitem format.authors output %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<!blk-com&!blk-tit&!blk-tita> new.block format.title output %<blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon format.organization.address "organization and address" output.check month "month" output.check year "year" output.check %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output new.sentence type missing$ 'skip$ {"(" type capitalize * ")" * output} if$ %<*url-blk&!harnm> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm> fin.entry %<(harnm|url-nl)&!revdata> write.url } %</pres> % \end{macrocode} % \end{macro} % % \begin{macro}{`proceedings'} % \begin{macrocode} %<*ay> FUNCTION {proceedings} { output.bibitem format.editors output editor format.key output %<au-col> add.colon %<nmdash> name.or.dash %<dt-beg> format.date "year" output.check %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.btitle "title" output.check format.bvolume output %<!numser> format.number.series output %<!blk-com&!blk-tit&!blk-tita> new.sentence %<numser> format.number.series output publisher empty$ { format.organization.address output } { organization "organization" bibinfo.check output format.publisher.address output } if$ %<!dt-beg&!dt-end&!pub-date> format.date "year" output.check %<isbn> format.isbn output %<issn> format.issn output %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end&!pub-date> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end&!pub-date> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } %</ay> % \end{macrocode} % \begin{macrocode} %<*!ay> FUNCTION {proceedings} { output.bibitem editor empty$ { organization "organization" bibinfo.check output } { format.editors output.nonnull } if$ %<au-col> add.colon %<nmdash> name.or.dash %<dt-beg> format.date "year" output.check %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.btitle "title" output.check format.bvolume output %<!numser> format.number.series output editor empty$ { publisher empty$ %<!numser> 'skip$ %<numser> { format.number.series output } { %<!blk-com&!blk-tit&!blk-tita> new.sentence %<numser> format.number.series output format.publisher.address output } if$ } { publisher empty$ { %<!blk-com&!blk-tit&!blk-tita> new.sentence %<numser> format.number.series output format.organization.address output } { %<!blk-com&!blk-tit&!blk-tita> new.sentence %<numser> format.number.series output organization "organization" bibinfo.check output format.publisher.address output } if$ } if$ %<!dt-beg&!dt-end&!pub-date> format.date "year" output.check %<isbn> format.isbn output %<issn> format.issn output %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } %</!ay> % \end{macrocode} % \end{macro} % % \begin{macro}{`techreport'} % \begin{macrocode} FUNCTION {techreport} { output.bibitem format.authors "author" output.check %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<dt-beg> format.date "year" output.check %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block %<trtit-b> format.btitle %<!trtit-b> format.title "title" output.check %<!trtit-b&blk-com&tit-qq> end.quote.title %<!blk-com&!blk-tit&!blk-tita> new.block %<blk-tit&!tit-col> new.sentence %<blk-tit&tit-col> add.colon %<!trnum-it> format.tr.number output.nonnull %<trnum-it> format.tr.number emphasize output.nonnull institution "institution" bibinfo.warn output address "address" bibinfo.check output %<!dt-beg&!dt-end> format.date "year" output.check %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note output %<*!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date "year" output.check %</!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`unpublished'} % \begin{macrocode} FUNCTION {unpublished} { output.bibitem format.authors "author" output.check %<ay> author format.key output %<au-col> add.colon %<nmdash> name.or.dash %<ay&dt-beg> format.date "year" output.check %<!ay&dt-beg> format.date output %<dt-beg> date.block %<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block format.title "title" output.check %<blk-com&tit-qq> end.quote.title %<ay&!dt-beg&!dt-end> format.date "year" output.check %<!ay&!dt-beg&!dt-end> format.date output %<doi|(url-doi&!url)> format.doi output %<*url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block format.url output %</url-blk&!harnm&!revdata> %<!blk-com&!blk-tit&!blk-tita> new.block %<(blk-com|blk-tit|blk-tita)&blknt> new.sentence format.note "note" output.check %<*ay&!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date output %</ay&!dt-beg&dt-end> %<*!ay&!dt-beg&dt-end> %<!blk-com&!blk-tit&!blk-tita> new.block format.date output %</!ay&!dt-beg&dt-end> %<eprint> format.eprint output %<revdata> format.url output fin.entry %<(harnm|url-nl)&!revdata> write.url } % \end{macrocode} % \end{macro} % % \begin{macro}{`default.type'} % \begin{macrocode} FUNCTION {default.type} { misc } % \end{macrocode} % \end{macro} % % \begin{macrocode} READ % \end{macrocode} % % \begin{macrocode} %<*ay|alph|!seq-no> % \end{macrocode} % % \begin{macro}{`sortify'} % 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} FUNCTION {sortify} { purify$ "l" change.case$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} INTEGERS { len } % \end{macrocode} % % \begin{macro}{`chop.word'} % \begin{macrocode} FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} %<*!ay&alph> % \end{macrocode} % % \begin{macro}{`format.lab.names'} % 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} INTEGERS { et.al.char.used } % \end{macrocode} % % \begin{macrocode} FUNCTION {initialize.et.al.char.used} { #0 'et.al.char.used := } % \end{macrocode} % % \begin{macrocode} EXECUTE {initialize.et.al.char.used} % \end{macrocode} % % \begin{macrocode} FUNCTION {format.lab.names} { 's := %<*alf-1> %<!vonx> s #1 "{v{}}{l{}}" format.name$ %<vonx> s #1 "{l{}}" format.name$ duplicate$ text.length$ #2 < { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } 'skip$ if$ %</alf-1> %<*!alf-1&alf-f> %<!vonx> s #1 "{vv{}}{ll}" format.name$ %<vonx> s #1 "{ll}" format.name$ %</!alf-1&alf-f> %<*!alf-1&!alf-f> 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 := } %<!vonx> { s nameptr "{v{}}{l{}}" format.name$ * } %<vonx> { s nameptr "{l{}}" format.name$ * } if$ } %<!vonx> { s nameptr "{v{}}{l{}}" format.name$ * } %<vonx> { s nameptr "{l{}}" format.name$ * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ numnames #4 > { "{\etalchar{+}}" * #1 'et.al.char.used := } 'skip$ if$ } %<!vonx> { s #1 "{v{}}{l{}}" format.name$ %<vonx> { s #1 "{l{}}" format.name$ duplicate$ text.length$ #2 < { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } 'skip$ if$ } if$ %</!alf-1&!alf-f> } % \end{macrocode} % % \begin{macrocode} %</!ay&alph> % \end{macrocode} % The function for the standard citation: one or two authors cited full, but for % more than two, only the first with \emph{et~al.} given. % \begin{macrocode} %<*ay&!mcite> FUNCTION {format.lab.names} { 's := "" 't := %<!jnrlab> s #1 "{vv~}{ll}" format.name$ %<*jnrlab> %<!nm-rv&!nm-rvv&!nm-rvx&!nm-rvcx> s #1 "{vv~}{ll}{, jj}" format.name$ %<nm-rv|nm-rvv|nm-rvx|nm-rvcx> s #1 "{vv~}{ll}{ jj}" format.name$ %</jnrlab> %<lab&and-rm> cite.name.font s num.names$ duplicate$ #2 > { pop$ %<lab&!and-rm&(etal-it|etal-rm)> cite.name.font %<*!etal-it> %<lab&and-rm&!etal-rm> " " * bbl.etal cite.name.font * %<!lab|!and-rm|etal-rm> " " * bbl.etal * %</!etal-it> %<etal-it> " " * bbl.etal emphasize * %<lab&!and-rm&!(etal-it|etal-rm)> cite.name.font %<lab&!and-rm> "others" 't := } { #2 < 'skip$ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { % %<lab&!and-rm&(etal-it|etal-rm)> cite.name.font %<*!etal-it> %<lab&and-rm&!etal-rm> " " * bbl.etal cite.name.font * %<!lab|!and-rm|etal-rm> " " * bbl.etal * %</!etal-it> %<etal-it> " " * bbl.etal emphasize * %<lab&!and-rm&!(etal-it|etal-rm)> cite.name.font %<lab&!and-rm> "others" 't := } %<*!harnm> %<*!amper> { bbl.and space.word * s #2 "{vv~}{ll}" format.name$ %<lab&and-rm> cite.name.font * } %</!amper> %<*amper> { " \& " * s #2 "{vv~}{ll}" format.name$ %<lab&and-rm> cite.name.font * } %</amper> %</!harnm> %<*harnm> { " \harvardand{} " * s #2 "{vv~}{ll}" format.name$ %<lab&and-rm> cite.name.font * } %</harnm> if$ } if$ } if$ %<*lab&!and-rm> t "others" = 'skip$ { cite.name.font } if$ %</lab&!and-rm> } %</ay&!mcite> % \end{macrocode} % % The code for formating author--year citations with more than one author % before \emph{et al.} or selecting a number other than two for truncating, % is much the same as the \texttt{format.full.names} function. % \begin{macrocode} %<*ay&mcite> FUNCTION {format.lab.names} {'s := "" 't := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr %<!jnrlab> "{vv~}{ll}" format.name$ %<*jnrlab> %<!nm-rv&!nm-rvv&!nm-rvx&!nm-rvcx> "{vv~}{ll}{, jj}" format.name$ %<nm-rv|nm-rvv|nm-rvx|nm-rvcx> "{vv~}{ll}{ jj}" format.name$ %</jnrlab> %<lab&and-rm> cite.name.font 't := nameptr #1 > { %<mct-1> nameptr #2 = %<mct-2> nameptr #3 = %<mct-3> nameptr #4 = %<mct-4> nameptr #5 = %<mct-5> nameptr #6 = %<mct-6> nameptr #7 = %<mct-x2> numnames #2 > and %<mct-x3> numnames #3 > and %<mct-x4> numnames #4 > and %<mct-x5> numnames #5 > and %<mct-x6> numnames #6 > and { "others" 't := #1 'namesleft := } 'skip$ if$ namesleft #1 > { ", " * t * } { s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ t "others" = { %<lab&!and-rm&(etal-it|etal-rm)> cite.name.font %<*!etal-it> %<lab&and-rm&!etal-rm> " " * bbl.etal cite.name.font * %<!lab|!and-rm|etal-rm> " " * bbl.etal * %</!etal-it> %<etal-it> " " * bbl.etal emphasize * %<lab&!and-rm&!(etal-it|etal-rm)> cite.name.font } { %<*!harnm> %<*!and-xcom> numnames #2 > { "," * } 'skip$ if$ %</!and-xcom> %<!amper> bbl.and %<amper> "\&" %</!harnm> %<harnm> "\harvardand{}" space.word * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ %<*lab&!and-rm> t "others" = 'skip$ { cite.name.font } if$ %</lab&!and-rm> } %</ay&mcite> % \end{macrocode} % \end{macro} % % \begin{macro}{`author.key.label'} % \begin{macro}{`author.editor.key.label'} % \begin{macro}{`author.key.organization.label'} % \begin{macro}{`editor.key.organization.label'} % \begin{macro}{`editor.key.label'} % 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$ } %<ay> 'key %<!ay> { 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$ } %<ay> 'key %<!ay> { key #3 text.prefix$ } if$ } { editor format.lab.names } if$ } { author format.lab.names } if$ } %</ay|alph> %<*!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&alph> %<*ay> FUNCTION {editor.key.label} { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.lab.names } if$ } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{`calc.short.authors'} % \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$ 'short.list := } % \end{macrocode} % \end{macro} % % \begin{macro}{`calc.label'} % \begin{macrocode} FUNCTION {calc.label} { calc.short.authors short.list %<!(har|ast|cay|nmd|alk|cn)> "(" %<har|ast|cay|nmd|alk|cn> ", " * year duplicate$ empty$ %<keyxyr> short.list key field.or.null = or %<(blkyear|keyxyr)> { pop$ "" } %<!(blkyear|keyxyr)> { pop$ "????" } %<!note-yr> { purify$ #-1 #4 substring$ } %<note-yr> 'skip$ if$ * 'label := } %</ay> %<*!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 := } % \end{macrocode} % \end{macro} % % \begin{macrocode} %</!ay&alph> % \end{macrocode} % % \begin{macrocode} %<*ay> % \end{macrocode} % % \begin{macrocode} %<*har|cay|nmd|ast|cn> % \end{macrocode} % % \begin{macro}{`calc.short.label'} % \begin{macrocode} FUNCTION {calc.short.label} { calc.short.authors short.list 'label := } % \end{macrocode} % \end{macro} % % \begin{macrocode} %</har|cay|nmd|ast|cn> % \end{macrocode} % % \begin{macrocode} %</ay> % \end{macrocode} % % \begin{macro}{`sort.format.names'} % \begin{macrocode} FUNCTION {sort.format.names} { 's := #1 'nameptr := "" s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr %<*xintls> %<!vonx> "{vv{ } }{ll{ }}" %<vonx> "{ll{ }}" %</xintls> %<*!xintls> %<*!nm-init&!nm-rev&!nm-rev1&!nm-rv&!nm-rvx&!nm-rvcx&!nm-rvv&!nm-rvvc> %<!vonx> "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" %<vonx> "{ll{ }}{ ff{ }}{ jj{ }}" %</!nm-init&!nm-rev&!nm-rev1&!nm-rv&!nm-rvx&!nm-rvcx&!nm-rvv&!nm-rvvc> %<*nm-init|nm-rev|nm-rev1|nm-rv|nm-rvx|nm-rvcx|nm-rvv|nm-rvvc> %<!vonx> "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" %<vonx> "{ll{ }}{ f{ }}{ jj{ }}" %</nm-init|nm-rev|nm-rev1|nm-rv|nm-rvx|nm-rvcx|nm-rvv|nm-rvvc> %</!xintls> format.name$ 't := nameptr #1 > { %<*nmlm> %<m1> nameptr #1 %<m2> nameptr #2 %<m3> nameptr #3 %<m4> nameptr #4 %<m5> nameptr #5 %<m6> nameptr #6 %<m7> nameptr #7 %<m8> nameptr #8 %<m9> nameptr #9 %<m0> nameptr #0 %<m10> #10 + %<m20> #20 + %<m30> #30 + %<m40> #40 + %<m50> #50 + %<m60> #60 + %<m70> #70 + %<m80> #80 + %<m90> #90 + #1 + = %<x1> numnames #1 %<x2> numnames #2 %<x3> numnames #3 %<x4> numnames #4 %<x5> numnames #5 %<x6> numnames #6 %<x7> numnames #7 %<x8> numnames #8 %<x9> numnames #9 %<x0> numnames #0 %<x10> #10 + %<x20> #20 + %<x30> #30 + %<x40> #40 + %<x50> #50 + %<x60> #60 + %<x70> #70 + %<x80> #80 + %<x90> #90 + > and { "others" 't := #1 'namesleft := } 'skip$ if$ %</nmlm> " " * namesleft #1 = t "others" = and { "zzzzz" 't := } 'skip$ if$ %<*seq-lab|seq-key|seq-labc> numnames #2 > nameptr #2 = and { "zz" * year field.or.null * " " * %<seq-labc> #1 'namesleft := } %<seq-labc> { t sortify * } %<!seq-labc> 'skip$ if$ %</seq-lab|seq-key|seq-labc> %<!seq-labc> t sortify * } { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`sort.format.title'} % \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$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`author.sort'} % \begin{macrocode} FUNCTION {author.sort} { author empty$ { key empty$ { "to sort, need author or key in " cite$ * warning$ "" } { key sortify } if$ } { author sort.format.names } if$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`author.editor.sort'} % \begin{macrocode} 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$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`negate.year'} % This function negates the year by substituting each digit by its % complement. That is, 0 $\rightarrow$ 9, 1 $\rightarrow$ 8, etc. This is used % to provide ordering by descending year (latest year first). % \begin{macrocode} %<*seq-yrr&!seq-yr> FUNCTION {negate.year} { year empty$ { "99999" } { year #1 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ year #2 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ * year #3 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ * year #4 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ * } if$ } %</seq-yrr&!seq-yr> % \end{macrocode} % \end{macro} % % \begin{macrocode} %<*ay> % \end{macrocode} % % \begin{macro}{`editor.sort'} % \begin{macrocode} FUNCTION {editor.sort} { editor empty$ { key empty$ { "to sort, need editor or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} %<*seq-no> % \end{macrocode} % % \begin{macrocode} INTEGERS { seq.num } % \end{macrocode} % % \begin{macro}{`init.seq'} % \begin{macrocode} FUNCTION {init.seq} { #0 'seq.num :=} % \end{macrocode} % \end{macro} % % \begin{macrocode} EXECUTE {init.seq} % \end{macrocode} % % \begin{macro}{`int.to.fix'} % \begin{macrocode} FUNCTION {int.to.fix} { "000000000" swap$ int.to.str$ * #-1 #10 substring$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} %</seq-no> % \end{macrocode} % % \begin{macro}{`presort'} % 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-no> seq.num #1 + 'seq.num := seq.num int.to.fix %</seq-no> 'sort.label := sort.label * %<seq-yr> " " * year field.or.null * %<seq-yrr&!seq-yr> " " * negate.year field.or.null * %<*!seq-key&!seq-labc&!seq-yr&!seq-yrr> " " * title field.or.null sort.format.title * %</!seq-key&!seq-labc&!seq-yr&!seq-yrr> %<seq-key|seq-yr|seq-yrr> " " * cite$ * #1 entry.max$ substring$ 'sort.key$ := % "For " cite$ * ", sort.key=" * sort.key$ * warning$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} %</ay> % \end{macrocode} % % \begin{macrocode} %<*!ay> % \end{macrocode} % % \begin{macro}{`author.organization.sort'} % \begin{macrocode} 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$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`editor.organization.sort'} % \begin{macrocode} 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$ } % \end{macrocode} % \end{macro} % % \begin{macro}{`presort'} % \begin{macrocode} FUNCTION {presort} %<*alph> { calc.label sort.label " " * type$ "book" = %</alph> %<!alph>{ type$ "book" = type$ "inbook" = or 'author.editor.sort { type$ "proceedings" = 'editor.organization.sort { type$ "manual" = 'author.organization.sort 'author.sort if$ } if$ } if$ %<alph> * " " * %<seq-yrr> negate.year field.or.null sortify %<!seq-yrr> year field.or.null sortify %<!(seq-yr|seq-yrr)|alph> * " " * %<(seq-yr|seq-yrr)&!alph> swap$ * title field.or.null sort.format.title * #1 entry.max$ substring$ 'sort.key$ := } % \end{macrocode} % \end{macro} % % \begin{macrocode} %</!ay> % \end{macrocode} % % \begin{macrocode} ITERATE {presort} % \end{macrocode} % % \begin{macrocode} SORT % \end{macrocode} % % \begin{macrocode} %</ay|alph|!seq-no> % \end{macrocode} % % 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> % \end{macrocode} % % \begin{macrocode} STRINGS { last.label next.extra } % \end{macrocode} % % With computer-generated articles, it is possible to have more than 26 articles % in one year. It has finally occurred that the extra labels go beyond `z'. % The current code now allows for `aa', \dots `az', 'ba', \dots `zz'. This % code was provided by Joseph Wright (2007 Oct 10). % \begin{macrocode} INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label } % \end{macrocode} % % \begin{macro}{`initialize.extra.label.stuff'} % \begin{macrocode} FUNCTION {initialize.extra.label.stuff} { #0 int.to.chr$ 'last.label := "" 'next.extra := #0 'last.extra.num := "a" chr.to.int$ #1 - 'last.extra.num.blank := last.extra.num.blank 'last.extra.num.extended := #0 'number.label := } % \end{macrocode} % \end{macro} % % \begin{macro}{`forward.pass'} % \begin{macrocode} FUNCTION {forward.pass} { last.label label = { last.extra.num #1 + 'last.extra.num := last.extra.num "z" chr.to.int$ > { "a" chr.to.int$ 'last.extra.num := last.extra.num.extended #1 + 'last.extra.num.extended := } 'skip$ if$ last.extra.num.extended last.extra.num.blank > { last.extra.num.extended int.to.chr$ last.extra.num int.to.chr$ * 'extra.label := } { last.extra.num int.to.chr$ 'extra.label := } if$ } { "a" chr.to.int$ 'last.extra.num := "" 'extra.label := label 'last.label := } if$ number.label #1 + 'number.label := } % \end{macrocode} % \end{macro} % % \begin{macrocode} %</ay> % \end{macrocode} % % \begin{macrocode} %<*!ay&alph> % \end{macrocode} % % \begin{macrocode} STRINGS { longest.label last.sort.label next.extra } % \end{macrocode} % % \begin{macrocode} INTEGERS { longest.label.width last.extra.num } % \end{macrocode} % % \begin{macro}{`initialize.longest.label'} % \begin{macrocode} FUNCTION {initialize.longest.label} { "" 'longest.label := #0 int.to.chr$ 'last.sort.label := "" 'next.extra := #0 'longest.label.width := #0 'last.extra.num := } % \end{macrocode} % \end{macro} % % \begin{macro}{`forward.pass'} % \begin{macrocode} 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{macrocode} %</!ay&alph> % \end{macrocode} % % \begin{macro}{`reverse.pass'} % 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. % % 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> % \end{macrocode} % % \begin{macrocode} FUNCTION {reverse.pass} { next.extra "b" = { "a" 'extra.label := } 'skip$ if$ extra.label 'next.extra := extra.label %<xlab-it> emphasize %<*!html> duplicate$ empty$ 'skip$ { "{\natexlab{" swap$ * "}}" * } if$ %</!html> 'extra.label := %<!(har|ast|cay|nmd|cn)> label extra.label * 'label := } % \end{macrocode} % % \begin{macrocode} %</ay> % \end{macrocode} % % \begin{macrocode} %<*!ay&alph> % \end{macrocode} % % \begin{macrocode} 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} % % \begin{macrocode} %</!ay&alph> % \end{macrocode} % \end{macro} % % \begin{macrocode} %<ay>EXECUTE {initialize.extra.label.stuff} %<!ay&alph>EXECUTE {initialize.longest.label} % \end{macrocode} % % \begin{macrocode} %<*ay|alph> ITERATE {forward.pass} % \end{macrocode} % % \begin{macrocode} REVERSE {reverse.pass} % \end{macrocode} % % \begin{macrocode} %</ay|alph> % \end{macrocode} % % \begin{macrocode} %<*ay> FUNCTION {bib.sort.order} { sort.label " " * %<seq-yrr> negate.year field.or.null sortify %<!seq-yrr> year field.or.null sortify %<(seq-yr|seq-yrr)&!(seq-lab|seq-key|seq-labc)> swap$ * %<*!seq-key&!seq-labc&!seq-yr&!seq-yrr> " " * title field.or.null sort.format.title * %</!seq-key&!seq-labc&!seq-yr&!seq-yrr> %<seq-key|seq-yr|seq-yrr> " " * cite$ * #1 entry.max$ substring$ 'sort.key$ := % "For " cite$ * ", bib.sort.key=" * sort.key$ * warning$ %<har|cay|nmd|cn|ast> calc.short.label } % \end{macrocode} % % \begin{macrocode} ITERATE {bib.sort.order} % \end{macrocode} % % \begin{macrocode} SORT % \end{macrocode} % % \begin{macrocode} %</ay> % \end{macrocode} % % \begin{macrocode} %<*!ay&!alph> % \end{macrocode} % % \begin{macrocode} STRINGS { longest.label } % \end{macrocode} % % \begin{macrocode} INTEGERS { number.label longest.label.width } % \end{macrocode} % % \begin{macrocode} FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } % \end{macrocode} % % \begin{macrocode} FUNCTION {longest.label.pass} %<*!cite> { number.label int.to.str$ 'label := number.label #1 + 'number.label := %</!cite> %<cite>{ cite$ 'label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } % \end{macrocode} % % \begin{macrocode} EXECUTE {initialize.longest.label} % \end{macrocode} % % \begin{macrocode} ITERATE {longest.label.pass} % \end{macrocode} % % \begin{macrocode} %</!ay&!alph> % \end{macrocode} % % \begin{macro}{`begin.bib'} % 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. % % Note: the French quotation marks are called `guillimets'; Adobe erroneously % named the symbols `guillimot', which is an arctic bird. The error has so % propagated, that it can no longer be corrected. \LaTeX\ took it over. % \begin{macrocode} FUNCTION {begin.bib} %<*!html> %<*!ay&alph> { et.al.char.used { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ } 'skip$ if$ preamble$ empty$ %</!ay&alph> %<ay|!alph>{ preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ %<ay> "\begin{thebibliography}{" number.label int.to.str$ * "}" * %<!ay> "\begin{thebibliography}{" longest.label * "}" * write$ newline$ %<*(!nmft&(nmft-it|nmft-sc|nmft-bf|nmft-def))|(!lab&(lab-it|lab-bf|lab-sc|lab-def))> "\typeout{**********************************}" write$ newline$ "\typeout{WARNING WARNING WARNING WARNING WARNING}" write$ newline$ "\typeout{The bst file has been generated with inconsistent options}" write$ newline$ "\typeout{Read the warning message at the start of the bst file}" write$ newline$ "\typeout{**********************************}" write$ newline$ %</(!nmft&(nmft-it|nmft-sc|nmft-bf|nmft-def))|(!lab&(lab-it|lab-bf|lab-sc|lab-def))> %<*!plntx> %<!tit-it&tit-qq&qt-s> "\newcommand{\enquote}[1]{`#1'}" %<!tit-it&tit-qq&!qt-s&!qt-g> "\newcommand{\enquote}[1]{``#1''}" %</!plntx> %<*plntx> %<!tit-it&tit-qq&qt-s> "\def\enquote#1{`#1'}" %<!tit-it&tit-qq&!qt-s&!qt-g> "\def\enquote#1{``#1''}" %</plntx> %<*!tit-it&tit-qq&!qt-s&qt-g> %<!plntx> "\let\enquote\frquote" %<*plntx> "\def\guillemotleft{%" write$ newline$ " \leavevmode\raise .27ex\hbox{$\scriptscriptstyle\ll$}}" write$ newline$ "\def\guillemotright{%" write$ newline$ " \leavevmode\raise .27ex\hbox{$\scriptscriptstyle\gg$}}" write$ newline$ "\def\enquote#1{\guillemotleft#1\guillemotright}" %</plntx> %</!tit-it&tit-qq&!qt-s&qt-g> %<!tit-it&tit-qq> write$ newline$ %<umlaut> "\let\qq=\" quote$ * write$ newline$ %<em-ul> "\expandafter\ifx\csname uline\endcsname\relax\let\uline\underline\fi" %<em-ul> write$ newline$ %<*ay> %<!plntx> "\providecommand{\natexlab}[1]{#1}" %<plntx> "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi" write$ newline$ %<*har> "{\catcode`\|=0\catcode`\#=12\catcode`\@=11\catcode`\\=12" write$ newline$ "|immediate|write|@auxout{\expandafter\ifx\csname natexlab\endcsname\relax\gdef\natexlab#1{#1}\fi}}" write$ newline$ %</har> %</ay> %<*nmft&nmft-def> %<!plntx> "\providecommand{\bibnamefont}[1]{#1}" %<plntx> "\expandafter\ifx\csname bibnamefont\endcsname\relax" %<plntx> write$ newline$ %<plntx> " \def\bibnamefont#1{#1}\fi" write$ newline$ %</nmft&nmft-def> %<*nmft&fnm-def> %<!plntx> "\providecommand{\bibfnamefont}[1]{#1}" %<plntx> "\expandafter\ifx\csname bibfnamefont\endcsname\relax" %<plntx> write$ newline$ %<plntx> " \def\bibfnamefont#1{#1}\fi" write$ newline$ %</nmft&fnm-def> %<*lab&lab-def> %<!plntx> "\providecommand{\citenamefont}[1]{#1}" %<plntx> "\expandafter\ifx\csname citenamefont\endcsname\relax" %<plntx> write$ newline$ %<plntx> " \def\citenamefont#1{#1}\fi" write$ newline$ %</lab&lab-def> %<*(url&!harnm)|eprint> %<*!plntx> %<nfss> "\providecommand{\url}[1]{\texttt{#1}}" %<!nfss> "\providecommand{\url}[1]{{\tt #1}}" write$ newline$ "\providecommand{\urlprefix}{}" write$ newline$ %</!plntx> %<*plntx> "\expandafter\ifx\csname url\endcsname\relax" write$ newline$ %<nfss> " \def\url#1{\texttt{#1}}\fi" %<!nfss> " \def\url#1{{\tt #1}}\fi" write$ newline$ "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{}\fi" write$ newline$ %</plntx> %</(url&!harnm)|eprint> %<*doi> "\expandafter\ifx\csname urlstyle\endcsname\relax" write$ newline$ %<*!plntx> " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else" write$ newline$ " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" write$ newline$ %</!plntx> %<*plntx> " \expandafter\ifx\csname doi\endcsname\relax" write$ newline$ " \def\doi#1{doi:\discretionary{}{}{}#1}\fi \else" write$ newline$ " \expandafter\ifx\csname doi\endcsname\relax" write$ newline$ " \def\doi{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi \fi" write$ newline$ %</plntx> %</doi> %<*url-doi&url> "\providecommand{\doiprefix}{doi: }" write$ newline$ "\expandafter\ifx\csname href\endcsname\relax" write$ newline$ " \providecommand{\urldoi}[1]{#1}\else" write$ newline$ " \providecommand{\urldoi}[1]{\href{https://doi.org/#1}{#1}}\fi" write$ newline$ %</url-doi&url> %<*lang> %<!plntx> "\providecommand{\selectlanguage}[1]{\relax}" %<*plntx> "\expandafter\ifx\csname selectlanguage\endcsname\relax" write$ newline$ " \def\selectlanguage#1{}\fi" %</plntx> write$ newline$ %</lang> %<*!plntx> %<*babel> "\input{francaisbst.tex}" write$ newline$ "\newcommand{\Capitalize}[1]{\uppercase{#1}}" write$ newline$ "\newcommand{\capitalize}[1]{\expandafter\Capitalize#1}" write$ newline$ %</babel> %<*annote> "\providecommand{\bibAnnoteFile}[1]{%" write$ newline$ " \IfFileExists{#1}{\begin{quotation}\noindent\textsc{Key:} #1\\" write$ newline$ " \textsc{Annotation:}\ \input{#1}\end{quotation}}{}}" write$ newline$ "\providecommand{\bibAnnote}[2]{%" write$ newline$ " \begin{quotation}\noindent\textsc{Key:} #1\\" write$ newline$ " \textsc{Annotation:}\ #2\end{quotation}}" write$ newline$ %</annote> %</!plntx> %<*bibinfo> %<!plntx> "\providecommand{\bibinfo}[2]{#2}" %<plntx> "\expandafter\ifx\csname bibinfo\endcsname\relax\def\bibinfo#1#2{#2}\fi" write$ newline$ %</bibinfo> %<*eprint> %<!plntx> "\providecommand{\eprint}[2][]{\url{#2}}" %<plntx> "\expandafter\ifx\csname eprint\endcsname\relax\def\eprint#1{\url{#1}}\fi" write$ newline$ %</eprint> } %</!html> %<*html> { "<html><head><title>Bibliography Listing" write$ newline$ "" write$ newline$ "

Bibliography

" write$ newline$ %"
" write$ newline$ %"
    " write$ newline$ } % % \end{macrocode} % \end{macro} % % \begin{macrocode} EXECUTE {begin.bib} % \end{macrocode} % % \begin{macrocode} EXECUTE {init.state.consts} % \end{macrocode} % % \begin{macrocode} ITERATE {call.type$} % \end{macrocode} % % \begin{macro}{`end.bib'} % \begin{macrocode} FUNCTION {end.bib} { newline$ % "\end{thebibliography}" write$ newline$ % "
" write$ newline$ } % \end{macrocode} % \end{macro} % % \begin{macrocode} EXECUTE {end.bib} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \section{The File \texttt{francaisbst.tex} for French} % The following contains the definitions for the \texttt{babel} language % selection as they apply to French. This file may be extracted with % \dtx{} and the option \texttt{bblbst}. % \changes{2.0}{2023-10-28}{La traduction française «cahier de % recherche» est remplacée par «rapport technique».} % \changes{2.0}{2023-10-28}{La traduction française «éditeur» % (éd.) est remplacée par «directeur» («dir.»).} % \changes{2.0}{2023-10-28}{La traduction française «édité par» est % remplacée par «sous la direction de».} % \begin{macrocode} %<*bblbst> % This is francaisbst.tex for French. \def\bbland{et} \def\bbletal{et~collab.} \def\bbleditors{directeurs} \def\bbleds{dir.} \def\bbleditor{directeur} \def\bbled{dir.} \def\bbledby{sous la direction de} \def\bbledition{\'edition} \def\bbledn{\'ed.} \def\bblvolume{volume} \def\bblvol{vol.} \def\bblof{de} \def\bblnumber{num\'ero} \def\bblno{{\no}} \def\bblin{dans} \def\bblpages{pages} \def\bblpp{p.} \def\bblpage{page} \def\bblp{p.} \def\bbleidpp{pages} \def\bblchapter{chaptitre} \def\bblchap{chap.} \def\bbltechreport{rapport technique} \def\bbltechrep{rapport technique} \def\bblmthesis{m\'emoire de ma\^itrise} \def\bblphdthesis{th\`ese de doctorat} \def\bblfirst{premi\`ere} \def\bblfirsto{1{\iere}} \def\bblsecond{seconde} \def\bblsecondo{2{\ieme}} \def\bblthird{troisi\`eme} \def\bblthirdo{3{\ieme}} \def\bblfourth{quatri\`eme} \def\bblfourtho{4{\ieme}} \def\bblfifth{cinqui\`eme} \def\bblfiftho{5{\ieme}} \def\bblst{{\iere}} \def\bblnd{{\ieme}} \def\bblrd{{\ieme}} \def\bblth{{\ieme}} \def\bbljan{janvier} \def\bblfeb{f\'evrier} \def\bblmar{mars} \def\bblapr{avril} \def\bblmay{mai} \def\bbljun{juin} \def\bbljul{juillet} \def\bblaug{ao\^ut} \def\bblsep{septembre} \def\bbloct{octobre} \def\bblnov{novembre} \def\bbldec{d\'ecembre} % % \end{macrocode} % % \Finale