自定义 Biblatex 参考样式

自定义 Biblatex 参考样式

我试图让我的参考书目显示参考文献为 [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 文件中定义该条目。

相关内容