summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/bibtex/bst/apacite
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-03-03 00:57:20 +0000
committerKarl Berry <karl@freefriends.org>2009-03-03 00:57:20 +0000
commitaf897fb19e6f4e2fdde23a714556208290752d03 (patch)
tree0b5ad8895485dec6733554c28944d0c6e13c625b /Master/texmf-dist/bibtex/bst/apacite
parent940b0c7ca7bd69adb7641e133a2f0004db8af586 (diff)
apacite update (2mar09)
git-svn-id: svn://tug.org/texlive/trunk@12295 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/bibtex/bst/apacite')
-rw-r--r--Master/texmf-dist/bibtex/bst/apacite/apacann.bst5259
-rw-r--r--Master/texmf-dist/bibtex/bst/apacite/apacannx.bst5259
-rw-r--r--Master/texmf-dist/bibtex/bst/apacite/apacite.bst28
-rw-r--r--Master/texmf-dist/bibtex/bst/apacite/apacitex.bst28
4 files changed, 10554 insertions, 20 deletions
diff --git a/Master/texmf-dist/bibtex/bst/apacite/apacann.bst b/Master/texmf-dist/bibtex/bst/apacite/apacann.bst
new file mode 100644
index 00000000000..dfdd1bbb0b8
--- /dev/null
+++ b/Master/texmf-dist/bibtex/bst/apacite/apacann.bst
@@ -0,0 +1,5259 @@
+%%
+%% This is file `apacann.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% apacite.dtx (with options: `bibstyle,annotated')
+%%
+%% This is a generated file.
+%%
+%% Copyright (C) 1994-2009 Erik Meijer and any individual authors listed
+%% elsewhere in this file.
+%%
+%% This file is part of the `apacite' package.
+%% -------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% The `apacite' package consists of the files apacite.dtx and
+%% apacite.ins, and the following generated files:
+%% apacite.sty, apacite.bst, apacitex.bst, apa5ex.bib,
+%% apacite.drv, apacdoc.sty, apacann.bst, apacannx.bst,
+%% english.apc, dutch.apc, finnish.apc, french.apc, german.apc,
+%% ngerman.apc, greek.apc, norsk.apc, spanish.apc, swedish.apc.
+%%
+%% This work has the LPPL maintenance status `maintained'
+%%
+%% The Current Maintainer of this work is Erik Meijer
+%%
+%% This file may only be distributed together with a copy of the
+%% source files of the apacite package, i.e., apacite.dtx and
+%% apacite.ins. You may however distribute the apacite package without
+%% the generated files.
+%%
+%% apacann.bst
+%% [2009/03/01 v4.05 APA annotated bibliography style]
+%% apacann.bst : reference list according to APA manual
+%% with annotations
+%% Written by Erik Meijer
+
+FUNCTION {identify.apacite.version}
+{ % Put identifying string in the .blg file
+ "apacann.bst"
+ " [2009/03/01 v4.05 APA annotated bibliography style]"
+ * top$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ENTRY
+ { address
+ annote % only used for annotated version
+ annotate % only used for annotated version
+ author
+ booktitle % for articles in books
+ chair % for lectures
+ chapter % for incollection, esp. internet documents
+ day
+ edition
+ editor
+ englishtitle % english translation of title in other language
+ firstkey % key for first citation
+ howpublished
+ institution % for technical reports
+ journal
+ key % key for second and later citations, or all
+ % citations if firstkey is missing
+ lastchecked % for URL's
+ month
+ note
+ number % number of journal or report
+ organization % for unpublished
+ %
+ % for reprints, translations, etc.
+ %
+ originaladdress
+ originalbooktitle
+ originaledition
+ originaleditor
+ originaljournal
+ originalnumber
+ originalpages
+ originalpublisher
+ originalvolume
+ originalyear
+ %
+ % back to normal
+ %
+ pages
+ publisher
+ school % for theses
+ series % not used
+ symposium % for lectures
+ text % for literals
+ title
+ translator % translator of book (or article)
+ type % type of phdthesis (e.g., Doctoral dissertation)
+ % or type of article (e.g., Letter to the editor)
+ % etc.
+ url
+ volume
+ year
+ }
+ { title.number % for sorting titles
+ cite.initials % dummy (0-1) indicating whether or not
+ % initials of the 1st author must
+ % be used for citing
+ cite.num.names.full % number of names to be cited for full and
+ cite.num.names.short % short cite
+ add.to.year % For a, b, c, etc. after year
+ % in multiple citations with same author-year
+ }
+ { year.label % For sorting entries by year
+ author.year.sort.label % For sorting entries and checking whether
+ % initials should be added, how many authors
+ % should be cited and whether a, b, etc.
+ % after year is necessary
+ title.sort.label % for sorting titles
+ type.2 % Replacement for type with misc entries and
+ % entries that revert to misc.
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+INTEGERS { len pos name.max old.number numnames numnames.old
+ nameptr lastname format.num.names cite.initials.old
+ cite.num.names.old add.to.year.old forward
+ multiresult dot brace.level
+ }
+
+STRINGS { s t u old.label field
+ aut1f aut1s aut1f.old aut1s.old
+ aut2 aut2.old
+ aut3 aut3.old
+ aut4 aut4.old
+ aut5 aut5.old
+ aut6 aut6.old
+ year.label.old
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {test} { #0 }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.index} { #0 }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+MACRO {jan} {"{\APACmonth{01}}"}
+
+MACRO {feb} {"{\APACmonth{02}}"}
+
+MACRO {mar} {"{\APACmonth{03}}"}
+
+MACRO {apr} {"{\APACmonth{04}}"}
+
+MACRO {may} {"{\APACmonth{05}}"}
+
+MACRO {jun} {"{\APACmonth{06}}"}
+
+MACRO {jul} {"{\APACmonth{07}}"}
+
+MACRO {aug} {"{\APACmonth{08}}"}
+
+MACRO {sep} {"{\APACmonth{09}}"}
+
+MACRO {oct} {"{\APACmonth{10}}"}
+
+MACRO {nov} {"{\APACmonth{11}}"}
+
+MACRO {dec} {"{\APACmonth{12}}"}
+
+MACRO {winter} {"{\APACmonth{13}}"}
+
+MACRO {spring} {"{\APACmonth{14}}"}
+
+MACRO {summer} {"{\APACmonth{15}}"}
+
+MACRO {fall} {"{\APACmonth{16}}"}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % issues warning if field is empty
+ % call with
+ % "field" field warning.if.empty
+ % Note that the first field must be between quotes
+ % because it is the fieldname for use in the warning message.
+ %
+FUNCTION {warning.if.empty}
+{ empty$
+ { "No " swap$ * " in " * cite$ * warning$ }
+ { pop$ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % issues warning if title, type, and howpublished are empty
+ %
+FUNCTION {check.relevant.fields}
+{ title empty$
+ type empty$ and
+ howpublished empty$ and
+ { "No title, type, and howpublished in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % delivers 1 if (both editor and translator
+ % not empty and not equal to each other)
+ % 0 if (editor or translator empty) or
+ % (editor = translator)
+ %
+FUNCTION {editor.ne.trans}
+{ translator empty$
+ { #0 }
+ { editor empty$
+ { #0 }
+ { translator editor =
+ { #0 }
+ { #1 }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {conv.int.to.str}
+{ duplicate$ #10 <
+ { "0000" swap$ int.to.str$ * }
+ { duplicate$ #100 <
+ { "000" swap$ int.to.str$ * }
+ { duplicate$ #1000 <
+ { "00" swap$ int.to.str$ * }
+ { duplicate$ #10000 <
+ { "0" swap$ int.to.str$ * }
+ { int.to.str$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {ref.type}
+{ type$ "article" =
+ type$ "magazine" =
+ type$ "newspaper" =
+ type$ "book" =
+ type$ "techreport" =
+ type$ "unpublished" =
+ type$ "misc" =
+ type$ "booklet" =
+ type$ "manual" =
+ type$ "proceedings" =
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ { #1 }
+ { type$ "incollection" =
+ type$ "phdthesis" =
+ type$ "mastersthesis" =
+ type$ "lecture" =
+ type$ "inbook" =
+ type$ "inproceedings" =
+ type$ "conference" =
+ type$ "intechreport" =
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ { #2 }
+ { type$ "literal" =
+ { #3 }
+ { #0 }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {is.atype}
+{ type$ "article" =
+ type$ "magazine" =
+ type$ "newspaper" =
+ type$ "incollection" =
+ type$ "inbook" =
+ type$ "inproceedings" =
+ type$ "conference" =
+ type$ "intechreport" =
+ type$ "manual" =
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ { #1 }
+ { journal empty$ not
+ %
+ type$ "phdthesis" =
+ type$ "mastersthesis" =
+ or
+ %
+ and
+ { #1 }
+ { type$ "misc" =
+ type empty$ not and
+ { type "\bibmessage" =
+ type "\bibcomputerprogram" =
+ type "\bibcomputerprogrammanual" =
+ type "\bibcomputerprogramandmanual" =
+ type "\bibcomputersoftware" =
+ type "\bibcomputersoftwaremanual" =
+ type "\bibcomputersoftwareandmanual" =
+ type "\bibprogramminglanguage" =
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ { #1 }
+ { #0 }
+ if$
+ }
+ { #0 }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with connect string
+ % if one of them empty, then connect string
+ % is left out
+ %
+ % call with S1 S2 connectstring connect.check
+ %
+FUNCTION {connect.check}
+{ 'u :=
+ %
+ % if S2 = ""
+ %
+ duplicate$ empty$
+ %
+ % then remove S2
+ %
+ { pop$
+ %
+ % S1 is on top of stack.
+ % if it is empty, it is replaced by the empty string ""
+ %
+ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ }
+ %
+ % else swap S1 and S2 so that S1 can be checked
+ %
+ { swap$
+ %
+ % if S1 is empty, remove S1 so that S2 is left on the
+ % stack and is the result is given
+ %
+ duplicate$ empty$
+ { pop$ }
+ %
+ % now the real work starts:
+ % push the connect string "C"
+ % so that top of stack is "C" "S1" "S2"
+ % concatenate, so that top of stack is
+ % "S1+C" "S2"
+ %
+ { u *
+ %
+ % swap and concatenate
+ %
+ swap$ *
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with space ("\ ")
+ % if length of second is 4 or larger,
+ % connects them with non-breaking space ("tie", "~")
+ % if length of second smaller than 4
+ %
+ % call with S1 S2 tie.or.space.connect
+ % result: "S1\ S2" or "S1~S2"
+ %
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #4 <
+ { "~" }
+ { "\ " }
+ if$
+ swap$ * *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with comma (", ")
+ % if one of them is empty, the comma is left out
+ %
+ % call with S1 S2 connect.with.comma.check
+ % result: "S1, S2"
+ %
+FUNCTION {connect.with.comma.check}
+{ ", " connect.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with semicolon ("; ")
+ % if one of them is empty, semicolon is left out
+ %
+ % call with S1 S2 connect.with.semicolon.check
+ % result: "S1; S2"
+ %
+FUNCTION {connect.with.semicolon.check}
+{ "; " connect.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with colon (": ")
+ % if one of them is empty, colon is left out
+ %
+ % call with S1 S2 connect.with.colon.check
+ % result: "S1: S2"
+ %
+FUNCTION {connect.with.colon.check}
+{ ": " connect.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with space ("\ ")
+ %
+ % call with S1 S2 connect.with.space.check
+ % result: "S1\ S2"
+ %
+FUNCTION {connect.with.space.check}
+{ "\ " connect.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % encloses string in pre- and postfix string
+ % call with
+ % prefix postfix S enclose.check
+ % delivers empty string if S empty
+ %
+FUNCTION {enclose.check}
+{ duplicate$ empty$
+ { pop$ pop$ pop$
+ ""
+ }
+ { swap$ * * }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % emphasizes top of stack
+ % call with
+ % "string" emphasize.check
+ %
+FUNCTION {emphasize.check}
+{ "\Bem{" swap$
+ "}" swap$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % brackets top of stack
+ % call with
+ % "string" bracket
+ %
+FUNCTION {bracket.check}
+{ "[" swap$
+ "]" swap$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % parenthesizes top of stack
+ % call with
+ % "string" parenthesize
+ %
+FUNCTION {parenthesize.check}
+{ "(" swap$
+ ")" swap$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % checks whether argument is "multiresult":
+ % whether it contains '-', '+', or ',' characters
+ % used with pages to check whether pp. or p. must be used
+ %
+FUNCTION {multi.result.check}
+{ 't :=
+ #0 'multiresult :=
+ %
+ % while (not multiresult) and (length(t) > 1) do
+ %
+ { multiresult not
+ t text.length$ #1 >
+ and
+ }
+ %
+ % if t(1-2) = "--" or t(1) = "+" or ","
+ % then multiresult = 1
+ % else t = t(2-last)
+ %
+ { t #1 #2 substring$ 's :=
+ "--" s =
+ { #1 'multiresult := }
+ { t #1 #1 substring$ 's :=
+ "+" s =
+ "," s =
+ or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ if$
+ }
+ while$
+ multiresult
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Checks whether an author is a corporate author, i.e.,
+ % whether the field starts with "{\bibcorporate".
+ % Call with
+ % field is.bibcorporate
+ %
+FUNCTION {is.bibcorporate}
+{ #1 #14 substring$ "{\bibcorporate" = }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {remove.spaces}
+{ % Remove spaces from string.
+ % Works best if string only contains alphanumeric characters and spaces.
+ 's := % The original string
+ s text.length$ 'len := % Its length (no. of characters)
+ "" 't := % Initialize the transformed string
+ #0 'pos :=
+ %
+ % while (pos < len) do
+ %
+ { pos len < }
+ { pos #1 + 'pos :=
+ s pos #1 substring$ 'u :=
+ %
+ % u is the pos-th character in s
+ % If it is a space, move to next character,
+ % else copy character to output.
+ %
+ u " " =
+ 'skip$
+ { t u * 't := }
+ if$
+ }
+ while$
+ %
+ % Now push the result back on the stack
+ t
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % starting new block by writing what's left on the stack,
+ % starting a new line and adding some extra space or
+ % whatever is more defined in \newblock
+ %
+FUNCTION {output.end.block}
+{ write$
+ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % starting new block by writing what's left on the stack,
+ % starting a new line and adding some extra space or
+ % whatever is more defined in \newblock
+ %
+FUNCTION {output.new.block}
+{ output.end.block
+ "\newblock" write$
+ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % starting new block by writing what's left on the stack,
+ % starting a new line and adding some extra space or
+ % whatever is more defined in \newblock
+ %
+FUNCTION {output.dot.new.block}
+{ add.period$
+ output.new.block
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {start.new.block}
+{ newline$
+ "\unskip\ " write$ newline$
+ "\newblock " write$ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % finish current entry
+ % by writing what's left on the stack and starting a new line
+ %
+FUNCTION {fin.entry}
+{ output.end.block
+ "\PrintBackRefs{\CurrentBib}" write$ newline$
+ test
+ { "\vspace{\baselineskip}" write$ newline$ }
+ 'skip$
+ if$
+ %
+ % According to TLC2, pp. 810-811, both annote and annotate fields are
+ % known, so support them both, but do not print them both, in case
+ % someone wants to make a file that is compatible with both the annotate
+ % and annotation styles and thus duplicates the information. Instead, we
+ % give annote priority.
+ %
+ annote empty$
+ {% Try annotate
+ annotate empty$
+ 'skip$
+ { % add annotation
+ "\begin{APACrefannotation}" write$ newline$
+ annotate write$ newline$
+ "\end{APACrefannotation}" write$ newline$
+ }
+ if$
+ }
+ { % add annotation
+ "\begin{APACrefannotation}" write$ newline$
+ annote write$ newline$
+ "\end{APACrefannotation}" write$ newline$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {sort.name.format} { "{ll{}}{ f{}}{ vv{}}{ jj{}}" }
+
+FUNCTION {cite.name.format} { "{ll}" }
+
+FUNCTION {cite.initials.name.format} { "{f{\BPBI }.~~}{vv }{ll}{ jj}" }
+
+FUNCTION {author.name.format} { "{ll}{, f{\BPBI }.}{ vv}{, jj}" }
+
+FUNCTION {editor.name.format} { "{f{\BPBI }.~~}{vv }{ll}{ jj}" }
+
+FUNCTION {index.name.format} { "{ll}{, f{\BPBI }.}{ vv}{, jj}" }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {init.initials}
+{ "yyyyy" 'aut1f.old :=
+ "yyyyy" 'aut1s.old :=
+ #0 'cite.initials.old :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {update.no.initials}
+{ 'field :=
+ field 'aut1f.old :=
+ field 'aut1s.old :=
+ #0 'cite.initials.old :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {check.add.initials.aut}
+{ %
+ % If last name is equal to previous last name
+ % but initials are different, then initials should
+ % be cited. If initials are also the same, initials
+ % should be cited if that is the case for the previous
+ % author .
+ %
+ aut1s aut1s.old =
+ { aut1f aut1f.old =
+ { cite.initials.old 'cite.initials := }
+ { #1 'cite.initials :=
+ aut1f 'aut1f.old :=
+ aut1s 'aut1s.old :=
+ cite.initials 'cite.initials.old :=
+ }
+ if$
+ }
+ { %
+ % Different last name.
+ aut1f 'aut1f.old :=
+ aut1s 'aut1s.old :=
+ cite.initials 'cite.initials.old :=
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {check.add.initials.field}
+{ 'field :=
+ field #1 cite.initials.name.format format.name$ 'aut1f :=
+ field #1 cite.name.format format.name$ 'aut1s :=
+ %
+ % Now do the actual work
+ %
+ check.add.initials.aut
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {check.add.initials}
+{ %
+ % Check whether author or editor or other field acts as author.
+ % Initials are only relevant with author or editor.
+ %
+ firstkey empty$ not
+ { key empty$ not
+ { %
+ % Both key and firstkey are nonempty.
+ % Then, key is treated as last name of first author,
+ % and firstkey is treated as last name + initials of
+ % first author .
+ %
+ firstkey sortify remove.spaces 'aut1f :=
+ key sortify remove.spaces 'aut1s :=
+ check.add.initials.aut
+ }
+ { firstkey sortify remove.spaces update.no.initials }
+ if$
+ }
+ { key empty$ not
+ { key sortify remove.spaces update.no.initials }
+ { %
+ % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { %
+ % Format first author with and without initials
+ author empty$
+ { title.sort.label update.no.initials }
+ { author check.add.initials.field }
+ if$
+ }
+ { %
+ % Format first author with and without initials
+ author empty$
+ { editor empty$
+ { title.sort.label update.no.initials }
+ { editor check.add.initials.field }
+ if$
+ }
+ { author check.add.initials.field }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {tentative.cite.num.names.field}
+{ 'field :=
+ field num.names$ 'numnames :=
+ numnames #3 <
+ { %
+ % 1 or 2 names: always cite all of them.
+ numnames 'cite.num.names.full :=
+ numnames 'cite.num.names.short :=
+ }
+ { numnames #6 <
+ { %
+ % 3-5 names: cite all of them the first time,
+ % only the first name later times
+ numnames 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { %
+ % 6 or more names: cite only the first name
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {tentative.cite.num.names}
+{ %
+ % Check whether author or editor or other field acts as author.
+ % Number of names is only relevant with author or editor.
+ %
+ firstkey empty$ not
+ {
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { key empty$ not
+ {
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { %
+ % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { %
+ % Format first author with and without initials
+ author empty$
+ {
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { author tentative.cite.num.names.field }
+ if$
+ }
+ { %
+ % Format first author with and without initials
+ author empty$
+ { editor empty$
+ {
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { editor tentative.cite.num.names.field }
+ if$
+ }
+ { author tentative.cite.num.names.field }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {init.cite.num.names}
+{ #0 'cite.num.names.old :=
+ #0 'numnames.old :=
+ "yyyy" 'year.label.old :=
+ #0 'add.to.year.old :=
+ "" 'aut1f.old :=
+ "" 'aut2.old :=
+ "" 'aut3.old :=
+ "" 'aut4.old :=
+ "" 'aut5.old :=
+ "" 'aut6.old :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {update.cite.num.names}
+{ cite.num.names.short 'cite.num.names.old :=
+ numnames 'numnames.old :=
+ year.label 'year.label.old :=
+ add.to.year 'add.to.year.old :=
+ aut1f 'aut1f.old :=
+ aut2 'aut2.old :=
+ aut3 'aut3.old :=
+ aut4 'aut4.old :=
+ aut5 'aut5.old :=
+ aut6 'aut6.old :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.6.authors}
+{ %
+ % First author: with initials.
+ %
+ field #1 cite.initials.name.format format.name$ 'aut1f :=
+ %
+ % Second and later authors: without initials.
+ %
+ numnames #1 >
+ name.max #1 >
+ and
+ { %
+ % 2nd author
+ field #2 cite.name.format format.name$ 'aut2 :=
+ %
+ numnames #2 >
+ name.max #2 >
+ and
+ { %
+ % 3nd author
+ field #3 cite.name.format format.name$ 'aut3 :=
+ %
+ numnames #3 >
+ name.max #3 >
+ and
+ { %
+ % 4th author
+ field #4 cite.name.format format.name$ 'aut4 :=
+ %
+ numnames #4 >
+ name.max #4 >
+ and
+ { %
+ % 5th author
+ field #5 cite.name.format format.name$ 'aut5 :=
+ %
+ numnames #5 >
+ name.max #5 >
+ and
+ { %
+ % 6th author
+ field #6 cite.name.format format.name$ 'aut6 :=
+ }
+ { %
+ % 5 authors: 6 is empty
+ %
+ "" 'aut6 :=
+ }
+ if$
+ }
+ { %
+ % 4 authors: 5-6 are empty
+ %
+ "" 'aut5 :=
+ "" 'aut6 :=
+ }
+ if$
+ }
+ { %
+ % 3 authors: 4-6 are empty
+ %
+ "" 'aut4 :=
+ "" 'aut5 :=
+ "" 'aut6 :=
+ }
+ if$
+ }
+ { %
+ % 2 authors: 3-6 are empty
+ %
+ "" 'aut3 :=
+ "" 'aut4 :=
+ "" 'aut5 :=
+ "" 'aut6 :=
+ }
+ if$
+ }
+ { %
+ % Only 1 author: 2-6 are empty
+ %
+ "" 'aut2 :=
+ "" 'aut3 :=
+ "" 'aut4 :=
+ "" 'aut5 :=
+ "" 'aut6 :=
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {change.add.to.year}
+{
+ forward #1 =
+ { %
+ % Moving forward: this add.to.year number must be 1 higher than
+ % previous.
+ %
+ add.to.year.old #0 >
+ { add.to.year.old #1 + 'add.to.year := }
+ { #2 'add.to.year := }
+ if$
+ }
+ { %
+ % Moving backward: this add.to.year number must be 1 lower than
+ % previous.
+ %
+ add.to.year.old #1 - 'add.to.year :=
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.num.names.1.or.2}
+{ %
+ numnames numnames.old =
+ { %
+ % Same number of names: ambiguity could arise. Check whether current
+ % and previous have the same author(s).
+ %
+ aut1f aut1f.old =
+ { %
+ % Same first author: if the second author is also the same or if
+ % there is only one author, a's and b's should be added.
+ %
+ aut2 aut2.old =
+ numnames #2 =
+ and
+ %
+ numnames #1 =
+ or
+ { %
+ % Same author(s): add to year.
+ %
+ change.add.to.year
+ }
+ { %
+ % Different second author: no ambiguity possible.
+ %
+ skip$
+ }
+ if$
+ }
+ { %
+ % Different first author: no ambiguity possible.
+ %
+ skip$
+ }
+ if$
+ }
+ { %
+ % Different number of names: no ambiguity possible.
+ %
+ skip$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.num.names.3.or.more}
+{ %
+ % Check whether current and previous have the same first author.
+ %
+ aut1f aut1f.old =
+ { %
+ % Same first author: check second author
+ %
+ aut2 aut2.old =
+ { %
+ % Same 1st & 2nd author: check 3rd.
+ %
+ aut3 aut3.old =
+ { %
+ % Same 1st-3rd authors: check 4th.
+ %
+ numnames.old #3 =
+ { numnames #3 =
+ { %
+ % Both current and previous have 3 authors, which are
+ % the same, so both have identical author-year
+ % combinations, so ambiguity should be resolved by
+ % a's and b's. Check whether more authors were
+ % necessary for previous one.
+ %
+ change.add.to.year
+ cite.num.names.short cite.num.names.old <
+ { cite.num.names.old
+ 'cite.num.names.short :=
+ }
+ 'skip$
+ if$
+ }
+ { %
+ % Previous has 3 authors, current has more, with same
+ % first 3, so at least 4 must be used for current to
+ % make a difference.
+ %
+ cite.num.names.short #4 <
+ { #4 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { numnames #3 =
+ { %
+ % Current has 3 authors, previous has more, with same
+ % first 3, so all 3 of current must be used.
+ %
+ numnames 'cite.num.names.short :=
+ }
+ { %
+ % Same 1st-3rd author and both current and previous
+ % have at least 4 authors: check 4th.
+ %
+ aut4 aut4.old =
+ { %
+ % Same 1st-4th authors: check 5th.
+ %
+ numnames.old #4 =
+ { numnames #4 =
+ { %
+ % Both current and previous have 4 authors,
+ % which are the same, so both have
+ % identical author-year combinations, so
+ % ambiguity should be resolved by a's and
+ % b's. Check whether more authors were
+ % necessary for previous one.
+ %
+ change.add.to.year
+ cite.num.names.short cite.num.names.old <
+ { cite.num.names.old
+ 'cite.num.names.short :=
+ }
+ 'skip$
+ if$
+ }
+ { %
+ % Previous has 4 authors, current has more,
+ % with same first 4, so at least 5 must be
+ % used for current to make a difference.
+ %
+ cite.num.names.short #5 <
+ { #5 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { numnames #4 =
+ { %
+ % Current has 4 authors, previous has more,
+ % with same first 4, so all 4 of current
+ % must be used.
+ %
+ numnames 'cite.num.names.short :=
+ }
+ { %
+ % Same 1st-4th author and both current and
+ % previous have at least 5 authors: check
+ % 5th.
+ %
+ aut5 aut5.old =
+ { %
+ % Same 1st-5th authors: check 6th.
+ %
+ numnames.old #5 =
+ { numnames #5 =
+ { %
+ % Both current and previous
+ % have 5 authors, which are the
+ % same, so both have identical
+ % author-year combinations, so
+ % ambiguity should be resolved
+ % by a's and b's. Check whether
+ % more authors were necessary
+ % for previous one.
+ %
+ change.add.to.year
+ cite.num.names.short
+ cite.num.names.old <
+ { cite.num.names.old
+ 'cite.num.names.short :=
+ }
+ 'skip$
+ if$
+ }
+ { %
+ % Previous has 5 authors,
+ % current has more, with same
+ % first 5, so at least 6 must
+ % be used for current to make
+ % a difference.
+ %
+ cite.num.names.short #6 <
+ { #6 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { numnames #5 =
+ { %
+ % Current has 5 authors,
+ % previous has more, with same
+ % first 5, so all 5 of current
+ % must be used.
+ %
+ numnames 'cite.num.names.short :=
+ }
+ { %
+ % Same 1st-5th author and both
+ % current and previous have at
+ % least 6 authors. If one has
+ % 6 authors and the other has
+ % more or the 6th is different,
+ % 6 should be used (which is
+ % the maximum).
+ %
+ numnames #6 >
+ numnames.old #6 =
+ and
+ %
+ numnames #6 =
+ numnames.old #6 >
+ and
+ %
+ or
+ %
+ aut6 aut6.old =
+ not
+ %
+ or
+ { #6 cite.num.names.short <
+ { #6
+ 'cite.num.names.short
+ :=
+ }
+ 'skip$
+ if$
+ }
+ { %
+ % The first 6 authors are
+ % the same and either both
+ % have 6 or both have more.
+ % So for all practical
+ % purposes they have
+ % identical author-year
+ % combination, so ambiguity
+ % should be resolved by a's
+ % and b's. Check whether
+ % more authors were
+ % necessary for previous
+ % one.
+ %
+ change.add.to.year
+ cite.num.names.short
+ cite.num.names.old
+ <
+ { cite.num.names.old
+ 'cite.num.names.short
+ :=
+ }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { %
+ % Different 5th author: citing 5 authors is
+ % sufficient for this comparison.
+ %
+ cite.num.names.short #5 <
+ { #5 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { %
+ % Different 4th author: citing 4 authors is
+ % sufficient for this comparison.
+ %
+ cite.num.names.short #4 <
+ { #4 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { %
+ % Different 3rd author: citing 3 authors is sufficient for this
+ % comparison.
+ %
+ cite.num.names.short #3 <
+ { #3 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { %
+ % Different 2nd author: citing 2 authors is sufficient for this
+ % comparison.
+ %
+ cite.num.names.short #2 <
+ { #2 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { %
+ % Different first author: no ambiguity, move to next entry.
+ %
+ skip$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.num.names.field}
+{ 'field :=
+ field num.names$ 'numnames :=
+ %
+ % Format authors
+ %
+ format.6.authors
+ %
+ % Now compare authors with authors of previous entry.
+ %
+ cite.num.names.short numnames.old >
+ { %
+ % The previous entry has less authors than already defined
+ % necessary to be cited. No ambiguity is possible and we're ready.
+ %
+ skip$
+ }
+ { %
+ % Both previous and current entry have at least one author .
+ %
+ year.label year.label.old =
+ { %
+ % Same year label: possibly ambiguous citation.
+ %
+ % First check: current and/or previous have 1 or
+ % 2 authors.
+ %
+ numnames #3 <
+ numnames.old #3 <
+ or
+ %
+ { definitive.cite.num.names.1.or.2 }
+ { definitive.cite.num.names.3.or.more }
+ if$
+ }
+ { %
+ % Different year label: everything's fine,
+ % move to next entry.
+ %
+ skip$
+ }
+ if$
+ }
+ if$
+ %
+ % If during the previous process the name maximum is exceeded
+ % (which was not checked), correct this. NOTE: If the name
+ % maximum is smaller than 6, this could lead to ambiguous
+ % citations if, e.g., the year and the first 5 authors are
+ % the same, but the 6th author is different.
+ %
+ cite.num.names.short name.max >
+ { name.max 'cite.num.names.short := }
+ 'skip$
+ if$
+ %
+ % For a "full" cite, the number of names should always be at least
+ % as large as for a "short" cite.
+ %
+ cite.num.names.full cite.num.names.short <
+ { cite.num.names.short 'cite.num.names.full := }
+ 'skip$
+ if$
+ %
+ % Update "old" variables for next entry.
+ %
+ update.cite.num.names
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.no.names}
+{ %
+ % The formatted field that acts as author is on top
+ % of the stack.
+ 'aut1f :=
+ "" 'aut2 :=
+ "" 'aut3 :=
+ "" 'aut4 :=
+ "" 'aut5 :=
+ "" 'aut6 :=
+ #1 'numnames :=
+ %
+ year.label year.label.old =
+ { %
+ % Same year label: possibly ambiguous citation.
+ %
+ definitive.cite.num.names.1.or.2
+ }
+ { %
+ % Different year label: everything's fine,
+ % move to next entry.
+ %
+ skip$
+ }
+ if$
+ %
+ % Update "old" variables for next entry.
+ %
+ update.cite.num.names
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.num.names}
+{ %
+ % Check whether author or editor or other field acts as author.
+ % Number of names is only relevant with author or editor.
+ %
+ firstkey empty$ not
+ { firstkey sortify remove.spaces definitive.cite.no.names }
+ { key empty$ not
+ { key sortify remove.spaces definitive.cite.no.names }
+ { %
+ % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { %
+ % Format first author with and without initials
+ author empty$
+ { title.sort.label definitive.cite.no.names }
+ { author definitive.cite.num.names.field }
+ if$
+ }
+ { %
+ % Format first author with and without initials
+ author empty$
+ { editor empty$
+ { title.sort.label definitive.cite.no.names }
+ { editor definitive.cite.num.names.field }
+ if$
+ }
+ { author definitive.cite.num.names.field }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.tentative.year.sort.label}
+{ %
+ % Implicit or explicit ``no date'' is put at the front
+ % (the year zero; years B.C. will imply complications)
+ % because these are possibly old works.
+ % ``In press'' is put at the end.
+ %
+ year empty$
+ { "0000" 'year.label := }
+ { year "\bibnodate" =
+ year "n.d." =
+ or
+ { "0000" 'year.label := }
+ { year "\BIP" =
+ { "9999" 'year.label := }
+ { % It is not checked whether the year field
+ % makes sense.
+ year sortify remove.spaces 'year.label :=
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ %
+ % Push year sort label on the stack
+ year.label
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {month.number.day}
+{ month empty$
+ { "" }
+ { month sortify remove.spaces
+ %
+ % Add the day when available.
+ day empty$
+ 'skip$
+ { "/" *
+ day sortify remove.spaces *
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.name.sort.label}
+{ %
+ % Author or editor-acting-as-author available.
+ % => Make tentative "short cite with initials" author
+ % label (L1) of one of the forms
+ % "Last1 F1"
+ % "Last1 F1 Last2"
+ % "Last1 F1 zzzz" ("zzzz" representing et al.)
+ % => If more than 2 'authors': make label (L2) for 2nd-6th authors
+ % of one of the forms
+ % "Last2 Last3"
+ % "Last2 Last3 Last4"
+ % "Last2 Last3 Last4 Last5"
+ % "Last2 Last3 Last4 Last5 Last6"
+ % "Last2 Last3 Last4 Last5 Last6 zzzz"
+ %
+ % Then format year label (L3) of one of the forms:
+ % "0000" (missing year or explicit 'no date')
+ % "9999" ('in press')
+ % year (otherwise; don't use originalyear here yet)
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L4) .
+ %
+ % Then tentative sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L3
+ % " "
+ % L2
+ % " "
+ % L4
+ %
+ % The name field is on top of the stack.
+ 'field :=
+ %
+ % numnames is the total number of names contained in field
+ field num.names$ 'numnames :=
+ %
+ % Format first author
+ field #1 sort.name.format format.name$
+ %
+ % Format the second author if there are two, or else "zzzz" = et al.
+ numnames #1 =
+ 'skip$
+ { numnames #2 =
+ { %
+ % Two authors: format second author
+ field #2 "{ll{}}" format.name$ 's :=
+ s "others" =
+ { " zzzz" * } % Add "et al."-substitute
+ { " " * s * } % Add second author
+ if$
+ }
+ { " zzzz" * } % 3 or more authors: add "et al."-substitute
+ if$
+ }
+ if$
+ " " * % Add spaces
+ make.tentative.year.sort.label * % Add year (L3).
+ " " * % Add spaces
+ %
+ % Now build up L2 if applicable
+ numnames #3 <
+ 'skip$
+ { %
+ % Treat last author slightly differently
+ numnames name.max >
+ { name.max 'lastname :=
+ " zzzz" % Push "et al."-substitute on stack
+ }
+ { numnames 'lastname :=
+ "" % Push empty string on stack
+ }
+ if$
+ %
+ % Names 2 to "last" - 1
+ "" % Push empty string on stack
+ #2 'nameptr :=
+ { nameptr lastname < }
+ { % Add name no. nameptr
+ field nameptr "{ll{}}" format.name$ *
+ " " *
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ %
+ % "Last" author
+ field lastname "{ll{}}" format.name$ 's :=
+ s "others" =
+ { "zzzz" * } % Add "et al."-substitute
+ { s * } % Add last author
+ if$
+ %
+ swap$ * % Add the previously formatted empty string or
+ % "et al."-substitute if there are many authors.
+ * % Add L2 to the earlier labels.
+ }
+ if$
+ %
+ " " * % Add spaces
+ title.number conv.int.to.str * % Add sorted title number (L4).
+ sortify % Clean up and convert to lowercase
+ " " * % Add spaces
+ month.number.day * % Add month and day when available
+ 'author.year.sort.label := % Assign result to sort label.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.field.year.sort.label}
+{ %
+ % 'field' acts as first author (L1), subsequent authors
+ % are empty (L2).
+ %
+ % Then format year label (L3) of one of the forms:
+ % "0000" (missing year or explicit 'no date')
+ % "9999" ('in press')
+ % year (otherwise; don't use originalyear here yet)
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L4) .
+ %
+ % Then tentative sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L3
+ % " "
+ % L2
+ % " "
+ % L4
+ %
+ % 'field' is on top of the stack. It is already supposed to be cleaned
+ % (i.e., sortified and space-removed), so this is already L1.
+ " " * % Add spaces to L1
+ make.tentative.year.sort.label * % Add year (L3).
+ " " * % Add spaces
+ " " * % L2 is empty, add spaces
+ title.number conv.int.to.str * % Add sorted title number (L4).
+ sortify % Clean up and convert to lowercase
+ " " * % Add spaces
+ month.number.day * % Add month and day when available
+ 'author.year.sort.label := % Assign result to sort label.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.author.editor.sort.label}
+{ author empty$
+ { editor empty$
+ { %
+ % Use what has previously been stored in title.sort.label
+ % as author substitute .
+ title.sort.label make.field.year.sort.label
+ }
+ { editor make.name.sort.label }
+ if$
+ }
+ { author make.name.sort.label }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.author.sort.label}
+{ author empty$
+ { %
+ % Use what has previously been stored in title.sort.label
+ % as author substitute .
+ title.sort.label make.field.year.sort.label
+ }
+ { author make.name.sort.label }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.tentative.sort.label}
+{ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % General strategy:
+ %
+ % Ordinary situation: author or editor-acting-as-author
+ % available.
+ % => Make tentative "short cite with initials" author
+ % label (L1) of one of the forms
+ % "Last1 F1"
+ % "Last1 F1 Last2"
+ % "Last1 F1 zzzz" ("zzzz" representing et al.)
+ % => If more than 2 'authors': make label (L2) for 2nd-6th authors
+ % of one of the forms
+ % "Last2 Last3"
+ % "Last2 Last3 Last4"
+ % "Last2 Last3 Last4 Last5"
+ % "Last2 Last3 Last4 Last5 Last6"
+ % "Last2 Last3 Last4 Last5 Last6 zzzz"
+ % When key is available (overrules author and editor fields):
+ % => L1 = key, L2 = ""
+ % No author, editor, and key: define title or substitute as key
+ % and format as key.
+ %
+ % Then format year label (L3) of one of the forms:
+ % "0000" (missing year or explicit 'no date')
+ % "9999" ('in press')
+ % year (otherwise; don't use originalyear here yet)
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L4) .
+ %
+ % Then tentative sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L3
+ % " "
+ % L2
+ % " "
+ % L4
+ %
+ % This can then be sorted, from which it can be derived
+ % whether initials are necessary, how many names must
+ % be used for short and full citations, and whether "a"'s and
+ % "b"'s etc. are necessary behind the year labels.
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % key and firstkey overrule author information
+ %
+ firstkey empty$ not
+ { key empty$ not
+ { %
+ % Both key and firstkey available:
+ % for sorting and checking initials, treat key as last
+ % name and firstkey as initials.
+ %
+ key sortify remove.spaces
+ " " *
+ firstkey sortify remove.spaces *
+ make.field.year.sort.label
+ }
+ { firstkey sortify remove.spaces make.field.year.sort.label }
+ if$
+ }
+ { key empty$ not
+ { key sortify remove.spaces make.field.year.sort.label }
+ { %
+ % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type
+ duplicate$ #1 =
+ { pop$
+ make.author.editor.sort.label
+ }
+ { duplicate$ #2 =
+ { pop$
+ make.author.sort.label
+ }
+ { #3 =
+ { "no key in " cite$ * warning$
+ make.author.editor.sort.label
+ }
+ { make.author.editor.sort.label }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ %
+ author.year.sort.label 'sort.key$ :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.name.sort.label}
+{ %
+ % Author or editor-acting-as-author available.
+ % => Make author-with-initials label (L1) of one of the forms
+ % "Last1 F1 Last2 F2 ... LastN FN"
+ % "Last1 F1 Last2 F2 ... Last6 F6 zzzz"
+ % (where N <= 6 is the total number of authors, and
+ % "zzzz" represents et al. if there are more than 6 authors)
+ % No author, editor, and key: define title or substitute as sort key.
+ %
+ % The name field is on top of the stack.
+ 'field :=
+ %
+ % numnames is the total number of names contained in field
+ field num.names$ 'numnames :=
+ %
+ % If there are more than 6 authors, only 6 are mentioned.
+ numnames name.max >
+ { name.max 'format.num.names := }
+ { numnames 'format.num.names := }
+ if$
+ % Initialize stack with empty string
+ ""
+ %
+ % Cycle over authors.
+ #1 'nameptr :=
+ { nameptr format.num.names < }
+ { % Format author and add spaces
+ field nameptr sort.name.format format.name$ *
+ " " *
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ % Format last author that must be formatted
+ field nameptr sort.name.format format.name$ *
+ % Add et al. if necessary
+ nameptr numnames <
+ { " zzzz" * }
+ 'skip$
+ if$
+ sortify % Clean up and change case
+ " " * % Add spaces
+ year.label * % Add year
+ " " * % Add spaces
+ title.number conv.int.to.str * % Add sorted title number
+ " " * % Add spaces
+ month.number.day * % Add month and day when available
+ 'author.year.sort.label := % Assign result to sort label.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.field.year.sort.label}
+{ %
+ % 'field' acts as author (L1).
+ %
+ % Then format year label (L2) of one of the forms:
+ % "0000" (missing year or explicit `no date')
+ % "9999" (`in press')
+ % year (otherwise; don't use originalyear here yet)
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L3) .
+ %
+ % Then tentative sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L2
+ % " "
+ % L3
+ %
+ % 'field' is on top of the stack. It is already supposed to be cleaned
+ % (i.e., sortified and space-removed), so this is already L1.
+ " " * % Add spaces
+ year.label * % Add year
+ " " * % Add spaces
+ title.number conv.int.to.str * % Add sorted title number
+ " " * % Add spaces
+ month.number.day * % Add month and day when available
+ 'author.year.sort.label := % Assign result to sort label.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.author.editor.sort.label}
+{ author empty$
+ { editor empty$
+ { %
+ % Use what has previously been stored in title.sort.label
+ % as author substitute .
+ title.sort.label make.definitive.field.year.sort.label
+ }
+ { editor make.definitive.name.sort.label }
+ if$
+ }
+ { author make.definitive.name.sort.label }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.author.sort.label}
+{ author empty$
+ { %
+ % Use what has previously been stored in title.sort.label
+ % as author substitute .
+ title.sort.label make.definitive.field.year.sort.label
+ }
+ { author make.definitive.name.sort.label }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.final.sort.key}
+{ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % General strategy:
+ %
+ % Ordinary situation: author or editor-acting-as-author
+ % available.
+ % => Make author-with-initials label (L1) of one of the forms
+ % "Last1 F1 Last2 F2 ... LastN FN"
+ % "Last1 F1 Last2 F2 ... Last6 F6 zzzz"
+ % (where N <= 6 is the total number of authors, and
+ % "zzzz" represents et al. if there are more than 6 authors)
+ % No author, editor, and key: define title or substitute as sort key.
+ %
+ % Then format year label (L2) of one of the forms:
+ % "0000" (missing year or explicit `no date')
+ % "9999" (`in press')
+ % year (otherwise; don't use originalyear here yet)
+ % Add "/"month"/"day to the latter when available.
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L3) .
+ %
+ % Then final sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L2
+ % " "
+ % L3
+ %
+ % This can then be sorted.
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ %
+ % Find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { make.definitive.author.sort.label }
+ { make.definitive.author.editor.sort.label }
+ if$
+ %
+ author.year.sort.label 'sort.key$ :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ { s }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {chop.articles}
+{ 's :=
+ "a " #2
+ "an " #3
+ "the " #4
+ s
+ chop.word
+ chop.word
+ chop.word
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.sort.title}
+{ %
+ % Remove non-alphanumeric characters and change to lower case .
+ sortify
+ %
+ % Remove "a ", "an ", and "the " from the front .
+ chop.articles #1 entry.max$ substring$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.sort.title}
+{ title empty$
+ { text empty$
+ { type empty$
+ { howpublished empty$
+ { note empty$
+ { url empty$
+ { " " }
+ { url format.sort.title }
+ if$
+ }
+ { note format.sort.title }
+ if$
+ }
+ { howpublished format.sort.title }
+ if$
+ }
+ { type format.sort.title }
+ if$
+ }
+ { text format.sort.title }
+ if$
+ }
+ { title format.sort.title }
+ if$
+ remove.spaces
+ 'title.sort.label :=
+ title.sort.label 'sort.key$ :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.title.number}
+{ title.sort.label old.label =
+ { %
+ % A tie: old and new label are the same .
+ old.number 'title.number :=
+ }
+ { %
+ % The usual situation: titles are different.
+ old.number #1 + 'title.number :=
+ title.number 'old.number :=
+ title.sort.label 'old.label :=
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+FUNCTION {last.part.name.format} { "{ll}" }
+
+FUNCTION {initials.with.space.name.format} { "{f.}" }
+
+FUNCTION {von.last.junior.name.format} { "{vv }{ll}{ jj}" }
+
+FUNCTION {von.junior.name.format} { "{ vv}{, jj}" }
+
+FUNCTION {one.complete.name.format} { "{vv }{ll}{, jj}{, ff}" }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {string.length}
+{ #0 'pos :=
+ % If the next character exists, i.e., is not empty,
+ % add 1 to the string length.
+ % We cannot use empty$ because " " empty$ is true.
+ { duplicate$ pos #1 + #1 substring$ "" = not }
+ { pos #1 + 'pos := }
+ while$
+ pop$ pos
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {transform.spaces.and.hyphens}
+{ 's := % The original string
+ s string.length 'len := % Its length (no. of characters)
+ "" 't := % Initialize the transformed string
+ #1 'pos :=
+ #0 'brace.level :=
+ %
+ % while (pos < len) do
+ %
+ { pos len < }
+ { % First, check whether we are at brace level 0
+ brace.level #0 =
+ {
+ % At least two characters left: check for ". ", ".~", and ".-".
+ % If so, replace and shift two positions.
+ s pos #2 substring$ ". " =
+ s pos #2 substring$ ".~" = or
+ { t "\BPBI " * 't :=
+ pos #2 + 'pos :=
+ }
+ { s pos #2 substring$ ".-" =
+ { t "\BHBI " * 't :=
+ pos #2 + 'pos :=
+ }
+ { % neither is true, copy one character and shift one position
+ t s pos #1 substring$ * 't :=
+ % Check whether we need to increase brace level.
+ % Note that this is not sophisticated: it does not capture
+ % \{, \verb+}+, etc.
+ % Note also that unbalanced braces cause problems.
+ s pos #1 substring$ "{" =
+ { brace.level #1 + 'brace.level := }
+ 'skip$
+ if$
+ pos #1 + 'pos :=
+ }
+ if$
+ }
+ if$
+ }
+ { % Not at brace level 0: copy result literally
+ t s pos #1 substring$ * 't :=
+ % Check whether we need to increase or decrease brace level.
+ % Note that this is not sophisticated: it does not capture
+ % \{, \verb+}+, etc.
+ s pos #1 substring$ "{" =
+ { brace.level #1 + 'brace.level := }
+ { s pos #1 substring$ "}" =
+ { brace.level #1 - 'brace.level := }
+ 'skip$
+ if$
+ }
+ if$
+ pos #1 + 'pos :=
+ }
+ if$
+ }
+ while$
+ %
+ pos len =
+ { % Last character, copy
+ t s pos #1 substring$ * 't :=
+ }
+ { % pos = len + 1, so s ends with ". " or ".-"
+ % This should not have happened, but make the best out of it.
+ % Push last two characters of s on the stack, i.e., ". " or ".-".
+ s len #1 - #2 substring$
+ % Remove "\BPBI " or "\BHBI " from t
+ t text.length$ 'len := % Length of t (no. of characters)
+ t #1 len #6 - substring$
+ % Concatenate and assign to t
+ swap$ * 't :=
+ }
+ if$
+ %
+ % Now push the result back on the stack
+ t
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.initials.with.hyphen}
+{ % Format initials.
+ % Call with
+ % field authornumber format.initials.with.hyphen
+ % e.g.
+ % author #1 format.initials.with.hyphen
+ % Instead of field, a string may also be used.
+ %
+ % First, format initials in the default way, retaining spaces
+ % and hyphens.
+ initials.with.space.name.format format.name$
+ transform.spaces.and.hyphens
+}
+
+FUNCTION {format.last.part.name}
+{ % Format a name with last.part.name.format,
+ % as part of more complicated things.
+ % Call with
+ % field authornumber format.last.part.name
+ % e.g.
+ % author #1 format.last.part.name
+ % Instead of field, a string may also be used.
+ last.part.name.format format.name$
+}
+
+FUNCTION {format.von.last.junior.name}
+{ % Format a name with von.last.junior.name.format,
+ % for citing or as part of more complicated things.
+ % Call with
+ % field authornumber format.von.last.junior.name
+ % e.g.
+ % author #1 format.von.last.junior.name
+ % Instead of field, a string may also be used.
+ von.last.junior.name.format format.name$
+}
+
+FUNCTION {format.von.junior.name}
+{ % Format a name with von.last.junior.name.format,
+ % for citing or as part of more complicated things.
+ % Call with
+ % field authornumber format.von.junior.name
+ % e.g.
+ % author #1 format.von.junior.name
+ % Instead of field, a string may also be used.
+ von.junior.name.format format.name$
+}
+
+FUNCTION {format.cite.initials.name}
+{ % Format a name for citing with initials.
+ % Call with
+ % field authornumber format.cite.initials.name
+ % e.g.
+ % author #1 format.cite.initials.name
+ % Instead of field, a string may also be used.
+ %
+ % First, extract the complete name, format it in the canonical form,
+ % and push on the stack.
+ one.complete.name.format format.name$
+ %
+ % Format the initials and push on the stack.
+ duplicate$ #1 format.initials.with.hyphen
+ %
+ % Format the von-last-junior part and push on the stack.
+ swap$ #1 format.von.last.junior.name
+ %
+ % Connect with "~" hyphen (if they're both non-empty).
+ "~" connect.check
+}
+
+FUNCTION {format.author.name}
+{ % Format an author name for the reference list.
+ % Call with
+ % field authornumber format.author.name
+ % e.g.
+ % author #1 format.author.name
+ % Instead of field, a string may also be used.
+ %
+ % First, extract the complete name, format it in the canonical form,
+ % and push on the stack.
+ one.complete.name.format format.name$
+ %
+ % Make two copies of the name, format the last name and push on the stack.
+ duplicate$ duplicate$ #1 format.last.part.name
+ %
+ % Format the initials and push on the stack.
+ swap$ #1 format.initials.with.hyphen
+ %
+ % Connect with last name.
+ connect.with.comma.check
+ %
+ % Format the von-junior part and connect with initials.
+ swap$ #1 format.von.junior.name "" connect.check
+}
+
+FUNCTION {format.editor.name}
+{ % Format a name for the reference list as an editor.
+ % Call with
+ % field authornumber format.editor.name
+ % e.g.
+ % author #1 format.editor.name
+ % Instead of field, a string may also be used.
+ %
+ format.cite.initials.name
+}
+
+FUNCTION {format.index.name}
+{ % Format an author name for the index.
+ % Call with
+ % field authornumber format.index.name
+ % e.g.
+ % author #1 format.index.name
+ % Instead of field, a string may also be used.
+ %
+ format.author.name
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {comma.between.two} { "\BCBT{}" }
+
+FUNCTION {comma.between.names} { ", " }
+
+FUNCTION {comma.before.last} { "\BCBL{}" }
+
+FUNCTION {and.before.last} { "\ \BBA{} " }
+
+FUNCTION {et.al.string.cite} { "\ \protect\BOthers{.}" }
+
+FUNCTION {et.al.string} { "\ \BOthers{.}" }
+
+FUNCTION {et.al.string.period} { "\ \BOthersPeriod{.}" }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {add.name.index}
+{ %
+ %
+ make.index
+ { "%" * write$ newline$
+ % Check for corporate author
+ field is.bibcorporate
+ { "\corporateAX{" }
+ { "\AX{" }
+ if$
+ write$
+ field nameptr sort.name.format format.name$ sortify write$ newline$
+ "@" write$
+ field nameptr format.index.name
+ "}%" * write$ newline$
+ }
+ { "%" * write$ newline$ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.name.cite.label}
+{ 'field :=
+ 'format.num.names :=
+ %
+ field num.names$ 'numnames := % numnames is the total number of names
+ % contained in field
+ %
+ % It is implicit in the APA manual that if "et al." would refer
+ % to exactly one author, then this author should be named
+ % instead of "et al."
+ %
+ format.num.names numnames #1 - =
+ { numnames 'format.num.names := }
+ 'skip$
+ if$
+ %
+ % Format first author: with or without initials
+ %
+ #1 'nameptr :=
+ cite.initials #1 =
+ { field nameptr format.cite.initials.name }
+ { field nameptr cite.name.format format.name$ }
+ if$
+ add.name.index % Add index entry when desired.
+ %
+ numnames #1 =
+ 'skip$
+ { format.num.names #1 =
+ { %
+ % First author et al.
+ %
+ et.al.string.cite write$
+ }
+ { numnames #2 =
+ { %
+ % Given that format.num.names > 1, it is 2.
+ % Format second author.
+ %
+ #2 'nameptr :=
+ field nameptr cite.name.format format.name$ 's :=
+ %
+ % Check if 2nd author is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { et.al.string.cite write$ } % First et al.
+ { %
+ % First \& Second
+ %
+ and.before.last write$
+ s
+ add.name.index % Add index entry when desired.
+ }
+ if$
+ }
+ { %
+ % 3 or more names, 2 or more must be cited
+ %
+ % for nameptr := 2 to format.num.names - 1 do
+ %
+ #2 'nameptr :=
+ { nameptr format.num.names < }
+ { %
+ % Put comma between consecutive authors
+ %
+ comma.between.names write$
+ %
+ % Format and add next author
+ %
+ field nameptr cite.name.format format.name$
+ add.name.index % Add index entry when desired.
+ %
+ % Move to next author
+ %
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ %
+ % nameptr = format.num.names
+ % Format this author.
+ %
+ field nameptr cite.name.format format.name$ 's :=
+ %
+ format.num.names numnames =
+ { %
+ % This is also the last author. Add (optional) comma.
+ %
+ comma.before.last write$
+ %
+ % Check if this author is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { et.al.string.cite write$ }
+ { and.before.last write$
+ s
+ add.name.index % Add index entry when desired.
+ }
+ if$
+ }
+ { %
+ % This is not the last author.
+ % Add comma, author name, and "et al."
+ %
+ comma.between.names write$
+ s
+ add.name.index % Add index entry when desired.
+ %
+ comma.before.last et.al.string.cite * write$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.title.cite.label}
+{ %
+ % Formatting: check if formatted as article title or
+ % as book title, and insert this formatting.
+ %
+ is.atype
+ { "\APACciteatitle{" }
+ { "\APACcitebtitle{" }
+ if$
+ %
+ title empty$
+ { text empty$
+ { type empty$
+ { howpublished empty$
+ { note empty$
+ { url empty$
+ { cite$ }
+ { url }
+ if$
+ }
+ { note }
+ if$
+ }
+ { howpublished }
+ if$
+ }
+ { type }
+ if$
+ }
+ { text }
+ if$
+ }
+ { title }
+ if$
+ %
+ % Connect with formatting.
+ %
+ * "}" *
+ %
+ % Write to output
+ %
+ write$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.author.editor.cite.label}
+{ author empty$
+ { editor empty$
+ { %
+ % No author or editor:
+ % Use title or other description as citation label.
+ %
+ make.title.cite.label
+ "}{%" write$ newline$
+ make.title.cite.label
+ }
+ { cite.num.names.full editor make.name.cite.label
+ "}{%" write$ newline$
+ cite.num.names.short editor make.name.cite.label
+ }
+ if$
+ }
+ { cite.num.names.full author make.name.cite.label
+ "}{%" write$ newline$
+ cite.num.names.short author make.name.cite.label
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.author.cite.label}
+{ author empty$
+ { %
+ % No author:
+ % Use title or other description as citation label.
+ %
+ make.title.cite.label
+ "}{%" write$ newline$
+ make.title.cite.label
+ }
+ { cite.num.names.full author make.name.cite.label
+ "}{%" write$ newline$
+ cite.num.names.short author make.name.cite.label
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.year.supplement}
+{ %
+ % Add "a", "b", etc. when necessary.
+ %
+ add.to.year #0 =
+ { "" }
+ { "{\protect"
+ year empty$
+ { "\BCntND" * }
+ { year "\bibnodate" =
+ { "\BCntND" * }
+ { year "\BIP" =
+ { "\BCntIP" * }
+ { "\BCnt" * }
+ if$
+ }
+ if$
+ }
+ if$
+ "{" * add.to.year int.to.str$ * "}}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {protect.year}
+{ year empty$
+ { "{\protect\bibnodate{}}" }
+ { year "\bibnodate" =
+ { "{\protect\bibnodate{}}" }
+ { year "\BIP" =
+ { "{\protect\BIP{}}" }
+ { year }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.year.label}
+{ "{\protect\APACyear{"
+ originalyear empty$
+ { protect.year }
+ { originalyear "\bibnodate" = % date of original publication unknown
+ { translator empty$
+ { protect.year }
+ { year empty$
+ { "{\protect\BTRANSL{}~\protect\bibnodate{}}" } % trans. n.d.
+ { "{\protect\BTRANSL{}}~" protect.year * } % trans. 1931
+ if$
+ }
+ if$
+ }
+ { year empty$
+ { originalyear "/{\protect\bibnodate{}}" * } % 1923/n.d.
+ { originalyear year =
+ { protect.year }
+ { originalyear "/" * protect.year * } % 1923/1961
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ * "}}%" * write$ newline$
+ %
+ % Add "a", "b", etc. when necessary.
+ %
+ "{\protect\APACexlab{" "}}"
+ make.definitive.year.supplement enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.cite.labels}
+{ newline$
+ %
+ % Write a few lines for testing purposes.
+ %
+ test
+ { "\bibitem[]{} \fullciteA{" cite$ * "}" * write$ newline$
+ "\bibitem[]{} \citeA{" cite$ * "}" * write$ newline$
+ }
+ 'skip$
+ if$
+ %
+ "\bibitem[\protect\citeauthoryear{%" write$ newline$
+ %
+ % When key or firstkey is available, this takes precedence.
+ %
+ firstkey empty$ not
+ { %
+ % Full cite: firstkey.
+ %
+ firstkey write$
+ "}{%" write$ newline$
+ %
+ % Short cite: if key is not empty and cite.initials is 0,
+ % then key, else firstkey.
+ %
+ cite.initials #0 =
+ key empty$ not
+ and
+ { key }
+ { firstkey }
+ if$
+ write$
+ }
+ { key empty$ not
+ { %
+ % No firstkey, but key available:
+ % Both full and short labels are key.
+ %
+ key write$
+ "}{%" write$ newline$
+ key write$
+ }
+ { % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { make.author.cite.label }
+ { make.author.editor.cite.label }
+ if$
+ }
+ if$
+ }
+ if$
+ "}{%" write$ newline$
+ %
+ % Make year label that's used for citations
+ %
+ make.definitive.year.label write$
+ "}]{%" write$ newline$
+ cite$ write$
+ "}%" write$ newline$
+ % author.year.sort.label write$ newline$ % for testing purposes
+ % year.label write$ newline$ % for testing purposes
+ %
+ % If the item is used in a meta-analysis, indicate this with
+ % a star.
+ %
+ "\APACinsertmetastar{%" write$ newline$
+ cite$ write$
+ "}%" write$ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {editor.postfix}
+{ editor num.names$ #1 >
+ { "(\BEDS)" }
+ { "(\BED)" }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {editor.trans.postfix}
+{ editor num.names$ #1 >
+ { "(\BEDS{} \BAnd{} \BTRANSS)" }
+ { "(\BED{} \BAnd{} \BTRANS)" }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % "(Trans.)" postfix
+ % translator must not be empty
+ %
+FUNCTION {trans.postfix}
+{ translator num.names$ #1 >
+ { "(\BTRANSS)" }
+ { "(\BTRANS)" }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.author.names}
+{ 'field :=
+ 'dot :=
+ %
+ field num.names$ 'numnames := % numnames is the total number of names
+ % contained in field
+ numnames 'format.num.names := % Format all authors
+ format.num.names name.max > % Unless this exceeds the maximum of 6.
+ { dot
+ { name.max 'format.num.names := } % Format 6 authors
+ { cite.num.names.full 'format.num.names := } % Format 1 editor
+ if$
+ }
+ 'skip$
+ if$
+ %
+ % It is kind of explicit in the APA manual that if "et al." would
+ % refer to exactly one author (the 7th), then this author should
+ % still be replaced by "et al.", unlike with citations.
+ % So format.num.names is not adapted.
+ %
+ % Format first author
+ %
+ #1 'nameptr :=
+ field nameptr format.author.name
+ %
+ % Add period if required and if this is the only author.
+ %
+ numnames #1 =
+ dot
+ and
+ { add.period$ }
+ 'skip$
+ if$
+ add.name.index % Add index entry when desired.
+ %
+ numnames #1 =
+ 'skip$
+ { format.num.names #1 =
+ { %
+ % First author et al.
+ %
+ comma.between.two
+ %
+ % Add period if required.
+ %
+ dot
+ { et.al.string.period * }
+ { et.al.string * }
+ if$
+ write$
+ }
+ { numnames #2 =
+ { %
+ % Given that format.num.names > 1, it is 2.
+ %
+ comma.between.two write$
+ %
+ % Format second author.
+ %
+ #2 'nameptr :=
+ field nameptr format.author.name 's :=
+ %
+ % Check if 2nd author is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { %
+ % First et al.
+ % Add period if required.
+ %
+ dot
+ { et.al.string.period }
+ { et.al.string }
+ if$
+ write$
+ }
+ { %
+ % First \& Second
+ %
+ and.before.last write$
+ %
+ % Add period if required.
+ %
+ dot
+ { s add.period$ }
+ { s }
+ if$
+ add.name.index % Add index entry when desired.
+ }
+ if$
+ }
+ { %
+ % 3 or more names, 2 or more must be cited
+ %
+ % for nameptr := 2 to format.num.names - 1 do
+ %
+ #2 'nameptr :=
+ { nameptr format.num.names < }
+ { %
+ % Put comma between consecutive authors
+ %
+ comma.between.names write$
+ %
+ % Format and add next author
+ %
+ field nameptr format.author.name
+ add.name.index % Add index entry when desired.
+ %
+ % Move to next author
+ %
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ %
+ % nameptr = format.num.names
+ % Format this author.
+ %
+ field nameptr format.author.name 's :=
+ %
+ format.num.names numnames =
+ { %
+ % This is also the last author. Add (optional) comma.
+ %
+ comma.before.last write$
+ %
+ % Check if this author is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { %
+ % Add period if required.
+ %
+ dot
+ { et.al.string.period }
+ { et.al.string }
+ if$
+ write$
+ }
+ { and.before.last write$
+ %
+ % Add period if required.
+ %
+ dot
+ { s add.period$ }
+ { s }
+ if$
+ add.name.index % Add index entry when desired.
+ }
+ if$
+ }
+ { %
+ % This is not the last author.
+ % Add comma, author name, and "et al."
+ %
+ comma.between.names write$
+ s
+ add.name.index % Add index entry when desired.
+ %
+ comma.before.last
+ %
+ % Add period if required.
+ %
+ dot
+ { et.al.string.period * }
+ { et.al.string * }
+ if$
+ write$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.authors}
+{ #1 author format.author.names
+ "%" write$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.editors.as.authors}
+{ #0 editor format.author.names
+ "\ " editor.postfix * add.period$ write$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.ed.trans.as.authors}
+{ #0 editor format.author.names
+ "\ " editor.trans.postfix * add.period$ write$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.editor.names}
+{ 'field :=
+ %
+ field num.names$ 'numnames := % numnames is the total number of names
+ % contained in field
+ numnames 'format.num.names := % Format all authors
+ format.num.names name.max > % Unless this exceeds the maximum of 6.
+ { #1 'format.num.names := } % Then it becomes 1 (First et al.)
+ 'skip$
+ if$
+ %
+ % Format first editor
+ %
+ field #1 format.editor.name
+ %
+ numnames #1 =
+ 'skip$
+ { format.num.names #1 =
+ { et.al.string * } % First editor et al., no comma.
+ { numnames #2 =
+ { %
+ % Given that format.num.names > 1, it is 2.
+ % No comma. Format second editor.
+ %
+ field #2 format.editor.name 's :=
+ %
+ % Check if 2nd editor is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { et.al.string * } % First et al.
+ { and.before.last * s * } % First \& Second
+ if$
+ }
+ { %
+ % 3 or more names, 2 or more must be cited
+ %
+ % for nameptr := 2 to format.num.names - 1 do
+ %
+ #2 'nameptr :=
+ { nameptr format.num.names < }
+ { %
+ % Put comma between consecutive editors
+ %
+ comma.between.names *
+ %
+ % Format and add next editor
+ %
+ field nameptr format.editor.name *
+ %
+ % Move to next editor
+ %
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ %
+ % nameptr = format.num.names
+ % Format this editor.
+ %
+ field nameptr format.editor.name 's :=
+ %
+ format.num.names numnames =
+ { %
+ % This is also the last editor. Add (optional) comma.
+ %
+ comma.before.last *
+ %
+ % Check if this editor is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { et.al.string * }
+ { and.before.last * s * }
+ if$
+ }
+ { %
+ % This is not the last editor.
+ % Add comma, editor name, and "et al."
+ %
+ comma.between.names * s *
+ comma.before.last * et.al.string *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format editors in case editors do not act as authors
+ % (such as reference to chapter in edited book)
+ %
+ % L. W. Poon (Ed.) (1 editor)
+ % or
+ % A. S. Gurman \& D. P. Kniskern (Eds.) (2 editors)
+ % or
+ % L. Poon, A. Jones, \& D. P. Smith (Eds.) (>2 editors)
+ %
+ % editor must not be empty
+ %
+FUNCTION {format.editors.in.line}
+{ editor format.editor.names
+ editor.postfix connect.with.space.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format editors in case editors are also translators
+ % and do not act as authors
+ % (such as reference to chapter in edited book
+ % of translated articles)
+ %
+ % L. W. Poon (Ed. and Trans.) (1 editor)
+ % or
+ % A. S. Gurman \& D. P. Kniskern (Eds. and Trans.) (2 editors)
+ % or
+ % L. Poon, A. Jones, \& D. P. Smith (Eds. and Trans.) (>2 editors)
+ %
+ % editor must not be empty
+ %
+FUNCTION {format.editors.trans.in.line}
+{ editor format.editor.names
+ editor.trans.postfix connect.with.space.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format translators in case translators act as editors
+ % (such as reference to chapter in translated book)
+ %
+ % L. W. Poon (Trans.) (1 translator)
+ % or
+ % A. S. Gurman \& D. P. Kniskern (Trans.) (2 translators)
+ % or
+ % L. Poon, A. Jones, \& D. P. Smith (Trans.) (>2 translators)
+ %
+ % translator must not be empty
+ %
+FUNCTION {format.translators.in.line}
+{ translator format.editor.names
+ trans.postfix connect.with.space.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format translators in case translator does not act as editor
+ % (such as reference to translated book)
+ %
+ % L. Solotaroff, Trans.
+ %
+FUNCTION {format.translators.in.paren.check}
+{ translator empty$
+ { "" }
+ { translator format.editor.names
+ translator num.names$ #1 >
+ { ", \BTRANSS{}" * }
+ { ", \BTRANS{}" * }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format editors and translators in case neither act as editor
+ % (such as reference to edited or translated book with a
+ % a single author)
+ %
+ % L. Solotaroff, Ed.
+ % L. Solotaroff, Ed. \& Trans.
+ % L. Solotaroff, Trans.
+ % L. Solotaroff, Ed. \& S. Prokofieff, Trans.
+ %
+FUNCTION {format.editors.translators.in.paren.check}
+{ editor empty$
+ { translator empty$
+ { "" }
+ { translator format.editor.names
+ translator num.names$ #1 >
+ { ", \BTRANSS{}" * }
+ { ", \BTRANS{}" * }
+ if$
+ }
+ if$
+ }
+ { editor format.editor.names
+ editor num.names$ #1 >
+ { ", \BEDS{}" * }
+ { ", \BED{}" * }
+ if$
+ translator empty$
+ 'skip$
+ { editor translator =
+ { editor num.names$ #1 >
+ { " \BAnd{} \BTRANSS" * }
+ { " \BAnd{} \BTRANS" * }
+ if$
+ }
+ { " \BAnd{} " *
+ translator format.editor.names *
+ translator num.names$ #1 >
+ { ", \BTRANSS{}" * }
+ { ", \BTRANS{}" * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % translator of article
+ %
+FUNCTION {format.atrans.check}
+{ format.translators.in.paren.check parenthesize.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format "In editor (Ed.), "
+ %
+FUNCTION {format.in.editors}
+{ "\BIn{} "
+ editor empty$
+ 'skip$
+ { format.editors.in.line * ", " * }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format "In translator (Trans.),"
+ %
+FUNCTION {format.in.trans}
+{ "\BIn{} "
+ translator empty$
+ 'skip$
+ { format.translators.in.line * ", " * }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format "In editor (Ed. and Trans.)"
+ % or "In editor (Ed.)" if editor not equal to translator
+ %
+FUNCTION {format.in.editors.trans}
+{ "\BIn{} "
+ editor empty$
+ { translator empty$
+ 'skip$
+ { format.translators.in.line * ", " * }
+ if$
+ }
+ { translator empty$
+ { format.editors.in.line * }
+ { editor translator =
+ { format.editors.trans.in.line * }
+ { format.editors.in.line * }
+ if$
+ }
+ if$
+ ", " *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.year.check}
+{ "\APACrefYear{"
+ year empty$
+ { "\bibnodate{}" * }
+ { year * }
+ if$
+ %
+ % Add "a", "b", etc. when necessary.
+ %
+ make.definitive.year.supplement *
+ "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.year.month.day.check}
+{ "\APACrefYearMonthDay{"
+ year empty$
+ { "\bibnodate{}" * }
+ { year * }
+ if$
+ %
+ % Add "a", "b", etc. when necessary.
+ %
+ make.definitive.year.supplement *
+ "}{" *
+ %
+ % Add month and day when present.
+ %
+ month empty$
+ 'skip$
+ { month * }
+ if$
+ "}{" *
+ day empty$
+ 'skip$
+ { day * }
+ if$
+ "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of article in journal or book
+ % no finishing period
+ % field must be on top of stack
+ % (so englishtitle can be handled also)
+ %
+FUNCTION {format.atitle.no.dot}
+{ "\BBOQ{}" swap$
+ "\BBCQ{}" swap$
+ duplicate$ empty$
+ 'skip$
+ { duplicate$
+ % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefatitle{" swap$ * "}{" * swap$
+ "t" change.case$
+ * "}" *
+ }
+ if$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of article in journal or book
+ % with finishing period
+ % field must be on top of stack
+ % (so englishtitle can be handled also)
+ %
+FUNCTION {format.atitle.dot}
+{ "\BBOQ{}" swap$
+ "\BBCQ{}" swap$
+ duplicate$ empty$
+ 'skip$
+ { duplicate$
+ % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefatitle{" swap$ * "}{" * swap$
+ "t" change.case$
+ * "}" * add.period$
+ }
+ if$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of article in journal or book
+ % field must be on top of stack
+ % second element on stack must be connected:
+ % if that is empty, then atitle.dot
+ % else atitle.no.dot, connect, and add period
+ %
+FUNCTION {format.atitle.connect}
+{ swap$
+ duplicate$ empty$
+ { pop$
+ format.atitle.dot
+ }
+ { swap$
+ format.atitle.no.dot
+ swap$ connect.with.space.check
+ add.period$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of book or so, without period
+ % call with
+ % field format.btitle.no.dot
+ %
+FUNCTION {format.btitle.no.dot}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$
+ % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefbtitle{" swap$ * "}{" * swap$
+ "t" change.case$
+ * "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of book or so, with period
+ % call with
+ % field format.btitle.dot
+ %
+FUNCTION {format.btitle.dot}
+{ duplicate$ empty$
+ 'skip$
+ { add.period$ format.btitle.no.dot }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of book and similar
+ % field must be on top of stack
+ % second element on stack must be connected:
+ % if that is empty, then btitle.dot
+ % else btitle.no.dot, connect, and add period
+ %
+FUNCTION {format.btitle.connect}
+{ swap$
+ duplicate$ empty$
+ { pop$
+ format.btitle.dot
+ }
+ { swap$
+ format.btitle.no.dot
+ swap$ connect.with.space.check
+ add.period$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of book and similar
+ % field must be on top of stack
+ % second element on stack must be connected
+ %
+FUNCTION {format.btitle.connect.no.dot}
+{ swap$
+ duplicate$ empty$
+ { pop$
+ format.btitle.no.dot
+ }
+ { swap$
+ format.btitle.no.dot
+ swap$ connect.with.space.check
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format englishtitle (of nonenglish article, etc.)
+ %
+FUNCTION {format.aetitle.check}
+{ englishtitle empty$
+ { "" }
+ { % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefaetitle{" englishtitle * "}{" *
+ englishtitle "t" change.case$ * "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format englishtitle (of nonenglish book, etc.)
+ %
+FUNCTION {format.betitle.check}
+{ englishtitle empty$
+ { "" }
+ { % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefbetitle{" englishtitle * "}{" *
+ englishtitle "t" change.case$ * "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format type (of article, etc.)
+ %
+FUNCTION {format.atype.check}
+{ type bracket.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format title and englishtitle (of article, etc.)
+ %
+FUNCTION {format.atitle.check}
+{ format.aetitle.check
+ title format.atitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format title, englishtitle, and type
+ % (of article, etc.)
+ %
+FUNCTION {format.atitle.type.check}
+{ format.aetitle.check
+ format.atype.check connect.with.space.check
+ title format.atitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format title, englishtitle,
+ % and translator (of article, etc.)
+ %
+FUNCTION {format.atitle.trans.check}
+{ format.aetitle.check
+ format.atrans.check connect.with.space.check
+ title format.atitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format title, englishtitle, type,
+ % and translator (of article, etc.)
+ %
+FUNCTION {format.atitle.type.trans.check}
+{ format.aetitle.check
+ format.atype.check connect.with.space.check
+ format.atrans.check connect.with.space.check
+ title format.atitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format journal, volume, number and pages
+ % call with
+ % formatted.pages format.journal.vol.num.pages.check
+ %
+FUNCTION { format.journal.vol.num.pages.check }
+{ "journal" journal warning.if.empty
+ duplicate$ empty$
+ journal empty$ and
+ volume empty$ and
+ number empty$ and
+ { pop$ "" }
+ { "\APACjournalVolNumPages{" journal "" connect.check
+ "}{" * volume "" connect.check
+ "}{" * number "" connect.check
+ "}{" * swap$ "" connect.check
+ "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume of book, checks whether
+ % "Volume" or "Volumes"
+ %
+ % call with
+ % field format.bvolume.check
+ %
+FUNCTION {format.bvolume.check}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.result.check
+ { "\BVOLS" swap$ tie.or.space.connect }
+ { "\BVOL" swap$ tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % edition of book, must not be empty
+ % call with
+ % field format.edition.check
+ %
+FUNCTION {format.edition.check}
+{ duplicate$ empty$
+ 'skip$
+ { "\PrintOrdinal{" swap$ * "}" *
+ "\BEd" connect.with.space.check
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume and edition of book
+ %
+FUNCTION {format.bvol.edition.check}
+{ edition format.edition.check
+ volume format.bvolume.check
+ connect.with.comma.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume and edition of book
+ %
+FUNCTION {format.bvol.edition}
+{ format.bvol.edition.check
+ parenthesize.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume and edition and translator of translated book
+ %
+FUNCTION {format.bvol.edition.trans}
+{ format.bvol.edition.check
+ format.translators.in.paren.check connect.with.semicolon.check
+ parenthesize.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume, edition, editor, and translator of (translated) book
+ %
+FUNCTION {format.bvol.edition.editor.trans}
+{ format.bvol.edition.check
+ format.editors.translators.in.paren.check connect.with.semicolon.check
+ parenthesize.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % formats pages by first checking if 1 or more pages
+ % and prefixing pages with "p." or "pp." (these strings
+ % are given in the commands \BPG and \BPGS, respectively),
+ % whichever is applicable, and do a tie or space connect
+ %
+ % call with
+ % field format.bpages.check
+ %
+FUNCTION {format.bpages.check}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.result.check
+ { "\BPGS" swap$ tie.or.space.connect }
+ { "\BPG~" swap$ * }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % formats chapters by first checking if 1 or more chapters
+ % and prefixing pages with "chap." (this string
+ % is given in the commands \BCHAP and \BCHAPS, respectively),
+ % whichever is applicable, and do a tie or space connect
+ %
+ % call with
+ % field format.bchapter.check
+ %
+FUNCTION {format.bchapter.check}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.result.check
+ { "\BCHAPS" swap$ tie.or.space.connect }
+ { "\BCHAP" swap$ tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume, edition, and pages or chapter of article in book etc.
+ %
+FUNCTION {format.bvol.edition.pages}
+{ format.bvol.edition.check
+ pages empty$
+ { chapter format.bchapter.check connect.with.comma.check }
+ { pages format.bpages.check connect.with.comma.check }
+ if$
+ parenthesize.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, volume, edition of book
+ %
+FUNCTION {format.btitle.vol.edition}
+{ format.betitle.check
+ format.bvol.edition connect.with.space.check
+ title format.btitle.connect.no.dot
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, volume, edition, and translator of book
+ %
+FUNCTION {format.btitle.vol.edition.trans}
+{ format.betitle.check
+ format.bvol.edition.trans connect.with.space.check
+ title format.btitle.connect.no.dot
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, volume, edition, editor, and translator of book
+ %
+FUNCTION {format.btitle.vol.edition.editor.trans}
+{ format.betitle.check
+ format.bvol.edition.editor.trans connect.with.space.check
+ title format.btitle.connect.no.dot
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format address and publisher of book etc.
+ %
+ % New York: Wiley
+ % or
+ % Wiley (if address empty)
+ % or
+ % New York (if publisher empty)
+ %
+FUNCTION {format.address.publisher}
+{ %
+ % If publisher = author or publisher = "author" or publisher = "Author"
+ % then hand over the final choice how to format this to \LaTeX.
+ % (I could imagine similar code for editors, but the APA manual does
+ % not mention it and then we'd have to check whether the editor is in
+ % the author position, so let's keep it simple until someone complains.)
+ %
+ author empty$
+ publisher empty$ or
+ { publisher "\APACaddressPublisher{" }
+ { author publisher =
+ "author" publisher = or
+ "Author" publisher = or
+ { author "\APACaddressPublisherEqAuth{" }
+ { publisher "\APACaddressPublisher{" }
+ if$
+ }
+ if$
+ address "" connect.check "}{" *
+ % Recover publisher that was pushed onto the stack previously.
+ swap$ "" connect.check "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format address and publisher of book etc.
+ %
+ % New York: Wiley
+ % or
+ % Wiley (if address empty)
+ % or
+ % New York (if publisher empty)
+ %
+ % warning if no publisher or no address
+ %
+FUNCTION {format.address.publisher.check}
+{ "publisher" publisher warning.if.empty
+ "address" address warning.if.empty
+ publisher empty$
+ address empty$
+ and
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.address.publisher
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format number as in reports: No. 2017
+ % call with
+ % field format.rnumber.check
+ %
+FUNCTION {format.rnumber.check}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.result.check
+ { "\BNUMS" swap$ tie.or.space.connect }
+ { "\BNUM" swap$ tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format type and number of a standalone item
+ % call with
+ % format.type.number
+ %
+FUNCTION { format.type.number }
+{ type empty$
+ { type.2 }
+ { type }
+ if$
+ number empty$
+ { bracket.check }
+ { number format.rnumber.check connect.with.space.check
+ parenthesize.check
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format howpublished if not empty,
+ % for various entry types
+ % call with
+ % format.howpublished
+ %
+FUNCTION {format.howpublished}
+{ howpublished empty$
+ 'skip$
+ { % clear the stack
+ duplicate$ empty$
+ 'pop$
+ { output.dot.new.block }
+ if$
+ "\APAChowpublished{" howpublished * "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format howpublished if not empty,
+ % for misc
+ % call with
+ % output.howpublished
+ %
+FUNCTION {output.howpublished}
+{ howpublished empty$
+ 'skip$
+ { "\APAChowpublished{" howpublished * "}" *
+ output.dot.new.block
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % begin and end of url environment
+ %
+FUNCTION {begin.end.url.env}
+{ " \begin{APACrefURL} "
+ % For "Retrieved <date>, from"
+ lastchecked empty$
+ 'skip$
+ { "[{" * lastchecked * "}]" * }
+ if$
+ " \end{APACrefURL} "
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % begin and end of message environment
+ %
+FUNCTION {begin.end.msg.env}
+{ " \begin{APACrefURLmsg} "
+ " \end{APACrefURLmsg} "
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format url given that it is not empty,
+ % for various entry types
+ % call with
+ % format.url
+ %
+FUNCTION {format.url}
+{ % First format begin and end of the enclosing environment.
+ % With posted messages, a different environment is used.
+ type.2 empty$
+ { begin.end.url.env }
+ { type.2 "\bibmessage" =
+ { begin.end.msg.env }
+ { begin.end.url.env }
+ if$
+ }
+ if$
+ % The url string.
+ "\url{" url * "}" *
+ % Enclose in begin and end environment
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format optional note
+ %
+FUNCTION {format.note}
+{ "\APACrefnote{" "}" note enclose.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format original year of publication and note
+ % (reprint or translation)
+ %
+FUNCTION {format.orig.year.note}
+{ originalyear empty$
+ { format.note }
+ { "\APACorigyearnote{"
+ originalyear "" connect.check "}{" *
+ note "" connect.check "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format original journal of publication and note
+ % (reprint or translation)
+ %
+FUNCTION {format.orig.journal.note}
+{ "\APACorigjournalnote{"
+ originalyear "" connect.check "}{" *
+ originaljournal "" connect.check "}{" *
+ originalvolume "" connect.check "}{" *
+ originalnumber "" connect.check "}{" *
+ originalpages "" connect.check "}{" *
+ note "" connect.check "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format original book of publication and note
+ % (reprint or translation)
+ %
+FUNCTION {format.orig.book.note}
+{ "\APACorigbooknote{" originalyear "" connect.check "}{" *
+ %
+ originaleditor empty$
+ 'skip$
+ { originaleditor num.names$ #1 >
+ { "\APACorigEDS{" * originaleditor format.editor.names * "}" * }
+ { "\APACorigED{" * originaleditor format.editor.names * "}" * }
+ if$
+ }
+ if$
+ %
+ "}{" *
+ originalbooktitle format.btitle.no.dot "" connect.check "}{" *
+ originaledition format.edition.check "" connect.check "}{" *
+ originalvolume format.bvolume.check "" connect.check "}{" *
+ originalpages format.bpages.check "" connect.check "}{" *
+ originaladdress "" connect.check "}{" *
+ originalpublisher "" connect.check "}{" *
+ note "" connect.check "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format information about original publication of reprint
+ % and format optional note
+ %
+FUNCTION {format.orig.note}
+{ originaljournal empty$
+ { originalbooktitle empty$
+ { note empty$
+ { originalyear empty$
+ 'skip$
+ { originalyear "\bibnodate" =
+ 'skip$
+ { output.new.block
+ format.orig.year.note
+ }
+ if$
+ }
+ if$
+ }
+ { output.new.block
+ format.orig.year.note
+ }
+ if$
+ }
+ { output.new.block
+ format.orig.book.note
+ }
+ if$
+ }
+ { output.new.block
+ format.orig.journal.note
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % article in periodical: journal, magazine, newspaper, ...
+ %
+ % call with
+ % formatted.pages formatted.date periodical
+ %
+FUNCTION {periodical}
+{ %
+ % author or editor, year, title, englishtitle, type
+ %
+ author empty$
+ %
+ % no author: possibly special issue with editors as authors
+ % (APA manual, ex. 11, p. 121)
+ %
+ { editor empty$
+ %
+ % no author or editor: title serves as author.
+ % title formatted as article title (APA manual not consistent in this,
+ % compare statement on p. 119: ``treat as book title'' and
+ % example 8, p. 121: no underlining => article title)
+ %
+ { format.atitle.type.trans.check output.new.block
+ %
+ % now formatted date on top of stack
+ %
+ output.dot.new.block
+ }
+ %
+ % format editor and year, and check if year is present
+ % format article title and check if title or type present
+ %
+ { format.editors.as.authors start.new.block
+ %
+ % now formatted date on top of stack
+ %
+ output.dot.new.block
+ format.atitle.type.trans.check output.new.block
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format article title and check if title or type present
+ %
+ { format.authors start.new.block
+ %
+ % now formatted date on top of stack
+ %
+ output.dot.new.block
+ format.atitle.type.trans.check output.new.block
+ }
+ if$
+ %
+ % format journal name, volume and issue number, and pages
+ % and check if journal not empty
+ %
+ format.journal.vol.num.pages.check
+ %
+ % if not empty, insert howpublished.
+ % (used if article is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % possible reprint and optional note
+ %
+ format.orig.note
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % journal article
+ %
+FUNCTION {article}
+{ pages format.year.month.day.check periodical }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % magazine article
+ %
+FUNCTION {magazine}
+{ pages format.year.month.day.check periodical }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % newspaper article
+ %
+FUNCTION {newspaper}
+{ pages format.bpages.check format.year.month.day.check periodical }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % (translation of) entire book
+ %
+FUNCTION {book}
+{ %
+ % author or editor,
+ % year, title, englishtitle, translator
+ %
+ author empty$
+ %
+ % no author: possibly edited book with editors as authors
+ %
+ { editor empty$
+ %
+ % no author or editor: title serves as author.
+ % title formatted as book title
+ %
+ { format.btitle.vol.edition.trans
+ format.type.number connect.with.space.check
+ output.dot.new.block
+ format.year.check add.period$
+ }
+ %
+ % format editor and year, and check if year is present
+ % format booktitle, volume, and edition and check if title present
+ %
+ { translator empty$
+ { format.editors.as.authors start.new.block
+ format.year.check output.dot.new.block
+ format.btitle.vol.edition
+ }
+ %
+ % format translator correctly
+ %
+ { translator editor =
+ not
+ { format.editors.as.authors start.new.block
+ format.year.check output.dot.new.block
+ format.btitle.vol.edition.trans
+ }
+ { format.ed.trans.as.authors start.new.block
+ format.year.check output.dot.new.block
+ format.btitle.vol.edition
+ }
+ if$
+ }
+ if$
+ format.type.number connect.with.space.check
+ add.period$
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format booktitle, volume, and edition and check if title present
+ %
+ { format.authors start.new.block
+ format.year.check output.dot.new.block
+ format.btitle.vol.edition.editor.trans
+ format.type.number connect.with.space.check
+ add.period$
+ }
+ if$
+ %
+ % format address and publisher, check if address and publisher present
+ %
+ format.address.publisher.check
+ %
+ % if not empty, insert howpublished.
+ % (used if book is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format original publication (of reprint/translation)
+ % and optional note
+ %
+ format.orig.note
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % (translated) article or chapter in edited book
+ %
+FUNCTION {incollection}
+{ author empty$
+ %
+ % no author: title serves as author.
+ % title formatted as article title (APA manual not consistent in this,
+ % compare statement on p. 119: ``treat as book title'' and
+ % example 8, p. 121: no underlining => article title)
+ %
+ { editor.ne.trans
+ { format.atitle.type.trans.check }
+ { format.atitle.type.check }
+ if$
+ output.new.block
+ %
+ % format month and day as well when available
+ % esp. for ``collections'' that are not books,
+ % such as parts of internet documents
+ %
+ format.year.month.day.check add.period$
+ }
+ %
+ % format author and year, and check if year is present
+ % format article title and check if title or type present
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ editor.ne.trans
+ { format.atitle.type.trans.check }
+ { format.atitle.type.check }
+ if$
+ }
+ if$
+ %
+ % format "In " editor " (Ed. \& Trans.), "
+ % booktitle, volume, edition, pages
+ %
+ output.new.block
+ format.in.editors.trans
+ format.bvol.edition.pages
+ booktitle format.btitle.connect * add.period$
+ %
+ % format address and publisher, check if publisher present
+ %
+ format.address.publisher.check
+ %
+ % if not empty, insert howpublished.
+ % (used if article is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format original publication (of reprint/translation)
+ % and optional note
+ %
+ format.orig.note
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % technical report number
+ %
+FUNCTION {format.tr.number}
+{ type empty$
+ { "\BTR{}" }
+ { type "\bibnotype" =
+ { "" }
+ { type }
+ if$
+ }
+ if$
+ number format.rnumber.check connect.with.space.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, volume, edition, report number
+ %
+FUNCTION {format.tr.title.number}
+{ format.betitle.check
+ % Single out the situation in which there is no number
+ % and type = {\bibnotype}, i.e., no type as well.
+ % (Why not use book then?)
+ type empty$
+ { % Now, we're in the regular situation with at least a
+ % number, a type, a volume, or an edition.
+ "\APACbVolEdTR{" format.bvol.edition.check * "}{" *
+ format.tr.number * "}" *
+ }
+ { type "\bibnotype" =
+ number empty$
+ volume empty$
+ edition empty$
+ and
+ and
+ and
+ { "" }
+ { % Now, we're in the regular situation with at least a
+ % number, a type, a volume, or an edition.
+ "\APACbVolEdTR{" format.bvol.edition.check * "}{" *
+ format.tr.number * "}" *
+ }
+ if$
+ }
+ if$
+ connect.with.space.check
+ title format.btitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format address and institution of reports etc.
+ %
+ % Washington, DC: National Institute of Education
+ % or
+ % National Institute of Education (if address empty)
+ %
+ % warning if no institution
+ %
+FUNCTION {format.address.institution.check}
+{ "institution" institution warning.if.empty
+ "address" address warning.if.empty
+ institution empty$
+ address empty$
+ and
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ %
+ % If institution = author or institution = "author"
+ % or institution = "Author" then hand over the final choice how to
+ % format this to \LaTeX. See also format.address.publisher
+ %
+ author empty$
+ institution empty$ or
+ { institution "\APACaddressInstitution{" }
+ { author institution =
+ "author" institution = or
+ "Author" institution = or
+ { author "\APACaddressInstitutionEqAuth{" }
+ { institution "\APACaddressInstitution{" }
+ if$
+ }
+ if$
+ address "" connect.check "}{" *
+ % Recover institution that was pushed onto the stack previously.
+ swap$ "" connect.check "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % reports
+ %
+FUNCTION {techreport}
+{ author empty$
+ %
+ % no author: possibly edited report with editors as authors
+ %
+ { editor empty$
+ %
+ % no author or editor: title serves as author.
+ % title formatted as book title
+ %
+ { format.tr.title.number output.dot.new.block
+ format.year.month.day.check add.period$
+ }
+ %
+ % format editor and year, and check if year is present
+ % format report title and check if title present
+ % format volume, edition, type, and number
+ %
+ { format.editors.as.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ format.tr.title.number add.period$
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format report title and check if title present
+ % format volume, edition, type, and number
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ format.tr.title.number add.period$
+ }
+ if$
+ %
+ % format address and institution, check if institution present
+ %
+ format.address.institution.check
+ %
+ % if not empty, insert howpublished.
+ % (used if report is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % (translated) article or chapter in report
+ %
+FUNCTION {intechreport}
+{ author empty$
+ %
+ % no author: title serves as author.
+ % title formatted as article title (APA manual not consistent in this,
+ % compare statement on p. 119: ``treat as book title'' and
+ % example 8, p. 121: no underlining => article title)
+ %
+ { editor.ne.trans
+ { format.atitle.trans.check }
+ { format.atitle.check }
+ if$
+ output.new.block
+ format.year.month.day.check output.dot.new.block
+ }
+ %
+ % format author and year, and check if year is present
+ % format article title and check if title or type present
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ editor.ne.trans
+ { format.atitle.trans.check }
+ { format.atitle.check }
+ if$
+ output.new.block
+ }
+ if$
+ %
+ % format "In " editor " (Ed. \& Trans.), "
+ % booktitle, volume, edition, pages
+ %
+ format.in.editors.trans
+ %
+ % volume, edition, report type and number, pages
+ %
+ "\APACbVolEdTRpgs{" format.bvol.edition.check * "}{" *
+ format.tr.number *
+ "}{" * pages format.bpages.check *
+ "}" *
+ %
+ booktitle format.btitle.connect *
+ add.period$
+ %
+ % format address and publisher, check if publisher present
+ %
+ format.address.institution.check
+ %
+ % if not empty, insert howpublished.
+ % (used if report is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format original publication (of reprint/translation)
+ % and optional note
+ %
+ format.orig.note
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % papers presented at conferences etc.
+ %
+FUNCTION {lecture}
+{ author empty$
+ { "author" author warning.if.empty }
+ { format.authors start.new.block }
+ if$
+ %
+ % format year, month, and day, and check if year present
+ % format title and check if title present
+ % format howpublished and check if howpublished present
+ %
+ format.year.month.day.check output.dot.new.block
+ symposium empty$
+ { format.betitle.check
+ title format.btitle.connect output.new.block
+ howpublished empty$
+ { "symposium and howpublished missing in " cite$ * warning$
+ ""
+ }
+ { "\APAChowpublished{" howpublished * "}" * }
+ if$
+ address connect.with.comma.check
+ }
+ { format.atitle.type.check output.new.block
+ "\BIn{} "
+ chair empty$
+ 'skip$
+ { chair format.editor.names
+ chair num.names$ #1 >
+ { "(\BCHAIRS)" }
+ { "(\BCHAIR)" }
+ if$
+ connect.with.space.check * ", " *
+ }
+ if$
+ symposium format.btitle.no.dot *
+ format.howpublished
+ address connect.with.comma.check
+ }
+ if$
+ add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % default thesis type is on top of stack
+ % now, if type field is empty, this default is used
+ % else default is removed and replaced by value of
+ % type field
+ %
+FUNCTION {format.type.school}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+ school connect.with.comma.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % phd theses, etc.
+ % call with
+ % "default.published.thesis" "default.unpublished.thesis" thesis
+ %
+FUNCTION {thesis}
+{ author empty$
+ { "author" author warning.if.empty }
+ { format.authors start.new.block }
+ if$
+ %
+ % format year and check if year present
+ %
+ format.year.check output.dot.new.block
+ %
+ % format title and check if title present
+ % journal empty => unpublished PhD thesis
+ % journal not empty => published (e.g., Dissertation Abstracts Int.)
+ %
+ journal empty$
+ { format.btitle.vol.edition output.dot.new.block
+ %
+ % pop default unpublished thesis, top is default published thesis
+ %
+ swap$ pop$
+ format.type.school
+ address connect.with.comma.check
+ }
+ %
+ % pop default published thesis, top is default unpublished thesis
+ %
+ { pop$
+ type empty$
+ school empty$
+ originalyear empty$
+ and
+ and
+ { pop$
+ ""
+ }
+ { format.type.school
+ originalyear connect.with.comma.check
+ parenthesize.check
+ }
+ if$
+ format.aetitle.check
+ swap$ connect.with.space.check
+ "title" title warning.if.empty
+ title format.atitle.connect output.new.block
+ pages format.journal.vol.num.pages.check
+ }
+ if$
+ %
+ % if not empty, insert howpublished.
+ % (used if thesis is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % phd theses, etc.
+ %
+FUNCTION {phdthesis}
+{ "\BPhD" "\BUPhD" thesis }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % master's theses, etc.
+ %
+FUNCTION {mastersthesis}
+{ "\BMTh" "\BUMTh" thesis }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of something (used in unpublished and misc)
+ % english translation of title
+ % type and number of something
+ %
+FUNCTION {format.btitle.type.num}
+{ format.betitle.check
+ format.bvol.edition connect.with.space.check
+ format.type.number
+ connect.with.space.check
+ title empty$
+ { add.period$ }
+ { title format.btitle.connect }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of message or software-related thing (used in misc)
+ % english translation of title
+ % type and number of something
+ %
+FUNCTION {format.mtitle.type.num}
+{ format.aetitle.check
+ format.bvol.edition connect.with.space.check
+ type.2 "\bibmessage" =
+ { number empty$
+ 'skip$
+ { type.2 number tie.or.space.connect
+ bracket.check
+ connect.with.space.check
+ }
+ if$
+ }
+ { format.type.number
+ connect.with.space.check
+ }
+ if$
+ title empty$
+ { add.period$ }
+ { title format.atitle.connect }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, english translation of title,
+ % type and number of something (used in misc)
+ %
+FUNCTION {output.misctitle.type.num}
+{ type.2 empty$
+ { format.btitle.type.num }
+ { type.2 "\bibmessage" =
+ type.2 "\bibcomputerprogram" = or
+ type.2 "\bibcomputerprogrammanual" = or
+ type.2 "\bibcomputerprogramandmanual" = or
+ type.2 "\bibcomputersoftware" = or
+ type.2 "\bibcomputersoftwaremanual" = or
+ type.2 "\bibcomputersoftwareandmanual" = or
+ type.2 "\bibprogramminglanguage" = or
+ { format.mtitle.type.num }
+ { format.btitle.type.num }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % unpublished manuscripts, etc.
+ %
+FUNCTION {unpublished}
+{ check.relevant.fields
+ author empty$
+ %
+ % no author: possibly edited book with editors as authors
+ %
+ { editor empty$
+ %
+ % no author or editor: title serves as author.
+ % title formatted as book title
+ %
+ { format.btitle.type.num output.new.block
+ format.year.month.day.check add.period$
+ }
+ %
+ % format editor and year, and check if year is present
+ % format book title, volume, and edition and check if title present
+ %
+ { format.editors.as.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ format.btitle.type.num
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format book title, volume, and edition
+ % and check if title or type present
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ format.btitle.type.num
+ }
+ if$
+ howpublished empty$
+ organization empty$ and
+ address empty$ and
+ 'skip$
+ { output.new.block
+ "\APAChowpublished{" "}" howpublished enclose.check
+ organization connect.with.comma.check
+ address connect.with.comma.check
+ add.period$
+ }
+ if$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % nonprint media and other things that don't fit
+ %
+FUNCTION {misc}
+{ %
+ % To handle @manual: use type.2 instead of type.
+ type.2 empty$
+ type empty$ not and
+ { type 'type.2 := }
+ 'skip$
+ if$
+ %
+ author empty$
+ %
+ % no author: possibly edited item with editors as authors
+ %
+ { editor empty$
+ %
+ % no author or editor: title/type serves as author.
+ % title formatted as book title
+ %
+ % if no title and no type, howpublished is title
+ %
+ { title empty$
+ type.2 empty$ and
+ { howpublished empty$
+ { "No author, editor, title, type, and howpublished in "
+ cite$ * warning$
+ ""
+ }
+ { "\APAChowpublished{" howpublished * "}" * add.period$ }
+ if$
+ format.year.month.day.check add.period$
+ }
+ { output.misctitle.type.num output.new.block
+ format.year.month.day.check add.period$
+ format.howpublished add.period$
+ }
+ if$
+ }
+ %
+ % format editor and year, and check if year is present
+ % format book title, volume, and edition and check if title present
+ %
+ { format.editors.as.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ output.misctitle.type.num
+ format.howpublished add.period$
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format book title, volume, and edition
+ % and check if title or type present
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ output.misctitle.type.num
+ format.howpublished add.period$
+ }
+ if$
+ %
+ address empty$
+ publisher empty$ and
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.address.publisher add.period$
+ }
+ if$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % for legal cases and other cases that need to be
+ % done by hand
+ %
+FUNCTION {literal}
+{ "key" key warning.if.empty
+ "text" text warning.if.empty
+ text empty$
+ { "" }
+ { text }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % technical documentation
+ %
+FUNCTION {manual}
+{ %
+ % If type is empty, assume that it is a computer software manual.
+ %
+ type empty$
+ { "\bibcomputersoftwaremanual" 'type.2 := }
+ 'skip$
+ if$
+ misc
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % following functions not used for APA Manual examples
+ %
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % booklet
+ %
+FUNCTION {booklet}
+{ misc }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % part of a book
+ %
+FUNCTION {inbook}
+{ incollection }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % article in proceedings
+ %
+FUNCTION {inproceedings}
+{ incollection }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % article in proceedings (Kopka & Daly, 2004, p. 230)
+ %
+FUNCTION {conference}
+{ inproceedings }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % proceedings
+ %
+FUNCTION {proceedings}
+{ misc }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % unknown types
+ %
+FUNCTION {default.type}
+{ misc }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {initialize}
+{ %
+ % Maximum number of names to be formatted .
+ #6 'name.max :=
+}
+
+FUNCTION {init.old.number}
+{ %
+ % For numbering the entries according to current sorting order.
+ #0 'old.number :=
+}
+
+FUNCTION {init.old.label}
+{ %
+ % For comparing labels across entries .
+ "zzzzzz" 'old.label :=
+}
+
+FUNCTION {init.cite.initials.add.to.year}
+{ %
+ % Initialize "cite initials" indicator for all entries.
+ #0 'cite.initials :=
+ %
+ % Initialize "add to year", i.e., whether a, b, etc. must
+ % be added to the year in citation, to "no".
+ #0 'add.to.year :=
+ %
+}
+
+FUNCTION {move.forward}
+{ %
+ % Indicates that we're moving forward (ITERATE) through the entry list .
+ #1 'forward :=
+}
+
+FUNCTION {move.backward}
+{ %
+ % Indicates that we're moving backward (REVERSE) through the entry list .
+ #0 'forward :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{}" write$ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {write.bbl.entry}
+{ %
+ % Output \bibitem and \citeauthoryear command.
+ %
+ make.cite.labels
+ %
+ % Format and output reference list entry.
+ %
+ call.type$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+READ
+
+
+EXECUTE { identify.apacite.version }
+
+
+EXECUTE { initialize }
+
+
+ITERATE { make.sort.title }
+
+SORT
+
+EXECUTE { init.old.number }
+
+EXECUTE { init.old.label }
+
+ITERATE { make.title.number }
+
+
+ITERATE { make.tentative.sort.label }
+
+SORT
+
+
+ITERATE { init.cite.initials.add.to.year }
+
+EXECUTE { init.initials }
+
+ITERATE { check.add.initials }
+
+EXECUTE { init.initials }
+
+REVERSE { check.add.initials }
+
+ITERATE { tentative.cite.num.names }
+
+EXECUTE { init.cite.num.names }
+
+EXECUTE { move.forward }
+
+ITERATE { definitive.cite.num.names }
+
+EXECUTE { init.cite.num.names }
+
+EXECUTE { move.backward }
+
+REVERSE { definitive.cite.num.names }
+
+
+ITERATE { make.final.sort.key }
+
+SORT
+
+
+EXECUTE { begin.bib }
+
+
+ITERATE { write.bbl.entry }
+
+
+EXECUTE { end.bib }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%%
+%% End of file `apacann.bst'.
diff --git a/Master/texmf-dist/bibtex/bst/apacite/apacannx.bst b/Master/texmf-dist/bibtex/bst/apacite/apacannx.bst
new file mode 100644
index 00000000000..5b8406c10c1
--- /dev/null
+++ b/Master/texmf-dist/bibtex/bst/apacite/apacannx.bst
@@ -0,0 +1,5259 @@
+%%
+%% This is file `apacannx.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% apacite.dtx (with options: `xbibstyle,annotated')
+%%
+%% This is a generated file.
+%%
+%% Copyright (C) 1994-2009 Erik Meijer and any individual authors listed
+%% elsewhere in this file.
+%%
+%% This file is part of the `apacite' package.
+%% -------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% The `apacite' package consists of the files apacite.dtx and
+%% apacite.ins, and the following generated files:
+%% apacite.sty, apacite.bst, apacitex.bst, apa5ex.bib,
+%% apacite.drv, apacdoc.sty, apacann.bst, apacannx.bst,
+%% english.apc, dutch.apc, finnish.apc, french.apc, german.apc,
+%% ngerman.apc, greek.apc, norsk.apc, spanish.apc, swedish.apc.
+%%
+%% This work has the LPPL maintenance status `maintained'
+%%
+%% The Current Maintainer of this work is Erik Meijer
+%%
+%% This file may only be distributed together with a copy of the
+%% source files of the apacite package, i.e., apacite.dtx and
+%% apacite.ins. You may however distribute the apacite package without
+%% the generated files.
+%%
+%% apacannx.bst
+%% [2009/03/01 v4.05 APA annotated bibl. style with author index info]
+%% apacannx.bst : reference list according to APA manual
+%% with annotations and author indexing information
+%% Written by Erik Meijer
+
+FUNCTION {identify.apacite.version}
+{ % Put identifying string in the .blg file
+ "apacannx.bst"
+" [2009/03/01 v4.05 APA annotated bibl. style with author index info]"
+ * top$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ENTRY
+ { address
+ annote % only used for annotated version
+ annotate % only used for annotated version
+ author
+ booktitle % for articles in books
+ chair % for lectures
+ chapter % for incollection, esp. internet documents
+ day
+ edition
+ editor
+ englishtitle % english translation of title in other language
+ firstkey % key for first citation
+ howpublished
+ institution % for technical reports
+ journal
+ key % key for second and later citations, or all
+ % citations if firstkey is missing
+ lastchecked % for URL's
+ month
+ note
+ number % number of journal or report
+ organization % for unpublished
+ %
+ % for reprints, translations, etc.
+ %
+ originaladdress
+ originalbooktitle
+ originaledition
+ originaleditor
+ originaljournal
+ originalnumber
+ originalpages
+ originalpublisher
+ originalvolume
+ originalyear
+ %
+ % back to normal
+ %
+ pages
+ publisher
+ school % for theses
+ series % not used
+ symposium % for lectures
+ text % for literals
+ title
+ translator % translator of book (or article)
+ type % type of phdthesis (e.g., Doctoral dissertation)
+ % or type of article (e.g., Letter to the editor)
+ % etc.
+ url
+ volume
+ year
+ }
+ { title.number % for sorting titles
+ cite.initials % dummy (0-1) indicating whether or not
+ % initials of the 1st author must
+ % be used for citing
+ cite.num.names.full % number of names to be cited for full and
+ cite.num.names.short % short cite
+ add.to.year % For a, b, c, etc. after year
+ % in multiple citations with same author-year
+ }
+ { year.label % For sorting entries by year
+ author.year.sort.label % For sorting entries and checking whether
+ % initials should be added, how many authors
+ % should be cited and whether a, b, etc.
+ % after year is necessary
+ title.sort.label % for sorting titles
+ type.2 % Replacement for type with misc entries and
+ % entries that revert to misc.
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+INTEGERS { len pos name.max old.number numnames numnames.old
+ nameptr lastname format.num.names cite.initials.old
+ cite.num.names.old add.to.year.old forward
+ multiresult dot brace.level
+ }
+
+STRINGS { s t u old.label field
+ aut1f aut1s aut1f.old aut1s.old
+ aut2 aut2.old
+ aut3 aut3.old
+ aut4 aut4.old
+ aut5 aut5.old
+ aut6 aut6.old
+ year.label.old
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {test} { #0 }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.index} { #1 }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+MACRO {jan} {"{\APACmonth{01}}"}
+
+MACRO {feb} {"{\APACmonth{02}}"}
+
+MACRO {mar} {"{\APACmonth{03}}"}
+
+MACRO {apr} {"{\APACmonth{04}}"}
+
+MACRO {may} {"{\APACmonth{05}}"}
+
+MACRO {jun} {"{\APACmonth{06}}"}
+
+MACRO {jul} {"{\APACmonth{07}}"}
+
+MACRO {aug} {"{\APACmonth{08}}"}
+
+MACRO {sep} {"{\APACmonth{09}}"}
+
+MACRO {oct} {"{\APACmonth{10}}"}
+
+MACRO {nov} {"{\APACmonth{11}}"}
+
+MACRO {dec} {"{\APACmonth{12}}"}
+
+MACRO {winter} {"{\APACmonth{13}}"}
+
+MACRO {spring} {"{\APACmonth{14}}"}
+
+MACRO {summer} {"{\APACmonth{15}}"}
+
+MACRO {fall} {"{\APACmonth{16}}"}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % issues warning if field is empty
+ % call with
+ % "field" field warning.if.empty
+ % Note that the first field must be between quotes
+ % because it is the fieldname for use in the warning message.
+ %
+FUNCTION {warning.if.empty}
+{ empty$
+ { "No " swap$ * " in " * cite$ * warning$ }
+ { pop$ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % issues warning if title, type, and howpublished are empty
+ %
+FUNCTION {check.relevant.fields}
+{ title empty$
+ type empty$ and
+ howpublished empty$ and
+ { "No title, type, and howpublished in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % delivers 1 if (both editor and translator
+ % not empty and not equal to each other)
+ % 0 if (editor or translator empty) or
+ % (editor = translator)
+ %
+FUNCTION {editor.ne.trans}
+{ translator empty$
+ { #0 }
+ { editor empty$
+ { #0 }
+ { translator editor =
+ { #0 }
+ { #1 }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {conv.int.to.str}
+{ duplicate$ #10 <
+ { "0000" swap$ int.to.str$ * }
+ { duplicate$ #100 <
+ { "000" swap$ int.to.str$ * }
+ { duplicate$ #1000 <
+ { "00" swap$ int.to.str$ * }
+ { duplicate$ #10000 <
+ { "0" swap$ int.to.str$ * }
+ { int.to.str$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {ref.type}
+{ type$ "article" =
+ type$ "magazine" =
+ type$ "newspaper" =
+ type$ "book" =
+ type$ "techreport" =
+ type$ "unpublished" =
+ type$ "misc" =
+ type$ "booklet" =
+ type$ "manual" =
+ type$ "proceedings" =
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ { #1 }
+ { type$ "incollection" =
+ type$ "phdthesis" =
+ type$ "mastersthesis" =
+ type$ "lecture" =
+ type$ "inbook" =
+ type$ "inproceedings" =
+ type$ "conference" =
+ type$ "intechreport" =
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ { #2 }
+ { type$ "literal" =
+ { #3 }
+ { #0 }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {is.atype}
+{ type$ "article" =
+ type$ "magazine" =
+ type$ "newspaper" =
+ type$ "incollection" =
+ type$ "inbook" =
+ type$ "inproceedings" =
+ type$ "conference" =
+ type$ "intechreport" =
+ type$ "manual" =
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ { #1 }
+ { journal empty$ not
+ %
+ type$ "phdthesis" =
+ type$ "mastersthesis" =
+ or
+ %
+ and
+ { #1 }
+ { type$ "misc" =
+ type empty$ not and
+ { type "\bibmessage" =
+ type "\bibcomputerprogram" =
+ type "\bibcomputerprogrammanual" =
+ type "\bibcomputerprogramandmanual" =
+ type "\bibcomputersoftware" =
+ type "\bibcomputersoftwaremanual" =
+ type "\bibcomputersoftwareandmanual" =
+ type "\bibprogramminglanguage" =
+ or
+ or
+ or
+ or
+ or
+ or
+ or
+ { #1 }
+ { #0 }
+ if$
+ }
+ { #0 }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with connect string
+ % if one of them empty, then connect string
+ % is left out
+ %
+ % call with S1 S2 connectstring connect.check
+ %
+FUNCTION {connect.check}
+{ 'u :=
+ %
+ % if S2 = ""
+ %
+ duplicate$ empty$
+ %
+ % then remove S2
+ %
+ { pop$
+ %
+ % S1 is on top of stack.
+ % if it is empty, it is replaced by the empty string ""
+ %
+ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ }
+ %
+ % else swap S1 and S2 so that S1 can be checked
+ %
+ { swap$
+ %
+ % if S1 is empty, remove S1 so that S2 is left on the
+ % stack and is the result is given
+ %
+ duplicate$ empty$
+ { pop$ }
+ %
+ % now the real work starts:
+ % push the connect string "C"
+ % so that top of stack is "C" "S1" "S2"
+ % concatenate, so that top of stack is
+ % "S1+C" "S2"
+ %
+ { u *
+ %
+ % swap and concatenate
+ %
+ swap$ *
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with space ("\ ")
+ % if length of second is 4 or larger,
+ % connects them with non-breaking space ("tie", "~")
+ % if length of second smaller than 4
+ %
+ % call with S1 S2 tie.or.space.connect
+ % result: "S1\ S2" or "S1~S2"
+ %
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #4 <
+ { "~" }
+ { "\ " }
+ if$
+ swap$ * *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with comma (", ")
+ % if one of them is empty, the comma is left out
+ %
+ % call with S1 S2 connect.with.comma.check
+ % result: "S1, S2"
+ %
+FUNCTION {connect.with.comma.check}
+{ ", " connect.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with semicolon ("; ")
+ % if one of them is empty, semicolon is left out
+ %
+ % call with S1 S2 connect.with.semicolon.check
+ % result: "S1; S2"
+ %
+FUNCTION {connect.with.semicolon.check}
+{ "; " connect.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with colon (": ")
+ % if one of them is empty, colon is left out
+ %
+ % call with S1 S2 connect.with.colon.check
+ % result: "S1: S2"
+ %
+FUNCTION {connect.with.colon.check}
+{ ": " connect.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % connects two strings with space ("\ ")
+ %
+ % call with S1 S2 connect.with.space.check
+ % result: "S1\ S2"
+ %
+FUNCTION {connect.with.space.check}
+{ "\ " connect.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % encloses string in pre- and postfix string
+ % call with
+ % prefix postfix S enclose.check
+ % delivers empty string if S empty
+ %
+FUNCTION {enclose.check}
+{ duplicate$ empty$
+ { pop$ pop$ pop$
+ ""
+ }
+ { swap$ * * }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % emphasizes top of stack
+ % call with
+ % "string" emphasize.check
+ %
+FUNCTION {emphasize.check}
+{ "\Bem{" swap$
+ "}" swap$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % brackets top of stack
+ % call with
+ % "string" bracket
+ %
+FUNCTION {bracket.check}
+{ "[" swap$
+ "]" swap$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % parenthesizes top of stack
+ % call with
+ % "string" parenthesize
+ %
+FUNCTION {parenthesize.check}
+{ "(" swap$
+ ")" swap$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % checks whether argument is "multiresult":
+ % whether it contains '-', '+', or ',' characters
+ % used with pages to check whether pp. or p. must be used
+ %
+FUNCTION {multi.result.check}
+{ 't :=
+ #0 'multiresult :=
+ %
+ % while (not multiresult) and (length(t) > 1) do
+ %
+ { multiresult not
+ t text.length$ #1 >
+ and
+ }
+ %
+ % if t(1-2) = "--" or t(1) = "+" or ","
+ % then multiresult = 1
+ % else t = t(2-last)
+ %
+ { t #1 #2 substring$ 's :=
+ "--" s =
+ { #1 'multiresult := }
+ { t #1 #1 substring$ 's :=
+ "+" s =
+ "," s =
+ or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ if$
+ }
+ while$
+ multiresult
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Checks whether an author is a corporate author, i.e.,
+ % whether the field starts with "{\bibcorporate".
+ % Call with
+ % field is.bibcorporate
+ %
+FUNCTION {is.bibcorporate}
+{ #1 #14 substring$ "{\bibcorporate" = }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {remove.spaces}
+{ % Remove spaces from string.
+ % Works best if string only contains alphanumeric characters and spaces.
+ 's := % The original string
+ s text.length$ 'len := % Its length (no. of characters)
+ "" 't := % Initialize the transformed string
+ #0 'pos :=
+ %
+ % while (pos < len) do
+ %
+ { pos len < }
+ { pos #1 + 'pos :=
+ s pos #1 substring$ 'u :=
+ %
+ % u is the pos-th character in s
+ % If it is a space, move to next character,
+ % else copy character to output.
+ %
+ u " " =
+ 'skip$
+ { t u * 't := }
+ if$
+ }
+ while$
+ %
+ % Now push the result back on the stack
+ t
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % starting new block by writing what's left on the stack,
+ % starting a new line and adding some extra space or
+ % whatever is more defined in \newblock
+ %
+FUNCTION {output.end.block}
+{ write$
+ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % starting new block by writing what's left on the stack,
+ % starting a new line and adding some extra space or
+ % whatever is more defined in \newblock
+ %
+FUNCTION {output.new.block}
+{ output.end.block
+ "\newblock" write$
+ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % starting new block by writing what's left on the stack,
+ % starting a new line and adding some extra space or
+ % whatever is more defined in \newblock
+ %
+FUNCTION {output.dot.new.block}
+{ add.period$
+ output.new.block
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {start.new.block}
+{ newline$
+ "\unskip\ " write$ newline$
+ "\newblock " write$ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % finish current entry
+ % by writing what's left on the stack and starting a new line
+ %
+FUNCTION {fin.entry}
+{ output.end.block
+ "\PrintBackRefs{\CurrentBib}" write$ newline$
+ test
+ { "\vspace{\baselineskip}" write$ newline$ }
+ 'skip$
+ if$
+ %
+ % According to TLC2, pp. 810-811, both annote and annotate fields are
+ % known, so support them both, but do not print them both, in case
+ % someone wants to make a file that is compatible with both the annotate
+ % and annotation styles and thus duplicates the information. Instead, we
+ % give annote priority.
+ %
+ annote empty$
+ {% Try annotate
+ annotate empty$
+ 'skip$
+ { % add annotation
+ "\begin{APACrefannotation}" write$ newline$
+ annotate write$ newline$
+ "\end{APACrefannotation}" write$ newline$
+ }
+ if$
+ }
+ { % add annotation
+ "\begin{APACrefannotation}" write$ newline$
+ annote write$ newline$
+ "\end{APACrefannotation}" write$ newline$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {sort.name.format} { "{ll{}}{ f{}}{ vv{}}{ jj{}}" }
+
+FUNCTION {cite.name.format} { "{ll}" }
+
+FUNCTION {cite.initials.name.format} { "{f{\BPBI }.~~}{vv }{ll}{ jj}" }
+
+FUNCTION {author.name.format} { "{ll}{, f{\BPBI }.}{ vv}{, jj}" }
+
+FUNCTION {editor.name.format} { "{f{\BPBI }.~~}{vv }{ll}{ jj}" }
+
+FUNCTION {index.name.format} { "{ll}{, f{\BPBI }.}{ vv}{, jj}" }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {init.initials}
+{ "yyyyy" 'aut1f.old :=
+ "yyyyy" 'aut1s.old :=
+ #0 'cite.initials.old :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {update.no.initials}
+{ 'field :=
+ field 'aut1f.old :=
+ field 'aut1s.old :=
+ #0 'cite.initials.old :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {check.add.initials.aut}
+{ %
+ % If last name is equal to previous last name
+ % but initials are different, then initials should
+ % be cited. If initials are also the same, initials
+ % should be cited if that is the case for the previous
+ % author .
+ %
+ aut1s aut1s.old =
+ { aut1f aut1f.old =
+ { cite.initials.old 'cite.initials := }
+ { #1 'cite.initials :=
+ aut1f 'aut1f.old :=
+ aut1s 'aut1s.old :=
+ cite.initials 'cite.initials.old :=
+ }
+ if$
+ }
+ { %
+ % Different last name.
+ aut1f 'aut1f.old :=
+ aut1s 'aut1s.old :=
+ cite.initials 'cite.initials.old :=
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {check.add.initials.field}
+{ 'field :=
+ field #1 cite.initials.name.format format.name$ 'aut1f :=
+ field #1 cite.name.format format.name$ 'aut1s :=
+ %
+ % Now do the actual work
+ %
+ check.add.initials.aut
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {check.add.initials}
+{ %
+ % Check whether author or editor or other field acts as author.
+ % Initials are only relevant with author or editor.
+ %
+ firstkey empty$ not
+ { key empty$ not
+ { %
+ % Both key and firstkey are nonempty.
+ % Then, key is treated as last name of first author,
+ % and firstkey is treated as last name + initials of
+ % first author .
+ %
+ firstkey sortify remove.spaces 'aut1f :=
+ key sortify remove.spaces 'aut1s :=
+ check.add.initials.aut
+ }
+ { firstkey sortify remove.spaces update.no.initials }
+ if$
+ }
+ { key empty$ not
+ { key sortify remove.spaces update.no.initials }
+ { %
+ % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { %
+ % Format first author with and without initials
+ author empty$
+ { title.sort.label update.no.initials }
+ { author check.add.initials.field }
+ if$
+ }
+ { %
+ % Format first author with and without initials
+ author empty$
+ { editor empty$
+ { title.sort.label update.no.initials }
+ { editor check.add.initials.field }
+ if$
+ }
+ { author check.add.initials.field }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {tentative.cite.num.names.field}
+{ 'field :=
+ field num.names$ 'numnames :=
+ numnames #3 <
+ { %
+ % 1 or 2 names: always cite all of them.
+ numnames 'cite.num.names.full :=
+ numnames 'cite.num.names.short :=
+ }
+ { numnames #6 <
+ { %
+ % 3-5 names: cite all of them the first time,
+ % only the first name later times
+ numnames 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { %
+ % 6 or more names: cite only the first name
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {tentative.cite.num.names}
+{ %
+ % Check whether author or editor or other field acts as author.
+ % Number of names is only relevant with author or editor.
+ %
+ firstkey empty$ not
+ {
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { key empty$ not
+ {
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { %
+ % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { %
+ % Format first author with and without initials
+ author empty$
+ {
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { author tentative.cite.num.names.field }
+ if$
+ }
+ { %
+ % Format first author with and without initials
+ author empty$
+ { editor empty$
+ {
+ #1 'cite.num.names.full :=
+ #1 'cite.num.names.short :=
+ }
+ { editor tentative.cite.num.names.field }
+ if$
+ }
+ { author tentative.cite.num.names.field }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {init.cite.num.names}
+{ #0 'cite.num.names.old :=
+ #0 'numnames.old :=
+ "yyyy" 'year.label.old :=
+ #0 'add.to.year.old :=
+ "" 'aut1f.old :=
+ "" 'aut2.old :=
+ "" 'aut3.old :=
+ "" 'aut4.old :=
+ "" 'aut5.old :=
+ "" 'aut6.old :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {update.cite.num.names}
+{ cite.num.names.short 'cite.num.names.old :=
+ numnames 'numnames.old :=
+ year.label 'year.label.old :=
+ add.to.year 'add.to.year.old :=
+ aut1f 'aut1f.old :=
+ aut2 'aut2.old :=
+ aut3 'aut3.old :=
+ aut4 'aut4.old :=
+ aut5 'aut5.old :=
+ aut6 'aut6.old :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.6.authors}
+{ %
+ % First author: with initials.
+ %
+ field #1 cite.initials.name.format format.name$ 'aut1f :=
+ %
+ % Second and later authors: without initials.
+ %
+ numnames #1 >
+ name.max #1 >
+ and
+ { %
+ % 2nd author
+ field #2 cite.name.format format.name$ 'aut2 :=
+ %
+ numnames #2 >
+ name.max #2 >
+ and
+ { %
+ % 3nd author
+ field #3 cite.name.format format.name$ 'aut3 :=
+ %
+ numnames #3 >
+ name.max #3 >
+ and
+ { %
+ % 4th author
+ field #4 cite.name.format format.name$ 'aut4 :=
+ %
+ numnames #4 >
+ name.max #4 >
+ and
+ { %
+ % 5th author
+ field #5 cite.name.format format.name$ 'aut5 :=
+ %
+ numnames #5 >
+ name.max #5 >
+ and
+ { %
+ % 6th author
+ field #6 cite.name.format format.name$ 'aut6 :=
+ }
+ { %
+ % 5 authors: 6 is empty
+ %
+ "" 'aut6 :=
+ }
+ if$
+ }
+ { %
+ % 4 authors: 5-6 are empty
+ %
+ "" 'aut5 :=
+ "" 'aut6 :=
+ }
+ if$
+ }
+ { %
+ % 3 authors: 4-6 are empty
+ %
+ "" 'aut4 :=
+ "" 'aut5 :=
+ "" 'aut6 :=
+ }
+ if$
+ }
+ { %
+ % 2 authors: 3-6 are empty
+ %
+ "" 'aut3 :=
+ "" 'aut4 :=
+ "" 'aut5 :=
+ "" 'aut6 :=
+ }
+ if$
+ }
+ { %
+ % Only 1 author: 2-6 are empty
+ %
+ "" 'aut2 :=
+ "" 'aut3 :=
+ "" 'aut4 :=
+ "" 'aut5 :=
+ "" 'aut6 :=
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {change.add.to.year}
+{
+ forward #1 =
+ { %
+ % Moving forward: this add.to.year number must be 1 higher than
+ % previous.
+ %
+ add.to.year.old #0 >
+ { add.to.year.old #1 + 'add.to.year := }
+ { #2 'add.to.year := }
+ if$
+ }
+ { %
+ % Moving backward: this add.to.year number must be 1 lower than
+ % previous.
+ %
+ add.to.year.old #1 - 'add.to.year :=
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.num.names.1.or.2}
+{ %
+ numnames numnames.old =
+ { %
+ % Same number of names: ambiguity could arise. Check whether current
+ % and previous have the same author(s).
+ %
+ aut1f aut1f.old =
+ { %
+ % Same first author: if the second author is also the same or if
+ % there is only one author, a's and b's should be added.
+ %
+ aut2 aut2.old =
+ numnames #2 =
+ and
+ %
+ numnames #1 =
+ or
+ { %
+ % Same author(s): add to year.
+ %
+ change.add.to.year
+ }
+ { %
+ % Different second author: no ambiguity possible.
+ %
+ skip$
+ }
+ if$
+ }
+ { %
+ % Different first author: no ambiguity possible.
+ %
+ skip$
+ }
+ if$
+ }
+ { %
+ % Different number of names: no ambiguity possible.
+ %
+ skip$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.num.names.3.or.more}
+{ %
+ % Check whether current and previous have the same first author.
+ %
+ aut1f aut1f.old =
+ { %
+ % Same first author: check second author
+ %
+ aut2 aut2.old =
+ { %
+ % Same 1st & 2nd author: check 3rd.
+ %
+ aut3 aut3.old =
+ { %
+ % Same 1st-3rd authors: check 4th.
+ %
+ numnames.old #3 =
+ { numnames #3 =
+ { %
+ % Both current and previous have 3 authors, which are
+ % the same, so both have identical author-year
+ % combinations, so ambiguity should be resolved by
+ % a's and b's. Check whether more authors were
+ % necessary for previous one.
+ %
+ change.add.to.year
+ cite.num.names.short cite.num.names.old <
+ { cite.num.names.old
+ 'cite.num.names.short :=
+ }
+ 'skip$
+ if$
+ }
+ { %
+ % Previous has 3 authors, current has more, with same
+ % first 3, so at least 4 must be used for current to
+ % make a difference.
+ %
+ cite.num.names.short #4 <
+ { #4 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { numnames #3 =
+ { %
+ % Current has 3 authors, previous has more, with same
+ % first 3, so all 3 of current must be used.
+ %
+ numnames 'cite.num.names.short :=
+ }
+ { %
+ % Same 1st-3rd author and both current and previous
+ % have at least 4 authors: check 4th.
+ %
+ aut4 aut4.old =
+ { %
+ % Same 1st-4th authors: check 5th.
+ %
+ numnames.old #4 =
+ { numnames #4 =
+ { %
+ % Both current and previous have 4 authors,
+ % which are the same, so both have
+ % identical author-year combinations, so
+ % ambiguity should be resolved by a's and
+ % b's. Check whether more authors were
+ % necessary for previous one.
+ %
+ change.add.to.year
+ cite.num.names.short cite.num.names.old <
+ { cite.num.names.old
+ 'cite.num.names.short :=
+ }
+ 'skip$
+ if$
+ }
+ { %
+ % Previous has 4 authors, current has more,
+ % with same first 4, so at least 5 must be
+ % used for current to make a difference.
+ %
+ cite.num.names.short #5 <
+ { #5 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { numnames #4 =
+ { %
+ % Current has 4 authors, previous has more,
+ % with same first 4, so all 4 of current
+ % must be used.
+ %
+ numnames 'cite.num.names.short :=
+ }
+ { %
+ % Same 1st-4th author and both current and
+ % previous have at least 5 authors: check
+ % 5th.
+ %
+ aut5 aut5.old =
+ { %
+ % Same 1st-5th authors: check 6th.
+ %
+ numnames.old #5 =
+ { numnames #5 =
+ { %
+ % Both current and previous
+ % have 5 authors, which are the
+ % same, so both have identical
+ % author-year combinations, so
+ % ambiguity should be resolved
+ % by a's and b's. Check whether
+ % more authors were necessary
+ % for previous one.
+ %
+ change.add.to.year
+ cite.num.names.short
+ cite.num.names.old <
+ { cite.num.names.old
+ 'cite.num.names.short :=
+ }
+ 'skip$
+ if$
+ }
+ { %
+ % Previous has 5 authors,
+ % current has more, with same
+ % first 5, so at least 6 must
+ % be used for current to make
+ % a difference.
+ %
+ cite.num.names.short #6 <
+ { #6 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { numnames #5 =
+ { %
+ % Current has 5 authors,
+ % previous has more, with same
+ % first 5, so all 5 of current
+ % must be used.
+ %
+ numnames 'cite.num.names.short :=
+ }
+ { %
+ % Same 1st-5th author and both
+ % current and previous have at
+ % least 6 authors. If one has
+ % 6 authors and the other has
+ % more or the 6th is different,
+ % 6 should be used (which is
+ % the maximum).
+ %
+ numnames #6 >
+ numnames.old #6 =
+ and
+ %
+ numnames #6 =
+ numnames.old #6 >
+ and
+ %
+ or
+ %
+ aut6 aut6.old =
+ not
+ %
+ or
+ { #6 cite.num.names.short <
+ { #6
+ 'cite.num.names.short
+ :=
+ }
+ 'skip$
+ if$
+ }
+ { %
+ % The first 6 authors are
+ % the same and either both
+ % have 6 or both have more.
+ % So for all practical
+ % purposes they have
+ % identical author-year
+ % combination, so ambiguity
+ % should be resolved by a's
+ % and b's. Check whether
+ % more authors were
+ % necessary for previous
+ % one.
+ %
+ change.add.to.year
+ cite.num.names.short
+ cite.num.names.old
+ <
+ { cite.num.names.old
+ 'cite.num.names.short
+ :=
+ }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { %
+ % Different 5th author: citing 5 authors is
+ % sufficient for this comparison.
+ %
+ cite.num.names.short #5 <
+ { #5 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { %
+ % Different 4th author: citing 4 authors is
+ % sufficient for this comparison.
+ %
+ cite.num.names.short #4 <
+ { #4 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { %
+ % Different 3rd author: citing 3 authors is sufficient for this
+ % comparison.
+ %
+ cite.num.names.short #3 <
+ { #3 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { %
+ % Different 2nd author: citing 2 authors is sufficient for this
+ % comparison.
+ %
+ cite.num.names.short #2 <
+ { #2 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ { %
+ % Different first author: no ambiguity, move to next entry.
+ %
+ skip$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.num.names.field}
+{ 'field :=
+ field num.names$ 'numnames :=
+ %
+ % Format authors
+ %
+ format.6.authors
+ %
+ % Now compare authors with authors of previous entry.
+ %
+ cite.num.names.short numnames.old >
+ { %
+ % The previous entry has less authors than already defined
+ % necessary to be cited. No ambiguity is possible and we're ready.
+ %
+ skip$
+ }
+ { %
+ % Both previous and current entry have at least one author .
+ %
+ year.label year.label.old =
+ { %
+ % Same year label: possibly ambiguous citation.
+ %
+ % First check: current and/or previous have 1 or
+ % 2 authors.
+ %
+ numnames #3 <
+ numnames.old #3 <
+ or
+ %
+ { definitive.cite.num.names.1.or.2 }
+ { definitive.cite.num.names.3.or.more }
+ if$
+ }
+ { %
+ % Different year label: everything's fine,
+ % move to next entry.
+ %
+ skip$
+ }
+ if$
+ }
+ if$
+ %
+ % If during the previous process the name maximum is exceeded
+ % (which was not checked), correct this. NOTE: If the name
+ % maximum is smaller than 6, this could lead to ambiguous
+ % citations if, e.g., the year and the first 5 authors are
+ % the same, but the 6th author is different.
+ %
+ cite.num.names.short name.max >
+ { name.max 'cite.num.names.short := }
+ 'skip$
+ if$
+ %
+ % For a "full" cite, the number of names should always be at least
+ % as large as for a "short" cite.
+ %
+ cite.num.names.full cite.num.names.short <
+ { cite.num.names.short 'cite.num.names.full := }
+ 'skip$
+ if$
+ %
+ % Update "old" variables for next entry.
+ %
+ update.cite.num.names
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.no.names}
+{ %
+ % The formatted field that acts as author is on top
+ % of the stack.
+ 'aut1f :=
+ "" 'aut2 :=
+ "" 'aut3 :=
+ "" 'aut4 :=
+ "" 'aut5 :=
+ "" 'aut6 :=
+ #1 'numnames :=
+ %
+ year.label year.label.old =
+ { %
+ % Same year label: possibly ambiguous citation.
+ %
+ definitive.cite.num.names.1.or.2
+ }
+ { %
+ % Different year label: everything's fine,
+ % move to next entry.
+ %
+ skip$
+ }
+ if$
+ %
+ % Update "old" variables for next entry.
+ %
+ update.cite.num.names
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {definitive.cite.num.names}
+{ %
+ % Check whether author or editor or other field acts as author.
+ % Number of names is only relevant with author or editor.
+ %
+ firstkey empty$ not
+ { firstkey sortify remove.spaces definitive.cite.no.names }
+ { key empty$ not
+ { key sortify remove.spaces definitive.cite.no.names }
+ { %
+ % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { %
+ % Format first author with and without initials
+ author empty$
+ { title.sort.label definitive.cite.no.names }
+ { author definitive.cite.num.names.field }
+ if$
+ }
+ { %
+ % Format first author with and without initials
+ author empty$
+ { editor empty$
+ { title.sort.label definitive.cite.no.names }
+ { editor definitive.cite.num.names.field }
+ if$
+ }
+ { author definitive.cite.num.names.field }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.tentative.year.sort.label}
+{ %
+ % Implicit or explicit ``no date'' is put at the front
+ % (the year zero; years B.C. will imply complications)
+ % because these are possibly old works.
+ % ``In press'' is put at the end.
+ %
+ year empty$
+ { "0000" 'year.label := }
+ { year "\bibnodate" =
+ year "n.d." =
+ or
+ { "0000" 'year.label := }
+ { year "\BIP" =
+ { "9999" 'year.label := }
+ { % It is not checked whether the year field
+ % makes sense.
+ year sortify remove.spaces 'year.label :=
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ %
+ % Push year sort label on the stack
+ year.label
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {month.number.day}
+{ month empty$
+ { "" }
+ { month sortify remove.spaces
+ %
+ % Add the day when available.
+ day empty$
+ 'skip$
+ { "/" *
+ day sortify remove.spaces *
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.name.sort.label}
+{ %
+ % Author or editor-acting-as-author available.
+ % => Make tentative "short cite with initials" author
+ % label (L1) of one of the forms
+ % "Last1 F1"
+ % "Last1 F1 Last2"
+ % "Last1 F1 zzzz" ("zzzz" representing et al.)
+ % => If more than 2 'authors': make label (L2) for 2nd-6th authors
+ % of one of the forms
+ % "Last2 Last3"
+ % "Last2 Last3 Last4"
+ % "Last2 Last3 Last4 Last5"
+ % "Last2 Last3 Last4 Last5 Last6"
+ % "Last2 Last3 Last4 Last5 Last6 zzzz"
+ %
+ % Then format year label (L3) of one of the forms:
+ % "0000" (missing year or explicit 'no date')
+ % "9999" ('in press')
+ % year (otherwise; don't use originalyear here yet)
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L4) .
+ %
+ % Then tentative sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L3
+ % " "
+ % L2
+ % " "
+ % L4
+ %
+ % The name field is on top of the stack.
+ 'field :=
+ %
+ % numnames is the total number of names contained in field
+ field num.names$ 'numnames :=
+ %
+ % Format first author
+ field #1 sort.name.format format.name$
+ %
+ % Format the second author if there are two, or else "zzzz" = et al.
+ numnames #1 =
+ 'skip$
+ { numnames #2 =
+ { %
+ % Two authors: format second author
+ field #2 "{ll{}}" format.name$ 's :=
+ s "others" =
+ { " zzzz" * } % Add "et al."-substitute
+ { " " * s * } % Add second author
+ if$
+ }
+ { " zzzz" * } % 3 or more authors: add "et al."-substitute
+ if$
+ }
+ if$
+ " " * % Add spaces
+ make.tentative.year.sort.label * % Add year (L3).
+ " " * % Add spaces
+ %
+ % Now build up L2 if applicable
+ numnames #3 <
+ 'skip$
+ { %
+ % Treat last author slightly differently
+ numnames name.max >
+ { name.max 'lastname :=
+ " zzzz" % Push "et al."-substitute on stack
+ }
+ { numnames 'lastname :=
+ "" % Push empty string on stack
+ }
+ if$
+ %
+ % Names 2 to "last" - 1
+ "" % Push empty string on stack
+ #2 'nameptr :=
+ { nameptr lastname < }
+ { % Add name no. nameptr
+ field nameptr "{ll{}}" format.name$ *
+ " " *
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ %
+ % "Last" author
+ field lastname "{ll{}}" format.name$ 's :=
+ s "others" =
+ { "zzzz" * } % Add "et al."-substitute
+ { s * } % Add last author
+ if$
+ %
+ swap$ * % Add the previously formatted empty string or
+ % "et al."-substitute if there are many authors.
+ * % Add L2 to the earlier labels.
+ }
+ if$
+ %
+ " " * % Add spaces
+ title.number conv.int.to.str * % Add sorted title number (L4).
+ sortify % Clean up and convert to lowercase
+ " " * % Add spaces
+ month.number.day * % Add month and day when available
+ 'author.year.sort.label := % Assign result to sort label.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.field.year.sort.label}
+{ %
+ % 'field' acts as first author (L1), subsequent authors
+ % are empty (L2).
+ %
+ % Then format year label (L3) of one of the forms:
+ % "0000" (missing year or explicit 'no date')
+ % "9999" ('in press')
+ % year (otherwise; don't use originalyear here yet)
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L4) .
+ %
+ % Then tentative sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L3
+ % " "
+ % L2
+ % " "
+ % L4
+ %
+ % 'field' is on top of the stack. It is already supposed to be cleaned
+ % (i.e., sortified and space-removed), so this is already L1.
+ " " * % Add spaces to L1
+ make.tentative.year.sort.label * % Add year (L3).
+ " " * % Add spaces
+ " " * % L2 is empty, add spaces
+ title.number conv.int.to.str * % Add sorted title number (L4).
+ sortify % Clean up and convert to lowercase
+ " " * % Add spaces
+ month.number.day * % Add month and day when available
+ 'author.year.sort.label := % Assign result to sort label.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.author.editor.sort.label}
+{ author empty$
+ { editor empty$
+ { %
+ % Use what has previously been stored in title.sort.label
+ % as author substitute .
+ title.sort.label make.field.year.sort.label
+ }
+ { editor make.name.sort.label }
+ if$
+ }
+ { author make.name.sort.label }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.author.sort.label}
+{ author empty$
+ { %
+ % Use what has previously been stored in title.sort.label
+ % as author substitute .
+ title.sort.label make.field.year.sort.label
+ }
+ { author make.name.sort.label }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.tentative.sort.label}
+{ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % General strategy:
+ %
+ % Ordinary situation: author or editor-acting-as-author
+ % available.
+ % => Make tentative "short cite with initials" author
+ % label (L1) of one of the forms
+ % "Last1 F1"
+ % "Last1 F1 Last2"
+ % "Last1 F1 zzzz" ("zzzz" representing et al.)
+ % => If more than 2 'authors': make label (L2) for 2nd-6th authors
+ % of one of the forms
+ % "Last2 Last3"
+ % "Last2 Last3 Last4"
+ % "Last2 Last3 Last4 Last5"
+ % "Last2 Last3 Last4 Last5 Last6"
+ % "Last2 Last3 Last4 Last5 Last6 zzzz"
+ % When key is available (overrules author and editor fields):
+ % => L1 = key, L2 = ""
+ % No author, editor, and key: define title or substitute as key
+ % and format as key.
+ %
+ % Then format year label (L3) of one of the forms:
+ % "0000" (missing year or explicit 'no date')
+ % "9999" ('in press')
+ % year (otherwise; don't use originalyear here yet)
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L4) .
+ %
+ % Then tentative sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L3
+ % " "
+ % L2
+ % " "
+ % L4
+ %
+ % This can then be sorted, from which it can be derived
+ % whether initials are necessary, how many names must
+ % be used for short and full citations, and whether "a"'s and
+ % "b"'s etc. are necessary behind the year labels.
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % key and firstkey overrule author information
+ %
+ firstkey empty$ not
+ { key empty$ not
+ { %
+ % Both key and firstkey available:
+ % for sorting and checking initials, treat key as last
+ % name and firstkey as initials.
+ %
+ key sortify remove.spaces
+ " " *
+ firstkey sortify remove.spaces *
+ make.field.year.sort.label
+ }
+ { firstkey sortify remove.spaces make.field.year.sort.label }
+ if$
+ }
+ { key empty$ not
+ { key sortify remove.spaces make.field.year.sort.label }
+ { %
+ % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type
+ duplicate$ #1 =
+ { pop$
+ make.author.editor.sort.label
+ }
+ { duplicate$ #2 =
+ { pop$
+ make.author.sort.label
+ }
+ { #3 =
+ { "no key in " cite$ * warning$
+ make.author.editor.sort.label
+ }
+ { make.author.editor.sort.label }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ %
+ author.year.sort.label 'sort.key$ :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.name.sort.label}
+{ %
+ % Author or editor-acting-as-author available.
+ % => Make author-with-initials label (L1) of one of the forms
+ % "Last1 F1 Last2 F2 ... LastN FN"
+ % "Last1 F1 Last2 F2 ... Last6 F6 zzzz"
+ % (where N <= 6 is the total number of authors, and
+ % "zzzz" represents et al. if there are more than 6 authors)
+ % No author, editor, and key: define title or substitute as sort key.
+ %
+ % The name field is on top of the stack.
+ 'field :=
+ %
+ % numnames is the total number of names contained in field
+ field num.names$ 'numnames :=
+ %
+ % If there are more than 6 authors, only 6 are mentioned.
+ numnames name.max >
+ { name.max 'format.num.names := }
+ { numnames 'format.num.names := }
+ if$
+ % Initialize stack with empty string
+ ""
+ %
+ % Cycle over authors.
+ #1 'nameptr :=
+ { nameptr format.num.names < }
+ { % Format author and add spaces
+ field nameptr sort.name.format format.name$ *
+ " " *
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ % Format last author that must be formatted
+ field nameptr sort.name.format format.name$ *
+ % Add et al. if necessary
+ nameptr numnames <
+ { " zzzz" * }
+ 'skip$
+ if$
+ sortify % Clean up and change case
+ " " * % Add spaces
+ year.label * % Add year
+ " " * % Add spaces
+ title.number conv.int.to.str * % Add sorted title number
+ " " * % Add spaces
+ month.number.day * % Add month and day when available
+ 'author.year.sort.label := % Assign result to sort label.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.field.year.sort.label}
+{ %
+ % 'field' acts as author (L1).
+ %
+ % Then format year label (L2) of one of the forms:
+ % "0000" (missing year or explicit `no date')
+ % "9999" (`in press')
+ % year (otherwise; don't use originalyear here yet)
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L3) .
+ %
+ % Then tentative sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L2
+ % " "
+ % L3
+ %
+ % 'field' is on top of the stack. It is already supposed to be cleaned
+ % (i.e., sortified and space-removed), so this is already L1.
+ " " * % Add spaces
+ year.label * % Add year
+ " " * % Add spaces
+ title.number conv.int.to.str * % Add sorted title number
+ " " * % Add spaces
+ month.number.day * % Add month and day when available
+ 'author.year.sort.label := % Assign result to sort label.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.author.editor.sort.label}
+{ author empty$
+ { editor empty$
+ { %
+ % Use what has previously been stored in title.sort.label
+ % as author substitute .
+ title.sort.label make.definitive.field.year.sort.label
+ }
+ { editor make.definitive.name.sort.label }
+ if$
+ }
+ { author make.definitive.name.sort.label }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.author.sort.label}
+{ author empty$
+ { %
+ % Use what has previously been stored in title.sort.label
+ % as author substitute .
+ title.sort.label make.definitive.field.year.sort.label
+ }
+ { author make.definitive.name.sort.label }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.final.sort.key}
+{ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % General strategy:
+ %
+ % Ordinary situation: author or editor-acting-as-author
+ % available.
+ % => Make author-with-initials label (L1) of one of the forms
+ % "Last1 F1 Last2 F2 ... LastN FN"
+ % "Last1 F1 Last2 F2 ... Last6 F6 zzzz"
+ % (where N <= 6 is the total number of authors, and
+ % "zzzz" represents et al. if there are more than 6 authors)
+ % No author, editor, and key: define title or substitute as sort key.
+ %
+ % Then format year label (L2) of one of the forms:
+ % "0000" (missing year or explicit `no date')
+ % "9999" (`in press')
+ % year (otherwise; don't use originalyear here yet)
+ % Add "/"month"/"day to the latter when available.
+ %
+ % From earlier sorting of titles, we have title number. Convert
+ % to string, which gives title label (L3) .
+ %
+ % Then final sorting label (author.year.sort.label) is a
+ % concatenation of
+ % L1
+ % " "
+ % L2
+ % " "
+ % L3
+ %
+ % This can then be sorted.
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ %
+ % Find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { make.definitive.author.sort.label }
+ { make.definitive.author.editor.sort.label }
+ if$
+ %
+ author.year.sort.label 'sort.key$ :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ { s }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {chop.articles}
+{ 's :=
+ "a " #2
+ "an " #3
+ "the " #4
+ s
+ chop.word
+ chop.word
+ chop.word
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.sort.title}
+{ %
+ % Remove non-alphanumeric characters and change to lower case .
+ sortify
+ %
+ % Remove "a ", "an ", and "the " from the front .
+ chop.articles #1 entry.max$ substring$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.sort.title}
+{ title empty$
+ { text empty$
+ { type empty$
+ { howpublished empty$
+ { note empty$
+ { url empty$
+ { " " }
+ { url format.sort.title }
+ if$
+ }
+ { note format.sort.title }
+ if$
+ }
+ { howpublished format.sort.title }
+ if$
+ }
+ { type format.sort.title }
+ if$
+ }
+ { text format.sort.title }
+ if$
+ }
+ { title format.sort.title }
+ if$
+ remove.spaces
+ 'title.sort.label :=
+ title.sort.label 'sort.key$ :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.title.number}
+{ title.sort.label old.label =
+ { %
+ % A tie: old and new label are the same .
+ old.number 'title.number :=
+ }
+ { %
+ % The usual situation: titles are different.
+ old.number #1 + 'title.number :=
+ title.number 'old.number :=
+ title.sort.label 'old.label :=
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+FUNCTION {last.part.name.format} { "{ll}" }
+
+FUNCTION {initials.with.space.name.format} { "{f.}" }
+
+FUNCTION {von.last.junior.name.format} { "{vv }{ll}{ jj}" }
+
+FUNCTION {von.junior.name.format} { "{ vv}{, jj}" }
+
+FUNCTION {one.complete.name.format} { "{vv }{ll}{, jj}{, ff}" }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {string.length}
+{ #0 'pos :=
+ % If the next character exists, i.e., is not empty,
+ % add 1 to the string length.
+ % We cannot use empty$ because " " empty$ is true.
+ { duplicate$ pos #1 + #1 substring$ "" = not }
+ { pos #1 + 'pos := }
+ while$
+ pop$ pos
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {transform.spaces.and.hyphens}
+{ 's := % The original string
+ s string.length 'len := % Its length (no. of characters)
+ "" 't := % Initialize the transformed string
+ #1 'pos :=
+ #0 'brace.level :=
+ %
+ % while (pos < len) do
+ %
+ { pos len < }
+ { % First, check whether we are at brace level 0
+ brace.level #0 =
+ {
+ % At least two characters left: check for ". ", ".~", and ".-".
+ % If so, replace and shift two positions.
+ s pos #2 substring$ ". " =
+ s pos #2 substring$ ".~" = or
+ { t "\BPBI " * 't :=
+ pos #2 + 'pos :=
+ }
+ { s pos #2 substring$ ".-" =
+ { t "\BHBI " * 't :=
+ pos #2 + 'pos :=
+ }
+ { % neither is true, copy one character and shift one position
+ t s pos #1 substring$ * 't :=
+ % Check whether we need to increase brace level.
+ % Note that this is not sophisticated: it does not capture
+ % \{, \verb+}+, etc.
+ % Note also that unbalanced braces cause problems.
+ s pos #1 substring$ "{" =
+ { brace.level #1 + 'brace.level := }
+ 'skip$
+ if$
+ pos #1 + 'pos :=
+ }
+ if$
+ }
+ if$
+ }
+ { % Not at brace level 0: copy result literally
+ t s pos #1 substring$ * 't :=
+ % Check whether we need to increase or decrease brace level.
+ % Note that this is not sophisticated: it does not capture
+ % \{, \verb+}+, etc.
+ s pos #1 substring$ "{" =
+ { brace.level #1 + 'brace.level := }
+ { s pos #1 substring$ "}" =
+ { brace.level #1 - 'brace.level := }
+ 'skip$
+ if$
+ }
+ if$
+ pos #1 + 'pos :=
+ }
+ if$
+ }
+ while$
+ %
+ pos len =
+ { % Last character, copy
+ t s pos #1 substring$ * 't :=
+ }
+ { % pos = len + 1, so s ends with ". " or ".-"
+ % This should not have happened, but make the best out of it.
+ % Push last two characters of s on the stack, i.e., ". " or ".-".
+ s len #1 - #2 substring$
+ % Remove "\BPBI " or "\BHBI " from t
+ t text.length$ 'len := % Length of t (no. of characters)
+ t #1 len #6 - substring$
+ % Concatenate and assign to t
+ swap$ * 't :=
+ }
+ if$
+ %
+ % Now push the result back on the stack
+ t
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.initials.with.hyphen}
+{ % Format initials.
+ % Call with
+ % field authornumber format.initials.with.hyphen
+ % e.g.
+ % author #1 format.initials.with.hyphen
+ % Instead of field, a string may also be used.
+ %
+ % First, format initials in the default way, retaining spaces
+ % and hyphens.
+ initials.with.space.name.format format.name$
+ transform.spaces.and.hyphens
+}
+
+FUNCTION {format.last.part.name}
+{ % Format a name with last.part.name.format,
+ % as part of more complicated things.
+ % Call with
+ % field authornumber format.last.part.name
+ % e.g.
+ % author #1 format.last.part.name
+ % Instead of field, a string may also be used.
+ last.part.name.format format.name$
+}
+
+FUNCTION {format.von.last.junior.name}
+{ % Format a name with von.last.junior.name.format,
+ % for citing or as part of more complicated things.
+ % Call with
+ % field authornumber format.von.last.junior.name
+ % e.g.
+ % author #1 format.von.last.junior.name
+ % Instead of field, a string may also be used.
+ von.last.junior.name.format format.name$
+}
+
+FUNCTION {format.von.junior.name}
+{ % Format a name with von.last.junior.name.format,
+ % for citing or as part of more complicated things.
+ % Call with
+ % field authornumber format.von.junior.name
+ % e.g.
+ % author #1 format.von.junior.name
+ % Instead of field, a string may also be used.
+ von.junior.name.format format.name$
+}
+
+FUNCTION {format.cite.initials.name}
+{ % Format a name for citing with initials.
+ % Call with
+ % field authornumber format.cite.initials.name
+ % e.g.
+ % author #1 format.cite.initials.name
+ % Instead of field, a string may also be used.
+ %
+ % First, extract the complete name, format it in the canonical form,
+ % and push on the stack.
+ one.complete.name.format format.name$
+ %
+ % Format the initials and push on the stack.
+ duplicate$ #1 format.initials.with.hyphen
+ %
+ % Format the von-last-junior part and push on the stack.
+ swap$ #1 format.von.last.junior.name
+ %
+ % Connect with "~" hyphen (if they're both non-empty).
+ "~" connect.check
+}
+
+FUNCTION {format.author.name}
+{ % Format an author name for the reference list.
+ % Call with
+ % field authornumber format.author.name
+ % e.g.
+ % author #1 format.author.name
+ % Instead of field, a string may also be used.
+ %
+ % First, extract the complete name, format it in the canonical form,
+ % and push on the stack.
+ one.complete.name.format format.name$
+ %
+ % Make two copies of the name, format the last name and push on the stack.
+ duplicate$ duplicate$ #1 format.last.part.name
+ %
+ % Format the initials and push on the stack.
+ swap$ #1 format.initials.with.hyphen
+ %
+ % Connect with last name.
+ connect.with.comma.check
+ %
+ % Format the von-junior part and connect with initials.
+ swap$ #1 format.von.junior.name "" connect.check
+}
+
+FUNCTION {format.editor.name}
+{ % Format a name for the reference list as an editor.
+ % Call with
+ % field authornumber format.editor.name
+ % e.g.
+ % author #1 format.editor.name
+ % Instead of field, a string may also be used.
+ %
+ format.cite.initials.name
+}
+
+FUNCTION {format.index.name}
+{ % Format an author name for the index.
+ % Call with
+ % field authornumber format.index.name
+ % e.g.
+ % author #1 format.index.name
+ % Instead of field, a string may also be used.
+ %
+ format.author.name
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {comma.between.two} { "\BCBT{}" }
+
+FUNCTION {comma.between.names} { ", " }
+
+FUNCTION {comma.before.last} { "\BCBL{}" }
+
+FUNCTION {and.before.last} { "\ \BBA{} " }
+
+FUNCTION {et.al.string.cite} { "\ \protect\BOthers{.}" }
+
+FUNCTION {et.al.string} { "\ \BOthers{.}" }
+
+FUNCTION {et.al.string.period} { "\ \BOthersPeriod{.}" }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {add.name.index}
+{ %
+ %
+ make.index
+ { "%" * write$ newline$
+ % Check for corporate author
+ field is.bibcorporate
+ { "\corporateAX{" }
+ { "\AX{" }
+ if$
+ write$
+ field nameptr sort.name.format format.name$ sortify write$ newline$
+ "@" write$
+ field nameptr format.index.name
+ "}%" * write$ newline$
+ }
+ { "%" * write$ newline$ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.name.cite.label}
+{ 'field :=
+ 'format.num.names :=
+ %
+ field num.names$ 'numnames := % numnames is the total number of names
+ % contained in field
+ %
+ % It is implicit in the APA manual that if "et al." would refer
+ % to exactly one author, then this author should be named
+ % instead of "et al."
+ %
+ format.num.names numnames #1 - =
+ { numnames 'format.num.names := }
+ 'skip$
+ if$
+ %
+ % Format first author: with or without initials
+ %
+ #1 'nameptr :=
+ cite.initials #1 =
+ { field nameptr format.cite.initials.name }
+ { field nameptr cite.name.format format.name$ }
+ if$
+ add.name.index % Add index entry when desired.
+ %
+ numnames #1 =
+ 'skip$
+ { format.num.names #1 =
+ { %
+ % First author et al.
+ %
+ et.al.string.cite write$
+ }
+ { numnames #2 =
+ { %
+ % Given that format.num.names > 1, it is 2.
+ % Format second author.
+ %
+ #2 'nameptr :=
+ field nameptr cite.name.format format.name$ 's :=
+ %
+ % Check if 2nd author is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { et.al.string.cite write$ } % First et al.
+ { %
+ % First \& Second
+ %
+ and.before.last write$
+ s
+ add.name.index % Add index entry when desired.
+ }
+ if$
+ }
+ { %
+ % 3 or more names, 2 or more must be cited
+ %
+ % for nameptr := 2 to format.num.names - 1 do
+ %
+ #2 'nameptr :=
+ { nameptr format.num.names < }
+ { %
+ % Put comma between consecutive authors
+ %
+ comma.between.names write$
+ %
+ % Format and add next author
+ %
+ field nameptr cite.name.format format.name$
+ add.name.index % Add index entry when desired.
+ %
+ % Move to next author
+ %
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ %
+ % nameptr = format.num.names
+ % Format this author.
+ %
+ field nameptr cite.name.format format.name$ 's :=
+ %
+ format.num.names numnames =
+ { %
+ % This is also the last author. Add (optional) comma.
+ %
+ comma.before.last write$
+ %
+ % Check if this author is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { et.al.string.cite write$ }
+ { and.before.last write$
+ s
+ add.name.index % Add index entry when desired.
+ }
+ if$
+ }
+ { %
+ % This is not the last author.
+ % Add comma, author name, and "et al."
+ %
+ comma.between.names write$
+ s
+ add.name.index % Add index entry when desired.
+ %
+ comma.before.last et.al.string.cite * write$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.title.cite.label}
+{ %
+ % Formatting: check if formatted as article title or
+ % as book title, and insert this formatting.
+ %
+ is.atype
+ { "\APACciteatitle{" }
+ { "\APACcitebtitle{" }
+ if$
+ %
+ title empty$
+ { text empty$
+ { type empty$
+ { howpublished empty$
+ { note empty$
+ { url empty$
+ { cite$ }
+ { url }
+ if$
+ }
+ { note }
+ if$
+ }
+ { howpublished }
+ if$
+ }
+ { type }
+ if$
+ }
+ { text }
+ if$
+ }
+ { title }
+ if$
+ %
+ % Connect with formatting.
+ %
+ * "}" *
+ %
+ % Write to output
+ %
+ write$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.author.editor.cite.label}
+{ author empty$
+ { editor empty$
+ { %
+ % No author or editor:
+ % Use title or other description as citation label.
+ %
+ make.title.cite.label
+ "}{%" write$ newline$
+ make.title.cite.label
+ }
+ { cite.num.names.full editor make.name.cite.label
+ "}{%" write$ newline$
+ cite.num.names.short editor make.name.cite.label
+ }
+ if$
+ }
+ { cite.num.names.full author make.name.cite.label
+ "}{%" write$ newline$
+ cite.num.names.short author make.name.cite.label
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.author.cite.label}
+{ author empty$
+ { %
+ % No author:
+ % Use title or other description as citation label.
+ %
+ make.title.cite.label
+ "}{%" write$ newline$
+ make.title.cite.label
+ }
+ { cite.num.names.full author make.name.cite.label
+ "}{%" write$ newline$
+ cite.num.names.short author make.name.cite.label
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.year.supplement}
+{ %
+ % Add "a", "b", etc. when necessary.
+ %
+ add.to.year #0 =
+ { "" }
+ { "{\protect"
+ year empty$
+ { "\BCntND" * }
+ { year "\bibnodate" =
+ { "\BCntND" * }
+ { year "\BIP" =
+ { "\BCntIP" * }
+ { "\BCnt" * }
+ if$
+ }
+ if$
+ }
+ if$
+ "{" * add.to.year int.to.str$ * "}}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {protect.year}
+{ year empty$
+ { "{\protect\bibnodate{}}" }
+ { year "\bibnodate" =
+ { "{\protect\bibnodate{}}" }
+ { year "\BIP" =
+ { "{\protect\BIP{}}" }
+ { year }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.definitive.year.label}
+{ "{\protect\APACyear{"
+ originalyear empty$
+ { protect.year }
+ { originalyear "\bibnodate" = % date of original publication unknown
+ { translator empty$
+ { protect.year }
+ { year empty$
+ { "{\protect\BTRANSL{}~\protect\bibnodate{}}" } % trans. n.d.
+ { "{\protect\BTRANSL{}}~" protect.year * } % trans. 1931
+ if$
+ }
+ if$
+ }
+ { year empty$
+ { originalyear "/{\protect\bibnodate{}}" * } % 1923/n.d.
+ { originalyear year =
+ { protect.year }
+ { originalyear "/" * protect.year * } % 1923/1961
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ * "}}%" * write$ newline$
+ %
+ % Add "a", "b", etc. when necessary.
+ %
+ "{\protect\APACexlab{" "}}"
+ make.definitive.year.supplement enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {make.cite.labels}
+{ newline$
+ %
+ % Write a few lines for testing purposes.
+ %
+ test
+ { "\bibitem[]{} \fullciteA{" cite$ * "}" * write$ newline$
+ "\bibitem[]{} \citeA{" cite$ * "}" * write$ newline$
+ }
+ 'skip$
+ if$
+ %
+ "\bibitem[\protect\citeauthoryear{%" write$ newline$
+ %
+ % When key or firstkey is available, this takes precedence.
+ %
+ firstkey empty$ not
+ { %
+ % Full cite: firstkey.
+ %
+ firstkey write$
+ "}{%" write$ newline$
+ %
+ % Short cite: if key is not empty and cite.initials is 0,
+ % then key, else firstkey.
+ %
+ cite.initials #0 =
+ key empty$ not
+ and
+ { key }
+ { firstkey }
+ if$
+ write$
+ }
+ { key empty$ not
+ { %
+ % No firstkey, but key available:
+ % Both full and short labels are key.
+ %
+ key write$
+ "}{%" write$ newline$
+ key write$
+ }
+ { % No key or firstkey, so find out which field
+ % to use as author.
+ %
+ % Check reference type:
+ % if result is 1 then possibly editor acts as author
+ % 2 then editor does not act as author
+ % 3 then key should have been used
+ % 0 then unknown reference type
+ ref.type #2 =
+ { make.author.cite.label }
+ { make.author.editor.cite.label }
+ if$
+ }
+ if$
+ }
+ if$
+ "}{%" write$ newline$
+ %
+ % Make year label that's used for citations
+ %
+ make.definitive.year.label write$
+ "}]{%" write$ newline$
+ cite$ write$
+ "}%" write$ newline$
+ % author.year.sort.label write$ newline$ % for testing purposes
+ % year.label write$ newline$ % for testing purposes
+ %
+ % If the item is used in a meta-analysis, indicate this with
+ % a star.
+ %
+ "\APACinsertmetastar{%" write$ newline$
+ cite$ write$
+ "}%" write$ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {editor.postfix}
+{ editor num.names$ #1 >
+ { "(\BEDS)" }
+ { "(\BED)" }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {editor.trans.postfix}
+{ editor num.names$ #1 >
+ { "(\BEDS{} \BAnd{} \BTRANSS)" }
+ { "(\BED{} \BAnd{} \BTRANS)" }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % "(Trans.)" postfix
+ % translator must not be empty
+ %
+FUNCTION {trans.postfix}
+{ translator num.names$ #1 >
+ { "(\BTRANSS)" }
+ { "(\BTRANS)" }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.author.names}
+{ 'field :=
+ 'dot :=
+ %
+ field num.names$ 'numnames := % numnames is the total number of names
+ % contained in field
+ numnames 'format.num.names := % Format all authors
+ format.num.names name.max > % Unless this exceeds the maximum of 6.
+ { dot
+ { name.max 'format.num.names := } % Format 6 authors
+ { cite.num.names.full 'format.num.names := } % Format 1 editor
+ if$
+ }
+ 'skip$
+ if$
+ %
+ % It is kind of explicit in the APA manual that if "et al." would
+ % refer to exactly one author (the 7th), then this author should
+ % still be replaced by "et al.", unlike with citations.
+ % So format.num.names is not adapted.
+ %
+ % Format first author
+ %
+ #1 'nameptr :=
+ field nameptr format.author.name
+ %
+ % Add period if required and if this is the only author.
+ %
+ numnames #1 =
+ dot
+ and
+ { add.period$ }
+ 'skip$
+ if$
+ add.name.index % Add index entry when desired.
+ %
+ numnames #1 =
+ 'skip$
+ { format.num.names #1 =
+ { %
+ % First author et al.
+ %
+ comma.between.two
+ %
+ % Add period if required.
+ %
+ dot
+ { et.al.string.period * }
+ { et.al.string * }
+ if$
+ write$
+ }
+ { numnames #2 =
+ { %
+ % Given that format.num.names > 1, it is 2.
+ %
+ comma.between.two write$
+ %
+ % Format second author.
+ %
+ #2 'nameptr :=
+ field nameptr format.author.name 's :=
+ %
+ % Check if 2nd author is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { %
+ % First et al.
+ % Add period if required.
+ %
+ dot
+ { et.al.string.period }
+ { et.al.string }
+ if$
+ write$
+ }
+ { %
+ % First \& Second
+ %
+ and.before.last write$
+ %
+ % Add period if required.
+ %
+ dot
+ { s add.period$ }
+ { s }
+ if$
+ add.name.index % Add index entry when desired.
+ }
+ if$
+ }
+ { %
+ % 3 or more names, 2 or more must be cited
+ %
+ % for nameptr := 2 to format.num.names - 1 do
+ %
+ #2 'nameptr :=
+ { nameptr format.num.names < }
+ { %
+ % Put comma between consecutive authors
+ %
+ comma.between.names write$
+ %
+ % Format and add next author
+ %
+ field nameptr format.author.name
+ add.name.index % Add index entry when desired.
+ %
+ % Move to next author
+ %
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ %
+ % nameptr = format.num.names
+ % Format this author.
+ %
+ field nameptr format.author.name 's :=
+ %
+ format.num.names numnames =
+ { %
+ % This is also the last author. Add (optional) comma.
+ %
+ comma.before.last write$
+ %
+ % Check if this author is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { %
+ % Add period if required.
+ %
+ dot
+ { et.al.string.period }
+ { et.al.string }
+ if$
+ write$
+ }
+ { and.before.last write$
+ %
+ % Add period if required.
+ %
+ dot
+ { s add.period$ }
+ { s }
+ if$
+ add.name.index % Add index entry when desired.
+ }
+ if$
+ }
+ { %
+ % This is not the last author.
+ % Add comma, author name, and "et al."
+ %
+ comma.between.names write$
+ s
+ add.name.index % Add index entry when desired.
+ %
+ comma.before.last
+ %
+ % Add period if required.
+ %
+ dot
+ { et.al.string.period * }
+ { et.al.string * }
+ if$
+ write$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.authors}
+{ #1 author format.author.names
+ "%" write$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.editors.as.authors}
+{ #0 editor format.author.names
+ "\ " editor.postfix * add.period$ write$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.ed.trans.as.authors}
+{ #0 editor format.author.names
+ "\ " editor.trans.postfix * add.period$ write$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.editor.names}
+{ 'field :=
+ %
+ field num.names$ 'numnames := % numnames is the total number of names
+ % contained in field
+ numnames 'format.num.names := % Format all authors
+ format.num.names name.max > % Unless this exceeds the maximum of 6.
+ { #1 'format.num.names := } % Then it becomes 1 (First et al.)
+ 'skip$
+ if$
+ %
+ % Format first editor
+ %
+ field #1 format.editor.name
+ %
+ numnames #1 =
+ 'skip$
+ { format.num.names #1 =
+ { et.al.string * } % First editor et al., no comma.
+ { numnames #2 =
+ { %
+ % Given that format.num.names > 1, it is 2.
+ % No comma. Format second editor.
+ %
+ field #2 format.editor.name 's :=
+ %
+ % Check if 2nd editor is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { et.al.string * } % First et al.
+ { and.before.last * s * } % First \& Second
+ if$
+ }
+ { %
+ % 3 or more names, 2 or more must be cited
+ %
+ % for nameptr := 2 to format.num.names - 1 do
+ %
+ #2 'nameptr :=
+ { nameptr format.num.names < }
+ { %
+ % Put comma between consecutive editors
+ %
+ comma.between.names *
+ %
+ % Format and add next editor
+ %
+ field nameptr format.editor.name *
+ %
+ % Move to next editor
+ %
+ nameptr #1 + 'nameptr :=
+ }
+ while$
+ %
+ % nameptr = format.num.names
+ % Format this editor.
+ %
+ field nameptr format.editor.name 's :=
+ %
+ format.num.names numnames =
+ { %
+ % This is also the last editor. Add (optional) comma.
+ %
+ comma.before.last *
+ %
+ % Check if this editor is explicit "others".
+ % If so, insert "et al." string.
+ %
+ s "others" =
+ { et.al.string * }
+ { and.before.last * s * }
+ if$
+ }
+ { %
+ % This is not the last editor.
+ % Add comma, editor name, and "et al."
+ %
+ comma.between.names * s *
+ comma.before.last * et.al.string *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format editors in case editors do not act as authors
+ % (such as reference to chapter in edited book)
+ %
+ % L. W. Poon (Ed.) (1 editor)
+ % or
+ % A. S. Gurman \& D. P. Kniskern (Eds.) (2 editors)
+ % or
+ % L. Poon, A. Jones, \& D. P. Smith (Eds.) (>2 editors)
+ %
+ % editor must not be empty
+ %
+FUNCTION {format.editors.in.line}
+{ editor format.editor.names
+ editor.postfix connect.with.space.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format editors in case editors are also translators
+ % and do not act as authors
+ % (such as reference to chapter in edited book
+ % of translated articles)
+ %
+ % L. W. Poon (Ed. and Trans.) (1 editor)
+ % or
+ % A. S. Gurman \& D. P. Kniskern (Eds. and Trans.) (2 editors)
+ % or
+ % L. Poon, A. Jones, \& D. P. Smith (Eds. and Trans.) (>2 editors)
+ %
+ % editor must not be empty
+ %
+FUNCTION {format.editors.trans.in.line}
+{ editor format.editor.names
+ editor.trans.postfix connect.with.space.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format translators in case translators act as editors
+ % (such as reference to chapter in translated book)
+ %
+ % L. W. Poon (Trans.) (1 translator)
+ % or
+ % A. S. Gurman \& D. P. Kniskern (Trans.) (2 translators)
+ % or
+ % L. Poon, A. Jones, \& D. P. Smith (Trans.) (>2 translators)
+ %
+ % translator must not be empty
+ %
+FUNCTION {format.translators.in.line}
+{ translator format.editor.names
+ trans.postfix connect.with.space.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format translators in case translator does not act as editor
+ % (such as reference to translated book)
+ %
+ % L. Solotaroff, Trans.
+ %
+FUNCTION {format.translators.in.paren.check}
+{ translator empty$
+ { "" }
+ { translator format.editor.names
+ translator num.names$ #1 >
+ { ", \BTRANSS{}" * }
+ { ", \BTRANS{}" * }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format editors and translators in case neither act as editor
+ % (such as reference to edited or translated book with a
+ % a single author)
+ %
+ % L. Solotaroff, Ed.
+ % L. Solotaroff, Ed. \& Trans.
+ % L. Solotaroff, Trans.
+ % L. Solotaroff, Ed. \& S. Prokofieff, Trans.
+ %
+FUNCTION {format.editors.translators.in.paren.check}
+{ editor empty$
+ { translator empty$
+ { "" }
+ { translator format.editor.names
+ translator num.names$ #1 >
+ { ", \BTRANSS{}" * }
+ { ", \BTRANS{}" * }
+ if$
+ }
+ if$
+ }
+ { editor format.editor.names
+ editor num.names$ #1 >
+ { ", \BEDS{}" * }
+ { ", \BED{}" * }
+ if$
+ translator empty$
+ 'skip$
+ { editor translator =
+ { editor num.names$ #1 >
+ { " \BAnd{} \BTRANSS" * }
+ { " \BAnd{} \BTRANS" * }
+ if$
+ }
+ { " \BAnd{} " *
+ translator format.editor.names *
+ translator num.names$ #1 >
+ { ", \BTRANSS{}" * }
+ { ", \BTRANS{}" * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % translator of article
+ %
+FUNCTION {format.atrans.check}
+{ format.translators.in.paren.check parenthesize.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format "In editor (Ed.), "
+ %
+FUNCTION {format.in.editors}
+{ "\BIn{} "
+ editor empty$
+ 'skip$
+ { format.editors.in.line * ", " * }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format "In translator (Trans.),"
+ %
+FUNCTION {format.in.trans}
+{ "\BIn{} "
+ translator empty$
+ 'skip$
+ { format.translators.in.line * ", " * }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format "In editor (Ed. and Trans.)"
+ % or "In editor (Ed.)" if editor not equal to translator
+ %
+FUNCTION {format.in.editors.trans}
+{ "\BIn{} "
+ editor empty$
+ { translator empty$
+ 'skip$
+ { format.translators.in.line * ", " * }
+ if$
+ }
+ { translator empty$
+ { format.editors.in.line * }
+ { editor translator =
+ { format.editors.trans.in.line * }
+ { format.editors.in.line * }
+ if$
+ }
+ if$
+ ", " *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.year.check}
+{ "\APACrefYear{"
+ year empty$
+ { "\bibnodate{}" * }
+ { year * }
+ if$
+ %
+ % Add "a", "b", etc. when necessary.
+ %
+ make.definitive.year.supplement *
+ "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {format.year.month.day.check}
+{ "\APACrefYearMonthDay{"
+ year empty$
+ { "\bibnodate{}" * }
+ { year * }
+ if$
+ %
+ % Add "a", "b", etc. when necessary.
+ %
+ make.definitive.year.supplement *
+ "}{" *
+ %
+ % Add month and day when present.
+ %
+ month empty$
+ 'skip$
+ { month * }
+ if$
+ "}{" *
+ day empty$
+ 'skip$
+ { day * }
+ if$
+ "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of article in journal or book
+ % no finishing period
+ % field must be on top of stack
+ % (so englishtitle can be handled also)
+ %
+FUNCTION {format.atitle.no.dot}
+{ "\BBOQ{}" swap$
+ "\BBCQ{}" swap$
+ duplicate$ empty$
+ 'skip$
+ { duplicate$
+ % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefatitle{" swap$ * "}{" * swap$
+ "t" change.case$
+ * "}" *
+ }
+ if$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of article in journal or book
+ % with finishing period
+ % field must be on top of stack
+ % (so englishtitle can be handled also)
+ %
+FUNCTION {format.atitle.dot}
+{ "\BBOQ{}" swap$
+ "\BBCQ{}" swap$
+ duplicate$ empty$
+ 'skip$
+ { duplicate$
+ % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefatitle{" swap$ * "}{" * swap$
+ "t" change.case$
+ * "}" * add.period$
+ }
+ if$
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of article in journal or book
+ % field must be on top of stack
+ % second element on stack must be connected:
+ % if that is empty, then atitle.dot
+ % else atitle.no.dot, connect, and add period
+ %
+FUNCTION {format.atitle.connect}
+{ swap$
+ duplicate$ empty$
+ { pop$
+ format.atitle.dot
+ }
+ { swap$
+ format.atitle.no.dot
+ swap$ connect.with.space.check
+ add.period$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of book or so, without period
+ % call with
+ % field format.btitle.no.dot
+ %
+FUNCTION {format.btitle.no.dot}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$
+ % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefbtitle{" swap$ * "}{" * swap$
+ "t" change.case$
+ * "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of book or so, with period
+ % call with
+ % field format.btitle.dot
+ %
+FUNCTION {format.btitle.dot}
+{ duplicate$ empty$
+ 'skip$
+ { add.period$ format.btitle.no.dot }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of book and similar
+ % field must be on top of stack
+ % second element on stack must be connected:
+ % if that is empty, then btitle.dot
+ % else btitle.no.dot, connect, and add period
+ %
+FUNCTION {format.btitle.connect}
+{ swap$
+ duplicate$ empty$
+ { pop$
+ format.btitle.dot
+ }
+ { swap$
+ format.btitle.no.dot
+ swap$ connect.with.space.check
+ add.period$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of book and similar
+ % field must be on top of stack
+ % second element on stack must be connected
+ %
+FUNCTION {format.btitle.connect.no.dot}
+{ swap$
+ duplicate$ empty$
+ { pop$
+ format.btitle.no.dot
+ }
+ { swap$
+ format.btitle.no.dot
+ swap$ connect.with.space.check
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format englishtitle (of nonenglish article, etc.)
+ %
+FUNCTION {format.aetitle.check}
+{ englishtitle empty$
+ { "" }
+ { % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefaetitle{" englishtitle * "}{" *
+ englishtitle "t" change.case$ * "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format englishtitle (of nonenglish book, etc.)
+ %
+FUNCTION {format.betitle.check}
+{ englishtitle empty$
+ { "" }
+ { % Two arguments: Title twice: (1) don't change case; (2) change case
+ "\APACrefbetitle{" englishtitle * "}{" *
+ englishtitle "t" change.case$ * "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format type (of article, etc.)
+ %
+FUNCTION {format.atype.check}
+{ type bracket.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format title and englishtitle (of article, etc.)
+ %
+FUNCTION {format.atitle.check}
+{ format.aetitle.check
+ title format.atitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format title, englishtitle, and type
+ % (of article, etc.)
+ %
+FUNCTION {format.atitle.type.check}
+{ format.aetitle.check
+ format.atype.check connect.with.space.check
+ title format.atitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format title, englishtitle,
+ % and translator (of article, etc.)
+ %
+FUNCTION {format.atitle.trans.check}
+{ format.aetitle.check
+ format.atrans.check connect.with.space.check
+ title format.atitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format title, englishtitle, type,
+ % and translator (of article, etc.)
+ %
+FUNCTION {format.atitle.type.trans.check}
+{ format.aetitle.check
+ format.atype.check connect.with.space.check
+ format.atrans.check connect.with.space.check
+ title format.atitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format journal, volume, number and pages
+ % call with
+ % formatted.pages format.journal.vol.num.pages.check
+ %
+FUNCTION { format.journal.vol.num.pages.check }
+{ "journal" journal warning.if.empty
+ duplicate$ empty$
+ journal empty$ and
+ volume empty$ and
+ number empty$ and
+ { pop$ "" }
+ { "\APACjournalVolNumPages{" journal "" connect.check
+ "}{" * volume "" connect.check
+ "}{" * number "" connect.check
+ "}{" * swap$ "" connect.check
+ "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume of book, checks whether
+ % "Volume" or "Volumes"
+ %
+ % call with
+ % field format.bvolume.check
+ %
+FUNCTION {format.bvolume.check}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.result.check
+ { "\BVOLS" swap$ tie.or.space.connect }
+ { "\BVOL" swap$ tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % edition of book, must not be empty
+ % call with
+ % field format.edition.check
+ %
+FUNCTION {format.edition.check}
+{ duplicate$ empty$
+ 'skip$
+ { "\PrintOrdinal{" swap$ * "}" *
+ "\BEd" connect.with.space.check
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume and edition of book
+ %
+FUNCTION {format.bvol.edition.check}
+{ edition format.edition.check
+ volume format.bvolume.check
+ connect.with.comma.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume and edition of book
+ %
+FUNCTION {format.bvol.edition}
+{ format.bvol.edition.check
+ parenthesize.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume and edition and translator of translated book
+ %
+FUNCTION {format.bvol.edition.trans}
+{ format.bvol.edition.check
+ format.translators.in.paren.check connect.with.semicolon.check
+ parenthesize.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume, edition, editor, and translator of (translated) book
+ %
+FUNCTION {format.bvol.edition.editor.trans}
+{ format.bvol.edition.check
+ format.editors.translators.in.paren.check connect.with.semicolon.check
+ parenthesize.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % formats pages by first checking if 1 or more pages
+ % and prefixing pages with "p." or "pp." (these strings
+ % are given in the commands \BPG and \BPGS, respectively),
+ % whichever is applicable, and do a tie or space connect
+ %
+ % call with
+ % field format.bpages.check
+ %
+FUNCTION {format.bpages.check}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.result.check
+ { "\BPGS" swap$ tie.or.space.connect }
+ { "\BPG~" swap$ * }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % formats chapters by first checking if 1 or more chapters
+ % and prefixing pages with "chap." (this string
+ % is given in the commands \BCHAP and \BCHAPS, respectively),
+ % whichever is applicable, and do a tie or space connect
+ %
+ % call with
+ % field format.bchapter.check
+ %
+FUNCTION {format.bchapter.check}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.result.check
+ { "\BCHAPS" swap$ tie.or.space.connect }
+ { "\BCHAP" swap$ tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % volume, edition, and pages or chapter of article in book etc.
+ %
+FUNCTION {format.bvol.edition.pages}
+{ format.bvol.edition.check
+ pages empty$
+ { chapter format.bchapter.check connect.with.comma.check }
+ { pages format.bpages.check connect.with.comma.check }
+ if$
+ parenthesize.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, volume, edition of book
+ %
+FUNCTION {format.btitle.vol.edition}
+{ format.betitle.check
+ format.bvol.edition connect.with.space.check
+ title format.btitle.connect.no.dot
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, volume, edition, and translator of book
+ %
+FUNCTION {format.btitle.vol.edition.trans}
+{ format.betitle.check
+ format.bvol.edition.trans connect.with.space.check
+ title format.btitle.connect.no.dot
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, volume, edition, editor, and translator of book
+ %
+FUNCTION {format.btitle.vol.edition.editor.trans}
+{ format.betitle.check
+ format.bvol.edition.editor.trans connect.with.space.check
+ title format.btitle.connect.no.dot
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format address and publisher of book etc.
+ %
+ % New York: Wiley
+ % or
+ % Wiley (if address empty)
+ % or
+ % New York (if publisher empty)
+ %
+FUNCTION {format.address.publisher}
+{ %
+ % If publisher = author or publisher = "author" or publisher = "Author"
+ % then hand over the final choice how to format this to \LaTeX.
+ % (I could imagine similar code for editors, but the APA manual does
+ % not mention it and then we'd have to check whether the editor is in
+ % the author position, so let's keep it simple until someone complains.)
+ %
+ author empty$
+ publisher empty$ or
+ { publisher "\APACaddressPublisher{" }
+ { author publisher =
+ "author" publisher = or
+ "Author" publisher = or
+ { author "\APACaddressPublisherEqAuth{" }
+ { publisher "\APACaddressPublisher{" }
+ if$
+ }
+ if$
+ address "" connect.check "}{" *
+ % Recover publisher that was pushed onto the stack previously.
+ swap$ "" connect.check "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format address and publisher of book etc.
+ %
+ % New York: Wiley
+ % or
+ % Wiley (if address empty)
+ % or
+ % New York (if publisher empty)
+ %
+ % warning if no publisher or no address
+ %
+FUNCTION {format.address.publisher.check}
+{ "publisher" publisher warning.if.empty
+ "address" address warning.if.empty
+ publisher empty$
+ address empty$
+ and
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.address.publisher
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format number as in reports: No. 2017
+ % call with
+ % field format.rnumber.check
+ %
+FUNCTION {format.rnumber.check}
+{ duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.result.check
+ { "\BNUMS" swap$ tie.or.space.connect }
+ { "\BNUM" swap$ tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format type and number of a standalone item
+ % call with
+ % format.type.number
+ %
+FUNCTION { format.type.number }
+{ type empty$
+ { type.2 }
+ { type }
+ if$
+ number empty$
+ { bracket.check }
+ { number format.rnumber.check connect.with.space.check
+ parenthesize.check
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format howpublished if not empty,
+ % for various entry types
+ % call with
+ % format.howpublished
+ %
+FUNCTION {format.howpublished}
+{ howpublished empty$
+ 'skip$
+ { % clear the stack
+ duplicate$ empty$
+ 'pop$
+ { output.dot.new.block }
+ if$
+ "\APAChowpublished{" howpublished * "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format howpublished if not empty,
+ % for misc
+ % call with
+ % output.howpublished
+ %
+FUNCTION {output.howpublished}
+{ howpublished empty$
+ 'skip$
+ { "\APAChowpublished{" howpublished * "}" *
+ output.dot.new.block
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % begin and end of url environment
+ %
+FUNCTION {begin.end.url.env}
+{ " \begin{APACrefURL} "
+ % For "Retrieved <date>, from"
+ lastchecked empty$
+ 'skip$
+ { "[{" * lastchecked * "}]" * }
+ if$
+ " \end{APACrefURL} "
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % begin and end of message environment
+ %
+FUNCTION {begin.end.msg.env}
+{ " \begin{APACrefURLmsg} "
+ " \end{APACrefURLmsg} "
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format url given that it is not empty,
+ % for various entry types
+ % call with
+ % format.url
+ %
+FUNCTION {format.url}
+{ % First format begin and end of the enclosing environment.
+ % With posted messages, a different environment is used.
+ type.2 empty$
+ { begin.end.url.env }
+ { type.2 "\bibmessage" =
+ { begin.end.msg.env }
+ { begin.end.url.env }
+ if$
+ }
+ if$
+ % The url string.
+ "\url{" url * "}" *
+ % Enclose in begin and end environment
+ enclose.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format optional note
+ %
+FUNCTION {format.note}
+{ "\APACrefnote{" "}" note enclose.check }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format original year of publication and note
+ % (reprint or translation)
+ %
+FUNCTION {format.orig.year.note}
+{ originalyear empty$
+ { format.note }
+ { "\APACorigyearnote{"
+ originalyear "" connect.check "}{" *
+ note "" connect.check "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format original journal of publication and note
+ % (reprint or translation)
+ %
+FUNCTION {format.orig.journal.note}
+{ "\APACorigjournalnote{"
+ originalyear "" connect.check "}{" *
+ originaljournal "" connect.check "}{" *
+ originalvolume "" connect.check "}{" *
+ originalnumber "" connect.check "}{" *
+ originalpages "" connect.check "}{" *
+ note "" connect.check "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format original book of publication and note
+ % (reprint or translation)
+ %
+FUNCTION {format.orig.book.note}
+{ "\APACorigbooknote{" originalyear "" connect.check "}{" *
+ %
+ originaleditor empty$
+ 'skip$
+ { originaleditor num.names$ #1 >
+ { "\APACorigEDS{" * originaleditor format.editor.names * "}" * }
+ { "\APACorigED{" * originaleditor format.editor.names * "}" * }
+ if$
+ }
+ if$
+ %
+ "}{" *
+ originalbooktitle format.btitle.no.dot "" connect.check "}{" *
+ originaledition format.edition.check "" connect.check "}{" *
+ originalvolume format.bvolume.check "" connect.check "}{" *
+ originalpages format.bpages.check "" connect.check "}{" *
+ originaladdress "" connect.check "}{" *
+ originalpublisher "" connect.check "}{" *
+ note "" connect.check "}" *
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format information about original publication of reprint
+ % and format optional note
+ %
+FUNCTION {format.orig.note}
+{ originaljournal empty$
+ { originalbooktitle empty$
+ { note empty$
+ { originalyear empty$
+ 'skip$
+ { originalyear "\bibnodate" =
+ 'skip$
+ { output.new.block
+ format.orig.year.note
+ }
+ if$
+ }
+ if$
+ }
+ { output.new.block
+ format.orig.year.note
+ }
+ if$
+ }
+ { output.new.block
+ format.orig.book.note
+ }
+ if$
+ }
+ { output.new.block
+ format.orig.journal.note
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % article in periodical: journal, magazine, newspaper, ...
+ %
+ % call with
+ % formatted.pages formatted.date periodical
+ %
+FUNCTION {periodical}
+{ %
+ % author or editor, year, title, englishtitle, type
+ %
+ author empty$
+ %
+ % no author: possibly special issue with editors as authors
+ % (APA manual, ex. 11, p. 121)
+ %
+ { editor empty$
+ %
+ % no author or editor: title serves as author.
+ % title formatted as article title (APA manual not consistent in this,
+ % compare statement on p. 119: ``treat as book title'' and
+ % example 8, p. 121: no underlining => article title)
+ %
+ { format.atitle.type.trans.check output.new.block
+ %
+ % now formatted date on top of stack
+ %
+ output.dot.new.block
+ }
+ %
+ % format editor and year, and check if year is present
+ % format article title and check if title or type present
+ %
+ { format.editors.as.authors start.new.block
+ %
+ % now formatted date on top of stack
+ %
+ output.dot.new.block
+ format.atitle.type.trans.check output.new.block
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format article title and check if title or type present
+ %
+ { format.authors start.new.block
+ %
+ % now formatted date on top of stack
+ %
+ output.dot.new.block
+ format.atitle.type.trans.check output.new.block
+ }
+ if$
+ %
+ % format journal name, volume and issue number, and pages
+ % and check if journal not empty
+ %
+ format.journal.vol.num.pages.check
+ %
+ % if not empty, insert howpublished.
+ % (used if article is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % possible reprint and optional note
+ %
+ format.orig.note
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % journal article
+ %
+FUNCTION {article}
+{ pages format.year.month.day.check periodical }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % magazine article
+ %
+FUNCTION {magazine}
+{ pages format.year.month.day.check periodical }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % newspaper article
+ %
+FUNCTION {newspaper}
+{ pages format.bpages.check format.year.month.day.check periodical }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % (translation of) entire book
+ %
+FUNCTION {book}
+{ %
+ % author or editor,
+ % year, title, englishtitle, translator
+ %
+ author empty$
+ %
+ % no author: possibly edited book with editors as authors
+ %
+ { editor empty$
+ %
+ % no author or editor: title serves as author.
+ % title formatted as book title
+ %
+ { format.btitle.vol.edition.trans
+ format.type.number connect.with.space.check
+ output.dot.new.block
+ format.year.check add.period$
+ }
+ %
+ % format editor and year, and check if year is present
+ % format booktitle, volume, and edition and check if title present
+ %
+ { translator empty$
+ { format.editors.as.authors start.new.block
+ format.year.check output.dot.new.block
+ format.btitle.vol.edition
+ }
+ %
+ % format translator correctly
+ %
+ { translator editor =
+ not
+ { format.editors.as.authors start.new.block
+ format.year.check output.dot.new.block
+ format.btitle.vol.edition.trans
+ }
+ { format.ed.trans.as.authors start.new.block
+ format.year.check output.dot.new.block
+ format.btitle.vol.edition
+ }
+ if$
+ }
+ if$
+ format.type.number connect.with.space.check
+ add.period$
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format booktitle, volume, and edition and check if title present
+ %
+ { format.authors start.new.block
+ format.year.check output.dot.new.block
+ format.btitle.vol.edition.editor.trans
+ format.type.number connect.with.space.check
+ add.period$
+ }
+ if$
+ %
+ % format address and publisher, check if address and publisher present
+ %
+ format.address.publisher.check
+ %
+ % if not empty, insert howpublished.
+ % (used if book is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format original publication (of reprint/translation)
+ % and optional note
+ %
+ format.orig.note
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % (translated) article or chapter in edited book
+ %
+FUNCTION {incollection}
+{ author empty$
+ %
+ % no author: title serves as author.
+ % title formatted as article title (APA manual not consistent in this,
+ % compare statement on p. 119: ``treat as book title'' and
+ % example 8, p. 121: no underlining => article title)
+ %
+ { editor.ne.trans
+ { format.atitle.type.trans.check }
+ { format.atitle.type.check }
+ if$
+ output.new.block
+ %
+ % format month and day as well when available
+ % esp. for ``collections'' that are not books,
+ % such as parts of internet documents
+ %
+ format.year.month.day.check add.period$
+ }
+ %
+ % format author and year, and check if year is present
+ % format article title and check if title or type present
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ editor.ne.trans
+ { format.atitle.type.trans.check }
+ { format.atitle.type.check }
+ if$
+ }
+ if$
+ %
+ % format "In " editor " (Ed. \& Trans.), "
+ % booktitle, volume, edition, pages
+ %
+ output.new.block
+ format.in.editors.trans
+ format.bvol.edition.pages
+ booktitle format.btitle.connect * add.period$
+ %
+ % format address and publisher, check if publisher present
+ %
+ format.address.publisher.check
+ %
+ % if not empty, insert howpublished.
+ % (used if article is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format original publication (of reprint/translation)
+ % and optional note
+ %
+ format.orig.note
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % technical report number
+ %
+FUNCTION {format.tr.number}
+{ type empty$
+ { "\BTR{}" }
+ { type "\bibnotype" =
+ { "" }
+ { type }
+ if$
+ }
+ if$
+ number format.rnumber.check connect.with.space.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, volume, edition, report number
+ %
+FUNCTION {format.tr.title.number}
+{ format.betitle.check
+ % Single out the situation in which there is no number
+ % and type = {\bibnotype}, i.e., no type as well.
+ % (Why not use book then?)
+ type empty$
+ { % Now, we're in the regular situation with at least a
+ % number, a type, a volume, or an edition.
+ "\APACbVolEdTR{" format.bvol.edition.check * "}{" *
+ format.tr.number * "}" *
+ }
+ { type "\bibnotype" =
+ number empty$
+ volume empty$
+ edition empty$
+ and
+ and
+ and
+ { "" }
+ { % Now, we're in the regular situation with at least a
+ % number, a type, a volume, or an edition.
+ "\APACbVolEdTR{" format.bvol.edition.check * "}{" *
+ format.tr.number * "}" *
+ }
+ if$
+ }
+ if$
+ connect.with.space.check
+ title format.btitle.connect
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % format address and institution of reports etc.
+ %
+ % Washington, DC: National Institute of Education
+ % or
+ % National Institute of Education (if address empty)
+ %
+ % warning if no institution
+ %
+FUNCTION {format.address.institution.check}
+{ "institution" institution warning.if.empty
+ "address" address warning.if.empty
+ institution empty$
+ address empty$
+ and
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ %
+ % If institution = author or institution = "author"
+ % or institution = "Author" then hand over the final choice how to
+ % format this to \LaTeX. See also format.address.publisher
+ %
+ author empty$
+ institution empty$ or
+ { institution "\APACaddressInstitution{" }
+ { author institution =
+ "author" institution = or
+ "Author" institution = or
+ { author "\APACaddressInstitutionEqAuth{" }
+ { institution "\APACaddressInstitution{" }
+ if$
+ }
+ if$
+ address "" connect.check "}{" *
+ % Recover institution that was pushed onto the stack previously.
+ swap$ "" connect.check "}" *
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % reports
+ %
+FUNCTION {techreport}
+{ author empty$
+ %
+ % no author: possibly edited report with editors as authors
+ %
+ { editor empty$
+ %
+ % no author or editor: title serves as author.
+ % title formatted as book title
+ %
+ { format.tr.title.number output.dot.new.block
+ format.year.month.day.check add.period$
+ }
+ %
+ % format editor and year, and check if year is present
+ % format report title and check if title present
+ % format volume, edition, type, and number
+ %
+ { format.editors.as.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ format.tr.title.number add.period$
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format report title and check if title present
+ % format volume, edition, type, and number
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ format.tr.title.number add.period$
+ }
+ if$
+ %
+ % format address and institution, check if institution present
+ %
+ format.address.institution.check
+ %
+ % if not empty, insert howpublished.
+ % (used if report is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % (translated) article or chapter in report
+ %
+FUNCTION {intechreport}
+{ author empty$
+ %
+ % no author: title serves as author.
+ % title formatted as article title (APA manual not consistent in this,
+ % compare statement on p. 119: ``treat as book title'' and
+ % example 8, p. 121: no underlining => article title)
+ %
+ { editor.ne.trans
+ { format.atitle.trans.check }
+ { format.atitle.check }
+ if$
+ output.new.block
+ format.year.month.day.check output.dot.new.block
+ }
+ %
+ % format author and year, and check if year is present
+ % format article title and check if title or type present
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ editor.ne.trans
+ { format.atitle.trans.check }
+ { format.atitle.check }
+ if$
+ output.new.block
+ }
+ if$
+ %
+ % format "In " editor " (Ed. \& Trans.), "
+ % booktitle, volume, edition, pages
+ %
+ format.in.editors.trans
+ %
+ % volume, edition, report type and number, pages
+ %
+ "\APACbVolEdTRpgs{" format.bvol.edition.check * "}{" *
+ format.tr.number *
+ "}{" * pages format.bpages.check *
+ "}" *
+ %
+ booktitle format.btitle.connect *
+ add.period$
+ %
+ % format address and publisher, check if publisher present
+ %
+ format.address.institution.check
+ %
+ % if not empty, insert howpublished.
+ % (used if report is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format original publication (of reprint/translation)
+ % and optional note
+ %
+ format.orig.note
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % papers presented at conferences etc.
+ %
+FUNCTION {lecture}
+{ author empty$
+ { "author" author warning.if.empty }
+ { format.authors start.new.block }
+ if$
+ %
+ % format year, month, and day, and check if year present
+ % format title and check if title present
+ % format howpublished and check if howpublished present
+ %
+ format.year.month.day.check output.dot.new.block
+ symposium empty$
+ { format.betitle.check
+ title format.btitle.connect output.new.block
+ howpublished empty$
+ { "symposium and howpublished missing in " cite$ * warning$
+ ""
+ }
+ { "\APAChowpublished{" howpublished * "}" * }
+ if$
+ address connect.with.comma.check
+ }
+ { format.atitle.type.check output.new.block
+ "\BIn{} "
+ chair empty$
+ 'skip$
+ { chair format.editor.names
+ chair num.names$ #1 >
+ { "(\BCHAIRS)" }
+ { "(\BCHAIR)" }
+ if$
+ connect.with.space.check * ", " *
+ }
+ if$
+ symposium format.btitle.no.dot *
+ format.howpublished
+ address connect.with.comma.check
+ }
+ if$
+ add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % default thesis type is on top of stack
+ % now, if type field is empty, this default is used
+ % else default is removed and replaced by value of
+ % type field
+ %
+FUNCTION {format.type.school}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+ school connect.with.comma.check
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % phd theses, etc.
+ % call with
+ % "default.published.thesis" "default.unpublished.thesis" thesis
+ %
+FUNCTION {thesis}
+{ author empty$
+ { "author" author warning.if.empty }
+ { format.authors start.new.block }
+ if$
+ %
+ % format year and check if year present
+ %
+ format.year.check output.dot.new.block
+ %
+ % format title and check if title present
+ % journal empty => unpublished PhD thesis
+ % journal not empty => published (e.g., Dissertation Abstracts Int.)
+ %
+ journal empty$
+ { format.btitle.vol.edition output.dot.new.block
+ %
+ % pop default unpublished thesis, top is default published thesis
+ %
+ swap$ pop$
+ format.type.school
+ address connect.with.comma.check
+ }
+ %
+ % pop default published thesis, top is default unpublished thesis
+ %
+ { pop$
+ type empty$
+ school empty$
+ originalyear empty$
+ and
+ and
+ { pop$
+ ""
+ }
+ { format.type.school
+ originalyear connect.with.comma.check
+ parenthesize.check
+ }
+ if$
+ format.aetitle.check
+ swap$ connect.with.space.check
+ "title" title warning.if.empty
+ title format.atitle.connect output.new.block
+ pages format.journal.vol.num.pages.check
+ }
+ if$
+ %
+ % if not empty, insert howpublished.
+ % (used if thesis is retrieved from the internet)
+ %
+ format.howpublished add.period$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % phd theses, etc.
+ %
+FUNCTION {phdthesis}
+{ "\BPhD" "\BUPhD" thesis }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % master's theses, etc.
+ %
+FUNCTION {mastersthesis}
+{ "\BMTh" "\BUMTh" thesis }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of something (used in unpublished and misc)
+ % english translation of title
+ % type and number of something
+ %
+FUNCTION {format.btitle.type.num}
+{ format.betitle.check
+ format.bvol.edition connect.with.space.check
+ format.type.number
+ connect.with.space.check
+ title empty$
+ { add.period$ }
+ { title format.btitle.connect }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title of message or software-related thing (used in misc)
+ % english translation of title
+ % type and number of something
+ %
+FUNCTION {format.mtitle.type.num}
+{ format.aetitle.check
+ format.bvol.edition connect.with.space.check
+ type.2 "\bibmessage" =
+ { number empty$
+ 'skip$
+ { type.2 number tie.or.space.connect
+ bracket.check
+ connect.with.space.check
+ }
+ if$
+ }
+ { format.type.number
+ connect.with.space.check
+ }
+ if$
+ title empty$
+ { add.period$ }
+ { title format.atitle.connect }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % title, english translation of title,
+ % type and number of something (used in misc)
+ %
+FUNCTION {output.misctitle.type.num}
+{ type.2 empty$
+ { format.btitle.type.num }
+ { type.2 "\bibmessage" =
+ type.2 "\bibcomputerprogram" = or
+ type.2 "\bibcomputerprogrammanual" = or
+ type.2 "\bibcomputerprogramandmanual" = or
+ type.2 "\bibcomputersoftware" = or
+ type.2 "\bibcomputersoftwaremanual" = or
+ type.2 "\bibcomputersoftwareandmanual" = or
+ type.2 "\bibprogramminglanguage" = or
+ { format.mtitle.type.num }
+ { format.btitle.type.num }
+ if$
+ }
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % unpublished manuscripts, etc.
+ %
+FUNCTION {unpublished}
+{ check.relevant.fields
+ author empty$
+ %
+ % no author: possibly edited book with editors as authors
+ %
+ { editor empty$
+ %
+ % no author or editor: title serves as author.
+ % title formatted as book title
+ %
+ { format.btitle.type.num output.new.block
+ format.year.month.day.check add.period$
+ }
+ %
+ % format editor and year, and check if year is present
+ % format book title, volume, and edition and check if title present
+ %
+ { format.editors.as.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ format.btitle.type.num
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format book title, volume, and edition
+ % and check if title or type present
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ format.btitle.type.num
+ }
+ if$
+ howpublished empty$
+ organization empty$ and
+ address empty$ and
+ 'skip$
+ { output.new.block
+ "\APAChowpublished{" "}" howpublished enclose.check
+ organization connect.with.comma.check
+ address connect.with.comma.check
+ add.period$
+ }
+ if$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % nonprint media and other things that don't fit
+ %
+FUNCTION {misc}
+{ %
+ % To handle @manual: use type.2 instead of type.
+ type.2 empty$
+ type empty$ not and
+ { type 'type.2 := }
+ 'skip$
+ if$
+ %
+ author empty$
+ %
+ % no author: possibly edited item with editors as authors
+ %
+ { editor empty$
+ %
+ % no author or editor: title/type serves as author.
+ % title formatted as book title
+ %
+ % if no title and no type, howpublished is title
+ %
+ { title empty$
+ type.2 empty$ and
+ { howpublished empty$
+ { "No author, editor, title, type, and howpublished in "
+ cite$ * warning$
+ ""
+ }
+ { "\APAChowpublished{" howpublished * "}" * add.period$ }
+ if$
+ format.year.month.day.check add.period$
+ }
+ { output.misctitle.type.num output.new.block
+ format.year.month.day.check add.period$
+ format.howpublished add.period$
+ }
+ if$
+ }
+ %
+ % format editor and year, and check if year is present
+ % format book title, volume, and edition and check if title present
+ %
+ { format.editors.as.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ output.misctitle.type.num
+ format.howpublished add.period$
+ }
+ if$
+ }
+ %
+ % format author and year, and check if year is present
+ % format book title, volume, and edition
+ % and check if title or type present
+ %
+ { format.authors start.new.block
+ format.year.month.day.check output.dot.new.block
+ output.misctitle.type.num
+ format.howpublished add.period$
+ }
+ if$
+ %
+ address empty$
+ publisher empty$ and
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.address.publisher add.period$
+ }
+ if$
+ %
+ % format url
+ %
+ url empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.url
+ }
+ if$
+ %
+ % format optional note
+ %
+ note empty$
+ 'skip$
+ { % Clear the stack
+ duplicate$ empty$
+ 'skip$
+ { output.new.block }
+ if$
+ format.note
+ }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % for legal cases and other cases that need to be
+ % done by hand
+ %
+FUNCTION {literal}
+{ "key" key warning.if.empty
+ "text" text warning.if.empty
+ text empty$
+ { "" }
+ { text }
+ if$
+ fin.entry
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % technical documentation
+ %
+FUNCTION {manual}
+{ %
+ % If type is empty, assume that it is a computer software manual.
+ %
+ type empty$
+ { "\bibcomputersoftwaremanual" 'type.2 := }
+ 'skip$
+ if$
+ misc
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % following functions not used for APA Manual examples
+ %
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % booklet
+ %
+FUNCTION {booklet}
+{ misc }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % part of a book
+ %
+FUNCTION {inbook}
+{ incollection }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % article in proceedings
+ %
+FUNCTION {inproceedings}
+{ incollection }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % article in proceedings (Kopka & Daly, 2004, p. 230)
+ %
+FUNCTION {conference}
+{ inproceedings }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % proceedings
+ %
+FUNCTION {proceedings}
+{ misc }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % unknown types
+ %
+FUNCTION {default.type}
+{ misc }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {initialize}
+{ %
+ % Maximum number of names to be formatted .
+ #6 'name.max :=
+}
+
+FUNCTION {init.old.number}
+{ %
+ % For numbering the entries according to current sorting order.
+ #0 'old.number :=
+}
+
+FUNCTION {init.old.label}
+{ %
+ % For comparing labels across entries .
+ "zzzzzz" 'old.label :=
+}
+
+FUNCTION {init.cite.initials.add.to.year}
+{ %
+ % Initialize "cite initials" indicator for all entries.
+ #0 'cite.initials :=
+ %
+ % Initialize "add to year", i.e., whether a, b, etc. must
+ % be added to the year in citation, to "no".
+ #0 'add.to.year :=
+ %
+}
+
+FUNCTION {move.forward}
+{ %
+ % Indicates that we're moving forward (ITERATE) through the entry list .
+ #1 'forward :=
+}
+
+FUNCTION {move.backward}
+{ %
+ % Indicates that we're moving backward (REVERSE) through the entry list .
+ #0 'forward :=
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{}" write$ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {write.bbl.entry}
+{ %
+ % Output \bibitem and \citeauthoryear command.
+ %
+ make.cite.labels
+ %
+ % Format and output reference list entry.
+ %
+ call.type$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+READ
+
+
+EXECUTE { identify.apacite.version }
+
+
+EXECUTE { initialize }
+
+
+ITERATE { make.sort.title }
+
+SORT
+
+EXECUTE { init.old.number }
+
+EXECUTE { init.old.label }
+
+ITERATE { make.title.number }
+
+
+ITERATE { make.tentative.sort.label }
+
+SORT
+
+
+ITERATE { init.cite.initials.add.to.year }
+
+EXECUTE { init.initials }
+
+ITERATE { check.add.initials }
+
+EXECUTE { init.initials }
+
+REVERSE { check.add.initials }
+
+ITERATE { tentative.cite.num.names }
+
+EXECUTE { init.cite.num.names }
+
+EXECUTE { move.forward }
+
+ITERATE { definitive.cite.num.names }
+
+EXECUTE { init.cite.num.names }
+
+EXECUTE { move.backward }
+
+REVERSE { definitive.cite.num.names }
+
+
+ITERATE { make.final.sort.key }
+
+SORT
+
+
+EXECUTE { begin.bib }
+
+
+ITERATE { write.bbl.entry }
+
+
+EXECUTE { end.bib }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%%
+%% End of file `apacannx.bst'.
diff --git a/Master/texmf-dist/bibtex/bst/apacite/apacite.bst b/Master/texmf-dist/bibtex/bst/apacite/apacite.bst
index 8b416318614..0341a68c24e 100644
--- a/Master/texmf-dist/bibtex/bst/apacite/apacite.bst
+++ b/Master/texmf-dist/bibtex/bst/apacite/apacite.bst
@@ -8,7 +8,7 @@
%%
%% This is a generated file.
%%
-%% Copyright (C) 1994-2007 Erik Meijer and any individual authors listed
+%% Copyright (C) 1994-2009 Erik Meijer and any individual authors listed
%% elsewhere in this file.
%%
%% This file is part of the `apacite' package.
@@ -27,9 +27,9 @@
%% The `apacite' package consists of the files apacite.dtx and
%% apacite.ins, and the following generated files:
%% apacite.sty, apacite.bst, apacitex.bst, apa5ex.bib,
-%% apacite.drv, apacdoc.sty,
-%% english.apc, dutch.apc, finnish.apc, german.apc, ngerman.apc,
-%% greek.apc, norsk.apc, spanish.apc, swedish.apc.
+%% apacite.drv, apacdoc.sty, apacann.bst, apacannx.bst,
+%% english.apc, dutch.apc, finnish.apc, french.apc, german.apc,
+%% ngerman.apc, greek.apc, norsk.apc, spanish.apc, swedish.apc.
%%
%% This work has the LPPL maintenance status `maintained'
%%
@@ -41,16 +41,14 @@
%% the generated files.
%%
%% apacite.bst
-%% [2007/09/03 v4.00 APA bibliography style]
-
-
+%% [2009/03/01 v4.05 APA bibliography style]
%% apacite.bst : reference list according to APA manual
%% Written by Erik Meijer
FUNCTION {identify.apacite.version}
{ % Put identifying string in the .blg file
"apacite.bst"
- " [2007/09/03 v4.00 APA bibliography style]"
+ " [2009/03/01 v4.05 APA bibliography style]"
* top$
}
@@ -59,7 +57,8 @@ FUNCTION {identify.apacite.version}
ENTRY
{ address
- annote % not used
+ annote % only used for annotated version
+ annotate % only used for annotated version
author
booktitle % for articles in books
chair % for lectures
@@ -1339,6 +1338,15 @@ FUNCTION {definitive.cite.num.names.3.or.more}
}
if$
}
+ { %
+ % Different 5th author: citing 5 authors is
+ % sufficient for this comparison.
+ %
+ cite.num.names.short #5 <
+ { #5 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
if$
}
if$
@@ -3596,7 +3604,7 @@ FUNCTION {format.bvolume.check}
FUNCTION {format.edition.check}
{ duplicate$ empty$
'skip$
- { "\PrintCardinal{" swap$ * "}" *
+ { "\PrintOrdinal{" swap$ * "}" *
"\BEd" connect.with.space.check
}
if$
diff --git a/Master/texmf-dist/bibtex/bst/apacite/apacitex.bst b/Master/texmf-dist/bibtex/bst/apacite/apacitex.bst
index 0bfa3a538ee..47fcc7e4ce3 100644
--- a/Master/texmf-dist/bibtex/bst/apacite/apacitex.bst
+++ b/Master/texmf-dist/bibtex/bst/apacite/apacitex.bst
@@ -8,7 +8,7 @@
%%
%% This is a generated file.
%%
-%% Copyright (C) 1994-2007 Erik Meijer and any individual authors listed
+%% Copyright (C) 1994-2009 Erik Meijer and any individual authors listed
%% elsewhere in this file.
%%
%% This file is part of the `apacite' package.
@@ -27,9 +27,9 @@
%% The `apacite' package consists of the files apacite.dtx and
%% apacite.ins, and the following generated files:
%% apacite.sty, apacite.bst, apacitex.bst, apa5ex.bib,
-%% apacite.drv, apacdoc.sty,
-%% english.apc, dutch.apc, finnish.apc, german.apc, ngerman.apc,
-%% greek.apc, norsk.apc, spanish.apc, swedish.apc.
+%% apacite.drv, apacdoc.sty, apacann.bst, apacannx.bst,
+%% english.apc, dutch.apc, finnish.apc, french.apc, german.apc,
+%% ngerman.apc, greek.apc, norsk.apc, spanish.apc, swedish.apc.
%%
%% This work has the LPPL maintenance status `maintained'
%%
@@ -41,9 +41,7 @@
%% the generated files.
%%
%% apacitex.bst
-%% [2007/09/03 v4.00 APA bibl. style with author index info]
-
-
+%% [2009/03/01 v4.05 APA bibl. style with author index info]
%% apacitex.bst : reference list according to APA manual
%% with author indexing information
%% Written by Erik Meijer
@@ -51,7 +49,7 @@
FUNCTION {identify.apacite.version}
{ % Put identifying string in the .blg file
"apacitex.bst"
- " [2007/09/03 v4.00 APA bibl. style with author index info]"
+ " [2009/03/01 v4.05 APA bibl. style with author index info]"
* top$
}
@@ -60,7 +58,8 @@ FUNCTION {identify.apacite.version}
ENTRY
{ address
- annote % not used
+ annote % only used for annotated version
+ annotate % only used for annotated version
author
booktitle % for articles in books
chair % for lectures
@@ -1340,6 +1339,15 @@ FUNCTION {definitive.cite.num.names.3.or.more}
}
if$
}
+ { %
+ % Different 5th author: citing 5 authors is
+ % sufficient for this comparison.
+ %
+ cite.num.names.short #5 <
+ { #5 'cite.num.names.short := }
+ 'skip$
+ if$
+ }
if$
}
if$
@@ -3597,7 +3605,7 @@ FUNCTION {format.bvolume.check}
FUNCTION {format.edition.check}
{ duplicate$ empty$
'skip$
- { "\PrintCardinal{" swap$ * "}" *
+ { "\PrintOrdinal{" swap$ * "}" *
"\BEd" connect.with.space.check
}
if$