diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/frankenstein/achicago.bsq')
-rw-r--r-- | Master/texmf-dist/doc/latex/frankenstein/achicago.bsq | 2001 |
1 files changed, 2001 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/frankenstein/achicago.bsq b/Master/texmf-dist/doc/latex/frankenstein/achicago.bsq new file mode 100644 index 00000000000..eb6257966d0 --- /dev/null +++ b/Master/texmf-dist/doc/latex/frankenstein/achicago.bsq @@ -0,0 +1,2001 @@ +%% +%% This is file `achicago.bsq', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% achicago.bst +%% +%% This program is part of the Frankenstein bundle for LaTeX. +%% +%% Copyright (C) 1995-2001 Matthew Swift <swift@alum.mit.edu> +%% +%% This file may have one of TWO names, either +%% achicago.bst or achicago.bsq. This +%% BibTeX style will work ONLY if it is called achicago.bst +%% and placed in a proper directory. This file should have been +%% distributed to you with a DIFFERENT file (also) called +%% achicago.bst which functions identically to this one +%% but contains documentation in comments. This file works faster, +%% but the other should be kept because it contains the documentation +%% for this BibTeX style. Files called README and INSTALL should have +%% also been distributed to you with this file; see them for more +%% information. +%% +%% This program is free software; you may redistribute it and/or +%% modify it under the conditions of the LaTeX Project Public +%% License, either version 1.2 or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt, and version 1.2 or later is +%% part of all distributions of LaTeX version 1999/12/01 or later. +%% +%% This program is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +%% LaTeX Project Public License for more details. +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%% + + %% A BibTeX bibliography style + %% conforming to the Chicago Manual's A style + %% but with B style author-date citations + %% by Matt Swift <swift@alum.mit.edu> + %% + %% \def\fileinfo{A Chicago Manual BibTeX style} + %% \def\DoXPackageS {longtable} + %% \def\initelyHavECitationS {} + %% \def\fileversion{v1} + %% \def\filedate{2001/08/31} + %% \def\docdate{2001/08/31} + %% + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } +INTEGERS { author.ptype editor.ptype organization.ptype key.ptype + emergency.ptype } +INTEGERS { last.year.tag.num } +STRINGS { last.leaditem last.label.and.year following.year.label.tag } +INTEGERS { j nameptr namesleft numnames len } +STRINGS { s t u v w } +ENTRY + { address + annotation + author + bookauthor + booktitle + chapter + edition + editor + faddress + flanguage + fpublisher + ftitle + fyear + howpublished + illustrator + institution + journal + key + month + note + number + oaddress + opublisher + organization + oyear + pages + publisher + school + series + seriesedition + title + translator + type + volume + year + yearcomp + } + { principal-type } + { label + year.label year.label.tag + principal-field + leaditem +} +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"} +FUNCTION {debugval} +{ ": [" * + swap$ * %$ + "] in " * cite$ * %$ + top$ %$ +} + +FUNCTION {debugmsg} +{ " in " * cite$ * top$ +} +FUNCTION {init.scalars} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + + #0 'author.ptype := + #1 'editor.ptype := + #2 'organization.ptype := + #3 'key.ptype := + #4 'emergency.ptype := +} +FUNCTION {not} +{ { #0 + } + { #1 + } + if$ %$ +} + +FUNCTION {and} +{ 'skip$ %$ + { pop$ %$ + #0 + } + if$ %$ +} + +FUNCTION {or} +{ { pop$ %$ + #1 + } + 'skip$ %$ + if$ %$ +} +FUNCTION {comma} +{ "," +} + +FUNCTION {period} +{ "." +} + +FUNCTION {hyphen} +{ "-" +} + +FUNCTION {colon} +{ ":" +} + +FUNCTION {space} +{ " " +} + +FUNCTION {delimiter.name-part} +{ " " +} + +FUNCTION {delimiter.name} +{ " " +} + +FUNCTION {delimiter.sub-sortkey} +{ " " +} + +FUNCTION {tie} +{ "~" +} + +FUNCTION {etal} +{ " et~al." +} +FUNCTION {unidentified} +{ "HiGHlY*Peco@lIEr" +} +FUNCTION{output.begin} +{ "" + before.all 'output.state := +} +FUNCTION {output.end} +{ write$ %$ +} +FUNCTION {new.block} +{ output.state before.all = + 'skip$ %$ + { after.block 'output.state := + } + if$ %$ +} +FUNCTION {new.sentence} +{ output.state before.all = output.state after.block = or + 'skip$ %$ + { after.sentence 'output.state := + } + if$ %$ +} +FUNCTION {output.internal} +{ 's := % s := string/entry(nonnull) + space * 't := % t := punctuation + space + output.state mid.sentence = + { t * write$ %$ + } + { output.state after.block = + { add.period$ write$ + newline$ %$ + "\newblock " write$ %$ + } + { output.state before.all = + 'write$ %$ + { add.period$ space * write$ + } + if$ %$ + } + if$ %$ + mid.sentence 'output.state := + } + if$ %$ + s +} +FUNCTION {output} +{ swap$ duplicate$ empty$ + { pop$ + pop$ %$ + } + 'output.internal + if$ %$ +} +FUNCTION {output.bibitem} +{ newline$ %$ + "\bibitem[\UnexpandableProtect\SCcite{" write$ %$ + label write$ %$ + "}{" write$ %$ + year.label year.label.tag * write$ %$ + "}]{" write$ %$ + cite$ write$ + "}" write$ %$ + newline$ %$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ %$ + "" + } + 'skip$ %$ + if$ %$ +} +FUNCTION {italicize} +{ duplicate$ empty$ + { pop$ %$ + "" + } + { "\textitswitch{" swap$ * "}" * %$ + } + if$ %$ +} +FUNCTION {parenthesize} +{ duplicate$ empty$ + { pop$ %$ + "" + } + { "(" swap$ * ")" * %$ + } + if$ %$ +} +FUNCTION {format.clip} +{ #1 entry.max$ substring$ + #1 global.max$ substring$ +} +FUNCTION {format.sortify.clip} +{ % duplicate$ "sinful" debugval %$ + purify$ %$ + "l" change.case$ %$ + format.clip +} +FUNCTION {check.empty} +{ 't := + duplicate$ empty$ + { "empty " t * " in " * cite$ * warning$ + } + 'skip$ %$ + if$ %$ +} +FUNCTION {multipage.p} +{ pages 't := + #0 'j := + % WHILE + { j not + t empty$ not %$ + and + } + { t #1 #1 substring$ %$ + duplicate$ hyphen = %$ + swap$ duplicate$ comma = + swap$ "+" = %$ + or + or + { #1 'j := + } + { t #2 global.max$ substring$ 't := + } + if$ + } + while$ + j +} +FUNCTION {format.n.dashify} +{ 't := + "" + % WHILE + { t empty$ not } %$ + { t #1 #1 substring$ hyphen = %$ + { t #1 #2 substring$ "--" = not %$ + { "--" * + t #2 global.max$ substring$ 't := + } + { % WHILE + { t #1 #1 substring$ hyphen = } %$ +{ hyphen * + t #2 global.max$ substring$ 't := +} + while$ %$ + } + if$ %$ + } + { t #1 #1 substring$ * %$ + t #2 global.max$ substring$ 't := + } + if$ %$ + } + while$ %$ +} +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #5 < + { tie + } + { space + } + if$ + swap$ * * +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ + } + if$ +} +FUNCTION {start.a.q} +{ #-1 'j := + "" +} +FUNCTION {inc.j} +{ j #1 + 'j := +} + +FUNCTION {key.q} +{ duplicate$ empty$ + { pop$ %$ + key field.or.null + inc.j + } + 'skip$ %$ + if$ %$ +} + +FUNCTION {organization.q} +{ duplicate$ empty$ + { pop$ %$ + organization field.or.null + inc.j + } + 'skip$ %$ + if$ %$ +} + +FUNCTION {editor.q} +{ duplicate$ empty$ + { pop$ %$ + editor field.or.null + inc.j + } + 'skip$ %$ + if$ %$ +} + +FUNCTION {author.q} +{ duplicate$ empty$ + { pop$ %$ + author field.or.null + inc.j + } + 'skip$ %$ + if$ %$ +} + +FUNCTION {blank.q} +{ duplicate$ empty$ + 'inc.j + 'skip$ %$ + if$ %$ +} +FUNCTION {check.q} +{ 't := + duplicate$ empty$ + { pop$ %$ + cite$ format.clip 'u := %$ + "Need " t * " in " * cite$ * "; using: " * u * warning$ + u + inc.j + } + 'skip$ %$ + if$ %$ +} +FUNCTION {format.names.for.label} +{ 's := + s num.names$ 'numnames := %$ + s #1 "{vv~}{ll}" format.name$ %$ + s numnames "{ff}{vv}{ll}{jj}" format.name$ "others" = %$ + numnames #3 > + or + % more than 3 names, or final name is "others" + { etal * + } + { numnames #1 - 'namesleft := + #2 'nameptr := +{ namesleft #0 > } +{ nameptr numnames = + % we're on the final name (and it's not "others") + { numnames #2 > +{ comma * +} +'skip$ %$ + if$ %$ + " and " * s nameptr "{vv~}{ll}" format.name$ * %$ + } + % we're not on the final name (in this case: 2d of 3 names) + { comma * space * + s nameptr "{vv~}{ll}" format.name$ * %$ + } + if$ %$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := +} + while$ %$ + } + if$ %$ +} +FUNCTION {format.names.lastfirst} +{ 's := + s num.names$ 'numnames := % numnames = num.name$(s); + numnames 'namesleft := + #1 'nameptr := % nameptr = 1; + % WHILE + { namesleft #0 > } + { nameptr #1 = + { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ %$ + } + { comma * + s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := %$ + nameptr numnames = + % final name + { t "others" = + { etal * + } + { " and " * t * + } + if$ %$ + } + % names both precede and follow this name + { space * t * + } + if$ %$ + } + if$ %$ + nameptr #1 + 'nameptr := % nameptr += 1; + namesleft #1 - 'namesleft := % namesleft =- 1; + } + while$ %$ +} +FUNCTION {format.names.firstfirst} +{ 's := + s num.names$ 'numnames := % numnames = num.name$(s); + numnames 'namesleft := + #1 'nameptr := % nameptr = 1; + % WHILE + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := %$ + nameptr #1 = + 't + { nameptr numnames = + % final name + { numnames #2 > + { comma * + } + 'skip$ %$ + if$ %$ + t "others" = + { etal * + } + { " and " * t * + } + if$ %$ + } + % names both precede and follow this name + { comma * space * t * + } + if$ %$ + } + if$ %$ + nameptr #1 + 'nameptr := % nameptr += 1; + namesleft #1 - 'namesleft := % namesleft =- 1; + } + while$ %$ +} +FUNCTION {make.annotation} +{ annotation empty$ %$ + { "" + } + { "\begin{SCannotation}" + annotation * + "\end{SCannotation}" * + } + if$ %$ +} +FUNCTION {make.edition} +{ edition empty$ %$ + { seriesedition empty$ not series field.or.null title field.or.null = and %$ + { seriesedition + } + { "" + } + if$ %$ + } + { edition + } + if$ %$ +} +FUNCTION {make.year.month} + { year empty$ %$ + { "" + } + { year year.label.tag * +month empty$ %$ + 'skip$ %$ + { comma * space * month * + } +if$ %$ + } + if$ %$ +} +FUNCTION {make.year.nomonth} +{ year empty$ %$ + { "" + } + { year year.label.tag * + } + if$ %$ +} +FUNCTION {make.year.or.oyear.month} +{ oyear empty$ %$ + { make.year.month + } + { year empty$ %$ + { "oyear without year in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + oyear year.label.tag * + month empty$ %$ + 'skip$ %$ +{ comma * space * month * + } + if$ %$ + } + if$ %$ +} +FUNCTION {make.leaditem.with.tags} +{ leaditem + principal-type editor.ptype = + { editor num.names$ #1 > %$ +{ ",~eds." * +} +{ ",~ed." * +} + if$ %$ + } + 'skip$ %$ + if$ %$ +} +FUNCTION {make.editors.secondary} +{ editor empty$ %$ + { "" + } + { output.state after.sentence = + output.state after.block = or + { "E" + } + { "e" + } + if$ %$ + "dited by " * editor format.names.firstfirst * + } + if$ %$ +} +FUNCTION {make.bookauthors.secondary} +{ bookauthor empty$ %$ + { "" + } + { output.state after.sentence = + output.state after.block = + or + { "B" + } + { "b" + } + if$ %$ + "y " * bookauthor format.names.firstfirst * + } + if$ %$ +} +FUNCTION {make.translators} +{ translator empty$ %$ + { "" + } + { output.state after.sentence = + output.state after.block = + or + { "T" + } + { "t" + } + if$ %$ + "ranslated " * + flanguage empty$ %$ + 'skip$ %$ + { "from the " * flanguage * space * + } + if$ %$ + "by " * translator format.names.firstfirst * + } + if$ %$ +} + +FUNCTION {make.illustrators} +{ illustrator empty$ %$ + { "" + } + { output.state after.sentence = + output.state after.block = + or + { "I" + } + { "i" + } + if$ %$ + "llustrated by " * illustrator format.names.firstfirst * + } + if$ %$ +} +FUNCTION {make.title.ital} +{ title field.or.null italicize +} + +FUNCTION {make.booktitle.ital} +{ booktitle field.or.null italicize +} + +FUNCTION {make.as.ftitle.ital} +{ ftitle empty$ %$ + { "" + } + { "as " ftitle italicize * + } + if$ %$ +} +FUNCTION {make.title.inquotes} +{ title empty$ %$ + { "" + } + { + "\Wrapquotes{" title * "}" * + } + if$ %$ +} +FUNCTION {make.pages} +{ pages empty$ %$ + { "" + } + { pages format.n.dashify + } + if$ %$ +} +FUNCTION {make.vol.series.num.month.pages} +{ volume empty$ %$ + { series empty$ %$ + { number empty$ %$ + { month empty$ %$ +{ pages empty$ %$ + % none of VSNMP + { space 'u := + "" + } + % P + { comma 'u := + multipage.p + { "pp." pages format.n.dashify +} + { "p." pages +} + if$ %$ + tie.or.space.connect + } + if$ %$ +} +{ pages empty$ %$ + % M + { comma 'u := + month + } + % MP + { comma 'u := + month comma * space * make.pages * + } + if$ %$ +} + if$ %$ + } + { month empty$ %$ +{ pages empty$ %$ + % N + { comma 'u := + "no." number tie.or.space.connect + } + % NP + { comma 'u := + "no." number colon * make.pages * tie.or.space.connect + } + if$ %$ +} +{ pages empty$ %$ + % NM + { comma 'u := + "no." number tie.or.space.connect + space * month parenthesize * + } + % NMP + { comma 'u := + "no." number tie.or.space.connect + space * month parenthesize * + colon * space * make.pages * + } + if$ %$ +} + if$ %$ + } + if$ %$ + } + { number empty$ %$ + { month empty$ %$ +{ pages empty$ %$ + % S + { + } + % SP + { + } + if$ %$ +} +{ pages empty$ %$ + % SM + { + } + % SMP + { + } + if$ %$ +} + if$ %$ + } + { month empty$ %$ +{ pages empty$ %$ + % SN + { + } + % SNP + { + } + if$ %$ +} +{ pages empty$ %$ + % SNP + { + } + % SNMP + { + } + if$ %$ +} + if$ %$ + } + if$ %$ + } + if$ %$ + } + { series empty$ %$ + { number empty$ %$ + { month empty$ %$ +{ pages empty$ %$ + % V + { comma 'u := + "vol." volume tie.or.space.connect + } + % VP + { space 'u := + volume colon * make.pages * + } + if$ %$ +} +{ pages empty$ %$ + % VM + { comma 'u := + "vol." volume tie.or.space.connect + space * month parenthesize * + } + % VMP + { space 'u := + volume space * + month parenthesize * colon * space * make.pages * + } + if$ %$ +} + if$ %$ + } + { month empty$ %$ +{ pages empty$ %$ + % VN + { space 'u := + volume ", no." number tie.or.space.connect * + } + % VNP + { space 'u := + volume space * + number parenthesize * colon * space * make.pages * + } + if$ %$ +} +{ pages empty$ %$ + % VNM + { space 'u := + volume ", no." number tie.or.space.connect * + space * month parenthesize * + } + % VNMP + { space 'u := + volume space * number parenthesize * colon * space * + make.pages * space * month parenthesize * + } + if$ %$ +} + if$ %$ + } + if$ %$ + } + { number empty$ %$ + { month empty$ %$ +{ pages empty$ %$ + % VS + { + } + % VSP + { + } + if$ %$ +} +{ pages empty$ %$ + % VSM + { + } + % VSMP + { + } + if$ %$ +} + if$ %$ + } + { month empty$ %$ +{ pages empty$ %$ + % VSN + { + } + % VSNP + { + } + if$ %$ +} +{ pages empty$ %$ + % VSNM + { + } + % VSNMP + { + } + if$ %$ +} + if$ %$ + } + if$ %$ + } + if$ %$ + } + if$ %$ +} +FUNCTION {make.crossref} +{ "\citeNP{" crossref * "}" * +} +FUNCTION {output.series.number} +{ series empty$ %$ + { number empty$ %$ + { "" + } + { "Can't use `number' without `series' in " cite$ * warning$ + "" + } + if$ %$ + } + { number empty$ %$ +{ series + seriesedition empty$ %$ + 'skip$ %$ + { comma output + new.block + seriesedition + } + if$ %$ +} +{ series space * + "no." * + number tie.or.space.connect + "number and seriesedition" seriesedition either.or.check +} + if$ %$ + } + if$ %$ + comma output +} +FUNCTION {output.volume.series} +{ volume empty$ %$ + { "" + } + { "Volume" volume tie.or.space.connect + series empty$ %$ + 'skip$ %$ + { " of " * series italicize * + seriesedition empty$ %$ + 'skip$ %$ + { comma output + new.block + seriesedition + } + if$ %$ + } + if$ %$ + "volume and number" number either.or.check + } + if$ %$ + comma output +} +FUNCTION {make.chapter.of} +{ chapter empty$ %$ + { "" + } + { type empty$ %$ + { "Chapter" + } + { type "t" change.case$ %$ + } + if$ %$ + chapter tie.or.space.connect + " of " * + } + if$ %$ +} +FUNCTION {make.chapter} +{ chapter empty$ %$ + { "" + } + { type empty$ %$ + { "Chapter" + } + { type "t" change.case$ %$ + } + if$ %$ + chapter tie.or.space.connect + } + if$ %$ +} +FUNCTION {make.number.tr} +{ type empty$ %$ + { "Technical Report" + } + { type "t" change.case$ %$ + } + if$ %$ + number empty$ %$ + 'skip$ %$ + { number tie.or.space.connect + } + if$ %$ +} +%% +%% FIX: new idea, start using it +FUNCTION {set.principal-field.principal-type} +{ type$ "book" = %$ + type$ "inbook" = %$ + or + { start.a.q + author.q + editor.q + blank.q + key.q + "author, editor, or key for entry type " type$ * check.q %$ + } + { type$ "proceedings" = %$ + { start.a.q + blank.q + editor.q + organization.q + key.q + "editor, organization, or key for entry type " type$ * check.q %$ + } + { type$ "manual" = %$ + { start.a.q + author.q + blank.q + organization.q + key.q + "author, organization, or key for entry type " type$ * check.q %$ + } + % for all other entry types + { start.a.q + author.q + blank.q + blank.q + key.q + "author or key for entry type " type$ * check.q %$ + } + if$ %$ + } + if$ %$ + } + if$ %$ + 'principal-field := + j 'principal-type := +} + +FUNCTION {key.special.p} +{ type$ "manual" = %$ +type$ "proceedings" = %$ + or + principal-type organization.ptype = + and + key empty$ not %$ + and +} + +FUNCTION {make.leaditem} +{ key.special.p + % is \field{key} all-caps? + { key duplicate$ "u" change.case$ = + % if so, key is assumed to be an acronym FIX; should I warn what we're doing? + { key " (" * organization * ")" * + } + % if not, key is assumed to be an initial prefix (abbreviation) of organization + % for use only in the label + { organization + } + if$ %$ + } + { principal-field +principal-type author.ptype = +principal-type editor.ptype = + or +{ format.names.lastfirst +} +'skip$ %$ + if$ %$ + } + if$ %$ +} + +FUNCTION {make.label.from.principal-field} +{ principal-field + principal-type author.ptype = + principal-type editor.ptype = + or + { format.names.for.label + } + % organization, key, or emergency + 'skip$ %$ + if$ %$ +} + +FUNCTION {make.label} +{ key.special.p + { key + } + { make.label.from.principal-field + } + if$ %$ +} + + +FUNCTION {length} +{ 'u := + #0 'len := + % WHILE + { u "" = not } + { len #1 + 'len := + u #2 global.max$ substring$ 'u := + } + while$ %$ + len +} + + +FUNCTION {head} +{ 'w := + w #1 #1 substring$ %$ + duplicate$ "{" = %$ + { w #2 #1 substring$ "\" = %$ + { pop$ %$ + w #1 text.prefix$ %$ + } + 'skip$ %$ + if$ %$ + } + 'skip$ %$ + if$ %$ +} + + +FUNCTION {behead} +{ 'u := + u + u head length #1 + + global.max$ %$ + substring$ %$ +} + +FUNCTION {behead.t} +{ t behead 't := +} + +FUNCTION {format.dehyphen} +{ 't := + "" + % WHILE + { t "" = not } + { t head + duplicate$ hyphen = %$ + { pop$ %$ + } + { * + } + if$ %$ + behead.t + } + while$ %$ +} + + + + +FUNCTION {format.dehyphen.dewhitespace} +{ 't := + "" + % WHILE + { t "" = not } + { t head + duplicate$ %$ + duplicate$ hyphen = %$ + swap$ empty$ + or + { pop$ %$ + } + { * + } + if$ %$ + behead.t + } + while$ %$ +} + +FUNCTION {format.names.for.sort} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := %$ + numnames 'namesleft := + % WHILE + { namesleft #0 > } + { + % NOTE: order or name-parts ought to follow that used for leaditem + % word-by-word alphabetization: + % letter-by-letter alphabetization, no attention to initials: + + % letter-by-letter alphabetization, with first initials exception: + + s nameptr "{vv{}}{ll{}}{ jj{}}" format.name$ %$ + + % Each first-name token of the form of an initial ("L.") will be followed by a + % space but other spaces will be removed. + + % Algorithm: step through looking for space, which terminates name tokens, + % adding non-spaces to an accumulator on the stack as we go. + % When we find a space, look at the accumulator (a whole name token). + % If it's length is 2 and 2d char is a period, we've got an initial, so + % add the space to the accumulator. If not, throw away the space + % and step on looking for another name. + + % FIX: would it be simpler to replace periods with spaces? + % would a period ever appear in a first-name when not an initial? + % Rev.? Col.? These should be alphabetized as spelled out, prob. + % but need to check \manual + + + s nameptr "{ff{ } }" format.name$ 't := %$ + % t is "F1 F2 F3 ... FN " or empty + + + t empty$ %$ + 'skip$ %$ + { delimiter.name-part * + "" % accumulator + % WHILE + { t "" = not } + { t head + duplicate$ empty$ + % last char will always be a space + % accumulator contains whole name token + { pop$ %$ throw space away for now; top of stack is now accumulator + duplicate$ %$ + duplicate$ text.length$ #2 = % 2 chars long + swap$ behead head period = %$ 2d char is period + and + % name token in accumulator is an initial, so add a space to it + { space * + } + % name token in accumulator is not an initial + 'skip$ %$ + if$ %$ + % in either case, concatenate the accumulator the name on the + % stack and initialize it again + * "" + } + % accumulator contains partial name token + % add t's head (not a space) to accumulator + { * + } + if$ %$ + behead.t + } + while$ %$ + % we always end up with an empty string on the stack + pop$ %$ + } + if$ %$ + + format.dehyphen + 't := + % t now contains one name of a namelist + nameptr #1 = + { t + } + { delimiter.name * + nameptr numnames = + t "others" = + and + { "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" * + } + { t * + } + if$ %$ + } + if$ %$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ %$ +} +FUNCTION {make.principal-field.for.sort} % FIX: note: leaditem must already be set +{ principal-type author.ptype = + principal-type editor.ptype = + or + { principal-field format.names.for.sort + } + { principal-type emergency.ptype = + { principal-field + } + % organization.ptype, key.ptype, including both key.special cases + % leaditem is the same as principal-field except in the key.special + % cases, when we do want the leaditem not the principal-field +{ leaditem + % letter-by-letter alphabetization: + format.dehyphen.dewhitespace + } + if$ %$ + } + if$ %$ +} +FUNCTION {begin.entry} +{ output.begin + output.bibitem +} +FUNCTION {finish.entry} +{ add.period$ %$ + output.end + newline$ %$ + make.annotation write$ %$ +} +FUNCTION {article} +{ begin.entry + make.leaditem.with.tags space output + new.block + make.year.nomonth "year" check.empty space output + new.block + make.title.inquotes "title" check.empty space output + new.block + crossref empty$ %$ + { journal italicize "journal" check.empty space output + series empty$ %$ + 'skip$ %$ + { "Achicago can not yet handle nonempty series! in " cite$ * warning$ + } + if$ %$ + volume empty$ number empty$ month empty$ pages empty$ and and and + { "empty volume, number, month, and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + make.vol.series.num.month.pages u output + } + { "In " make.crossref * space output + make.pages "pages" check.empty comma output + } + if$ %$ + new.block + note space output + finish.entry +} +FUNCTION {book} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.or.oyear.month "year" check.empty comma output + new.block + make.title.ital "title" check.empty comma output + new.block + make.edition comma output + new.block + crossref empty$ %$ + { volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + editor empty$ author empty$ or + 'skip$ %$ + { new.block + make.editors.secondary comma output + } + if$ %$ + new.block + make.translators comma output + new.block + make.illustrators comma output + new.block + oyear empty$ %$ + { address comma output + publisher "publisher" check.empty colon output + } + { oaddress comma output + opublisher "opublisher" check.empty colon output + new.block + "Reprint" comma output + address field.or.null comma output + publisher "publisher" check.empty + address empty$ %$ + { comma + } + { colon + } + if$ %$ + output + year "year" check.empty comma output + } + if$ %$ + } + { volume empty$ %$ + { "In " + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ %$ + make.crossref * comma output + } + if$ %$ + new.block + yearcomp empty$ %$ + 'skip$ %$ + { "Composed in " yearcomp * + comma output + new.block + } + if$ %$ + fyear empty$ + 'skip$ + { "First published " + translator empty$ flanguage empty$ not and + { "in " * flanguage * space * + } + 'skip$ + if$ + make.as.ftitle.ital * space output + faddress empty$ fpublisher empty$ not and + { "by " + } + { "in " + } + if$ %$ + space output + faddress space output + fpublisher + faddress empty$ %$ + { space + } + { colon + } + if$ %$ + output + fyear + faddress empty$ fpublisher empty$ and + { space + } + { comma + } + if$ output %$ + new.block + } + if$ %$ + note comma output + finish.entry +} +FUNCTION {inbook} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.or.oyear.month "year" check.empty comma output + new.block + crossref empty$ %$ + { make.chapter.of + duplicate$ 'u := %$ + duplicate$ empty$ + { pop$ %$ + pages empty$ %$ + { "empty chapter, type, and pages in " cite$ * warning$ + "In " + } + { "Pages " make.pages * " in " * + } + if$ %$ + } + 'skip$ %$ + if$ %$ + comma output + make.title.ital "title" check.empty space output + make.bookauthors.secondary comma output + make.editors.secondary comma output + volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + make.edition comma output + u empty$ %$ + 'skip$ %$ + { make.pages comma output + } + if$ %$ + new.block + make.translators comma output + new.block + make.illustrators comma output + new.block + oyear empty$ %$ + { address comma output + publisher "publisher" check.empty colon output + } + { oaddress comma output + opublisher "opublisher" check.empty colon output + new.block + "Reprint" comma output + address field.or.null comma output + publisher "publisher" check.empty + address empty$ %$ + { comma + } + { colon + } + if$ %$ + output + year "year" check.empty comma output + } + if$ %$ + } + % crossref not empty + { "In " make.crossref * comma output + make.chapter comma output + make.pages comma output + chapter empty$ pages empty$ and + { "empty chapter and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + } + if$ %$ + new.block + note comma output + finish.entry +} +FUNCTION {incollection} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.or.oyear.month "year" check.empty space output + new.block + make.title.inquotes "title" check.empty space output + new.block + crossref empty$ %$ + { make.chapter.of duplicate$ empty$ + { pop$ %$ + "In " + } + 'skip$ %$ + if$ %$ + space output + make.booktitle.ital "booktitle" check.empty space output + make.bookauthors.secondary comma output + make.editors.secondary comma output + volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + make.edition comma output + make.pages comma output + chapter empty$ type empty$ and pages empty$ and %$ + { "empty chapter, type, and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + new.block + make.translators space output + new.block + make.illustrators space output + new.block + oyear empty$ %$ + { address space output + publisher "publisher" check.empty colon output + } + { oaddress space output + opublisher "opublisher" check.empty colon output + new.block + "Reprint" comma output + address comma output + publisher "publisher" check.empty + address empty$ %$ + { comma + } + { colon + } + if$ %$ + output + year comma output + } + if$ %$ + } + % crossref not empty + { new.block + "In " make.crossref * space output + make.chapter comma output + make.pages comma output + chapter empty$ pages empty$ and + { "empty chapter and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + } + if$ %$ + new.block + note space output + finish.entry +} +FUNCTION {format.thesis} +{ 'v := + begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month "year" check.empty space output + new.block + make.title.inquotes "title" check.empty space output + new.block + v "type" check.empty space output + school "school" check.empty comma output + address comma output + new.block + note space output + finish.entry +} +FUNCTION {thesis} +{ type field.or.null format.thesis +} +FUNCTION{mastersthesis} +{ type empty$ %$ + { "Master's thesis" + } + { type + } + if$ %$ + format.thesis +} +FUNCTION {minorthesis} +{ mastersthesis +} +FUNCTION {phdthesis} +{ type empty$ %$ + { "Ph.D.~diss." + } + { type + } + if$ %$ + format.thesis +} +FUNCTION {majorthesis} +{ phdthesis +} +FUNCTION {manual} +{ begin.entry + make.leaditem.with.tags space output + new.block + make.year.month space output + new.block + make.title.ital "title" check.empty comma output + new.block + make.edition comma output + new.block + address space output + organization colon output + new.block + note space output + finish.entry +} +FUNCTION {booklet} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month space output + new.block + make.title.inquotes "title" check.empty comma output + new.block + howpublished space output + address comma output + new.block + note space output + finish.entry +} +FUNCTION {inproceedings} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month "year" check.empty space output + new.block + make.title.inquotes "title" check.empty space output + new.block + crossref empty$ %$ + { make.editors.secondary space output + make.booktitle.ital "booktitle" check.empty comma output + volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + make.edition comma output + new.block + organization space output + address comma output + publisher colon output + make.pages comma output + } + { "In " make.crossref * space output + make.chapter comma output + make.pages comma output + chapter empty$ pages empty$ and + { "empty chapter and pages in " cite$ * warning$ + } + 'skip$ %$ + if$ %$ + } + if$ %$ + new.block + note space output + finish.entry +} +FUNCTION {conference} +{ inproceedings +} +FUNCTION {proceedings} +{ begin.entry + make.leaditem.with.tags space output + new.block + make.year.month "year" check.empty space output + new.block + make.title.ital "title" check.empty comma output + new.block + make.edition comma output + new.block + volume empty$ %$ + { output.series.number + } + { output.volume.series + } + if$ %$ + new.block + organization space output + address comma output + publisher colon output + new.block + note comma output + finish.entry +} +FUNCTION {misc} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month space output + new.block + title space output + new.block + howpublished comma output + new.block + note space output + finish.entry +} +FUNCTION {techreport} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month "year" check.empty comma output + new.block + make.title.inquotes "title" check.empty comma output + new.block + make.number.tr comma output + institution "institution" check.empty comma output + address comma output + new.block + note comma output + finish.entry +} +FUNCTION {unpublished} +{ begin.entry + make.leaditem.with.tags comma output + new.block + make.year.month space output + new.block + make.title.inquotes "title" check.empty space output + new.block + note "note" check.empty space output + finish.entry +} +FUNCTION {default.type} +{ misc } +FUNCTION {chop.word} +{ 't := + 'len := + t #1 len substring$ = %$ + { t len #1 + global.max$ substring$ + } + { t + } + if$ %$ +} +FUNCTION {make.title.for.sort} +{ title field.or.null + 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + format.dehyphen.dewhitespace +} +FUNCTION {presort} +{ set.principal-field.principal-type + + make.leaditem + 'leaditem := + + make.label + 'label := + + oyear empty$ %$ + { year + } + { oyear + } + if$ %$ + field.or.null purify$ #-1 #4 substring$ + 'year.label := +} + +FUNCTION {sortkey<-label+year+principal+title} +{ label + delimiter.sub-sortkey * + year.label * + delimiter.sub-sortkey * + make.principal-field.for.sort * + delimiter.sub-sortkey * + make.title.for.sort * + format.sortify.clip + 'sort.key$ := %$ +} + +FUNCTION {sortkey<-principal+year+year-tag} +{ make.principal-field.for.sort + delimiter.sub-sortkey * + year.label * + year.label.tag * + format.sortify.clip + 'sort.key$ := %$ +} + +FUNCTION {presort.&.sortkey<-label+year+principal+title} +{ presort + sortkey<-label+year+principal+title +} +FUNCTION {initialize.sorting-gvars} +{ unidentified 'last.leaditem := + unidentified 'last.label.and.year := + "" 'following.year.label.tag := + #0 'last.year.tag.num := +} +FUNCTION {forward.pass.wrap.dupe.leaditems} +{ leaditem + duplicate$ last.leaditem = %$ + % we add the brace pair at the end because this forces add.period$ to add a %$ + % period after it. FIX: if we ever want \SCdup to actually print its + % argument, we must get it to print its argument minus any final period. + { "\SCduplicate{" swap$ * "{}}" * 'leaditem := %$ + } + { 'last.leaditem := + } + if$ %$ +} +FUNCTION {forward.pass.add.bcds} +{ label year.label * format.clip + duplicate$ last.label.and.year = %$ + % same as previous entry + { pop$ %$ + last.year.tag.num #1 + 'last.year.tag.num := + last.year.tag.num int.to.chr$ 'year.label.tag := %$ + } + % different from previous entry + { "a" chr.to.int$ 'last.year.tag.num := %$ + "" 'year.label.tag := + 'last.label.and.year := + } + if$ %$ +} + +FUNCTION {reverse.pass.add.as} +{ following.year.label.tag "b" = + { "a" 'year.label.tag := + } + 'skip$ %$ + if$ %$ + year.label.tag 'following.year.label.tag := +} +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ %$ + { preamble$ write$ newline$ %$ + } + if$ %$ + "\begin{thebibliography}{}" write$ newline$ +} +FUNCTION {end.bib} +{ newline$ %$ + "\end{thebibliography}" write$ newline$ +} +READ + +EXECUTE {init.scalars} + +ITERATE {presort.&.sortkey<-label+year+principal+title} +SORT + +EXECUTE {initialize.sorting-gvars} + +ITERATE {forward.pass.add.bcds} +REVERSE {reverse.pass.add.as} + +ITERATE{sortkey<-principal+year+year-tag} +SORT + +EXECUTE {initialize.sorting-gvars} +ITERATE {forward.pass.wrap.dupe.leaditems} + +EXECUTE {begin.bib} +ITERATE {call.type$} %$ +EXECUTE {end.bib} |