%% Copyright 2022 Philip Kime %% %% This work 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. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainer of this work is Philip Kime. \ProvidesFile{apa.cbx}[2023/03/20\space v9.17\space APA biblatex citation style] \RequireBiber[3] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.19) labelyear postfix is not emphasised or italic % Dashes between labelyear and non-numeric year (or pseudo-year) \newcommand{\apashortdash}{-} \DeclareFieldFormat{extradate}{\iffieldnums{labelyear}{\mknumalph{#1}}{\apashortdash\mknumalph{#1}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.11) requires comma separator between authors and years \DeclareDelimFormat{nameyeardelim}{\addcomma\space} \DeclareDelimAlias[textcite]{innernameyeardelim}[]{nameyeardelim} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.17) No comma before "et al" if there is only one name % preceding it \DeclareDelimFormat{andothersdelim}{\ifnum\value{listcount}>2 \finalandcomma\fi\addspace} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.10) Suffices are not shown in citations % (APA 8.20) Initials only for primary author and only when not unique across all *primary* authors \newbibmacro*{labelname:doname}[8]{% \ifboolexpr{test {\ifnumcomp{\value{listcount}}{>}{1}} or test {\ifuniqueprimaryauthor}} {\setcounter{uniquename}{0}} {}% \ifcase\value{uniquename}% \ifuseprefix {\usebibmacro{name:family}{#1}{#3}{#5}{\relax}} {\usebibmacro{name:family}{#1}{#3}{\relax}{\relax}}% \or \ifuseprefix {\usebibmacro{name:given-family}{#1}{#4}{#5}{\relax}} {\usebibmacro{name:given-family}{#1}{#4}{\relax}{\relax}}% \or \ifuseprefix {\usebibmacro{name:given-family}{#1}{#3}{#5}{\relax}} {\usebibmacro{name:given-family}{#1}{#3}{\relax}{\relax}}% \fi \usebibmacro{name:andothers}} \DeclareNameFormat{labelname}{% \usebibmacro{labelname:doname}% {\namepartfamily}% {\namepartfamilyi}% {\namepartgiven}% {\namepartgiveni}% {\namepartprefix}% {\namepartprefixi}% {\namepartsuffix}% {\namepartsuffixi}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.21) Groups as names % SHORTAUTHOR brackets in parencites \DeclareNameFormat{sabrackets}{% \mkbibbrackets{% \usebibmacro{labelname:doname}% {\namepartfamily}% {\namepartfamilyi}% {\namepartgiven}% {\namepartgiveni}% {\namepartprefix}% {\namepartprefixi}% {\namepartsuffix}% {\namepartsuffixi}}} \DeclareFieldFormat{shorthand}{\ifciteseen {#1} {\mkbibbrackets{#1}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.21) Deal with SHORTAUTHOR fields % (APA 8.12) Multiple same author cites in a compact citation call do not % need to be repeated but the full years must be repeated with % their extradate postfixes % (APA 8.15) Cite ORIGYEAR/YEAR if ORIGYEAR present % (APA 10.1:11) Reprints have original year in citation \def\citeresetapa{\global\let\cbx@apa@names\@empty} \citeresetapa \def\cbx@apa@ifnamesaved{% \xifinlist{\thefield{namehash}}{\cbx@apa@names} {\@firstoftwo} {\@secondoftwo}} \newbibmacro*{cite:author}{% \iffieldequals{namehash}{\cbx@lasthash} % Multiple cites in one command {\setunit{\compcitedelim}% \usebibmacro{cite:plabelyear+extradate}}% % Single cite {\ifnameundef{labelname} % No author/editor {\usebibmacro{cite:noname}% \savefield{namehash}{\cbx@lasthash}} % Normal cite {\ifnameundef{shortauthor} {\printnames{labelname}}% {\cbx@apa@ifnamesaved {\printnames{shortauthor}} {\printnames[labelname]{author}% \addspace\printnames[sabrackets]{shortauthor}}}% \savefield{namehash}{\cbx@lasthash}}}% \setunit{\multicitedelim}} \newbibmacro*{cite}{% \iffieldequals{namehash}{\cbx@lasthash} % Multiple cites in one command {\setunit{\compcitedelim}% \usebibmacro{cite:plabelyear+extradate}}% % Single cite {\ifnameundef{labelname} % No author/editor {\usebibmacro{cite:noname}% \setunit{\printdelim{nameyeardelim}}% \usebibmacro{cite:plabelyear+extradate}% \savefield{namehash}{\cbx@lasthash}} % Normal cite {\ifnameundef{shortauthor} {\printnames{labelname}}% {\cbx@apa@ifnamesaved {\printnames{shortauthor}} {\printnames[labelname]{author}% \addspace\printnames[sabrackets]{shortauthor}}}% \setunit{\printdelim{nameyeardelim}}% \usebibmacro{cite:plabelyear+extradate}% \savefield{namehash}{\cbx@lasthash}}}% \setunit{\multicitedelim}} \renewcommand*{\iffinalcitedelim}{% \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}} \newbibmacro*{textcite}{% \iffieldequals{namehash}{\cbx@lasthash} % Compact cite - more than one thing for same author {\setunit{\compcitedelim}% \usebibmacro{cite:plabelyear+extradate}} % New cite {\ifbool{cbx:parens} {\bibcloseparen\global\boolfalse{cbx:parens}} {}% \setunit{\textcitedelim}% \ifnameundef{labelname} % No author/editor {\iffieldundef{shorthand}% % Cite using title {\usebibmacro{cite:noname}% \setunit{\global\booltrue{cbx:parens}% \printdelim{nonameyeardelim}% \bibopenparen}% \usebibmacro{cite:plabelyear+extradate}} % Cite using shorthand {\usebibmacro{cite:shorthand}}} % Normal cite with author/editor % Normal full cite {\ifnameundef{shortauthor}% % Normal full cite {\printnames{labelname}} % Cite using short author {\cbx@apa@ifnamesaved {\printnames{shortauthor}} {\printnames[labelname]{author}}}% % Year \setunit{\global\booltrue{cbx:parens}% \printdelim{nameyeardelim}% \bibopenparen}% % Put the shortauthor inside the year brackets if necessary \ifnameundef{shortauthor} {} {\cbx@apa@ifnamesaved {} {\printnames{shortauthor}% \setunit{\printdelim{innernameyeardelim}}}}% % Print prenote (belongs to first cite) \ifnumequal{\value{citecount}}{1} {\usebibmacro{prenote}} {}% % Actual year printing \usebibmacro{cite:plabelyear+extradate}% % Save name hash for checks later \savefield{namehash}{\cbx@lasthash}}% \stepcounter{textcitecount}}} \newbibmacro*{cite:plabelyear+extradate}{% \iffieldundef{labelyear}{} {\printtext[bibhyperref]{% \clearfield{labelmonth}% don't want months in citations \clearfield{labelday}% don't want days in citations \clearfield{labelendmonth}% don't want months in citations \clearfield{labelendday}% don't want days in citations \clearfield{labelyeardivision}% don't want yeardivisions in citations \clearfield{labelendyeardivision}% don't want yeardivisions in citations \iffieldsequal{labelyear}{labelendyear}% Don't want no-op year ranges {\clearfield{labelendyear}} {}% \iffieldundef{origyear} {} {\printorigdate% \setunit*{\addslash}}% \iffieldundef{related} {} {\iffieldequalstr{relatedtype}{reprintfrom} {\entrydata*{\thefield{related}}{\printlabeldateextra}% \setunit*{\addslash}} {}}% \printlabeldateextra}}} \newbibmacro*{cite:shorthand}{% \ifciteseen {\printfield{shorthand}} {\printnames{labelname}% \setunit{\printdelim{nameyeardelim}}% \printfield{title}\space\printfield{shorthand}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.14) Fall back to title for citations without authors % (APA 11) Bizarre and special rules for legal information \DeclareFieldFormat{citetitle}{\mkbibquote{#1}} \DeclareFieldFormat[book,manual,report,periodical,legmaterial,jurisdiction,video]{citetitle}{\mkbibemph{#1}} \DeclareFieldFormat[legislation,legadminmaterial,legal]{citetitle}{#1} \newbibmacro*{cite:noname}{% \iffieldundef{labeltitle} {\ifthenelse{\ifentrytype{legmaterial}\OR% \ifentrytype{legadminmaterial}} {\let\blx@tempa\bibcplstring% \textcite default \let\blx@tempb\bibcplstring% \textcite default \iftoggle{apa:inpcite} {\iffieldequalstr{type}{execorder}{\let\blx@tempb\bibcpsstring}{}% \iffieldequalstr{type}{resolution}{\let\blx@tempa\bibcpsstring}{}% \iffieldequalstr{type}{report}{\let\blx@tempa\bibcpsstring\let\blx@tempb\bibcpsstring}{}} {}% \iffieldundef{source}{}{\blx@tempa{\thefield{source}}}% \setunit{\addspace}% \iffieldundef{type}{}{\blx@tempb{\thefield{type}}}% \setunit{\addspace}% \printfield[legmaterialnum]{number}} {\ifentrytype{constitution}{\usebibmacro{cite:noname:const}}{}}} {\printfield[citetitle]{labeltitle}}} % CONSTITUTION entrytypes are messier \newbibmacro*{cite:noname:const}{% \iftoggle{apa:inpcite} {\bibcpsstring{\thefield{source}}% \setunit{\addspace}% \bibcpsstring{\thefield{type}}% \setunit{\addspace}% \iffieldundef{amendment}{}{\bibsstring{amendment}% \setunit{\addspace}% \printfield{amendment}% \setunit{\addcomma\addspace}% \ifkeyword{repealed} {\biblcsstring{repealed}% \setunit{\addspace}% \printeventdate} {}}% \setunit{\addspace}% \iffieldundef{article}{}{\bibsstring{article}\setunit{\addspace}\printfield{article}}% \setunit{\addcomma\addspace}\newblock \iffieldundef{section}{}{\bibsstring{section}\setunit{\addspace}\printfield{section}}% \setunit{\addcomma\addspace}\newblock \iffieldundef{part}{}{\bibsstring{paragraph}\setunit{\addspace}\printfield{part}}} {}% \iftoggle{apa:intcite} {\iffieldundef{amendment}{}{\bibcplstring{amendment}% \setunit{\addspace}% \printfield{amendment}% \setunit{\addspace}% \biblcsstring{tothe}}% \iffieldundef{article}{}{\bibcplstring{article}\setunit{\addspace}\printfield{article}}% \setunit{\addcomma\addspace}% \iffieldundef{part}{}{\biblstring{paragraph}% \setunit{\addspace}% \printfield{part}% \setunit{\addcomma\addspace}% \biblcsstring{ofthe}}% \setunit{\addcomma\addspace}% \iffieldundef{section}{}{\bibcplstring{section}% \setunit{\addspace}% \printfield{section}% \setunit{\addcomma\addspace}% \biblcsstring{ofthe}} \setunit{\addspace}% \bibcplstring{\thefield{source}}% \setunit{\addspace}% \bibcplstring{\thefield{type}}% \setunit{\addspace}% \ifkeyword{repealed} {\biblclstring{repealed}\setunit{\addspace}\printeventdate} {}} {}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.2:32) Raw field cite formats \DeclareFieldFormat{citefield}{% \ifcurrentfield{edition} {\ifinteger{#1} {\mkbibordedition{#1}~\bibstring{edition}} {#1\isdot}} {\ifcurrentfield{shorthand} {\mkbibemph{#1}} {#1}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % No shorthand % \newbibmacro*{citeyear}{% \iffieldundef{labelyear} {\usebibmacro{cite:init}} {\iffieldequals{namehash}{\cbx@lasthash} {\setunit{\compcitedelim}% \usebibmacro{cite:plabelyear+extradate}} {\usebibmacro{cite:plabelyear+extradate}% \savefield{namehash}{\cbx@lasthash}}}% \setunit{\multicitedelim}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Fullcite should use "&" % Also need to reset the global booleans which are normally done at % every bib item but since these aren't bib items, they are not reset \DeclareDelimFormat[fullcite,fullcitebib]{finalnamedelim} {\ifnum\value{liststop}>2 \finalandcomma\fi\addspace\&\space} \DeclareCiteCommand{\fullcite} {\usebibmacro{prenote}} {\usedriver {\DeclareNameAlias{sortname}{default}% \global\boolfalse{bbx:in}% \global\let\blx@related@loop\@empty} {\thefield{entrytype}}% \usebibmacro{cite:post}} {\multicitedelim} {\usebibmacro{postnote}} \DeclareCiteCommand{\fullcitebib} {\list{} {\setlength{\leftmargin}{\bibhang}% \setlength{\itemindent}{-\leftmargin}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}\item} {\usedriver {\DeclareNameAlias{sortname}{default}% \global\boolfalse{bbx:in}} {\thefield{entrytype}}% \finentry \usebibmacro{cite:post}} {\item} {\endlist} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newbool{cbx:parens} % boolean to say we're inside parens \newbibmacro*{textcite:postnote}{% \usebibmacro{postnote}% \ifbool{cbx:parens} {\bibcloseparen\global\boolfalse{cbx:parens}} {}} \newbibmacro*{cite:init}{% \global\boolfalse{cbx:parens}% \global\undef\cbx@lasthash} \newbibmacro*{cite:post}{% \xifinlist{\thefield{namehash}}{\cbx@apa@names} {} {\listxadd{\cbx@apa@names}{\thefield{namehash}}}} \newbibmacro*{cite:labelyear}{% \printfield{labelyear}} \newbibmacro*{cite:extradate}{% \printfield{extradate}} \newbibmacro*{cite:labelyear+extradate}{% \iffieldundef{labelyear} {} {\printfield{labelyear}% \printfield{extradate}}} \DeclareCiteCommand{\citeauthor} {\usebibmacro{cite:init}% \usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{cite:author}% \usebibmacro{cite:post}} {} {\usebibmacro{postnote}} \DeclareCiteCommand{\citeyear} {\boolfalse{citetracker}% \boolfalse{pagetracker}% \usebibmacro{prenote}} {\usebibmacro{cite:plabelyear+extradate}} {\multinamedelim} {\usebibmacro{postnote}} \DeclareCiteCommand{\cite} {\usebibmacro{cite:init}% \usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{cite}% \usebibmacro{cite:post}} {} {\usebibmacro{postnote}} \DeclareMultiCiteCommand{\cites}{\cite}{\setunit{\multicitedelim}} \DeclareCiteCommand*{\cite} {\usebibmacro{cite:init}% \usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{citeyear}% \usebibmacro{cite:post}} {} {\usebibmacro{postnote}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.17) ampersand separator in parenthetical cites \newtoggle{apa:inpcite} \DeclareDelimFormat[parencite]{finalnamedelim} {\ifnum\value{liststop}>2 \finalandcomma\fi\addspace\&\space} \DeclareCiteCommand{\parencite}[\mkbibparens] {\usebibmacro{cite:init}% \usebibmacro{prenote}% \toggletrue{apa:inpcite}} {\usebibmacro{citeindex}% \usebibmacro{cite}% \usebibmacro{cite:post}} {} {\usebibmacro{postnote}% \togglefalse{apa:inpcite}} \DeclareMultiCiteCommand{\parencites}[\mkbibparens]{\parencite} {\setunit{\multicitedelim}} \DeclareCiteCommand*{\parencite}[\mkbibparens] {\usebibmacro{cite:init}% \usebibmacro{prenote}% \toggletrue{apa:inpcite}} {\usebibmacro{citeindex}% \usebibmacro{citeyear}% \usebibmacro{cite:post}% \togglefalse{apa:inpcite}} {} {\usebibmacro{postnote}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.11) No parens round year for cites when the cite is in % parentheses. Use new command \nptextcite for such cites % unless using luatex which does it automatically \DeclareDelimAlias[nptextcite]{finalnamedelim}[parencite]{finalnamedelim} \DeclareCiteCommand{\nptextcite} {\usebibmacro{cite:init}% \usebibmacro{prenote}% \toggletrue{apa:inpcite}} {\usebibmacro{citeindex}% \usebibmacro{cite}% \usebibmacro{cite:post}} {} {\usebibmacro{postnote}% \togglefalse{apa:inpcite}} \DeclareMultiCiteCommand{\nptextcites}{\nptextcite} {\setunit{\multicitedelim}} \DeclareCiteCommand*{\nptextcite} {\usebibmacro{cite:init}% \usebibmacro{prenote}% \toggletrue{apa:inpcite}} {\usebibmacro{citeindex}% \usebibmacro{citeyear}% \usebibmacro{cite:post}% \togglefalse{apa:inpcite}} {} {\usebibmacro{postnote}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \DeclareCiteCommand{\footcite}[\mkbibfootnote] {\usebibmacro{cite:init}% \usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{cite}% \usebibmacro{cite:post}} {} {\usebibmacro{postnote}} \DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]{\footcite} {\setunit{\multicitedelim}} \DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext] {\usebibmacro{cite:init}% \usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{cite}% \usebibmacro{cite:post}} {} {\usebibmacro{postnote}} \DeclareMultiCiteCommand{\footcitetexts}[\mkbibfootnotetext] {\footcitetext}{\setunit{\multicitedelim}} \DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote] {\usebibmacro{cite:init}% \usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{cite}} {} {\usebibmacro{postnote}} \DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibparens\mkbibfootnote] {\smartcite}{\setunit{\multicitedelim}} \newtoggle{apa:intcite} \DeclareCiteCommand{\cbx@textcite} {\usebibmacro{cite:init}% \toggletrue{apa:intcite}} {\usebibmacro{citeindex}% \usebibmacro{textcite}% \usebibmacro{cite:post}% \togglefalse{apa:intcite}} {} {\usebibmacro{textcite:postnote}} \DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite] {\gdef\cbx@savedkeys{}% \citetrackerfalse% \pagetrackerfalse% \DeferNextCitekeyHook% \usebibmacro{cite:init}} {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0} {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}% \global\clearfield{multipostnote}} {}% \xappto\cbx@savedkeys{\thefield{entrykey},}% \iffieldequals{namehash}{\cbx@lasthash} {} {\stepcounter{textcitetotal}% \savefield{namehash}{\cbx@lasthash}}} {} {\protected@xappto\cbx@savedcites{% [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}} % textcite has nested \DeclareCiteCommand definitions for textcite and we want to use % the normal textcite context \DeclareDelimcontextAlias{cbx@textcite}{textcite} \newrobustcmd{\cbx@textcite@init}[2]{% \setcounter{textcitetotal}{0}% \setcounter{textcitecount}{0}% \def\cbx@savedcites{#1}#2\cbx@savedcites\empty} \DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{} \DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{} \let\cbx@textcites@init\cbx@textcite@init \pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{} \ifdef\luatexversion {\directlua{require'apa'}% \glet\textcitei\textcite \glet\parencitei\parencite \gdef\textcite{\BLTXAPAifInParensTF{\nptextcite}{\textcitei}}% \gdef\parencite{\BLTXAPAifInParensTF{\nptextcite}{\parencitei}}} {} \endinput