如何使用 biblatex 获取唯一且简短的标签名称?

如何使用 biblatex 获取唯一且简短的标签名称?

考虑一下这个 MWE

\documentclass{article}
\begin{filecontents}[force]{\jobname.bib}
@book{Lazarenko2013,
   author   = {Lazarenko, Igor and Mircheva, Elina and Encheva, Radostina and Stoyanova, Daniela and Sharankov, Nikolay},
   title    = {The Temple of the Pontic Mother of Gods in Dionysopolis},
   date     = {2013},
   location = {Varna},
}

@incollection{Lazarenko2010,
   author    = {Lazarenko, Igor and Mircheva, Elina and Encheva, Radostina and Sharankov, Nikolaj},
   title     = {The Temple of the Pontic Mother of Gods in Dionysopolis},
   date      = {2010},
   booktitle = {Ancient Sacral Monuments in the Black Sea},
   editor    = {Petropoulos, Elias K. and Maslennikov, Alexander A.},
   location  = {Thessaloniki},
   pages     = {13--62},
}
\end{filecontents}
\usepackage[backend=biber,
   citestyle   = ext-authoryear
  ,bibstyle    = ext-authortitle
  ,isbn        = false
  ,introcite   = label
  ,dashed      = false
  ,articlein   = false
  ,sorting     = nyt
  % ,maxnames    = 2
  % ,minnames    = 1
  % ,uniquename=full
  ,maxbibnames = 999
]{biblatex}
\addbibresource{\jobname.bib}


\begin{document}
\nocite{*}
\printbibliography
\end{document}

输出为

在此处输入图片描述

我想要一个简短但独特的标签名称 - 在这种情况下它应该是Lazarenko 2010Lazarenko 2013

答案1

根据“简短但独特”对您来说的具体含义,您的里程可能会有所不同。

你一定会想看看选项uniquelist。有了它,uniquelist=false,您可以停止biblatex尝试使作者列表唯一,这样(min|max)citenames我们就可以得到“Lazarenko et al. 2010”和“Lazarenko et al. 2013”​​的适当值。如果两部作品来自同一年,该uniquelist选项还有一个选项minyear可以再次扩展列表。有关更多信息,uniquelist请参见第 68 页和 §4.11.4名称歧义消除文档biblatex

许多设置的人uniquelist=false,也想设置uniquename=false,(该uniquename选项有更多可能的值,在文档中通过示例进行了解释(!))。

如果您还想去掉“et al.” (我不推荐这样做),则需要选项来nohashothers=true,确保extradate在必要时生成值。您可能还想设置nosortothers=true,以避免违反直觉的排序结果。设置这些选项后,您可以开始抑制“et al.”。最好通过重新定义格式来完成此操作labeldate(原始定义可以在参见biblatex.def(v3.14)第 933-960 页)。 也可以看看https://github.com/plk/biblatex/issues/861

\documentclass{article}

\usepackage[backend=biber,
   citestyle    = ext-authoryear
  ,bibstyle     = ext-authortitle
  ,isbn         = false
  ,introcite    = label
  ,dashed       = false
  ,articlein    = false
  ,sorting      = nyt
  ,maxcitenames = 2
  ,mincitenames = 1
  ,uniquelist   = false
  ,uniquename   = false
  ,nohashothers = true
  ,nosortothers = true
  ,maxbibnames  = 999
]{biblatex}

\DeclareNameFormat{labelname}{%
  \ifcase\value{uniquename}%
    \usebibmacro{name:family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \or
    \ifuseprefix
      {\usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefix}
        {\namepartsuffixi}}
      {\usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefixi}
        {\namepartsuffixi}}%
  \or
    \usebibmacro{name:given-family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \fi}

\begin{filecontents}{\jobname.bib}
@book{Lazarenko2013,
  author   = {Lazarenko, Igor and Mircheva, Elina
              and Encheva, Radostina and Stoyanova, Daniela
              and Sharankov, Nikolay},
  title    = {The Temple of the Pontic Mother of Gods in Dionysopolis},
  date     = {2013},
  location = {Varna},
}
@incollection{Lazarenko2010,
  author    = {Lazarenko, Igor and Mircheva, Elina
               and Encheva, Radostina and Sharankov, Nikolaj},
  title     = {The Temple of the Pontic Mother of Gods in Dionysopolis},
  date      = {2010},
  booktitle = {Ancient Sacral Monuments in the Black Sea},
  editor    = {Petropoulos, Elias K. and Maslennikov, Alexander A.},
  location  = {Thessaloniki},
  pages     = {13--62},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

拉扎连科 2010//拉扎连科 2013

相关内容