书目中的首字母。firstinits/uniquename 在 biblatex 中无法正常工作?

书目中的首字母。firstinits/uniquename 在 biblatex 中无法正常工作?

考虑两个 MWE (最小工作示例):

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{Delbaen1998,
year={1998},
title={Title3},
author={Delbaen, F.},
}
@article{Delbaen1994,
year={1994},
title={Title2},
author={Delbaen, Freddy},
}
@article{Delbaen1993,
year={1993},
title={Title1},
author={Delbaen, Freddy},
}
\end{filecontents}

\documentclass{article}
\usepackage[latin9]{inputenc}
\usepackage[style=authoryear
,uniquename=init
,firstinits=true
,backend=biber]{biblatex}
\bibliography{\jobname}

\begin{document}

\cite{Delbaen1993,Delbaen1994,Delbaen1998}

\printbibliography
\end{document}

1型

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{Delbaen1998,
year={1998},
title={Title3},
author={Delbaen, Freddy},  % <----- THIS IS THE ONLY DIFFERENCE !
}
@article{Delbaen1994,
year={1994},
title={Title2},
author={Delbaen, Freddy},
}
@article{Delbaen1993,
year={1993},
title={Title1},
author={Delbaen, Freddy},
}
\end{filecontents}

\documentclass{article}
\usepackage[latin9]{inputenc}
\usepackage[style=authoryear
,uniquename=init
,firstinits=true
,backend=biber]{biblatex}
\bibliography{\jobname}

\begin{document}

\cite{Delbaen1993,Delbaen1994,Delbaen1998}

\printbibliography
\end{document}

微波辐射计

该选项的效果uniquename=init是,具有相同首字母的名字唯一地标识了一条引文。该选项firstinits=true使参考书目仅显示首字母。

不知怎的,我觉得这两个名字(Freddy Delbaen 和 F. Delbaen)在参考文献中也应该被视为“相同”。这意味着,第一个 MWE 中的排序和破折号应该与第二个示例中的相同。

如何才能实现这一点,而无需手动编辑我的 bibtex 数据库?

(您认为这应该是预期的行为吗?)

答案1

作者经常以多种姓名发表作品(例如,博士论文通常以作者的法定全名发表),在这种情况下,我希望将单个作者的出版物在参考书目中一起排序,并在我的文内引用中分组。我也同意最好让该author字段代表姓名的出版形式。

针对此类情况,我的解决方案如下:

  1. 使用条目sortname中的字段.bib来建立在参考书目中对条目进行排序时要使用的名称格式。您的第一个条目将是:

    @article{Delbaen1998,
    year={1998},
    title={Title3},
    author={Delbaen, F.},
    sortname={Delbaen, Freddy},
    }
    
  2. biblatex将以下代码添加到您的序言中。这决定了创建字段时要查看的字段顺序labelname。通过将其放在sortname顶部,您在sortname字段中输入的任何内容都将覆盖该author字段,以便用于文内引用和参考书目破折号。(您可以根据需要重新排列其他字段的顺序;sortname只需将其放在顶部即可。)

    \DeclareLabelname{%
        \field{sortname}
        \field{shortauthor}
        \field{author}
        \field{shorteditor}
        \field{editor}
        \field{translator}
    }
    

该解决方案允许您实施权限控制而无需从字段中删除信息,并且如果您确实想利用的消歧义功能,author它还允许您使用全部选项。uniquenamebiblatex

我应该指出,我通常使用一种样式,即作者姓名在参考书目中全写。我描述的方法适用于这些样式以及 MWE 中的首字母缩写样式。在全写样式中,字段author将在参考书目中全写,但sortname控制排序和文内引用中出现的内容。

编辑:根据@Christian Hupfer 的建议,这里有一个基于@user4514 的 MWE 的完整示例。

    \RequirePackage{filecontents}
    \begin{filecontents}{\jobname.bib}
    @article{Delbaen1998,
    year={1998},
    title={Title3},
    author={Delbaen, F.},
    sortname={Delbaen, Freddy}, % This author is really Freddy Delbaen, not some other F. Delbaen.
    }
    @article{Delbaen1994,
    year={1994},
    title={Title2},
    author={Delbaen, Freddy},
    }
    @article{Delbaen1993,
    year={1993},
    title={Title1},
    author={Delbaen, Freddy},
    }
    \end{filecontents}

    \documentclass{article}
    \usepackage[latin9]{inputenc}
    \usepackage[style=authoryear
    ,uniquename=init
    ,firstinits=true
    ,backend=biber]{biblatex}

    \DeclareLabelname{%
        \field{sortname} % sortname takes precedence over author for grouping/dashing
        \field{shortauthor}
        \field{author}
        \field{shorteditor}
        \field{editor}
        \field{translator}
    }

    \bibliography{\jobname}

    \begin{document}

    \cite{Delbaen1993,Delbaen1994,Delbaen1998}

    \printbibliography
    \end{document}

输出:

在此处输入图片描述

biblatex对于拼写样式,有以下选项:

    \usepackage[style=authoryear-comp % compact citations (authors' names are not repeated if identical)
    ,dashed=false % no dash in bibliography
    ,uniquename=init % we can still disambiguate names in citations
    ,firstinits=false % full names are used in bibliography
    ,backend=biber]{biblatex}

您将获得以下输出:

在此处输入图片描述

编辑:上述答案适用于biblatex2.9a 版本。如果您使用 3.0 或更高版本,则需要在步骤 2 的序言中使用以下代码,而不是上面给出的代码。这将创建一个namea与 内容相同的字段sortname,然后namea用于文内引用,而不是sortname

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
       \step[fieldsource=sortname]
       \step[fieldset=namea, origfieldval, final]
    }
  }
}
\DeclareLabelname{%
    \field{namea}
    \field{shortauthor}
    \field{author}
    \field{shorteditor}
    \field{editor}
    \field{translator}
}

\DeclareLabelname 在 biblatex 3.0 中不起作用了解更多信息。

答案2

我认为这种行为有充分的理由。想象一下,你引用了 Frank Delbaen、Freddy Delbaen 和 Frannie Delbaen 的作品。最好将他们分开排序,但biber目前还不清楚第四个“F. Delbaen”到底是谁(是这三个人中的一个,还是其他人?)。如果参考书目足够长,并且只使用首字母,那么某种程度的歧义可能是不可避免的,无论是在输出端还是在(计算机生成的)输入端……

如果你不想“修复”你的书目数据库,你可以使用\DeclareSourceMap它来为你进行替换。例如:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite=true]{
      \step[fieldsource=author,
        match=\regexp{Delbaen,\s+F\.},
      replace=\regexp{Delbaen,\x20Freddy}]
    }
  }
}

应该可以解决问题。它会搜索“Delbaen,<+1 或更多空格>F。”并将其替换为“Delbaen, Freddy”(恰好有一个空格)。

相关内容