我正在尝试创建 biblatex 命令的版本,以引用作者的完整姓名。下面的代码似乎让我完成了一半,尽管它只使用名字的首字母,而不是完整名字(或者更好的是,完整名字加上中间名的首字母),我更喜欢后者。
如果还有其他方法可以改进以下宏定义,我也会很高兴知道。
\newrobustcmd*{\nextcitefullname}{%
\AtNextCite{\DeclareNameAlias{labelname}{given-family}}% from https://tex.stackexchange.com/a/537722/303
}
% Not sure if I should be using \DeclareCiteCommand here instead.
\NewDocumentCommand \citeauthorfullname { s } {
\nextcitefullname
\IfBooleanTF #1 { \citeauthor* } { \citeauthor }
}
\NewDocumentCommand \Citeauthorfullname { s } {
\nextcitefullname
\IfBooleanTF #1 { \Citeauthor* } { \Citeauthor }
}
\NewDocumentCommand \textcitefullname { } {
\nextcitefullname
\textcite
}
\NewDocumentCommand \Textcitefullname { } {
\nextcitefullname
\textcite
}
通过上述内容,我将在我的文档中得到例如“D. Hume”,而不是“David Hume”。
答案1
您的代码在标准样式和默认设置下可以正常工作。它可以稍微简化,但它可以完成预期的工作。
但是,如果您(或您的样式)指定了该giveninits
选项,代码将不会为您提供完整的名字。在这种情况下,您需要通过将此选项的内部切换设置为 来本地对抗该选项false
。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[
backend=biber,
style=authoryear,
giveninits=true, uniquename=init,
natbib
]{biblatex}
\newrobustcmd*{\nextcitefullname}{%
\AtNextCite{%
\DeclareNameAlias{labelname}{given-family}%
\togglefalse{abx@bool@giveninits}}}
\newcommand\citeauthorfullname{%
\nextcitefullname\citeauthor}
\newcommand\Citeauthorfullname{%
\nextcitefullname
\Citeauthor}
\newcommand\textcitefullname{%
\nextcitefullname
\textcite}
\newcommand\Textcitefullname{%
\nextcitefullname
\textcite}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem \autocite{sigfridsson}
\citeauthor{sigfridsson}
\citeauthorfullname{sigfridsson}
\citeauthor{aksin}
\citeauthor*{aksin}
\citeauthorfullname{aksin}
\citeauthorfullname*{aksin}
Lorem \autocite{sigfridsson}
\printbibliography
\end{document}
正如评论中提到的,biblatex
没有中间名的概念,因此没有简单的方法只显示名字和缩写中间名。另请参阅https://github.com/plk/biblatex/issues/1094也在 biblatex 中仅缩写中间名,使用 BibLaTeX 的参考书目:不要缩写第一个名字,并缩写所有其他名字,BibLaTeX:如何仅保留第一个名字?。