diff options
author | Karl Berry <karl@freefriends.org> | 2023-06-16 21:03:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-06-16 21:03:10 +0000 |
commit | cb08950f19e4ad6ce4357e55ea5fa572eba3a95c (patch) | |
tree | f33fb0b3b794deb133b33231209bf9a25b045440 | |
parent | bac8ab81b46bbaeeace8710b5c8c001e352e6d16 (diff) |
bibtools/abstract.bst per hille42 request 15 Jun 2023 21:08:35
git-svn-id: svn://tug.org/texlive/trunk@67386 c570f23f-e606-0410-a88d-b1316a301751
31 files changed, 9970 insertions, 2 deletions
diff --git a/Master/texmf-dist/bibtex/bst/bibtools/abstract.bst b/Master/texmf-dist/bibtex/bst/bibtools/abstract.bst new file mode 100644 index 00000000000..209373cef79 --- /dev/null +++ b/Master/texmf-dist/bibtex/bst/bibtools/abstract.bst @@ -0,0 +1,1345 @@ +% BibTeX bibliography style `abstract' +% by David Kotz dfk@cs.duke.edu +% March 1989, May 1993, November 1995, October 2000 +% modified from +% BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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 'abstract' section is suited for multi-paragraph abstracts, if +% necessary, but note that bibtex takes out the blank line that you +% might use to indicate a new paragraph. Use \par where you want a +% new paragraph in an abstract or comment. + +% DFK added abstract, comment, keyword, url +ENTRY + { abstract + address + author + booktitle + chapter + comment + edition + editor + howpublished + institution + journal + key + keyword + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ swap$ + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% DFK changed to use cite$ for the label +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + cite$ write$ + "]{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + 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$ + " \cite{" * 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 " + } + { "Volume" volume tie.or.space.connect + " of " * + } + 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$ + " \cite{" * 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$ + " \cite{" * crossref * "}" * +} + +% DFK added +FUNCTION {format.abstract} +{ abstract empty$ + { "" } + { "\begin{quotation}\noindent {\bf Abstract:} " + abstract * + " \end{quotation}" *} + if$ +} + +% DFK added +FUNCTION {format.keyword} +{ keyword empty$ + { "" } + { "\begin{quote} {\bf Keyword:} " keyword * " \end{quote}" *} + if$ +} + +% DFK added +FUNCTION {format.url} +{ URL empty$ + { "" } + { "\begin{quote} {\bf URL} \verb`" URL * "` \end{quote}" *} + if$ +} + +% DFK added +% 5/93 added "private", as part of the comment, if both exist. +FUNCTION {format.comment} +{ comment empty$ + { private empty$ + { "" } + { "\begin{quote} {\bf Private:} " private * " \end{quote}" *} + if$ + } + { private empty$ + { "\begin{quote} {\bf Comment:} " comment * " \end{quote}" *} + { "\begin{quote} {\bf Comment:} " comment * + " {\bf Private:} " * private * + " \end{quote}" * } + if$ + } + if$ +} + +% DFK added +FUNCTION {dfk.stuff} +{ new.block + format.URL write$ newline$ + format.abstract write$ newline$ + format.keyword write$ newline$ + format.comment write$ newline$ +} + +% DFK: added a call to dfk.stuff in all entry-type functions below + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { address new.block.checka + address output + } + 'skip$ + if$ + } + { organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + new.block + note output + fin.entry + dfk.stuff + + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + { publisher new.sentence.checka } + { organization publisher new.sentence.checkb + organization output + } + if$ + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + fin.entry + dfk.stuff +} + +FUNCTION {default.type} { misc } + +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"} + +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"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +FUNCTION {format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +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$ +} + +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 := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * +% DFK throw away stuff above and use cite$ for sort key + pop$ + cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.sort.label next.extra } + +INTEGERS { longest.label.width last.extra.num } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.sort.label sort.label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + sort.label 'last.sort.label := + } + if$ +} + +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 := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {begin.bib} +{ et.al.char.used + { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ } + 'skip$ + if$ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/Master/texmf-dist/source/bibtex/bibtools/README b/Master/texmf-dist/source/bibtex/bibtools/README new file mode 100644 index 00000000000..37ee9976670 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/README @@ -0,0 +1,51 @@ +September 3, 1992 +updated November 12, 1995 +updated October 2000 + +This is a collection of BibTeX tools written (mostly) by David Kotz. +I provide them as-is. Use them as you please. Some slight +modifications may be needed to pathnames embedded in the shell +scripts, to find the library files they need (sed, awk, and bst +files). + +The programs are: + + aux2bib - given an .aux file, make a portable .bib file to go with + it. This is useful when you need to ship a tex file elsewhere + + bibify - this can be used to eliminate one pass of LaTeX in many + cases: (latex, bibtex, bibify, latex), instead of (latex, bibtex, + latex, latex). Handy for large documents. Does not work with + multiple aux files. + + bibkey - make a list of all entries that have the given keyword in + their "keyword" field. + + cleantex - really a general tex script, this removes all the + little files created by tex and latex as they run, leaving only + the original files. + + looktex - makes a list of all entries that match a given regexp + + makebib - makes an exportable .bib file from a given set of bib + files and an optional list of citations. Handy for posting bib + entries on the net! The portability comes from substituting + @strings, and stripping "comment" fields if you like. Ignore the + -d option. + + printbib - the most useful of all; this makes a dvi file from a + .bib file for handy reference, sorted by cite key and including + "keyword", "abstract", and "comment" fields. + + bib2html - produce an browsable html version of the bibliography. + There are lots of styles that do slightly different things. + See demo.html. + + citekeys - makes a list of all the cite keys (on the @ line) + +See the shell scripts for more documentation. +Otherwise you're on your own. Good luck. + +David Kotz +dfk@cs.dartmouth.edu + diff --git a/Master/texmf-dist/source/bibtex/bibtools/aux2bib b/Master/texmf-dist/source/bibtex/bibtools/aux2bib new file mode 100644 index 00000000000..ee2d052b2e0 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/aux2bib @@ -0,0 +1,68 @@ +#!/usr/local/bin/perl -s +# +# take a latex AUX file and change the bibstyle to subset or subset-nocomment +# depending on if the -c flag was given (-c means use comments), then rename +# the modified file to references.aux, run bibtex on it, rename the file +# references.bbl to references.bib and delete references.{aux,blg}. This +# results in a BibTeX file which can be shipped with the latex source of the +# paper. The \bibliography{} command in the latex file will need to be changed +# to use the newly generated bibliography. +# +# assumes subset.bst and subset-nocomment.bst are in the input path +# +# V. Khera 07-AUG-1992 +# khera@cs.duke.edu + +$tmpfile = "refs$$"; +$outfile = "references.bib"; + +$SIG{'INT'} = 'handler'; +$SIG{'QUIT'} = 'handler'; +$SIG{'TERM'} = 'handler'; +$| = 1; # make sure output is flushed after print. + +sub handler { + local($sig) = @_; + print "Got a SIG$sig -- cleaning up\n"; + &cleanup; + exit 1; +} + +sub cleanup { + unlink <$tmpfile.*>; +} + +$bibstyle = defined($c) ? "subset" : "subset-nocomment"; + +die "usage: $0 [-c] <auxfile>\n" unless $#ARGV == 0; + +$infile = shift; + +# canonicalize the name to end i .aux. assumes file is in current directory, +# even though a path may have been specified. tough noogies, i say! +$infile =~ s#(.*/)?([^.]*).*#\2.aux#; + +die "No such file $infile\n" unless -f $infile; + +open(INF,$infile) || die "Cannot read $infile\n"; +@auxdata = <INF>; # slurp the whole file in +close(INF); + +# create a new AUX file with subset bibstyle specified. +@result = grep(m/(\\citation|\\bibdata).*/ , @auxdata); +die "No citations or data files specified in $infile\n" unless @result; +push(@result,"\\bibstyle{$bibstyle}\n"); + +open (OUTF,">$tmpfile.aux") || die "Cannot create temp file\n"; +print OUTF @result; +close(OUTF); + +print "Running bibtex...\n"; + +$result = system "bibtex $tmpfile"; +die "Error running bibtex\n" unless ($result >> 8) == 0; +rename ("$tmpfile.bbl", $outfile); + +print "Output is in $outfile\n"; + +&cleanup; diff --git a/Master/texmf-dist/source/bibtex/bibtools/bib.html b/Master/texmf-dist/source/bibtex/bibtools/bib.html new file mode 100644 index 00000000000..f25c78d2733 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/bib.html @@ -0,0 +1,37 @@ +<HTML> +<HEAD><TITLE> Bibliography </TITLE></HEAD> +<BODY BGCOLOR=#EEEEEE> +<DL> + +<DT><A NAME="kotz:addrtrace" + HREF="file://cs.dartmouth.edu/pub/CS-papers/Kotz/kotz:addrtrace.ps.Z"> + [KC94]</A></DT> +<DD> +David Kotz and Preston Crow. +<STRONG>The expected lifetime of ``single-address-space'' operating + systems</STRONG>. +In <EM>Proceedings of the 1994 ACM Sigmetrics Conference on Measurement and + Modeling of Computer Systems</EM>, pages 161-170, May 1994. +</DD> + +<DT> <A NAME="kotz:pools"> [KE89]</A> </DT> +<DD> +David Kotz and Carla Ellis. +<STRONG>Evaluation of concurrent pools</STRONG>. +In <EM>Proceedings of the Ninth International Conference on Distributed + Computer Systems</EM>, pages 378-385, 1989. +</DD> + +<DT><A NAME="kotz:thesis" HREF="file://cs.duke.edu/dist/theses/kotz/kotz.ps.Z"> + [Kot91]</A></DT> +<DD> +David Kotz. +<STRONG>Prefetching and Caching Techniques in File Systems for MIMD + Multiprocessors</STRONG>. +PhD thesis, Duke University, April 1991. +Available as technical report CS-1991-016. +</DD> + +</DL> +</BODY> +</HTML> diff --git a/Master/texmf-dist/source/bibtex/bibtools/bib2html b/Master/texmf-dist/source/bibtex/bibtools/bib2html new file mode 100644 index 00000000000..11cc7617677 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/bib2html @@ -0,0 +1,271 @@ +#!/usr/bin/perl +# +# bib2html - make an html file that is equivalent to the bib files, +# using one of the html bib styles +# +# usage: +$usage = "usage: $0 {alpha|index|long|longp|long-pario|short|short-pario|cv} [-o <outfile>] file.bib...\ +OR \ +$0 [ {alpha|index|long|longp|long-pario|short|short-pario|cv} ] [-o <outfile>] -a file.aux"; +# Output is to bib.html. +# alpha makes a bibliography like bibstyle{alpha} +# long makes a bibliography like bibstyle{abstract} +# short makes a bibliography like bibstyle{alpha}, but with citekey for tags +# cv lists title first, does not print key, does not sort +# (useful for listing your papers on your home page) +# +# David Kotz 7/94 +# dfk@cs.dartmouth.edu + +# updated Dan Gildea 1/2003: +# . now handles nested \bf \em etc correctly +# . added some more accents +# . new -a file.aux usage to use existing .aux file, useful to +# list only papers cited by a given latex document +# http://www.cs.rochester.edu/~gildea/ + +# updated 2/2004, thanks to Juergen Vollmer +# a) allowing \emph{..}, \texttt{...} and \textbf{..} +# b) setting the environment variable BSTINPUTS to directory from $0 +# c) if run on existing .aux file, bibstyle is now optional on the command line. +# if not bib style nor specified on command line, uses the html version +# of bib style from original document. + +use File::Basename; +use File::Spec::Functions; + +$tmp = "/tmp/bib2html$$"; + +my $cmd_dir = catfile (dirname ($0), + dirname ((defined readlink($0)) ? readlink($0) : $0)); + +$ENV{BSTINPUTS} .= ":$cmd_dir"; + +if ( scalar(@ARGV) < 2 ) { + die "$usage\n"; +} + + +## pick up the args +my %Opts; # will hold the option values + +if ($ARGV[0] !~ /^-/) { + $Opts{style} = shift @ARGV; +} +while ($ARGV[0] =~ /^-/) { + $tmpArg = shift @ARGV; + if ($tmpArg eq "-o" ) { + $Opts{outfile} = shift @ARGV; + } elsif ($tmpArg eq "-a" ) { + $Opts{auxfile} = shift @ARGV; + } +} + +$Opts{outfile} = "bib.html" if ( !defined ($Opts{outfile}) ); + +$SIG{INT} = \&cleanup; + +print "Creating $tmp.aux for $files\n"; +open AUX, ">$tmp.aux"; + +if ($Opts{auxfile}) { + system "ls"; + open(AUXIN, $Opts{auxfile}) || die "could not open $Opts{auxfile}"; + while (<AUXIN>) { + # if style not specified on command line, use html version + # of style specified in .aux file + s/^\\bibstyle\{([^\}]*)\}/"\\bibstyle{html-".($Opts{style}||$1)."}"/e; + print AUX; + } +} else { + if (!defined $Opts{style}) { + die "bib style not defined"; + } + ## get all the remaining file names + my $files = killSuffix ( shift @ARGV ); + foreach $file ( @ARGV ) { + $files .= ','; # make sure the list is comma delimited, bibtex needs it + $files .= killSuffix ($file); + } + + +## need double slashes here to go around slash interpretation +## only one is printed + print AUX <<EOF; +\\relax +\\citation{*} +\\bibstyle{html-$Opts{style}} +\\bibdata{$files} +EOF +} +close AUX; + +unlink <$tmp.{bbl,blg}>; + +if (-r "html-split.bst.gz" ) { + system ( "gunzip html-split.bst.gz" ); +} + +print "bibtex $tmp\n"; + +system "bibtex $tmp"; + +print "Bibtex done\n\n"; + + +## ------------------------------------------------------------------- +## the cleanup operation +open BBL, "$tmp.bbl"; +open OUT, ">$Opts{outfile}"; + +## stack of formatted text types that were started and did not finish on teh same line +## elements are em, tt or b or i and when a candidate for a format-closing brace is found +## this stack will be popped to see which format we have to close +my @formatsToClose; + +while ( <BBL> ) { + + + ## accent handlers + ## these are quite definite about their replacemnets and so should + ## come before the more generic operations later + ## all braces in the latex constructs are optional + ## info on the html codes can be found at http://www.w3.org/TR/REC-html40/ + ## \\? is to handle latex \'\i which you do to put acute on i without dot + s/\\ \` (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )? + /&$1grave;/gx; # grave accent + s/ \\ \' (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )? + /&$1acute;/gx; # 'acute accent + s/ \\ \^ (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )? + /&$1circ;/gx; # circumflex + s/ \\ \" (?: \{ )? \\? ([aeiouyAEIOUY]) (?: \} )? + /&$1uml;/gx; # "umlaut + s/ \\ \~ (?: \{ )? \\? ([anoANO]) (?: \} )? + /&$1tilde;/gx; # tilde + s/ \\ c (?: \{ )? ([cC]) (?: \} )? + /&$1cedil;/gx; # cedilla + s/ \\ [v\'] (?: \{ )? ([cC]) (?: \} )? + /$1/gx; # no html code for czech hook + s/ \{? \\[s\"]s \}? + /ß/gx; # german Scharf-S + + ## several weird symbols + s/ \\copyright + /©/gx; + s/ \\pounds + /£/gx; + + ## weirder symbols + s/ \\ (ae|AE) + /&$1lig;/gx; + s/ \\ (o|O) + /&$1slash;/gx; + s/ \\ss + /ß/gx; + + ## greek letters, case insensitive matching, but upper case in latex and + ## html have the first letter of the english word capitalized + s/ \\ (?: var )? (alpha|beta|gamma|delta|epsilon|theta|lambda|pi|rho|sigma|omega) + /&$1;/gxi; + + ## remove any \/ space-increasing symbols + s+ ([^\\]) \\ \/ + +$1+gx; + + s+ \\ \ + +gx; + + ## deal with \cite stuff, change it to a link to a record the same html file + s+ ([^\\]) \\cite\{ (.*?) \} + +$1<a href="#$2">$2</a>+xg; + + ## These rules are to deal with my (DFK) macros + s/\\ie/i.e./g; + s/\\eg/e.g./g; + s/\\etc/etc./g; + s+\\vs\\+<EM>vs.</EM>+g; + s/\\usec/usec/g; + s/\\mbox //g; + s/\\par / <P> /g; + s/\\par$/ <P>/g; + + + s/\\\&/\&/g; # ampersand + + s/-{2,3}/-/g; # multiple dashes + +# a few rules are needed to compensate for BibTeXs way of splitting +# long words over two lines by sticking a % (TeX comment character) at +# the end of the line. This works when one word (usually a URL) is +# split over more than one line. + ## if we have an unescaped % at the end of the line, remove it and the newline and + ## join the next line on + ## example straight out of the camel book, pg 204. amazing + if ( s/ ([^\\]) \% \n$ /$1/x and $nextline = <BBL> ) { + $_ .= $nextline; + redo; # back to the top + } + +# hyphenation characters should be removed + s+\\-++g; + +# tildes - +# tilde not preceded by \ or / is a nbsp +# \~{} is ~ (likely in a URL) +# all other tildes left alone, notably /~ (URL) + s+ ([^\\/]) ~ +$1 +xg; # normal standalone tilde - nbsp + s/ \\~ \{\} /~/xg; # \~{} to ~ - do before removing braces below + + ## -------------------------------------------------------- + ## deal with em and tt and bf text surrounded by braces + ## deal with \emph{..}, \texttt{...} and \textbf{..} + + ## the fancy groupings around the em etc are because in html bold font is not 'bf' + ## but just b and italic is i not 'it' so we have to pick out only a part of those + ## latex tags + ## final |\w+ is to skip over \rm or any other commands we don't handle + ## also removes braces with no command + + while ( /(text(b)f|text(tt)|(em)ph)?([\{\}])/ ) { + if (defined $1) { + my $cmd = "$1"; + my $fmt = $2 || $3 || $4; + s/\\$cmd\{/<$fmt>/; + push ( @formatsToClose, $fmt ) + } elsif ($5 eq '{') { + ## beginning of format + s/ \{ (?: \\ (?: (em)|(b)f|(tt)|(i)t|\w+ ) )? \s* + / ( $format = $1 or $2 or $3 or $4 ) ? "<$format>" : '' /ex ; + ## push the format to be closed onto the stack (may be nothing) + push ( @formatsToClose, $format ) + } else { + ## pop format to close from stack + s+ \s*\} + + ( $format = pop (@formatsToClose) ) ? "</$format>" : '' +ex ; + } + } + + ## -------------------------------------------------------- + + ##retrieve symbols escaped by backslashes + my $escapedChars = quotemeta ( '#$%&_{}' ); + s/ ([^\\]) \\ ([$escapedChars]) + /$1$2/gxo; + + print OUT $_; +} + + +print "\n"; +print "\noutput is in $Opts{outfile}\n"; + +cleanup(); + +sub killSuffix { + $file = shift(); + ( $name, $path ) = fileparse ( $file, '\.[^.]*$' ); # the pattern indicates what a suffix looks like + return ($path . $name); +} + +sub cleanup { + unlink ( glob ("$tmp.{aux,bbl,blg}") ); +} diff --git a/Master/texmf-dist/source/bibtex/bibtools/bibify b/Master/texmf-dist/source/bibtex/bibtools/bibify new file mode 100644 index 00000000000..4d33d9c1d98 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/bibify @@ -0,0 +1,37 @@ +#!/bin/csh -f + +if ($1 !~ *.aux) then + set input=$1.aux + set bbl = $1.bbl +else + set input=$1 + set bbl=$1:r.bbl +endif + +set file=/tmp/bibify$$ +onintr clean + +cat $input > $file + +set style=`sed -n 's/\\bibstyle{\(.*\)}/\1/p' $input` + +switch($style) +case "alpha": +case "abstract": + cat $bbl | sed -n 's/bibitem\[\(.*\)\]{\(.*\)}/bibcite{\2}{\1}/p' >> $file + breaksw +case "plain": +case "unsrt": +case "abbrv": + cat $bbl | sed -n 's/bibitem/bibcite/p'| awk '{print $1"{"NR"}"}' >> $file + breaksw +default: + echo unknown bibliography style, cannot bibify. + goto clean +endsw + +mv $file $input + +clean: +/bin/rm -f $file.* >& /dev/null + diff --git a/Master/texmf-dist/source/bibtex/bibtools/bibkey b/Master/texmf-dist/source/bibtex/bibtools/bibkey new file mode 100644 index 00000000000..551f21a8ec3 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/bibkey @@ -0,0 +1,56 @@ +#!/bin/csh -f +# +# bibkey - look for a word in the keyword field +# in the references in a BiBTeX file. A restricted form of looktex, in +# that bibkey only looks at "keyword" fields of the entries. +# +# David Kotz (dfk@cs.dartmouth.edu) +# +# usage: +# bibkey keyword file... +# +# Warning: Any characters in keyword that have meanings in regexps +# used by either sed or egrep must be escaped with a \ (the most +# likely occurrence might be \ itself: use \\). Case is ignored in +# the search. +# +# Multiple keywords may be specified with an egrep alternation format: +# eg bibkey 'jones|smith' foo.bib +# +# Actually, any egrep expression is allowed. +# Be sure to quote it properly. +# + +set L=~/lib + +if ($#argv < 2) then + echo usage: bibkey keyword 'file...' + exit 1 +endif + +set keyword=`echo "$1" | tr A-Z a-z` +shift + +set script=/tmp/bibkey$$ +onintr cleanup + +# Search for the keyword and get a script for extracting the +# references: +# Cat the files +# Strip comment lines and comments on lines +# Translate to lower case (needs to precede sed and egrep) +# Extract the keyword entries, plus number for lines with @ +# Search for the keyword +# Convert this output into a sed script +cat $* \ + | sed -e 's/^%.*//' -e 's/\([^\\]\)%.*/\1/' \ + | tr A-Z a-z \ + | sed -n -f $L/bibkey.sed \ + | egrep '^[0-9]*$|'"($keyword)" \ + | awk -f $L/bibkey.awk > $script + +# Now have sed print out the correct entries: +cat $* | sed -n -f $script + +cleanup: +rm -f $script diff --git a/Master/texmf-dist/source/bibtex/bibtools/bibkey.awk b/Master/texmf-dist/source/bibtex/bibtools/bibkey.awk new file mode 100644 index 00000000000..b296f656ca5 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/bibkey.awk @@ -0,0 +1,33 @@ +# bibkey.awk +# +# Goes with bin/bibkey - look for a word in the keyword entry +# +# David Kotz (dfk@cs.dartmouth.edu) +# +# On stdin, we get a list of line numbers of the beginning of entries +# (in the concatenated bibtex input) and the text of lines from keyword +# entries that have the keyword in them. +# +# On stdout, we produce a sed script for printing entries that had a +# match in them somewhere. This is a list of lines like "A,Bp" where A +# and B are line numbers. + +BEGIN {found=0; last=1} + +{ +# test: is line a number? + if ($1+0 > 0) { + if (found) { + print last "," $1-1 "p"; + found=0 + } + last=$1 + } else { + found = 1 + } +} + +END { + if (found) + print last ",$p"; +} diff --git a/Master/texmf-dist/source/bibtex/bibtools/bibkey.sed b/Master/texmf-dist/source/bibtex/bibtools/bibkey.sed new file mode 100644 index 00000000000..f203adb66f5 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/bibkey.sed @@ -0,0 +1,32 @@ +# bibkey.sed +# +# Goes with bin/bibkey - look for a word in the keyword entry +# +# David Kotz (dfk@cs.dartmouth.edu) +# +# On stdin, we get a lowercased bibtex file with comments stripped. +# +# On stdout, we produce a list of line numbers that are the starting +# line number of each reference, and the text of all "keyword" +# entries on separate lines. + +# the idea is to get @ line numbers and all keywords +# @ entry +/^[ ]*@.*/= +# one-line keyword entry +s/[ ]*keyword[ ]*=[ ]*"\(.*\)".*/\1/p +t +# start of multi-line keyword entry +s/[ ]*keyword[ ]*=[ ]*"\(.*\)/\1/ +t partial +b +# Handle multi-line keyword entry: save this line, repeatedly add +# lines until close quote forces output +:partial +N +s/\(.*\n.*\)".*/\1/ +t done +b partial +:done +s/\n/ /g +p diff --git a/Master/texmf-dist/source/bibtex/bibtools/bibtex-extras.el b/Master/texmf-dist/source/bibtex/bibtools/bibtex-extras.el new file mode 100644 index 00000000000..5a268e072ba --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/bibtex-extras.el @@ -0,0 +1,22 @@ +;; these are things I put in my .emacs +;; David Kotz dfk@cs.dartmouth.edu + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Add bibtex mode +(autoload 'bibtex-mode "bibtex" "Bibtex mode" t) +; and redefine some of the key bindings +; and add my favorite extra fields +(setq bibtex-mode-hook + '(lambda () +;; (define-key bibtex-mode-map "\C-c\C-\'" 'bibtex-remove-double-quotes) + (define-key bibtex-mode-map [?\C-c ?\C-'] 'bibtex-remove-double-quotes) + (define-key bibtex-mode-map "\C-c\C-eI" 'bibtex-InBook) + (define-key bibtex-mode-map "\C-c\C-e\C-i" 'bibtex-InProceedings) + (define-key bibtex-mode-map "\C-c\C-eM" 'bibtex-Manual) + (define-key bibtex-mode-map "\C-c\C-e\C-m" 'bibtex-Misc) + (setq bibtex-mode-user-optional-fields '("URL" "keyword" "private" "comment")) + ) + ) + +(setq auto-mode-alist (cons (cons "\\.bib$" 'bibtex-mode) auto-mode-alist)) + diff --git a/Master/texmf-dist/source/bibtex/bibtools/citekeys b/Master/texmf-dist/source/bibtex/bibtools/citekeys new file mode 100644 index 00000000000..dfcc3aa346a --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/citekeys @@ -0,0 +1,52 @@ +#!/bin/csh -f +# +# citekeys - print out all the cite keys in given bib files +# +# usage: +# citekeys file.bib... +# + +onintr cleanup + +if ($#argv < 1) then + echo 'usage: citekeys file.bib...' + exit 1 +endif + +unset files +foreach i ($*) + if ($i:e == bib) then + set file=$i:r + else + set file=$i + endif + + if ($?files) then + set files=($files,$i) + else + set files=($file) + endif +end + +echo creating citekeys.aux for $files + +cat > citekeys.aux <<EOF +\relax +\citation{*} +\bibstyle{citekeys} +\bibdata{$files} +EOF + +rm -f citekeys.{log,dvi,bbl,blg} + +echo bibtex citekeys +bibtex citekeys + +mv citekeys.bbl citekeys.out + +echo "" +echo output is in citekeys.out + +cleanup: +rm -f citekeys.{tex,aux,log,dvi,bbl,blg} + diff --git a/Master/texmf-dist/source/bibtex/bibtools/citekeys.bst b/Master/texmf-dist/source/bibtex/bibtools/citekeys.bst new file mode 100644 index 00000000000..0632e0dbf0f --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/citekeys.bst @@ -0,0 +1,60 @@ +% BibTeX bibliography style `citekeys +% by David Kotz dfk@cs.dartmouth.edu +% March 1994 +% modified (distantly) from + % BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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. + +ENTRY { author } {} {} + +FUNCTION {article} {} +FUNCTION {book} {} +FUNCTION {booklet} {} +FUNCTION {inbook} {} +FUNCTION {incollection} {} +FUNCTION {inproceedings} {} +FUNCTION {conference} {} +FUNCTION {manual} {} +FUNCTION {mastersthesis} {} +FUNCTION {misc} {} +FUNCTION {phdthesis} {} +FUNCTION {proceedings} {} +FUNCTION {techreport} {} +FUNCTION {unpublished} {} +FUNCTION {default.type} { misc } + +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"} + +READ + +FUNCTION {presort} +{ cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +FUNCTION {cite.key.only} { cite$ write$ newline$ } + +ITERATE {cite.key.only} diff --git a/Master/texmf-dist/source/bibtex/bibtools/cleantex b/Master/texmf-dist/source/bibtex/bibtools/cleantex new file mode 100644 index 00000000000..14d8bd29a00 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/cleantex @@ -0,0 +1,19 @@ +#!/bin/csh +# +# cleantex - clean up files related to Latex processing +# +# usage - cleantex [base]... +# default is \*, ie, to remove all latex extraneous files. +# Otherwise, those beginning with 'base.' are removed. +# +# No csh -f flag so that we get safe-rm instead of rm, where appropriate. + +set extensions="{dvi,aux,log,toc,lof,bbl,blg,lot,inx}" + +if ($#argv == 0) then + rm -f *~ *.$extensions +else + foreach i ($*) + rm -f $i.tex~ $i.$extensions + end +endif diff --git a/Master/texmf-dist/source/bibtex/bibtools/demo.bib b/Master/texmf-dist/source/bibtex/bibtools/demo.bib new file mode 100644 index 00000000000..b8b493eaafb --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/demo.bib @@ -0,0 +1,81 @@ +% BibTeX bibliography file + +@InProceedings{kotz:addrtrace, + author = {David Kotz and Preston Crow}, + title = {The Expected Lifetime of ``Single-Address-Space'' Operating + Systems}, + booktitle = {Proceedings of the 1994 ACM Sigmetrics Conference on Measurement + and Modeling of Computer Systems}, + year = {1994}, + month = {May}, + pages = {161--170}, + URL = {file://cs.dartmouth.edu/pub/CS-papers/Kotz/kotz:addrtrace.ps.Z}, + keyword = {operating system, wide address space, virtual memory, memory + management, dfk}, + abstract = {Trends toward shared-memory programming paradigms, large (64-bit) + address spaces, and memory-mapped files have led some to propose the use of a + single virtual-address space, shared by all processes and processors. Typical + proposals require the single address space to contain all process-private + data, shared data, and stored files. To simplify management of an address + space where stale pointers make it difficult to re-use addresses, some have + claimed that a 64-bit address space is sufficiently large that there is no + need to ever re-use addresses. Unfortunately, there has been no data to + either support or refute these claims, or to aid in the design of appropriate + address-space management policies. In this paper, we present the results of + extensive kernel-level tracing of the workstations in our department, and + discuss the implications for single-address-space operating systems. We found + that single-address-space systems will not outgrow the available address + space, but only if reasonable space-allocation policies are used, and only if + the system can adapt as larger address spaces become available.} +} + +@InProceedings{kotz:pools, + author = {David Kotz and Carla Ellis}, + title = {Evaluation of Concurrent Pools}, + booktitle = {Proceedings of the Ninth International Conference on Distributed + Computer Systems}, + year = {1989}, + pages = {378--385}, + keyword = {dfk, concurrent pool, concurrent data structure}, + comment = {also Duke TR CS-1987-30, kotz:poolsTR} +} + +@PhdThesis{kotz:thesis, + author = {David Kotz}, + title = {Prefetching and Caching Techniques in File Systems for {MIMD} + Multiprocessors}, + year = {1991}, + month = {April}, + school = {Duke University}, + note = {Available as technical report CS-1991-016.}, + URL = {file://cs.duke.edu/dist/theses/kotz/kotz.ps.Z}, + keyword = {dfk, parallel file system, prefetching, MIMD, disk caching, + parallel I/O, pario bib}, + abstract = {The increasing speed of the most powerful computers, especially + multiprocessors, makes it difficult to provide sufficient I/O bandwidth to + keep them running at full speed for the largest problems. Trends show that + the difference in the speed of disk hardware and the speed of processors is + increasing, with I/O severely limiting the performance of otherwise fast + machines. This widening access-time gap is known as the ``I/O bottleneck + crisis.'' One solution to the crisis, suggested by many researchers, is to + use many disks in parallel to increase the overall bandwidth. This + dissertation studies some of the file system issues needed to get high + performance from parallel disk systems, since parallel hardware alone cannot + guarantee good performance. The target systems are large MIMD multiprocessors + used for scientific applications, with large files spread over multiple disks + attached in parallel. The focus is on automatic caching and prefetching + techniques. We show that caching and prefetching can transparently provide + the power of parallel disk hardware to both sequential and parallel + applications using a conventional file system interface. We also propose a + new file system interface (compatible with the conventional interface) that + could make it easier to use parallel disks effectively. Our methodology is a + mixture of implementation and simulation, using a software testbed that we + built to run on a BBN GP1000 multiprocessor. The testbed simulates the disks + and fully implements the caching and prefetching policies. Using a synthetic + workload as input, we use the testbed in an extensive set of experiments. The + results show that prefetching and caching improved the performance of + parallel file systems, often dramatically.}, + comment = {Published as kotz:prefetch, kotz:jwriteback, kotz:jpractical, + kotz:fsint2.} +} + diff --git a/Master/texmf-dist/source/bibtex/bibtools/demo.html b/Master/texmf-dist/source/bibtex/bibtools/demo.html new file mode 100644 index 00000000000..b137af98845 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/demo.html @@ -0,0 +1,83 @@ + +<HTML> +<HEAD><TITLE> bib2html demo </TITLE></HEAD> +<BODY> + +<H1> bib2html demo </H1> + +<P> + +<B>bib2html</B> is a combination of a shell script and two +BibTeX-style files. bib2html takes the name of a style and a list of +.bib file names, and runs BibTeX to produce an output file bib.html. +This demo page assumes that you have run either +<CODE> bib2html alpha demo.bib </CODE> +or +<CODE> bib2html abstract demo.bib, </CODE> +and that the output +<A HREF="bib.html"> bib.html </A> +remains in the same directory as this +file. (Note: the abstracting style will often produce some warning +messages from bibtex if the abstracts or comments are too long, but +the resulting HTML is still usable.) +</P> + +<P> + +One of the neat things about bib2html is that you can put a <EM> URL +</EM> field in your bib entries, and that URL will be used to make the +entry's label into a Web link. Usually, the URL would point to the +paper itself (e.g., compressed postscript in an ftp archive, or +perhaps even an HTML-format paper), but it could of course point to +anything. Thus you can expand your idea of what bib entries might +reference.... + +</P> + +<P> + +One of the other neat things about bib2html is that you can put +citations to the bibliography in other pages, much like you can in +LaTeX. The difference is that the citations are <EM>links</EM> to the +bibliography page. For example, I can refer one of my recent papers +in the demo bibliography + +<A HREF="bib.html#kotz:addrtrace"> [KC94b]. </A> +(View the source of this page to see how it's done). That one has the +paper's text on-line. My PhD thesis is +<A HREF="bib.html#kotz:thesis"> [Kot91]. </A> +Another paper does not have any on-line version +<A HREF="bib.html#kotz:pools"> [KE89]. </A> + +</P> + +<P> + +Notice that I use the cite key for the anchor label, rather than the +label chosen by BibTeX. This has two main benefits: it makes the +citation (URL) more like that in LaTeX, and it makes the citation +independent of the format of the bibliography page (and the way it +chooses labels). + +</P> + +<P> + +One disadvantage is that there is no way to automatically generate the +citation labels at the point of reference, like BibTeX's +cross-referencing capability. Another disadvantage is that bib2html +doesn't understand arbitrary LaTeX commands. Although it converts +most accents, \bf, \em, etc to HTML, +any fancier embedded LaTeX or TeX commands are just +passed through. If you need a pretty bibliography, +you'll have to edit those by hand. + +</P> + +<A HREF="http://www.ctan.org/tex-archive/biblio/bibtex/utils/bibtools/">bib2html source</A>. + +<HR> + +-- David Kotz +</BODY> +</HTML> diff --git a/Master/texmf-dist/source/bibtex/bibtools/html-alpha.bst b/Master/texmf-dist/source/bibtex/bibtools/html-alpha.bst new file mode 100644 index 00000000000..9c991dd1b11 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/html-alpha.bst @@ -0,0 +1,1286 @@ +% BibTeX bibliography style `html-alpha' +% spits out HTML-formatted bibliography in place of bbl output +% by David Kotz dfk@cs.dartmouth.edu +% $Id: html-alpha.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $ +% modified from +% BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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. + +% DFK added abstract, comment, keyword, url +ENTRY + { abstract + address + author + booktitle + chapter + comment + edition + editor + howpublished + institution + journal + key + keyword + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% DFK changed to HTML, and use URL to make cite key a link +FUNCTION {output.bibitem} +{ newline$ + URL empty$ + { "<DT> <A NAME=" quote$ * cite$ * quote$ * + "> [" * label * "]</A> </DT>" * write$ + } + { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * + URL * quote$ * "> [" * label * "]</A></DT>" * write$ + } + if$ + newline$ + "<DD>" write$ newline$ + "" + before.all 'output.state := +} + +% DFK changed to HTML +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ + "</DD>" write$ newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +% DFK changed to HTML +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "<EM>" swap$ * "</EM>" * } + if$ +} + +% DFK added for HTML strong emphasis +FUNCTION {strong} +{ duplicate$ empty$ + { pop$ "" } + { "<STRONG>" swap$ * "</STRONG>" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +% DFK added strong, so it will be bold. +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ strong } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ +} + +% DFK changed emphasize to strong +FUNCTION {format.btitle} +{ title strong +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { " " } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + 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$ + " \cite{" * 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 " + } + { "Volume" volume tie.or.space.connect + " of " * + } + 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$ + " \cite{" * 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$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { address new.block.checka + address output + } + 'skip$ + if$ + } + { organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + { publisher new.sentence.checka } + { organization publisher new.sentence.checkb + organization output + } + if$ + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + fin.entry +} + +FUNCTION {default.type} { misc } + +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"} + +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"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +% DFK changed {\etalchar{+}} to + for HTML +FUNCTION {format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "+" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "+" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +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$ +} + +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 := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.sort.label next.extra } + +INTEGERS { longest.label.width last.extra.num } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.sort.label sort.label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + sort.label 'last.sort.label := + } + if$ +} + +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 := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +% DFK removed code about et.al.char +% DFK changed to HTML +FUNCTION {begin.bib} +{ "<HTML>" write$ newline$ + "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$ + "<BODY BGCOLOR=#EEEEEE>" write$ newline$ + "<DL>" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +% DFK changed to HTML +FUNCTION {end.bib} +{ newline$ + "</DL>" write$ newline$ + "</BODY>" write$ newline$ + "</HTML>" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/Master/texmf-dist/source/bibtex/bibtools/html-cv.bst b/Master/texmf-dist/source/bibtex/bibtools/html-cv.bst new file mode 100644 index 00000000000..4e9bdc74533 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/html-cv.bst @@ -0,0 +1,1330 @@ +%% File: `html-cv.bst' +%% for use with bib2html to print HTML bibliography +%% +%% Prints title first, rather than author - useful for listing +%% your papers on your homepage/cv. +%% Uses URL field to provide href link for title. +%% Omits organization and publisher for conference proceedings. +%% Does not sort output - preserves order of input file. +%% $Id: html-cv.bst,v 1.3 2003/01/10 20:43:52 dgildea Exp $ + +% by Dan Gildea (http://www.cis.upenn.edu/~dgildea/), modified from +%% plainnat.bst: +%% A modification of `plain.bst' for use with natbib package +%% Copyright 1993-1999 Patrick W Daly +%% Max-Planck-Institut f\"ur Aeronomie +%% Max-Planck-Str. 2 +%% D-37191 Katlenburg-Lindau +%% Germany +%% E-mail: daly@linmpi.mpg.de +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1 of the License, or any later version. + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + isbn + issn + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label extra.label sort.label short.list } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.header} +{ write$ + newline$ + before.all 'output.state := +} + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +FUNCTION {format.isbn} +{ isbn empty$ + { "" } + { new.block "ISBN " isbn * } + if$ +} + +FUNCTION {format.issn} +{ issn empty$ + { "" } + { new.block "ISSN " issn * } + if$ +} + +FUNCTION {format.url} +{ url empty$ + { "" } + { new.block "URL \url{" url * "}" * } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { URL empty$ + { "<LI> <A NAME=" quote$ * cite$ * quote$ * + ">" * title * "</A>, " * + } + { "<LI><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * + URL * quote$ * ">" * title * "</A>, " * + } + if$ } + if$ +} + +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.full} +{ author empty$ + { editor empty$ + { "" } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.full} +{ author empty$ + { "" } + { author format.full.names } + if$ +} + +FUNCTION {editor.full} +{ editor empty$ + { "" } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.full + { type$ "proceedings" = + 'editor.full + 'author.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year duplicate$ empty$ + { "empty year in " cite$ * warning$ + pop$ "" } + 'skip$ + if$ + month empty$ + 'skip$ + { month + " " * swap$ * + } + if$ + extra.label * +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + 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$ + " \citep{" * crossref * "}" * +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "In " + } + { "Volume" volume tie.or.space.connect + " of " * + } + 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$ + } + 'skip$ + if$ + ", \citet{" * 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 " } + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.title output.header + format.authors "author" output.check + author format.key output + new.block + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + format.issn output + + new.block + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + format.btitle output.header + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + format.isbn output + + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.title output.header + format.authors output + author format.key output + new.block + howpublished address new.block.checkb + howpublished output + address output + format.date output + format.isbn output + + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + format.btitle output.header + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + format.isbn output + + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.title output.header + format.authors "author" output.check + author format.key output + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.isbn output + + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.title output.header + format.authors "author" output.check + author format.key output + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + %organization output + %publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.isbn output + + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + format.btitle output.header + format.authors output + author format.key output + new.block + organization address new.block.checkb + organization output + address output + format.edition output + format.date output + + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.title output.header + format.authors "author" output.check + author format.key output + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.title output.header + format.authors output + author format.key output + title howpublished new.block.checkb + howpublished new.block.checka + howpublished output + format.date output + format.issn output + + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.btitle output.header + format.authors "author" output.check + author format.key output + new.block + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.btitle output.header + format.editors output + editor format.key output + new.block + format.bvolume output + format.number.series output + address output + format.date "year" output.check + new.sentence + organization output + publisher output + format.isbn output + + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.title output.header + format.authors "author" output.check + author format.key output + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.title output.header + format.authors "author" output.check + author format.key output + new.block + + new.block + note "note" output.check + format.date output + fin.entry +} + +FUNCTION {default.type} { misc } + + +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"} + + + +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"} + + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +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 + 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 + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ 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$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + label sortify + " " + * + year field.or.null sortify + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.label := + sort.label * + #1 entry.max$ substring$ + 'sort.key$ := +} + +% not sorting because want html to reflect order in latex doc +%ITERATE {presort} + +% not sorting because want html to reflect order in latex doc +%SORT + +STRINGS { longest.label last.label next.extra } + +INTEGERS { longest.label.width last.extra.num number.label } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := + #0 'number.label := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "" * } + if$ + 'extra.label := + label extra.label * 'label := +} + +EXECUTE {initialize.longest.label} + +%ITERATE {forward.pass} + +%REVERSE {reverse.pass} + +FUNCTION {bib.sort.order} +{ sort.label 'sort.key$ := +} + +% not sorting because want html to reflect order in latex doc +%ITERATE {bib.sort.order} + +% not sorting because want html to reflect order in latex doc +%SORT + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "<ul>" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "</ul>" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/Master/texmf-dist/source/bibtex/bibtools/html-long.bst b/Master/texmf-dist/source/bibtex/bibtools/html-long.bst new file mode 100644 index 00000000000..fcf2f7b7bf7 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/html-long.bst @@ -0,0 +1,1356 @@ +% BibTeX bibliography style `html-long' +% spits out HTML-formatted bibliography in place of bbl output +% by David Kotz dfk@cs.dartmouth.edu +% $Id: html-long.bst,v 1.3 2004/02/25 16:20:50 gildea Exp $ +% modified from +% BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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. + +% DFK added abstract, comment, earlier, keyword, later, URL +% JV: the abstract etc is now part of the <dd>..</dd> section. + +ENTRY + { abstract + address + author + booktitle + chapter + comment + earlier + edition + editor + howpublished + institution + journal + key + keyword + later + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% DFK changed to use cite$ for the label +% DFK changed to HTML, and use URL to make cite key a link +FUNCTION {output.bibitem} +{ newline$ + URL empty$ + { "<DT> <A NAME=" quote$ * cite$ * quote$ * + "> " * cite$ * ":</A> </DT>" * write$ + } + { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * + URL * quote$ * "> " * cite$ * ":</A></DT>" * write$ + } + if$ + newline$ + "<DD>" write$ newline$ + "" + before.all 'output.state := +} + +% DFK changed to HTML +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ + earlier empty$ + 'skip$ + { "<br>" write$ newline$ + "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ * + ">" * earlier * "</A>." * write$ newline$ + } + if$ + later empty$ + 'skip$ + { "<br>" write$ newline$ + "See also later version <A HREF=" quote$ * "#" * later * quote$ * + ">" * later * "</A>." * write$ newline$ + } + if$ + "</DD>" write$ newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +% DFK changed to HTML +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "<EM>" swap$ * "</EM>" * } + if$ +} + +% DFK added for HTML strong emphasis +FUNCTION {strong} +{ duplicate$ empty$ + { pop$ "" } + { "<STRONG>" swap$ * "</STRONG>" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +% DFK added strong, so it will be bold. +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ strong } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ +} + +% DFK changed emphasize to strong +FUNCTION {format.btitle} +{ title strong +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { " " } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + 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$ + " \cite{" * 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 " + } + { "Volume" volume tie.or.space.connect + " of " * + } + 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$ + " \cite{" * 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$ + " \cite{" * crossref * "}" * +} + + +% DFK added +% top of stack is the string we want to be a quoted paragraph +FUNCTION {format.quotedParagraph} +{ duplicate$ empty$ + { skip$ } + { "<P><QUOTE> " swap$ * " </QUOTE></P>" *} + if$ +} + + +% DFK added, to support comment, private, keyword, etc +% next-to-top is field name (eg, "Comment") +% top is field value (eg, value of comment) +% both are popped; resulting top is either empty, +% or string describing field +FUNCTION {format.dfkfield} +{ duplicate$ empty$ + { pop$ pop$ "" } + { swap$ + "<strong> " swap$ * ":</strong> " * swap$ * } + if$ +} + +% DFK added +FUNCTION {dfk.stuff} +{ new.block + add.period$ write$ + "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$ + "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$ + "Comment" comment format.dfkfield format.quotedParagraph write$ newline$ + "" +} + +% DFK: added a call to dfk.stuff in all entry-type functions below + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { address new.block.checka + address output + } + 'skip$ + if$ + } + { organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + new.block + note output + dfk.stuff + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + { publisher new.sentence.checka } + { organization publisher new.sentence.checkb + organization output + } + if$ + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + } + if$ + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + new.block + note output + dfk.stuff + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + dfk.stuff + fin.entry +} + +FUNCTION {default.type} { misc } + +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"} + +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"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +FUNCTION {format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +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$ +} + +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 := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * +% DFK throw away stuff above and use cite$ for sort key + pop$ + cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.sort.label next.extra } + +INTEGERS { longest.label.width last.extra.num } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.sort.label sort.label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + sort.label 'last.sort.label := + } + if$ +} + +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 := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +% DFK removed code about et.al.char +% DFK changed to HTML +FUNCTION {begin.bib} +{ "<HTML>" write$ newline$ + "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$ + "<BODY BGCOLOR=#EEEEEE>" write$ newline$ + "<DL>" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +% DFK changed to HTML +FUNCTION {end.bib} +{ newline$ + "</DL>" write$ newline$ + "</BODY>" write$ newline$ + "</HTML>" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/Master/texmf-dist/source/bibtex/bibtools/html-longp.bst b/Master/texmf-dist/source/bibtex/bibtools/html-longp.bst new file mode 100644 index 00000000000..5e03c4dc3e6 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/html-longp.bst @@ -0,0 +1,1363 @@ +% BibTeX bibliography style `html-longp' +% Spits out HTML-formatted bibliography in place of bbl output. +% This is different from html-long in that it also includes the +% "private" and "reader" fields in the output. +% does not properly handle crossrefs. +% by David Kotz dfk@cs.dartmouth.edu +% $Id: html-longp.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $ +% modified from +% BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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. + +% DFK added abstract, comment, keyword, earlier, later, URL, private, reader +ENTRY + { abstract + address + author + booktitle + chapter + comment + earlier + edition + editor + howpublished + institution + journal + key + keyword + later + month + note + number + organization + pages + private + publisher + reader + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% DFK changed to use cite$ for the label +% DFK changed to HTML, and use URL to make cite key a link +FUNCTION {output.bibitem} +{ newline$ + URL empty$ + { "<DT> <A NAME=" quote$ * cite$ * quote$ * + "> " * cite$ * ":</A> </DT>" * write$ + } + { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * + URL * quote$ * "> " * cite$ * ":</A></DT>" * write$ + } + if$ + + newline$ + + "<DD>" write$ newline$ + "" + before.all 'output.state := +} + +% DFK changed to HTML +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ + earlier empty$ + 'skip$ + { "<br>" write$ newline$ + "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ * + ">" * earlier * "</A>." * write$ newline$ + } + if$ + later empty$ + 'skip$ + { "<br>" write$ newline$ + "See also later version <A HREF=" quote$ * "#" * later * quote$ * + ">" * later * "</A>." * write$ newline$ + } + if$ + "</DD>" write$ newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +% DFK changed to HTML +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "<EM>" swap$ * "</EM>" * } + if$ +} + +% DFK added for HTML strong emphasis +FUNCTION {strong} +{ duplicate$ empty$ + { pop$ "" } + { "<STRONG>" swap$ * "</STRONG>" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +% DFK added strong, so it will be bold. +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ strong } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ +} + +% DFK changed emphasize to strong +FUNCTION {format.btitle} +{ title strong +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { " " } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + 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$ + " \cite{" * 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 " + } + { "Volume" volume tie.or.space.connect + " of " * + } + 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$ + " \cite{" * 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$ + " \cite{" * crossref * "}" * +} + +% DFK added +% top of stack is the string we want to be a quoted paragraph +FUNCTION {format.quotedParagraph} +{ duplicate$ empty$ + { skip$ } + { "<P><QUOTE> " swap$ * " </QUOTE></P>" *} + if$ +} + + +% DFK added, to support comment, private, keyword, etc +% next-to-top is field name (eg, "Comment") +% top is field value (eg, value of comment) +% both are popped; resulting top is either empty, +% or string describing field +FUNCTION {format.dfkfield} +{ duplicate$ empty$ + { pop$ pop$ "" } + { swap$ + "<strong> " swap$ * ":</strong> " * swap$ * } + if$ +} + +% DFK added +FUNCTION {dfk.stuff} +{ new.block + "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$ + "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$ + + "Comment" comment format.dfkfield + "Private" private format.dfkfield + * + format.quotedParagraph write$ newline$ + + "Reader" reader format.dfkfield format.quotedParagraph write$ newline$ +} + +% DFK: added a call to dfk.stuff in all entry-type functions below + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { address new.block.checka + address output + } + 'skip$ + if$ + } + { organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + new.block + note output + fin.entry + dfk.stuff + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + { publisher new.sentence.checka } + { organization publisher new.sentence.checkb + organization output + } + if$ + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + fin.entry + dfk.stuff +} + +FUNCTION {default.type} { misc } + +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"} + +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"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +FUNCTION {format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +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$ +} + +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 := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * +% DFK throw away stuff above and use cite$ for sort key + pop$ + cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.sort.label next.extra } + +INTEGERS { longest.label.width last.extra.num } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.sort.label sort.label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + sort.label 'last.sort.label := + } + if$ +} + +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 := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +% DFK removed code about et.al.char +% DFK changed to HTML +FUNCTION {begin.bib} +{ "<HTML>" write$ newline$ + "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$ + "<BODY BGCOLOR=#EEEEEE>" write$ newline$ + "<DL>" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +% DFK changed to HTML +FUNCTION {end.bib} +{ newline$ + "</DL>" write$ newline$ + "</BODY>" write$ newline$ + "</HTML>" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/Master/texmf-dist/source/bibtex/bibtools/html-short.bst b/Master/texmf-dist/source/bibtex/bibtools/html-short.bst new file mode 100644 index 00000000000..49066f63b53 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/html-short.bst @@ -0,0 +1,1305 @@ +% BibTeX bibliography style `html-short' +% spits out HTML-formatted bibliography in place of bbl output +% by David Kotz dfk@cs.dartmouth.edu +% $Id: html-short.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $ +% modified from +% BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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. + +% DFK added abstract, comment, earlier, keyword, later, URL +ENTRY + { abstract + address + author + booktitle + chapter + comment + earlier + edition + editor + howpublished + institution + journal + key + keyword + later + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% DFK changed to use cite$ for the label +% DFK changed to HTML, and use URL to make cite key a link +FUNCTION {output.bibitem} +{ newline$ + URL empty$ + { "<DT> <A NAME=" quote$ * cite$ * quote$ * + "> " * cite$ * ":</A> </DT>" * write$ + } + { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * + URL * quote$ * "> " * cite$ * ":</A></DT>" * write$ + } + if$ + newline$ + "<DD>" write$ newline$ + "" + before.all 'output.state := +} + +% DFK changed to HTML +FUNCTION {fin.entry} +{ add.period$ + write$ + earlier empty$ + 'skip$ + { "<br>" write$ newline$ + "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ * + ">" * earlier * "</A>." * write$ newline$ + } + if$ + later empty$ + 'skip$ + { "<br>" write$ newline$ + "See also later version <A HREF=" quote$ * "#" * later * quote$ * + ">" * later * "</A>." * write$ newline$ + } + if$ + "</DD>" write$ newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +% DFK changed to HTML +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "<EM>" swap$ * "</EM>" * } + if$ +} + +% DFK added for HTML strong emphasis +FUNCTION {strong} +{ duplicate$ empty$ + { pop$ "" } + { "<STRONG>" swap$ * "</STRONG>" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +% DFK added strong, so it will be bold. +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ strong } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ +} + +% DFK changed emphasize to strong +FUNCTION {format.btitle} +{ title strong +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { " " } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + 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$ + " \cite{" * 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 " + } + { "Volume" volume tie.or.space.connect + " of " * + } + 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$ + " \cite{" * 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$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { address new.block.checka + address output + } + 'skip$ + if$ + } + { organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + { publisher new.sentence.checka } + { organization publisher new.sentence.checkb + organization output + } + if$ + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + fin.entry +} + +FUNCTION {default.type} { misc } + +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"} + +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"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +% DFK changed {\etalchar{+}} to + for HTML +FUNCTION {format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "+" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "+" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +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$ +} + +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 := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * +% DFK throw away stuff above and use cite$ for sort key + pop$ + cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.sort.label next.extra } + +INTEGERS { longest.label.width last.extra.num } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.sort.label sort.label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + sort.label 'last.sort.label := + } + if$ +} + +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 := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +% DFK removed code about et.al.char +% DFK changed to HTML +FUNCTION {begin.bib} +{ "<HTML>" write$ newline$ + "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$ + "<BODY BGCOLOR=#EEEEEE>" write$ newline$ + "<DL>" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +% DFK changed to HTML +FUNCTION {end.bib} +{ newline$ + "</DL>" write$ newline$ + "</BODY>" write$ newline$ + "</HTML>" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/Master/texmf-dist/source/bibtex/bibtools/looktex b/Master/texmf-dist/source/bibtex/bibtools/looktex new file mode 100644 index 00000000000..b64071ca679 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/looktex @@ -0,0 +1,53 @@ +#!/bin/csh -f +# looktex - look for a keyword in the references in a BiBTeX file. +# +# David Kotz (dfk@cs.dartmouth.edu) +# +# usage: +# looktex keyword file... +# +# Warning: Any characters in keyword that have meanings in regexps +# used by either sed or egrep must be escaped with a \ (the most +# likely occurrence might be \ itself: use \\). Case is ignored in +# the search, as well as position in the reference. +# +# Multiple keywords may be specified with an egrep alternation format: +# eg looktex 'jones|smith' foo.bib +# +# Actually, any egrep expression is allowed. +# Be sure to quote it properly. +# + +set L=~/lib + +if ($#argv < 2) then + echo usage: looktex keyword 'file...' + exit 1 +endif + +set keyword=`echo "$1" | tr A-Z a-z` +shift + +set script=/tmp/looktex$$ +onintr cleanup + +# Search for the keyword and get a script for extracting the +# references: +# Cat the files +# Strip comment lines and comments on lines +# Translate to lower case +# Search for the keyword and all @ lines +# Extract the line number only, plus 'entry' for lines with @ +# Convert this output into a sed script +cat $* \ + | sed -e 's/^%.*//' -e 's/\([^\\]\)%.*/\1/' \ + | tr A-Z a-z \ + | egrep -n "($keyword)"'|^[ ]*@' \ + | sed -n -e "s/:[ ]*@.*$keyword.*/ entry key/p" -e 's/:[ ]*@.*/ entry/p' -e "s/:.*//p" \ + | awk -f $L/looktex.awk > $script + +# Now have sed print out the correct entries: +cat $* | sed -n -f $script + +cleanup: +rm -f $script diff --git a/Master/texmf-dist/source/bibtex/bibtools/looktex.awk b/Master/texmf-dist/source/bibtex/bibtools/looktex.awk new file mode 100644 index 00000000000..35b534769e8 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/looktex.awk @@ -0,0 +1,39 @@ +# looktex.awk +# +# Goes with bin/looktex - look for a keyword in the references in a BiBTeX file +# +# David Kotz (dfk@cs.dartmouth.edu) +# +# This takes a list of line numbers that had the keyword. Some of the +# line numbers will be followed by "entry" or "entry key"; "entry" +# means that the line number is the start of a new bibtex entry, not a +# line containing the keyword. "entry key" means that it is a line +# starting an entry AND containing the keyword. +# +# On stdout, we produce a sed script for printing entries that had a +# match in them somewhere. This is a list of lines like "A,Bp" where A +# and B are line numbers. + +BEGIN {found=0; last=1} + +# defines the start of a new entry WITH a keyword match +NF==3 { + if (found) { print last "," $1-1 "p" } + found=1 + last=$1 +} + +# defines the start of a new entry +NF==2 { + if (found) { print last "," $1-1 "p" } + found=0 + last=$1 +} + +# marks a place where the keyword was found +NF==1 {found=1} + +END { + if (found) + print last ",$p"; +} diff --git a/Master/texmf-dist/source/bibtex/bibtools/makebib b/Master/texmf-dist/source/bibtex/bibtools/makebib new file mode 100644 index 00000000000..edd9ba4144a --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/makebib @@ -0,0 +1,95 @@ +#!/bin/csh -f +# +# makebib - make a bib file that has the given citations +# +# usage: +# makebib [-n | -d | -u] file.bib... [citekey]... +# Where -n means "no comment", ie, don't include any "comment" fields. +# And -d means "dfk", ie, add attribution to dfk to all comment fields. +# And -u means "unsorted", and comments are still included. +# Output is to subset.bib. If citekey is not given, then all refs in +# the bibfile are included. +# +# dfk 11/24/92: write the subset.aux file directly, skipping latex +# dfk 9/99: add unsorted option + +onintr cleanup + +if ($#argv < 1) then + echo 'usage: makebib [-n|-d] file.bib... [citekey]...' + exit 1 +endif + +if ("$1" == "-n") then + set bst=subset-nocomment + shift +else + if ("$1" == "-d") then + set bst=subset-dfk + shift + else + if ("$1" == "-u") then + set bst=subset-unsorted + shift + else + set bst=subset + endif + endif +endif + +if ($#argv < 1) then + echo 'usage: makebib [-n|-d|-u] file.bib... [citekey]...' + exit 1 +endif + +set files = $1:r +shift + +while ($1:e == bib) + set files=($files,$1:r) + shift +end + +echo creating subset.aux for $files + +cat > subset.aux <<EOF +\relax +\bibstyle{$bst} +\bibdata{$files} +EOF + +# an annoying incompatibility in the way "echo" treats backslash... +if (`uname` == Linux) then + set citation="\\citation" +else + set citation="\citation" +endif + +if ($#argv > 0) then + foreach f ($*) + echo $citation"{$f}" >> subset.aux + end +else + echo $citation'{*}' >> subset.aux +endif +rm -f subset.{log,dvi,bbl,blg} + +echo bibtex subset +bibtex subset + +if (-e makebib.sed.Z) uncompress makebib.sed +if (-e makebib.sed.gz) gunzip makebib.sed + +echo "" +echo 'Fixing these lines (might be doing the wrong thing)' +grep '[^\\]%$' subset.bbl +echo end. +echo "" + +sed -f makebib.sed subset.bbl > subset.bib + +echo "" +echo output is in subset.bib + +cleanup: +rm -f subset.{tex,aux,log,dvi,bbl,blg,sed} diff --git a/Master/texmf-dist/source/bibtex/bibtools/printbib b/Master/texmf-dist/source/bibtex/bibtools/printbib new file mode 100644 index 00000000000..378396e1b57 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/printbib @@ -0,0 +1,68 @@ +#!/bin/csh -f +# +# printbib - print a full bibtex bib file out +# +# David Kotz +# +# usage: +# printbib bibfile... +# +# Then send the dvi file 'abstract.dvi' to the printer +# (usage varies; try lpr -d abstract.dvi) + +if ($#argv == 0) then + echo usage: printbib bibfile... + exit 1 +endif + +if ($1:e == "bib") then + set files=($1:r) +else + set files=($1) +endif + +shift +foreach f ($*) + if ($f:e == "bib") then + set files="$files,$f:r" + else + set files="$files,$f" + endif +end + +echo creating abstract.tex for $files + +cat > abstract.tex <<EOF +\documentclass[11pt]{article} +\usepackage{latexsym} +\sloppy +\setlength{\textwidth}{6.5in} +\setlength{\textheight}{9in} +\setlength{\topmargin}{-0.5in} +\setlength{\oddsidemargin}{0pt} +\setlength{\evensidemargin}{0pt} +\newcommand{\eg}{e.g.} % e.g. +\newcommand{\ie}{i.e.} % i.e. +\newcommand{\etc}{etc.} % etc. +\newcommand{\vs}{{\em vs.}} % vs. +\begin{document} +\begin{center} \Large Bibliography files \large \\\\ +EOF +echo $files >> abstract.tex +cat >> abstract.tex <<EOF +\\\\ \today +\end{center} +\nocite{*} +\bibliographystyle{abstract} +EOF + +echo "\bibliography{$files}" >> abstract.tex +echo '\end{document}' >> abstract.tex + +rm -f abstract.{aux,log,dvi,bbl,blg} + +set echo +latex abstract.tex +bibtex abstract +latex abstract.tex +latex abstract.tex diff --git a/Master/texmf-dist/source/bibtex/bibtools/subset-dfk.bst b/Master/texmf-dist/source/bibtex/bibtools/subset-dfk.bst new file mode 100644 index 00000000000..b3f506bea99 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/subset-dfk.bst @@ -0,0 +1,281 @@ +% BibTeX bibliography style `subset' +% by David Kotz dfk@cs.dartmouth.edu +% August 1992, May 1993, February 1999 +% This takes an aux file and produces an unusual .bbl file, +% that is actually in .bib format -- but it has all of the references, +% and strings expanded. Thus, it becomes a complete, portable .bib +% file. Crossrefs are retained but redundant. +% adds my name to the comment field +% modified from + % BibTeX bibliography style `abstract' + % by David Kotz dfk@cs.duke.edu + % March 1989 + % modified from + % BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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. + +% DFK added abstract, comment, keyword to standard set +% 5/93 DFK added private, ignored when subsetting +% 7/94 DFK added URL +ENTRY + { abstract + address + author + booktitle + category + chapter + comment + earlier + edition + editor + howpublished + institution + journal + key + keyword + later + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +STRINGS { s t } + +% output a field; the top is the text, the next to top is the name of +% the field, and we know that the text is nonnull. +% we start by finishing the previous line +FUNCTION {output.field} +{ + ", " write$ % write comma and newline + newline$ + " " write$ % and a respectable indentation + + swap$ % now field name is on top + " = {" * % put = { + swap$ * % now text is back on top; concatenate + "}" * % put } + write$ +} + +% output if top not empty; below the top is the name of the field +FUNCTION {output} +{ duplicate$ empty$ + { pop$ pop$ } + 'output.field + if$ +} + +% special for "comment" +% output if top not empty; below the top is the name of the field +FUNCTION {output.comment} +{ duplicate$ empty$ + { pop$ pop$ } + { " [David.Kotz@Dartmouth.edu]" * output.field } + if$ +} + +% prints each field +FUNCTION {output.bibfields} +{ +% The fields, in what seems to be a good order + "key" key output + "author" author output + "title" title output + + "journal" journal output + "booktitle" booktitle output + + "chapter" chapter output + "edition" edition output + "editor" editor output + + crossref missing$ + { } + { "crossref" crossref output } + if$ + + "year" year output + "month" month output + "series" series output + "volume" volume output + "number" number output + "type" type output + + "pages" pages output + + "institution" institution output + "school" school output + "organization" organization output + "publisher" publisher output + "howpublished" howpublished output + "address" address output + + "category" category output + + "note" note output + + "earlier" earlier output + "later" later output + + "URL" URL output + "keyword" keyword output + "abstract" abstract output + "comment" comment output.comment +} + +% Takes name of type as argument, and prints @ line +% then it prints each field +FUNCTION {output.bibitem} +{ +% write the @ line + "@" swap$ * write$ % @type + "{" cite$ * write$ % {citekey + + output.bibfields + +% finish entry + newline$ + "}" write$ + newline$ + newline$ +} + +FUNCTION {article}{ "Article" output.bibitem } + +FUNCTION {book}{ "Book" output.bibitem } + +FUNCTION {booklet}{ "Booklet" output.bibitem } + +FUNCTION {inbook}{ "InBook" output.bibitem } + +FUNCTION {incollection}{ "InCollection" output.bibitem } + +FUNCTION {inproceedings}{ "InProceedings" output.bibitem } + +FUNCTION {conference}{ "Conference" output.bibitem } + +FUNCTION {manual}{ "Manual" output.bibitem } + +FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem } + +FUNCTION {misc}{ "Misc" output.bibitem } + +FUNCTION {phdthesis}{ "PhdThesis" output.bibitem } + +FUNCTION {proceedings}{ "Proceedings" output.bibitem } + +FUNCTION {techreport}{ "TechReport" output.bibitem } + +FUNCTION {unpublished}{ "Unpublished" output.bibitem } + +FUNCTION {default.type} { misc } + +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"} + +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"} + +READ + +% DFK use cite$ for sort key +FUNCTION {presort} +{ + cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +FUNCTION {begin.bib} +{ + "% BibTeX bibliography file" write$ + newline$ + newline$ +} + +EXECUTE {begin.bib} + +ITERATE {call.type$} diff --git a/Master/texmf-dist/source/bibtex/bibtools/subset-nocomment.bst b/Master/texmf-dist/source/bibtex/bibtools/subset-nocomment.bst new file mode 100644 index 00000000000..687719f8289 --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/subset-nocomment.bst @@ -0,0 +1,272 @@ +% BibTeX bibliography style `subset' +% by David Kotz dfk@cs.dartmouth.edu +% August 1992, May 1993, February 1999 +% This takes an aux file and produces an unusual .bbl file, +% that is actually in .bib format -- but it has all of the references, +% and strings expanded. Thus, it becomes a complete, portable .bib +% file. Crossrefs are retained but redundant. +% This one doesn't include 'comment' in output. +% modified from + % BibTeX bibliography style `abstract' + % by David Kotz dfk@cs.duke.edu + % March 1989 + % modified from + % BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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. + +% DFK added abstract, comment, keyword to standard set +% 5/93 DFK added private, ignored when subsetting +% 7/94 DFK added URL +ENTRY + { abstract + address + author + booktitle + category + chapter + comment + earlier + edition + editor + howpublished + institution + journal + key + keyword + later + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +STRINGS { s t } + +% output a field; the top is the text, the next to top is the name of +% the field, and we know that the text is nonnull. +% we start by finishing the previous line +FUNCTION {output.field} +{ + ", " write$ % write comma and newline + newline$ + " " write$ % and a respectable indentation + + swap$ % now field name is on top + " = {" * % put = { + swap$ * % now text is back on top; concatenate + "}" * % put } + write$ +} + +% output if top not empty; below the top is the name of the field +FUNCTION {output} +{ duplicate$ empty$ + { pop$ pop$ } + 'output.field + if$ +} + +% prints each field +FUNCTION {output.bibfields} +{ +% The fields, in what seems to be a good order + "key" key output + "author" author output + "title" title output + + "journal" journal output + "booktitle" booktitle output + + "chapter" chapter output + "edition" edition output + "editor" editor output + + crossref missing$ + { } + { "crossref" crossref output } + if$ + + "year" year output + "month" month output + "series" series output + "volume" volume output + "number" number output + "type" type output + + "pages" pages output + + "institution" institution output + "school" school output + "organization" organization output + "publisher" publisher output + "howpublished" howpublished output + "address" address output + + "category" category output + + "note" note output + + "earlier" earlier output + "later" later output + + "URL" URL output + "keyword" keyword output + "abstract" abstract output +% "comment" comment output +} + +% Takes name of type as argument, and prints @ line +% then it prints each field +FUNCTION {output.bibitem} +{ +% write the @ line + "@" swap$ * write$ % @type + "{" cite$ * write$ % {citekey + + output.bibfields + +% finish entry + newline$ + "}" write$ + newline$ + newline$ +} + +FUNCTION {article}{ "Article" output.bibitem } + +FUNCTION {book}{ "Book" output.bibitem } + +FUNCTION {booklet}{ "Booklet" output.bibitem } + +FUNCTION {inbook}{ "InBook" output.bibitem } + +FUNCTION {incollection}{ "InCollection" output.bibitem } + +FUNCTION {inproceedings}{ "InProceedings" output.bibitem } + +FUNCTION {conference}{ "Conference" output.bibitem } + +FUNCTION {manual}{ "Manual" output.bibitem } + +FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem } + +FUNCTION {misc}{ "Misc" output.bibitem } + +FUNCTION {phdthesis}{ "PhdThesis" output.bibitem } + +FUNCTION {proceedings}{ "Proceedings" output.bibitem } + +FUNCTION {techreport}{ "TechReport" output.bibitem } + +FUNCTION {unpublished}{ "Unpublished" output.bibitem } + +FUNCTION {default.type} { misc } + +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"} + +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"} + +READ + +% DFK use cite$ for sort key +FUNCTION {presort} +{ + cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +FUNCTION {begin.bib} +{ + "% BibTeX bibliography file" write$ + newline$ + newline$ +} + +EXECUTE {begin.bib} + +ITERATE {call.type$} diff --git a/Master/texmf-dist/source/bibtex/bibtools/subset.bst b/Master/texmf-dist/source/bibtex/bibtools/subset.bst new file mode 100644 index 00000000000..0efc438223c --- /dev/null +++ b/Master/texmf-dist/source/bibtex/bibtools/subset.bst @@ -0,0 +1,271 @@ +% BibTeX bibliography style `subset' +% by David Kotz dfk@cs.dartmouth.edu +% August 1992, May 1993, February 1999 +% This takes an aux file and produces an unusual .bbl file, +% that is actually in .bib format -- but it has all of the references, +% and strings expanded. Thus, it becomes a complete, portable .bib +% file. Crossrefs are retained but redundant. +% modified from + % BibTeX bibliography style `abstract' + % by David Kotz dfk@cs.duke.edu + % March 1989 + % modified from + % BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, 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. + +% DFK added abstract, comment, keyword to standard set +% 5/93 DFK added private, ignored when subsetting +% 7/94 DFK added URL +ENTRY + { abstract + address + author + booktitle + category + chapter + comment + earlier + edition + editor + howpublished + institution + journal + key + keyword + later + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +STRINGS { s t } + +% output a field; the top is the text, the next to top is the name of +% the field, and we know that the text is nonnull. +% we start by finishing the previous line +FUNCTION {output.field} +{ + ", " write$ % write comma and newline + newline$ + " " write$ % and a respectable indentation + + swap$ % now field name is on top + " = {" * % put = { + swap$ * % now text is back on top; concatenate + "}" * % put } + write$ +} + +% output if top not empty; below the top is the name of the field +FUNCTION {output} +{ duplicate$ empty$ + { pop$ pop$ } + 'output.field + if$ +} + +% prints each field +FUNCTION {output.bibfields} +{ +% The fields, in what seems to be a good order + "key" key output + "author" author output + "title" title output + + "journal" journal output + "booktitle" booktitle output + + "chapter" chapter output + "edition" edition output + "editor" editor output + + crossref missing$ + { } + { "crossref" crossref output } + if$ + + "year" year output + "month" month output + "series" series output + "volume" volume output + "number" number output + "type" type output + + "pages" pages output + + "institution" institution output + "school" school output + "organization" organization output + "publisher" publisher output + "howpublished" howpublished output + "address" address output + + "category" category output + + "note" note output + + "earlier" earlier output + "later" later output + + "URL" URL output + "keyword" keyword output + "abstract" abstract output + "comment" comment output +} + +% Takes name of type as argument, and prints @ line +% then it prints each field +FUNCTION {output.bibitem} +{ +% write the @ line + "@" swap$ * write$ % @type + "{" cite$ * write$ % {citekey + + output.bibfields + +% finish entry + newline$ + "}" write$ + newline$ + newline$ +} + +FUNCTION {article}{ "Article" output.bibitem } + +FUNCTION {book}{ "Book" output.bibitem } + +FUNCTION {booklet}{ "Booklet" output.bibitem } + +FUNCTION {inbook}{ "InBook" output.bibitem } + +FUNCTION {incollection}{ "InCollection" output.bibitem } + +FUNCTION {inproceedings}{ "InProceedings" output.bibitem } + +FUNCTION {conference}{ "Conference" output.bibitem } + +FUNCTION {manual}{ "Manual" output.bibitem } + +FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem } + +FUNCTION {misc}{ "Misc" output.bibitem } + +FUNCTION {phdthesis}{ "PhdThesis" output.bibitem } + +FUNCTION {proceedings}{ "Proceedings" output.bibitem } + +FUNCTION {techreport}{ "TechReport" output.bibitem } + +FUNCTION {unpublished}{ "Unpublished" output.bibitem } + +FUNCTION {default.type} { misc } + +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"} + +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"} + +READ + +% DFK use cite$ for sort key +FUNCTION {presort} +{ + cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +FUNCTION {begin.bib} +{ + "% BibTeX bibliography file" write$ + newline$ + newline$ +} + +EXECUTE {begin.bib} + +ITERATE {call.type$} diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index b3e20758cf3..7c941a03c82 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -134,7 +134,7 @@ my @TLP_working = qw( biblatex2bibitem bibleref bibleref-french bibleref-german bibleref-lds bibleref-mouth bibleref-parse bibletext - biblist bibtex bibtexperllibs bibtopic + biblist bibtex bibtexperllibs bibtools bibtopic bibtopicprefix bibexport bibunits bidi bidi-atbegshi bidicontour bidihl bidipagegrid bidipresentation bidishadowtext diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 165c1c0db04..4dbf8128e13 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -228,7 +228,6 @@ chomp (my $ctan_root = `tlpkginfo --ctan-root`); 'biblatex-spbasic', "&MAKEflatten", 'biblio', "die 'skipping, too big, see tl-update-auto'", 'bibtool', "die 'skipping, requires compilation'", - 'bibtools', "die 'skipping, ca.2000, await request'", 'bibtopicprefix', "&MAKEflatten", 'bibutils', "die 'skipping, requires compilation'", 'bickham', "die 'skipping, support for nonfree font'", @@ -2940,6 +2939,7 @@ $standardsource = '(\.(bat|c|drv|[dem]tx|fea|fdd|ins|mk|sfd)' 'biber', '.', # everything, lots done in post 'biber-ms', '.', # same as biber 'bibtexperllibs', '.', # everything + 'bibtools', '.', # everything but one bst 'bigints', 'NULL', 'blacklettert1', '\.dtx|\.ins|\.pl|Makefile', 'booktabs-de', 'NULL', # doc package @@ -3383,6 +3383,7 @@ $standardcsf='\.csf'; $standardbst='\.bst$'; %specialbst = ( 'beebe' => '\.bst$', + 'bibtools' => 'abstract\.bst', 'einfuehrung' => 'NULL', 'einfuehrung2' => 'NULL', 'feupphdteses' => 'NULL', diff --git a/Master/tlpkg/tlpsrc/bibtools.tlpsrc b/Master/tlpkg/tlpsrc/bibtools.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/bibtools.tlpsrc diff --git a/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc index 30bc56d23c8..23bd631f3f6 100644 --- a/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc @@ -91,6 +91,7 @@ depend biblatex-vancouver depend biblatex2bibitem depend biblist depend bibtexperllibs +depend bibtools depend bibtopic depend bibtopicprefix depend bibunits |