Added do.space, continue.sentence, selective.emphasize and abbreviate
Added more fields to article
Changed format.url to output.url
Added \theurldate to url.used preamble
-% $Id: mlastyle.bst,v 1.13 2003-11-22 19:15:11 tpope Exp $
+% $Id: mlastyle.bst,v 1.14 2003-11-23 00:15:32 tpope Exp $
% BibTeX bibliography style `mlastyle'
% Based on BibTeX standard bibliography style `plain'
% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
% BibTeX bibliography style `mlastyle'
% Based on BibTeX standard bibliography style `plain'
% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
accessdate
urlpath
version
accessdate
urlpath
version
}
{ author.duplicate author.shared }
{ label }
}
{ author.duplicate author.shared }
{ label }
-INTEGERS { output.state before.all mid.sentence after.sentence after.block after.title author.different author.last author.flast citealp.used url.used }
+INTEGERS { output.state before.all mid.phrase mid.sentence after.sentence after.block author.different author.last author.flast citealp.used url.used }
STRINGS { s t u empty.title }
% Rearranged such that true values require capital letters
FUNCTION {init.consts}
STRINGS { s t u empty.title }
% Rearranged such that true values require capital letters
FUNCTION {init.consts}
#0 'mid.sentence :=
#1 'before.all :=
#2 'after.sentence :=
#0 'mid.sentence :=
#1 'before.all :=
#2 'after.sentence :=
#0 'citealp.used :=
#0 'url.used :=
" \ \ \ \ \unskip\unskip\unskip\unskip\unskip " 'empty.title :=
#0 'citealp.used :=
#0 'url.used :=
" \ \ \ \ \unskip\unskip\unskip\unskip\unskip " 'empty.title :=
+ %"" 'empty.title :=
+}
+
+% I do this a lot
+FUNCTION {duplicate}
+{
+ duplicate$
+ "duplicate should be duplicate$" warning$
INTEGERS {chars i j}
% text.length$ does not include braces
INTEGERS {chars i j}
% text.length$ does not include braces
-% ...this function is probably unnecessary
+% This function is probably a bad idea
FUNCTION {num.chars}
{
#0 'chars :=
FUNCTION {num.chars}
{
#0 'chars :=
-% Switched to do.period and added after.title
+FUNCTION {do.space}
+{ duplicate$ duplicate$ do.period =
+ { "\ " * }
+ { " " * }
+ if$
+}
+
+% Switched to do.period and added mid.phrase
FUNCTION {output.nonnull}
{ 's :=
output.state mid.sentence =
FUNCTION {output.nonnull}
{ 's :=
output.state mid.sentence =
}
{ output.state before.all =
'write$
}
{ output.state before.all =
'write$
- { output.state after.title =
- { " " * write$ }
+ { output.state mid.phrase =
+ { do.space write$ }
{ do.period " " * write$ }
if$
}
{ do.period " " * write$ }
if$
}
-%FUNCTION {no.comma}
-%{ output.state after.block =
-% 'skip$
-% { output.state before.all =
-% 'skip$
-% { after.title 'output.state := }
-% if$
-% }
-% if$
-%}
+FUNCTION {continue.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { mid.phrase 'output.state := }
+ if$
+ }
+ if$
+}
FUNCTION {new.block.checka}
{ empty$
FUNCTION {new.block.checka}
{ empty$
+FUNCTION {selective.emphasize}
+{ field.or.null duplicate$ sortify 's :=
+ s #1 #8 substring$ duplicate$ "rev. of " = swap$ "rev.~of " = or
+ s #1 #9 substring$ "rev.\ of " = or
+ s "home page" = or
+ s "america online" = or
+ 'skip$
+ 'emphasize
+ if$
+}
+
FUNCTION {selective.enquote}
{ field.or.null duplicate$ sortify 's :=
s #1 #8 substring$ duplicate$ "rev. of " = swap$ "rev.~of " = or
FUNCTION {selective.enquote}
{ field.or.null duplicate$ sortify 's :=
s #1 #8 substring$ duplicate$ "rev. of " = swap$ "rev.~of " = or
s "preface" = or
s "forward" = or
s "afterward" = or
s "preface" = or
s "forward" = or
s "afterward" = or
+FUNCTION {format.year}
+{ year empty$
+ { "" }
+ { year n.dashify
+ duplicate$ duplicate$ num.chars #10 =
+ swap$ #5 #2 substring$ "--" = and
+ { duplicate$ duplicate$ #1 #2 substring$ swap$ #7 #2 substring$ =
+ { duplicate$ #1 #6 substring$ swap$ #9 #2 substring$ * }
+ {}
+ if$
+ }
+ {}
+ if$
+ }
+ if$
+}
+
FUNCTION {format.date}
{ year empty$
{ month empty$
FUNCTION {format.date}
{ year empty$
{ month empty$
- 'year
- { month "~" * year * }
+ 'format.year
+ { month do.space format.year * }
%INTEGERS {xx}
FUNCTION {format.btitle}
%INTEGERS {xx}
FUNCTION {format.btitle}
-{ title emphasize
- %title num.chars int.to.str$ top$
- %#0 'xx :=
- %{ xx title num.chars < }
- %{ title xx #1 + duplicate$ 'xx := #1 substring$ top$ } while$
+{ title selective.emphasize
}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
{ "~" }
}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
{ "~" }
+FUNCTION {abbreviate}
+{ duplicate$ sortify 's := 't :=
+ ""
+ "10th" "tenth" "9th" "ninth" "8th" "eighth" "7th" "seventh" "6th" "sixth"
+ "5th" "fifth" "4th" "fourth" "3rd" "third" "2nd" "second" "1st" "first"
+ "Rev." "revised" "Abr." "abridged"
+ {duplicate$ empty$ { pop$ #0 }{ #1 } if$ }{ s = { 't := }{ pop$ } if$ }
+ while$
+ t
+}
+
FUNCTION {format.bvolume.or.num.series}
{ volume empty$
{ number empty$
FUNCTION {format.bvolume.or.num.series}
{ volume empty$
{ number empty$
{ "Vol." volume tie.or.space.connect
series empty$
'skip$
{ "Vol." volume tie.or.space.connect
series empty$
'skip$
- { " of " * series emphasize * add.period$ }
+ { " of " * series selective.emphasize * add.period$ }
{ "Vers.~" version *}
if$
}
{ "Vers.~" version *}
if$
}
- { edition sortify 's := edition 't :=
- ""
- "10th" "tenth" "9th" "ninth" "8th" "eighth" "7th" "seventh" "6th" "sixth"
- "5th" "fifth" "4th" "fourth" "3rd" "third" "2nd" "second" "1st" "first"
- "Rev." "revised" "Abr." "abridged"
- {duplicate$ empty$ { pop$ #0 }{ #1 } if$ }{ s = { 't := }{ pop$ } if$ }
- while$
- t "\ ed." *
+ { edition abbreviate
+ duplicate$ sortify "revised" =
+ { pop$ "Rev." }
+ 'skip$
+ if$
+ duplicate$ sortify "abridged" =
+ { pop$ "Abr." }
+ 'skip$
+ if$
+ do.space "ed." *
"edition and version" version either.or.check
}
if$
"edition and version" version either.or.check
}
if$
% j is positive if pages contains a comma
% (not fully implemented)
#0 'j :=
% j is positive if pages contains a comma
% (not fully implemented)
#0 'j :=
- pages n.dashify 't :=
- ""
+ pages n.dashify duplicate$ 't :=
+ { duplicate$ empty$ not }
+ {
+ duplicate$ #1 #1 substring$ duplicate$
+ "{" =
+ { j #1 + 'j := }
+ 'skip$
+ if$
+ "}" =
+ { j #1 - 'j := }
+ 'skip$
+ if$
+ duplicate$ #1 #2 substring$ ", " =
+ { j j #0 = + 'j := }
+ 'skip$
+ if$
+ #2 global.max$ substring$
+ }
+ while$
- { t #1 #2 substring$ "--" =
+ { t #1 #2 substring$ "--" = j not and
{ t #3 global.max$ substring$ 't :=
duplicate$ num.chars 'i :=
"--" *
{ t #3 global.max$ substring$ 't :=
duplicate$ num.chars 'i :=
"--" *
- { t #1 #1 substring$ *
- t #2 global.max$ substring$ 't :=
+ { t #1 #1 substring$ duplicate$ "," = swap$ "-" = or j and
+ { "+" * "" 't := }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
-FUNCTION {format.year}
-{ year empty$
- { "" }
- { year n.dashify
- duplicate$ duplicate$ num.chars #10 =
- swap$ #5 #2 substring$ "--" = and
- { duplicate$ duplicate$ #1 #2 substring$ swap$ #7 #2 substring$ =
- { duplicate$ #1 #6 substring$ swap$ #8 #2 substring$ * }
- {}
- if$
- }
- {}
- if$
- }
- if$
-}
-
FUNCTION {format.vol.num.year.pages}
{ volume empty$
{ number empty$
'skip$
FUNCTION {format.vol.num.year.pages}
{ volume empty$
{ number empty$
'skip$
- { "there's a number but no volume in " cite$ * warning$ }
+ { number n.dashify
+ "there's a number but no volume in " cite$ * warning$ }
if$
format.date
}
{ volume
number empty$
'skip$
if$
format.date
}
{ volume
number empty$
'skip$
+ { "." * number n.dashify * }
if$
" (" * format.date * ")" *
}
if$
" (" * format.date * ")" *
}
'skip$
{ ", " * format.edition * }
if$
'skip$
{ ", " * format.edition * }
if$
+ type field.or.null sortify duplicate$ "sec." = swap$ "section" = or
+ { chapter empty$
+ { "section type requires chapter in " cite$ warning$ }
+ { ", sec." chapter n.dashify tie.or.space.connect }
+ if$
+ }
- { ": " * pages n.dashify * }
-}
-
-
-FUNCTION {format.vol.num.pages}
-{ volume field.or.null
- number empty$
+ type field.or.null sortify "review" = chapter empty$ not and
+ { ", sec." chapter n.dashify tie.or.space.connect }
- { "(" number * ")" * *
- volume empty$
- { "there's a number but no volume in " cite$ * warning$ }
- 'skip$
- if$
- }
- { duplicate$ empty$
- { pop$ format.pages }
- { ":" * pages n.dashify * }
- if$
- }
+ { ": " * format.pages * }
or
'format.pages
{ type empty$
or
'format.pages
{ type empty$
- { "Chapter" }
- { type "t" change.case$ }
- if$
- chapter n.dashify tie.or.space.connect
- pages empty$
- 'skip$
- { ", " * format.pages * }
+ { "chapter ignored in " cite$ * warning$ }
+ { type "t" change.case$
+ chapter n.dashify tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * }
+ if$
+ }
-FUNCTION {format.url}
-{ url empty$
- { "" }
- { urldate empty$
- { accessdate empty$
- { "there's a url but no urldate in " cite$ * warning$ "\today" }
- { "accessdate in " cite$ * " depreciated; use urldate instead" *
- warning$ accessdate }
- if$
- }
- { urldate }
- if$
- " $<$\url{" * url * "}$>$" *
- urlpath empty$
+FUNCTION {format.urldate}
+{ urldate missing$
+ { accessdate empty$
+ { cite$ " has no urldate field" * warning$
+ "\theurldate"
+ }
+ { "accessdate in " cite$ * " is depreciated; use urldate instead" *
+ warning$ accessdate
+ }
+ if$
+ }
+ { urldate }
+ if$
+}
+FUNCTION {output.url}
+{
+ url empty$
+ { urlpath empty$
- { do.period " Path: " * urlpath * }
+ { format.urldate output }
+ { format.urldate
+ " $<$\url{" * url * "}$>$" *
+ output.nonnull
+ }
+ if$
+ urlpath empty$
+ 'skip$
+ { "Path: " urlpath * output.nonnull }
FUNCTION {cite.title}
{ title empty$ journal empty$ not and
FUNCTION {cite.title}
{ title empty$ journal empty$ not and
- { key empty$ { journal }{ key } if$ emphasize }
+ { key empty$ { journal }{ key } if$ selective.emphasize }
{ title empty$ key empty$ and
{ "empty title and key in " cite$ * warning$ "" }
{ key empty$ {title}{key} if$
{ title empty$ key empty$ and
{ "empty title and key in " cite$ * warning$ "" }
{ key empty$ {title}{key} if$
type$ "phdthesis" =
type$ "proceedings" =
or or or or or
type$ "phdthesis" =
type$ "proceedings" =
or or or or or
+ { selective.emphasize }
{ type$ "article" =
%type$ "booklet" =
type$ "incollection" =
{ type$ "article" =
%type$ "booklet" =
type$ "incollection" =
{ "{f.~}{vv~}{ll}{, jj}" format.names.custom 's := }
{ author.shared author.flast =
{ "{ff~}{vv~}{ll}{, jj}" format.names.custom 's := }
{ "{f.~}{vv~}{ll}{, jj}" format.names.custom 's := }
{ author.shared author.flast =
{ "{ff~}{vv~}{ll}{, jj}" format.names.custom 's := }
- { "{vv~}{ll}" format.names.custom ", " * cite.title * 's := "WTF" warning$ }
+ { "{vv~}{ll}" format.names.custom ", " *
+ cite.title * 's := "WTF" warning$ }
s
"(" * empty.title *
author.duplicate { cite.title * }{} if$
s
"(" * empty.title *
author.duplicate { cite.title * }{} if$
- ")" * swap$ "{ff~}{vv~}{ll}{, jj}" format.names.custom purify$ *
+ "){" * swap$ "{ff~}{vv~}{ll}{, jj}" format.names.custom * "}" *
{ type empty$
'skip$
{ type sortify "review" =
{ type empty$
'skip$
{ type sortify "review" =
- { "Rev.\ of " booktitle emphasize *
+ { "Rev.\ of " booktitle selective.emphasize *
"booktitle" output.check new.block
}
{ "Ignoring invalid type in " cite$ warning$ }
if$
}
if$
"booktitle" output.check new.block
}
{ "Ignoring invalid type in " cite$ warning$ }
if$
}
if$
- journal emphasize "journal" output.check after.title 'output.state :=
+ journal selective.emphasize "journal" output.check
+ continue.sentence
address empty$
'skip$
{ "[" address * "]" * output
address empty$
'skip$
{ "[" address * "]" * output
- after.title 'output.state :=
+ continue.sentence
+ }
+ if$
+ series empty$
+ 'skip$
+ { series sortify
+ duplicate$ "new" =
+ { "ns" }
+ { duplicate$ "old" =
+ { "os" }
+ { series abbreviate do.space "ser." * "l" change.case$ }
+ if$
+ }
+ if$
+ output.nonnull
+ continue.sentence
- %format.date "year" output.check
- %edition output
format.vol.num.year.pages output
}
{ format.crossref output.nonnull
format.vol.num.year.pages output
}
{ format.crossref output.nonnull
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
crossref missing$
{
new.block
crossref missing$
{
- booktitle emphasize "booktitle" output.check
+ booktitle selective.emphasize "booktitle" output.check
new.block
format.editors.mid "editor" output.check
new.block
new.block
format.editors.mid "editor" output.check
new.block
format.publisher "publisher" output.check
%address output
format.date "year" output.check
format.publisher "publisher" output.check
%address output
format.date "year" output.check
format.chapter.pages output
}
{ format.crossref output.nonnull
format.chapter.pages output
}
{ format.crossref output.nonnull
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
note output
fin.entry
if$
format.date output
new.block
if$
format.date output
new.block
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
format.title "title" output.check
new.block
new.block
format.title "title" output.check
new.block
- "Diss." format.thesis.type do.period output.nonnull
- after.title 'output.state :=
+ "Diss." format.thesis.type output.nonnull
school "school" output.check
address output
format.date "year" output.check
new.block
school "school" output.check
address output
format.date "year" output.check
new.block
new.block
note output
fin.entry
new.block
note output
fin.entry
howpublished output
format.date output
new.block
howpublished output
format.date output
new.block
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
format.btitle "title" output.check
new.block
new.block
format.btitle "title" output.check
new.block
- "Diss." format.thesis.type do.period output.nonnull
- after.title 'output.state :=
+ "Diss." format.thesis.type output.nonnull
school "school" output.check
address output
format.date "year" output.check
new.block
school "school" output.check
address output
format.date "year" output.check
new.block
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
note output
fin.entry
new.block
format.title "title" output.check
new.block
new.block
format.title "title" output.check
new.block
new.block
note "note" output.check
format.date output
new.block
note "note" output.check
format.date output
+% Function name is not strictly accurate
FUNCTION {forward.author.dup.check}
{
FUNCTION {forward.author.dup.check}
{
- url empty$ 'skip$ { url.used #1 + 'url.used := } if$
+ url empty$ urlpath empty$ urldate empty$ and and
+ 'skip$
+ { url.used #1 + 'url.used := }
+ if$
crossref empty$ 'skip$ { citealp.used #1 + 'citealp.used := } if$
author empty$
{ editor empty$ { organization field.or.null 'a := }{ editor 'a :=} if$}
crossref empty$ 'skip$ { citealp.used #1 + 'citealp.used := } if$
author empty$
{ editor empty$ { organization field.or.null 'a := }{ editor 'a :=} if$}
{
citealp.used
{ "\expandafter\ifx\csname citealp\endcsname\relax\let\citealp\cite\fi"
{
citealp.used
{ "\expandafter\ifx\csname citealp\endcsname\relax\let\citealp\cite\fi"
- { "\expandafter\ifx\csname citealp\endcsname\relax\url\let\url\relax\fi"
- write$ newline$ }
+ { "\expandafter\ifx\csname url\endcsname\relax\let\url\relax\fi"
+ write$ newline$
+ "\expandafter\ifx\csname theurldate\endcsname\relax"
+ write$ newline$
+ "\let\theurldate\today\fi"
+ write$ newline$
+ }
'skip$
if$
preamble$ empty$
'skip$
if$
preamble$ empty$