\ProvidesFile{gost-authoryear.bbx} [2023/04/25\space v1.24\space biblatex-gost styles] \RequireBibliographyStyle{gost-standard} \DeclareBibliographyOption{dropdates}[true]{% \ifstrequal{#1}{true} {\ExecuteBibliographyOptions{singletitle=true,uniquebaretitle=true}} {\ExecuteBibliographyOptions{singletitle=false,uniquebaretitle=false}}} \DeclareBibliographyOption{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 'goststrict', 'gostletter', 'gostlabel', 'true' (=compact), and 'false'.}}} % whether the date is necessary for disambiguation \newcommand*{\blx@gost@ifneedsdate}[2]{% \ifnameundef{labelname} {\ifuniquebaretitle{#2}{#1}} {\ifsingletitle{#2}{#1}}} \providebibmacro*{labelyear+extradate}{} \providebibmacro*{authoryearlabel}{} \newbibmacro*{cite:extras}{% \ifnameundef{labelname}% if there is labelname, extradate disambiguation is enough {\printfield{extratitleyear}} % if labeltitle+labelyear are the same {\printfield{extradate}}} \providebibmacro*{labeltitle}{} \newlength{\labelauthoryearsep} % label isn't taken into account since labeltitle is always provided \newbibmacro*{labeltitle:common}{% \blx@gost@ifneedsdate {\printtext[title]{\printfield[titlecase]{labeltitle}}% \clearfield{\thefield{labeltitlesource}}} {}} \def\bbx@opt@mergedate@true{\bbx@opt@mergedate@compact} \def\bbx@opt@mergedate@maximum{% \renewbibmacro*{labelyear+extradate}{% \blx@gost@ifneedsdate {\iffieldundef{labelyear} {} {\printtext[parens]{% % \ifentrytype{article} % {\printfield{issue}% % \clearfield{issue}% % \setunit*{\addspace}} % {}% \usebibmacro{cite:labelyear+extras}{}% \clearfield{\thefield{labeldatesource}month}% \clearfield{\thefield{labeldatesource}day}}}} {}}% %\renewcommand*{\labelnamepunct}{\newunitpunct} \renewbibmacro*{date}{\blx@gost@ifneedsdate{}{\usebibmacro{printdate}{}}}% \renewbibmacro*{year}{\blx@gost@ifneedsdate{}{\usebibmacro{printyear}{}}}% \renewbibmacro*{jour:date}{% \blx@gost@ifneedsdate {} {\usebibmacro{year}% \newunit\newblock \mkbibdatelong{}{month}{day}}}% \renewbibmacro*{labeltitle}{\usebibmacro{labeltitle:common}}% \renewbibmacro*{authoryearlabel}{}% \setlength{\labelauthoryearsep}{0pt}% } \def\bbx@opt@mergedate@compact{% \renewbibmacro*{labelyear+extradate}{% \blx@gost@ifneedsdate{\usebibmacro{cite:labelyear+extras}{parens}}{}}% %\renewcommand*{\labelnamepunct}{\newunitpunct} \renewbibmacro*{date}{\blx@gost@ifneedsdate{}{\usebibmacro{printdate}{}}}% \renewbibmacro*{year}{\blx@gost@ifneedsdate{}{\usebibmacro{printyear}{}}}% \renewbibmacro*{jour:date}{% \blx@gost@ifneedsdate {} {\usebibmacro{year}% \newunit\newblock \mkbibdatelong{}{month}{day}}}% \renewbibmacro*{labeltitle}{\usebibmacro{labeltitle:common}}% \renewbibmacro*{authoryearlabel}{}% \setlength{\labelauthoryearsep}{0pt}% } \def\bbx@opt@mergedate@basic{% \renewbibmacro*{labelyear+extradate}{% \blx@gost@ifneedsdate{\usebibmacro{cite:labelyear+extras}{parens}}{}}% %\renewcommand*{\labelnamepunct}{\newunitpunct} \renewbibmacro*{date}{% \blx@gost@ifneedsdate {\ifthenelse{\(\iffieldundef{extradate}\AND\iffieldundef{extratitleyear}\) \AND\iffieldundef{month}} %if date is simply year {} {\usebibmacro{printdate}{}}} {\usebibmacro{printdate}{}}}% \renewbibmacro*{year}{% \blx@gost@ifneedsdate {\ifthenelse{\iffieldundef{extradate}\AND\iffieldundef{extratitleyear}} {} {\usebibmacro{printyear}{}}} {\usebibmacro{printyear}{}}}% \renewbibmacro*{jour:date}{% \blx@gost@ifneedsdate {\ifthenelse{\(\iffieldundef{extradate}\AND\iffieldundef{extratitleyear}\) \AND\iffieldundef{month}} %if date is simply year {} {\usebibmacro{year}% \newunit\newblock \mkbibdatelong{}{month}{day}}}% {\usebibmacro{year}% \newunit\newblock \mkbibdatelong{}{month}{day}}}% \renewbibmacro*{labeltitle}{\usebibmacro{labeltitle:common}}% \renewbibmacro*{authoryearlabel}{}% \setlength{\labelauthoryearsep}{0pt}% } \def\bbx@opt@mergedate@minimum{% \renewbibmacro*{labelyear+extradate}{% \blx@gost@ifneedsdate{\usebibmacro{cite:labelyear+extras}{parens}}{}}% %\renewcommand*{\labelnamepunct}{\newunitpunct} \renewbibmacro*{date}{% \blx@gost@ifneedsdate {\ifthenelse{\iffieldundef{extradate}\AND\iffieldundef{extratitleyear}} {} {\usebibmacro{printdate}{}}} {\usebibmacro{printdate}{}}}% \renewbibmacro*{year}{% \blx@gost@ifneedsdate {\ifthenelse{\iffieldundef{extradate}\AND\iffieldundef{extratitleyear}} {} {\usebibmacro{printyear}{}}} {\usebibmacro{printyear}{}}}% \renewbibmacro*{jour:date}{% \blx@gost@ifneedsdate {\ifthenelse{\iffieldundef{extradate}\AND\iffieldundef{extratitleyear}} {} {\usebibmacro{year}% \newunit\newblock \mkbibdatelong{}{month}{day}}}% {\usebibmacro{year}% \newunit\newblock \mkbibdatelong{}{month}{day}}}% \renewbibmacro*{labeltitle}{\usebibmacro{labeltitle:common}}% \renewbibmacro*{authoryearlabel}{}% \setlength{\labelauthoryearsep}{0pt}% } \def\bbx@opt@mergedate@false{% \renewbibmacro*{labelyear+extradate}{% \blx@gost@ifneedsdate{\usebibmacro{cite:labelyear+extras}{parens}}{}}% %\renewcommand*{\labelnamepunct}{\newunitpunct} \renewbibmacro*{date}{\usebibmacro{printdate}{}}% \renewbibmacro*{year}{\usebibmacro{printyear}{}}% \renewbibmacro*{labeltitle}{\usebibmacro{labeltitle:common}}% \renewbibmacro*{authoryearlabel}{}% \setlength{\labelauthoryearsep}{0pt}% } \def\bbx@opt@mergedate@goststrict{% \renewbibmacro*{labelyear+extradate}{}% \renewbibmacro*{date}{\usebibmacro{printdate}{}}% \renewbibmacro*{year}{\usebibmacro{printyear}{}}% \renewbibmacro*{labeltitle}{}% \DeclareFieldFormat{extradate}{% \PackageWarning{biblatex-gost}{% Citation \thefield{entrykey} is not unique}}% \DeclareFieldFormat{extratitleyear}{% \PackageWarning{biblatex-gost}{% Citation \thefield{entrykey} is not unique}}% \ExecuteBibliographyOptions{singletitle,uniquebaretitle}% \renewbibmacro*{authoryearlabel}{}% \setlength{\labelauthoryearsep}{0pt}% } \def\bbx@opt@mergedate@gostletter{% \renewbibmacro*{labelyear+extradate}{}% \renewbibmacro*{date}{\usebibmacro{printdate}{}\usebibmacro{cite:extras}}% \renewbibmacro*{year}{\usebibmacro{printyear}{}\usebibmacro{cite:extras}}% \renewbibmacro*{labeltitle}{}% \renewbibmacro*{authoryearlabel}{}% \setlength{\labelauthoryearsep}{0pt}% } \def\bbx@opt@mergedate@gostlabel{% \renewbibmacro*{labelyear+extradate}{}% \renewbibmacro*{date}{\usebibmacro{printdate}{}}% \renewbibmacro*{year}{\usebibmacro{printyear}{}}% \renewbibmacro*{labeltitle}{}% \renewbibmacro*{heading}{}% \renewbibmacro*{authoryearlabel}{% \mkbibbrackets{% \iffieldundef{shorthand} {\iffieldundef{heading} {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}} {\ifnameundef{labelname} {% no labelname \iffieldundef{label} {% no label, so print labeltitle (always present) \blx@gost@ifneedsdate {\printtext[citetitle]{\printfield[titlecase]{labeltitle}} \setunit{\nameyeardelim}% \usebibmacro{cite:labelyear+extras}{}} {\printtext[citetitle]{\printfield[titlecase]{labeltitle}}}} {% label exists, print it \usebibmacro{cite:label+volume+parts}}}% {% labelname, no labelyear \usebibmacro{cite:labelname+volume+parts}{}}}% {% both labelname, labelyear exist \blx@gost@ifneedsdate {\usebibmacro{cite:labelname+volume+parts}{}% \setunit{\nameyeardelim}% \usebibmacro{cite:labelyear+extras}{}}% {\usebibmacro{cite:labelname+volume+parts}{}}}} {\usebibmacro{cite:heading}{bibhyperref}% % \iffieldundef{labelyear} % {} % {\setunit{\nameyeardelim}% % \usebibmacro{cite:labelyear+extras}{bibhyperref}} }}% {\usebibmacro{cite:shorthand}}}}% \setlength{\biblabelsep}{.5em}% \setlength{\labelauthoryearsep}{\biblabelsep}% } \ExecuteBibliographyOptions{labeldateparts,labeltitleyear,sorting=nyt,pagetracker, mergedate=gostletter,dropdates=false, bibisbn,biburl,bibdoi,bibeprint} \DeclareFieldFormat{shorthandwidth}{#1} \setlength{\bibitemsep}{0pt} \defbibenvironment{bibliography} {\list {\usebibmacro{authoryearlabel}} {\setlength{\leftmargin}{\bibhang}% \setlength{\labelwidth}{0pt} \setlength{\labelsep}{\labelauthoryearsep}% \setlength{\itemindent}{-\leftmargin} \addtolength{\itemindent}{\labelsep} \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} \renewbibmacro*{author}{% \ifboolexpr{ test \ifuseauthor and not test {\ifnameundef{author}} } {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\iftoggle{bbx:gostbibliography} {\printnames[heading][1-1]{author}} {\printnames[heading]{author}}% \setunit{\addcomma\space}% \usebibmacro{bbx:savehash}}% \usebibmacro{authorstrg}% \setunit*{\addspace}} {\global\undef\bbx@lasthash% \usebibmacro{labeltitle}% \setunit*{\addspace}}% \usebibmacro{labelyear+extradate}} \renewbibmacro*{editor}{% \usebibmacro{bbx:editor}{editorstrg}} \renewbibmacro*{editor+others}{% \usebibmacro{bbx:editor}{editor+othersstrg}} \renewbibmacro*{bbx:editor}[1]{% \ifboolexpr{ test \ifuseeditor and not test {\ifnameundef{editor}} } {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\printnames[heading]{editor}% \setunit{\addcomma\space}% \usebibmacro{bbx:savehash}}% \usebibmacro{#1}% \clearname{editor}% \setunit*{\addspace}}% {\global\undef\bbx@lasthash% \usebibmacro{labeltitle}% \setunit*{\addspace}}% \usebibmacro{labelyear+extradate}} \renewbibmacro*{translator}{% \usebibmacro{bbx:translator}{translatorstrg}} \renewbibmacro*{translator+others}{% \usebibmacro{bbx:translator}{translator+othersstrg}} \renewbibmacro*{bbx:translator}[1]{% \ifboolexpr{ test \ifusetranslator and not test {\ifnameundef{translator}} } {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\printnames[heading]{translator}% \setunit{\addcomma\space}% \usebibmacro{bbx:savehash}}% \usebibmacro{#1}% \clearname{translator}% \setunit*{\addspace}}% {\global\undef\bbx@lasthash% \usebibmacro{labeltitle}% \setunit*{\addspace}}% \usebibmacro{labelyear+extradate}} \endinput