summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-08-14 23:55:17 +0000
committerKarl Berry <karl@freefriends.org>2009-08-14 23:55:17 +0000
commit0d16b3b7e2ce00f9de58a809a4ce47b39aaef068 (patch)
tree791c0999c492978ee744af2cb14e3605c135ba2d /Master
parent8c1962d0507c747e0e1a8870dfd758365c5f63ff (diff)
bibhtml 2.0 (9aug09)
git-svn-id: svn://tug.org/texlive/trunk@14680 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/bibtex/bib/bibhtml/bibrefs.bib64
-rw-r--r--Master/texmf-dist/bibtex/bst/bibhtml/abbrvhtml.bst1402
-rw-r--r--Master/texmf-dist/bibtex/bst/bibhtml/alphahtml.bst499
-rw-r--r--Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldate.bst502
-rw-r--r--Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldater.bst502
-rw-r--r--Master/texmf-dist/bibtex/bst/bibhtml/plainhtml.bst525
-rw-r--r--Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldate.bst397
-rw-r--r--Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldater.bst528
-rw-r--r--Master/texmf-dist/bibtex/bst/bibhtml/unsrthtml.bst1256
-rw-r--r--Master/texmf-dist/doc/bibtex/bibhtml/README14
-rw-r--r--Master/texmf-dist/doc/bibtex/bibhtml/bibhtml6
-rw-r--r--Master/texmf-dist/doc/bibtex/bibhtml/bibhtml-extract-aux.xslt99
-rw-r--r--Master/texmf-dist/doc/bibtex/bibhtml/bibhtml-insert-bib.xslt50
-rw-r--r--Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.html490
-rw-r--r--Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.xslt55
-rw-r--r--Master/texmf-dist/doc/bibtex/bibhtml/bibrefs.bib221
-rw-r--r--Master/texmf-dist/doc/bibtex/bibhtml/detex.sed55
17 files changed, 5295 insertions, 1370 deletions
diff --git a/Master/texmf-dist/bibtex/bib/bibhtml/bibrefs.bib b/Master/texmf-dist/bibtex/bib/bibhtml/bibrefs.bib
deleted file mode 100644
index 1b5bbb39edb..00000000000
--- a/Master/texmf-dist/bibtex/bib/bibhtml/bibrefs.bib
+++ /dev/null
@@ -1,64 +0,0 @@
-% Page seems to have disappeared
-@Misc{brown95,
- author = "Haines Brown",
- title = "Citations of Electronic Documents in an Electronic
- Document",
- howpublished = "World Wide Web page",
- year = 1995,
- note = "Once at \url{http://neal.ctstateu.edu/history/cite.html}, now disappeared"
-}
-
-@TechReport{walker95,
- author = "Janice R Walker",
- title = "{MLA}-Style Citations of Electronic Sources",
- institution = "Department of English, University of South Florida",
- year = 1995,
- number = "4/95",
- month = "January",
- note = "Endorsed by the {A}lliance for {C}omputers and {W}riting",
- url = "http://www.columbia.edu/cu/cup/cgos/idx_basic.html",
- lastchecked = {September 2005}
-}
-
-@webpage{emory95,
- author = "libsf@web.cc.emory.edu",
- title = "Citation Formats",
- howpublished = "World Wide Web page",
- year = 1995,
- url = "http://www.cc.emory.edu/WHSCL/citation.formats.html"
-}
-
-@webpage{apa03,
- author = "{American Psychological Society}",
- title = "{APA} Style: Electronic References",
- year = {2003},
- url = {http://www.apastyle.org/elecref.html},
- lastchecked = {September 2005}
-}
-
-@webpage{weapas,
- author = {T Land},
- title = {Web Extension to {American Psychological
- Association} Style ({WEAPAS})},
- howpublished = {Web page},
- year = 1998,
- url = {http://www.beadsland.com/weapas/},
- lastchecked = {September 2005},
-}
-
-@webpage{iso690,
- key = {ISO 690-2},
- title = {{ISO 690-2}, Bibliographic references to electronic
- documents (excerpts)},
- howpublished = {online},
- year = 2002,
- url = {http://www.collectionscanada.ca/iso/tc46sc9/standard/690-2e.htm},
- lastchecked = {September 2005}
-}
-
-@unpublished{test,
- author = "Experimenter, A. N.",
- title = "bibhtml tests -- how do we handle odd (~&) characters?",
- url = "http://www.example.org/~tilde/query?arg1=%1e&arg2=one;two&moreargswhichmaketheurlquitelong",
- note = "This is a test entry"
-}
diff --git a/Master/texmf-dist/bibtex/bst/bibhtml/abbrvhtml.bst b/Master/texmf-dist/bibtex/bst/bibhtml/abbrvhtml.bst
new file mode 100644
index 00000000000..eeb6f9e9979
--- /dev/null
+++ b/Master/texmf-dist/bibtex/bst/bibhtml/abbrvhtml.bst
@@ -0,0 +1,1402 @@
+%% abbrvhtml.bst
+%%
+%% Part of bibhtml, version 2.0, released 2009 August 9
+%% Hg node 4a5600417b09.
+%% See <http://purl.org/nxg/dist/bibhtml>
+%%
+%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk>
+%%
+%% This is a modification of a modification!
+%%
+%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/abbrv.bst
+%%% ... by urlbst, version 0.6-4 (marked with "% urlbst")
+%%% See <http://purl.org/nxg/dist/urlbst>
+%%% Added webpage entry type, and url and lastchecked fields.
+%%% Added eprint support.
+%%% Added DOI support.
+%%% Added PUBMED support.
+%%% Added hyperref support.
+%%% Original headers follow...
+
+% BibTeX standard bibliography style `abbrv'
+ % 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
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ eprint % urlbst
+ doi % urlbst
+ pubmed % urlbst
+ url % urlbst
+ lastchecked % urlbst
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform }
+
+STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst...
+INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver }
+% Following constants may be adjusted by hand, if desired
+FUNCTION {init.urlbst.variables}
+{
+ "Available from: " 'urlintro := % prefix before URL
+ "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
+ "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
+ "doi:" 'doiprefix := % text prefix printed before DOI ref
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
+ #1 'addeprints := % 0=no eprints; 1=include eprints
+ #1 'adddoiresolver := % 0=no DOI resolver; 1=include it
+ #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
+ #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing
+ % the following are internal state variables, not config constants
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
+ "" 'openinlinelink := % ditto
+ "" 'closeinlinelink := % ditto
+}
+INTEGERS {
+ bracket.state
+ outside.brackets
+ open.brackets
+ within.brackets
+ close.brackets
+ close.first.block
+}
+% ...urlbst to here
+FUNCTION {init.state.consts}
+{ #0 'outside.brackets := % urlbst
+ #1 'open.brackets :=
+ #2 'within.brackets :=
+ #3 'close.brackets :=
+
+ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+ #0 'close.first.block :=
+}
+
+STRINGS { s t }
+
+% urlbst
+FUNCTION {output.nonnull.original}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ % close the <dt> after the end of the first block
+ close.first.block
+ { "</a></dt>" write$ newline$ "<dd>" write$
+ #0 'close.first.block := }
+ { newline$ }
+ if$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+% urlbst...
+% The following three functions are for handling inlinelink. They wrap
+% a block of text which is potentially output with write$ by multiple
+% other functions, so we don't know the content a priori.
+% They communicate between each other using the variables makeinlinelink
+% (which is true if a link should be made), and closeinlinelink (which holds
+% the string which should close any current link. They can be called
+% at any time, but start.inlinelink will be a no-op unless something has
+% previously set makeinlinelink true, and the two ...end.inlinelink functions
+% will only do their stuff if start.inlinelink has previously set
+% closeinlinelink to be non-empty.
+FUNCTION {possibly.setup.inlinelink}
+{ makeinlinelink
+ { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+ "</a>" 'closeinlinelink :=
+ #0 'makeinlinelink := }
+ 'skip$
+ if$ % makeinlinelink
+}
+FUNCTION {add.inlinelink}
+{ openinlinelink empty$
+ 'skip$
+ { openinlinelink swap$ * closeinlinelink *
+ "" 'openinlinelink :=
+ }
+ if$
+}
+FUNCTION {output.nonnull}
+{ % Save the thing we've been asked to output
+ 's :=
+ % If the bracket-state is close.brackets, then add a close-bracket to
+ % what is currently at the top of the stack, and set bracket.state
+ % to outside.brackets
+ bracket.state close.brackets =
+ { "]" *
+ outside.brackets 'bracket.state :=
+ }
+ 'skip$
+ if$
+ bracket.state outside.brackets =
+ { % We're outside all brackets -- this is the normal situation.
+ % Write out what's currently at the top of the stack, using the
+ % original output.nonnull function.
+ s
+ add.inlinelink
+ output.nonnull.original % invoke the original output.nonnull
+ }
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
+ % new text (in s) to the top of the stack, and move to the close-brackets
+ % state, ready for next time (unless inbrackets resets it). If we come
+ % into this branch, then output.state is carefully undisturbed.
+ bracket.state open.brackets =
+ { " [" * }
+ { ", " * } % bracket.state will be within.brackets
+ if$
+ s *
+ close.brackets 'bracket.state :=
+ }
+ if$
+}
+
+% Call this function just before adding something which should be presented in
+% brackets. bracket.state is handled specially within output.nonnull.
+FUNCTION {inbrackets}
+{ bracket.state close.brackets =
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
+ { open.brackets 'bracket.state := }
+ if$
+}
+
+FUNCTION {format.lastchecked}
+{ lastchecked empty$
+ { "" }
+ { inbrackets "cited " lastchecked * }
+ if$
+}
+% ...urlbst to here
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem.original}
+{ newline$
+ "<dt><a name='" write$
+ cite$ write$
+ "'>[" cite$ * "] " * write$
+ % the <dt> is closed within output.nonnull, as long as close.first.block is true
+ #1 'close.first.block :=
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry.original}
+{ add.period$ "</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$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<em>" swap$ * "</em>" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{f.~}{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 * "</em>" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " <span class='cite'>" * crossref * "</span>" *
+}
+
+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 * "</em>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " <span class='cite'>" * crossref * "</span>" *
+}
+
+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 * "</em>" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " <span class='cite'>" * crossref * "</span>" *
+}
+
+% urlbst...
+% Functions for making hypertext links.
+FUNCTION {make.href}
+{
+ "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" *
+}
+
+% If inlinelinks is true, then format.url should be a no-op, since it's
+% (a) redundant, and (b) could end up as a link-within-a-link.
+FUNCTION {format.url}
+{ inlinelinks #1 = url empty$ or
+ { "" }
+ { urlintro "<code>" * url * "</code>" * }
+ if$
+}
+
+FUNCTION {format.eprint}
+{ eprint empty$
+ { "" }
+ { eprintprefix eprint * eprinturl eprint * make.href }
+ if$
+}
+
+FUNCTION {format.doi}
+{ doi empty$
+ { "" }
+ { doiform #0 =
+ { doiprefix doi * doiurl doi * make.href }
+ { "DOI:{" doi * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pubmed}
+{ pubmed empty$
+ { "" }
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
+ if$
+}
+
+% Output a URL. We can't use the more normal idiom (something like
+% `format.url output'), because the `inbrackets' within
+% format.lastchecked applies to everything between calls to `output',
+% so that `format.url format.lastchecked * output' ends up with both
+% the URL and the lastchecked in brackets.
+FUNCTION {output.url}
+{ url empty$
+ 'skip$
+ { new.block
+ format.url output
+ format.lastchecked output
+ }
+ if$
+}
+
+FUNCTION {output.web.refs}
+{
+ new.block
+ output.url
+ addeprints eprint empty$ not and
+ { format.eprint output.nonnull }
+ 'skip$
+ if$
+ adddoiresolver doi empty$ not and
+ { format.doi output.nonnull }
+ 'skip$
+ if$
+ addpubmedresolver pubmed empty$ not and
+ { format.pubmed output.nonnull }
+ 'skip$
+ if$
+}
+
+% Wrapper for output.bibitem.original.
+% If the URL field is not empty, set makeinlinelink to be true,
+% so that an inline link will be started at the next opportunity
+FUNCTION {output.bibitem}
+{ outside.brackets 'bracket.state :=
+ output.bibitem.original
+ inlinelinks url empty$ not and
+ { #1 'makeinlinelink := }
+ { #0 'makeinlinelink := }
+ if$
+}
+
+% Wrapper for fin.entry.original
+FUNCTION {fin.entry}
+{ output.web.refs % urlbst
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
+ "[link]" output.nonnull }
+ 'skip$
+ if$
+ bracket.state close.brackets = % urlbst
+ { "]" * }
+ 'skip$
+ if$
+ fin.entry.original
+}
+
+% Webpage entry type.
+% Title and url fields required;
+% author, note, year, month, and lastchecked fields optional
+% See references
+% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
+% http://www.classroom.net/classroom/CitingNetResources.html
+% http://neal.ctstateu.edu/history/cite.html
+% http://www.cas.usf.edu/english/walker/mla.html
+% for citation formats for web pages.
+FUNCTION {webpage}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ 'skip$ % author and editor both optional
+ { format.editors output.nonnull }
+ if$
+ }
+ { editor empty$
+ { format.authors output.nonnull }
+ { "can't use both author and editor fields in " cite$ * warning$ }
+ if$
+ }
+ if$
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
+ format.title "title" output.check
+ inbrackets "online" output
+ new.block
+ year empty$
+ 'skip$
+ { format.date "year" output.check }
+ if$
+ % We don't need to output the URL details ('lastchecked' and 'url'),
+ % because fin.entry does that for us, using output.web.refs. The only
+ % reason we would want to put them here is if we were to decide that
+ % they should go in front of the rather miscellaneous information in 'note'.
+ new.block
+ note output
+ fin.entry
+}
+% ...urlbst to here
+
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Programming"}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Gr."}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
+
+MACRO {tcs} {"Theoretical Comput. Sci."}
+
+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 {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ f{ }}{ 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}
+{ 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 }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "<dl>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.urlbst.variables}
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "</dl>" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/Master/texmf-dist/bibtex/bst/bibhtml/alphahtml.bst b/Master/texmf-dist/bibtex/bst/bibhtml/alphahtml.bst
index 5fe627e7b37..c4c87183e7b 100644
--- a/Master/texmf-dist/bibtex/bst/bibhtml/alphahtml.bst
+++ b/Master/texmf-dist/bibtex/bst/bibhtml/alphahtml.bst
@@ -1,28 +1,23 @@
%% alphahtml.bst
%%
-%% Part of bibhtml, version 1.3, released 2006 October 31
+%% Part of bibhtml, version 2.0, released 2009 August 9
+%% Hg node 4a5600417b09.
%% See <http://purl.org/nxg/dist/bibhtml>
%%
-%% Copyright 1999, 2005, 2006, Norman Gray <norman@astro.gla.ac.uk>
+%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk>
%%
-%% alphahtml.bst was originally derived from alpha.bst and plainhtml.bst by
-%% Franz G. Fischer, Franz.Fischer@lpr.e-technik.tu-muenchen.de
-%
-% $Id: alphahtml.bst.in,v 1.2 2006/10/31 15:45:57 norman Exp $
-%
-% Released under the terms of the GNU General Public Licence --
-% see the file LICENCE, included in the distribution.
-%
-% Version history:
-% 1.3 31 October 2006: added 'hrefprefix' variable; minor code tidups
-% 1.2 19 September 2005: added `webpage' entry type, and
-% `lastchecked' field.
-% 1.1 6 June 1999. Tidied documentation, clarified licence.
-% 1.0b1 Original version, based on Franz's adaptations, plus support
-% for eprint field (in article, techreport, misc, inproceedings,
-% unpublished)
-%
-% Modification of...
+%% This is a modification of a modification!
+%%
+%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/alpha.bst
+%%% ... by urlbst, version 0.6-4 (marked with "% urlbst")
+%%% See <http://purl.org/nxg/dist/urlbst>
+%%% Added webpage entry type, and url and lastchecked fields.
+%%% Added eprint support.
+%%% Added DOI support.
+%%% Added PUBMED support.
+%%% Added hyperref support.
+%%% Original headers follow...
+
% 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.
@@ -32,13 +27,6 @@
% 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.
-% ... to make it produce HTML, and add the url field
-%
-% this produces a file which is a <dl>...</dl>, which should be incorporated
-% into another html file somehow.
-% There will still be ~ and -- within the output file (it's too difficult
-% to get rid of them here). A post-processor should turn these
-% into either &nbsp; and &enspace; or ' ' and '-' as required.
ENTRY
{ address
@@ -63,45 +51,76 @@ ENTRY
type
volume
year
- url
- lastchecked
- eprint
-%EDIT1
+ eprint % urlbst
+ doi % urlbst
+ pubmed % urlbst
+ url % urlbst
+ lastchecked % urlbst
}
{}
{ label extra.label sort.label }
-INTEGERS { output.state before.all mid.sentence after.sentence after.block
- close.link }
-
-STRINGS { s t xxxmirror hrefprefix }
-
-% Initialise state constants, and location of nearest XXX mirror (for eprints)
+INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform }
+
+STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst...
+INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver }
+% Following constants may be adjusted by hand, if desired
+FUNCTION {init.urlbst.variables}
+{
+ "Available from: " 'urlintro := % prefix before URL
+ "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
+ "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
+ "doi:" 'doiprefix := % text prefix printed before DOI ref
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
+ #1 'addeprints := % 0=no eprints; 1=include eprints
+ #1 'adddoiresolver := % 0=no DOI resolver; 1=include it
+ #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
+ #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing
+ % the following are internal state variables, not config constants
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
+ "" 'openinlinelink := % ditto
+ "" 'closeinlinelink := % ditto
+}
+INTEGERS {
+ bracket.state
+ outside.brackets
+ open.brackets
+ within.brackets
+ close.brackets
+ close.first.block
+}
+% ...urlbst to here
FUNCTION {init.state.consts}
-{ #0 'before.all :=
+{ #0 'outside.brackets := % urlbst
+ #1 'open.brackets :=
+ #2 'within.brackets :=
+ #3 'close.brackets :=
+
+ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
-
- "" 'hrefprefix := % "ref:" is a good alternative
- "xxx.arxiv.org" 'xxxmirror :=
+ #0 'close.first.block :=
}
-FUNCTION {output.nonnull}
+STRINGS { s t }
+
+% urlbst
+FUNCTION {output.nonnull.original}
{ 's :=
output.state mid.sentence =
{ ", " * write$ }
{ output.state after.block =
{ add.period$ write$
% close the <dt> after the end of the first block
- % and set closelink false
- close.link
- { "</a></dt> <dd>" write$
- #0 'close.link := }
- 'skip$
- if$
- newline$
- " " write$
+ close.first.block
+ { "</a></dt>" write$ newline$ "<dd>" write$
+ #0 'close.first.block := }
+ { newline$ }
+ if$
}
{ output.state before.all =
'write$
@@ -115,6 +134,84 @@ FUNCTION {output.nonnull}
s
}
+% urlbst...
+% The following three functions are for handling inlinelink. They wrap
+% a block of text which is potentially output with write$ by multiple
+% other functions, so we don't know the content a priori.
+% They communicate between each other using the variables makeinlinelink
+% (which is true if a link should be made), and closeinlinelink (which holds
+% the string which should close any current link. They can be called
+% at any time, but start.inlinelink will be a no-op unless something has
+% previously set makeinlinelink true, and the two ...end.inlinelink functions
+% will only do their stuff if start.inlinelink has previously set
+% closeinlinelink to be non-empty.
+FUNCTION {possibly.setup.inlinelink}
+{ makeinlinelink
+ { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+ "</a>" 'closeinlinelink :=
+ #0 'makeinlinelink := }
+ 'skip$
+ if$ % makeinlinelink
+}
+FUNCTION {add.inlinelink}
+{ openinlinelink empty$
+ 'skip$
+ { openinlinelink swap$ * closeinlinelink *
+ "" 'openinlinelink :=
+ }
+ if$
+}
+FUNCTION {output.nonnull}
+{ % Save the thing we've been asked to output
+ 's :=
+ % If the bracket-state is close.brackets, then add a close-bracket to
+ % what is currently at the top of the stack, and set bracket.state
+ % to outside.brackets
+ bracket.state close.brackets =
+ { "]" *
+ outside.brackets 'bracket.state :=
+ }
+ 'skip$
+ if$
+ bracket.state outside.brackets =
+ { % We're outside all brackets -- this is the normal situation.
+ % Write out what's currently at the top of the stack, using the
+ % original output.nonnull function.
+ s
+ add.inlinelink
+ output.nonnull.original % invoke the original output.nonnull
+ }
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
+ % new text (in s) to the top of the stack, and move to the close-brackets
+ % state, ready for next time (unless inbrackets resets it). If we come
+ % into this branch, then output.state is carefully undisturbed.
+ bracket.state open.brackets =
+ { " [" * }
+ { ", " * } % bracket.state will be within.brackets
+ if$
+ s *
+ close.brackets 'bracket.state :=
+ }
+ if$
+}
+
+% Call this function just before adding something which should be presented in
+% brackets. bracket.state is handled specially within output.nonnull.
+FUNCTION {inbrackets}
+{ bracket.state close.brackets =
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
+ { open.brackets 'bracket.state := }
+ if$
+}
+
+FUNCTION {format.lastchecked}
+{ lastchecked empty$
+ { "" }
+ { inbrackets "cited " lastchecked * }
+ if$
+}
+% ...urlbst to here
+
FUNCTION {output}
{ duplicate$ empty$
'pop$
@@ -130,24 +227,22 @@ FUNCTION {output.check}
if$
}
-FUNCTION {output.bibitem}
+FUNCTION {output.bibitem.original}
{ newline$
- "<dt><a name=" quote$ * hrefprefix * write$
+ "<dt><a name='" write$
cite$ write$
- quote$ ">[" * label * "] " * write$
- % the <dt> is closed within output.nonnull, as long as close.link is true
- #1 'close.link :=
-% newline$
+ "'>[" cite$ * "] " * write$
+ % the <dt> is closed within output.nonnull, as long as close.first.block is true
+ #1 'close.first.block :=
+ newline$
""
before.all 'output.state :=
}
-FUNCTION {fin.entry}
-{ add.period$
+FUNCTION {fin.entry.original}
+{ add.period$ "</dd>" *
write$
newline$
- "</dd>" write$
- newline$
}
FUNCTION {new.block}
@@ -282,33 +377,10 @@ FUNCTION {format.editors}
if$
}
-%FUNCTION {format.title}
-%{ title empty$
-% { "" }
-% { title "t" change.case$ }
-% if$
-%}
-
-% format the title, and surround it with the URL if one is defined
FUNCTION {format.title}
{ title empty$
{ "" }
- { url empty$
- { title "t" change.case$ }
- { "<a href=" quote$ * url * quote$ * " >" *
- title "t" change.case$ * "</a>" * }
- if$
- }
- if$
-}
-
-% format the eprint number, and surround it with a URL pointing to
-% one of the XXX mirrors
-FUNCTION {format.eprint}
-{ eprint empty$
- { "" }
- { "eprint <a href=" quote$ * "http://" * xxxmirror * "/abs/" * eprint *
- quote$ * " >" * eprint * "</a>" * }
+ { title "t" change.case$ }
if$
}
@@ -318,7 +390,7 @@ FUNCTION {n.dashify}
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
- { "-" *
+ { "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
@@ -354,24 +426,8 @@ FUNCTION {format.date}
if$
}
-%FUNCTION {format.btitle}
-%{ title emphasize
-%}
-
FUNCTION {format.btitle}
-{ title empty$
- { booktitle empty$
- { "need title or booktitle in format.btitle" warning$ }
- { booktitle 's := }
- if$
- }
- { title 's := }
- if$
- url empty$
- { s emphasize }
- { "<a href=" quote$ * url * quote$ * " >" *
- s emphasize * "</a>" * }
- if$
+{ title emphasize
}
FUNCTION {tie.or.space.connect}
@@ -467,14 +523,10 @@ FUNCTION {format.pages}
}
FUNCTION {format.vol.num.pages}
-%{ volume field.or.null
-{ volume empty$ % allow this...
- { "" }
- { "<b>" volume * "</b>" * }
- if$
+{ volume field.or.null
number empty$
'skip$
- { " no. " number * *
+ { "(" number * ")" * *
volume empty$
{ "there's a number but no volume in " cite$ * warning$ }
'skip$
@@ -485,7 +537,7 @@ FUNCTION {format.vol.num.pages}
'skip$
{ duplicate$ empty$
{ pop$ format.pages }
- { " pp. " * pages n.dashify * }
+ { ":" * pages n.dashify * }
if$
}
if$
@@ -548,7 +600,6 @@ FUNCTION {format.tr.number}
if$
}
-% surround the journal name with a link pointing to the crossref
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
@@ -556,36 +607,28 @@ FUNCTION {format.article.crossref}
warning$
""
}
- { "In <em><a href=" quote$ * "#" * hrefprefix * crossref * quote$ * ">" *
- journal * "</a></em>" * }
-% { "In <em>" journal * "</em>" * }
+ { "In {\em " journal * "\/}" * }
if$
}
{ "In " key * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-% if there is indeed a crossref, make the reference a link
FUNCTION {format.crossref.editor}
-{ crossref empty$
- { editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et~al." * }
- { #2 <
+{ 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" =
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
- }
+ }
if$
- }
- if$
- }
- { "<a href=" quote$ * "#" * hrefprefix * crossref * quote$ * " >[" *
- crossref * "]</a>" *
- }
+ }
if$
}
@@ -615,6 +658,7 @@ FUNCTION {format.book.crossref}
}
{ format.crossref.editor * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
FUNCTION {format.incoll.inproc.crossref}
@@ -635,31 +679,169 @@ FUNCTION {format.incoll.inproc.crossref}
}
{ "In " format.crossref.editor * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-FUNCTION {format.lastchecked}
-{ lastchecked empty$
+% urlbst...
+% Functions for making hypertext links.
+FUNCTION {make.href}
+{
+ "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" *
+}
+
+% If inlinelinks is true, then format.url should be a no-op, since it's
+% (a) redundant, and (b) could end up as a link-within-a-link.
+FUNCTION {format.url}
+{ inlinelinks #1 = url empty$ or
{ "" }
- { ", cited " lastchecked * }
+ { urlintro "<code>" * url * "</code>" * }
if$
}
+FUNCTION {format.eprint}
+{ eprint empty$
+ { "" }
+ { eprintprefix eprint * eprinturl eprint * make.href }
+ if$
+}
+
+FUNCTION {format.doi}
+{ doi empty$
+ { "" }
+ { doiform #0 =
+ { doiprefix doi * doiurl doi * make.href }
+ { "DOI:{" doi * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pubmed}
+{ pubmed empty$
+ { "" }
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
+ if$
+}
+
+% Output a URL. We can't use the more normal idiom (something like
+% `format.url output'), because the `inbrackets' within
+% format.lastchecked applies to everything between calls to `output',
+% so that `format.url format.lastchecked * output' ends up with both
+% the URL and the lastchecked in brackets.
+FUNCTION {output.url}
+{ url empty$
+ 'skip$
+ { new.block
+ format.url output
+ format.lastchecked output
+ }
+ if$
+}
+
+FUNCTION {output.web.refs}
+{
+ new.block
+ output.url
+ addeprints eprint empty$ not and
+ { format.eprint output.nonnull }
+ 'skip$
+ if$
+ adddoiresolver doi empty$ not and
+ { format.doi output.nonnull }
+ 'skip$
+ if$
+ addpubmedresolver pubmed empty$ not and
+ { format.pubmed output.nonnull }
+ 'skip$
+ if$
+}
+
+% Wrapper for output.bibitem.original.
+% If the URL field is not empty, set makeinlinelink to be true,
+% so that an inline link will be started at the next opportunity
+FUNCTION {output.bibitem}
+{ outside.brackets 'bracket.state :=
+ output.bibitem.original
+ inlinelinks url empty$ not and
+ { #1 'makeinlinelink := }
+ { #0 'makeinlinelink := }
+ if$
+}
+
+% Wrapper for fin.entry.original
+FUNCTION {fin.entry}
+{ output.web.refs % urlbst
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
+ "[link]" output.nonnull }
+ 'skip$
+ if$
+ bracket.state close.brackets = % urlbst
+ { "]" * }
+ 'skip$
+ if$
+ fin.entry.original
+}
+
+% Webpage entry type.
+% Title and url fields required;
+% author, note, year, month, and lastchecked fields optional
+% See references
+% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
+% http://www.classroom.net/classroom/CitingNetResources.html
+% http://neal.ctstateu.edu/history/cite.html
+% http://www.cas.usf.edu/english/walker/mla.html
+% for citation formats for web pages.
+FUNCTION {webpage}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ 'skip$ % author and editor both optional
+ { format.editors output.nonnull }
+ if$
+ }
+ { editor empty$
+ { format.authors output.nonnull }
+ { "can't use both author and editor fields in " cite$ * warning$ }
+ if$
+ }
+ if$
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
+ format.title "title" output.check
+ inbrackets "online" output
+ new.block
+ year empty$
+ 'skip$
+ { format.date "year" output.check }
+ if$
+ % We don't need to output the URL details ('lastchecked' and 'url'),
+ % because fin.entry does that for us, using output.web.refs. The only
+ % reason we would want to put them here is if we were to decide that
+ % they should go in front of the rather miscellaneous information in 'note'.
+ new.block
+ note output
+ fin.entry
+}
+% ...urlbst to here
+
+
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
- format.vol.num.pages output
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
format.date "year" output.check
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
- format.eprint output
new.block
note output
fin.entry
@@ -677,6 +859,7 @@ FUNCTION {book}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -701,6 +884,7 @@ FUNCTION {booklet}
{ output.bibitem
format.authors output
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
howpublished address new.block.checkb
howpublished output
@@ -723,6 +907,7 @@ FUNCTION {inbook}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -749,6 +934,7 @@ FUNCTION {incollection}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -775,6 +961,7 @@ FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -787,11 +974,9 @@ FUNCTION {inproceedings}
organization output
publisher output
format.date "year" output.check
- format.eprint output
}
{ address output.nonnull
format.date "year" output.check
- format.eprint output
new.sentence
organization output
publisher output
@@ -822,6 +1007,7 @@ FUNCTION {manual}
{ format.authors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
author empty$
{ organization empty$
@@ -847,6 +1033,7 @@ FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
"Master's thesis" format.thesis.type output.nonnull
@@ -862,11 +1049,11 @@ FUNCTION {misc}
{ output.bibitem
format.authors output
title howpublished new.block.checkb
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title output
howpublished new.block.checka
howpublished output
format.date output
- format.eprint output
new.block
note output
fin.entry
@@ -877,6 +1064,7 @@ FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
new.block
"PhD thesis" format.thesis.type output.nonnull
@@ -895,6 +1083,7 @@ FUNCTION {proceedings}
{ format.editors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
format.bvolume output
format.number.series output
@@ -927,13 +1116,13 @@ FUNCTION {techreport}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
format.tr.number output.nonnull
institution "institution" output.check
address output
format.date "year" output.check
- format.eprint output
new.block
note output
fin.entry
@@ -943,31 +1132,11 @@ FUNCTION {unpublished}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
note "note" output.check
format.date output
- format.eprint output
- fin.entry
-}
-
-FUNCTION {webpage}
-{ output.bibitem
- author empty$
- { % Need to put something here -- if the title were put here,
- % we'd have a <a> inside a <a>
- key empty$
- { "" }
- { key }
- if$
- "author and key" output.check
- }
- { format.authors "author" output.check }
- if$
- new.block
- format.title "title" output.check
- new.block
- "[Online" format.lastchecked * "]" * output
fin.entry
}
@@ -1077,7 +1246,7 @@ FUNCTION {format.lab.names}
{ 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$ * }
@@ -1090,7 +1259,7 @@ FUNCTION {format.lab.names}
}
while$
numnames #4 >
- { "+" *
+ { "{\etalchar{+}}" *
#1 'et.al.char.used :=
}
'skip$
@@ -1284,7 +1453,7 @@ FUNCTION {editor.organization.sort}
FUNCTION {presort}
{ calc.label
- sort.label %EDIT2
+ sort.label
" "
*
type$ "book" =
@@ -1365,7 +1534,11 @@ ITERATE {forward.pass}
REVERSE {reverse.pass}
FUNCTION {begin.bib}
-{ preamble$ empty$
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
'skip$
{ preamble$ write$ newline$ }
if$
@@ -1374,6 +1547,7 @@ FUNCTION {begin.bib}
EXECUTE {begin.bib}
+EXECUTE {init.urlbst.variables}
EXECUTE {init.state.consts}
ITERATE {call.type$}
@@ -1384,4 +1558,3 @@ FUNCTION {end.bib}
}
EXECUTE {end.bib}
-
diff --git a/Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldate.bst b/Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldate.bst
index 2ad179066c4..129a7fc65b4 100644
--- a/Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldate.bst
+++ b/Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldate.bst
@@ -5,29 +5,24 @@
%%
%% alphahtml.bst
%%
-%% Part of bibhtml, version 1.3, released 2006 October 31
+%% Part of bibhtml, version 2.0, released 2009 August 9
+%% Hg node 4a5600417b09.
%% See <http://purl.org/nxg/dist/bibhtml>
%%
-%% Copyright 1999, 2005, 2006, Norman Gray <norman@astro.gla.ac.uk>
+%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk>
%%
-%% alphahtml.bst was originally derived from alpha.bst and plainhtml.bst by
-%% Franz G. Fischer, Franz.Fischer@lpr.e-technik.tu-muenchen.de
-%
-% $Id: alphahtml.bst.in,v 1.2 2006/10/31 15:45:57 norman Exp $
-%
-% Released under the terms of the GNU General Public Licence --
-% see the file LICENCE, included in the distribution.
-%
-% Version history:
-% 1.3 31 October 2006: added 'hrefprefix' variable; minor code tidups
-% 1.2 19 September 2005: added `webpage' entry type, and
-% `lastchecked' field.
-% 1.1 6 June 1999. Tidied documentation, clarified licence.
-% 1.0b1 Original version, based on Franz's adaptations, plus support
-% for eprint field (in article, techreport, misc, inproceedings,
-% unpublished)
-%
-% Modification of...
+%% This is a modification of a modification!
+%%
+%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/alpha.bst
+%%% ... by urlbst, version 0.6-4 (marked with "% urlbst")
+%%% See <http://purl.org/nxg/dist/urlbst>
+%%% Added webpage entry type, and url and lastchecked fields.
+%%% Added eprint support.
+%%% Added DOI support.
+%%% Added PUBMED support.
+%%% Added hyperref support.
+%%% Original headers follow...
+
% 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.
@@ -37,13 +32,6 @@
% 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.
-% ... to make it produce HTML, and add the url field
-%
-% this produces a file which is a <dl>...</dl>, which should be incorporated
-% into another html file somehow.
-% There will still be ~ and -- within the output file (it's too difficult
-% to get rid of them here). A post-processor should turn these
-% into either &nbsp; and &enspace; or ' ' and '-' as required.
ENTRY
{ address
@@ -68,46 +56,76 @@ ENTRY
type
volume
year
- url
- lastchecked
- eprint
-%EDIT1
- sortmonth
+ eprint % urlbst
+ doi % urlbst
+ pubmed % urlbst
+ url % urlbst
+ lastchecked % urlbst
}
{}
{ label extra.label sort.label }
-INTEGERS { output.state before.all mid.sentence after.sentence after.block
- close.link }
-
-STRINGS { s t xxxmirror hrefprefix }
-
-% Initialise state constants, and location of nearest XXX mirror (for eprints)
+INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform }
+
+STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst...
+INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver }
+% Following constants may be adjusted by hand, if desired
+FUNCTION {init.urlbst.variables}
+{
+ "Available from: " 'urlintro := % prefix before URL
+ "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
+ "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
+ "doi:" 'doiprefix := % text prefix printed before DOI ref
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
+ #1 'addeprints := % 0=no eprints; 1=include eprints
+ #1 'adddoiresolver := % 0=no DOI resolver; 1=include it
+ #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
+ #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing
+ % the following are internal state variables, not config constants
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
+ "" 'openinlinelink := % ditto
+ "" 'closeinlinelink := % ditto
+}
+INTEGERS {
+ bracket.state
+ outside.brackets
+ open.brackets
+ within.brackets
+ close.brackets
+ close.first.block
+}
+% ...urlbst to here
FUNCTION {init.state.consts}
-{ #0 'before.all :=
+{ #0 'outside.brackets := % urlbst
+ #1 'open.brackets :=
+ #2 'within.brackets :=
+ #3 'close.brackets :=
+
+ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
-
- "" 'hrefprefix := % "ref:" is a good alternative
- "xxx.arxiv.org" 'xxxmirror :=
+ #0 'close.first.block :=
}
-FUNCTION {output.nonnull}
+STRINGS { s t }
+
+% urlbst
+FUNCTION {output.nonnull.original}
{ 's :=
output.state mid.sentence =
{ ", " * write$ }
{ output.state after.block =
{ add.period$ write$
% close the <dt> after the end of the first block
- % and set closelink false
- close.link
- { "</a></dt> <dd>" write$
- #0 'close.link := }
- 'skip$
- if$
- newline$
- " " write$
+ close.first.block
+ { "</a></dt>" write$ newline$ "<dd>" write$
+ #0 'close.first.block := }
+ { newline$ }
+ if$
}
{ output.state before.all =
'write$
@@ -121,6 +139,84 @@ FUNCTION {output.nonnull}
s
}
+% urlbst...
+% The following three functions are for handling inlinelink. They wrap
+% a block of text which is potentially output with write$ by multiple
+% other functions, so we don't know the content a priori.
+% They communicate between each other using the variables makeinlinelink
+% (which is true if a link should be made), and closeinlinelink (which holds
+% the string which should close any current link. They can be called
+% at any time, but start.inlinelink will be a no-op unless something has
+% previously set makeinlinelink true, and the two ...end.inlinelink functions
+% will only do their stuff if start.inlinelink has previously set
+% closeinlinelink to be non-empty.
+FUNCTION {possibly.setup.inlinelink}
+{ makeinlinelink
+ { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+ "</a>" 'closeinlinelink :=
+ #0 'makeinlinelink := }
+ 'skip$
+ if$ % makeinlinelink
+}
+FUNCTION {add.inlinelink}
+{ openinlinelink empty$
+ 'skip$
+ { openinlinelink swap$ * closeinlinelink *
+ "" 'openinlinelink :=
+ }
+ if$
+}
+FUNCTION {output.nonnull}
+{ % Save the thing we've been asked to output
+ 's :=
+ % If the bracket-state is close.brackets, then add a close-bracket to
+ % what is currently at the top of the stack, and set bracket.state
+ % to outside.brackets
+ bracket.state close.brackets =
+ { "]" *
+ outside.brackets 'bracket.state :=
+ }
+ 'skip$
+ if$
+ bracket.state outside.brackets =
+ { % We're outside all brackets -- this is the normal situation.
+ % Write out what's currently at the top of the stack, using the
+ % original output.nonnull function.
+ s
+ add.inlinelink
+ output.nonnull.original % invoke the original output.nonnull
+ }
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
+ % new text (in s) to the top of the stack, and move to the close-brackets
+ % state, ready for next time (unless inbrackets resets it). If we come
+ % into this branch, then output.state is carefully undisturbed.
+ bracket.state open.brackets =
+ { " [" * }
+ { ", " * } % bracket.state will be within.brackets
+ if$
+ s *
+ close.brackets 'bracket.state :=
+ }
+ if$
+}
+
+% Call this function just before adding something which should be presented in
+% brackets. bracket.state is handled specially within output.nonnull.
+FUNCTION {inbrackets}
+{ bracket.state close.brackets =
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
+ { open.brackets 'bracket.state := }
+ if$
+}
+
+FUNCTION {format.lastchecked}
+{ lastchecked empty$
+ { "" }
+ { inbrackets "cited " lastchecked * }
+ if$
+}
+% ...urlbst to here
+
FUNCTION {output}
{ duplicate$ empty$
'pop$
@@ -136,24 +232,22 @@ FUNCTION {output.check}
if$
}
-FUNCTION {output.bibitem}
+FUNCTION {output.bibitem.original}
{ newline$
- "<dt><a name=" quote$ * hrefprefix * write$
+ "<dt><a name='" write$
cite$ write$
- quote$ ">[" * label * "] " * write$
- % the <dt> is closed within output.nonnull, as long as close.link is true
- #1 'close.link :=
-% newline$
+ "'>[" cite$ * "] " * write$
+ % the <dt> is closed within output.nonnull, as long as close.first.block is true
+ #1 'close.first.block :=
+ newline$
""
before.all 'output.state :=
}
-FUNCTION {fin.entry}
-{ add.period$
+FUNCTION {fin.entry.original}
+{ add.period$ "</dd>" *
write$
newline$
- "</dd>" write$
- newline$
}
FUNCTION {new.block}
@@ -288,33 +382,10 @@ FUNCTION {format.editors}
if$
}
-%FUNCTION {format.title}
-%{ title empty$
-% { "" }
-% { title "t" change.case$ }
-% if$
-%}
-
-% format the title, and surround it with the URL if one is defined
FUNCTION {format.title}
{ title empty$
{ "" }
- { url empty$
- { title "t" change.case$ }
- { "<a href=" quote$ * url * quote$ * " >" *
- title "t" change.case$ * "</a>" * }
- if$
- }
- if$
-}
-
-% format the eprint number, and surround it with a URL pointing to
-% one of the XXX mirrors
-FUNCTION {format.eprint}
-{ eprint empty$
- { "" }
- { "eprint <a href=" quote$ * "http://" * xxxmirror * "/abs/" * eprint *
- quote$ * " >" * eprint * "</a>" * }
+ { title "t" change.case$ }
if$
}
@@ -324,7 +395,7 @@ FUNCTION {n.dashify}
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
- { "-" *
+ { "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
@@ -360,24 +431,8 @@ FUNCTION {format.date}
if$
}
-%FUNCTION {format.btitle}
-%{ title emphasize
-%}
-
FUNCTION {format.btitle}
-{ title empty$
- { booktitle empty$
- { "need title or booktitle in format.btitle" warning$ }
- { booktitle 's := }
- if$
- }
- { title 's := }
- if$
- url empty$
- { s emphasize }
- { "<a href=" quote$ * url * quote$ * " >" *
- s emphasize * "</a>" * }
- if$
+{ title emphasize
}
FUNCTION {tie.or.space.connect}
@@ -473,14 +528,10 @@ FUNCTION {format.pages}
}
FUNCTION {format.vol.num.pages}
-%{ volume field.or.null
-{ volume empty$ % allow this...
- { "" }
- { "<b>" volume * "</b>" * }
- if$
+{ volume field.or.null
number empty$
'skip$
- { " no. " number * *
+ { "(" number * ")" * *
volume empty$
{ "there's a number but no volume in " cite$ * warning$ }
'skip$
@@ -491,7 +542,7 @@ FUNCTION {format.vol.num.pages}
'skip$
{ duplicate$ empty$
{ pop$ format.pages }
- { " pp. " * pages n.dashify * }
+ { ":" * pages n.dashify * }
if$
}
if$
@@ -554,7 +605,6 @@ FUNCTION {format.tr.number}
if$
}
-% surround the journal name with a link pointing to the crossref
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
@@ -562,36 +612,28 @@ FUNCTION {format.article.crossref}
warning$
""
}
- { "In <em><a href=" quote$ * "#" * hrefprefix * crossref * quote$ * ">" *
- journal * "</a></em>" * }
-% { "In <em>" journal * "</em>" * }
+ { "In {\em " journal * "\/}" * }
if$
}
{ "In " key * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-% if there is indeed a crossref, make the reference a link
FUNCTION {format.crossref.editor}
-{ crossref empty$
- { editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et~al." * }
- { #2 <
+{ 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" =
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
- }
+ }
if$
- }
- if$
- }
- { "<a href=" quote$ * "#" * hrefprefix * crossref * quote$ * " >[" *
- crossref * "]</a>" *
- }
+ }
if$
}
@@ -621,6 +663,7 @@ FUNCTION {format.book.crossref}
}
{ format.crossref.editor * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
FUNCTION {format.incoll.inproc.crossref}
@@ -641,31 +684,169 @@ FUNCTION {format.incoll.inproc.crossref}
}
{ "In " format.crossref.editor * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-FUNCTION {format.lastchecked}
-{ lastchecked empty$
+% urlbst...
+% Functions for making hypertext links.
+FUNCTION {make.href}
+{
+ "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" *
+}
+
+% If inlinelinks is true, then format.url should be a no-op, since it's
+% (a) redundant, and (b) could end up as a link-within-a-link.
+FUNCTION {format.url}
+{ inlinelinks #1 = url empty$ or
+ { "" }
+ { urlintro "<code>" * url * "</code>" * }
+ if$
+}
+
+FUNCTION {format.eprint}
+{ eprint empty$
+ { "" }
+ { eprintprefix eprint * eprinturl eprint * make.href }
+ if$
+}
+
+FUNCTION {format.doi}
+{ doi empty$
{ "" }
- { ", cited " lastchecked * }
+ { doiform #0 =
+ { doiprefix doi * doiurl doi * make.href }
+ { "DOI:{" doi * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pubmed}
+{ pubmed empty$
+ { "" }
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
+ if$
+}
+
+% Output a URL. We can't use the more normal idiom (something like
+% `format.url output'), because the `inbrackets' within
+% format.lastchecked applies to everything between calls to `output',
+% so that `format.url format.lastchecked * output' ends up with both
+% the URL and the lastchecked in brackets.
+FUNCTION {output.url}
+{ url empty$
+ 'skip$
+ { new.block
+ format.url output
+ format.lastchecked output
+ }
+ if$
+}
+
+FUNCTION {output.web.refs}
+{
+ new.block
+ output.url
+ addeprints eprint empty$ not and
+ { format.eprint output.nonnull }
+ 'skip$
+ if$
+ adddoiresolver doi empty$ not and
+ { format.doi output.nonnull }
+ 'skip$
+ if$
+ addpubmedresolver pubmed empty$ not and
+ { format.pubmed output.nonnull }
+ 'skip$
+ if$
+}
+
+% Wrapper for output.bibitem.original.
+% If the URL field is not empty, set makeinlinelink to be true,
+% so that an inline link will be started at the next opportunity
+FUNCTION {output.bibitem}
+{ outside.brackets 'bracket.state :=
+ output.bibitem.original
+ inlinelinks url empty$ not and
+ { #1 'makeinlinelink := }
+ { #0 'makeinlinelink := }
+ if$
+}
+
+% Wrapper for fin.entry.original
+FUNCTION {fin.entry}
+{ output.web.refs % urlbst
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
+ "[link]" output.nonnull }
+ 'skip$
+ if$
+ bracket.state close.brackets = % urlbst
+ { "]" * }
+ 'skip$
+ if$
+ fin.entry.original
+}
+
+% Webpage entry type.
+% Title and url fields required;
+% author, note, year, month, and lastchecked fields optional
+% See references
+% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
+% http://www.classroom.net/classroom/CitingNetResources.html
+% http://neal.ctstateu.edu/history/cite.html
+% http://www.cas.usf.edu/english/walker/mla.html
+% for citation formats for web pages.
+FUNCTION {webpage}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ 'skip$ % author and editor both optional
+ { format.editors output.nonnull }
+ if$
+ }
+ { editor empty$
+ { format.authors output.nonnull }
+ { "can't use both author and editor fields in " cite$ * warning$ }
+ if$
+ }
+ if$
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
+ format.title "title" output.check
+ inbrackets "online" output
+ new.block
+ year empty$
+ 'skip$
+ { format.date "year" output.check }
if$
+ % We don't need to output the URL details ('lastchecked' and 'url'),
+ % because fin.entry does that for us, using output.web.refs. The only
+ % reason we would want to put them here is if we were to decide that
+ % they should go in front of the rather miscellaneous information in 'note'.
+ new.block
+ note output
+ fin.entry
}
+% ...urlbst to here
+
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
- format.vol.num.pages output
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
format.date "year" output.check
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
- format.eprint output
new.block
note output
fin.entry
@@ -683,6 +864,7 @@ FUNCTION {book}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -707,6 +889,7 @@ FUNCTION {booklet}
{ output.bibitem
format.authors output
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
howpublished address new.block.checkb
howpublished output
@@ -729,6 +912,7 @@ FUNCTION {inbook}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -755,6 +939,7 @@ FUNCTION {incollection}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -781,6 +966,7 @@ FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -793,11 +979,9 @@ FUNCTION {inproceedings}
organization output
publisher output
format.date "year" output.check
- format.eprint output
}
{ address output.nonnull
format.date "year" output.check
- format.eprint output
new.sentence
organization output
publisher output
@@ -828,6 +1012,7 @@ FUNCTION {manual}
{ format.authors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
author empty$
{ organization empty$
@@ -853,6 +1038,7 @@ FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
"Master's thesis" format.thesis.type output.nonnull
@@ -868,11 +1054,11 @@ FUNCTION {misc}
{ output.bibitem
format.authors output
title howpublished new.block.checkb
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title output
howpublished new.block.checka
howpublished output
format.date output
- format.eprint output
new.block
note output
fin.entry
@@ -883,6 +1069,7 @@ FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
new.block
"PhD thesis" format.thesis.type output.nonnull
@@ -901,6 +1088,7 @@ FUNCTION {proceedings}
{ format.editors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
format.bvolume output
format.number.series output
@@ -933,13 +1121,13 @@ FUNCTION {techreport}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
format.tr.number output.nonnull
institution "institution" output.check
address output
format.date "year" output.check
- format.eprint output
new.block
note output
fin.entry
@@ -949,31 +1137,11 @@ FUNCTION {unpublished}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
note "note" output.check
format.date output
- format.eprint output
- fin.entry
-}
-
-FUNCTION {webpage}
-{ output.bibitem
- author empty$
- { % Need to put something here -- if the title were put here,
- % we'd have a <a> inside a <a>
- key empty$
- { "" }
- { key }
- if$
- "author and key" output.check
- }
- { format.authors "author" output.check }
- if$
- new.block
- format.title "title" output.check
- new.block
- "[Online" format.lastchecked * "]" * output
fin.entry
}
@@ -1083,7 +1251,7 @@ FUNCTION {format.lab.names}
{ 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$ * }
@@ -1096,7 +1264,7 @@ FUNCTION {format.lab.names}
}
while$
numnames #4 >
- { "+" *
+ { "{\etalchar{+}}" *
#1 'et.al.char.used :=
}
'skip$
@@ -1290,11 +1458,7 @@ FUNCTION {editor.organization.sort}
FUNCTION {presort}
{ calc.label
- year field.or.null sortify
- sortmonth field.or.null sortify
- *
sort.label
- *
" "
*
type$ "book" =
@@ -1375,7 +1539,11 @@ ITERATE {forward.pass}
REVERSE {reverse.pass}
FUNCTION {begin.bib}
-{ preamble$ empty$
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
'skip$
{ preamble$ write$ newline$ }
if$
@@ -1384,6 +1552,7 @@ FUNCTION {begin.bib}
EXECUTE {begin.bib}
+EXECUTE {init.urlbst.variables}
EXECUTE {init.state.consts}
ITERATE {call.type$}
@@ -1394,4 +1563,3 @@ FUNCTION {end.bib}
}
EXECUTE {end.bib}
-
diff --git a/Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldater.bst b/Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldater.bst
index f8991ea1da6..76c7aab3244 100644
--- a/Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldater.bst
+++ b/Master/texmf-dist/bibtex/bst/bibhtml/alphahtmldater.bst
@@ -5,29 +5,24 @@
%%
%% alphahtml.bst
%%
-%% Part of bibhtml, version 1.3, released 2006 October 31
+%% Part of bibhtml, version 2.0, released 2009 August 9
+%% Hg node 4a5600417b09.
%% See <http://purl.org/nxg/dist/bibhtml>
%%
-%% Copyright 1999, 2005, 2006, Norman Gray <norman@astro.gla.ac.uk>
+%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk>
%%
-%% alphahtml.bst was originally derived from alpha.bst and plainhtml.bst by
-%% Franz G. Fischer, Franz.Fischer@lpr.e-technik.tu-muenchen.de
-%
-% $Id: alphahtml.bst.in,v 1.2 2006/10/31 15:45:57 norman Exp $
-%
-% Released under the terms of the GNU General Public Licence --
-% see the file LICENCE, included in the distribution.
-%
-% Version history:
-% 1.3 31 October 2006: added 'hrefprefix' variable; minor code tidups
-% 1.2 19 September 2005: added `webpage' entry type, and
-% `lastchecked' field.
-% 1.1 6 June 1999. Tidied documentation, clarified licence.
-% 1.0b1 Original version, based on Franz's adaptations, plus support
-% for eprint field (in article, techreport, misc, inproceedings,
-% unpublished)
-%
-% Modification of...
+%% This is a modification of a modification!
+%%
+%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/alpha.bst
+%%% ... by urlbst, version 0.6-4 (marked with "% urlbst")
+%%% See <http://purl.org/nxg/dist/urlbst>
+%%% Added webpage entry type, and url and lastchecked fields.
+%%% Added eprint support.
+%%% Added DOI support.
+%%% Added PUBMED support.
+%%% Added hyperref support.
+%%% Original headers follow...
+
% 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.
@@ -37,13 +32,6 @@
% 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.
-% ... to make it produce HTML, and add the url field
-%
-% this produces a file which is a <dl>...</dl>, which should be incorporated
-% into another html file somehow.
-% There will still be ~ and -- within the output file (it's too difficult
-% to get rid of them here). A post-processor should turn these
-% into either &nbsp; and &enspace; or ' ' and '-' as required.
ENTRY
{ address
@@ -68,46 +56,76 @@ ENTRY
type
volume
year
- url
- lastchecked
- eprint
-%EDIT1
- sortmonth
+ eprint % urlbst
+ doi % urlbst
+ pubmed % urlbst
+ url % urlbst
+ lastchecked % urlbst
}
{}
{ label extra.label sort.label }
-INTEGERS { output.state before.all mid.sentence after.sentence after.block
- close.link }
-
-STRINGS { s t xxxmirror hrefprefix }
-
-% Initialise state constants, and location of nearest XXX mirror (for eprints)
+INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform }
+
+STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst...
+INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver }
+% Following constants may be adjusted by hand, if desired
+FUNCTION {init.urlbst.variables}
+{
+ "Available from: " 'urlintro := % prefix before URL
+ "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
+ "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
+ "doi:" 'doiprefix := % text prefix printed before DOI ref
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
+ #1 'addeprints := % 0=no eprints; 1=include eprints
+ #1 'adddoiresolver := % 0=no DOI resolver; 1=include it
+ #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
+ #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing
+ % the following are internal state variables, not config constants
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
+ "" 'openinlinelink := % ditto
+ "" 'closeinlinelink := % ditto
+}
+INTEGERS {
+ bracket.state
+ outside.brackets
+ open.brackets
+ within.brackets
+ close.brackets
+ close.first.block
+}
+% ...urlbst to here
FUNCTION {init.state.consts}
-{ #0 'before.all :=
+{ #0 'outside.brackets := % urlbst
+ #1 'open.brackets :=
+ #2 'within.brackets :=
+ #3 'close.brackets :=
+
+ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
-
- "" 'hrefprefix := % "ref:" is a good alternative
- "xxx.arxiv.org" 'xxxmirror :=
+ #0 'close.first.block :=
}
-FUNCTION {output.nonnull}
+STRINGS { s t }
+
+% urlbst
+FUNCTION {output.nonnull.original}
{ 's :=
output.state mid.sentence =
{ ", " * write$ }
{ output.state after.block =
{ add.period$ write$
% close the <dt> after the end of the first block
- % and set closelink false
- close.link
- { "</a></dt> <dd>" write$
- #0 'close.link := }
- 'skip$
- if$
- newline$
- " " write$
+ close.first.block
+ { "</a></dt>" write$ newline$ "<dd>" write$
+ #0 'close.first.block := }
+ { newline$ }
+ if$
}
{ output.state before.all =
'write$
@@ -121,6 +139,84 @@ FUNCTION {output.nonnull}
s
}
+% urlbst...
+% The following three functions are for handling inlinelink. They wrap
+% a block of text which is potentially output with write$ by multiple
+% other functions, so we don't know the content a priori.
+% They communicate between each other using the variables makeinlinelink
+% (which is true if a link should be made), and closeinlinelink (which holds
+% the string which should close any current link. They can be called
+% at any time, but start.inlinelink will be a no-op unless something has
+% previously set makeinlinelink true, and the two ...end.inlinelink functions
+% will only do their stuff if start.inlinelink has previously set
+% closeinlinelink to be non-empty.
+FUNCTION {possibly.setup.inlinelink}
+{ makeinlinelink
+ { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+ "</a>" 'closeinlinelink :=
+ #0 'makeinlinelink := }
+ 'skip$
+ if$ % makeinlinelink
+}
+FUNCTION {add.inlinelink}
+{ openinlinelink empty$
+ 'skip$
+ { openinlinelink swap$ * closeinlinelink *
+ "" 'openinlinelink :=
+ }
+ if$
+}
+FUNCTION {output.nonnull}
+{ % Save the thing we've been asked to output
+ 's :=
+ % If the bracket-state is close.brackets, then add a close-bracket to
+ % what is currently at the top of the stack, and set bracket.state
+ % to outside.brackets
+ bracket.state close.brackets =
+ { "]" *
+ outside.brackets 'bracket.state :=
+ }
+ 'skip$
+ if$
+ bracket.state outside.brackets =
+ { % We're outside all brackets -- this is the normal situation.
+ % Write out what's currently at the top of the stack, using the
+ % original output.nonnull function.
+ s
+ add.inlinelink
+ output.nonnull.original % invoke the original output.nonnull
+ }
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
+ % new text (in s) to the top of the stack, and move to the close-brackets
+ % state, ready for next time (unless inbrackets resets it). If we come
+ % into this branch, then output.state is carefully undisturbed.
+ bracket.state open.brackets =
+ { " [" * }
+ { ", " * } % bracket.state will be within.brackets
+ if$
+ s *
+ close.brackets 'bracket.state :=
+ }
+ if$
+}
+
+% Call this function just before adding something which should be presented in
+% brackets. bracket.state is handled specially within output.nonnull.
+FUNCTION {inbrackets}
+{ bracket.state close.brackets =
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
+ { open.brackets 'bracket.state := }
+ if$
+}
+
+FUNCTION {format.lastchecked}
+{ lastchecked empty$
+ { "" }
+ { inbrackets "cited " lastchecked * }
+ if$
+}
+% ...urlbst to here
+
FUNCTION {output}
{ duplicate$ empty$
'pop$
@@ -136,24 +232,22 @@ FUNCTION {output.check}
if$
}
-FUNCTION {output.bibitem}
+FUNCTION {output.bibitem.original}
{ newline$
- "<dt><a name=" quote$ * hrefprefix * write$
+ "<dt><a name='" write$
cite$ write$
- quote$ ">[" * label * "] " * write$
- % the <dt> is closed within output.nonnull, as long as close.link is true
- #1 'close.link :=
-% newline$
+ "'>[" cite$ * "] " * write$
+ % the <dt> is closed within output.nonnull, as long as close.first.block is true
+ #1 'close.first.block :=
+ newline$
""
before.all 'output.state :=
}
-FUNCTION {fin.entry}
-{ add.period$
+FUNCTION {fin.entry.original}
+{ add.period$ "</dd>" *
write$
newline$
- "</dd>" write$
- newline$
}
FUNCTION {new.block}
@@ -288,33 +382,10 @@ FUNCTION {format.editors}
if$
}
-%FUNCTION {format.title}
-%{ title empty$
-% { "" }
-% { title "t" change.case$ }
-% if$
-%}
-
-% format the title, and surround it with the URL if one is defined
FUNCTION {format.title}
{ title empty$
{ "" }
- { url empty$
- { title "t" change.case$ }
- { "<a href=" quote$ * url * quote$ * " >" *
- title "t" change.case$ * "</a>" * }
- if$
- }
- if$
-}
-
-% format the eprint number, and surround it with a URL pointing to
-% one of the XXX mirrors
-FUNCTION {format.eprint}
-{ eprint empty$
- { "" }
- { "eprint <a href=" quote$ * "http://" * xxxmirror * "/abs/" * eprint *
- quote$ * " >" * eprint * "</a>" * }
+ { title "t" change.case$ }
if$
}
@@ -324,7 +395,7 @@ FUNCTION {n.dashify}
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
- { "-" *
+ { "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
@@ -360,24 +431,8 @@ FUNCTION {format.date}
if$
}
-%FUNCTION {format.btitle}
-%{ title emphasize
-%}
-
FUNCTION {format.btitle}
-{ title empty$
- { booktitle empty$
- { "need title or booktitle in format.btitle" warning$ }
- { booktitle 's := }
- if$
- }
- { title 's := }
- if$
- url empty$
- { s emphasize }
- { "<a href=" quote$ * url * quote$ * " >" *
- s emphasize * "</a>" * }
- if$
+{ title emphasize
}
FUNCTION {tie.or.space.connect}
@@ -473,14 +528,10 @@ FUNCTION {format.pages}
}
FUNCTION {format.vol.num.pages}
-%{ volume field.or.null
-{ volume empty$ % allow this...
- { "" }
- { "<b>" volume * "</b>" * }
- if$
+{ volume field.or.null
number empty$
'skip$
- { " no. " number * *
+ { "(" number * ")" * *
volume empty$
{ "there's a number but no volume in " cite$ * warning$ }
'skip$
@@ -491,7 +542,7 @@ FUNCTION {format.vol.num.pages}
'skip$
{ duplicate$ empty$
{ pop$ format.pages }
- { " pp. " * pages n.dashify * }
+ { ":" * pages n.dashify * }
if$
}
if$
@@ -554,7 +605,6 @@ FUNCTION {format.tr.number}
if$
}
-% surround the journal name with a link pointing to the crossref
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
@@ -562,36 +612,28 @@ FUNCTION {format.article.crossref}
warning$
""
}
- { "In <em><a href=" quote$ * "#" * hrefprefix * crossref * quote$ * ">" *
- journal * "</a></em>" * }
-% { "In <em>" journal * "</em>" * }
+ { "In {\em " journal * "\/}" * }
if$
}
{ "In " key * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-% if there is indeed a crossref, make the reference a link
FUNCTION {format.crossref.editor}
-{ crossref empty$
- { editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et~al." * }
- { #2 <
+{ 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" =
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
- }
+ }
if$
- }
- if$
- }
- { "<a href=" quote$ * "#" * hrefprefix * crossref * quote$ * " >[" *
- crossref * "]</a>" *
- }
+ }
if$
}
@@ -621,6 +663,7 @@ FUNCTION {format.book.crossref}
}
{ format.crossref.editor * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
FUNCTION {format.incoll.inproc.crossref}
@@ -641,31 +684,169 @@ FUNCTION {format.incoll.inproc.crossref}
}
{ "In " format.crossref.editor * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-FUNCTION {format.lastchecked}
-{ lastchecked empty$
+% urlbst...
+% Functions for making hypertext links.
+FUNCTION {make.href}
+{
+ "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" *
+}
+
+% If inlinelinks is true, then format.url should be a no-op, since it's
+% (a) redundant, and (b) could end up as a link-within-a-link.
+FUNCTION {format.url}
+{ inlinelinks #1 = url empty$ or
+ { "" }
+ { urlintro "<code>" * url * "</code>" * }
+ if$
+}
+
+FUNCTION {format.eprint}
+{ eprint empty$
+ { "" }
+ { eprintprefix eprint * eprinturl eprint * make.href }
+ if$
+}
+
+FUNCTION {format.doi}
+{ doi empty$
{ "" }
- { ", cited " lastchecked * }
+ { doiform #0 =
+ { doiprefix doi * doiurl doi * make.href }
+ { "DOI:{" doi * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pubmed}
+{ pubmed empty$
+ { "" }
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
+ if$
+}
+
+% Output a URL. We can't use the more normal idiom (something like
+% `format.url output'), because the `inbrackets' within
+% format.lastchecked applies to everything between calls to `output',
+% so that `format.url format.lastchecked * output' ends up with both
+% the URL and the lastchecked in brackets.
+FUNCTION {output.url}
+{ url empty$
+ 'skip$
+ { new.block
+ format.url output
+ format.lastchecked output
+ }
+ if$
+}
+
+FUNCTION {output.web.refs}
+{
+ new.block
+ output.url
+ addeprints eprint empty$ not and
+ { format.eprint output.nonnull }
+ 'skip$
+ if$
+ adddoiresolver doi empty$ not and
+ { format.doi output.nonnull }
+ 'skip$
+ if$
+ addpubmedresolver pubmed empty$ not and
+ { format.pubmed output.nonnull }
+ 'skip$
+ if$
+}
+
+% Wrapper for output.bibitem.original.
+% If the URL field is not empty, set makeinlinelink to be true,
+% so that an inline link will be started at the next opportunity
+FUNCTION {output.bibitem}
+{ outside.brackets 'bracket.state :=
+ output.bibitem.original
+ inlinelinks url empty$ not and
+ { #1 'makeinlinelink := }
+ { #0 'makeinlinelink := }
+ if$
+}
+
+% Wrapper for fin.entry.original
+FUNCTION {fin.entry}
+{ output.web.refs % urlbst
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
+ "[link]" output.nonnull }
+ 'skip$
+ if$
+ bracket.state close.brackets = % urlbst
+ { "]" * }
+ 'skip$
+ if$
+ fin.entry.original
+}
+
+% Webpage entry type.
+% Title and url fields required;
+% author, note, year, month, and lastchecked fields optional
+% See references
+% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
+% http://www.classroom.net/classroom/CitingNetResources.html
+% http://neal.ctstateu.edu/history/cite.html
+% http://www.cas.usf.edu/english/walker/mla.html
+% for citation formats for web pages.
+FUNCTION {webpage}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ 'skip$ % author and editor both optional
+ { format.editors output.nonnull }
+ if$
+ }
+ { editor empty$
+ { format.authors output.nonnull }
+ { "can't use both author and editor fields in " cite$ * warning$ }
+ if$
+ }
+ if$
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
+ format.title "title" output.check
+ inbrackets "online" output
+ new.block
+ year empty$
+ 'skip$
+ { format.date "year" output.check }
if$
+ % We don't need to output the URL details ('lastchecked' and 'url'),
+ % because fin.entry does that for us, using output.web.refs. The only
+ % reason we would want to put them here is if we were to decide that
+ % they should go in front of the rather miscellaneous information in 'note'.
+ new.block
+ note output
+ fin.entry
}
+% ...urlbst to here
+
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
- format.vol.num.pages output
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
format.date "year" output.check
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
- format.eprint output
new.block
note output
fin.entry
@@ -683,6 +864,7 @@ FUNCTION {book}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -707,6 +889,7 @@ FUNCTION {booklet}
{ output.bibitem
format.authors output
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
howpublished address new.block.checkb
howpublished output
@@ -729,6 +912,7 @@ FUNCTION {inbook}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -755,6 +939,7 @@ FUNCTION {incollection}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -781,6 +966,7 @@ FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -793,11 +979,9 @@ FUNCTION {inproceedings}
organization output
publisher output
format.date "year" output.check
- format.eprint output
}
{ address output.nonnull
format.date "year" output.check
- format.eprint output
new.sentence
organization output
publisher output
@@ -828,6 +1012,7 @@ FUNCTION {manual}
{ format.authors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
author empty$
{ organization empty$
@@ -853,6 +1038,7 @@ FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
"Master's thesis" format.thesis.type output.nonnull
@@ -868,11 +1054,11 @@ FUNCTION {misc}
{ output.bibitem
format.authors output
title howpublished new.block.checkb
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title output
howpublished new.block.checka
howpublished output
format.date output
- format.eprint output
new.block
note output
fin.entry
@@ -883,6 +1069,7 @@ FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
new.block
"PhD thesis" format.thesis.type output.nonnull
@@ -901,6 +1088,7 @@ FUNCTION {proceedings}
{ format.editors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
format.bvolume output
format.number.series output
@@ -933,13 +1121,13 @@ FUNCTION {techreport}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
format.tr.number output.nonnull
institution "institution" output.check
address output
format.date "year" output.check
- format.eprint output
new.block
note output
fin.entry
@@ -949,31 +1137,11 @@ FUNCTION {unpublished}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
note "note" output.check
format.date output
- format.eprint output
- fin.entry
-}
-
-FUNCTION {webpage}
-{ output.bibitem
- author empty$
- { % Need to put something here -- if the title were put here,
- % we'd have a <a> inside a <a>
- key empty$
- { "" }
- { key }
- if$
- "author and key" output.check
- }
- { format.authors "author" output.check }
- if$
- new.block
- format.title "title" output.check
- new.block
- "[Online" format.lastchecked * "]" * output
fin.entry
}
@@ -1083,7 +1251,7 @@ FUNCTION {format.lab.names}
{ 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$ * }
@@ -1096,7 +1264,7 @@ FUNCTION {format.lab.names}
}
while$
numnames #4 >
- { "+" *
+ { "{\etalchar{+}}" *
#1 'et.al.char.used :=
}
'skip$
@@ -1290,11 +1458,7 @@ FUNCTION {editor.organization.sort}
FUNCTION {presort}
{ calc.label
- year field.or.null sortify
- sortmonth field.or.null sortify
- *
sort.label
- *
" "
*
type$ "book" =
@@ -1375,7 +1539,11 @@ ITERATE {forward.pass}
REVERSE {reverse.pass}
FUNCTION {begin.bib}
-{ preamble$ empty$
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
'skip$
{ preamble$ write$ newline$ }
if$
@@ -1384,6 +1552,7 @@ FUNCTION {begin.bib}
EXECUTE {begin.bib}
+EXECUTE {init.urlbst.variables}
EXECUTE {init.state.consts}
REVERSE {call.type$}
@@ -1394,4 +1563,3 @@ FUNCTION {end.bib}
}
EXECUTE {end.bib}
-
diff --git a/Master/texmf-dist/bibtex/bst/bibhtml/plainhtml.bst b/Master/texmf-dist/bibtex/bst/bibhtml/plainhtml.bst
index 28ea144bf77..b9e900faacc 100644
--- a/Master/texmf-dist/bibtex/bst/bibhtml/plainhtml.bst
+++ b/Master/texmf-dist/bibtex/bst/bibhtml/plainhtml.bst
@@ -1,26 +1,23 @@
%% plainhtml.bst
%%
-%% Part of bibhtml, version 1.3, released 2006 October 31
+%% Part of bibhtml, version 2.0, released 2009 August 9
+%% Hg node 4a5600417b09.
%% See <http://purl.org/nxg/dist/bibhtml>
%%
-%% Copyright 1999, 2005, 2006, Norman Gray <norman@astro.gla.ac.uk>
-%
-% $Id: plainhtml.bst.in,v 1.2 2006/10/31 15:45:57 norman Exp $
-%
-% Released under the terms of the GNU General Public Licence --
-% see the file LICENCE, included in the distribution.
-%
-% Version history:
-% 1.3 31 October 2006: added 'hrefprefix' variable; minor code tidups
-% 1.2 19 September 2005: added `webpage' entry type, and
-% `lastchecked' field.
-% 1.1 6 June 1999. Tidied documenation, clarified licence.
-% 1.0b3 April 1998, added support for eprint field
-% (in article, techreport, misc, inproceedings, unpublished)
-% 1.0b2 December 1996, added the above exhortation!
-% 1.0b1 Original version
-%
-% Modification of...
+%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk>
+%%
+%% This is a modification of a modification!
+%%
+%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/plain.bst
+%%% ... by urlbst, version 0.6-4 (marked with "% urlbst")
+%%% See <http://purl.org/nxg/dist/urlbst>
+%%% Added webpage entry type, and url and lastchecked fields.
+%%% Added eprint support.
+%%% Added DOI support.
+%%% Added PUBMED support.
+%%% Added hyperref support.
+%%% Original headers follow...
+
% BibTeX standard bibliography style `plain'
% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
% Copyright (C) 1985, all rights reserved.
@@ -30,13 +27,6 @@
% 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.
-% ... to make it produce HTML, and add the url field
-%
-% this produces a file which is a <dl>...</dl>, which should be incorporated
-% into another html file somehow.
-% There will still be ~ and -- within the output file (it's too difficult
-% to get rid of them here). A post-processor should turn these
-% into either &nbsp; and &enspace; or ' ' and '-' as required.
ENTRY
{ address
@@ -61,46 +51,77 @@ ENTRY
type
volume
year
- url
- lastchecked
- eprint
-%EDIT1
+ eprint % urlbst
+ doi % urlbst
+ pubmed % urlbst
+ url % urlbst
+ lastchecked % urlbst
}
{}
{ label }
-INTEGERS { output.state before.all mid.sentence after.sentence after.block
- close.link }
-
-STRINGS { s t xxxmirror hrefprefix }
-
-% Initialise state constants, and location of nearest XXX mirror (for eprints)
+INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform }
+
+STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst...
+INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver }
+% Following constants may be adjusted by hand, if desired
+FUNCTION {init.urlbst.variables}
+{
+ "Available from: " 'urlintro := % prefix before URL
+ "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
+ "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
+ "doi:" 'doiprefix := % text prefix printed before DOI ref
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
+ #1 'addeprints := % 0=no eprints; 1=include eprints
+ #1 'adddoiresolver := % 0=no DOI resolver; 1=include it
+ #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
+ #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing
+ % the following are internal state variables, not config constants
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
+ "" 'openinlinelink := % ditto
+ "" 'closeinlinelink := % ditto
+}
+INTEGERS {
+ bracket.state
+ outside.brackets
+ open.brackets
+ within.brackets
+ close.brackets
+ close.first.block
+}
+% ...urlbst to here
FUNCTION {init.state.consts}
-{ #0 'before.all :=
+{ #0 'outside.brackets := % urlbst
+ #1 'open.brackets :=
+ #2 'within.brackets :=
+ #3 'close.brackets :=
+
+ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
- #0 'close.link :=
-
- "" 'hrefprefix := % "ref:" is a good alternative
- "xxx.arxiv.org" 'xxxmirror :=
+ #0 'close.first.block :=
}
-FUNCTION {output.nonnull}
+STRINGS { s t }
+
+% urlbst
+FUNCTION {output.nonnull.original}
{ 's :=
output.state mid.sentence =
{ ", " * write$ }
{ output.state after.block =
{ add.period$ write$
% close the <dt> after the end of the first block
- % and set closelink false
- close.link
- { "</a></dt> <dd>" write$
- #0 'close.link := }
- 'skip$
- if$
- newline$
- " " write$
+ close.first.block
+ { "</a></dt>" write$ newline$ "<dd>" write$
+ #0 'close.first.block := }
+ { newline$ }
+ if$
+ %"\newblock " write$
}
{ output.state before.all =
'write$
@@ -114,6 +135,84 @@ FUNCTION {output.nonnull}
s
}
+% urlbst...
+% The following three functions are for handling inlinelink. They wrap
+% a block of text which is potentially output with write$ by multiple
+% other functions, so we don't know the content a priori.
+% They communicate between each other using the variables makeinlinelink
+% (which is true if a link should be made), and closeinlinelink (which holds
+% the string which should close any current link. They can be called
+% at any time, but start.inlinelink will be a no-op unless something has
+% previously set makeinlinelink true, and the two ...end.inlinelink functions
+% will only do their stuff if start.inlinelink has previously set
+% closeinlinelink to be non-empty.
+FUNCTION {possibly.setup.inlinelink}
+{ makeinlinelink
+ { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+ "</a>" 'closeinlinelink :=
+ #0 'makeinlinelink := }
+ 'skip$
+ if$ % makeinlinelink
+}
+FUNCTION {add.inlinelink}
+{ openinlinelink empty$
+ 'skip$
+ { openinlinelink swap$ * closeinlinelink *
+ "" 'openinlinelink :=
+ }
+ if$
+}
+FUNCTION {output.nonnull}
+{ % Save the thing we've been asked to output
+ 's :=
+ % If the bracket-state is close.brackets, then add a close-bracket to
+ % what is currently at the top of the stack, and set bracket.state
+ % to outside.brackets
+ bracket.state close.brackets =
+ { "]" *
+ outside.brackets 'bracket.state :=
+ }
+ 'skip$
+ if$
+ bracket.state outside.brackets =
+ { % We're outside all brackets -- this is the normal situation.
+ % Write out what's currently at the top of the stack, using the
+ % original output.nonnull function.
+ s
+ add.inlinelink
+ output.nonnull.original % invoke the original output.nonnull
+ }
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
+ % new text (in s) to the top of the stack, and move to the close-brackets
+ % state, ready for next time (unless inbrackets resets it). If we come
+ % into this branch, then output.state is carefully undisturbed.
+ bracket.state open.brackets =
+ { " [" * }
+ { ", " * } % bracket.state will be within.brackets
+ if$
+ s *
+ close.brackets 'bracket.state :=
+ }
+ if$
+}
+
+% Call this function just before adding something which should be presented in
+% brackets. bracket.state is handled specially within output.nonnull.
+FUNCTION {inbrackets}
+{ bracket.state close.brackets =
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
+ { open.brackets 'bracket.state := }
+ if$
+}
+
+FUNCTION {format.lastchecked}
+{ lastchecked empty$
+ { "" }
+ { inbrackets "cited " lastchecked * }
+ if$
+}
+% ...urlbst to here
+
FUNCTION {output}
{ duplicate$ empty$
'pop$
@@ -129,24 +228,22 @@ FUNCTION {output.check}
if$
}
-FUNCTION {output.bibitem}
+FUNCTION {output.bibitem.original}
{ newline$
- "<dt><a name=" quote$ * hrefprefix * write$
+ "<dt><a name='" write$
cite$ write$
- quote$ ">[" * cite$ * "] " * write$
- % the <dt> is closed within output.nonnull, as long as close.link is true
- #1 'close.link :=
-% newline$
+ "'>[" cite$ * "] " * write$
+ % the <dt> is closed within output.nonnull, as long as close.first.block is true
+ #1 'close.first.block :=
+ newline$
""
before.all 'output.state :=
}
-FUNCTION {fin.entry}
-{ add.period$
+FUNCTION {fin.entry.original}
+{ add.period$ "</dd>" *
write$
newline$
- "</dd>" write$
- newline$
}
FUNCTION {new.block}
@@ -281,33 +378,10 @@ FUNCTION {format.editors}
if$
}
-%FUNCTION {format.title}
-%{ title empty$
-% { "" }
-% { title "t" change.case$ }
-% if$
-%}
-
-% format the title, and surround it with the URL if one is defined
FUNCTION {format.title}
{ title empty$
{ "" }
- { url empty$
- { title "t" change.case$ }
- { "<a href=" quote$ * url * quote$ * " >" *
- title "t" change.case$ * "</a>" * }
- if$
- }
- if$
-}
-
-% format the eprint number, and surround it with a URL pointing to
-% one of the XXX mirrors
-FUNCTION {format.eprint}
-{ eprint empty$
- { "" }
- { "eprint <a href=" quote$ * "http://" * xxxmirror * "/abs/" * eprint *
- quote$ * " >" * eprint * "</a>" * }
+ { title "t" change.case$ }
if$
}
@@ -317,7 +391,7 @@ FUNCTION {n.dashify}
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
- { "-" *
+ { "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
@@ -353,24 +427,8 @@ FUNCTION {format.date}
if$
}
-%FUNCTION {format.btitle}
-%{ title emphasize
-%}
-
FUNCTION {format.btitle}
-{ title empty$
- { booktitle empty$
- { "need title or booktitle in format.btitle" warning$ }
- { booktitle 's := }
- if$
- }
- { title 's := }
- if$
- url empty$
- { s emphasize }
- { "<a href=" quote$ * url * quote$ * " >" *
- s emphasize * "</a>" * }
- if$
+{ title emphasize
}
FUNCTION {tie.or.space.connect}
@@ -466,14 +524,10 @@ FUNCTION {format.pages}
}
FUNCTION {format.vol.num.pages}
-%{ volume field.or.null
-{ volume empty$ % allow this...
- { "" }
- { "<b>" volume * "</b>" * }
- if$
+{ volume field.or.null
number empty$
'skip$
- { " no. " number * *
+ { "(" number * ")" * *
volume empty$
{ "there's a number but no volume in " cite$ * warning$ }
'skip$
@@ -484,7 +538,7 @@ FUNCTION {format.vol.num.pages}
'skip$
{ duplicate$ empty$
{ pop$ format.pages }
- { " pp. " * pages n.dashify * }
+ { ":" * pages n.dashify * }
if$
}
if$
@@ -547,7 +601,6 @@ FUNCTION {format.tr.number}
if$
}
-% surround the journal name with a link pointing to the crossref
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
@@ -555,36 +608,28 @@ FUNCTION {format.article.crossref}
warning$
""
}
- { "In <em><a href=" quote$ * "#" * hrefprefix * crossref * quote$ * ">" *
- journal * "</a></em>" * }
-% { "In <em>" journal * "</em>" * }
+ { "In <em>" journal * "</em>" * }
if$
}
{ "In " key * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-% if there is indeed a crossref, make the reference a link
FUNCTION {format.crossref.editor}
-{ crossref empty$
- { editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et~al." * }
- { #2 <
+{ 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" =
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
- }
+ }
if$
- }
- if$
- }
- { "<a href=" quote$ * "#" * hrefprefix * crossref * quote$ * " >[" *
- crossref * "]</a>" *
- }
+ }
if$
}
@@ -614,7 +659,7 @@ FUNCTION {format.book.crossref}
}
{ format.crossref.editor * }
if$
-% "<a href=#" * crossref * ">" * crossref * "</a>" *
+ " <span class='cite'>" * crossref * "</span>" *
}
FUNCTION {format.incoll.inproc.crossref}
@@ -635,33 +680,169 @@ FUNCTION {format.incoll.inproc.crossref}
}
{ "In " format.crossref.editor * }
if$
-% "<a href=#" * crossref * ">" * crossref * "</a>" *
-% " \cite{" * crossref * "}" *
+ " <span class='cite'>" * crossref * "</span>" *
}
-FUNCTION {format.lastchecked}
-{ lastchecked empty$
+% urlbst...
+% Functions for making hypertext links.
+FUNCTION {make.href}
+{
+ "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" *
+}
+
+% If inlinelinks is true, then format.url should be a no-op, since it's
+% (a) redundant, and (b) could end up as a link-within-a-link.
+FUNCTION {format.url}
+{ inlinelinks #1 = url empty$ or
+ { "" }
+ { urlintro "<code>" * url * "</code>" * }
+ if$
+}
+
+FUNCTION {format.eprint}
+{ eprint empty$
+ { "" }
+ { eprintprefix eprint * eprinturl eprint * make.href }
+ if$
+}
+
+FUNCTION {format.doi}
+{ doi empty$
+ { "" }
+ { doiform #0 =
+ { doiprefix doi * doiurl doi * make.href }
+ { "DOI:{" doi * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pubmed}
+{ pubmed empty$
{ "" }
- { ", cited " lastchecked * }
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
if$
}
+% Output a URL. We can't use the more normal idiom (something like
+% `format.url output'), because the `inbrackets' within
+% format.lastchecked applies to everything between calls to `output',
+% so that `format.url format.lastchecked * output' ends up with both
+% the URL and the lastchecked in brackets.
+FUNCTION {output.url}
+{ url empty$
+ 'skip$
+ { new.block
+ format.url output
+ format.lastchecked output
+ }
+ if$
+}
+
+FUNCTION {output.web.refs}
+{
+ new.block
+ output.url
+ addeprints eprint empty$ not and
+ { format.eprint output.nonnull }
+ 'skip$
+ if$
+ adddoiresolver doi empty$ not and
+ { format.doi output.nonnull }
+ 'skip$
+ if$
+ addpubmedresolver pubmed empty$ not and
+ { format.pubmed output.nonnull }
+ 'skip$
+ if$
+}
+
+% Wrapper for output.bibitem.original.
+% If the URL field is not empty, set makeinlinelink to be true,
+% so that an inline link will be started at the next opportunity
+FUNCTION {output.bibitem}
+{ outside.brackets 'bracket.state :=
+ output.bibitem.original
+ inlinelinks url empty$ not and
+ { #1 'makeinlinelink := }
+ { #0 'makeinlinelink := }
+ if$
+}
+
+% Wrapper for fin.entry.original
+FUNCTION {fin.entry}
+{ output.web.refs % urlbst
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
+ "[link]" output.nonnull }
+ 'skip$
+ if$
+ bracket.state close.brackets = % urlbst
+ { "]" * }
+ 'skip$
+ if$
+ fin.entry.original
+}
+
+% Webpage entry type.
+% Title and url fields required;
+% author, note, year, month, and lastchecked fields optional
+% See references
+% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
+% http://www.classroom.net/classroom/CitingNetResources.html
+% http://neal.ctstateu.edu/history/cite.html
+% http://www.cas.usf.edu/english/walker/mla.html
+% for citation formats for web pages.
+FUNCTION {webpage}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ 'skip$ % author and editor both optional
+ { format.editors output.nonnull }
+ if$
+ }
+ { editor empty$
+ { format.authors output.nonnull }
+ { "can't use both author and editor fields in " cite$ * warning$ }
+ if$
+ }
+ if$
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
+ format.title "title" output.check
+ inbrackets "online" output
+ new.block
+ year empty$
+ 'skip$
+ { format.date "year" output.check }
+ if$
+ % We don't need to output the URL details ('lastchecked' and 'url'),
+ % because fin.entry does that for us, using output.web.refs. The only
+ % reason we would want to put them here is if we were to decide that
+ % they should go in front of the rather miscellaneous information in 'note'.
+ new.block
+ note output
+ fin.entry
+}
+% ...urlbst to here
+
+
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
- format.vol.num.pages output
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
format.date "year" output.check
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
- format.eprint output
new.block
note output
fin.entry
@@ -679,6 +860,7 @@ FUNCTION {book}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -703,6 +885,7 @@ FUNCTION {booklet}
{ output.bibitem
format.authors output
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
howpublished address new.block.checkb
howpublished output
@@ -725,6 +908,7 @@ FUNCTION {inbook}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -751,6 +935,7 @@ FUNCTION {incollection}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -777,6 +962,7 @@ FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -789,11 +975,9 @@ FUNCTION {inproceedings}
organization output
publisher output
format.date "year" output.check
- format.eprint output
}
{ address output.nonnull
format.date "year" output.check
- format.eprint output
new.sentence
organization output
publisher output
@@ -824,6 +1008,7 @@ FUNCTION {manual}
{ format.authors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
author empty$
{ organization empty$
@@ -849,6 +1034,7 @@ FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
"Master's thesis" format.thesis.type output.nonnull
@@ -864,11 +1050,11 @@ FUNCTION {misc}
{ output.bibitem
format.authors output
title howpublished new.block.checkb
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title output
howpublished new.block.checka
howpublished output
format.date output
- format.eprint output
new.block
note output
fin.entry
@@ -879,6 +1065,7 @@ FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
new.block
"PhD thesis" format.thesis.type output.nonnull
@@ -897,6 +1084,7 @@ FUNCTION {proceedings}
{ format.editors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
format.bvolume output
format.number.series output
@@ -929,13 +1117,13 @@ FUNCTION {techreport}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
format.tr.number output.nonnull
institution "institution" output.check
address output
format.date "year" output.check
- format.eprint output
new.block
note output
fin.entry
@@ -945,31 +1133,11 @@ FUNCTION {unpublished}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
note "note" output.check
format.date output
- format.eprint output
- fin.entry
-}
-
-FUNCTION {webpage}
-{ output.bibitem
- author empty$
- { % Need to put something here -- if the title were put here,
- % we'd have a <a> inside a <a>
- key empty$
- { "" }
- { key }
- if$
- "author and key" output.check
- }
- { format.authors "author" output.check }
- if$
- new.block
- format.title "title" output.check
- new.block
- "[Online" format.lastchecked * "]" * output
fin.entry
}
@@ -1155,7 +1323,7 @@ FUNCTION {editor.organization.sort}
if$
}
-FUNCTION {presort.by.author}
+FUNCTION {presort}
{ type$ "book" =
type$ "inbook" =
or
@@ -1183,36 +1351,7 @@ FUNCTION {presort.by.author}
'sort.key$ :=
}
-FUNCTION {presort.by.year}
-{ year field.or.null sortify
-%EDIT2
- " "
- *
- type$ "book" =
- type$ "inbook" =
- or
- 'author.editor.sort
- { type$ "proceedings" =
- 'editor.organization.sort
- { type$ "manual" =
- 'author.organization.sort
- 'author.sort
- if$
- }
- if$
- }
- if$
- *
- " "
- *
- title field.or.null
- sort.format.title
- *
- #1 entry.max$ substring$
- 'sort.key$ :=
-}
-
-ITERATE {presort.by.author}
+ITERATE {presort}
SORT
@@ -1251,6 +1390,7 @@ FUNCTION {begin.bib}
EXECUTE {begin.bib}
+EXECUTE {init.urlbst.variables}
EXECUTE {init.state.consts}
ITERATE {call.type$}
@@ -1261,4 +1401,3 @@ FUNCTION {end.bib}
}
EXECUTE {end.bib}
-
diff --git a/Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldate.bst b/Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldate.bst
index 757df83c9e0..0e1b81efac7 100644
--- a/Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldate.bst
+++ b/Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldate.bst
@@ -5,10 +5,23 @@
%%
%% plainhtml.bst
%%
-%% Part of bibhtml, version 1.3, released 2006 October 31
+%% Part of bibhtml, version 2.0, released 2009 August 9
+%% Hg node 4a5600417b09.
%% See <http://purl.org/nxg/dist/bibhtml>
%%
-%% Copyright 1999, 2005, 2006, Norman Gray <norman@astro.gla.ac.uk>
+%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk>
+%%
+%% This is a modification of a modification!
+%%
+%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/plain.bst
+%%% ... by urlbst, version 0.6-4 (marked with "% urlbst")
+%%% See <http://purl.org/nxg/dist/urlbst>
+%%% Added webpage entry type, and url and lastchecked fields.
+%%% Added eprint support.
+%%% Added DOI support.
+%%% Added PUBMED support.
+%%% Added hyperref support.
+%%% Original headers follow...
ENTRY
{ address
author
@@ -32,38 +45,66 @@ ENTRY
type
volume
year
- url
- lastchecked
- eprint
- sortmonth
+ eprint % urlbst
+ doi % urlbst
+ pubmed % urlbst
+ url % urlbst
+ lastchecked % urlbst
}
{}
{ label }
-INTEGERS { output.state before.all mid.sentence after.sentence after.block
- close.link }
-STRINGS { s t xxxmirror hrefprefix }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform }
+STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst...
+INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver }
+FUNCTION {init.urlbst.variables}
+{
+ "Available from: " 'urlintro := % prefix before URL
+ "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
+ "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
+ "doi:" 'doiprefix := % text prefix printed before DOI ref
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
+ #1 'addeprints := % 0=no eprints; 1=include eprints
+ #1 'adddoiresolver := % 0=no DOI resolver; 1=include it
+ #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
+ #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
+ "" 'openinlinelink := % ditto
+ "" 'closeinlinelink := % ditto
+}
+INTEGERS {
+ bracket.state
+ outside.brackets
+ open.brackets
+ within.brackets
+ close.brackets
+ close.first.block
+}
FUNCTION {init.state.consts}
-{ #0 'before.all :=
+{ #0 'outside.brackets := % urlbst
+ #1 'open.brackets :=
+ #2 'within.brackets :=
+ #3 'close.brackets :=
+ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
- #0 'close.link :=
- "" 'hrefprefix := % "ref:" is a good alternative
- "xxx.arxiv.org" 'xxxmirror :=
+ #0 'close.first.block :=
}
-FUNCTION {output.nonnull}
+STRINGS { s t }
+FUNCTION {output.nonnull.original}
{ 's :=
output.state mid.sentence =
{ ", " * write$ }
{ output.state after.block =
{ add.period$ write$
- close.link
- { "</a></dt> <dd>" write$
- #0 'close.link := }
- 'skip$
- if$
- newline$
- " " write$
+ close.first.block
+ { "</a></dt>" write$ newline$ "<dd>" write$
+ #0 'close.first.block := }
+ { newline$ }
+ if$
}
{ output.state before.all =
'write$
@@ -76,6 +117,59 @@ FUNCTION {output.nonnull}
if$
s
}
+FUNCTION {possibly.setup.inlinelink}
+{ makeinlinelink
+ { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+ "</a>" 'closeinlinelink :=
+ #0 'makeinlinelink := }
+ 'skip$
+ if$ % makeinlinelink
+}
+FUNCTION {add.inlinelink}
+{ openinlinelink empty$
+ 'skip$
+ { openinlinelink swap$ * closeinlinelink *
+ "" 'openinlinelink :=
+ }
+ if$
+}
+FUNCTION {output.nonnull}
+{ % Save the thing we've been asked to output
+ 's :=
+ bracket.state close.brackets =
+ { "]" *
+ outside.brackets 'bracket.state :=
+ }
+ 'skip$
+ if$
+ bracket.state outside.brackets =
+ { % We're outside all brackets -- this is the normal situation.
+ s
+ add.inlinelink
+ output.nonnull.original % invoke the original output.nonnull
+ }
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
+ bracket.state open.brackets =
+ { " [" * }
+ { ", " * } % bracket.state will be within.brackets
+ if$
+ s *
+ close.brackets 'bracket.state :=
+ }
+ if$
+}
+FUNCTION {inbrackets}
+{ bracket.state close.brackets =
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
+ { open.brackets 'bracket.state := }
+ if$
+}
+FUNCTION {format.lastchecked}
+{ lastchecked empty$
+ { "" }
+ { inbrackets "cited " lastchecked * }
+ if$
+}
FUNCTION {output}
{ duplicate$ empty$
'pop$
@@ -89,21 +183,20 @@ FUNCTION {output.check}
'output.nonnull
if$
}
-FUNCTION {output.bibitem}
+FUNCTION {output.bibitem.original}
{ newline$
- "<dt><a name=" quote$ * hrefprefix * write$
+ "<dt><a name='" write$
cite$ write$
- quote$ ">[" * cite$ * "] " * write$
- #1 'close.link :=
+ "'>[" cite$ * "] " * write$
+ #1 'close.first.block :=
+ newline$
""
before.all 'output.state :=
}
-FUNCTION {fin.entry}
-{ add.period$
+FUNCTION {fin.entry.original}
+{ add.period$ "</dd>" *
write$
newline$
- "</dd>" write$
- newline$
}
FUNCTION {new.block}
{ output.state before.all =
@@ -225,19 +318,7 @@ FUNCTION {format.editors}
FUNCTION {format.title}
{ title empty$
{ "" }
- { url empty$
- { title "t" change.case$ }
- { "<a href=" quote$ * url * quote$ * " >" *
- title "t" change.case$ * "</a>" * }
- if$
- }
- if$
-}
-FUNCTION {format.eprint}
-{ eprint empty$
- { "" }
- { "eprint <a href=" quote$ * "http://" * xxxmirror * "/abs/" * eprint *
- quote$ * " >" * eprint * "</a>" * }
+ { title "t" change.case$ }
if$
}
FUNCTION {n.dashify}
@@ -246,7 +327,7 @@ FUNCTION {n.dashify}
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
- { "-" *
+ { "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
@@ -281,19 +362,7 @@ FUNCTION {format.date}
if$
}
FUNCTION {format.btitle}
-{ title empty$
- { booktitle empty$
- { "need title or booktitle in format.btitle" warning$ }
- { booktitle 's := }
- if$
- }
- { title 's := }
- if$
- url empty$
- { s emphasize }
- { "<a href=" quote$ * url * quote$ * " >" *
- s emphasize * "</a>" * }
- if$
+{ title emphasize
}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
@@ -380,13 +449,10 @@ FUNCTION {format.pages}
if$
}
FUNCTION {format.vol.num.pages}
-{ volume empty$ % allow this...
- { "" }
- { "<b>" volume * "</b>" * }
- if$
+{ volume field.or.null
number empty$
'skip$
- { " no. " number * *
+ { "(" number * ")" * *
volume empty$
{ "there's a number but no volume in " cite$ * warning$ }
'skip$
@@ -397,7 +463,7 @@ FUNCTION {format.vol.num.pages}
'skip$
{ duplicate$ empty$
{ pop$ format.pages }
- { " pp. " * pages n.dashify * }
+ { ":" * pages n.dashify * }
if$
}
if$
@@ -461,33 +527,27 @@ FUNCTION {format.article.crossref}
warning$
""
}
- { "In <em><a href=" quote$ * "#" * hrefprefix * crossref * quote$ * ">" *
- journal * "</a></em>" * }
+ { "In <em>" journal * "</em>" * }
if$
}
{ "In " key * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
FUNCTION {format.crossref.editor}
-{ crossref empty$
- { editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et~al." * }
- { #2 <
+{ 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" =
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
- }
+ }
if$
- }
- if$
- }
- { "<a href=" quote$ * "#" * hrefprefix * crossref * quote$ * " >[" *
- crossref * "]</a>" *
- }
+ }
if$
}
FUNCTION {format.book.crossref}
@@ -516,6 +576,7 @@ FUNCTION {format.book.crossref}
}
{ format.crossref.editor * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
@@ -535,29 +596,130 @@ FUNCTION {format.incoll.inproc.crossref}
}
{ "In " format.crossref.editor * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-FUNCTION {format.lastchecked}
-{ lastchecked empty$
+FUNCTION {make.href}
+{
+ "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" *
+}
+FUNCTION {format.url}
+{ inlinelinks #1 = url empty$ or
{ "" }
- { ", cited " lastchecked * }
+ { urlintro "<code>" * url * "</code>" * }
if$
}
+FUNCTION {format.eprint}
+{ eprint empty$
+ { "" }
+ { eprintprefix eprint * eprinturl eprint * make.href }
+ if$
+}
+FUNCTION {format.doi}
+{ doi empty$
+ { "" }
+ { doiform #0 =
+ { doiprefix doi * doiurl doi * make.href }
+ { "DOI:{" doi * "}" * }
+ if$
+ }
+ if$
+}
+FUNCTION {format.pubmed}
+{ pubmed empty$
+ { "" }
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
+ if$
+}
+FUNCTION {output.url}
+{ url empty$
+ 'skip$
+ { new.block
+ format.url output
+ format.lastchecked output
+ }
+ if$
+}
+FUNCTION {output.web.refs}
+{
+ new.block
+ output.url
+ addeprints eprint empty$ not and
+ { format.eprint output.nonnull }
+ 'skip$
+ if$
+ adddoiresolver doi empty$ not and
+ { format.doi output.nonnull }
+ 'skip$
+ if$
+ addpubmedresolver pubmed empty$ not and
+ { format.pubmed output.nonnull }
+ 'skip$
+ if$
+}
+FUNCTION {output.bibitem}
+{ outside.brackets 'bracket.state :=
+ output.bibitem.original
+ inlinelinks url empty$ not and
+ { #1 'makeinlinelink := }
+ { #0 'makeinlinelink := }
+ if$
+}
+FUNCTION {fin.entry}
+{ output.web.refs % urlbst
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
+ "[link]" output.nonnull }
+ 'skip$
+ if$
+ bracket.state close.brackets = % urlbst
+ { "]" * }
+ 'skip$
+ if$
+ fin.entry.original
+}
+FUNCTION {webpage}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ 'skip$ % author and editor both optional
+ { format.editors output.nonnull }
+ if$
+ }
+ { editor empty$
+ { format.authors output.nonnull }
+ { "can't use both author and editor fields in " cite$ * warning$ }
+ if$
+ }
+ if$
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
+ format.title "title" output.check
+ inbrackets "online" output
+ new.block
+ year empty$
+ 'skip$
+ { format.date "year" output.check }
+ if$
+ new.block
+ note output
+ fin.entry
+}
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
- format.vol.num.pages output
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
format.date "year" output.check
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
- format.eprint output
new.block
note output
fin.entry
@@ -574,6 +736,7 @@ FUNCTION {book}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -597,6 +760,7 @@ FUNCTION {booklet}
{ output.bibitem
format.authors output
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
howpublished address new.block.checkb
howpublished output
@@ -618,6 +782,7 @@ FUNCTION {inbook}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -643,6 +808,7 @@ FUNCTION {incollection}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -668,6 +834,7 @@ FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -680,11 +847,9 @@ FUNCTION {inproceedings}
organization output
publisher output
format.date "year" output.check
- format.eprint output
}
{ address output.nonnull
format.date "year" output.check
- format.eprint output
new.sentence
organization output
publisher output
@@ -713,6 +878,7 @@ FUNCTION {manual}
{ format.authors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
author empty$
{ organization empty$
@@ -737,6 +903,7 @@ FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
"Master's thesis" format.thesis.type output.nonnull
@@ -751,11 +918,11 @@ FUNCTION {misc}
{ output.bibitem
format.authors output
title howpublished new.block.checkb
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title output
howpublished new.block.checka
howpublished output
format.date output
- format.eprint output
new.block
note output
fin.entry
@@ -765,6 +932,7 @@ FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
new.block
"PhD thesis" format.thesis.type output.nonnull
@@ -782,6 +950,7 @@ FUNCTION {proceedings}
{ format.editors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
format.bvolume output
format.number.series output
@@ -813,13 +982,13 @@ FUNCTION {techreport}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
format.tr.number output.nonnull
institution "institution" output.check
address output
format.date "year" output.check
- format.eprint output
new.block
note output
fin.entry
@@ -828,29 +997,11 @@ FUNCTION {unpublished}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
note "note" output.check
format.date output
- format.eprint output
- fin.entry
-}
-FUNCTION {webpage}
-{ output.bibitem
- author empty$
- { % Need to put something here -- if the title were put here,
- key empty$
- { "" }
- { key }
- if$
- "author and key" output.check
- }
- { format.authors "author" output.check }
- if$
- new.block
- format.title "title" output.check
- new.block
- "[Online" format.lastchecked * "]" * output
fin.entry
}
FUNCTION {default.type} { misc }
@@ -992,7 +1143,7 @@ FUNCTION {editor.organization.sort}
{ editor sort.format.names }
if$
}
-FUNCTION {presort.by.author}
+FUNCTION {presort}
{ type$ "book" =
type$ "inbook" =
or
@@ -1019,36 +1170,7 @@ FUNCTION {presort.by.author}
#1 entry.max$ substring$
'sort.key$ :=
}
-FUNCTION {presort.by.year}
-{ year field.or.null sortify
- sortmonth field.or.null sortify
- *
- " "
- *
- type$ "book" =
- type$ "inbook" =
- or
- 'author.editor.sort
- { type$ "proceedings" =
- 'editor.organization.sort
- { type$ "manual" =
- 'author.organization.sort
- 'author.sort
- if$
- }
- if$
- }
- if$
- *
- " "
- *
- title field.or.null
- sort.format.title
- *
- #1 entry.max$ substring$
- 'sort.key$ :=
-}
-ITERATE {presort.by.year}
+ITERATE {presort}
SORT
STRINGS { longest.label }
INTEGERS { number.label longest.label.width }
@@ -1077,6 +1199,7 @@ FUNCTION {begin.bib}
"<dl>" write$ newline$
}
EXECUTE {begin.bib}
+EXECUTE {init.urlbst.variables}
EXECUTE {init.state.consts}
ITERATE {call.type$}
FUNCTION {end.bib}
diff --git a/Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldater.bst b/Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldater.bst
index 0c37586d690..d1cc88411e2 100644
--- a/Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldater.bst
+++ b/Master/texmf-dist/bibtex/bst/bibhtml/plainhtmldater.bst
@@ -5,27 +5,24 @@
%%
%% plainhtml.bst
%%
-%% Part of bibhtml, version 1.3, released 2006 October 31
+%% Part of bibhtml, version 2.0, released 2009 August 9
+%% Hg node 4a5600417b09.
%% See <http://purl.org/nxg/dist/bibhtml>
%%
-%% Copyright 1999, 2005, 2006, Norman Gray <norman@astro.gla.ac.uk>
-%
-% $Id: plainhtml.bst.in,v 1.2 2006/10/31 15:45:57 norman Exp $
-%
-% Released under the terms of the GNU General Public Licence --
-% see the file LICENCE, included in the distribution.
-%
-% Version history:
-% 1.3 31 October 2006: added 'hrefprefix' variable; minor code tidups
-% 1.2 19 September 2005: added `webpage' entry type, and
-% `lastchecked' field.
-% 1.1 6 June 1999. Tidied documenation, clarified licence.
-% 1.0b3 April 1998, added support for eprint field
-% (in article, techreport, misc, inproceedings, unpublished)
-% 1.0b2 December 1996, added the above exhortation!
-% 1.0b1 Original version
-%
-% Modification of...
+%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk>
+%%
+%% This is a modification of a modification!
+%%
+%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/plain.bst
+%%% ... by urlbst, version 0.6-4 (marked with "% urlbst")
+%%% See <http://purl.org/nxg/dist/urlbst>
+%%% Added webpage entry type, and url and lastchecked fields.
+%%% Added eprint support.
+%%% Added DOI support.
+%%% Added PUBMED support.
+%%% Added hyperref support.
+%%% Original headers follow...
+
% BibTeX standard bibliography style `plain'
% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
% Copyright (C) 1985, all rights reserved.
@@ -35,13 +32,6 @@
% 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.
-% ... to make it produce HTML, and add the url field
-%
-% this produces a file which is a <dl>...</dl>, which should be incorporated
-% into another html file somehow.
-% There will still be ~ and -- within the output file (it's too difficult
-% to get rid of them here). A post-processor should turn these
-% into either &nbsp; and &enspace; or ' ' and '-' as required.
ENTRY
{ address
@@ -66,47 +56,77 @@ ENTRY
type
volume
year
- url
- lastchecked
- eprint
-%EDIT1
- sortmonth
+ eprint % urlbst
+ doi % urlbst
+ pubmed % urlbst
+ url % urlbst
+ lastchecked % urlbst
}
{}
{ label }
-INTEGERS { output.state before.all mid.sentence after.sentence after.block
- close.link }
-
-STRINGS { s t xxxmirror hrefprefix }
-
-% Initialise state constants, and location of nearest XXX mirror (for eprints)
+INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform }
+
+STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst...
+INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver }
+% Following constants may be adjusted by hand, if desired
+FUNCTION {init.urlbst.variables}
+{
+ "Available from: " 'urlintro := % prefix before URL
+ "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
+ "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
+ "doi:" 'doiprefix := % text prefix printed before DOI ref
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
+ #1 'addeprints := % 0=no eprints; 1=include eprints
+ #1 'adddoiresolver := % 0=no DOI resolver; 1=include it
+ #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
+ #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing
+ % the following are internal state variables, not config constants
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
+ "" 'openinlinelink := % ditto
+ "" 'closeinlinelink := % ditto
+}
+INTEGERS {
+ bracket.state
+ outside.brackets
+ open.brackets
+ within.brackets
+ close.brackets
+ close.first.block
+}
+% ...urlbst to here
FUNCTION {init.state.consts}
-{ #0 'before.all :=
+{ #0 'outside.brackets := % urlbst
+ #1 'open.brackets :=
+ #2 'within.brackets :=
+ #3 'close.brackets :=
+
+ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
- #0 'close.link :=
-
- "" 'hrefprefix := % "ref:" is a good alternative
- "xxx.arxiv.org" 'xxxmirror :=
+ #0 'close.first.block :=
}
-FUNCTION {output.nonnull}
+STRINGS { s t }
+
+% urlbst
+FUNCTION {output.nonnull.original}
{ 's :=
output.state mid.sentence =
{ ", " * write$ }
{ output.state after.block =
{ add.period$ write$
% close the <dt> after the end of the first block
- % and set closelink false
- close.link
- { "</a></dt> <dd>" write$
- #0 'close.link := }
- 'skip$
- if$
- newline$
- " " write$
+ close.first.block
+ { "</a></dt>" write$ newline$ "<dd>" write$
+ #0 'close.first.block := }
+ { newline$ }
+ if$
+ %"\newblock " write$
}
{ output.state before.all =
'write$
@@ -120,6 +140,84 @@ FUNCTION {output.nonnull}
s
}
+% urlbst...
+% The following three functions are for handling inlinelink. They wrap
+% a block of text which is potentially output with write$ by multiple
+% other functions, so we don't know the content a priori.
+% They communicate between each other using the variables makeinlinelink
+% (which is true if a link should be made), and closeinlinelink (which holds
+% the string which should close any current link. They can be called
+% at any time, but start.inlinelink will be a no-op unless something has
+% previously set makeinlinelink true, and the two ...end.inlinelink functions
+% will only do their stuff if start.inlinelink has previously set
+% closeinlinelink to be non-empty.
+FUNCTION {possibly.setup.inlinelink}
+{ makeinlinelink
+ { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+ "</a>" 'closeinlinelink :=
+ #0 'makeinlinelink := }
+ 'skip$
+ if$ % makeinlinelink
+}
+FUNCTION {add.inlinelink}
+{ openinlinelink empty$
+ 'skip$
+ { openinlinelink swap$ * closeinlinelink *
+ "" 'openinlinelink :=
+ }
+ if$
+}
+FUNCTION {output.nonnull}
+{ % Save the thing we've been asked to output
+ 's :=
+ % If the bracket-state is close.brackets, then add a close-bracket to
+ % what is currently at the top of the stack, and set bracket.state
+ % to outside.brackets
+ bracket.state close.brackets =
+ { "]" *
+ outside.brackets 'bracket.state :=
+ }
+ 'skip$
+ if$
+ bracket.state outside.brackets =
+ { % We're outside all brackets -- this is the normal situation.
+ % Write out what's currently at the top of the stack, using the
+ % original output.nonnull function.
+ s
+ add.inlinelink
+ output.nonnull.original % invoke the original output.nonnull
+ }
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
+ % new text (in s) to the top of the stack, and move to the close-brackets
+ % state, ready for next time (unless inbrackets resets it). If we come
+ % into this branch, then output.state is carefully undisturbed.
+ bracket.state open.brackets =
+ { " [" * }
+ { ", " * } % bracket.state will be within.brackets
+ if$
+ s *
+ close.brackets 'bracket.state :=
+ }
+ if$
+}
+
+% Call this function just before adding something which should be presented in
+% brackets. bracket.state is handled specially within output.nonnull.
+FUNCTION {inbrackets}
+{ bracket.state close.brackets =
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
+ { open.brackets 'bracket.state := }
+ if$
+}
+
+FUNCTION {format.lastchecked}
+{ lastchecked empty$
+ { "" }
+ { inbrackets "cited " lastchecked * }
+ if$
+}
+% ...urlbst to here
+
FUNCTION {output}
{ duplicate$ empty$
'pop$
@@ -135,24 +233,22 @@ FUNCTION {output.check}
if$
}
-FUNCTION {output.bibitem}
+FUNCTION {output.bibitem.original}
{ newline$
- "<dt><a name=" quote$ * hrefprefix * write$
+ "<dt><a name='" write$
cite$ write$
- quote$ ">[" * cite$ * "] " * write$
- % the <dt> is closed within output.nonnull, as long as close.link is true
- #1 'close.link :=
-% newline$
+ "'>[" cite$ * "] " * write$
+ % the <dt> is closed within output.nonnull, as long as close.first.block is true
+ #1 'close.first.block :=
+ newline$
""
before.all 'output.state :=
}
-FUNCTION {fin.entry}
-{ add.period$
+FUNCTION {fin.entry.original}
+{ add.period$ "</dd>" *
write$
newline$
- "</dd>" write$
- newline$
}
FUNCTION {new.block}
@@ -287,33 +383,10 @@ FUNCTION {format.editors}
if$
}
-%FUNCTION {format.title}
-%{ title empty$
-% { "" }
-% { title "t" change.case$ }
-% if$
-%}
-
-% format the title, and surround it with the URL if one is defined
FUNCTION {format.title}
{ title empty$
{ "" }
- { url empty$
- { title "t" change.case$ }
- { "<a href=" quote$ * url * quote$ * " >" *
- title "t" change.case$ * "</a>" * }
- if$
- }
- if$
-}
-
-% format the eprint number, and surround it with a URL pointing to
-% one of the XXX mirrors
-FUNCTION {format.eprint}
-{ eprint empty$
- { "" }
- { "eprint <a href=" quote$ * "http://" * xxxmirror * "/abs/" * eprint *
- quote$ * " >" * eprint * "</a>" * }
+ { title "t" change.case$ }
if$
}
@@ -323,7 +396,7 @@ FUNCTION {n.dashify}
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
- { "-" *
+ { "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
@@ -359,24 +432,8 @@ FUNCTION {format.date}
if$
}
-%FUNCTION {format.btitle}
-%{ title emphasize
-%}
-
FUNCTION {format.btitle}
-{ title empty$
- { booktitle empty$
- { "need title or booktitle in format.btitle" warning$ }
- { booktitle 's := }
- if$
- }
- { title 's := }
- if$
- url empty$
- { s emphasize }
- { "<a href=" quote$ * url * quote$ * " >" *
- s emphasize * "</a>" * }
- if$
+{ title emphasize
}
FUNCTION {tie.or.space.connect}
@@ -472,14 +529,10 @@ FUNCTION {format.pages}
}
FUNCTION {format.vol.num.pages}
-%{ volume field.or.null
-{ volume empty$ % allow this...
- { "" }
- { "<b>" volume * "</b>" * }
- if$
+{ volume field.or.null
number empty$
'skip$
- { " no. " number * *
+ { "(" number * ")" * *
volume empty$
{ "there's a number but no volume in " cite$ * warning$ }
'skip$
@@ -490,7 +543,7 @@ FUNCTION {format.vol.num.pages}
'skip$
{ duplicate$ empty$
{ pop$ format.pages }
- { " pp. " * pages n.dashify * }
+ { ":" * pages n.dashify * }
if$
}
if$
@@ -553,7 +606,6 @@ FUNCTION {format.tr.number}
if$
}
-% surround the journal name with a link pointing to the crossref
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
@@ -561,36 +613,28 @@ FUNCTION {format.article.crossref}
warning$
""
}
- { "In <em><a href=" quote$ * "#" * hrefprefix * crossref * quote$ * ">" *
- journal * "</a></em>" * }
-% { "In <em>" journal * "</em>" * }
+ { "In <em>" journal * "</em>" * }
if$
}
{ "In " key * }
if$
+ " <span class='cite'>" * crossref * "</span>" *
}
-% if there is indeed a crossref, make the reference a link
FUNCTION {format.crossref.editor}
-{ crossref empty$
- { editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et~al." * }
- { #2 <
+{ 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" =
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
- }
+ }
if$
- }
- if$
- }
- { "<a href=" quote$ * "#" * hrefprefix * crossref * quote$ * " >[" *
- crossref * "]</a>" *
- }
+ }
if$
}
@@ -620,7 +664,7 @@ FUNCTION {format.book.crossref}
}
{ format.crossref.editor * }
if$
-% "<a href=#" * crossref * ">" * crossref * "</a>" *
+ " <span class='cite'>" * crossref * "</span>" *
}
FUNCTION {format.incoll.inproc.crossref}
@@ -641,33 +685,169 @@ FUNCTION {format.incoll.inproc.crossref}
}
{ "In " format.crossref.editor * }
if$
-% "<a href=#" * crossref * ">" * crossref * "</a>" *
-% " \cite{" * crossref * "}" *
+ " <span class='cite'>" * crossref * "</span>" *
}
-FUNCTION {format.lastchecked}
-{ lastchecked empty$
+% urlbst...
+% Functions for making hypertext links.
+FUNCTION {make.href}
+{
+ "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" *
+}
+
+% If inlinelinks is true, then format.url should be a no-op, since it's
+% (a) redundant, and (b) could end up as a link-within-a-link.
+FUNCTION {format.url}
+{ inlinelinks #1 = url empty$ or
+ { "" }
+ { urlintro "<code>" * url * "</code>" * }
+ if$
+}
+
+FUNCTION {format.eprint}
+{ eprint empty$
+ { "" }
+ { eprintprefix eprint * eprinturl eprint * make.href }
+ if$
+}
+
+FUNCTION {format.doi}
+{ doi empty$
+ { "" }
+ { doiform #0 =
+ { doiprefix doi * doiurl doi * make.href }
+ { "DOI:{" doi * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pubmed}
+{ pubmed empty$
{ "" }
- { ", cited " lastchecked * }
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
+ if$
+}
+
+% Output a URL. We can't use the more normal idiom (something like
+% `format.url output'), because the `inbrackets' within
+% format.lastchecked applies to everything between calls to `output',
+% so that `format.url format.lastchecked * output' ends up with both
+% the URL and the lastchecked in brackets.
+FUNCTION {output.url}
+{ url empty$
+ 'skip$
+ { new.block
+ format.url output
+ format.lastchecked output
+ }
+ if$
+}
+
+FUNCTION {output.web.refs}
+{
+ new.block
+ output.url
+ addeprints eprint empty$ not and
+ { format.eprint output.nonnull }
+ 'skip$
+ if$
+ adddoiresolver doi empty$ not and
+ { format.doi output.nonnull }
+ 'skip$
+ if$
+ addpubmedresolver pubmed empty$ not and
+ { format.pubmed output.nonnull }
+ 'skip$
+ if$
+}
+
+% Wrapper for output.bibitem.original.
+% If the URL field is not empty, set makeinlinelink to be true,
+% so that an inline link will be started at the next opportunity
+FUNCTION {output.bibitem}
+{ outside.brackets 'bracket.state :=
+ output.bibitem.original
+ inlinelinks url empty$ not and
+ { #1 'makeinlinelink := }
+ { #0 'makeinlinelink := }
+ if$
+}
+
+% Wrapper for fin.entry.original
+FUNCTION {fin.entry}
+{ output.web.refs % urlbst
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
+ "[link]" output.nonnull }
+ 'skip$
if$
+ bracket.state close.brackets = % urlbst
+ { "]" * }
+ 'skip$
+ if$
+ fin.entry.original
+}
+
+% Webpage entry type.
+% Title and url fields required;
+% author, note, year, month, and lastchecked fields optional
+% See references
+% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
+% http://www.classroom.net/classroom/CitingNetResources.html
+% http://neal.ctstateu.edu/history/cite.html
+% http://www.cas.usf.edu/english/walker/mla.html
+% for citation formats for web pages.
+FUNCTION {webpage}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ 'skip$ % author and editor both optional
+ { format.editors output.nonnull }
+ if$
+ }
+ { editor empty$
+ { format.authors output.nonnull }
+ { "can't use both author and editor fields in " cite$ * warning$ }
+ if$
+ }
+ if$
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
+ format.title "title" output.check
+ inbrackets "online" output
+ new.block
+ year empty$
+ 'skip$
+ { format.date "year" output.check }
+ if$
+ % We don't need to output the URL details ('lastchecked' and 'url'),
+ % because fin.entry does that for us, using output.web.refs. The only
+ % reason we would want to put them here is if we were to decide that
+ % they should go in front of the rather miscellaneous information in 'note'.
+ new.block
+ note output
+ fin.entry
}
+% ...urlbst to here
+
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
- format.vol.num.pages output
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
format.date "year" output.check
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
- format.eprint output
new.block
note output
fin.entry
@@ -685,6 +865,7 @@ FUNCTION {book}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -709,6 +890,7 @@ FUNCTION {booklet}
{ output.bibitem
format.authors output
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
howpublished address new.block.checkb
howpublished output
@@ -731,6 +913,7 @@ FUNCTION {inbook}
}
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
@@ -757,6 +940,7 @@ FUNCTION {incollection}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -783,6 +967,7 @@ FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
crossref missing$
@@ -795,11 +980,9 @@ FUNCTION {inproceedings}
organization output
publisher output
format.date "year" output.check
- format.eprint output
}
{ address output.nonnull
format.date "year" output.check
- format.eprint output
new.sentence
organization output
publisher output
@@ -830,6 +1013,7 @@ FUNCTION {manual}
{ format.authors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
author empty$
{ organization empty$
@@ -855,6 +1039,7 @@ FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
"Master's thesis" format.thesis.type output.nonnull
@@ -870,11 +1055,11 @@ FUNCTION {misc}
{ output.bibitem
format.authors output
title howpublished new.block.checkb
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title output
howpublished new.block.checka
howpublished output
format.date output
- format.eprint output
new.block
note output
fin.entry
@@ -885,6 +1070,7 @@ FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
new.block
"PhD thesis" format.thesis.type output.nonnull
@@ -903,6 +1089,7 @@ FUNCTION {proceedings}
{ format.editors output.nonnull }
if$
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.btitle "title" output.check
format.bvolume output
format.number.series output
@@ -935,13 +1122,13 @@ FUNCTION {techreport}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
format.tr.number output.nonnull
institution "institution" output.check
address output
format.date "year" output.check
- format.eprint output
new.block
note output
fin.entry
@@ -951,31 +1138,11 @@ FUNCTION {unpublished}
{ output.bibitem
format.authors "author" output.check
new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
format.title "title" output.check
new.block
note "note" output.check
format.date output
- format.eprint output
- fin.entry
-}
-
-FUNCTION {webpage}
-{ output.bibitem
- author empty$
- { % Need to put something here -- if the title were put here,
- % we'd have a <a> inside a <a>
- key empty$
- { "" }
- { key }
- if$
- "author and key" output.check
- }
- { format.authors "author" output.check }
- if$
- new.block
- format.title "title" output.check
- new.block
- "[Online" format.lastchecked * "]" * output
fin.entry
}
@@ -1161,7 +1328,7 @@ FUNCTION {editor.organization.sort}
if$
}
-FUNCTION {presort.by.author}
+FUNCTION {presort}
{ type$ "book" =
type$ "inbook" =
or
@@ -1189,38 +1356,7 @@ FUNCTION {presort.by.author}
'sort.key$ :=
}
-FUNCTION {presort.by.year}
-{ year field.or.null sortify
-%EDIT2
- sortmonth field.or.null sortify
- *
- " "
- *
- type$ "book" =
- type$ "inbook" =
- or
- 'author.editor.sort
- { type$ "proceedings" =
- 'editor.organization.sort
- { type$ "manual" =
- 'author.organization.sort
- 'author.sort
- if$
- }
- if$
- }
- if$
- *
- " "
- *
- title field.or.null
- sort.format.title
- *
- #1 entry.max$ substring$
- 'sort.key$ :=
-}
-
-ITERATE {presort.by.year}
+ITERATE {presort}
SORT
@@ -1259,6 +1395,7 @@ FUNCTION {begin.bib}
EXECUTE {begin.bib}
+EXECUTE {init.urlbst.variables}
EXECUTE {init.state.consts}
REVERSE {call.type$}
@@ -1269,4 +1406,3 @@ FUNCTION {end.bib}
}
EXECUTE {end.bib}
-
diff --git a/Master/texmf-dist/bibtex/bst/bibhtml/unsrthtml.bst b/Master/texmf-dist/bibtex/bst/bibhtml/unsrthtml.bst
new file mode 100644
index 00000000000..2f31492aefc
--- /dev/null
+++ b/Master/texmf-dist/bibtex/bst/bibhtml/unsrthtml.bst
@@ -0,0 +1,1256 @@
+%% unsrthtml.bst
+%%
+%% Part of bibhtml, version 2.0, released 2009 August 9
+%% Hg node 4a5600417b09.
+%% See <http://purl.org/nxg/dist/bibhtml>
+%%
+%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk>
+%%
+%% This is a modification of a modification!
+%%
+%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/unsrt.bst
+%%% ... by urlbst, version 0.6-4 (marked with "% urlbst")
+%%% See <http://purl.org/nxg/dist/urlbst>
+%%% Added webpage entry type, and url and lastchecked fields.
+%%% Added eprint support.
+%%% Added DOI support.
+%%% Added PUBMED support.
+%%% Added hyperref support.
+%%% Original headers follow...
+
+% BibTeX standard bibliography style `unsrt'
+ % 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
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ eprint % urlbst
+ doi % urlbst
+ pubmed % urlbst
+ url % urlbst
+ lastchecked % urlbst
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform }
+
+STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst...
+INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver }
+% Following constants may be adjusted by hand, if desired
+FUNCTION {init.urlbst.variables}
+{
+ "Available from: " 'urlintro := % prefix before URL
+ "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
+ "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
+ "doi:" 'doiprefix := % text prefix printed before DOI ref
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
+ #1 'addeprints := % 0=no eprints; 1=include eprints
+ #1 'adddoiresolver := % 0=no DOI resolver; 1=include it
+ #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
+ #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing
+ % the following are internal state variables, not config constants
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
+ "" 'openinlinelink := % ditto
+ "" 'closeinlinelink := % ditto
+}
+INTEGERS {
+ bracket.state
+ outside.brackets
+ open.brackets
+ within.brackets
+ close.brackets
+ close.first.block
+}
+% ...urlbst to here
+FUNCTION {init.state.consts}
+{ #0 'outside.brackets := % urlbst
+ #1 'open.brackets :=
+ #2 'within.brackets :=
+ #3 'close.brackets :=
+
+ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+ #0 'close.first.block :=
+}
+
+STRINGS { s t }
+
+% urlbst
+FUNCTION {output.nonnull.original}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ % close the <dt> after the end of the first block
+ close.first.block
+ { "</a></dt>" write$ newline$ "<dd>" write$
+ #0 'close.first.block := }
+ { newline$ }
+ if$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+% urlbst...
+% The following three functions are for handling inlinelink. They wrap
+% a block of text which is potentially output with write$ by multiple
+% other functions, so we don't know the content a priori.
+% They communicate between each other using the variables makeinlinelink
+% (which is true if a link should be made), and closeinlinelink (which holds
+% the string which should close any current link. They can be called
+% at any time, but start.inlinelink will be a no-op unless something has
+% previously set makeinlinelink true, and the two ...end.inlinelink functions
+% will only do their stuff if start.inlinelink has previously set
+% closeinlinelink to be non-empty.
+FUNCTION {possibly.setup.inlinelink}
+{ makeinlinelink
+ { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+ "</a>" 'closeinlinelink :=
+ #0 'makeinlinelink := }
+ 'skip$
+ if$ % makeinlinelink
+}
+FUNCTION {add.inlinelink}
+{ openinlinelink empty$
+ 'skip$
+ { openinlinelink swap$ * closeinlinelink *
+ "" 'openinlinelink :=
+ }
+ if$
+}
+FUNCTION {output.nonnull}
+{ % Save the thing we've been asked to output
+ 's :=
+ % If the bracket-state is close.brackets, then add a close-bracket to
+ % what is currently at the top of the stack, and set bracket.state
+ % to outside.brackets
+ bracket.state close.brackets =
+ { "]" *
+ outside.brackets 'bracket.state :=
+ }
+ 'skip$
+ if$
+ bracket.state outside.brackets =
+ { % We're outside all brackets -- this is the normal situation.
+ % Write out what's currently at the top of the stack, using the
+ % original output.nonnull function.
+ s
+ add.inlinelink
+ output.nonnull.original % invoke the original output.nonnull
+ }
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
+ % new text (in s) to the top of the stack, and move to the close-brackets
+ % state, ready for next time (unless inbrackets resets it). If we come
+ % into this branch, then output.state is carefully undisturbed.
+ bracket.state open.brackets =
+ { " [" * }
+ { ", " * } % bracket.state will be within.brackets
+ if$
+ s *
+ close.brackets 'bracket.state :=
+ }
+ if$
+}
+
+% Call this function just before adding something which should be presented in
+% brackets. bracket.state is handled specially within output.nonnull.
+FUNCTION {inbrackets}
+{ bracket.state close.brackets =
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
+ { open.brackets 'bracket.state := }
+ if$
+}
+
+FUNCTION {format.lastchecked}
+{ lastchecked empty$
+ { "" }
+ { inbrackets "cited " lastchecked * }
+ if$
+}
+% ...urlbst to here
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem.original}
+{ newline$
+ "<dt><a name='" write$
+ cite$ write$
+ "'>[" cite$ * "] " * write$
+ % the <dt> is closed within output.nonnull, as long as close.first.block is true
+ #1 'close.first.block :=
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry.original}
+{ add.period$ "</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$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<em>" swap$ * "</em>" * }
+ 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
+ { "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 * "</em>" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " <span class='cite'>" * crossref * "</span>" *
+}
+
+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 * "</em>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " <span class='cite'>" * crossref * "</span>" *
+}
+
+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 * "</em>" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " <span class='cite'>" * crossref * "</span>" *
+}
+
+% urlbst...
+% Functions for making hypertext links.
+FUNCTION {make.href}
+{
+ "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" *
+}
+
+% If inlinelinks is true, then format.url should be a no-op, since it's
+% (a) redundant, and (b) could end up as a link-within-a-link.
+FUNCTION {format.url}
+{ inlinelinks #1 = url empty$ or
+ { "" }
+ { urlintro "<code>" * url * "</code>" * }
+ if$
+}
+
+FUNCTION {format.eprint}
+{ eprint empty$
+ { "" }
+ { eprintprefix eprint * eprinturl eprint * make.href }
+ if$
+}
+
+FUNCTION {format.doi}
+{ doi empty$
+ { "" }
+ { doiform #0 =
+ { doiprefix doi * doiurl doi * make.href }
+ { "DOI:{" doi * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pubmed}
+{ pubmed empty$
+ { "" }
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
+ if$
+}
+
+% Output a URL. We can't use the more normal idiom (something like
+% `format.url output'), because the `inbrackets' within
+% format.lastchecked applies to everything between calls to `output',
+% so that `format.url format.lastchecked * output' ends up with both
+% the URL and the lastchecked in brackets.
+FUNCTION {output.url}
+{ url empty$
+ 'skip$
+ { new.block
+ format.url output
+ format.lastchecked output
+ }
+ if$
+}
+
+FUNCTION {output.web.refs}
+{
+ new.block
+ output.url
+ addeprints eprint empty$ not and
+ { format.eprint output.nonnull }
+ 'skip$
+ if$
+ adddoiresolver doi empty$ not and
+ { format.doi output.nonnull }
+ 'skip$
+ if$
+ addpubmedresolver pubmed empty$ not and
+ { format.pubmed output.nonnull }
+ 'skip$
+ if$
+}
+
+% Wrapper for output.bibitem.original.
+% If the URL field is not empty, set makeinlinelink to be true,
+% so that an inline link will be started at the next opportunity
+FUNCTION {output.bibitem}
+{ outside.brackets 'bracket.state :=
+ output.bibitem.original
+ inlinelinks url empty$ not and
+ { #1 'makeinlinelink := }
+ { #0 'makeinlinelink := }
+ if$
+}
+
+% Wrapper for fin.entry.original
+FUNCTION {fin.entry}
+{ output.web.refs % urlbst
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
+ "[link]" output.nonnull }
+ 'skip$
+ if$
+ bracket.state close.brackets = % urlbst
+ { "]" * }
+ 'skip$
+ if$
+ fin.entry.original
+}
+
+% Webpage entry type.
+% Title and url fields required;
+% author, note, year, month, and lastchecked fields optional
+% See references
+% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
+% http://www.classroom.net/classroom/CitingNetResources.html
+% http://neal.ctstateu.edu/history/cite.html
+% http://www.cas.usf.edu/english/walker/mla.html
+% for citation formats for web pages.
+FUNCTION {webpage}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ 'skip$ % author and editor both optional
+ { format.editors output.nonnull }
+ if$
+ }
+ { editor empty$
+ { format.authors output.nonnull }
+ { "can't use both author and editor fields in " cite$ * warning$ }
+ if$
+ }
+ if$
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
+ format.title "title" output.check
+ inbrackets "online" output
+ new.block
+ year empty$
+ 'skip$
+ { format.date "year" output.check }
+ if$
+ % We don't need to output the URL details ('lastchecked' and 'url'),
+ % because fin.entry does that for us, using output.web.refs. The only
+ % reason we would want to put them here is if we were to decide that
+ % they should go in front of the rather miscellaneous information in 'note'.
+ new.block
+ note output
+ fin.entry
+}
+% ...urlbst to here
+
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
+ 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
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "<dl>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.urlbst.variables}
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "</dl>" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/Master/texmf-dist/doc/bibtex/bibhtml/README b/Master/texmf-dist/doc/bibtex/bibhtml/README
new file mode 100644
index 00000000000..cdd8f9b5dab
--- /dev/null
+++ b/Master/texmf-dist/doc/bibtex/bibhtml/README
@@ -0,0 +1,14 @@
+Bibhtml consists of a set of BibTeX style files, which allow you to
+use BibTeX to produce bibliographies in HTML. These are modelled
+closely on the standard BibTeX style files.
+
+To accompany them, this package includes a pair of XSLT scripts which
+illustrate how you might integrate these generated bibliographies into
+an XML/HTML workflow.
+
+The long-term URL for this page is http://purl.org/nxg/dist/bibhtml
+
+This distribution contains bibhtml version 2.0, released 2009 August 9.
+
+
+Norman Gray, http://nxg.me.uk
diff --git a/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml
index 4d645bba496..a7edf5fc826 100644
--- a/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml
+++ b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml
@@ -25,14 +25,14 @@
# See the file LICENCE for a copy of the GPL.
# You can also find an online copy at http://www.gnu.org/copyleft/gpl.html .
#
-# $Id: bibhtml.in,v 1.5 2005/09/19 16:18:43 norman Exp $
+# $Id$
#
# See <http://www.astro.gla.ac.uk/users/norman/distrib/bibhtml.html>
# for documentation.
use strict;
-my $version = 'Bibhtml, version 1.3, Norman Gray <norman@astro.gla.ac.uk>, 2006 October 31';
+my $version = 'Bibhtml, version 2.0, Norman Gray <norman@astro.gla.ac.uk>, 2009 August 9';
# configuration...
@@ -439,7 +439,7 @@ sub readconfig {
sub printhelp {
print STDOUT <<\_EOD;
-This is bibhtml version 1.3, 2006 October 31.
+This is bibhtml version 2.0, 2009 August 9.
Usage:
% bibhtml [options...] filename...
diff --git a/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml-extract-aux.xslt b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml-extract-aux.xslt
new file mode 100644
index 00000000000..b630d338e7a
--- /dev/null
+++ b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml-extract-aux.xslt
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ! bibhtml-extract-aux.xslt
+ !
+ ! Part of bibhtml, version 2.0, released 2009 August 9
+ ! Hg Node 4a5600417b09.
+ ! See <http://purl.org/nxg/dist/bibhtml>
+ !
+ ! This sample script processes an XML file which contains elements like
+ ! <span class='cite'>citation</span>, extracting each of the `citation'
+ ! strings and emitting a .aux file which, once a \bibdata line has been
+ ! appended, is suitable for processing with BibTeX. Adapt or extend as
+ ! appropriate.
+ !-->
+<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform"
+ version="1.0"
+ exclude-result-prefixes="h"
+ xmlns:h="http://www.w3.org/1999/xhtml">
+
+ <output method="xml"
+ version="1.0"
+ doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+ omit-xml-declaration="yes"/>
+
+ <template match="/">
+ <text>\relax
+</text>
+ <apply-templates select="//h:span[@class='cite']"/>
+ <apply-templates select='//processing-instruction("bibliography")'/>
+ <!--
+ <call-template name="make-tex-command">
+ <with-param name="command">bibstyle</with-param>
+ <with-param name="content">plainhtml</with-param>
+ </call-template>
+ -->
+ </template>
+
+ <template match="h:span[@class='cite']">
+ <!--
+ <h:a>
+ <attribute name='href'>
+ <text>#</text>
+ <copy-of select='.'/>
+ </attribute>
+ <copy-of select='.'/>
+ </h:a>
+ -->
+ <call-template name="make-tex-command">
+ <with-param name="command">citation</with-param>
+ <with-param name="content">
+ <copy-of select="."/>
+ </with-param>
+ </call-template>
+ </template>
+
+ <template match='processing-instruction("bibliography")'>
+ <choose>
+ <when test='string-length(.) = 0'>
+ <text>% No bibliography file specified!
+</text>
+ </when>
+ <when test='contains(.," ")'>
+ <call-template name='make-tex-command'>
+ <with-param name='command'>bibdata</with-param>
+ <with-param name='content'>
+ <value-of select='substring-before(.," ")'/>
+ </with-param>
+ </call-template>
+ <call-template name='make-tex-command'>
+ <with-param name='command'>bibstyle</with-param>
+ <with-param name='content'>
+ <value-of select='substring-after(.," ")'/>
+ </with-param>
+ </call-template>
+ </when>
+ <otherwise>
+ <call-template name='make-tex-command'>
+ <with-param name='command'>bibdata</with-param>
+ <with-param name='content'>
+ <value-of select='normalize-space(.)'/>
+ </with-param>
+ </call-template>
+ </otherwise>
+ </choose>
+ </template>
+
+ <template name="make-tex-command">
+ <param name="command"/>
+ <param name="content"/>
+ <text>\</text>
+ <value-of select="$command"/>
+ <text>{</text>
+ <value-of select="$content"/>
+ <text>}
+</text>
+ </template>
+
+</stylesheet>
diff --git a/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml-insert-bib.xslt b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml-insert-bib.xslt
new file mode 100644
index 00000000000..fb1d64b319a
--- /dev/null
+++ b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml-insert-bib.xslt
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ! bibhtml-extract-aux.xslt
+ !
+ ! Part of bibhtml, version 2.0, released 2009 August 9
+ ! Hg node 4a5600417b09.
+ ! See <http://purl.org/nxg/dist/bibhtml>
+ !
+ ! This sample script processes an XML file which contains elements like
+ ! <span class='cite'>citation</span>, extracting each of the `citation'
+ ! strings and emitting a .aux file which, once a \bibdata line has been
+ ! appended, is suitable for processing with BibTeX. Adapt or extend as
+ ! appropriate.
+ !-->
+<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform"
+ version="1.0"
+ exclude-result-prefixes="h"
+ xmlns:h="http://www.w3.org/1999/xhtml">
+
+ <output method="xml"
+ version="1.0"
+ doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+ omit-xml-declaration="yes"/>
+
+ <param name='bibfile-name'>bibliography</param>
+
+
+ <!-- identity transform -->
+ <template match="*">
+ <copy>
+ <copy-of select="@*"/>
+ <apply-templates/>
+ </copy>
+ </template>
+
+ <template match="h:span[@class='cite']">
+ <h:a>
+ <attribute name='href'>
+ <text>#</text>
+ <copy-of select='.'/>
+ </attribute>
+ <copy-of select='.'/>
+ </h:a>
+ </template>
+
+ <template match='processing-instruction("bibliography")'>
+ <copy-of select='document(concat($bibfile-name,".bbl"))'/>
+ </template>
+</stylesheet>
diff --git a/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.html b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.html
index 0c76961e2b1..ae24e497a0c 100644
--- a/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.html
+++ b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.html
@@ -1,63 +1,59 @@
-<?xml version="1.0"?> <!-- -*- nxml -*- -->
-
-<!-- $Id: bibhtml.html.in,v 1.10 2006/10/31 15:39:36 norman Exp $ -->
-
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Bibhtml documentation</title>
- <meta name="keywords" content="bibhtml, bibtex, HTML"/>
- <link href="http://nxg.me.uk" rev="author"/>
- <link type="text/css"
- rel="stylesheet"
- href="http://nxg.me.uk/style/base.css"/>
+ <meta name="keywords" content="bibhtml, bibtex, HTML" />
+ <link href="http://nxg.me.uk" rev="author" />
+ <link type="text/css" rel="stylesheet" href="http://nxg.me.uk/style/base.css" />
</head>
<body>
<h1>Bibhtml</h1>
-<div class='abstract'>
+<div class="abstract">
<p><em>Bibhtml</em> consists of a set of BibTeX style files, which
-allow you to use BibTeX to produce bibliographies in HTML. As well,
-it includes a Perl script which orchestrates the various steps
-required to manage such a bibliography for one or more HTML files.
-The references in the text are linked directly to the corresponding
-bibliography entry, and if a URL is defined in the entry within the
-BibTeX database file, then the generated bibliography entry is linked
-to this.</p>
+allow you to use BibTeX to produce bibliographies in HTML. These are
+modelled closely on the standard BibTeX style files.</p>
-<p>This page is <code>http://purl.org/nxg/dist/bibhtml</code></p>
+<p>To accompany them, this package includes a pair of XSLT scripts
+which illustrate how you might integrate these generated
+bibliographies into an XML/HTML workflow.</p>
+
+<p>The long-term URL for this page is <code>http://purl.org/nxg/dist/bibhtml</code></p>
<p>This documentation describes
-<em>bibhtml, version 1.3, 2006 October 31</em>.</p>
+bibhtml version 2.0, released 2009 August 9.</p>
</div>
<h3>Contents</h3>
<ul>
-<li><a href='#usage'>Running <em>bibhtml</em></a>
-<ul>
-<li>The BibTeX database</li>
-<li>Preparing the text</li>
-<li><a href='#pis' >Preparing the bibliography file -- processing
-instructions supported</a></li>
-<li><a href='#options'>Supported options</a></li>
-</ul></li>
-<li><a href='#bst-files'>BibTeX style files</a></li>
-<li><a href='#install'>Installation</a></li>
-<li><a href='#two-pass'>Two-pass bibhtml</a></li>
-<li><a href='#example'>Example</a></li>
-<li><a href='#refs'>References</a></li>
-<li><a href='#dist'>Distribution</a>
- <ul>
- <li><a href='#changes'>Changes</a></li>
- <li><a href='#get'>Obtaining <em>bibhtml</em></a></li>
- <li><a href='#licence'>Licence</a></li>
- </ul>
-</li>
+<li><a href="#bst-files">BibTeX style files</a></li>
+<li><a href="#xslt">XSLT scripts</a></li>
+<li><a href="#postprocess">Postprocessing HTML bibliographies</a></li>
+<li><a href="#install">Installation</a></li>
+<li><a href="#usage">The <em>bibhtml</em> script</a></li>
+<li><a href="#example">Example</a></li>
+<li><a href="#refs">References</a></li>
+<li><a href="#dist">Distribution, licence and source code</a></li>
</ul>
<p><em>Bibhtml</em> consists of a set of BibTeX style files, which
-allow you to use BibTeX to produce bibliographies in HTML. As well,
+allow you to use BibTeX to produce bibliographies in HTML. These are
+modelled closely on the standard BibTeX style files.</p>
+
+<p>To accompany them, this package includes a pair of XSLT scripts
+which illustrate how you might integrate these generated
+bibliographies into an XML/HTML workflow.</p>
+
+<p>The output of these style files is usable as-is, but it benefits
+from some post-processing, to remove TeX-isms. There's a <em>sed</em>
+script in the distribution which does exactly that, called
+<code>detex.sed</code>. If you want to make a version of that im some
+other regexp-supporting language, let me know and I can include it in
+the distribution.</p>
+
+<p>As well,
it includes a Perl script which orchestrates the various steps
required to manage such a bibliography for one or more HTML files.
The references in the text are linked directly to the corresponding
@@ -65,36 +61,173 @@ bibliography entry, and if a URL is defined in the entry within the
BibTeX database file, then the generated bibliography entry is linked
to this.</p>
-<p>The BibTeX style files are <code>plainhtml.bst</code> and
-<code>alphahtml.bst</code>, which are derived from the standard files
-<code>plain.bst</code> and <code>alpha.bst</code>. As well, there are
+<p>The BibTeX style files are
+<code>abbrvhtml.bst</code>,
+<code>alphahtml.bst</code>,
+<code>plainhtml.bst</code> and
+<code>unsrthtml.bst</code>.
+As well, there are
<code>.bst</code> files which produce their output in date order. To
use them, you should generate an <code>.aux</code> file by some
appropriate means, and include the line
<code>\bibstyle{plainhtml}</code>. Run BibTeX, and the result is a
-<code>.bbl</code> file, in broadly the `plain' style, but formatted
+<code>.bbl</code> file, in broadly the same style as the corresponding
+traditional BibTeX one, but formatted
using HTML rather than LaTeX. This might form a useful component of a
XSLT-based workflow. For further details, see the discussion of the
-style files <a href="#bst-files" >below</a>.</p>
-
-<p>The <em>bibhtml</em> script can orchestrate generating and using
-this <code>.aux</code> file, and you can specify the style file to use
-either with the <a href="#opt-s"><code>-s</code> option</a>, or with
-the processing instructions described <a href="#pis" >below</a>.</p>
-
-<h2><a name='usage'>Running <em>bibhtml</em></a></h2>
+style files <a href="#bst-files">below</a>.</p>
-<h3>The BibTeX database</h3>
+<p>There is also a Perl script, <em>bibhtml</em>, which can orchestrate generating and using
+this <code>.aux</code> file. This script isn't really maintained any
+more, but it is still distributed, and documented <a href="#usage">below</a>.</p>
<p><em>Bibhtml</em> works with a standard BibTeX database -- it is
intended to be compatible with a database used in the standard way
-with LaTeX. The <a href="#bst-files" >BibTeX style files</a>
+with LaTeX. The <a href="#bst-files">BibTeX style files</a>
distributed with this package define an additional
<code>url</code> field: if this is present, then the generated entry
will contain a link to this URL. They also define an
<code>eprint</code> field -- if you do not use the LANL preprint
archive, this will be of no interest to you.</p>
+<h2><a name="bst-files" id="bst-files">BibTeX style files</a></h2>
+
+<p>The package includes several BibTeX style files. As well as the
+ones directly derived from the standard styles, there are also <code>plainhtmldate.bst</code> and
+<code>plainhtmldater.bst</code>, which are derived from the standard
+<code>plain.bst</code> which sort the
+output by date and reverse date, rather than by author.</p>
+
+<p>In version 2 of the <em>bibhtml</em> package, the
+<code>*html.bst</code> files are derived from the traditional files
+using the <a href="http://purl.org/nxg/dist/urlbst">urlbst</a>
+package, and then minimally adjusted so as to produce HTML rather than
+LaTeX.</p>
+
+<p>Since they are derived via the <em>urlbst</em> package, these style
+files support an additional entry type, <code>@webpage</code>, and two
+additional fields on all entry types, <code>url</code> and
+<code>lastchecked</code>, which give the URL associated with the
+reference, and the date at which the URL was last verified to be still
+present.</p>
+
+<p>The distributed <code>.bst</code> files have two configurable
+parameters, which you might want to adjust for your installation:</p>
+
+<p>The variable <code>'xxxmirror</code> gives the host name of the arXiv mirror which will be used
+when generating links to eprints. The default setting in the
+<code>.bst</code> files is:</p>
+<pre>
+"xxx.arxiv.org" 'xxxmirror :=
+</pre>
+
+<p>By default, the style files generate link targets in the
+bibliography with the same name as the citation key. Thus a BibTeX
+entry with key <code>surname99</code>, say, would appear in the
+generated HTML <code>.bbl</code> file wrapped in <code>&lt;a
+name="surname99"&gt;...&lt;/a&gt;</code>. If this is inconvenient,
+perhaps because it conflicts with other links within the file,
+then you can adjust the <code>'hrefprefix</code> variable within the
+style file, to specify a prefix which should appear in the link key.
+Thus setting</p>
+<pre>
+"ref:" 'hrefprefix :=
+</pre>
+<p>in the <code>.bst</code> file would produce links like <code>&lt;a
+name="ref:surname99"&gt;...&lt;/a&gt;</code> in the <code>.bbl</code>
+file.</p>
+
+<h2><a name="xslt" id="xslt">XSLT scripts</a></h2>
+
+<p>The distribution includes a pair of sample XSLT scripts:</p>
+<ul>
+<li><code>bibhtml-extract-aux.xslt</code> shows how you might use XSLT to
+extract citations from a source file into an <code>.aux</code>
+file, for processing into a <code>.bbl</code> file;</li>
+<li><code>bibhtml-insert-bib.xslt</code> shows how you might use XSLT
+to insert the resulting <code>.bbl</code> file into the original
+file.</li>
+</ul>
+
+<p>The scripts assume that a source file is in XHTML, and has
+citations marked up as</p>
+<pre>
+&lt;span class='cite'&gt;ref99&lt;/span&gt;
+</pre>
+<p>and that the bibliography is indicated with</p>
+<pre>
+&lt;?bibliography <em>bibdata</em> <em>bibstyle</em>?&gt;
+</pre>
+<p>A suitable workflow, taking as an example the source file for the
+page you are reading, is:</p>
+<pre>
+% xsltproc bibhtml-extract-aux.xslt bibhtml.html &gt;bibhtml.aux
+% bibtex bibhtml
+This is BibTeX, Version 0.99c (Web2C 7.5.7)
+The top-level auxiliary file: bibhtml.aux
+The style file: unsrthtml.bst
+Database file #1: bibrefs.bib
+% sed -f detex.sed bibhtml.bbl &gt;bibhtml.bbl.tmp
+% mv bibhtml.bbl.tmp bibhtml.bbl
+% xsltproc --stringparam bibfile-name bibhtml \
+ bibhtml-insert-bib.xslt bibhtml.html &gt;bibhtml-new.html
+</pre>
+
+<p>The <code>bibhtml.xslt</code> script, when run over a source file,
+generates a <code>.aux</code> suitable for processing with BibTeX.
+The resulting <code>.bbl</code> file, possibly after
+<a href="#postprocessing">post-processing</a>, can be included in the
+source XHTML with an XSLT script which includes something like:</p>
+<pre>
+&lt;xsl:template select="processing-instruction('bibliography')"&gt;
+ &lt;xsl:copy-of select="document('mybib.bbl')"/&gt;
+&lt;/xsl:template&gt;
+</pre>
+
+<h2><a name="postprocess" id="postprocess">Postprocessing HTML bibliographies</a></h2>
+
+<p>The output of the BibTeX styles is designed so that it is generally
+reasonably usable without any post-processing. However it is not
+ideal, since there are occasionaly TeX-isms such as backslash-escaped
+characters and the like, depending on what is in the source
+<code>.bib</code> file. Also, without post-processing any DOIs in
+the source file aren't formed into links.</p>
+
+<p>The distribution includes a <code>sed</code> file,
+<code>detex.sed</code>, which can do appropriate post-processing.
+Thus the normal workflow is:</p>
+<pre>
+% bibtex mydoc
+% sed -f detex.sed mydoc.bbl &gt;mydoc.bbl.tmp
+% mv mydoc.bbl.tmp mydoc.bbl
+</pre>
+<p>Since it uses <code>sed</code>, this is fairly obviously
+unix-specific, but if anyone would like to contribute a script with
+similar functionality (it's just a few moderately tortuous regular
+expressions), I'd be delighted to include it in the distribution.</p>
+
+<h2><a name="install" id="install">Installation</a></h2>
+
+<p>The <code>.bst</code> files have to be installed
+<a href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=inst-wlcf">&#x2018;somewhere where LaTeX can find them&#x2019;</a>. If you give the command
+<code>kpsepath bst</code> you can see the list of directories that
+BibTeX searches for <code>.bst</code> files &#x2013; on my system, I'd put
+them into <code>/usr/local/texlive/texmf-local/bibtex/bst</code>,
+which is a directory for system-wide local additions.</p>
+
+<p>If you wish, you may change the distributed BibTeX style files (see
+<a href="#bst-files">above</a>) to the extent of changing the
+`eprint' mirror site from the master <code>xxx.arxiv.org</code> to a
+more local mirror. If you don't use the LANL preprint archive, this
+will be of no interest to you.</p>
+
+<h2><a name="usage" id="usage">The <em>bibhtml</em> script</a></h2>
+
+<p>As noted above, this script should still work and is distributed on
+that basis, but it's no longer maintained, and won't be further developed.</p>
+
+<h3>The BibTeX database</h3>
+
<p>TeX features such as <code>~</code> and <code>--</code> are translated to
corresponding HTML entities (controlled with the <code>+3</code>
switch, see below), but other TeX constructions will make their way
@@ -113,7 +246,7 @@ it. When you run <em>bibhtml</em>, it generates an
<code>.aux</code> file which makes BibTeX produce references for exactly those
keys which appear in this way. </p>
-<h3><a name="pis" >Preparing the bibliography file -- processing
+<h3><a name="pis" id="pis">Preparing the bibliography file -- processing
instructions supported</a></h3>
<p>The bibliography file is an ordinary HTML document (which may
@@ -139,7 +272,7 @@ generated file (perhaps the output of a separate XML tool-chain, for
example), which will not therefore have to be rescanned in future.</p>
<p>You can specify the bibliography database and style file either on
-the command line (see <a href="#options" >below</a>) or using the
+the command line (see <a href="#options">below</a>) or using the
<code>&lt;?bibhtml bibdata </code><em>bibfile</em><code>?&gt;</code>
and <code>&lt;?bibhtml bibstyle</code><em>stylefile</em><code>?&gt;</code> instructions. The
value of `bibdata' is cumulative, and appends to any value specified
@@ -177,7 +310,7 @@ command in a LaTex file; see also the <code>-s</code> command-line option.</dd>
<dd>Replace the <em>following</em> line by today's date.</dd>
</dl>
-<h3><a name='options'>Supported options</a></h3>
+<h3><a name="options" id="options">Supported options</a></h3>
<p><em>Usage</em></p>
<pre>
@@ -211,13 +344,13 @@ database. This is equivalent to <code>\nocite{*}</code> in LaTeX.</dd>
<code>\bibliography{}</code> command in LaTeX. Unless <em>you</em> happen to
keep all your references in a file called <code>bib.bib</code>, you'll
probably want to change this. Or you can use the <code>&lt;?bibhtml
-bibdata xxx?&gt;</code> <a href="#pis" >processing instruction</a>.</dd>
+bibdata xxx?&gt;</code> <a href="#pis">processing instruction</a>.</dd>
<dt>-c configfile</dt>
<dd>Specifies a configuration file which contains a single line of
options, which are inserted in the command line at that point.</dd>
-<dt><a name='merge'>--merge</a></dt>
+<dt><a name="merge" id="merge">--merge</a></dt>
<dd>In this special case, <em>bibhtml</em> takes two arguments, a
<code>.bbl</code> file and an <code>.html</code> file,
merges the first into the second, and nothing else. It's
@@ -232,7 +365,7 @@ other post-processing system.</dd>
<code>rootname.aux</code> and so on. Why not just stick with the default
`bibliography'...? </dd>
-<dt><a name='opt-s'>-s bibstyle</a></dt>
+<dt><a name="opt-s" id="opt-s">-s bibstyle</a></dt>
<dd>The name of the BibTeX bibliography style you want to use, as it
would be specified for the <code>\bibstyle</code> command in
LaTeX. If you want to have a different layout for your HTML
@@ -241,9 +374,9 @@ distributed with bibhtml. Instead, make a <em>copy</em> of
plainhtml.bst under a different name, edit it as much as you
like, and use this option of bibhtml to use the modified
version instead of the default. Or you can use the <code>&lt;?bibhtml
-bibstyle xxx?&gt;</code> <a href='#pis' >processing instruction</a>.</dd>
+bibstyle xxx?&gt;</code> <a href="#pis">processing instruction</a>.</dd>
-<dt><a name='strip'>--strip</a></dt>
+<dt><a name="strip" id="strip">--strip</a></dt>
<dd>If this option is set, then strip all processing-instruction lines
from the output file. This means that the resulting file cannot be
processed again by <em>bibhtml</em>, and so is appropriate when the
@@ -273,80 +406,7 @@ file might contain:</p>
-b mybib +3 -r refs
</pre>
-<h2><a name='bst-files'>BibTeX style files</a></h2>
-
-<p><em>bibhtml</em> depends on several BibTeX style files.
-<code>plainhtml.bst</code>, <code>plainhtmldate.bst</code> and
-<code>plainhtmldater.bst</code> are derived from the standard
-<code>plain.bst</code>. All produce HTML, but the latter two sort the
-output by date and reverse date, rather than by author.
-<code>alphahtml.bst</code> and friends were derived from the standard
-<code>alpha.bst</code>, and contributed to the package, by Franz
-G. Fischer, <code>Franz.Fischer@lpr.e-technik.tu-muenchen.de</code>,
-to whom thanks are due.</p>
-
-<p>These style files support an additional entry type,
-<code>@webpage</code>, and two additional fields on all entry types,
-<code>url</code> and <code>lastchecked</code>, which give the URL
-associated with the reference, and the date at which the URL was last
-verified to be still present. See also the <a
-href="http://purl.org/nxg/dist/urlbst" ><code>urlbst</code>
-package</a>, which performs a different role, but implements the same
-BibTeX extensions.</p>
-
-<p>Although these style files are distributed as part of
-<em>bibhtml</em> they are also useful in isolation, as part of a
-larger system which generates HTML.</p>
-
-<p>The distribution includes a sample XSLT script,
-<code>bibhtml.xslt</code> which shows how you might use XSLT to
-extract citations from a source file into an <code>.aux</code>
-file.</p>
-
-<p>The distributed <code>.bst</code> files have two configurable
-parameters, which you might want to adjust for your installation:</p>
-
-<p>The variable <code>'xxxmirror</code> gives the host name of the arXiv mirror which will be used
-when generating links to eprints. The default setting in the
-<code>.bst</code> files is:</p>
-<pre>
-"xxx.arxiv.org" 'xxxmirror :=
-</pre>
-
-<p>By default, the style files generate link targets in the
-bibliography with the same name as the citation key. Thus a BibTeX
-entry with key <code>surname99</code>, say, would appear in the
-generated HTML <code>.bbl</code> file wrapped in <code>&lt;a
-name="surname99"&gt;...&lt;/a&gt;</code>. If this is inconvenient,
-perhaps because it conflicts with other links within the file,
-then you can adjust the <code>'hrefprefix</code> variable within the
-style file, to specify a prefix which should appear in the link key.
-Thus setting</p>
-<pre>
-"ref:" 'hrefprefix :=
-</pre>
-<p>in the <code>.bst</code> file would produce links like <code>&lt;a
-name="ref:surname99"&gt;...&lt;/a&gt;</code> in the <code>.bbl</code>
-file.</p>
-
-<h2><a name='install'>Installation</a></h2>
-
-<p>Nothing to it.... On Unix, for example, put <em>bibhtml</em>
-somewhere in your path and make it executable (<code>chmod u+x
-bibhtml</code>), and put <code>*.bst</code> somewhere BibTeX
-will find it (this means either looking at the
-environment variable <code>BSTINPUTS</code>, or running the command
-<kbd>kpsepath bst</kbd>, if you have it). If you want to use the <a
-href="#two-pass">two-pass variant</a> of the program, then make a symbolic
-link with <code>ln -s bibhtml bibhtml2</code>.</p>
-
-<p>If you wish, you may change the distributed BibTeX style files (see
-<a href="#bst-files" >above</a>) to the extent of changing the
-`eprint' mirror site from the master <code>xxx.arxiv.org</code> to a
-more local mirror. If you don't use the LANL preprint archive, this
-will be of no interest to you.</p>
-
-<h2><a name='two-pass'>Two-pass bibhtml</a></h2>
+<h3><a name="two-pass" id="two-pass">Two-pass bibhtml</a></h3>
<p>You might sometimes have a need to invoke the
two phases separately. If you make a symbolic link to the program via
@@ -363,87 +423,93 @@ is being merged with, (and so it is more robust, and more flexible).</p>
detect the name it was invoked under. This may be more difficult on other
platforms. If so, please get in touch, with suggestions. </p>
-
-<h2><a name='example'>Example</a></h2>
+<h2><a name="example" id="example">Example</a></h2>
<p>There are multiple sources of advice for how to cite electronic
-documents. The most formal are an ISO standard <a
-href="bibhtml.html#iso690">[ISO 690-2]</a>, and the American
-Psychological Association's guidance <a href="bibhtml.html#apa03"
->[APA 2003]</a>. As well, there are older, but still useful
-discussions in
-<a href="bibhtml.html#walker95">Walker</a> and
-<a href="bibhtml.html#emory95">Emory</a>.</p>
-
-<p>We also include here a <a href="bibhtml.html#test" >test</a> entry,
-which has some odd characters in the title and URL.</p>
+documents. The most formal are an ISO standard <a href="#url:iso690"><span class="cite">url:iso690</span></a>, and the American Psychological
+Association's guidance in Sect. 6.31 of <a href="#apastyle"><span class="cite">apastyle</span></a>. As well, there are older, but still
+useful discussions in <a href="#walker06"><span class="cite">walker06</span></a> and <a href="#emory95"><span class="cite">emory95</span></a>.</p>
-<p>This file was processed with the command <code>bibhtml -r bibhtml
-bibhtml.html</code> to produce the document you are reading now.</p>
-
-<h2><a name='refs'>References</a></h2>
-
-<?bibhtml start?>
-<dl>
-
-<dt><a name="apa03">[apa03] American Psychological Society.</a></dt> <dd>
- <a href="http://www.apastyle.org/elecref.html"
->APA style: Electronic
- references</a>.
- [Online, cited September 2005].
-</dd>
+<h2><a name="refs" id="refs">References</a></h2>
-<dt><a name="test">[test] A. N. Experimenter.</a></dt> <dd>
- <a
- href="http://www.example.org/%7etilde/query?arg1=%1e&amp;arg2=one;two&amp;moreargswhichmaketheurlquitelong"
->bibhtml tests - how do we handle odd ( &amp;)
- characters?</a>.
- This is a test entry.
-</dd>
+<dl xmlns="">
-<dt><a name="iso690">[iso690] ISO 690-2.</a></dt> <dd>
- <a href="http://www.collectionscanada.ca/iso/tc46sc9/standard/690-2e.htm"
+<dt><a name="url:iso690" id="url:iso690">[url:iso690]
+International Standards Organisation.</a></dt>
+<dd><a href="http://en.wikipedia.org/wiki/ISO_690">ISO 690-2</a> [online,
+ cited 9 August 2009].</dd>
- >ISO 690-2, bibliographic references to electronic documents
- (excerpts)</a>.
- [Online, cited September 2005].
-</dd>
+<dt><a name="apastyle" id="apastyle">[apastyle]
+American Psychological Association.</a></dt>
+<dd><a href="http://www.apastyle.org/manual/index.aspx"><em>Publication Manual
+ of the American Psychological Association</em></a>, 6th edition, 2009 [cited
+ 9 August 2009].</dd>
-<dt><a name="emory95">[emory95] libsf@web.cc.emory.edu.</a></dt> <dd>
- <a href="http://www.cc.emory.edu/WHSCL/citation.formats.html"
->Citation
- formats</a>.
- [Online].
-</dd>
+<dt><a name="walker06" id="walker06">[walker06]
+Janice R. Walker and Todd Taylor.</a></dt>
+<dd><a href="http://cup.columbia.edu/book/978-0-231-13210-7/the-columbia-guide-to-online-style"><em>The Columbia Guide to Online Style</em></a>.
+Columbia University Press, 2nd edition, 2006 [cited 9 August 2009].</dd>
-<dt><a name="walker95">[walker95] Janice R Walker.</a></dt> <dd>
- <a href="http://www.columbia.edu/cu/cup/cgos/idx_basic.html"
->MLA-style
- citations of electronic sources</a>.
- Technical Report 4/95, Department of English, University of South Florida,
- January 1995.
- Endorsed by the Alliance for Computers and Writing.
-</dd>
+<dt><a name="emory95" id="emory95">[emory95]
+Goizueta Business Library.</a></dt>
+<dd><a href="http://business.library.emory.edu/eresources/citing.html">Citation
+ formats</a> [online, cited 9 August 2009].</dd>
</dl>
-<?bibhtml end?>
-<?bibhtml bibdata bibrefs?>
-<?bibhtml bibstyle plainhtml?>
-<p>See also the documentation for the <a
-href="http://purl.org/nxg/dist/urlbst" ><code>urlbst</code>
+<p>See also the documentation for the <a href="http://purl.org/nxg/dist/urlbst"><code>urlbst</code>
package</a>, which generates BibTeX style files for ordinary LaTeX
output (which also supports a <code>@webpage</code> entry type, and
<code>url</code> and <code>lastchecked</code> fields), and which
contains a similar list of references concerned with citing online
sources.</p>
-<h2><a name='dist'>Distribution</a></h2>
+<h2><a name="dist" id="dist">Distribution</a></h2>
+
+<h3><a name="get" id="get">Obtaining <em>bibhtml</em></a></h3>
+
+<p>Bibhtml is available on CTAN at
+<a href="http://www.ctan.org/tex-archive/biblio/bibtex/contrib/bibhtml/"><code>biblio/bibtex/contrib/bibhtml/</code></a>,
+and at
+<a href="http://purl.org/nxg/dist/bibhtml"><code>http://purl.org/nxg/dist/bibhtml</code></a>.</p>
+
+<p>Download the distribution:
+<a href="bibhtml-2.0.tar.gz">bibhtml-2.0.tar.gz</a> or
+<a href="bibhtml-2.0.zip">bibhtml-2.0.zip</a>.</p>
+
+<p>Do <a href="mailto:norman@astro.gla.ac.uk">let me know</a> if
+you use this stuff. I'd be grateful for any bug reports,
+and bug fixes, and also for any comments on the clarity or
+otherwise of this documentation.</p>
+
+<p>The project source code is
+<a href="http://bitbucket.org/nxg/bibhtml/">hosted at bitbucket.org</a>.
+You can check out the source code from there, and you are welcome to
+add issues to the bugparade.</p>
+
+<h3><a name="licence" id="licence">Licence</a></h3>
+
+<p>This software is copyright, 1999, 2005, 2006, 2009, Norman Gray. It is released
+under the terms of the GNU General Public Licence. See the copyright
+declaration at the top of file <code>bibhtml</code>, and the file
+<code>LICENCE</code> for the licence conditions. You can find an
+online copy of the GPL at <code><a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a></code>.</p>
+
+<p>If this licence is a problem for you, get in touch and we can work something out.</p>
-<h3><a name='changes'>Changes</a></h3>
+<h3><a name="changes" id="changes">Changes</a></h3>
<dl>
+<dt>2.0, 2009 August 9</dt>
+<dd>First real release of v2.0, after mild use elsewhere.</dd>
+
+<dt>2.0b1, 2009 August 9</dt>
+<dd>Substantial rewrite, taking the style files from the urlbst
+package (thus there are more styles than before), adding more XSLT
+scripts, and de-emphasising the Perl script. The code is now
+<a href="http://bitbucket.org/nxg/bibhtml/">hosted at bitbucket.org</a>.</dd>
+
<dt>1.3, 2006 October 31</dt>
<dd><ul>
<li>Add <code>hrefprefix</code> parameterisation to style files.</li>
@@ -487,35 +553,9 @@ inserts the bibliography in-place.</li>
</dd>
</dl>
-<h3><a name='get'>Obtaining <em>bibhtml</em></a></h3>
-
-<p>Bibhtml is available on CTAN at
-<a href="http://www.ctan.org/tex-archive/biblio/bibtex/contrib/bibhtml/"
- ><code>biblio/bibtex/contrib/bibhtml/</code></a>,
-and at
-<a href="http://purl.org/nxg/dist/bibhtml" ><code>@HOMEPAGE</code></a>.</p>
-
-<p>Download the distribution:
-<a href="bibhtml-1.3.tar.gz">bibhtml-1.3.tar.gz</a>.</p>
-
-<p>Do <a href="mailto:norman@astro.gla.ac.uk">let me know</a> if
-you use this stuff. I'd be grateful for any bug reports,
-and bug fixes, and also for any comments on the clarity or
-otherwise of this documentation.</p>
-
-<h3><a name='licence'>Licence</a></h3>
-
-<p>This software is copyright, 1999, 2005, Norman Gray. It is released
-under the terms of the GNU General Public Licence. See the copyright
-declaration at the top of file <code>bibhtml</code>, and the file
-<code>LICENCE</code> for the licence conditions. You can find an
-online copy of the GPL at <code><a
-href="http://www.gnu.org/copyleft/gpl.html"
->http://www.gnu.org/copyleft/gpl.html</a></code>.</p>
-
<div class="signature">
-<a href="http://purl.org/nxg">Norman</a><br/>
-2006 October 31
+<a href="http://nxg.me.uk">Norman</a><br />
+2009 August 9
</div>
</body>
diff --git a/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.xslt b/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.xslt
deleted file mode 100644
index 0980890f171..00000000000
--- a/Master/texmf-dist/doc/bibtex/bibhtml/bibhtml.xslt
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ! bibhtml.xslt
- !
- ! Part of bibhtml, version 1.3, released 2006 October 31
- ! See <http://purl.org/nxg/dist/bibhtml>
- !
- ! This sample script processes an XML file which contains elements like
- ! <span class='cite'>citation</span>, extracting each of the `citation'
- ! strings and emitting a .aux file which, once a \bibdata line has been
- ! appended, is suitable for processing with BibTeX. Adapt or extend as
- ! appropriate.
- !
- ! $Revision: 1.1 $
- !-->
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform"
- version="1.0"
- exclude-result-prefixes="h"
- xmlns:h="http://www.w3.org/1999/xhtml">
-
- <x:output method="xml"
- version="1.0"
- doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
- doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
- omit-xml-declaration="yes"/>
-
- <x:template match="/">
- <x:apply-templates select="//h:span[@class='cite']"/>
- <x:call-template name="make-tex-command">
- <x:with-param name="command">bibstyle</x:with-param>
- <x:with-param name="content">plainhtml</x:with-param>
- </x:call-template>
- </x:template>
-
- <x:template match="h:span[@class='cite']">
- <x:call-template name="make-tex-command">
- <x:with-param name="command">citation</x:with-param>
- <x:with-param name="content">
- <x:copy-of select="."/>
- </x:with-param>
- </x:call-template>
- </x:template>
-
- <x:template name="make-tex-command">
- <x:param name="command"/>
- <x:param name="content"/>
- <x:text>\</x:text>
- <x:value-of select="$command"/>
- <x:text>{</x:text>
- <x:value-of select="$content"/>
- <x:text>}
-</x:text>
- </x:template>
-
-</x:stylesheet>
diff --git a/Master/texmf-dist/doc/bibtex/bibhtml/bibrefs.bib b/Master/texmf-dist/doc/bibtex/bibhtml/bibrefs.bib
new file mode 100644
index 00000000000..76fef8e5c52
--- /dev/null
+++ b/Master/texmf-dist/doc/bibtex/bibhtml/bibrefs.bib
@@ -0,0 +1,221 @@
+% Webpage with lastchecked and date
+@webpage{url:weapas,
+ url = {http://www.beadsland.com/weapas/},
+ title = {Web Extension to {American Psychological Association} Style ({WEAPAS}) (Rev.2.0)},
+ author = {B Land},
+ year = 2001,
+ month = jul,
+ lastchecked = {16 June 2008}
+}
+
+
+
+@Manual{apastyle,
+ title = {Publication Manual of the American Psychological
+ Association},
+ organization = {{American Psychological Association}},
+ edition = {6th},
+ year = 2009,
+ lastchecked = {9 August 2009},
+ url = {http://www.apastyle.org/manual/index.aspx}
+}
+
+@webpage{url:iso690,
+ author = {{International Standards Organisation}},
+ title = {{ISO 690-2}},
+ url = {http://en.wikipedia.org/wiki/ISO_690},
+ lastchecked = {9 August 2009}
+}
+
+% This one appears to be dead
+@Webpage{gone:classroom96,
+ title = {Citing Internet Addresses: how students should
+ reference online sources in their bibliographies},
+ year = 1996,
+ month = mar,
+ key = {Classroom},
+ url = "http://www.classroom.net/classroom/CitingNetResources.html"
+}
+
+@Webpage{emory95,
+ author = {{Goizueta Business Library}},
+ title = "Citation Formats",
+ date = {1997},
+ lastchecked = {9 August 2009},
+ url = {http://business.library.emory.edu/eresources/citing.html}
+}
+
+@Book{walker06,
+ author = {Janice R. Walker and Todd Taylor},
+ title = {The Columbia Guide to Online Style},
+ publisher = {Columbia University Press},
+ year = 2006,
+ edition = {2nd},
+ isbn = {978-0-231-13211-4},
+ url = {http://cup.columbia.edu/book/978-0-231-13210-7/the-columbia-guide-to-online-style},
+ lastchecked = {9 August 2009}
+}
+
+% this one appears to be dead
+@Webpage{walker-orig,
+ title = {{MLA}-Style Citations of Electronic Sources},
+ author = {Janice R. Walker},
+ url = {http://www.cas.usf.edu/english/walker/mla.html},
+ year = 1995,
+ lastchecked = {23 October 2002},
+ note = {Updated and superceded by \cite{walker}}
+}
+
+@Webpage{texfaq,
+ url = {http://www.tex.ac.uk/cgi-bin/texfaq2html?label=citeURL},
+ title = {{UK \TeX\ FAQ: URLs in BibTeX bibliographies}},
+ key = {UK TeX FAQ},
+ editor = {Robin Fairbairns},
+ year = 2002,
+ lastchecked = {16 June 2008}
+}
+
+
+
+@Webpage{url:daly,
+ url = {http://www.tex.ac.uk/tex-archive/macros/latex/contrib/custom-bib/},
+ title = {Index of custom-bib},
+ author = {Patrick W Daly},
+ year = 2003,
+ lastchecked = {4 June 2003}
+}
+
+% Following are test entries
+
+% Article with URL and lastchecked
+@article{test:towell,
+ title = {Presence in Text-Based Networked Virtual
+ Environments or `{MUDs}'},
+ author = {John Towell and Elizabeth Towell},
+ journal = {Presence},
+ volume = 6,
+ number = 5,
+ pages = {590-595},
+ year = 1997,
+ url = {http://www-unix.mcs.anl.gov/~towell/presence.html},
+ lastchecked = {13 February 2002}
+}
+
+% Book with URL, lastchecked, and note.
+@Book{test:raymond99,
+ author = {Eric S Raymond},
+ title = {The Cathedral and the Bazaar},
+ publisher = {O'Reilly},
+ year = 1999,
+ url = {http://www.tuxedo.org},
+ isbn = {1-56592-724-9},
+ lastchecked = {1 April 2002},
+ note = {The seminal book on the commercialisation of open-source}
+}
+
+% Plain book, no URLs at all
+@book{test:laurillard93,
+ author = {Diana Laurillard},
+ title = {Rethinking University Teaching},
+ publisher = {Routledge},
+ year = 1993
+}
+
+% Webpage with lastchecked but no date
+@webpage{test:iso690,
+ author = {{International Standards Organisation}},
+ title = {{ISO 690-2}},
+ url = {http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm},
+ lastchecked = {20 August 2001}
+}
+
+% Webpage with date but no lastchecked
+@Webpage{test:classroom96,
+ title = {Citing Internet Addresses: how students should
+ reference online sources in their bibliographies},
+ year = 1996,
+ month = mar,
+ key = {Classroom},
+ url = "http://www.classroom.net/classroom/CitingNetResources.html"
+}
+
+% Webpage with neither date nor lastchecked
+@Webpage{test:emory95,
+ author = "libsf@web.cc.emory.edu",
+ title = "Citation Formats",
+ url = "http://www.emory.edu/WHSCL/citation.formats.html"
+}
+
+% The same, but with no title either
+@Webpage{test:emory95x,
+ author = "libsf@web.cc.emory.edu",
+ url = "http://www.emory.edu/WHSCL/citation.formats.html"
+}
+
+% Article with eprint number
+@techreport{test:simkin,
+ author = {Mikhail Simkin and V. P. Roychowdhury},
+ title = {Read before you cite!},
+ year = 2002,
+ institution = {UCLA},
+ eprint = {cond-mat/0212043}
+}
+
+% Article with a DOI
+% an underscore
+@article{test:gray00c,
+ author = "Norman Gray",
+ title = "Automatic Reduction of Elliptic Integrals using
+ {Carlson's} Relations",
+ journal = {Mathematics of Computation},
+ volume = 71,
+ pages = {311-318},
+ year = 2002,
+ doi = {10.1090/S0025-5718-01-01333-3}
+}
+
+% Article with a PUBMED reference
+
+
+@Article{test:giffin03,
+ author = {M J Giffin and J C Stroud and D L Bates and von Koenig, K D and J Hardin and L Chen},
+ title = {Structure of {NFAT1} Bound as a Dimer to the {HIV-1 LTR} kappa {B} element},
+ journal = {Nature Structural Biology},
+ year = {2003},
+ volume = {10},
+ number = {10},
+ pages = {800-6},
+ month = oct,
+ pubmed = {12949493}
+}
+
+@ARTICLE{test:nastydoi,
+ author = {Zemla, Adam and Venclovas, Ceslovas and Moult, John and
+ Fidelis, Krzysztof},
+ title = {{P}rocessing and analysis of {CASP}3 protein structure predictions},
+ journal = {Proteins: Structure, Function, and Genetics},
+ year = {1999},
+ volume = {37},
+ pages = {22--29},
+ number = {S3},
+ month = jan,
+ comment = {Description of GDT measure.},
+ doi = {10.1002/(SICI)1097-0134(1999)37:3+<22::AID-PROT5>3.0.CO;2-W},
+ keywords = {CASP},
+ timestamp = {2007-03-13}
+}
+
+% Example from Jason Eisner, by mail (nothing special about the entry,
+% but he seemed to be having formatting problems with unsrturl and proceedings
+% entries.
+@InProceedings{test:eisner-sample,
+ author = {Damianos Karakos and Sanjeev Khudanpur and Jason
+ Eisner and Carey~E. Priebe},
+ title = {Iterative denoising using {J}ensen-{R}eny\'{\i}
+ divergences with an application to unsupervised
+ document categorization},
+ booktitle = {Proceedings of ICASSP},
+ year = 2007,
+ url = {http://cs.jhu.edu/~jason/papers/#icassp07}
+}
+
diff --git a/Master/texmf-dist/doc/bibtex/bibhtml/detex.sed b/Master/texmf-dist/doc/bibtex/bibhtml/detex.sed
new file mode 100644
index 00000000000..24034434203
--- /dev/null
+++ b/Master/texmf-dist/doc/bibtex/bibhtml/detex.sed
@@ -0,0 +1,55 @@
+# Edit TeXisms in the .bbl output, to make it HTML-ready
+# From bibhtml release 2.0, of 2009 August 9.
+# Hg node 4a5600417b09.
+# See http://purl.org/nxg/dist/bibhtml
+
+# Remove %\n line-breaks added by BibTeX
+/% *$/{
+ :a
+ N
+ s/% *\n//
+ t a
+}
+
+# Escape ampersands
+s,&,&amp;,g
+
+# Process DOI:{...} lines, escaping '<' characters in DOIs and rearranging into a <a> element
+# (the substitutions below probably rely on the "DOI:" being at the beginning of a line).
+# First, turn DOI:{X} into DOI:{X|X}
+/^DOI/s,DOI:{\([^}]*\)},DOI:{\1|\1},
+# Escape the two DOIs differently...
+# ...first do URL escaping
+# ...then do HTML/XML escaping
+/^DOI:/{
+ :bx
+ s,\([^<|]*\)<\([^|]*\)|,\1%3C\2|,
+ t bx
+ :cx
+ s,\([^<}]*\)<\([^}]*\)},\1\&lt;\2},
+ t cx
+}
+# ...and then turn the result into a <a> element
+/^DOI:{/s,DOI:{\([^|]*\)|\([^}]*\)},DOI: <a href='http://dx.doi.org/\1'><code>\2</code></a>,
+
+# Get rid of TeX braces (I hope there aren't any of these in DOIs or other URLs)
+s/[{}]//g
+
+# Replace '~' ties with spaces, as lont as they aren't URL ".../~user"
+s,\([^/]\)~,\1 ,g
+
+# accented characters
+s,\\'a,á,g
+s,\\'e,é,g
+s,\\`e,è,g
+s,\\^o,ô,g
+s+\\,c+ç+g
+s,\\ss,ß,g
+s,\\"a,ä,g
+s,\\"o,ö,g
+s,\\"u,ü,g
+# We could include the following substitution, but I'm nervous of that,
+# because I'm not positive that "--" can't legitimately appear in DOIs
+# (the above substitutions are also in principle illegitimate for the same reason,
+# but they seem safely unlikely).
+#s,--,–,