autoryear-ext с introcite=label: Удалить букву extradate из библиографической записи, но не из метки

autoryear-ext с introcite=label: Удалить букву extradate из библиографической записи, но не из метки

Меня просят создать библиографию в стиле authoryear с указанием только первого автора в метке. В случае амбициозной метки к году добавляется буква. Это можно легко сделать с помощью следующего кода (взятого изСоздание библиографии с фиксированным отступом и метками года автора с использованием biblatex и biber):

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[style=ext-authoryear, backend=biber, maxcitenames=1, uniquename=false, uniquelist=false, introcite=label, dashed=false]{biblatex}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
  @book{Shepard2001a,
  author = {Shepard, Frank and Fisher, John},
  year = {2001},
  title = {Livestock management},
}
@book{Shepard2001b,
  author = {Shepard, Frank and Farmer, Boris},
  year = {2001},
  title = {On food supplies},
}
\end{filecontents*}
\addbibresource{\jobname.bib} % if you’re using biblatex\addbibresource{biblatex-examples.bib}

\setlength{\bibitemsep}{0.5\baselineskip plus 0.5\baselineskip}
\setlength{\introcitewidth}{6em}

\begin{document}
  \cite{Shepard2001a, Shepard2001b}
  \printbibliography
\end{document}

Как вы видите, я использую ext-authoryearfrom biblatex-extwith introcite=label.

Результат выглядит так: введите описание изображения здесь

Это хорошо, за исключением того, что в библиографической записи букву, добавленную к году, следует удалить. Я отметил «оскорбительную» букву красной линией. То есть: мне нужна буква в этикетке, но не в самой библиографической записи. Запись для MWE должна выглядеть так:

Shepard et al. 2001a
   Shepard, Frank and Boris Farmer (2001), ...

Я не мог понять, где это изменить.

решение1

заменив \printdateextraна \printdateв data+extradateмакросе:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[style=ext-authoryear, backend=biber, maxcitenames=1, uniquename=false, uniquelist=false, introcite=label, dashed=false]{biblatex}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
  @book{Shepard2001a,
  author = {Shepard, Frank and Fisher, John},
  year = {2001},
  title = {Livestock management},
}
@book{Shepard2001b,
  author = {Shepard, Frank and Farmer, Boris},
  year = {2001},
  title = {On food supplies},
}
\end{filecontents*}
\addbibresource{\jobname.bib} % if you’re using biblatex\addbibresource{biblatex-examples.bib}

\setlength{\bibitemsep}{0.5\baselineskip plus 0.5\baselineskip}
\setlength{\introcitewidth}{6em}

\makeatletter
  \renewbibmacro*{date+extradate}{%
    \iffieldundef{labelyear}
      {}
      {\printtext[\blx@delimcontext labeldate]{%
         \iflabeldateisdate
           {\printfield{issue}%
            \setunit*{\addspace}%
            \printdate}
           {\printlabeldateextra}}}}%
  \renewbibmacro*{bbx:ifmergeddate}{\iflabeldateisdate}%
  \renewbibmacro*{issue+date}{%
    \usebibmacro{bbx:ifmergeddate}
      {}
      {\printtext[issuedate]{%
         \printfield{issue}%
         \setunit*{\addspace}%
         \printdate}}}
\makeatother

\begin{document}
  \cite{Shepard2001a, Shepard2001b}
  \printbibliography
\end{document}

введите описание изображения здесь

решение2

Код для печати даты меняется в зависимости от выбранной mergedateнастройки. Предварительная настройка mergedate=trueэквивалентна mergedate=compact, где изменения могут быть ограничены следующим образом.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[style=ext-authoryear, backend=biber,
  maxcitenames=1, uniquename=false, uniquelist=false,
  introcite=label, dashed=false]{biblatex}

\setlength{\bibitemsep}{0.5\baselineskip plus 0.5\baselineskip}
\setlength{\introcitewidth}{6em}

\makeatletter
\renewbibmacro*{date+extradate}{%
  \iffieldundef{labelyear}
    {}
    {\printtext[\blx@delimcontext labeldate]{%
       \iflabeldateisdate
         {\printdate}
         {\printlabeldate}}}}
\makeatother


\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
  @book{Shepard2001a,
  author = {Shepard, Frank and Fisher, John},
  year   = {2001},
  title  = {Livestock management},
}
@book{Shepard2001b,
  author = {Shepard, Frank and Farmer, Boris},
  year   = {2001},
  title  = {On food supplies},
}
\end{filecontents*}
\addbibresource{\jobname.bib}

\begin{document}
  \cite{Shepard2001a, Shepard2001b}
  \printbibliography
\end{document}

Шепард и др. 2001a/Шепард, Фрэнк и Борис Фармер (2001). О продовольственном снабжении.//Шепард и др. 2001b/Шепард, Фрэнк и Джон Фишер (2001). Управление животноводством.

Другой ответиспользовал код для mergedate=maximumкак основу и переопределил bbx:ifmergeddateи issue+dateтакже, хотя это не было необходимо. В коде здесь мы также удалили extradateинформацию в случае, когда \iflabeldateisdateложно.


Другим вариантом с другим результатом было бы объединение authoryearцитат с authortitleбиблиографией.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[backend=biber, bibstyle=ext-authortitle, citestyle=ext-authoryear,
  sorting=nyt,
  maxcitenames=1, uniquename=false, uniquelist=false,
  introcite=label, dashed=false]{biblatex}

\setlength{\bibitemsep}{0.5\baselineskip plus 0.5\baselineskip}
\setlength{\introcitewidth}{6em}

\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
  @book{Shepard2001a,
  author = {Shepard, Frank and Fisher, John},
  year   = {2001},
  title  = {Livestock management},
}
@book{Shepard2001b,
  author = {Shepard, Frank and Farmer, Boris},
  year   = {2001},
  title  = {On food supplies},
}
\end{filecontents*}
\addbibresource{\jobname.bib}

\begin{document}
  \cite{Shepard2001a, Shepard2001b}
  \printbibliography
\end{document}

Шепард и др. 2001a/Шепард, Фрэнк и Борис Фармер. О продовольственном снабжении. 2001.//Шепард и др. 2001b/Шепард, Фрэнк и Джон Фишер. Управление животноводством. 2001.

Связанный контент