summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.bbx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-06-03 03:02:31 +0000
committerNorbert Preining <norbert@preining.info>2021-06-03 03:02:31 +0000
commitd231c6331f53a048d29c2f847254a9f56d5ee2dd (patch)
treec8b2637a679254e40e8d4da5c03fda92cfaa7974 /macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.bbx
parent138d0a6cfd5f2187973fb6b83ad2fb0dcf5a8348 (diff)
CTAN sync 202106030302
Diffstat (limited to 'macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.bbx')
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.bbx736
1 files changed, 736 insertions, 0 deletions
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.bbx
new file mode 100644
index 0000000000..aa1865367c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.bbx
@@ -0,0 +1,736 @@
+\ProvidesFile{biblatex-cv.bbx}[2020/03/11 v0.01 biblatex-cv bibliography style (DES)]
+
+% The author year style seems better suited for a CV than the standard style
+\RequireBibliographyStyle{authoryear}
+
+\DeclareLanguageMappingSuffix{-cv}
+
+\RequirePackage{datenumber}
+\RequirePackage{fp}
+\RequirePackage{xpatch}
+
+% The verbose setting needs to be a style option because it influences the data model
+\newtoggle{cv@blx:verbose:committee}
+\newtoggle{cv@blx:verbose:education}
+\newtoggle{cv@blx:verbose:teaching}
+
+\DeclareBibliographyOption{verbose-lists}[true]{
+ \settoggle{cv@blx:verbose:committee}{#1}
+ \settoggle{cv@blx:verbose:education}{#1}
+ \settoggle{cv@blx:verbose:teaching}{#1}
+}
+\DeclareBibliographyOption{verbose-committee}[true]{
+ \settoggle{cv@blx:verbose:committee}{#1}
+}
+\DeclareBibliographyOption{verbose-education}[true]{
+ \settoggle{cv@blx:verbose:education}{#1}
+}
+\DeclareBibliographyOption{verbose-teaching}[true]{
+ \settoggle{cv@blx:verbose:teaching}{#1}
+}
+
+% Add new toggles for the bibliography drivers
+\newtoggle{cv@blx:pubstate}
+
+\newtoggle{cv@blx:education:advisor}
+\newtoggle{cv@blx:education:committee}
+\newtoggle{cv@blx:education:gpa}
+\newtoggle{cv@blx:education:honors}
+\newtoggle{cv@blx:education:major}
+\newtoggle{cv@blx:education:minor}
+\newtoggle{cv@blx:education:title}
+\newtoggle{cv@blx:funding:hidePI}
+\newtoggle{cv@blx:funding:role}
+\newtoggle{cv@blx:funding:status}
+\newtoggle{cv@blx:presentation:subtype}
+\newtoggle{cv@blx:presentation:type}
+\newtoggle{cv@blx:student:institution}
+\newtoggle{cv@blx:student:location}
+\newtoggle{cv@blx:student:department}
+\newtoggle{cv@blx:student:type}
+\newtoggle{cv@blx:school:years}
+\newtoggle{cv@blx:teaching:institution}
+\newtoggle{cv@blx:teaching:location}
+\newtoggle{cv@blx:teaching:department}
+
+% A shorthand way to patch the bibliography drivers defined in standard.bbx except for shorthand and set
+\newcommand{\cv@blx@drivers}{article, book, booklet, collection, inbook, incollection, inproceedings, manual, misc, online, patent, periodical, proceedings, report, thesis, unpublished}
+\newcommand{\cv@blx@do}[1]{}
+\newcommand{\cv@blx@patch@drivers}{%
+ \expandafter\forcsvlist\expandafter{%
+ \expandafter\cv@blx@do\expandafter%
+ }\expandafter{\cv@blx@drivers}%
+}
+
+% Define a macro to calculate the number of months between two dates assuming that the starting and ending years, months, and days are given.
+\newcounter{cv@blx@months@start}
+\newcounter{cv@blx@months@end}
+\newcommand{\cv@blx@months}{}
+\newcommand{\cv@blx@calculate@months}{%
+ \ifboolexpr{%
+ not test {\iffieldundef{endyear}} and%
+ not test {\iffieldundef{endmonth}} and%
+ not test {\iffieldundef{endday}}%
+ }{%
+ \setmydatenumber{cv@blx@months@end}{\thefield{endyear}}{\thefield{endmonth}}{\thefield{endday}}%
+ \setmydatenumber{cv@blx@months@start}{\thefield{year}}{\thefield{month}}{\thefield{day}}%
+ \FPsub\cv@blx@months{\thecv@blx@months@end}{\thecv@blx@months@start}%
+ \FPdiv\cv@blx@months{\cv@blx@months}{365.2425}%
+ \FPmul\cv@blx@months{\cv@blx@months}{12}%
+ \FPround\cv@blx@months{\cv@blx@months}{0}%
+ }{%
+ \undef{\cv@blx@months}%
+ }%
+}
+
+% Some of the bibliography drivers require new paragraphs within the bibliography entry. Some styles just use \par without the unspacing and punctuation tracking. In reading.bbx this is accomplished with \def\newblockpunct{\item}.
+\newrobustcmd*{\addpar}{\unspace\blx@postpunct\par\nobreak\blx@imc@resetpunctfont}
+%\newrobustcmd*{\addpar}{\unspace\blx@postpunct\item\blx@imc@resetpunctfont}
+
+% Make the pubstate field controllable with a toggle and include the journal title if present
+\xpatchbibmacro{addendum+pubstate}{%
+ \printfield{pubstate}%
+}{%
+ \iftoggle{cv@blx:pubstate}{%
+ \printfield{pubstate}%
+ \ifentrytype{unpublished}{%
+ \setunit*{\addcolon\addspace}%
+ \printfield{journaltitle}%
+ }{}%
+ }{}%
+}{}{}
+
+% The extradate part of the date label from the authoryear style is not needed in a CV
+\renewbibmacro*{date+extradate}{%
+ \iffieldundef{labelyear}{}{\printtext[parens]{\printdate}}%
+}
+
+% Provide bibliometric information at the end of the reference. All bibliography drivers defined in standard.bbx, except shorthand and set, end with:
+% \newunit\newblock
+% \usebibmacro{addendum+pubstate}%
+% \setunit{\bibpagerefpunct}\newblock
+% \usebibmacro{pageref}%
+% \newunit\newblock
+% \iftoggle{bbx:related}
+% {\usebibmacro{related:init}%
+% \usebibmacro{related}}
+% {}%
+% \usebibmacro{finentry}}
+% In reading.bbx the finentry bibmacro is patched, but it seems better to add the bibliometric information after the addendum+pubstate block and before the pageref and related blocks. The bibliometrics bibmacro also prints the note. For most drivers, the note is printed with \printfield{note}, but with the article driver it is printed with the note+pages bibmacro
+\renewcommand{\cv@blx@do}[1]{%
+ \xpatchbibdriver{#1}{%
+ \setunit{\bibpagerefpunct}\newblock%
+ }{%
+ \newunit\newblock%
+ \usebibmacro{bibliometrics}%
+ \setunit{\bibpagerefpunct}\newblock%
+ }{}{}%
+}
+\cv@blx@patch@drivers
+
+\renewcommand{\cv@blx@do}[1]{%
+ \xpatchbibdriver{#1}{%
+ \printfield{note}%
+ }{%
+ }{}{}%
+}
+\cv@blx@patch@drivers
+
+\xpatchbibdriver{article}{%
+ \usebibmacro{note+pages}%
+}{%
+ \setunit{\bibpagespunct}%
+ \printfield{pages}%
+ \newunit%
+}{}{}%
+
+% Define new bibmacros
+\newbibmacro{advisor}{%
+ \ifnameundef{advisor}{}{%
+ \ifnumgreater{\value{advisor}}{1}{%
+ \bibstring{advisors}%
+ }{%
+ \bibstring{advisor}%
+ }%
+ \addcolon\addspace%
+ \printnames[given-family]{advisor}%
+ }%
+}
+
+\newbibmacro{bibliometrics}{%
+ \ifboolexpr{%
+ ( test {\iffieldundef{numcites}} or test {\iffieldequalstr{numcites}{0}} ) and%
+ test {\iffieldundef{note}}%
+ }{}{%
+ \printtext[brackets]{%
+ \iffieldundef{numcites}{}{%
+ \iffieldequalstr{numcites}{0}{}{%
+ \bibstring{numCites}\addcolon\addnbspace\printfield{numcites}%
+ }%
+ }%
+ \newunit\setunit{\addcomma\addspace}%
+ \iffieldundef{note}{}{\printfield[sentencecase]{note}}%
+ }%
+ }%
+}
+
+\newbibmacro{class}{%
+ \mkdaterangelong{}%
+ \setunit{\addcomma\addspace}%
+ \printfield{role}%
+ \setunit{\addcomma\addspace}%
+ \iffieldundef{numlectures}{}{%
+ \iffieldequalstr{numlectures}{1}{%
+ \printfield{numlectures}\addnbspace\bibstring{lecture}%
+ }{%
+ \printfield{numlectures}\addnbspace\bibstring{lectures}%
+ }%
+ }%
+ \setunit{\addcomma\addspace}%
+ \iffieldundef{numstudents}{}{\printfield{numstudents}\addnbspace\bibstring{students}}%
+ \setunit{\adddot\addpar}\newblock%
+}
+
+\newbibmacro{classes}{%
+ \iffieldundef{classes}{%
+ \setunit{\adddot\addpar}\newblock%
+ \usebibmacro{class}%
+ }{%
+ \def\do##1{%
+ \entrydata*{##1}{%
+ \setunit{\adddot\addpar}\newblock%
+ \usebibmacro{class}%
+ }%
+ }%
+ \docsvfield{classes}%
+ }%
+}
+
+\newbibmacro{committee}{%
+ \ifnameundef{committee}{}{%
+ \bibstring{committee}\addcolon\addspace%
+ \printnames[given-family]{committee}%
+ }%
+}
+
+\newbibmacro{degrees}{%
+ \def\do##1{%
+ \entrydata*{##1}{%
+ \item\usedriver{}{degree}%
+ }%
+ }%
+ \list{}{\cv@blx@sublist}%
+ \docsvfield{degreelist}%
+ \endlist%
+}
+
+\newbibmacro{degree+major}{%
+ \printfield{degree}%
+ \iftoggle{cv@blx:education:major}{%
+ \ifboolexpr{%
+ test {\iffieldundef{degree}} or%
+ test {\iffieldundef{major}}%
+ }{}{\addspace\bibstring{in}\addspace}%
+ \printfield{major}%
+ }{}%
+}
+
+\newbibmacro{department+institution+location}{%
+ \iffieldundef{saveddepartment}{%
+ \printfield{department}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \iflistundef{savedinstitution}{%
+ \printlist{institution}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \iflistundef{savedlocation}{%
+ \printlist{location}%
+ }{}%
+}
+
+\newbibmacro{duration}{%
+ \ifundef{\cv@blx@months}{}{%
+ \printtext{\cv@blx@months\addnbspace}%
+ \ifnumgreater{\cv@blx@months}{1}{%
+ \bibstring{months}%
+ }{%
+ \bibstring{month}%
+ }%
+ }%
+}
+
+\newbibmacro{duration+amount+status}{%
+ \cv@blx@calculate@months%
+ \ifboolexpr{
+ test {\iffieldundef{amount}} and
+ test {\ifundef{\cv@blx@months}} and
+ (
+ test {\iffieldundef{status}} or
+ not test {\iftoggle{cv@blx:funding:status}} or
+ ) and
+ (
+ test {\iffieldundef{role}} or
+ not test {\iftoggle{cv@blx:funding:role}} or
+ (
+ test {\iftoggle{cv@blx:funding:hidePI}} and
+ test {\iffieldequalstr{role}{PI}}
+ )
+ )
+ }{}{%
+ \printtext[parens]{%
+ \usebibmacro{duration}%
+ \setunit{\addcomma\addspace}%
+ \printfield{amount}%
+ \setunit{\addcomma\addspace}%
+ \iftoggle{cv@blx:funding:status}{%
+ \printfield{status}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \iftoggle{cv@blx:funding:role}{%
+ \iftoggle{cv@blx:funding:hidePI}{%
+ \iffieldequalstr{role}{PI}{\printfield{role}}{}%
+ }{%
+ \printfield{role}%
+ }%
+ }{}%
+ }%
+ }%
+}
+
+\newbibmacro{role}{%
+ \iffieldundef{role}{}{%
+ \printtext[brackets]{%
+ \printfield{role}%
+ }%
+ }%
+}
+
+% There is some sort of bug with the loop and the seasons not getting updated correctly
+\newbibmacro{semesters}{%
+ \iffieldundef{semesters}{%
+ \mkdaterangelong{}%
+ \setunit{\addspace}%
+ \iffieldundef{role}{}{\printtext[brackets]{\printfield{role}}}%
+ \setunit{\addcomma\addspace}%
+ }{%
+ \def\do##1{%
+ \entrydata*{##1}{%
+ \mkdaterangelong{}%
+ \setunit{\addspace}%
+ \iffieldundef{role}{}{%
+ \printtext[brackets]{\printfield{role}}%
+ }%
+ \setunit{\addcomma\addspace}%
+ }%
+ }%
+ \docsvfield{semesters}%
+ }%
+}
+
+\newbibmacro{type+presenter}{%
+ \ifboolexpr{
+ (
+ test {\iftoggle{cv@blx:presentation:type}} and
+ (
+ test {\iffieldequalstr{presentationtype}{keynote}} or
+ test {\iffieldequalstr{presentationtype}{invited}}
+ )
+ ) or (
+ test {\iftoggle{cv@blx:presentation:subtype}} and
+ not test {\iffieldundef{entrysubtype}}
+ ) or (
+ not test {\ifnameundef{presenter}}
+ )
+ }{%
+ \printtext[brackets]{%
+ \ifboolexpr{
+ test {\iftoggle{cv@blx:presentation:type}} and
+ (
+ test {\iffieldequalstr{presentationtype}{keynote}} or
+ test {\iffieldequalstr{presentationtype}{invited}}
+ )
+ }{%
+ \printfield[key]{presentationtype}%
+ \setunit{\addspace}%
+ }{}%
+ \iftoggle{cv@blx:presentation:subtype}{%
+ \printfield[key]{entrysubtype}%
+ \setunit{\addspace}%
+ }{}%
+ \ifnameundef{presenter}{}{%
+ \bibstring{presented}\addspace%
+ \printnames{presenter}%
+ }%
+ }%
+ }{}%
+}
+
+\newbibmacro{yearrange}{%
+ \printfield{year}%
+ \ifboolexpr{%
+ test {\iffieldundef{endyear}} or%
+ test {\iffieldsequal{year}{endyear}}%
+ }{}{\bibrangedash\printfield{endyear}}%
+}
+
+\newbibmacro{yearrange+dash}{%
+ \printfield{year}%
+ \iffieldundef{endyear}{%
+ \bibrangedash%
+ }{%
+ \iffieldsequal{year}{endyear}{}{\bibrangedash\printfield{endyear}}%
+ }%
+}
+
+% The biblatex-cv style allows for custom entry types that do not have bibliography drivers defined in standard.bbx.
+
+% ABSTRACT
+% The abstract bibliography driver is a modified version of the article bibliography driver.
+\csletcs{blx@bbx@abstract}{blx@bbx@article}
+\DeclareFieldFormat[abstract]{citetitle}{\mkbibquote{#1\isdot}}
+\DeclareFieldFormat[abstract]{number}{#1}
+\DeclareFieldFormat[abstract]{series}{%
+ \ifinteger{#1}{%
+ \mkbibordseries{#1}~\bibstring{jourser}%
+ }{%
+ \ifbibstring{#1}{\bibstring{#1}}{#1}%
+ }%
+}
+\DeclareFieldFormat[abstract]{title}{\mkbibquote{#1\isdot}}
+\DeclareFieldFormat[abstract]{volume}{#1}
+\xpatchbibdriver{abstract}{\usebibmacro{doi+eprint+url}}{%
+ \usebibmacro{type+presenter}%
+ \newunit\newblock%
+ \usebibmacro{doi+eprint+url}%
+}{}{}
+
+% COMMITTEE
+\DeclareBibliographyDriver{committee}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{semesters}%
+ \printfield{title}%
+ \setunit{\addcomma\addspace}%
+ \usebibmacro{department+institution+location}%
+ \newunit\newblock%
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock%
+ \usebibmacro{addendum+pubstate}%
+ \newunit\newblock%
+ \usebibmacro{bibliometrics}%
+ \setunit{\bibpagerefpunct}\newblock%
+ \usebibmacro{pageref}%
+ \newunit\newblock%
+ \iftoggle{bbx:related}{%
+ \usebibmacro{related:init}%
+ \usebibmacro{related}%
+ }{}%
+ \usebibmacro{finentry}%
+}
+
+% EDUCATION
+\DeclareBibliographyDriver{school}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{department+institution+location}%
+ \setunit{\addcomma\addspace}%
+ \iftoggle{cv@blx:school:years}{%
+ \usebibmacro{yearrange}%
+ }{}%
+ \newblockpunct{\addperiod\addpar}%
+ \iftoggle{cv@blx:education:gpa}{%
+ \iffieldundef{gpa}{}{%
+ \printfield{gpa}%
+ \newblockpunct{\addpar}%
+ }%
+ }{}%
+ \iftoggle{cv@blx:education:honors}{%
+ \iflistundef{honors}{}{%
+ \bibstring{honors}\addcolon\addspace%
+ \printlist{honors}%
+ }
+ \newblockpunct{\addpar}%
+ }{}%
+ \usebibmacro{degrees}%
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock%
+ \usebibmacro{addendum+pubstate}%
+ \newunit\newblock%
+ \usebibmacro{bibliometrics}%
+ \setunit{\bibpagerefpunct}\newblock%
+ \usebibmacro{pageref}%
+ \newunit\newblock%
+ \iftoggle{bbx:related}{%
+ \usebibmacro{related:init}%
+ \usebibmacro{related}%
+ }{}%
+ \begingroup%
+ \renewcommand{\finentrypunct}{}%
+ \usebibmacro{finentry}%
+ \endgroup%
+}
+
+\DeclareBibliographyDriver{degree}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{degree+major}%
+ \setunit{\addcomma\addspace}%
+ \usebibmacro{department+institution+location}%
+ \setunit{\addcomma\addspace}%
+ \usebibmacro{yearrange}%
+ \newblockpunct{\addperiod\addpar}%
+ \iftoggle{cv@blx:education:title}{%
+ \printfield{title}%
+ \newblockpunct{\addpar}%
+ }{}%
+ \iftoggle{cv@blx:education:advisor}{%
+ \usebibmacro{advisor}%
+ \newblockpunct{\addpar}%
+ }{}%
+ \iftoggle{cv@blx:education:committee}{%
+ \usebibmacro{committee}%
+ \newblockpunct{\addpar}%
+ }{}%
+ \iftoggle{cv@blx:education:minor}{%
+ \iflistundef{minor}{}{%
+ \bibstring{minor}\addcolon\addspace%
+ \printlist{minor}%
+ }%
+ \newblockpunct{\addpar}%
+ \iflistundef{concentration}{}{%
+ \bibstring{concentration}\addcolon\addspace%
+ \printlist{concentration}%
+ }%
+ \newblockpunct{\addpar}%
+ }{}%
+ \iftoggle{cv@blx:education:gpa}{%
+ \printfield{gpa}%
+ \newblockpunct{\addpar}%
+ }{}%
+ \iftoggle{cv@blx:education:honors}{%
+ \iflistundef{honors}{}{%
+ \printlist{honors}%
+ }
+ \newblockpunct{\addpar}%
+ }{}%
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock%
+ \usebibmacro{addendum+pubstate}%
+ \newunit\newblock%
+ \usebibmacro{bibliometrics}%
+ \setunit{\bibpagerefpunct}\newblock%
+ \usebibmacro{pageref}%
+ \newunit\newblock%
+ \iftoggle{bbx:related}{%
+ \usebibmacro{related:init}%
+ \usebibmacro{related}%
+ }{}%
+ \begingroup%
+ \renewcommand{\finentrypunct}{}%
+ \usebibmacro{finentry}%
+ \endgroup%
+}
+
+% FUNDING
+\DeclareBibliographyDriver{funding}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{yearrange}%
+ \setunit{\addspace}%
+ \usebibmacro{duration+amount+status}%
+ \setunit{\addcolon\addspace}%
+ \printfield{funder}%
+ \setunit{\addcomma\addspace}%
+ \printfield{type}%
+ \setunit{\addspace}%
+ \printfield[parens]{number}%
+ \newunit\newblock%
+ \usebibmacro{title}%
+ \newunit\newblock%
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock%
+ \usebibmacro{addendum+pubstate}%
+ \newunit\newblock%
+ \usebibmacro{bibliometrics}%
+ \setunit{\bibpagerefpunct}\newblock%
+ \usebibmacro{pageref}%
+ \newunit\newblock%
+ \iftoggle{bbx:related}{%
+ \usebibmacro{related:init}%
+ \usebibmacro{related}%
+ }{}%
+ \usebibmacro{finentry}%
+}
+
+% PRESENTATION
+\DeclareBibliographyDriver{presentation}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author}%
+ \setunit{\printdelim{nametitledelim}}\newblock%
+ \usebibmacro{title}%
+ \setunit*{\adddot\addspace}%
+ \usebibmacro{department+institution+location}%
+ \newunit\newblock%
+ \usebibmacro{type+presenter}%
+ \newunit\newblock%
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock%
+ \usebibmacro{addendum+pubstate}%
+ \newunit\newblock%
+ \usebibmacro{bibliometrics}%
+ \setunit{\bibpagerefpunct}\newblock%
+ \usebibmacro{pageref}%
+ \newunit\newblock%
+ \iftoggle{bbx:related}{%
+ \usebibmacro{related:init}%
+ \usebibmacro{related}%
+ }{}%
+ \usebibmacro{finentry}%
+}
+
+% STUDENT
+\DeclareBibliographyDriver{student}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \printnames{name}%
+ \setunit{\addcomma\addspace}%
+ \iftoggle{cv@blx:student:type}{%
+ \printfield{entrysubtype}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \usebibmacro{yearrange}%
+ \setunit{\addcomma\addspace}%
+ \iftoggle{cv@blx:student:department}{%
+ \printfield{department}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \iftoggle{cv@blx:student:institution}{%
+ \printlist{institution}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \iftoggle{cv@blx:student:location}{%
+ \printlist{location}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \newunit\newblock%
+ \usebibmacro{role}%
+ \newunit\newblock%
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock%
+ \usebibmacro{addendum+pubstate}%
+ \newunit\newblock%
+ \usebibmacro{bibliometrics}%
+ \setunit{\bibpagerefpunct}\newblock%
+ \usebibmacro{pageref}%
+ \newunit\newblock%
+ \iftoggle{bbx:related}{%
+ \usebibmacro{related:init}%
+ \usebibmacro{related}%
+ }{}%
+ \usebibmacro{finentry}%
+}
+
+% TEACHING
+\DeclareBibliographyDriver{teaching}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \printfield{title}%
+ \setunit{\addspace}%
+ \printfield[parens]{number}%
+ \setunit{\addcomma\addspace}%
+ \iftoggle{cv@blx:teaching:department}{%
+ \printfield{department}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \iftoggle{cv@blx:teaching:institution}{%
+ \printlist{institution}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \iftoggle{cv@blx:teaching:location}{%
+ \printlist{location}%
+ \setunit{\addcomma\addspace}%
+ }{}%
+ \newunit\newblock%
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock%
+ \usebibmacro{addendum+pubstate}%
+ \newunit\newblock%
+ \usebibmacro{bibliometrics}%
+ \setunit{\bibpagerefpunct}\newblock%
+ \usebibmacro{pageref}%
+ \newunit\newblock%
+ \iftoggle{cv@blx:verbose:teaching}{%
+ \usebibmacro{classes}%
+ }{%
+ \setunit{\adddot\addspace}\newblock%
+ \usebibmacro{class}%
+ }%
+ \iftoggle{bbx:related}{%
+ \usebibmacro{related:init}%
+ \usebibmacro{related}%
+ }{}%
+ \usebibmacro{finentry}%
+}
+
+% Define new field formats
+
+% Allow key datatypes to access localization strings
+\DeclareFieldFormat{key}{\ifbibstring{#1}{\bibstring{#1}}{#1}}
+\DeclareFieldFormat{role}{\ifbibstring{#1}{\bibstring{#1}}{#1}}
+\DeclareFieldFormat{status}{\ifbibstring{#1}{\bibstring{#1}}{#1}}
+
+\DeclareFieldFormat[committee]{title}{#1}
+
+\DeclareFieldFormat[degree]{degree}{#1\isdot}
+\DeclareFieldFormat[degree]{title}{\bibstring{title}\addcolon\addspace#1}
+\DeclareFieldFormat[school, degree]{gpa}{\bibstring{gpa}\addcolon\addspace#1}
+
+\DeclareFieldFormat[funding]{amount}{\printfield{currency}#1}
+
+\DeclareFieldFormat[teaching]{title}{#1}
+
+\DeclareFieldFormat[student]{entrysubtype}{\ifbibstring{#1}{\bibstring{#1}}{#1}}
+
+\DeclareFieldFormat[course]{related}{\mkbibparens{#1}}
+
+% The date label from the authoryear style includes "no date" which is not needed in a CV
+\DeclareLabeldate{%
+ \field{date}
+ \field{year}
+ \field{eventdate}
+ \field{origdate}
+ \field{urldate}
+}
+
+% Redefine ydnt sorting to sort by endyear. Taken from biblatex.def
+\DeclareSortingTemplate{ydnt}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort[final, direction=descending]{
+ \field{sortyear}
+ \field[padwidth = 4, padchar = 9]{endyear}
+ }
+ \sort[direction=descending]{
+ \field{sortyear}
+ \field{year}
+ \literal{9999}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+}