X-Git-Url: http://git.tpope.net/?p=latex-mlastyle.git;a=blobdiff_plain;f=mlastyle.bst;h=83f4b76b6161947f6c09657cb2d6e230279bb0ae;hp=ffe9e715911a967ef2591b5353c1ea83bfc8a929;hb=6a7aa628fac83636b2b227231f5c35aff61aad50;hpb=b73d3016e6c6aad770d1d76e83628a6542b4b507 diff --git a/mlastyle.bst b/mlastyle.bst index ffe9e71..83f4b76 100644 --- a/mlastyle.bst +++ b/mlastyle.bst @@ -1,13 +1,14 @@ +% $Id: mlastyle.bst,v 1.13 2003-11-22 19:15:11 tpope Exp $ % BibTeX bibliography style `mlastyle' % Based on BibTeX standard bibliography style `plain' % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. - % Copyright (C) 1985, all rights reserved. + % Copyright (C) 2003 Tim Pope, all rights reserved. % Copying of this file is authorized only if either % (1) you make absolutely no changes to your copy, including name, or % (2) if you do make changes, you name it something other than % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst. % This restriction helps ensure that all standard styles are identical. - % The file btxbst.doc has the documentation for this style. + % The file mlastyle.dvi has the documentation for this style. ENTRY { address @@ -34,6 +35,7 @@ ENTRY year % New fields url + urldate accessdate urlpath version @@ -61,6 +63,7 @@ FUNCTION {init.consts} #0 'citealp.used := #0 'url.used := " \ \ \ \ \unskip\unskip\unskip\unskip\unskip " 'empty.title := + "" 'empty.title := } FUNCTION {not} @@ -84,7 +87,7 @@ FUNCTION {or} INTEGERS {chars i j} % text.length$ does not include braces -% ...this is probably unnecessary +% ...this function is probably unnecessary FUNCTION {num.chars} { #0 'chars := @@ -240,6 +243,11 @@ FUNCTION {field.or.null} if$ } +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } @@ -254,7 +262,8 @@ FUNCTION {enquote} #1 'i := #0 'j := { duplicate$ i #1 substring$ "" = not } - { duplicate$ i #1 substring$ quote$ = + { duplicate$ duplicate$ i #1 substring$ quote$ = + swap$ i #1 - #1 substring$ "\" = not and %" { duplicate$ #1 i #1 - substring$ swap$ i #1 + global.max$ substring$ j @@ -278,6 +287,10 @@ FUNCTION {enquote} i #1 + 'i := } while$ + j #1 = + { "odd number of quotation marks in " cite$ * warning$ } + 'skip$ + if$ duplicate$ #1 #1 substring$ "`" = { "``\thinspace" swap$ * } { "``" swap$ *} @@ -290,6 +303,19 @@ FUNCTION {enquote} if$ } +FUNCTION {selective.enquote} +{ field.or.null duplicate$ sortify 's := + s #1 #8 substring$ duplicate$ "rev. of " = swap$ "rev.~of " = or + s #1 #9 substring$ "rev.\ of " = or + s "introduction" = or + s "preface" = or + s "forward" = or + s "afterward" = or + 'skip$ + 'enquote + if$ +} + INTEGERS { nameptr namesleft numnames } FUNCTION {format.names.custom} @@ -334,8 +360,12 @@ FUNCTION {format.names.beginning} { namesleft #0 > } { nameptr #1 = { s nameptr "{vv~}{ll}{, ff}{, jj}" format.name$ - duplicate$ #1 #1 substring$ "u" change.case$ swap$ - #2 global.max$ substring$ * 't := } + duplicate$ #1 #1 substring$ duplicate$ "{" = + 'skip$ + { "u" change.case$ } + if$ + swap$ #2 global.max$ substring$ * 't := + } { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := } if$ nameptr #1 > @@ -412,7 +442,7 @@ FUNCTION {format.publisher} % Changed to preserve case and use quotes FUNCTION {format.title} -{ title enquote +{ title selective.enquote } FUNCTION {n.dashify} @@ -457,7 +487,7 @@ FUNCTION {format.date} if$ } -INTEGERS {xx} +%INTEGERS {xx} FUNCTION {format.btitle} { title emphasize %title num.chars int.to.str$ top$ @@ -513,13 +543,6 @@ FUNCTION {format.bvolume.or.num.series} if$ } -FUNCTION {format.number.series} -{ volume empty$ - { "" } - { "" } - if$ -} - % Changed edition to MLA abbreviation FUNCTION {format.edition} { edition empty$ @@ -528,13 +551,14 @@ FUNCTION {format.edition} { "Vers.~" version *} if$ } - { edition "l" change.case$ 's := edition 't := + { edition sortify 's := edition 't := "" "10th" "tenth" "9th" "ninth" "8th" "eighth" "7th" "seventh" "6th" "sixth" "5th" "fifth" "4th" "fourth" "3rd" "third" "2nd" "second" "1st" "first" + "Rev." "revised" "Abr." "abridged" {duplicate$ empty$ { pop$ #0 }{ #1 } if$ }{ s = { 't := }{ pop$ } if$ } while$ - t " ed." * + t "\ ed." * "edition and version" version either.or.check } if$ @@ -565,11 +589,53 @@ FUNCTION {multi.page.check} FUNCTION {format.pages} { pages empty$ { "" } - { %pages multi.page.check -% { "pages" pages n.dashify tie.or.space.connect } -% { "page" pages tie.or.space.connect } -% if$ - pages n.dashify + { +% j is positive if pages contains a comma +% (not fully implemented) + #0 'j := + pages n.dashify 't := + "" + { t empty$ not } + { t #1 #2 substring$ "--" = + { t #3 global.max$ substring$ 't := + duplicate$ num.chars 'i := + "--" * + i t num.chars = + { { i #2 > } + { duplicate$ #1 i #2 - substring$ + t #1 i #2 - substring$ = + { t i #1 - global.max$ substring$ * "" 't := #2 'i := } + { i #1 - 'i := } + if$ + } + while$ + } + 'skip$ + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ + } + if$ +} + +FUNCTION {format.year} +{ year empty$ + { "" } + { year n.dashify + duplicate$ duplicate$ num.chars #10 = + swap$ #5 #2 substring$ "--" = and + { duplicate$ duplicate$ #1 #2 substring$ swap$ #7 #2 substring$ = + { duplicate$ #1 #6 substring$ swap$ #8 #2 substring$ * } + {} + if$ + } + {} + if$ } if$ } @@ -625,6 +691,8 @@ FUNCTION {format.vol.num.pages} % chapter might be useful if type is set to "pars." FUNCTION {format.chapter.pages} { chapter empty$ + type field.or.null sortify duplicate$ "def." = swap$ "definition" = or + or 'format.pages { type empty$ { "Chapter" } @@ -639,17 +707,6 @@ FUNCTION {format.chapter.pages} if$ } -FUNCTION {format.in.ed.booktitle} -{ booktitle empty$ - { "" } - { editor empty$ - { "In " booktitle emphasize * } - { booktitle emphasize add.period$ format.editors.mid * } - if$ - } - if$ -} - FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ @@ -683,11 +740,16 @@ FUNCTION {format.tr.number} FUNCTION {format.url} { url empty$ { "" } - { accessdate empty$ - { "There's a url but no accessdate in " cite$ * warning$ "" } - { accessdate " " * } + { urldate empty$ + { accessdate empty$ + { "there's a url but no urldate in " cite$ * warning$ "\today" } + { "accessdate in " cite$ * " depreciated; use urldate instead" * + warning$ accessdate } + if$ + } + { urldate } if$ - "$<$\url{" * url * "}$>$" * + " $<$\url{" * url * "}$>$" * urlpath empty$ 'skip$ { do.period " Path: " * urlpath * } @@ -696,89 +758,12 @@ FUNCTION {format.url} if$ } -FUNCTION {format.article.crossref} -{ %key empty$ - %{ journal empty$ - %{ "need key or journal for " cite$ * " to crossref " * crossref * - % warning$ - % "" - %} - %{ "In {\em " journal * "\/}" * } - %if$ - %} - %{ "In " key * } - %if$ - pages empty$ { "\citealp" } { "\citealp[" format.chapter.pages * "]" * } if$ - "{" * crossref * "}" * -} - -FUNCTION {format.crossref.editor} -{ editor #1 "{vv~}{ll}" format.name$ - editor num.names$ duplicate$ - #2 > - { pop$ " et~al." * } - { #2 < - 'skip$ - { editor #2 "{ff }{vv }{ll}{, jj}" format.name$ "others" = - { " et~al." * } - { " and " * editor #2 "{vv~}{ll}" format.name$ * } - if$ - } - if$ - } - if$ -} - -FUNCTION {format.book.crossref} -{% volume empty$ -% { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ -% "In " -% } -% { "Vol." volume tie.or.space.connect add.period$ -% } -% if$ -% 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$ - % "" * - %} - %{ "{\em " * series * "\/}" * } - %if$ -% } -% { key * } -% if$ -% } -% { format.crossref.editor * } -% if$ +FUNCTION {format.crossref} +{ pages empty$ { "\citealp" } { "\citealp[" format.chapter.pages * "]" * } if$ "{" * crossref * "}" * } -FUNCTION {format.incoll.inproc.crossref} -{% editor empty$ -% editor field.or.null author field.or.null = -% or -% { key empty$ -% { booktitle empty$ -% { "need editor, key, or booktitle for " cite$ * " to crossref " * -% crossref * warning$ -% "" -% } -% { "In {\em " booktitle * "\/}" * } -% if$ -% } -% { "In " key * } -% if$ -% } -% { "In " format.crossref.editor * } -% if$ - pages empty$ { "\citealp" } { "\citealp[" format.chapter.pages * "]" * } if$ - "{" * crossref * "}" * -} FUNCTION {cite.title} { title empty$ journal empty$ not and @@ -787,11 +772,12 @@ FUNCTION {cite.title} { "empty title and key in " cite$ * warning$ "" } { key empty$ {title}{key} if$ type$ "book" = + type$ "booklet" = type$ "inbook" = type$ "manual" = type$ "phdthesis" = type$ "proceedings" = - or or or or + or or or or or { emphasize } { type$ "article" = %type$ "booklet" = @@ -802,7 +788,7 @@ FUNCTION {cite.title} type$ "techreport" = type$ "unpublished" = or or or or or or - { enquote } + { selective.enquote } {} if$ } @@ -847,7 +833,7 @@ FUNCTION {cite.label} s "(" * empty.title * author.duplicate { cite.title * }{} if$ - ")" * swap$ "{ff~}{vv~}{ll}{, jj}" format.names.custom * + ")" * swap$ "{ff~}{vv~}{ll}{, jj}" format.names.custom purify$ * } if$ %} @@ -877,13 +863,28 @@ FUNCTION {article} format.title "title" output.check new.block crossref missing$ - { journal emphasize "journal" output.check after.title 'output.state := - address empty$ skip$ { "[" address * "]" * output } if$ + { type empty$ + 'skip$ + { type sortify "review" = + { "Rev.\ of " booktitle emphasize * + "booktitle" output.check new.block + } + { "Ignoring invalid type in " cite$ warning$ } + if$ + } + if$ + journal emphasize "journal" output.check after.title 'output.state := + address empty$ + 'skip$ + { "[" address * "]" * output + after.title 'output.state := + } + if$ %format.date "year" output.check %edition output format.vol.num.year.pages output } - { format.article.crossref output.nonnull + { format.crossref output.nonnull %format.pages output } if$ @@ -914,7 +915,7 @@ FUNCTION {book} } {% format.date "year" output new.block - format.book.crossref output.nonnull + format.crossref output.nonnull } if$ new.block @@ -928,7 +929,7 @@ FUNCTION {booklet} { output.bibitem format.authors output new.block - format.title "title" output.check + format.btitle "title" output.check howpublished address new.block.checkb howpublished output address output @@ -959,9 +960,9 @@ FUNCTION {inbook} format.chapter.pages "chapter and pages" output.check %address output } - {% format.chapter.pages "chapter and pages" output.check + { new.block - format.book.crossref output.nonnull + format.crossref output.nonnull } if$ new.block @@ -975,10 +976,14 @@ FUNCTION {incollection} format.authors "author" output.check chapter empty$ { new.block type output } - {} + 'skip$ if$ new.block format.title "title" output.check + type field.or.null sortify duplicate$ "definition" = swap$ "def." = or + { new.block "Def.~" chapter field.or.null * "chapter" output.check } + 'skip$ + if$ new.block crossref missing$ { @@ -996,7 +1001,7 @@ FUNCTION {incollection} new.sentence format.chapter.pages output } - { format.incoll.inproc.crossref output.nonnull + { format.crossref output.nonnull %format.chapter.pages output } if$ @@ -1014,7 +1019,7 @@ FUNCTION {inproceedings} format.title "title" output.check new.block crossref missing$ - { %format.in.ed.booktitle "booktitle" output.check + { booktitle "booktitle" output.check new.sentence format.editors.mid output @@ -1043,8 +1048,7 @@ FUNCTION {inproceedings} new.sentence format.pages output } - { format.incoll.inproc.crossref output.nonnull - %format.pages output + { format.crossref output.nonnull } if$ new.block @@ -1155,7 +1159,7 @@ FUNCTION {proceedings} if$ new.block format.btitle "title" output.check - new.sentence + new.block format.bvolume.or.num.series output address empty$ { editor empty$ @@ -1191,6 +1195,7 @@ FUNCTION {techreport} format.title "title" output.check new.block format.tr.number output.nonnull + new.block institution "institution" output.check address output format.date "year" output.check @@ -1238,6 +1243,8 @@ MACRO {nov} {"Nov."} MACRO {dec} {"Dec."} +% Currently left in to help with compatibility + MACRO {acmcs} {"ACM Computing Surveys"} MACRO {acta} {"Acta Informatica"} @@ -1281,11 +1288,6 @@ MACRO {tcs} {"Theoretical Computer Science"} READ -FUNCTION {sortify} -{ purify$ - "l" change.case$ -} - INTEGERS { len } FUNCTION {chop.word} @@ -1323,7 +1325,14 @@ FUNCTION {sort.format.title} { 't := "A " #2 "An " #3 - "The " #4 t chop.word + "The " #4 + "Rev. of " #8 + "Rev.~of " #8 + "Rev.\ of " #9 + t chop.word + chop.word + chop.word + chop.word chop.word chop.word sortify