Files
MA_Platteau/dinatles.bst
2024-10-03 11:12:31 +01:00

1953 lines
43 KiB
Plaintext

%% DINAT.BST Version 2.5 2000-11-14
%% (c) Helge Baumann email:Helge.Baumann@gmx.de
%%------------------------------------------------------------------------------
%% For use with BibTeX version 0.99a or later.
%%------------------------------------------------------------------------------
%% 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 dinat.bst,
%% natdin.bst, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
%% This restriction helps ensure that all standard styles are identical.
%%------------------------------------------------------------------------------
%% This is a full author-year citation style bibliography. As such, it is
%% non-standard LaTeX, and requires the natbib-package by Patrick W. Daly,
%% version 7 or higher to function properly.
%% It should be used with the following configuration in natbib.cfg:
%% \newcommand{\bibstyle@dinat}%
%% {\bibpunct{(}{)}{;}{a}{}{,~}%
%% \gdef\NAT@biblabelnum##1{\textbf{##1}}}
%%------------------------------------------------------------------------------
%% The form of the \bibitem entries is
%% \bibitem[Jones u. a.(1990)Jones, Baker und Smith]{key}...
%% If there are more [Jones u. a. 1990], a single character is added to
%% the year like in [Jones u.a.(1990{\natexlab{a}})Jones, Baker und Smith].
%% The resulting bibliography entry is
%% \textsc{Jones}, \textsc{Baker} und \textsc{Smith} ...
%% The \cite command functions as follows:
%% \cite{key} ==>> Jones u. a. (1990)
%% \cite[chap. 2]{key} ==>> (Jones u. a. 1990, chap. 2)
%% \cite[e.g.][]{key} ==>> (e.g. Jones u. a. 1990)
%% \cite[e.g.][p. 32]{key} ==>> (e.g. Jones u. a. p. 32)
%% \citep{key} ==>> (Jones u. a. 1990)
%% \citep*{key} ==>> (Jones, Baker und Smith 1990)
%% \citet{key} ==>> Jones u. a. (1990)
%% \citet*{key} ==>> Jones, Baker und Smith (1990)
%% \citeauthor{key} ==>> Jones u. a.
%% \citeauthor*{key} ==>> Jones, Baker und Smith
%% \citeyear{key} ==>> 1990
%%------------------------------------------------------------------------------
%% This bibliography style file is intended for texts in german.
%% It draws up bibliographies in accordance with the german DIN 1505,
%% part 2 and 3, as discribed in the german text
%% http://www.fh-hamburg.de/pers/Lorenzen/tum/litverz.ps
%%------------------------------------------------------------------------------
%% This style is based on the natdin.bst style.
%% The intention for designing a new style for the same result
%% were the many bugs and the poor design of the original style.
%% So i simplified the programming and add some comments for rework.
%% The names of the functions were changed to reflect their functionality:
%% out.*: write the top of the stack to the bbl-file
%% format.*: format the top of the stack
%% push.*: put one item on top of the stack
%%------------------------------------------------------------------------------
%% There are some non standard fields for most entries:
%% isbn: international book number
%% issn: internation journal number
%% url: for electronic published documents or additional information
%% if there is no publisher and address, the url is used instead,
%% else it acts like a additional note
%% urldate: the date of the access to the url
%%------------------------------------------------------------------------------
%% Author(s):
%% HB: Helge Baumann, helge.baumann@gmx.de
%%------------------------------------------------------------------------------
%% History:
%% (only main changes are listed, for others see the webpage)
%% 2000-04-10 (HB): Initial release
%% 2000-04-18 (HB): Version 1.1:
%% corrected some typos and oversights
%% minor changes in output
%% 2000-04-25 (HB): Version 1.2:
%% dinat only: added \natexlab
%% using full key/cite for label
%% 2000-05-02 (HB): Version 2.0:
%% added urldate for date of visit
%% added labels in bibliography, so the seperate
%% style dinnat.bst is not needed anymore
%% 2000-05-09 (HB): Version 2.1:
%% removed blanc in bibpunct
%% put text ("u.\,a." ...) in functions
%% rebuild some push functions
%% changed \cite to \citep
%% removed push.crossref.editor (not used)
%% 2000-07-12 (HB): version 2.2:
%% added push.crossref
%% changed many crossrefs
%% corrected typos
%% put \, in curly braces
%% 2000-10-03 (HB): version 2.3:
%% changed remaining "u.~a."
%% added \labelsep behind dinatlabel
%% added mastersthesis again, keeping (wrong)
%% masterthesis (sorry for that)
%% minor changes in proceedings
%% 2000-11-05 (HB): version 2.4:
%% improved inbook
%% removed extra period from proceedings
%% added missing colon in misc
%% improved name formatting
%% removed long dashes from ISBN/ISSN
%% restructured format.dashes
%% 2000-11-14 (HB): version 2.5:
%% always use key for label if present
%%------------------------------------------------------------------------------
%%------------------------------------------------------------------------------
%% push standard text items on top of the stack
%%------------------------------------------------------------------------------
FUNCTION {push.bd} { "Bd." }
FUNCTION {push.diplom} { "Diplomarbeit" }
FUNCTION {push.disser} { "Dissertation" }
FUNCTION {push.forschung} { "Forschungsbericht" }
FUNCTION {push.hrsg} { "Hrsg." }
FUNCTION {push.in} { "In:" }
FUNCTION {push.isbn} { "ISBN" }
FUNCTION {push.issn} { "ISSN" }
FUNCTION {push.kap} { "Kap." }
FUNCTION {push.nr} { "Nr." }
FUNCTION {push.sn} { "S" }
FUNCTION {push.s} { "S." }
FUNCTION {push.siehe} { "Siehe" }
FUNCTION {push.ua} { "u.\,a." }
FUNCTION {push.und} { "und" }
FUNCTION {push.url.name} { "URL" }
FUNCTION {push.veranst} { "Veranst." }
FUNCTION {push.von} { "von" }
FUNCTION {push.zugriff} { "Zugriffsdatum" }
FUNCTION {push.cite} { "\citep" }
%%------------------------------------------------------------------------------
%% Definitions for every bibliography entry
%%------------------------------------------------------------------------------
ENTRY
% fields (crossref is default)
{ address
author
booktitle
chapter
edition
editor
howpublished
institution
isbn
issn
journal
key
month
note
number
organization
pages
publisher
school
series
title
type
url
urldate
volume
year
}
% INTEGERS
{}
% STRINGS (sort.key$ is default)
{ label extra.label sort.label short.list dinat.label }
%%------------------------------------------------------------------------------
%% required macros for abbr. names of month
%%------------------------------------------------------------------------------
MACRO {jan} {"Januar"}
MACRO {feb} {"Februar"}
MACRO {mar} {"M\^^b{a}rz"}
MACRO {apr} {"April"}
MACRO {may} {"Mai"}
MACRO {jun} {"Juni"}
MACRO {jul} {"Juli"}
MACRO {aug} {"August"}
MACRO {sep} {"September"}
MACRO {oct} {"Oktober"}
MACRO {nov} {"November"}
MACRO {dec} {"Dezember"}
%%------------------------------------------------------------------------------
%% macros for common journals
%%------------------------------------------------------------------------------
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"}
%%------------------------------------------------------------------------------
%% for debugging (not used)
%%------------------------------------------------------------------------------
FUNCTION {show}
% show quoted top of stack
{ duplicate$ ":::: `" swap$ * "'" * top$
}
FUNCTION {show.stack}
% show and clear whole stack
{ "STACK====================================================================="
top$
stack$
"ENDSTACK=================================================================="
top$
}
%%------------------------------------------------------------------------------
%% logical functions
%%------------------------------------------------------------------------------
FUNCTION {not}
{ { #0 }
{ #1 }
if$
}
FUNCTION {and}
{ { skip$ }
{ pop$ #0 }
if$
}
FUNCTION {or}
{ { pop$ #1 }
{ skip$ }
if$
}
%%------------------------------------------------------------------------------
%% variables for the recent output state
%%------------------------------------------------------------------------------
INTEGERS { output.state
before.all
mid.sentence
after.sentence
after.block
colon.after
period.dash }
FUNCTION {init.state.consts}
% initialisation of the state variables
{ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
#4 'colon.after :=
#5 'period.dash :=
}
FUNCTION {set.period.dash}
% set ". -- "
{ output.state before.all =
{ skip$ }
{ period.dash 'output.state := }
if$
}
FUNCTION {set.period.dash.check}
% only if not empty
{ empty$
{ skip$ }
{ set.period.dash }
if$
}
FUNCTION {set.colon.after}
% set ": "
{ output.state before.all =
{ skip$ }
{ colon.after 'output.state := }
if$
}
FUNCTION {new.sentence}
% set ". "
{ output.state before.all =
{ skip$ }
{ after.sentence 'output.state := }
if$
}
FUNCTION {new.sentence.check}
% only if not empty
{ empty$
{ skip$ }
{ new.sentence }
if$
}
FUNCTION {part.of.sentence}
% set ", "
{ output.state before.all =
{ skip$ }
{ mid.sentence 'output.state := }
if$
}
%%------------------------------------------------------------------------------
%% output lines to bbl. file
%%------------------------------------------------------------------------------
STRINGS { h s t u v }
FUNCTION {out.block}
% writes the second but last element with seperator
{ 's :=
output.state after.block =
{ add.period$ write$
newline$
"\newblock " write$
}
{ output.state before.all =
{ write$ }
{ output.state colon.after =
{ ": " * write$
newline$
"\newblock " write$
}
{ output.state period.dash =
{ ". -- " * write$
newline$
"\newblock " write$
}
{ output.state mid.sentence =
{ ", " * write$ }
{ write$
newline$
"\newblock " write$
}
if$
}
if$
}
if$
}
if$
after.block 'output.state :=
}
if$
s
}
FUNCTION {out}
% write only if not empty
{ duplicate$ empty$
{ pop$ }
{ out.block }
if$
}
FUNCTION {out.check.required}
% write if not empty, else drop warning
{ 't :=
duplicate$ empty$
{ pop$ "empty " t * " in " * cite$ * warning$ }
{ out.block }
if$
}
FUNCTION {out.check.din}
% write if not empty, else drop note
{ 't :=
duplicate$ empty$
{ pop$ "DIN: empty " t * " in " * cite$ * top$ }
{ out.block }
if$
}
%%------------------------------------------------------------------------------
%% format entries for full author/editor citations
%%------------------------------------------------------------------------------
INTEGERS { nameptr namesleft pos len }
FUNCTION {format.full.names}
% format all names
{ 's :=
""
#1 'nameptr :=
s num.names$ 'namesleft :=
{ namesleft #0 > } % while
{ s nameptr "{vv~}{ll}" format.name$ 't :=
nameptr #1 =
{ % first name
t *
}
{ namesleft #1 =
{ % last name
t "others" =
{ " " * push.ua * }
{ " " * push.und * " " * t * }
if$
}
{ % other names
", " * t *
}
if$
}
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$ % { namesleft #0 > }
}
FUNCTION {key.full}
{ key empty$
{ cite$ }
{ key }
if$
}
FUNCTION {author.key.full}
{ author empty$
{ key.full }
{ author format.full.names }
if$
}
FUNCTION {editor.key.full}
{ editor empty$
{ key.full }
{ editor format.full.names }
if$
}
FUNCTION {author.editor.key.full}
{ author empty$
{ editor.key.full }
{ author format.full.names }
if$
}
FUNCTION {make.full.names}
{ type$ "book" =
type$ "inbook" =
or
{ author.editor.key.full }
{ type$ "proceedings" =
{ editor.key.full }
{ author.key.full }
if$
}
if$
}
%%------------------------------------------------------------------------------
%% write bibentry to bbl. file
%%------------------------------------------------------------------------------
FUNCTION {out.bibitem.start}
% start of entry
{ newline$
"\bibitem[" label * ")" *
make.full.names
duplicate$ short.list =
{ pop$ }
{ * }
if$
"]{" * cite$ * "}" *
write$
newline$
"\dinatlabel{" dinat.label * "} " *
write$
""
before.all 'output.state :=
}
FUNCTION {out.bibitem.end}
% end of entry
{add.period$ write$
newline$
}
%%------------------------------------------------------------------------------
%% format text
%%------------------------------------------------------------------------------
FUNCTION {format.emphasize}
% emphasize top of stack
{ duplicate$ empty$
{ pop$ "" }
{ "\emph{" swap$ * "}" * }
if$
}
FUNCTION {format.smallcaps}
% top of stack in small caps
{ duplicate$ empty$
{ pop$ "" }
{ "\textsc{" swap$ * "}" * }
if$
}
FUNCTION {format.dashes}
% replace single dashes (-) with tex-styled dashes (--)
{ 't :=
""
{ t empty$ not } % while$
{ t #1 #2 substring$ "--" =
{ { t #1 #1 substring$ "-" = }
{ "-" *
t #2 global.max$ substring$ 't :=
}
while$
}
{ t #1 #1 substring$ "-" =
{ "--" * }
{ t #1 #1 substring$ * }
if$
t #2 global.max$ substring$ 't :=
}
if$
}
while$ % { t empty$ not }
}
%%------------------------------------------------------------------------------
%% manipulte entries on the stack
%%------------------------------------------------------------------------------
FUNCTION {tie.or.space.connect}
% connect two top items with space or ~, if second is shorter than 3
{ duplicate$ text.length$ #3 <
{ "~" }
{ " " }
if$
swap$ * *
}
FUNCTION {push.field.or.null}
% push an empty item on the stack if it's a missing entry
{ duplicate$ empty$
{ pop$ "" }
{ skip$ }
if$
}
%%------------------------------------------------------------------------------
%% format text on stack
%%------------------------------------------------------------------------------
STRINGS { hrsg }
FUNCTION {format.names}
% format all names on top of stack
{ 's :=
""
#1 'nameptr :=
s num.names$ 'namesleft :=
{ namesleft #0 > } % while names left
{ % first get last name in small caps
s nameptr "{ll}" format.name$ 't :=
t format.smallcaps 't :=
% second get all first names
s nameptr "{, ff}" format.name$ 'u :=
u text.length$ 'len :=
#1 'pos :=
"" 'v :=
{ pos len < } % while
{ u pos #1 substring$ "~" =
{ v "" =
{ u #1 pos #1 - substring$ 'v := }
{ skip$ }
if$
% cut second and more first names
v u pos #2 substring$ * "." * 'v :=
}
{ skip$ }
if$
pos #1 + 'pos :=
}
while$ % { pos len < }
v "" =
{ u 'v := }
{ skip$ }
if$
% third get all "von"
s nameptr "{ vv}" format.name$ 'u :=
% put it all together
t v * u * hrsg * 't :=
nameptr #1 =
{ %first name
t *
}
{ namesleft #1 =
{ % last name
t "others" format.smallcaps =
t "others" format.smallcaps hrsg * =
or
{ " " * push.ua * }
{ "~; " * t * }
if$
}
{ % other names
"~; " * t *
}
if$
}
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$ % { namesleft #0 > }
"" 'hrsg :=
}
%%------------------------------------------------------------------------------
%% push formatted or empty field(s) on top of the stack
%%------------------------------------------------------------------------------
FUNCTION {push.authors}
% format author names
{ author empty$
{ "" }
{ author format.names }
if$
}
FUNCTION {push.editors}
% format editor names
{ editor empty$
{ "" }
{ " (" push.hrsg * ")" * 'hrsg :=
editor format.names
}
if$
}
FUNCTION {push.authors.editors}
% format author and/or editor names
{ author empty$
{ push.editors }
{ push.authors
editor empty$
{ skip$ }
{ "~; " * push.editors * }
if$
}
if$
}
FUNCTION {push.organization}
% format organization
{ organization empty$
{ "" }
{ organization
" (" * push.veranst * ")" *
}
if$
}
FUNCTION {push.title}
% title as in entry
{ title empty$
{ "" }
{ title }
if$
}
FUNCTION {push.url}
% prefixed with "URL" and special formatting
{ url empty$
{ "" }
{ push.url.name " \url{" * url * "}" *
urldate empty$
{ skip$ }
{ ". -- " * push.zugriff * ": " * urldate * }
if$
}
if$
}
FUNCTION {push.date}
% format: month year
{ year empty$
{ month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
month
}
if$
}
{ month empty$
{ year }
{ month " " * year * }
if$
}
if$
}
FUNCTION {push.address.publisher.year}
% the whole imprint
{ address empty$
{ publisher empty$
{ url empty$
{ year empty$
{ "no publisher, address, url or date in " cite$ * warning$
"" }
{ push.date }
if$
}
{ "no proper publisher, using url in " cite$ * warning$
push.url
year empty$
{ skip$ }
{ ", " * push.date * }
if$
}
if$
}
{ publisher
year empty$
{ "there's a publisher but no year in " cite$ * warning$ }
{ ", " * push.date * }
if$
}
if$
}
{ address
publisher empty$
{ "there's an address but no publisher in " cite$ * warning$ }
{ "~: " * publisher * }
if$
year empty$
{ skip$ }
{ ", " * push.date * }
if$
}
if$
}
FUNCTION {push.btitle}
% the booktitle
{ title empty$
{ "" }
{ title format.emphasize }
if$
}
FUNCTION {push.btitle.vol}
% booktitle in multivolume works
{ number empty$
{ series empty$
{ push.btitle
volume empty$
{ skip$ }
{ ". " * push.bd * volume tie.or.space.connect }
if$
}
{ volume empty$
{ push.btitle }
{ series format.emphasize ". " *
push.bd * volume tie.or.space.connect
": " * push.btitle *
}
if$
}
if$
}
{ push.btitle }
if$
}
FUNCTION {push.article.in.journal}
% source of article
{ journal empty$
{ "" }
{ author missing$
title missing$
and
{ journal format.emphasize }
{ push.in " " * journal format.emphasize * }
if$
}
if$
}
FUNCTION {push.series.number}
% series and number like DIN
{ volume empty$
{ series empty$
{ number empty$
{ "" }
{ "there's a number but no series in " cite$ * warning$
"(" number * ")" * }
if$
}
{ "(" series *
number empty$
{ skip$ }
{ number tie.or.space.connect }
if$
")" *
}
if$
}
{ series empty$
{ "" }
{ type$ "proceedings" =
{ "(" series *
number empty$
{ skip$ }
{ number tie.or.space.connect }
if$
")" *
}
{ "" }
if$
}
if$
}
if$
}
FUNCTION {push.misc.series}
% series in MISC
{ series empty$
{ "" }
{ "(" series * ")" * }
if$
}
FUNCTION {push.edition}
% like in entry
{ edition empty$
{ "" }
{ edition }
if$
}
FUNCTION {push.isbn.issn}
% preceeded with ISSN/ISBN
{ isbn empty$
{ issn empty$
{ "" }
{ push.issn " " * issn * }
if$
}
{ push.isbn " " * isbn * }
if$
}
FUNCTION {push.pages.book}
% as length of a book
{ pages empty$
{ "" }
{ pages format.dashes "~" * push.sn * }
if$
}
FUNCTION {push.pages}
% as part of a book
{ pages empty$
{ "" }
{ push.s "~" * pages format.dashes * }
if$
}
FUNCTION {push.vol.year.num.pages}
% for journals etc.
{ volume push.field.or.null
year empty$
{ "there's no year in " cite$ * warning$ }
{ duplicate$ empty$
{ pop$ "(" }
{ " (" * }
if$
year * ")" *
}
if$
month empty$
{ skip$ }
{ duplicate$ empty$
{ pop$ month }
{ ", " * month * }
if$
}
if$
number empty$
{ skip$ }
{ duplicate$ empty$
{ pop$ push.nr }
{ ", " * push.nr * }
if$
"~" * number *
}
if$
pages empty$
{ skip$ }
{ duplicate$ empty$
{ skip$ }
{ ", " *
title missing$
{ push.pages.book * }
{ push.pages * }
if$
}
if$
}
if$
}
FUNCTION {push.chapter.pages}
% chapter and pages
{ chapter empty$
{ push.pages }
{ type empty$
{ push.kap }
{ type }
if$
chapter tie.or.space.connect
pages empty$
{ skip$ }
{ ", " * push.pages * }
if$
}
if$
}
FUNCTION {push.in.ed.booktitle}
% main title and volume
{ booktitle empty$
{ "" }
{ push.in " " *
editor empty$
{ skip$ }
{ push.editors * ": " * }
if$
booktitle format.emphasize *
volume empty$
{ skip$ }
{ " " * push.bd * "~" * volume * }
if$
}
if$
}
FUNCTION {push.mastersthesis.type}
% type of a mastersthesis
{ type empty$
{ push.diplom }
{ type }
if$
}
FUNCTION {push.phdthesis.type}
% type of a phdthesis
{ type empty$
{ push.disser }
{ type }
if$
}
FUNCTION {push.tr.number}
% type and number of a technical report
{ number empty$
{ " " }
{ "(" number * "). " * }
if$
"-- " *
type empty$
{ push.forschung * }
{ type * }
if$
}
FUNCTION {push.article.crossref}
% article from a journal
{ key empty$
{ journal empty$
{ "need key or journal for " cite$ * " to crossref " * crossref *
warning$
""
}
{ push.in " " * journal format.emphasize * }
if$
}
{ push.in " " * key * }
if$
" " * push.cite * "{" * crossref * "}" *
pages empty$
{ skip$ }
{ ", " * push.pages * }
if$
}
FUNCTION {push.book.crossref}
% crossreference in BOOKs
{ volume empty$
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
push.siehe
}
{ ". -- " push.bd * "~" * volume *
" " * push.von *
}
if$
" " * push.cite * "{" * crossref * "}" *
}
FUNCTION {push.incoll.inproc.crossref}
% crossreference with In:
{ editor empty$
editor push.field.or.null author push.field.or.null =
or
{ key empty$
{ booktitle empty$
{ push.siehe }
{ push.in " " * booktitle format.emphasize * "." * }
if$
}
{ push.in }
if$
}
{ push.in }
if$
" " * push.cite * "{" * crossref * "}" *
chapter empty$
{ skip$ }
{ ", " *
type empty$
{ push.kap * }
{ type * }
if$
chapter tie.or.space.connect
}
if$
pages empty$
{ skip$ }
{ ", " * push.pages * }
if$
}
FUNCTION {push.crossref}
% a simple crossref
{ crossref empty$
{ "" }
{ push.siehe " " * push.cite * "{" * crossref * "}" * }
if$
}
%%------------------------------------------------------------------------------
%% functions for the different entries
%%------------------------------------------------------------------------------
FUNCTION {article}
% required: author, title, journal, year
% optional: volume, number, pages, month, note, url, issn
{ out.bibitem.start
push.authors "author" out.check.required
set.colon.after
push.title "title" out.check.required
crossref missing$
{ push.article.in.journal out.block
new.sentence
push.vol.year.num.pages out
}
{ push.article.crossref out.block }
if$
url set.period.dash.check
push.url out
note set.period.dash.check
note out
issn set.period.dash.check
push.isbn.issn out
out.bibitem.end
}
FUNCTION {book}
% required: author/editor, title, publisher, year
% optional: volume oder number, series, address, edition, pages, month,
% note, url, isbn
{ out.bibitem.start
author empty$
{ push.editors "author and editor" out.check.required }
{ push.authors.editors out.block }
if$
set.colon.after
crossref missing$
{ push.btitle.vol }
{ push.btitle }
if$
"title" out.check.required
push.edition out
push.address.publisher.year "publisher" out.check.required
new.sentence
crossref missing$
{ push.series.number out }
{ push.book.crossref out.block }
if$
pages set.period.dash.check
push.pages.book out
address empty$
publisher empty$
and
{ skip$ }
{ url set.period.dash.check
push.url out
}
if$
note set.period.dash.check
note out
isbn set.period.dash.check
push.isbn.issn out
out.bibitem.end
}
% booklet see below
% conference see below
FUNCTION {inbook}
% required: author/editor, title, chapter/pages, publisher, year
% optional: volume oder number, series, type, address, month, note, url, isbn
{ out.bibitem.start
author empty$
{ push.editors "author and editor" out.check.required }
{ push.authors out.block }
if$
set.colon.after
push.btitle.vol "title" out.check.required
push.chapter.pages out
crossref missing$
{ push.in.ed.booktitle "booktitle" out.check.required
address empty$
{ part.of.sentence
push.address.publisher.year out
}
{ push.address.publisher.year "publisher" out.check.required }
if$
new.sentence
series empty$
{ skip$ }
{ push.series.number out }
if$
part.of.sentence
address empty$
publisher empty$
and
{ skip$ }
{ url set.period.dash.check
push.url out
}
if$
}
{ push.crossref out.block
url set.period.dash.check
push.url out
}
if$
note set.period.dash.check
note out
isbn set.period.dash.check
push.isbn.issn out
out.bibitem.end
}
FUNCTION {incollection}
% required: author, title, booktitle, publisher, year
% optional: editor, volume oder number, series, type, chapter,
% pages, address, edition, month, note, url
{ out.bibitem.start
push.authors "author" out.check.required
set.colon.after
push.title "title" out.check.required
crossref missing$
{ push.in.ed.booktitle "booktitle" out.check.required
push.edition out
push.address.publisher.year "publisher" out.check.required
new.sentence
push.series.number out
part.of.sentence
push.chapter.pages "pages" out.check.required
address empty$
publisher empty$
and
{ skip$ }
{ url set.period.dash.check
push.url out
}
if$
}
{ push.incoll.inproc.crossref out.block
url set.period.dash.check
push.url out
}
if$
note set.period.dash.check
note out
isbn set.period.dash.check
issn set.period.dash.check
push.isbn.issn out
out.bibitem.end
}
FUNCTION {inproceedings}
% required: author, title, booktitle, year
% optional: editor, volume oder number, series, pages, address, month,
% organization, publisher, note, url
{ out.bibitem.start
push.authors "author" out.check.required
set.colon.after
push.title "title" out.check.required
crossref missing$
{ push.in.ed.booktitle "booktitle" out.check.required
address empty$
{ organization new.sentence.check
push.organization out
part.of.sentence
push.address.publisher.year out
}
{ push.address.publisher.year "publisher" out.check.required }
if$
new.sentence
series empty$
{ skip$ }
{ push.series.number out }
if$
part.of.sentence
push.pages "pages" out.check.required
address empty$
publisher empty$
and
{ skip$ }
{ url set.period.dash.check
push.url out
}
if$
}
{ push.incoll.inproc.crossref out.block
url set.period.dash.check
push.url out
}
if$
note set.period.dash.check
note out
isbn set.period.dash.check
issn set.period.dash.check
push.isbn.issn out
out.bibitem.end
}
FUNCTION {manual}
% required: title
% optional: author, organization, address, edition, month, year, note, url
{ out.bibitem.start
author empty$
{ organization empty$
{ title empty$
{ skip$ }
{ push.btitle "title" out.check.required }
if$
}
{ push.organization out.block
set.colon.after
push.btitle "title" out.check.required
}
if$
}
{ push.authors out.block
set.colon.after
push.btitle "title" out.check.required
}
if$
push.edition "edition" out.check.required
author empty$
{ organization empty$
{ address out
part.of.sentence
}
{ skip$ }
if$
}
{ address ": " * push.organization * out
part.of.sentence
}
if$
push.date out
pages set.period.dash.check
push.pages.book out
url set.period.dash.check
push.url out
note set.period.dash.check
note out
out.bibitem.end
}
FUNCTION {mastersthesis}
% required: author, title, school, year
% optional: type, address, month, note, url
{ out.bibitem.start
push.authors "author" out.check.required
set.colon.after
push.btitle "title" out.check.required
address out
part.of.sentence
school "school" out.check.required
part.of.sentence
push.mastersthesis.type out.block
part.of.sentence
push.date "year" out.check.required
pages set.period.dash.check
push.pages.book out
url set.period.dash.check
push.url out
note set.period.dash.check
note out
out.bibitem.end
}
FUNCTION {misc}
% required:
% optional: author, title, howpublished, month, year, note, url
{ out.bibitem.start
note empty$
{ title empty$
{ skip$ }
{ push.authors.editors out.block
set.colon.after
push.btitle out
howpublished out
push.date out
push.crossref out
url set.period.dash.check
push.url out
}
if$
}
{ note #1 #4 substring$ "u" change.case$ "NORM" =
{ note out
part.of.sentence
push.date out
push.title format.emphasize out
push.crossref out
}
{ author empty$
{ editor empty$
{ organization empty$
{ skip$ }
{ push.organization out.block
set.colon.after
}
if$
}
{ push.editors push.organization * out.block
set.colon.after
}
if$
}
{ push.authors.editors out.block
set.colon.after
}
if$
push.btitle out
push.crossref out
howpublished out
push.date out
new.sentence
push.misc.series out
url set.period.dash.check
push.url out
note set.period.dash.check
note out
}
if$
}
if$
out.bibitem.end
}
FUNCTION {phdthesis}
% required: author, title, school, year
% optional: type, address, month, note, url
{ out.bibitem.start
push.authors "author" out.check.required
set.colon.after
push.btitle "title" out.check.required
address out
part.of.sentence
school "school" out.check.required
part.of.sentence
push.phdthesis.type out.block
part.of.sentence
push.date "year" out.check.required
pages set.period.dash.check
push.pages.book out
url set.period.dash.check
push.url out
note set.period.dash.check
note out
out.bibitem.end
}
FUNCTION {proceedings}
% required: title, year
% optional: editor, volume oder number, series, address, month,
% organization, publisher, note, url
{ out.bibitem.start
editor empty$
{ push.organization }
{ push.editors
organization empty$
{ skip$ }
{ "~; " * push.organization * }
if$
}
if$
out.block
set.colon.after
push.btitle "title" out.check.required
volume empty$
{ skip$ }
{ push.bd "~" * volume format.emphasize * out.block }
if$
push.address.publisher.year "publisher" out.check.required
push.series.number out
pages set.period.dash.check
push.pages.book out
address empty$
publisher empty$
and
{ skip$ }
{ url set.period.dash.check
push.url out
}
if$
note set.period.dash.check
note out
isbn set.period.dash.check
issn set.period.dash.check
push.isbn.issn out
out.bibitem.end
}
FUNCTION {techreport}
% required: author, title, institution, year
% optional: type, number, address, month, note, url
{ out.bibitem.start
author empty$
{ push.editors "author and editor" out.check.required }
{ push.authors.editors out.block }
if$
set.colon.after
push.title "title" out.check.required
institution empty$
{ skip$ }
{ institution new.sentence.check
"/ " institution * out.block
}
if$
push.address.publisher.year out
number new.sentence.check
push.tr.number "number" out.check.required
pages set.period.dash.check
push.pages.book out
address empty$
publisher empty$
and
{ skip$ }
{ url set.period.dash.check
push.url out
}
if$
note "note" out.check.required
isbn set.period.dash.check
issn set.period.dash.check
push.isbn.issn out
out.bibitem.end
}
FUNCTION {booklet}
% required: title
% optional: author, howpublished, address, month, year, note, url
{ misc % so far
}
FUNCTION {conference}
% required: author, title, note
% optional: month, year, url
{ inproceedings % like stated in BibTeXing by O. Patashnik
}
FUNCTION {masterthesis}
% required: author, title, school, year
% optional: type, address, month, note, url
{ mastersthesis % just because of a typo in former version
}
FUNCTION {unpublished}
% required: author, title, note
% optional: month, year, url
{ misc % so far
}
FUNCTION {default.type}
% all other types
{ misc
}
%%------------------------------------------------------------------------------
%% for producing the labels
%%------------------------------------------------------------------------------
FUNCTION {sortify}
% simplify for sorting
{ purify$
"l" change.case$
}
FUNCTION {chop.word}
% cut a word
{ 's :=
'len :=
s #1 len substring$ =
{ s len #1 + global.max$ substring$ }
{ s }
if$
}
FUNCTION {chop.article}
% cut article from a word
{ 't :=
"A " #2
"An " #3
"Der " #4
"Die " #4
"Das " #4
"Ein " #4
"Eine " #5
"The " #4 t chop.word
chop.word
chop.word
chop.word
chop.word
chop.word
chop.word
chop.word
}
FUNCTION {format.lab.names}
% format names for the label
{ 's :=
s #1 "{vv~}{ll}" format.name$
s num.names$ duplicate$
#2 >
{ pop$ " " * push.ua * }
{ #2 <
{ skip$ }
{ s #2 "{ll}" format.name$ "others" =
{ " " * push.ua * }
{ " " * push.und * " " * s #2 "{vv~}{ll}" format.name$ * }
if$
}
if$
}
if$
}
FUNCTION {author.label}
% label from key or author
{ key empty$
{ author empty$
{ cite$ }
{ author format.lab.names }
if$
}
{ key }
if$
}
FUNCTION {author.editor.label}
% label from key, author or editor
{ key empty$
{ author empty$
{ editor empty$
{ cite$ }
{ editor format.lab.names }
if$
}
{ author format.lab.names }
if$
}
{ key }
if$
}
FUNCTION {author.organization.label}
% label from key, author or organization
{ key empty$
{ author empty$
{ organization empty$
{ cite$ }
{ organization chop.article }
if$
}
{ author format.lab.names }
if$
}
{ key }
if$
}
FUNCTION {editor.organization.label}
% label from key, editor or organization
{ key empty$
{ editor empty$
{ organization empty$
{ cite$ }
{ organization chop.article }
if$
}
{ editor format.lab.names }
if$
}
{ key }
if$
}
FUNCTION {calc.short.authors}
% make short label (only first author)
{ type$ "book" =
type$ "inbook" =
or
{ author.editor.label }
{ type$ "proceedings" =
{ editor.organization.label }
{ type$ "manual" =
{ author.organization.label }
{ author.label }
if$
}
if$
}
if$
'short.list :=
}
FUNCTION {calc.label}
% make a full label
{ calc.short.authors
short.list "(" *
year push.field.or.null format.dashes * 'label :=
short.list " " *
year push.field.or.null format.dashes * 'dinat.label :=
label sortify 'sort.label :=
}
%%------------------------------------------------------------------------------
%% sorting
%%------------------------------------------------------------------------------
FUNCTION {sort.format.names}
% format names for sorting
{ 's :=
#1 'nameptr :=
""
s num.names$ 'namesleft :=
{ namesleft #0 > } % while
{ nameptr #1 =
{ skip$ }
{ " " * }
if$
s nameptr "{ll{ }}{ ff{ }}{ vv{ }}{ jj{ }}" format.name$ 't :=
namesleft #1 =
t "others" =
and
{ "[" * push.ua * "]" * }
{ t sortify * }
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$ % { namesleft #0 > }
}
FUNCTION {sort.format.title}
% format title for sorting (without article)
{ chop.article
sortify
#1 global.max$ substring$
}
FUNCTION {author.sort}
% author or key for sorting
{ key empty$
{ author empty$
{ "to sort, need author or key in " cite$ * warning$
""
}
{ author sort.format.names }
if$
}
{ key sortify }
if$
}
FUNCTION {author.editor.sort}
% author, editor or key for sorting
{ key empty$
{ author empty$
{ editor empty$
{ "to sort, need author, editor, or key in " cite$ * warning$
""
}
{ editor sort.format.names }
if$
}
{ author sort.format.names }
if$
}
{ key sortify }
if$
}
FUNCTION {author.organization.sort}
% author, organization or key for sorting
{ key empty$
{ author empty$
{ organization empty$
{ "to sort, need author, organization, or key in " cite$ * warning$
""
}
{ organization chop.article sortify }
if$
}
{ author sort.format.names }
if$
}
{ key sortify }
if$
}
FUNCTION {editor.organization.sort}
% editor, organization or key for sorting
{ key empty$
{ editor empty$
{ organization empty$
{ "to sort, need editor, organization, or key in " cite$ * warning$
""
}
{ organization chop.article sortify }
if$
}
{ editor sort.format.names }
if$
}
{ key sortify }
if$
}
FUNCTION {presort}
% first sort
{ calc.label
sort.label
" " *
type$ "book" =
type$ "inbook" =
or
{ author.editor.sort }
{ type$ "proceedings" =
{ editor.organization.sort }
{ type$ "manual" =
{ author.organization.sort }
{ author.sort }
if$
}
if$
}
if$
" " *
year push.field.or.null sortify *
" " *
title push.field.or.null sort.format.title *
#1 entry.max$ substring$
'sort.label :=
sort.label *
#1 entry.max$ substring$
'sort.key$ :=
}
STRINGS { last.label next.extra }
INTEGERS { last.extra.num label.count }
FUNCTION {initialize.label}
{ "" 'last.label :=
#0 'label.count :=
}
FUNCTION {forward.pass}
% find maximum additional character for identical labels
{ last.label label =
{ last.extra.num #1 + 'last.extra.num :=
last.extra.num int.to.chr$ 'extra.label :=
}
{ "a" chr.to.int$ 'last.extra.num :=
"" 'extra.label :=
label 'last.label :=
}
if$
label.count #1 + 'label.count :=
}
FUNCTION {reverse.pass}
% add additional characters to identical labels
{ next.extra "b" =
{ "a" 'extra.label := }
{ skip$ }
if$
extra.label 'next.extra :=
extra.label empty$
{ "" }
{ "{\natexlab{" extra.label * "}}" * }
if$
'extra.label :=
label extra.label * 'label :=
dinat.label extra.label * 'dinat.label :=
}
FUNCTION {bib.sort.order}
{ sort.label 'sort.key$ :=
}
%%------------------------------------------------------------------------------
%% making the bbl. file
%%------------------------------------------------------------------------------
FUNCTION {begin.bib}
% beginning of the file
{ preamble$ empty$
{ skip$ }
{ preamble$
write$
newline$
}
if$
"\begin{thebibliography}{" label.count int.to.str$ * "}" *
write$
newline$
"% this bibliography was produced with the style dinat.bst v2.5"
write$
newline$
"\makeatletter"
write$
newline$
"\newcommand{\dinatlabel}[1]%"
write$
newline$
"{\ifNAT@numbers\else\NAT@biblabelnum{#1}\hspace{2\labelsep}\fi}"
write$
newline$
"\makeatother"
write$
newline$
"\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi"
write$
newline$
"\expandafter\ifx\csname url\endcsname\relax\def\url#1{\texttt{#1}}\fi"
write$
newline$
}
FUNCTION {end.bib}
% end of the bbl. file
{ newline$
"\end{thebibliography}" write$ newline$
}
%%------------------------------------------------------------------------------
%% processing the .bib file
%%------------------------------------------------------------------------------
READ
ITERATE {presort}
SORT
EXECUTE {initialize.label}
ITERATE {forward.pass}
REVERSE {reverse.pass}
ITERATE {bib.sort.order}
SORT
EXECUTE {begin.bib}
EXECUTE {init.state.consts}
ITERATE {call.type$}
EXECUTE {end.bib}