BibLaTeX:如何仅保留第一个名字?

BibLaTeX:如何仅保留第一个名字?

在我的参考书目中,我希望只保留第一个“名字”(当然,除了“姓氏”之外):没有其他名字,没有首字母。这出乎意料地难以实现。考虑一下这个 MWE:

\documentclass{scrreprt}

\usepackage[shorthands=off,american]{babel}
\usepackage{csquotes} 

\begin{filecontents}{\jobname.bib}

@article{Becker.2012,
  title = {Male gender bias in autism and pediatric autoimmunity},
  author = {Becker, Kevin G and John Q. Public},
  date = {2012},
  journaltitle = {Autism research},
  volume = {5},
  number = {2},
  pages = {77--83},
  langid = {english},  
}

@article{Bejerot.Eriksson.2014,
  title = {Sexuality and gender role in autism spectrum disorder},
  author = {Bejerot, Susanne Barbara Camelia and Eriksson, Jonna M},
  date = {2014},
  journaltitle = {PloS one},
  volume = {9},
  number = {1},
  pages = {111--141},
  langid = {english},  
}

@book{Cardon.Matson.2016,
  title = {Technology and the Treatment of Children with Autism Spectrum Disorder},
  editor = {Cardon, Teresa and Matson, Johnny X.},
  date = {2016},
  publisher = {Springer},
  location = {Heidelberg and New York and Dordrecht and London},
  langid = {english},
 }

\end{filecontents}

\usepackage[bibstyle=verbose, language=auto, autolang=other, dashed=true,
 maxcitenames=2, sorting=nyt, alldates=year]{biblatex}

\addbibresource{\jobname.bib}

% FAMILYNAME in small caps:
\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}}

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

我怎样才能摆脱这些“多余的”名字,除了将它们从我的 .bib 文件中删除之外,该文件经常从我无法控制的来源重新编译?

在此处输入图片描述

答案1

正如评论中提到的,biblatex(BibTeX 确实如此)没有中间名的概念。除姓氏、“von”部分(前缀)、“junior”部分(后缀)之外的所有内容均被理解为名字。

如果我们使用扩展名称格式并添加新的名称部分,那么可以biblatex区分第一个名字和中间名。但这需要稍微不自然的输入(参见Bibtex/Biber:如何使用埃塞俄比亚惯例引用作者?),尤其是不会改变文件中常规<prefix> <family>, <suffix>, <given>或顺序中指定的名称的处理。此解决方案的优点是 Biber 了解不同的名称部分,并可以相应地进行排序、名称唯一性等。<given> <prefix> <family>.bib

一个更简单的解决方案(缺点是 Biber 不知道它)是在解析名称之后在 LaTeX 端识别并删除中间名。如果您知道名称的特殊格式用途(名称部分用,分隔,而不仅仅是空格),l3regex这会非常容易。biblatex\bibnamedelima\bibnamedelimb\bibnamedelimi

\documentclass{scrreprt}

\usepackage[shorthands=off,american]{babel}
\usepackage{csquotes} 
\usepackage[bibstyle=verbose, language=auto, autolang=other, dashed=true,
 maxcitenames=2, sorting=nyt, alldates=year]{biblatex}

\renewcommand*{\mkbibnamefamily}{\textsc}
\renewcommand*{\mkbibnamegiven}{\getfirstgivenname}

\ExplSyntaxOn
\seq_new:N \l_ingmar_givennames_seq
\regex_const:Nn \c_ingmar_splitnames_regex { \c{bibnamedelim(a|b|i)}|\s+ }

