我试图让我的参考书目显示参考文献为 [ABCD01],其中:
ABCD 是第一作者姓氏的前 4 个字母(如果姓氏少于 4 个字母,则用下划线代替缺失的字符),
01 是年份的最后两位数字。
我怎样才能做到这一点?
PS:如果ABCD能够采用小型大写字母,那就更好了,但我不知道是否可以做到这一点。
答案1
您在问题中问了几个问题。这是我提出的解决方案,后面附有解释。
\documentclass{article}
\usepackage{xstring}
\usepackage[style=alphabetic,maxbibnames=99]{biblatex}
\addbibresource{ref.bib}
\DeclareLabelalphaTemplate{
\labelelement{
\field[strwidth=4,strside=left,names=1,lowercase]{labelname}
}
\labelelement{
\field[strwidth=2,strside=right]{year}
}
}
\renewcommand{\labelalphaothers}{}
\DeclareFieldFormat{labelalpha}{\textsc{\padded{#1}}}
%\DeclareFieldFormat{extraalpha}{\textsc{\mknumalph{#1}}}
\newcommand{\padded}[1]{\begingroup%
\expandarg\StrGobbleRight{#1}{2}[\mystr]%
\StrLeft{\mystr \textunderscore\textunderscore\textunderscore\textunderscore}{4}%
\StrRight{#1}{2}%
\endgroup}
\begin{document}
\cite{one,oneo,two,three,four}
\printbibliography
\end{document}
在ref.bib
我的答案的最后给出了。
首先,alphabetic
样式最接近您要求的样式,可通过 进行修改\DeclareLabelalphaTemplate
。上面的代码从第一作者的姓氏中取出最多四个字符,添加到年份的最后两位数字,并在必要时添加一个字母以消除歧义。我们将字母设为小写,以准备将其设为小写。
该命令设置\labelalphaothers
为空,确保+
当有多个作者时不添加符号。
通过更改 的字段格式,可以将标签格式化为小写字母labelalpha
。这是标签的一部分,包括年份数字,但不包括消歧义字母。如果您希望将其格式化为小写字母,请取消注释带有 的行extraalpha
。
现在我使用xstring
包通过命令 来处理填充问题\padded
。我们去掉年份,添加下划线,只取前四个字符。然后我们把年份放回去。该\expandarg
命令确保 只\mystring
在 的参数中被扩展\StrLeft
,扩展下划线会带来问题。
@Article{one,
author = {Author, A. N. and Brother, K. and Style, D.},
title = {One article},
journal = {J. J.},
year = 2003
}
@Article{oneo,
author = {Any, A. N. and Brother, K. and Stile, D.},
title = {One article},
journal = {J. J.},
year = 2003
}
@Misc{three,
author = {Ma, A. and Many, B. and Many, C. and Many, D. and
Many, E.},
title = {One page},
year = 2005
}
@Misc{four,
author = {Ma, A. and Many, B. and Many, C. and Many, D. and
Many, F.},
title = {One page},
year = 2005
}
@Book{two,
author = {Weeks, P. and Days, X. and Years, R. and Months, S.},
editor = {May, X.},
title = {One book},
publisher = {U. Publ.},
year = 2001
}
答案2
Biblatex 2.6+biber 1.6(均位于 SourceForge 上的开发文件夹中)现已内置此功能 - 有新的选项用于声明标签(请参阅 biblatex 文档)。例如,对于您的情况,只需将其放在您的序言中:
\DeclareLabelalphaTemplate{
\labelelement{
\field[strwidth=4, strside=left, padchar=_, lowercase]{labelname}
}
\labelelement{
\field[strwidth=2, strside=right]{year}
}
}
\renewcommand{\labelalphaothers}{}
这样做的一个隐藏的好处是标签的排序将是正确的,因为在内部,biber 必须进行大量的引用/取消引用才能使其在 TeX、XML(.bcf 文件)和排序算法之间工作。
答案3
我还没有机会测试这一点,但您应该能够使用该alphabetic
样式,同时将以下几行添加到您的序言中:
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
\field[strwidth=4,strside=left]{labelname}}
\labelelement{\field[strwidth=2,strside=right]{year}}}
\DeclareFieldFormat{labelalpha}{\textsc{#1}}%
它可能不会为名字少于四个字母的作者添加下划线,但这种情况并不常见。例如,对于名字简单的“Lee”的作者,您应该能够shorthand = {Lee_}
在 .bib 文件中定义该条目。