220 lines
6.1 KiB
TeX
220 lines
6.1 KiB
TeX
\ProvidesFile{acmauthoryear.cbx}[2022-02-14 v0.1]
|
|
|
|
\RequireCitationStyle{authoryear-comp}
|
|
\RequirePackage{xpatch}
|
|
|
|
%
|
|
% Hyperlink citations like acmart natbib implementation
|
|
%
|
|
% From https://tex.stackexchange.com/a/27615/133551
|
|
|
|
% Combine label and labelyear links
|
|
\xpatchbibmacro{cite}
|
|
{\usebibmacro{cite:label}%
|
|
\setunit{\printdelim{nonameyeardelim}}%
|
|
\usebibmacro{cite:labeldate+extradate}}
|
|
{\printtext[bibhyperref]{%
|
|
\DeclareFieldAlias{bibhyperref}{default}%
|
|
\usebibmacro{cite:label}%
|
|
\setunit{\printdelim{nonameyeardelim}}%
|
|
\usebibmacro{cite:labeldate+extradate}}}
|
|
{}
|
|
{\PackageWarning{biblatex-patch}
|
|
{Failed to patch cite bibmacro}}
|
|
|
|
% Include labelname in labelyear link
|
|
\xpatchbibmacro{cite}
|
|
{\printnames{labelname}%
|
|
\setunit{\printdelim{nameyeardelim}}%
|
|
\usebibmacro{cite:labeldate+extradate}}
|
|
{\printtext[bibhyperref]{%
|
|
\DeclareFieldAlias{bibhyperref}{default}%
|
|
\printnames{labelname}%
|
|
\setunit{\printdelim{nameyeardelim}}%
|
|
\usebibmacro{cite:labeldate+extradate}}}
|
|
{}
|
|
{\PackageWarning{biblatex-patch}
|
|
{Failed to patch cite bibmacro}}
|
|
|
|
\renewbibmacro*{textcite}{%
|
|
\iffieldequals{namehash}{\cbx@lasthash}
|
|
{\iffieldundef{shorthand}
|
|
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
|
|
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
|
|
{\setunit{\addcomma}%
|
|
\usebibmacro{cite:extradate}}
|
|
{\setunit{\compcitedelim}%
|
|
\usebibmacro{cite:labeldate+extradate}%
|
|
\savefield{labelyear}{\cbx@lastyear}}}
|
|
{\setunit{\compcitedelim}%
|
|
\usebibmacro{cite:shorthand}%
|
|
\global\undef\cbx@lastyear}}
|
|
{\ifnameundef{labelname}
|
|
{\iffieldundef{shorthand}
|
|
{\usebibmacro{cite:label}%
|
|
\setunit{%
|
|
\global\booltrue{cbx:parens}%
|
|
\printdelim{nonameyeardelim}\bibopenbracket}%
|
|
\ifnumequal{\value{citecount}}{1}
|
|
{\usebibmacro{prenote}}
|
|
{}%
|
|
\usebibmacro{cite:labeldate+extradate}}
|
|
{\usebibmacro{cite:shorthand}}}
|
|
{\printnames{labelname}%
|
|
\setunit{%
|
|
\global\booltrue{cbx:parens}%
|
|
\printdelim{nameyeardelim}\bibopenbracket}%
|
|
\ifnumequal{\value{citecount}}{1}
|
|
{\usebibmacro{prenote}}
|
|
{}%
|
|
\iffieldundef{shorthand}
|
|
{\iffieldundef{labelyear}
|
|
{\usebibmacro{cite:label}}
|
|
{\usebibmacro{cite:labeldate+extradate}}%
|
|
\savefield{labelyear}{\cbx@lastyear}}
|
|
{\usebibmacro{cite:shorthand}%
|
|
\global\undef\cbx@lastyear}}%
|
|
\stepcounter{textcitecount}%
|
|
\savefield{namehash}{\cbx@lasthash}}%
|
|
\setunit{%
|
|
\ifbool{cbx:parens}
|
|
{\bibclosebracket\global\boolfalse{cbx:parens}}
|
|
{}%
|
|
\textcitedelim}}
|
|
|
|
\xpatchbibmacro{textcite}
|
|
{\printnames{labelname}}
|
|
{\printtext[bibhyperref]{\printnames{labelname}}}
|
|
{}
|
|
{\PackageWarning{biblatex-patch}
|
|
{Failed to patch textcite bibmacro}}
|
|
|
|
\renewbibmacro*{textcite:postnote}{%
|
|
\usebibmacro{postnote}%
|
|
\ifthenelse{\value{multicitecount}=\value{multicitetotal}}
|
|
{\setunit{}%
|
|
\printtext{%
|
|
\ifbool{cbx:parens}
|
|
{\bibclosebracket\global\boolfalse{cbx:parens}}
|
|
{}}}
|
|
{\setunit{%
|
|
\ifbool{cbx:parens}
|
|
{\bibclosebracket\global\boolfalse{cbx:parens}}
|
|
{}%
|
|
\textcitedelim}}}
|
|
|
|
% NEW
|
|
\newbibmacro*{citeauthor}{%
|
|
\ifnameundef{labelname}
|
|
{\iffieldundef{shorthand}
|
|
{\printtext[bibhyperref]{%
|
|
\usebibmacro{cite:label}}%
|
|
\setunit{%
|
|
\global\booltrue{cbx:parens}%
|
|
\printdelim{nonameyeardelim}\bibopenbracket}%
|
|
\ifnumequal{\value{citecount}}{1}
|
|
{\usebibmacro{prenote}}
|
|
{}%
|
|
\printtext[bibhyperref]{\usebibmacro{cite:labeldate+extradate}}}
|
|
{\printtext[bibhyperref]{\usebibmacro{cite:shorthand}}}}
|
|
\printtext[bibhyperref]{\printnames{labelname}}}
|
|
|
|
%
|
|
% Put brackets around citations
|
|
%
|
|
|
|
\DeclareCiteCommand{\cite}[\mkbibbrackets]
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{cite}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareCiteCommand*{\cite}[\mkbibbrackets]
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{citeyear}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareCiteCommand{\parencite}[\mkbibbrackets]
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{cite}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareCiteCommand*{\parencite}[\mkbibbrackets]
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{citeyear}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite}
|
|
{\setunit{\multicitedelim}}
|
|
|
|
\DeclareCiteCommand{\footcite}[\mkbibfootnote]
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{cite}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{cite}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote]
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{cite}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote]
|
|
{\smartcite}{\setunit{\multicitedelim}}
|
|
|
|
\DeclareCiteCommand{\citeauthor}
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{citeauthor}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareCiteCommand{\citeyear}
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{citeyear}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
\DeclareCiteCommand{\citeyearpar}[\mkbibbrackets]
|
|
{\usebibmacro{cite:init}%
|
|
\usebibmacro{prenote}}
|
|
{\usebibmacro{citeindex}%
|
|
\usebibmacro{citeyear}}
|
|
{}
|
|
{\usebibmacro{postnote}}
|
|
|
|
%
|
|
% Provide aliases for natbib-compatible commands
|
|
%
|
|
\newcommand*{\citep}{\parencite}
|
|
\newcommand*{\citet}{\textcite}
|
|
% add others here
|
|
|
|
\endinput
|