Instantly share code, notes, and snippets.
Last active
January 8, 2017 17:34
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save moewew/fe3baef052d16872ae5a5226de463064 to your computer and use it in GitHub Desktop.
authoryear.bbx with additions for https://github.com/plk/biblatex/issues/520
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\ProvidesFile{authoryear.bbx} | |
[\abx@bbxid] | |
\RequireBibliographyStyle{standard} | |
\DeclareBibliographyOption[boolean]{dashed}[true]{% | |
\ifstrequal{#1}{true} | |
{\ExecuteBibliographyOptions{pagetracker}% | |
\renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}} | |
{\renewbibmacro*{bbx:savehash}{}}} | |
\DeclareBibliographyOption[boolean]{mergedate}[true]{% | |
\ifcsdef{bbx@opt@mergedate@#1} | |
{\csuse{bbx@opt@mergedate@#1}} | |
{\PackageError{biblatex} | |
{Invalid option 'mergedate=#1'} | |
{Valid values are 'maximum', 'compact', 'basic', 'minimum',\MessageBreak | |
'true' (=compact), and 'false'.}}} | |
\providebibmacro*{date+extrayear}{} | |
\def\bbx@opt@mergedate@true{\bbx@opt@mergedate@compact} | |
% merge date/issue with date label | |
\def\bbx@opt@mergedate@maximum{% | |
\renewbibmacro*{date+extrayear}{% | |
\iffieldundef{labelyear} | |
{} | |
{\printtext[parens]{% | |
\printfield{issue}% | |
\setunit*{\addspace}% | |
\iffieldsequal{year}{labelyear} | |
{\printlabeldateextra}% | |
{\ifdefstring\blx@dateformat@labeldate{edtf} | |
{} | |
{\datecircaprint}% | |
\dateeraprintpre{labelyear}% | |
\printfield{labelyear}% | |
\printfield{extrayear}% | |
\dateuncertainprint% | |
\iffieldsequal{labeldateera}{labelenddateera} | |
{} | |
{\dateeraprint{labelyear}}% | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\datecircaprintedtf} | |
{}% | |
\iffieldundef{labelendyear} | |
{} | |
{\iffieldsequal{labelyear}{labelendyear} | |
{} | |
{\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\slash}% strict EDTF | |
{\bibdaterangesep | |
\enddatecircaprint}% | |
\dateeraprintpre{labelendyear}% | |
\printfield{labelendyear}% | |
\enddateuncertainprint | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\enddatecircaprintedtf} | |
{}% | |
\dateeraprint{labelendyear}}}}}}}% | |
\renewbibmacro*{date}{}% | |
\renewbibmacro*{issue+date}{}} | |
% merge date with date label | |
\def\bbx@opt@mergedate@compact{% | |
\renewbibmacro*{date+extrayear}{% | |
\iffieldundef{labelyear} | |
{} | |
{\printtext[parens]{% | |
\iffieldsequal{year}{labelyear} | |
{\printlabeldateextra}% | |
{\ifdefstring\blx@dateformat@labeldate{edtf} | |
{} | |
{\datecircaprint}% | |
\dateeraprintpre{labelyear}% | |
\printfield{labelyear}% | |
\printfield{extrayear}% | |
\dateuncertainprint% | |
\iffieldsequal{labeldateera}{labelenddateera} | |
{} | |
{\dateeraprint{labelyear}}% | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\datecircaprintedtf} | |
{}% | |
\iffieldundef{labelendyear} | |
{} | |
{\iffieldsequal{labelyear}{labelendyear} | |
{} | |
{\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\slash}% strict EDTF | |
{\bibdaterangesep | |
\enddatecircaprint}% | |
\dateeraprintpre{labelendyear}% | |
\printfield{labelendyear}% | |
\enddateuncertainprint | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\enddatecircaprintedtf} | |
{}% | |
\dateeraprint{labelendyear}}}}}}}% | |
\renewbibmacro*{date}{}% | |
\renewbibmacro*{issue+date}{% | |
\iffieldundef{issue} | |
{} | |
{\printtext[parens]{\printfield{issue}}}% | |
\newunit}} | |
% merge year-only date with date label | |
\def\bbx@opt@mergedate@basic{% | |
\renewbibmacro*{date+extrayear}{% | |
\iffieldundef{labelyear} | |
{} | |
{\printtext[parens]{% | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{} | |
{\datecircaprint}% | |
\dateeraprintpre{labelyear}% | |
\printfield{labelyear}% | |
\printfield{extrayear}% | |
\dateuncertainprint% | |
\iffieldsequal{labeldateera}{labelenddateera} | |
{} | |
{\dateeraprint{labelyear}}% | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\datecircaprintedtf} | |
{}% | |
\iffieldundef{labelendyear} | |
{} | |
{\iffieldsequal{labelyear}{labelendyear} | |
{} | |
{\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\slash}% strict EDTF | |
{\bibdaterangesep | |
\enddatecircaprint}% | |
\dateeraprintpre{labelendyear}% | |
\printfield{labelendyear}% | |
\enddateuncertainprint | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\enddatecircaprintedtf} | |
{}% | |
\dateeraprint{labelendyear}}}}}}% | |
\renewbibmacro*{date}{% | |
\ifboolexpr{ | |
test {\iffieldundef{season}} | |
and | |
test {\iffieldundef{month}} | |
} | |
{} | |
{\printdate}}% | |
\renewbibmacro*{issue+date}{% | |
\ifboolexpr{ | |
test {\iffieldundef{issue}} | |
and | |
test {\iffieldundef{season}} | |
and | |
test {\iffieldundef{month}} | |
} | |
{} | |
{\printtext[parens]{% | |
\printfield{issue}% | |
\setunit*{\addspace}% | |
\printdate}}% | |
\newunit}} | |
% merge year-only date with year-only date label | |
\def\bbx@opt@mergedate@minimum{% | |
\renewbibmacro*{date+extrayear}{% | |
\iffieldundef{labelyear} | |
{} | |
{\printtext[parens]{% | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{} | |
{\datecircaprint}% | |
\dateeraprintpre{labelyear}% | |
\printfield{labelyear}% | |
\printfield{extrayear}% | |
\dateuncertainprint% | |
\iffieldsequal{labeldateera}{labelenddateera} | |
{} | |
{\dateeraprint{labelyear}}% | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\datecircaprintedtf} | |
{}% | |
\iffieldundef{labelendyear} | |
{} | |
{\iffieldsequal{labelyear}{labelendyear} | |
{} | |
{\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\slash}% strict EDTF | |
{\bibdaterangesep | |
\enddatecircaprint}% | |
\dateeraprintpre{labelendyear}% | |
\printfield{labelendyear}% | |
\enddateuncertainprint | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\enddatecircaprintedtf} | |
{}% | |
\dateeraprint{labelendyear}}}}}}% | |
\renewbibmacro*{date}{% | |
\ifboolexpr{ | |
test {\iffieldundef{season}} | |
and | |
test {\iffieldundef{month}} | |
and | |
test {\iffieldundef{extrayear}} | |
} | |
{} | |
{\printdate}}% | |
\renewbibmacro*{issue+date}{% | |
\ifboolexpr{ | |
test {\iffieldundef{issue}} | |
and | |
test {\iffieldundef{season}} | |
and | |
test {\iffieldundef{month}} | |
and | |
test {\iffieldundef{extrayear}} | |
} | |
{} | |
{\printtext[parens]{% | |
\printfield{issue}% | |
\setunit*{\addspace}% | |
\printdate}}% | |
\newunit}} | |
% don't merge date/issue with date label | |
\def\bbx@opt@mergedate@false{% | |
\renewbibmacro*{date+extrayear}{% | |
\iffieldundef{labelyear} | |
{} | |
{\printtext[parens]{% | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{} | |
{\datecircaprint}% | |
\dateeraprintpre{labelyear}% | |
\printfield{labelyear}% | |
\printfield{extrayear}% | |
\dateuncertainprint% | |
\iffieldsequal{labeldateera}{labelenddateera} | |
{} | |
{\dateeraprint{labelyear}}% | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\datecircaprintedtf} | |
{}% | |
\iffieldundef{labelendyear} | |
{} | |
{\iffieldsequal{labelyear}{labelendyear} | |
{} | |
{\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\slash}% strict EDTF | |
{\bibdaterangesep | |
\enddatecircaprint}% | |
\dateeraprintpre{labelendyear}% | |
\printfield{labelendyear}% | |
\enddateuncertainprint | |
\ifdefstring\blx@dateformat@labeldate{edtf} | |
{\enddatecircaprintedtf} | |
{}% | |
\dateeraprint{labelendyear}}}}}}% | |
\renewbibmacro*{date}{\printdate}% | |
\renewbibmacro*{issue+date}{% | |
\printtext[parens]{% | |
\printfield{issue}% | |
\setunit*{\addspace}% | |
\printdate}% | |
\newunit}} | |
% n.b. the default labeldate=year overrides merging of months and days | |
\ExecuteBibliographyOptions{labeldateparts,sorting=nyt,pagetracker,mergedate} | |
\DeclareFieldFormat{shorthandwidth}{#1} | |
\setlength{\bibitemsep}{0pt} | |
\DeclareNameAlias{author}{sortname} | |
\DeclareNameAlias{editor}{sortname} | |
\DeclareNameAlias{translator}{sortname} | |
\defbibenvironment{bibliography} | |
{\list | |
{} | |
{\setlength{\leftmargin}{\bibhang}% | |
\setlength{\itemindent}{-\leftmargin}% | |
\setlength{\itemsep}{\bibitemsep}% | |
\setlength{\parsep}{\bibparsep}}} | |
{\endlist} | |
{\item} | |
\defbibenvironment{shorthand} | |
{\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} | |
\renewbibmacro*{begrelated}{% | |
\booltrue{bbx@inset}} | |
\renewbibmacro*{endrelated}{% | |
\usebibmacro*{bbx:savehash}} | |
\renewbibmacro*{author}{% | |
\ifboolexpr{ | |
test \ifuseauthor | |
and | |
not test {\ifnameundef{author}} | |
} | |
{\usebibmacro{bbx:dashcheck} | |
{\bibnamedash} | |
{\usebibmacro{bbx:savehash}% | |
\printnames{author}% | |
\iffieldundef{authortype} | |
{\setunit{\printdelim{nameyeardelim}}} | |
{\setunit{\addcomma\space}}}% | |
\iffieldundef{authortype} | |
{} | |
{\usebibmacro{authorstrg}% | |
\setunit{\printdelim{nameyeardelim}}}}% | |
{\global\undef\bbx@lasthash | |
\usebibmacro{labeltitle}% | |
\setunit*{\printdelim{nonameyeardelim}}}% | |
\usebibmacro{date+extrayear}} | |
\renewbibmacro*{editor}{% | |
\usebibmacro{bbx:editor}{editorstrg}} | |
\renewbibmacro*{editor+others}{% | |
\usebibmacro{bbx:editor}{editor+othersstrg}} | |
\newbibmacro*{bbx:editor}[1]{% | |
\ifboolexpr{ | |
test \ifuseeditor | |
and | |
not test {\ifnameundef{editor}} | |
} | |
{\usebibmacro{bbx:dashcheck} | |
{\bibnamedash} | |
{\printnames{editor}% | |
\setunit{\addcomma\space}% | |
\usebibmacro{bbx:savehash}}% | |
\usebibmacro{#1}% | |
\clearname{editor}% | |
\setunit{\printdelim{nameyeardelim}}}% | |
{\global\undef\bbx@lasthash | |
\usebibmacro{labeltitle}% | |
\setunit*{\printdelim{nonameyeardelim}}}% | |
\usebibmacro{date+extrayear}} | |
\renewbibmacro*{translator}{% | |
\usebibmacro{bbx:translator}{translatorstrg}} | |
\renewbibmacro*{translator+others}{% | |
\usebibmacro{bbx:translator}{translator+othersstrg}} | |
\newbibmacro*{bbx:translator}[1]{% | |
\ifboolexpr{ | |
test \ifusetranslator | |
and | |
not test {\ifnameundef{translator}} | |
} | |
{\usebibmacro{bbx:dashcheck} | |
{\bibnamedash} | |
{\printnames{translator}% | |
\setunit{\addcomma\space}% | |
\usebibmacro{bbx:savehash}}% | |
\usebibmacro{translator+othersstrg}% | |
\clearname{translator}% | |
\setunit{\printdelim{nameyeardelim}}}% | |
{\global\undef\bbx@lasthash | |
\usebibmacro{labeltitle}% | |
\setunit*{\printdelim{nonameyeardelim}}}% | |
\usebibmacro{date+extrayear}} | |
\newbibmacro*{bbx:dashcheck}[2]{% | |
\ifboolexpr{ | |
test {\iffieldequals{fullhash}{\bbx@lasthash}} | |
and | |
not test \iffirstonpage | |
and | |
( | |
not bool {bbx@inset} | |
or | |
test {\iffieldequalstr{entrysetcount}{1}} | |
) | |
} | |
{#1} | |
{#2}} | |
\newbibmacro*{labeltitle}{% | |
\iffieldundef{label} | |
{\iffieldundef{shorttitle} | |
{\printfield{title}% | |
\clearfield{title}} | |
{\printfield[title]{shorttitle}}} | |
{\printfield{label}}} | |
\endinput |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment