我正在寻找一种方法来强制biblatex
删除除第一个之外的所有名字。我实际上只使用首字母,但当作者连续有 3-4 个名字并且只有第一个名字为人所知时,即使这样也会变得混乱。
假设我引用了这个家伙的话:
John Paul Peter Julian Doe
输出将是:
J. P. D. J. Doe
这已经很长了。删除点和细空格并不是一个真正的选择。我希望它最终只是J. Doe
用于参考的文内(cbx
)部分。
基于这个相关问题biblatex
,我认为使用+是可能的biber
,而且这是我所赞成的解决方案。
答案1
可以通过创建一个新的姓名格式来解决这个问题,将名字格式化为第一个首字母:
% Format for VeryFirstInitial - LastName
\DeclareNameFormat{firstfirstinit-last}{%
\usebibmacro{name:first-last}{#1}{\firstinit{#4}\adddot}{#5}{#7}%
\usebibmacro{name:andothers}}
为此,我使用了一个自定义宏,它只识别名字的第一个首字母(由@StevenBSegletes 提供,仅排版一组中的第一个字母):
% Helper function to get initial letter
\def\firstinit#1{\justfirst#1\relax}
\def\justfirst#1#2\relax{#1}
然后biblatex
设置为在参考书目中使用首字母,并且在文内引用中仅使用第一个首字母:
% Set format for sortname (bibliography) and labelname (citation)
\DeclareNameAlias{sortname}{firstinits-last}
\DeclareNameAlias{labelname}{firstfirstinit-last}
结果
平均能量损失
\documentclass[]{article}
\usepackage{filecontents}
\begin{filecontents*}{bib.bib}
@article{jdoe,
author = {John Paul Peter Julian Doe},
journal = {Journal},
title = {Title},
year = 2014,
pages = 111--222,
}
\end{filecontents*}
\usepackage[style=authoryear]{biblatex}
\addbibresource{bib.bib}
% Helper function to get initial letter
\def\firstinit#1{\justfirst#1\relax}
\def\justfirst#1#2\relax{#1}
% Format for FirstInitials - LastName (standard implementation)
\DeclareNameFormat{firstinits-last}{%
\usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
\usebibmacro{name:andothers}}
% Format for VeryFirstInitial - LastName
\DeclareNameFormat{firstfirstinit-last}{%
\usebibmacro{name:first-last}{#1}{\firstinit{#4}\adddot}{#5}{#7}%
\usebibmacro{name:andothers}}
% Set format for sortname (bibliography) and labelname (citation)
\DeclareNameAlias{sortname}{firstinits-last}
\DeclareNameAlias{labelname}{firstfirstinit-last}
\begin{document}
\noindent Citation: \cite{jdoe}.
\printbibliography[]
\end{document}