diff options
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.bbx | 736 |
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} + } +} |