%% Copyright 2019 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.bbx}[2019/11/23\space v9.0\space APA biblatex references style] \RequireBiber[3] \RequireBibliographyStyle{standard} \urlstyle{rm} % APA examples all have URLs in same font as text % Declare the language mapping suffix \DeclareLanguageMappingSuffix{-apa} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Automated capitalisation after colons % (http://blog.apastyle.org/apastyle/2011/06/capitalization-after-colons.html) % Copied and adapted from ieee.bbx % {} {*} {} \newcommand*{\bbx@colon@search}[3]{% \bbx@colon@search@aux#1#2\empty#3: \stop } \long\def\bbx@colon@search@aux#1#2#3: #4\stop{% \expandafter#1\expandafter#2\expandafter{#3}% \ifblank{#4} {} {% : % \bbx@colon@search@aux#1#2\empty#4\stop }% } % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Optional parens/brackets % Thanks to egreg from https://tex.stackexchange.com/questions/53068/how-to-check-if-a-macro-value-is-empty-or-will-not-create-text-with-plain-tex-co % for this test for expanded emptiness so that we can easily opt to not print parens around nothing % Without this, it is very messy - you have to test all potential fields for defness first and this % is messy because the fields in the additional info vary betwee entrytypes \def\foreverunspace{% \ifnum\lastnodetype=11 \unskip\foreverunspace \else \ifnum\lastnodetype=12 \unkern\foreverunspace \else \ifnum\lastnodetype=13 \unpenalty\foreverunspace \fi \fi \fi } \newrobustcmd{\mkbibparense}[1]{% \setbox0=\hbox{#1\foreverunspace}% \ifdim\wd0=0pt \else % Since we are evaluating the argument twice and it contains \setunit, % need to sanitise \setunit second time around. Can't just put in \box0 % as it might be long and won't linebreak \mkbibparens{\setunit{}#1}% \fi} \newrobustcmd{\mkbibbracketse}[1]{% \setbox0=\hbox{#1\foreverunspace}% \ifdim\wd0=0pt \else % Since we are evaluating the argument twice and it contains \setunit, % need to sanitise \setunit second time around. Can't just put in \box0 % as it might be long and won't linebreak \mkbibbrackets{\setunit{}#1}% \fi} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.8) - Allow variable max authors/editors limit % Default to APA 19 \newcommand{\maxprtauth}{20} \DeclareBibliographyOption{apamaxprtauth}{% \ifstrempty{#1} {} {\renewcommand{\maxprtauth}{#1}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Force roman numerals into arabic using % etoolbox macros \newcommand{\apanum}[1]{\ifrmnum{#1}{\rmntonum{#1}}{#1}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.43) Hanging indent of 0.5in \setlength{\bibhang}{0.5in} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Date formats. Suppress end range of less specific fields \newcommand*{\mkdaterangeapalong}[1]{% \begingroup \blx@metadateinfo{#1}% \iffieldundef{#1year}{} {\datecircaprint \ifstrequal{#1}{url}% URL dates are unlikely to be BCE ... {\printtext{% \mkbibdateapalongmdy{#1year}{#1month}{#1day}% \iffieldundef{#1endyear}% {}% {\iffieldequalstr{#1endyear}{}% open-ended range? {\bibdatedash\bibstring{present}} {\bibdatedash% \iffieldsequal{#1year}{#1endyear}% {\iffieldsequal{#1month}{#1endmonth}% {\iffieldsequal{#1day}{#1endday}% {}% {\mkbibdateapalongmdy{}{}{#1endday}}}% {\mkbibdateapalongmdy{}{#1endmonth}{#1endday}}}% {\mkbibdateapalongmdy{#1endyear}{#1endmonth}{#1endday}}}}% \dateuncertainprint}} {\printtext{% \mkbibdateapalong{#1year}{#1month}{#1day}% \dateeraprint{#1year}% \iffieldundef{#1endyear}% {}% {\iffieldequalstr{#1endyear}{}% open-ended range? {\bibdatedash\bibstring{present}} {\bibdatedash% \iffieldsequal{#1year}{#1endyear}% {\iffieldsequal{#1month}{#1endmonth}% {\iffieldsequal{#1day}{#1endday}% {}% {\mkbibdateapalong{}{}{#1endday}}}% {\mkbibdateapalong{}{#1endmonth}{#1endday}}}% {\mkbibdateapalong{#1endyear}{#1endmonth}{#1endday}% \dateeraprint{#1endyear}}}% \enddateuncertainprint}}}}% \endgroup} % Only for DATE as only \printdateextra is used \newcommand*{\mkdaterangeapalongextra}[1]{% \begingroup \blx@metadateinfo{#1}% \iffieldundef{#1year}{} {\printtext{% \datecircaprint \mkbibdateapalongextra{#1year}{#1month}{#1day}% \dateeraprint{#1year}% \dateuncertainprint \iffieldundef{#1endyear}% {}% {\iffieldequalstr{#1endyear}{}% open-ended range? {\bibdatedash\bibstring{present}} {\bibdatedash% \iffieldsequal{#1year}{#1endyear}% {\iffieldsequal{#1month}{#1endmonth}% {\iffieldsequal{#1day}{#1endday}% {}% {\mkbibdateapalongextra{}{}{#1endday}}} {\mkbibdateapalongextra{}{#1endmonth}{#1endday}}} {\mkbibdateapalongextra{#1endyear}{#1endmonth}{#1endday}% \dateeraprint{#1endyear}}}% \enddateuncertainprint}}}% \endgroup} \AtEndPreamble{% \renewcommand*{\datecircaprint}{% \ifdatecirca{\biblcstring{circa}\printdelim{datecircadelim}}{}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 8.12) sort citations % (APA 8.17) More than two authors is truncated to one but overriden for list ambiguity to % point of no ambiguity % (APA 8.20) Use initials to disambiguate shared surnames % (APA 8.19) Use year postfix to disambiguate multiple items in same year % (APA 9.44, 9.46, 9.47) Sorting is nyt but we need to account for PUBSTATE which comes % after all normal cites for the same author % (APA 9.42) Secular Before Common Era dates, approximate dates % (APA Figure 9.2) Sorting ignores punctuation in names % (APA 9.47) Ignore "The", "An" and "A" when sorting titles \DeclareNosort{ \nosort{setnames}{\regexp{\p{General_Category=Punctuation}}} \nosort{settitles}{\regexp{\A(?:The|An|A)\s+}} } \DeclareSortingTemplate{apa}{ \sort{ \field{presort} } \sort[final]{ \field{sortkey} } \sort{ \field{sortname} \field{author} \field{groupauthor} \field{editor} \field{sorttitle} \field{title} } \sort{ \field{pubstate} } \sort{ \field{sortyear} \field{year} \literal{-2000000000}% APA has "nodates" coming first } \sort{ \field{sorttitle} \field{title} } \sort{ \field{volume} \literal{0} } } % Include groupauthor \DeclareLabelname{% \field{shortauthor} \field{author} \field{groupauthor} \field{shorteditor} \field{editor} } % Don't fall back on other year fields if there is no year, use % "nodate" string \DeclareLabeldate{% \field{pubstate} \field{date} \field{year}%legacy - no ISO8601 support \literal{nodate} } \ExecuteBibliographyOptions{% abbreviate=true,% autocite=inline,% backref=true,% citetracker=true,% date=apalong,% dateabbrev=false,% datecirca=true,% dateera=secular,% dateuncertain=true,% eventdate=comp,% labeldate=apalong,% labeldateparts=true,% maxbibnames=20,% maxcitenames=2,% minbibnames=19,% mincitenames=1,% mincrossrefs=999,% maxitems=999,% origdate=apalong,% pagetracker=true,% sortcites=true,% sorting=apa,% uniquelist=minyear,% uniquename=init,% uniqueprimaryauthor=true,% urldate=apalong,% useprefix=true,% usetranslator=true,% usenarrator=true} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Enforce ignoring of PUBSTATE if there is a YEAR or DATE field % (APA 10.2:32) Remove PUBLISHER if it is the same as GROUPAUTHOR \DeclareStyleSourcemap{ \maps[datatype=bibtex]{ \map{ \step[fieldsource=year, final] \step[fieldset=pubstate, null] } \map{ \step[fieldsource=date, final] \step[fieldset=pubstate, null] } \map{ \step[typesource=hardware, typetarget=software, final] } \map{ \step[fieldsource=groupauthor, match=\regexp{([^{}]+)}, final] \step[fieldsource=publisher, match=\regexp{$1}, final]%$ \step[fieldset=publisher, null] } } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % It is not APA standard to have backrefs in the bib % Some users might like it though. \newbool{apa:backref} \DeclareBibliographyOption{apabackref}{% \ifstrequal{#1}{true} {\global\booltrue{apa:backref}} {\global\boolfalse{apa:backref}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Flag to say whether the "in" has % been placed already in IN* % Reset every bibitem. \newbool{bbx:in} \AtEveryBibitem{\global\boolfalse{bbx:in}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Set up some standard APA formats % General format of titles. Ugly Chicago-style lowercasing of English titles \DeclareFieldFormat{apacase}{\bbx@colon@search\MakeSentenceCase*{#1}} % HOWPUBLISHED \DeclareFieldFormat[unpublished]{howpublished}{\mkbibbrackets{% \ifbibstring{#1}{\bibcpstring{#1}}{#1}}} % TITLE \DeclareFieldFormat{title}{\mkbibemph{#1}\isdot} \DeclareFieldFormat[article]{title}{#1\isdot} \DeclareFieldFormat[inbook]{title}{#1\isdot} \DeclareFieldFormat[incollection]{title}{#1\isdot} \DeclareFieldFormat[inproceedings]{title}{\mkbibemph{#1}\isdot} \DeclareFieldFormat[proceedings]{title}{\mkbibemph{#1}\isdot} \DeclareFieldFormat[periodical]{title}{#1\isdot} \DeclareFieldFormat[thesis]{title}{\mkbibemph{#1}} \DeclareFieldFormat[patent]{title}{\mkbibemph{#1}} \DeclareFieldFormat[unpublished]{title}{\mkbibemph{#1}} \DeclareFieldFormat[image]{title}{\mkbibemph{#1}} \DeclareFieldFormat[misc]{title}{#1\isdot} \DeclareFieldFormat[audio]{title}{\iffieldundef{maintitle}{\mkbibemph{#1}\isdot}{#1}} \DeclareFieldFormat[video]{title}{\iffieldundef{maintitle}{\mkbibemph{#1}\isdot}{#1}} % TITLEADDON \DeclareFieldFormat{titleaddon}{\mkbibbrackets{\bbx@colon@search\MakeSentenceCase*{#1}}} % MAINTITLEADDON \DeclareFieldFormat{maintitleaddon}{\mkbibbrackets{\bbx@colon@search\MakeSentenceCase*{#1}}} % BOOKTITLEADDON \DeclareFieldFormat{booktitleaddon}{\mkbibbrackets{\bbx@colon@search\MakeSentenceCase*{#1}}} % ISSUETITLE \DeclareFieldFormat{issuetitle}{#1\isdot} \DeclareFieldFormat[periodical]{issuetitle}{\mkbibbrackets{#1}} % ORIGTITLE \DeclareFieldFormat{origtitle}{\mkbibemph{\bbx@colon@search\MakeSentenceCase*{#1}}\isdot} \DeclareFieldFormat[article]{origtitle}{\bbx@colon@search\MakeSentenceCase*{#1}\isdot} \DeclareFieldFormat[inbook]{origtitle}{\bbx@colon@search\MakeSentenceCase*{#1}\isdot} \DeclareFieldFormat[incollection]{origtitle}{\bbx@colon@search\MakeSentenceCase*{#1}\isdot} \DeclareFieldFormat[inproceedings]{origtitle}{\bbx@colon@search\MakeSentenceCase*{#1}\isdot} \DeclareFieldFormat[proceedings]{origtitle}{\bbx@colon@search\MakeSentenceCase*{#1}\isdot} % VOLUME \DeclareFieldFormat{volume}{\iffieldundef{maintitle} {\bibcpstring{volume}~\apanum{#1}} {\mkbibemph{\bibcpstring{volume}~\apanum{#1}}}} \DeclareFieldFormat[article]{volume}{\mkbibemph{\apanum{#1}}} \DeclareFieldFormat[periodical]{volume}{\mkbibemph{\apanum{#1}}} % VOLUMES \DeclareFieldFormat{volumes}{\bibcpstring{volumes}~#1} % CHAPTER \DeclareFieldFormat{chapter}{\bibcpstring{chapter}~\apanum{#1}} % NUMBER \DeclareFieldFormat{number}{\iffieldundef{volume} {\ifinteger{\thefield{number}} {\addspace\mkbibemph{\bibcpstring{number}~\apanum{#1}}\adddot} {\apanum{#1}}} {\mkbibemph{\apanum{#1}}}} \DeclareFieldFormat[report]{number}{\apanum{#1}} \DeclareFieldFormat[article]{number}{\mkbibparens{\apanum{#1}}} \DeclareFieldFormat[reprint]{number}{\mkbibbrackets{\apanum{#1}}} \DeclareFieldFormat[periodical]{number}{\mkbibparens{\apanum{#1}}} % PAGES \DeclareFieldFormat[inbook]{pages}{\mkpageprefix[bookpagination]{#1}} \DeclareFieldFormat[incollection]{pages}{\mkpageprefix[bookpagination]{#1}} \DeclareFieldFormat[periodical]{pages}{#1} % LOCATION \DeclareListFormat[misc]{location}{\mkbibemph{#1}} \DeclareListFormat[periodical]{location}{\mkbibemph{#1}} % NAMEADDON \DeclareFieldFormat[misc]{nameaddon}{\mkbibparens{#1}} % VERSION \DeclareFieldFormat[dataset]{version}{\bibcpstring{version}~#1} \DeclareFieldFormat[software]{version}{\bibcpstring{version}~#1} % URL \DeclareFieldFormat{url}{\url{#1}} \DeclareFieldFormat{urldate}{#1} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.47) Works by the same author have the full author % name, not an eliding dash. Author is always % last name first. % (APA 10.1:4) Ellipsis from 20th position and then nothing until last % (APA 9.x) Unknown names and dates % (APA 9.8) Two group authors drop the comma in between % \printnames does different things depending on whether the format you are % calling is the default for the name field or is a custom format: % % * Default format (e.g. "labelname" format for printing labelname): no % start/stop max/minnames truncation is done first - the format is % supposed to do it. % * Custom format (e.g. "labelname" format for printing author): % max/minnames truncation is done before calling the format so we have % to do \printnames[format][-\value{listtotal}]{field} to ensure we get % all of the names in the list to work on % It's not completely obvious but it's implied that names identical apart from a suffix % are to be treated as different name lists for extradate calculation so we add suffix % to the default definition \DeclareUniquenameTemplate{ \namepart[use=true, base=true]{prefix} \namepart[base=true]{family} \namepart{given} \namepart{suffix} } \DeclareNameAlias{default}{apaauthor} \DeclareNameFormat{apaauthor}{% \ifthenelse{\value{listcount}=\maxprtauth\AND\value{listcount}<\value{listtotal}} {\addcomma\space\ldots\space} {\ifthenelse{\value{listcount}>\maxprtauth\AND\value{listcount}<\value{listtotal}} {} {\printtext{\usebibmacro{name:apa:family-given}% {\namepartfamily}% {\namepartgiven}% {\namepartgiveni}% {\namepartprefix}% {\namepartsuffix}}% \let\bibstring\bibcplstring \setunit{\addspace}% \printtext{\mkbibparense{\usebibmacro{role}}}% \hasitemannotation[\currentname][username]{\addspace\mkbibbrackets{\getitemannotation[\currentname][username]}}{}}}% \ifthenelse{\value{listcount}=\value{listtotal}}% {\ifmorenames {\printdelim{andothersdelim} \bibstring{andothers}} {}% \let\bibstring\bibcplstring \setunit{\addspace}% \printtext{\mkbibparense{\usebibmacro{roles}}}} {}} \DeclareNameFormat{apanames}{% \ifthenelse{\value{listcount}=\maxprtauth\AND\value{listcount}<\value{listtotal}} {\addcomma\space\ldots\space} {\ifthenelse{\value{listcount}>\maxprtauth\AND\value{listcount}<\value{listtotal}} {} {\printtext{\usebibmacro{name:apa:given-family}% {\namepartfamily}% {\namepartgiven}% {\namepartgiveni}% {\namepartprefix}% {\namepartsuffix}}% \let\bibstring\bibcpsstring \setunit{\addcomma\addspace}% \usebibmacro{role}}}% \ifthenelse{\value{listcount}=\value{listtotal}}% {\ifmorenames {\printdelim{andothersdelim}% \bibstring{andothers}} {}% \let\bibstring\bibcplstring \setunit{\addspace}% \usebibmacro{roles}} {}} \renewbibmacro*{author/editor}{% \ifthenelse{\ifnameundef{author}\AND\ifnameundef{groupauthor}} {\ifnameundef{editor} {\usebibmacro{title}% % need to clear all title fields so we don't get them again later \clearfield{title}% \clearfield{subtitle}% \clearfield{titleaddon}} {\usebibmacro{editorinauthpos}}} {\usebibmacro{author}}% \newunit\newblock% \usebibmacro{labelyear+extradate}} \newbibmacro*{editorinauthpos}{% \printnames[apaauthor][-\value{listtotal}]{editor}% \setunit{\addspace}% \ifnameundef{editor} {} {\printtext[parens]{\usebibmacro{apaeditorstrg}{editor}}% % need to clear editor so we don't get an "In" clause later \clearname{editor}}} \renewbibmacro*{author}{% \ifnameundef{author} {\printnames[apaauthor][-\value{listtotal}]{groupauthor}} {\printnames[apaauthor][-\value{listtotal}]{author}}% \setunit*{\addspace}% \printfield{nameaddon}% \ifnameundef{with} {} {\setunit{}\addspace\mkbibparens{\printtext{\bibstring{with}\addspace}% \printnames[apaauthor][-\value{listtotal}]{with}} \setunit*{\addspace}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.8) Author delimiters are ampersands before final author % Long author lists % Serial comma for lists of three or more % Ampersand only (no comma) between two group authors \DeclareDelimFormat[bib,biblist]{finalnamedelim}{% \ifthenelse{\value{listcount}>\maxprtauth} {} {\ifthenelse{\value{liststop}>2} {\finalandcomma\addspace\&\space} {\addspace\&\space}}} \DeclareDelimFormat[bib,biblist]{finalnamedelim:apa:family-given}{% \ifthenelse{\value{listcount}>\maxprtauth} {} {\ifthenelse{\ifcurrentname{groupauthor}\AND% \value{liststop}=2} {\addspace\&\space} {\finalandcomma\addspace\&\space}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.47) Use "nodate" bibstring for references with no year % Months and days go into parenthesis with year, if set % (APA 8.13, 10.2) circa or uncertain dates in brackets % Make sure endmonth gets an expansion too \DeclareFieldFormat{endmonth}{\mkbibmonth{#1}} \newbibmacro*{labelyear+extradate}{% \iffieldundef{labelyear} {\iffieldundef{origyear} {} {\printtext[apadate]{\printorigdate}}}% {\printtext[apadate]{\printlabeldateextra}}} \DeclareFieldFormat{apadate}{% \ifboolexpr{ test {\ifdatecirca} or test {\ifdateuncertain} } {\printtext{\mkbibbrackets{#1}}} {\printtext{\mkbibparens{#1}}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.5) Conference event information \newbibmacro*{eventinfo}{% \printfield{eventtitle}% \setunit{\addcomma\addspace}% \usebibmacro{location+publisher}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.25) No prefix for pages \DeclareFieldFormat{pages}{#1} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.52) References in a meta-analysis % Dates ignore month/day in nonacademic % articles \renewbibmacro*{begentry}{% \ifkeyword{meta}{\textsuperscript{*}}{}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Title and additional post title information \renewbibmacro*{title}{% \ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}} {\printfield{titleaddon}} {\iffieldundef{origtitle} {\printtext[title]{% \printfield[apacase]{title}% \setunit{\subtitlepunct}% \printfield[apacase]{subtitle}}} {\printfield{origtitle}% \setunit{\addspace}% \printtext[brackets]{% \printfield[apacase]{title}% \setunit{\subtitlepunct}% \printfield[apacase]{subtitle}}}% \setunit{\addspace}% \ifentrytype{inbook}{}{\usebibmacro{addinfo1}}% additional info in parens \setunit{\addspace}% \iffieldundef{related} {} {\ifthenelse{\iffieldequalstr{relatedtype}{reviewofbook}\OR% \iffieldequalstr{relatedtype}{reviewoffilm}\OR% \iffieldequalstr{relatedtype}{reviewoftv}\OR% \iffieldequalstr{relatedtype}{commentonarticle}} {\usebibmacro{related:init}% \usebibmacro{related}% \togglefalse{bbx:related}}% disable default related expansion later on {}}% \setunit{\addspace}% \printfield{titleaddon}% \setunit{\addspace}% \usebibmacro{addinfo2}}}% \newbibmacro*{addinfo1}{% \printtext{% \mkbibparense{% \usebibmacro{editor+trans+narr}% \setunit*{\addsemicolon\addspace}% \printfield{edition}% \setunit*{\addcomma\addspace}% \ifthenelse{\ifentrytype{report}\OR% \ifentrytype{thesis}\OR% \ifentrytype{unpublished}\OR% \ifentrytype{dataset}\OR% \ifentrytype{software}\OR% \ifentrytype{audio}\OR% \ifentrytype{patent}\OR% \ifentrytype{image}}{\usebibmacro{addinfo3}}{}% \setunit*{\addcomma\addspace}% \ifentrytype{inbook}{\printfield{pages}}{}% \setunit*{\addcomma\addspace}% \ifentrytype{book}{\printfield{volumes}}{}% \setunit*{\addcomma\addspace}% \ifentrytype{book}{\printfield{volume}}{}}}} % Additional post title information in brackets \newbibmacro*{addinfo2}{% \printtext{% \mkbibbracketse{% \iffieldbibstring{entrysubtype} {\bibcplstring{\thefield{entrysubtype}}} {\printfield{entrysubtype}}% \setunit*{\addsemicolon\addspace}% \printfield{note}}}} % number/issue information \newbibmacro*{addinfo3}{% \iffieldundef{type} {\iffieldundef{issue} {\iffieldnums{number}{\bibcpstring{number}~}{}\printfield{number}} {\printfield{issue}\setunit{\addspace}% \iffieldundef{number} {} {\iffieldnums{number}{\bibcpstring{number}~}{}\printfield{number}}}} {\printfield{type}\setunit{\addspace}% \iffieldundef{number} {} {\iffieldnums{number}{\bibcpstring{number}~}{}\printfield{number}}}% \ifthenelse{\ifentrytype{dataset}\OR\ifentrytype{software}} {\setunit*{\addsemicolon\addspace}% \printfield{version}} {}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.1 Example 6) eprints (eLocator) \renewbibmacro*{eprint}{% \iffieldundef{eprinttype} {} {\printtext{% \iffieldbibstring{eprinttype}{\bibcpstring{\strfield{eprinttype}}}{\strfield{eprinttype}}% \setunit{\addspace}}}% \printfield{eprint}} \DeclareFieldFormat{eprint}{#1} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10) Commas between title and volume for articles % (APA 10.6) eLocator is part of journal info \renewbibmacro*{journal+issuetitle}{% \usebibmacro{journal}% \setunit*{\addcomma\addspace}% \printfield{volume}% \printfield{number}% \setunit*{\addcomma\addspace}% \usebibmacro{eprint}% \newunit\newblock \usebibmacro{issuename}% \newunit} \newbibmacro*{issuename}{% \iffieldundef{issuetitle} {} {\printtext[issuetitle]{% \printfield[noformat]{issuetitle}% \setunit{\subtitlepunct}% \printfield[noformat]{issuesubtitle}}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % "In" precedes editor/trans list, no colon % Use a flag to track as it could be inserted in more % than one potential location \newbibmacro*{in}{% \ifbool{bbx:in}% {}% {\global\booltrue{bbx:in}% \bibcpstring{in}\setunit{\space}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Names % Individual name roles \newbibmacro*{role}{% \hasitemannotation[\currentname][role]% {\getitemannotation[\currentname][role]} {\ifitemannotation[\currentname][role]{writer} {\bibstring{writer}% \setunit{\addspace\&\addspace}} {}% \ifitemannotation[\currentname][role]{director} {\bibstring{director}% \setunit{\addspace\&\addspace}} {}% \ifitemannotation[\currentname][role]{execproducer} {\bibstring{execproducer}% \setunit{\addspace\&\addspace}} {}% \ifitemannotation[\currentname][role]{producer} {\bibstring{producer}% \setunit{\addspace\&\addspace}} {}% \ifitemannotation[\currentname][role]{host} {\bibstring{host}% \setunit{\addspace\&\addspace}} {}% \ifitemannotation[\currentname][role]{chair} {\bibstring{chair}% \setunit{\addspace\&\addspace}} {}% \ifitemannotation[\currentname][role]{guestexpert} {\bibstring{guestexpert}% \setunit{\addspace\&\addspace}} {}}% \setunit{}} % roles for complete name lists \newbibmacro*{roles}{% \hasfieldannotation[\currentname][role]% {\getfieldannotation[\currentname][role]} {\iffieldannotation[\currentname][role]{writers} {\bibstring{writers}% \setunit{\addspace\&\addspace}} {}% \iffieldannotation[\currentname][role]{directors} {\bibstring{directors}% \setunit{\addspace\&\addspace}} {}% \iffieldannotation[\currentname][role]{execproducers} {\bibstring{execproducers}% \setunit{\addspace\&\addspace}} {}% \iffieldannotation[\currentname][role]{producers} {\bibstring{producers}% \setunit{\addspace\&\addspace}} {}% \iffieldannotation[\currentname][role]{hosts} {\bibstring{hosts}% \setunit{\addspace\&\addspace}} {}% \iffieldannotation[\currentname][role]{chairs} {\bibstring{chairs}% \setunit{\addspace\&\addspace}} {}% \iffieldannotation[\currentname][role]{guestexperts} {\bibstring{guestexperts}% \setunit{\addspace\&\addspace}} {}}% \setunit{}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Name format % #1 = family name % #2 = given name % #3 = given name (initials) % #4 = name prefix % #5 = name suffix \newbibmacro*{name:delim:apa:family-given}[1]{% \ifnumgreater{\value{listcount}}{\value{liststart}} {\ifboolexpr{ test {\ifnumless{\value{listcount}}{\value{liststop}}} or test \ifmorenames } {\printdelim{multinamedelim}} {\printdelim{finalnamedelim:apa:family-given}}} {}} \newbibmacro*{name:apa:family-given}[5]{% \ifuseprefix {\usebibmacro{name:delim:apa:family-given}{#4#1}% \usebibmacro{name:hook}{#4#1}% \ifdefvoid{#4}{}{% \mkbibnameprefix{#4}\isdot% \ifprefchar{}{\bibnamedelimc}}% \mkbibnamefamily{#1}\isdot% \ifdefvoid{#2}{}{\revsdnamepunct\bibnamedelimd\mkbibnamegiven{#3}\isdot% \ifthenelse{\value{uniquename}>1} {\bibnamedelimd\mkbibbrackets{#2}} {}}% \ifdefvoid{#5}{}{\addcomma\bibnamedelimd\mkbibnamesuffix{#5}\isdot}} {\usebibmacro{name:delim:apa:family-given}{#1}% \usebibmacro{name:hook}{#1}% \mkbibnamefamily{#1}\isdot \ifboolexpe{% test {\ifdefvoid{#2}} and test {\ifdefvoid{#4}}} {} {\revsdnamepunct}% \ifdefvoid{#2}{}{\bibnamedelimd\mkbibnamegiven{#3}% \ifthenelse{\value{uniquename}>1} {\bibnamedelimd\mkbibbrackets{#2}} {}}% \ifdefvoid{#4}{}{% \bibnamedelimc\mkbibnameprefix{#4}% \ifprefchar{}{\bibnamedelimc}}% \ifdefvoid{#5}{}{\addcomma\bibnamedelimd\mkbibnamesuffix{#5}\isdot}}} \newbibmacro*{name:apa:given-family}[5]{% \usebibmacro{name:delim}{#2#4#1#5}% \usebibmacro{name:hook}{#2#4#1#5}% \ifdefvoid{#2}{}{\mkbibnamegiven{#3}\isdot% \ifthenelse{\value{uniquename}>1} {\bibnamedelimd\mkbibbrackets{#2}} {}% \bibnamedelimd}% \ifdefvoid{#4}{}{% \mkbibnameprefix{#4}\isdot \ifprefchar{}{\bibnamedelimc}}% \mkbibnamefamily{#1}\isdot% \ifdefvoid{#5}{}{\bibnamedelimd\mkbibnamesuffix{#5}\isdot}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.10) Role strings in parens after author list % Collapse roles if same person % (APA 10.1 Example 10) Translator % (APA 10.2 Example 22) Narrator \newbibmacro*{editor+trans+narr}{% \ifthenelse{\ifnameundef{editor}\AND% \ifnameundef{editora}\AND% \ifnameundef{editorb}\AND% \ifnameundef{editorc}\AND% \ifnameundef{translator}\AND% \ifnameundef{narrator}}% {\printtext{}}% Print nothing, so the puncutation tracker is kept informed {\ifnamesequal{editor}{translator}% {\printnames[apanames][-\value{listtotal}]{editor}% \setunit*{\addcomma\addspace}% \usebibmacro{apaeditorstrg}{editor}% \setunit*{\addspace\&\space}% \printtext{\bibcpstring{translator}}} {\ifnameundef{editor}% {}% {\printnames[apanames][-\value{listtotal}]{editor}% \setunit{\addcomma\addspace}% \usebibmacro{apaeditorstrg}{editor}% \clearname{editor}% \setunit*{\addspace\&\space}}% \ifnameundef{translator}% {\setunit{}}% {\printnames[apanames][-\value{listtotal}]{translator}% \setunit{\addcomma\addspace}% \printtext{\bibcpstring{translator}}% \clearname{translator}}% \ifnameundef{narrator}% {\setunit{}}% {\printnames[apanames][-\value{listtotal}]{narrator}% \setunit{\addcomma\addspace}% \printtext{\bibcpstring{narrator}}% \clearname{narrator}}}}} \newbibmacro*{editor+trans}{% \ifthenelse{\ifnameundef{editor}\AND% \ifnameundef{editora}\AND% \ifnameundef{editorb}\AND% \ifnameundef{editorc}\AND% \ifnameundef{translator}}% {\setunit{\adddot\addspace}}% {\ifnamesequal{editor}{translator}% {\usebibmacro{in}% \printnames[apanames][-\value{listtotal}]{editor}% \setunit{\addspace}% \printtext[parens]{% \usebibmacro{apaeditorstrg}{editor}% \setunit*{\addspace\&\space}% \bibcpstring{translator}}} {\ifnameundef{translator}% {}% {\setunit{\addspace}% \printtext[parens]{\printnames[apanames][-\value{listtotal}]{translator}% \setunit{\addcomma\addspace}% \bibcpstring{translator}}% \clearname{translator}% \setunit{\adddot\addspace}}% \usebibmacro{in}% \usebibmacro{editorx}}% \setunit{\addcomma\addspace}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Special journal issues are periodicals \renewbibmacro*{periodical}{% \iffieldundef{title} {} {\printtext[title]{% \printfield[apacase]{title}% \setunit{\subtitlepunct}% \printfield[apacase]{subtitle}}}} \renewbibmacro*{title+issuetitle}{% \usebibmacro{periodical}% \setunit{\addspace}% \printfield{issuetitle}}% \newbibmacro*{pnumber}{% \printfield{volume}% \printfield{number}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.1 Example 10) Original year % Only give ORIGYEAR in references if both: % YEAR is also given % YEAR and ORIGYEAR are different \newbibmacro*{origyear}{% \ifboolexpr{% not test {\iffieldundef{origyear}} not test {\iffieldundef{labelyear}} and not test {\iffieldsequal{labelyear}{origyear}}} {\printtext{\mkbibparens{\bibcpstring{origyear}~\printorigdate}}% \renewcommand*{\finentrypunct}{\relax}} {}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.3) Reference work references \renewbibmacro*{maintitle+title}{% \iffieldsequal{maintitle}{title} {\clearfield{maintitle}% \clearfield{mainsubtitle}% \clearfield{maintitleaddon}} {\iffieldundef{maintitle} {} {\usebibmacro{maintitle}% \newunit\newblock \iffieldundef{volume} {} {\printfield{volume}% \printfield{part}% \setunit{\adddot\space}}}}% \usebibmacro{title}% \newunit} \renewbibmacro*{maintitle+booktitle}{% \ifthenelse{\iffieldundef{maintitle}\AND\iffieldundef{booktitle}} {} {\usebibmacro{in}% \iffieldundef{maintitle} {} {\usebibmacro{maintitle}% \newunit\newblock \iffieldundef{volume} {} {\printfield{volume}% \printfield{part}% \setunit{\adddot\addspace}}}% \usebibmacro{booktitle}% \setunit{\addspace}% \usebibmacro{addinfo1}}} \renewbibmacro*{maintitle}{% \ifthenelse{\iffieldundef{maintitle}\AND\iffieldundef{mainsubtitle}} {} {\printtext[maintitle]{% \printfield[apacase]{maintitle}% \setunit{\subtitlepunct}% \printfield[apacase]{mainsubtitle}}% \setunit{\addspace}} \printfield{maintitleaddon}} \renewbibmacro*{booktitle}{% \ifthenelse{\iffieldundef{booktitle}\AND\iffieldundef{booksubtitle}} {} {\printtext[booktitle]{% \printfield[apacase]{booktitle}% \setunit{\subtitlepunct}% \printfield[apacase]{booksubtitle}}% \setunit{\addspace}}% \printfield{booktitleaddon}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Colon separates title/subtitle % Skip if following terminating punctuation \renewcommand*{\subtitlepunct}{\ifterm{}{\addcolon}\space} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.2.24) Multiple publishers, semi-colon sep \DeclareListFormat{publisher}{% \usebibmacro{publisher:delim}{#1}% #1\isdot} \newbibmacro*{publisher:delim}[1]{% \ifnumgreater{\value{listcount}}{\value{liststart}} {\printdelim[publisher]{multilistdelim}} {}} \DeclareDelimFormat[publisher]{multilistdelim}{\addsemicolon\space} \DeclareDelimFormat[publisher]{finallistdelim}{\addsemicolon\space} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%% % (APA 10.10) Software \newbibmacro*{appentry}{% \iffieldundef{appentry} {\newunit\newblock} {\printfield[apacase]{appentry}% \newunit\newblock \usebibmacro{in}% \setunit{\addspace}}} % %%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.1 Example 18) Comment on article \newcommand*{\begrelateddelimcommentonarticle}{\addspace} \DeclareFieldFormat{related:commentonarticle}{\def\bibstring{\blx@imc@bibcpstring}\mkbibbrackets{#1}} \renewbibmacro*{related:commentonarticle}[1]{% \entrydata*{#1}{% \printtext{\mkbibquote{\printfield[apacase]{title}}}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.7) Reviews - role strings need to be the % short versions in reviews \newcommand*{\begrelateddelimreviewofbook}{\addspace} \DeclareFieldFormat{related:reviewofbook}{\def\bibstring{\blx@imc@bibcpsstring}\mkbibbrackets{#1}} \newbibmacro*{related:reviewofbook}[1]{\usebibmacro{related:reviewofx}{#1}} \newcommand*{\begrelateddelimreviewoffilm}{\addspace} \DeclareFieldFormat{related:reviewoffilm}{\def\bibstring{\blx@imc@bibcpsstring}\mkbibbrackets{#1}} \newbibmacro*{related:reviewoffilm}[1]{\usebibmacro{related:reviewofx}{#1}} \newcommand*{\begrelateddelimreviewoftv}{\addspace} \DeclareFieldFormat{related:reviewoftv}{\def\bibstring{\blx@imc@bibcpsstring}\mkbibbrackets{#1}} \newbibmacro*{related:reviewoftv}[1]{\usebibmacro{related:reviewofx}{#1}} \DeclareFieldFormat{reviewtitle}{% \iffieldequalstr{entrysubtype}{tvepisode} {\mkbibquote{\bbx@colon@search\MakeSentenceCase*{#1}}} {\bbx@colon@search\MakeSentenceCase*{#1}}} \newbibmacro*{related:reviewofx}[1]{% \entrydata*{#1}{% \printtext{\mkbibemph{% \printfield[reviewtitle]{title}% \iffieldundef{subtitle} {} {\setunit{\addcolon\addspace}% \printfield[reviewtitle]{subtitle}}}% \setunit{\addcomma\addspace}% \biblstring{byauthor}% \setunit{\addspace}% \printnames[apanames][-\value{listtotal}]{author}}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.13) Audio \newbibmacro*{mainaudio}{% \iffieldundef{maintitle}{} {\iffieldequalstr{entrysubtype}{podcastepisode}{\bibcpstring{in}}{\bibcpstring{on}}% \setunit{\addspace}% \printfield{maintitle}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.12) Audiovisual \newbibmacro*{mainvideo}{% \iffieldundef{maintitle}{} {\usebibmacro{in}% \printnames[apanames][-\value{listtotal}]{execproducer}% \setunit{\addspace}% \printtext{\mkbibparens{\bibcplstring{execproducers}}}% \setunit{\addcomma\addspace}% \printfield{maintitle}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Related entries % % Have to force capitlisation bibstring variant because the delim % has no printable char and this breaks default capitalisation % Suppress final period after reprints in parens \renewbibmacro*{endrelated}{% \iffieldequalstr{relatedtype}{reprintfrom} {\renewcommand*{\finentrypunct}{\relax}} {}} \newcommand*{\begrelateddelimreprintfrom}{\addperiod\addspace} \DeclareFieldFormat{related:reprintfrom}{\let\bibstring\bibcpstring\mkbibparens{#1}} \DeclareFieldFormat{related:reviewof}{\mkbibbrackets{#1}} \renewbibmacro*{related:reprintfrom}[1]{% \entrydata*{#1}{% \ifentrytype{article} {\mkbibquote{% \printfield[apacase]{title}% \setunit{\subtitlepunct}% \printfield[apacase]{subtitle}}% \setunit{\addcomma\addspace}% \printlabeldateextra \setunit{\addcomma\addspace}% \usebibmacro{journal}% \setunit*{\addcomma\addspace}% \printfield{volume}% \printfield[reprint]{number}% \setunit*{\addcomma\addspace}% \usebibmacro{eprint}% \setunit{\addcomma\addspace}% \iffieldundef{issuetitle} {} {\printtext[issuetitle]{% \printfield[noformat]{issuetitle}% \setunit{\subtitlepunct}% \printfield[noformat]{issuesubtitle}}}% \setunit{\addcomma\addspace}% \printfield{pages}% \setunit{\addcomma\addspace}% \printfield{note}% \setunit{\addcomma\addspace}% \usebibmacro{location+publisher}% \setunit{\addcomma\addspace}% \usebibmacro{doi+url}% \setunit{}} {\ifentrytype{incollection} {\mkbibemph{% \printfield[apacase]{title}% \setunit{\subtitlepunct}% \printfield[apacase]{subtitle}}% \setunit{\addcomma\addspace}% \printfield{pages}% \setunit{\addcomma\addspace}% \biblstring{byauthor}\space \printnames[apanames][-\value{listtotal}]{editor}% \setunit{\addcomma\addspace}% \usebibmacro{apaeditorstrg}{editor}% \setunit{\addcomma\addspace}% \printlabeldateextra \setunit{\addcomma\addspace}% \usebibmacro{location+publisher}% \setunit{\addcomma\addspace}% \usebibmacro{doi+url}% \setunit{}} {}}}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 9.51) Annotations \renewbibmacro*{annotation}{% \iffieldundef{annotation} {} {\begingroup \togglefalse{blx@bibliography}% \newline \setunit{}% \printfield{annotation}% \endgroup}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (APA 10.x) General entrytype drivers % Custom driver to make a cleaner example for 9.44 \DeclareBibliographyDriver{nameonly}{% \usebibmacro{begentry}% \printnames[apaauthor][-\value{listtotal}]{author}% \usebibmacro{finentry}} \DeclareBibliographyDriver{article}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{journal+issuetitle}% \setunit{\bibpagespunct}% \printfield{pages}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{doi+url}% \newblock \usebibmacro{origyear}% \newunit\newblock \printfield{addendum}% \setunit{\addspace}\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{audio}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{mainaudio}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \usebibmacro{origyear}% \newunit\newblock \printfield{addendum}% \setunit{\addspace}\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{book}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{maintitle+title}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \usebibmacro{origyear}% \newunit\newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{dataset}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \printfield{type}% \newunit \printfield{note}% \newunit\newblock \printlist{organization}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \printlist{institution}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{image}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{inbook}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{editor+trans}% \newblock \usebibmacro{maintitle+booktitle}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \usebibmacro{origyear}% \newunit\newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{incollection}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{editor+trans}% \setunit*{\addcomma\addspace}\newblock \usebibmacro{maintitle+booktitle}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{origyear}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{inproceedings}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{editor+trans}% \setunit*{\addcomma\addspace}\newblock \usebibmacro{maintitle+booktitle}% \newunit\newblock \usebibmacro{eventinfo}% \newunit\newblock \printfield{note}% \newunit\newblock \printlist{organization}% \newunit \printfield{venue}% \iffieldundef{pages} {\setunit{\addcomma\addspace}} {\newunit}% \newblock \usebibmacro{origyear}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{manual}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \printfield{type}% \newunit \printfield{version}% \newunit \printfield{note}% \newunit\newblock \printlist{organization}% \newunit \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{misc}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{online}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \printlist{organization}% \addperiod\addspace \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{patent}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{doi+url}% \newunit\newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{finentry}} \DeclareBibliographyDriver{periodical}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title+issuetitle}% \setunit{\adddot\addspace} \usebibmacro{journal}% \setunit{\addcomma\addspace} \printlist{location}% \setunit{\addcomma\addspace} \usebibmacro{pnumber}% \setunit{\addcomma\addspace} \printfield{pages}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{doi+url}% \newunit\newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{proceedings}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{eventinfo}% \setunit{\addcomma\addspace}% \usebibmacro{booktitle}% \setunit{\addcomma\addspace}% \printfield{volume}% \setunit*{\adddot}% \printfield{number}% \setunit{\addcomma\addspace} \printfield{pages}% \newunit\newblock \printfield{note}% \newunit\newblock \printlist{organization}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{report}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \printlist{institution}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{software}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{appentry}% \usebibmacro{title}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{thesis}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \printlist{institution}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{doi+url}% \newunit\newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{unpublished}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \setunit{\addspace}% \printfield{howpublished}% \newunit\newblock \printlist{location}% \setunit{\addcomma\addspace} \printlist{institution}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} \DeclareBibliographyDriver{video}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor}% \setunit{\printdelim{nametitledelim}}\newblock \usebibmacro{title}% \newunit\newblock \usebibmacro{mainvideo}% \newunit\newblock \usebibmacro{location+publisher}% \newunit\newblock \usebibmacro{doi+url}% \newblock \printfield{addendum}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{apa:pageref}% \usebibmacro{annotation}% \usebibmacro{finentry}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Modified, common macros \newbibmacro*{editorx}{% \ifnameundef{editor} {} {\printnames[apanames][-\value{listtotal}]{editor}% \setunit{\addspace}% \printtext[parens]{\usebibmacro{apaeditorstrg}{editor}} \clearname{editor}% \newunit}% \ifnameundef{editora} {} {\printnames[apanames][-\value{listtotal}]{editora}% \setunit{\addspace}% \printtext[parens]{\usebibmacro{apaeditorstrg}{editora}} \clearname{editora}% \newunit}% \ifnameundef{editorb} {} {\printnames[apanames][-\value{listtotal}]{editorb}% \setunit{\addspace}% \printtext[parens]{\usebibmacro{apaeditorstrg}{editorb}} \clearname{editorb}% \newunit}% \ifnameundef{editorc} {} {\printnames[apanames][-\value{listtotal}]{editorc}% \setunit{\addspace}% \printtext[parens]{\usebibmacro{apaeditorstrg}{editorc}} \clearname{editorc}% \newunit}} \newbibmacro*{apaeditorstrg}[1]{% \iffieldundef{#1type} {\ifthenelse{\value{#1}>1\OR\ifandothers{#1}} {\bibcpstring{editors}} {\bibcpstring{editor}}} {\ifthenelse{\value{#1}>1\OR\ifandothers{#1}} {\bibcpstring{type\thefield{#1type}s}} {\bibcpstring{type\thefield{#1type}}}}} %(APA 9.35) No periods after URLS \newbibmacro*{doi+url}{% \iffieldundef{doi} {\iffieldundef{url}{\newunit}{\usebibmacro{url+urldate}\setunit{\addspace}}} {\printfield{doi}\renewcommand*{\finentrypunct}{\relax}\setunit{\addspace}}} \renewbibmacro*{url+urldate}{% \ifthenelse{\iffieldundef{url}\OR\NOT\iffieldundef{doi}} {} {\iffieldundef{urlyear} {} {\printtext{\bibstring{retrieved}}% \addspace \printurldate \setunit{\urldatecomma}% \bibstring{from}% \setunit{\addspace}}% \iffieldundef{url}{}{\printfield{url}\renewcommand*{\finentrypunct}{\relax}}}} \DeclareFieldFormat{doi}{% \ifhyperref {\href{https://doi.org/#1}{\nolinkurl{https://doi.org/#1}}} {\nolinkurl{https://doi.org/#1}}} \newbibmacro*{location+publisher}{% \printlist{location}% \setunit*{\addcomma\space}% \printlist{publisher}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Wrapper for backrefs \newbibmacro{apa:pageref}{% \ifbool{apa:backref}{\usebibmacro{pageref}}{}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Unchanged from authoryear-comp \DeclareBibliographyOption{dashed}[true]{% \ifstrequal{#1}{true} {\ExecuteBibliographyOptions{pagetracker}% \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}} {\ExecuteBibliographyOptions{pagetracker=false}% \renewbibmacro*{bbx:savehash}{}}} \DeclareFieldFormat{shorthandwidth}{#1} \setlength{\bibitemsep}{0pt} \defbibenvironment{bibliography} {\list {} {\setlength{\leftmargin}{\bibhang}% \setlength{\itemindent}{-\leftmargin}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}} {\endlist} {\item} \defbibenvironment{shorthands} {\list {\printfield[shorthandwidth]{shorthand}} {\setlength{\labelwidth}{\shorthandwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}% \renewcommand*{\makelabel}[1]{##1\hss}}} {\endlist} {\item} \InitializeBibliographyStyle{% \global\undef\bbx@lasthash} \newbibmacro*{bbx:savehash}{% \savefield{fullhash}{\bbx@lasthash}} \newbool{bbx@inset} \DeclareBibliographyDriver{set}{% \booltrue{bbx@inset}% \entryset{}{}% \newunit\newblock \usebibmacro{setpageref}% \finentry} \endinput