\cs_new_protected_nopar:Npn \__ingmar_getfirstgiven:n #1
  {
    \regex_split:NnN \c_ingmar_splitnames_regex { #1 } \l_ingmar_givennames_seq
    \seq_item:Nn \l_ingmar_givennames_seq {1}
  }
  
\cs_generate_variant:Nn \__ingmar_getfirstgiven:n { o }
  
\NewDocumentCommand \getfirstgivenname {m}
  {
    \__ingmar_getfirstgiven:o {#1}
  }
\ExplSyntaxOff

\begin{filecontents}{\jobname.bib}
@article{Becker.2012,
  title        = {Male gender bias in autism and pediatric autoimmunity},
  author       = {Becker, Kevin G. and John Q. Public},
  date         = {2012},
  journaltitle = {Autism research},
  volume       = {5},
  number       = {2},
  pages        = {77--83},
  langid       = {english},  
}
@article{Bejerot.Eriksson.2014,
  title        = {Sexuality and gender role in autism spectrum disorder},
  author       = {Bejerot, Susanne Barbara Camelia and Eriksson, Jonna M.},
  date         = {2014},
  journaltitle = {PloS one},
  volume       = {9},
  number       = {1},
  pages        = {111--141},
  langid       = {english},  
}
@book{Cardon.Matson.2016,
  title     = {Technology and the Treatment of Children with Autism Spectrum Disorder},
  editor    = {Cardon, Teresa and Matson, Johnny X.},
  date      = {2016},
  publisher = {Springer},
  location  = {Heidelberg and New York and Dordrecht and London},
  langid    = {english},
}
\end{filecontents}
\addbibresource{\jobname.bib}

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

Becker, Kevin 和 John Public。“自闭症和儿童自身免疫中的男性性别偏见”。在:自闭症研究 5.2(2012 年),第 77-83 页。Bejerot, Susanne 和 Jonna Eriksson。“自闭症谱系障碍中的性行为和性别角色”。在:PloS one 9.1(2014 年),第 111-141 页。Cardon, Teresa 和 Johnny Matson 编辑。技术与自闭症谱系障碍儿童的治疗。海德堡等:Springer,2016 年。

您可以看到问题出在

\documentclass{article}

\usepackage[shorthands=off,american]{babel}
\usepackage{csquotes} 
\usepackage[style=authoryear]{biblatex}

\renewcommand*{\mkbibnamefamily}{\textsc}
\renewcommand*{\mkbibnamegiven}{\getfirstgivenname}

\ExplSyntaxOn
\seq_new:N \l_ingmar_givennames_seq
\regex_const:Nn \c_ingmar_splitnames_regex { \c{bibnamedelim(a|b|i)}|\s+ }

\cs_new_protected_nopar:Npn \__ingmar_getfirstgiven:n #1
  {
    \regex_split:NnN \c_ingmar_splitnames_regex { #1 } \l_ingmar_givennames_seq
    \seq_item:Nn \l_ingmar_givennames_seq {1}
  }
  
\cs_generate_variant:Nn \__ingmar_getfirstgiven:n { o }
  
\NewDocumentCommand \getfirstgivenname {m}
  {
    \__ingmar_getfirstgiven:o {#1}
  }
\ExplSyntaxOff

\begin{filecontents}{\jobname.bib}
@book{doe:a,
  title        = {Book A},
  author       = {Jane Emilia Doe},
  date         = {2020},
}
@book{doe:b,
  title        = {Book B},
  author       = {Jane Edith Doe},
  date         = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
  \cite{doe:a,doe:b}
  \printbibliography
\end{document}

Jane Doe 2020;Jane Doe 2020 参考文献 Doe, Jane (2020)。书 B。Doe, Jane (2020)。书 A。

两部不同的作品似乎具有相同的引用标签,并且doe:b似乎在之前被错误地排序doe:a


这两种方法的融合是使用 Biber 源映射在读取数据时直接删除不需要的中间名首字母。不幸的是,这样的解决方案必须复制部分名称解析本身,因为它必须处理所有Jane Emilia DoeDoe, Jane EdithGeorgina Anne de la Name Nother 它们被分成其名称部分。

答案2

(这算是非答案,但对于评论来说太长了。)

您无法安全地从这样的全名自动生成可接受的名称形式。如果您的 bib 文件中有“John Ronald Reuel Tolkien”,那么程序错误地将他在参考书目中变成“John Tolkien”就太糟糕了。“Alan Milne”、“Thomas Eliot”等也是如此。

在您的书目文件中出现“Johan August Strindberg”并让程序将其输出为“Johan Strindberg”也是不对的。这是错误的。在这种情况下,您应该在书目中只写“Strindberg, August”,因为这是该作者的名字,在标题页和其他地方都使用过。书目不是完整的法定名称的地方,所以一开始就不要把它放在书目文件中。

如果作者在标题页等处使用了多个名字,例如 Philip José Farmer,您无权决定只使用“Philip Farmer”就足够了。首字母缩写也一样。名字可能以多种形式出现在印刷品中。例如,有些书的封面上 Robert A. Heinlein 的名字只是“Robert Heinlein”,但执行您想要的自动系统不会知道这一点,如果放任不管,就会创建不可接受的名字形式。

相关内容