autoryear-ext with introcite=label: 書誌エントリからextradate文字を削除しますが、ラベルからは削除しません

autoryear-ext with introcite=label: 書誌エントリからextradate文字を削除しますが、ラベルからは削除しません

ラベルに最初の著者のみを記載した著者年形式の参考文献を作成するよう依頼されました。野心的なラベルの場合は、年に文字を追加します。これは、次のコードで簡単に作成できます(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}

ご覧のとおり、私は from を と共に使用してext-authoryearbiblatex-extますintrocite=label

結果は次のようになります: ここに画像の説明を入力してください

これは良いのですが、参考文献のエントリでは、年に追加された文字を削除する必要があります。私は「問題のある」文字を赤い線でマークしました。つまり、ラベルには文字が必要ですが、参考文献のエントリ自体には不要です。MWE のエントリは次のようになります。

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

どこを変更すればよいのか分かりませんでした。

答え1

マクロ内の\printdateextraを置き換えます:\printdatedata+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}

Shepard et al. 2001a/Shepard, Frank および Boris Farmer (2001)。食糧供給について。//Shepard et al. 2001b/Shepard, Frank および John Fisher (2001)。家畜管理。

もう一つの答えのコードにmergedate=maximum基づいて と も再定義しましたbbx:ifmergeddateissue+date、これは必要ではありませんでした。このコードでは、 がfalse の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}

Shepard et al. 2001a/Shepard, Frank および Boris Farmer。食糧供給について。2001 年。//Shepard et al. 2001b/Shepard, Frank および John Fisher。家畜管理。2001 年。

関連情報