我使用 biblatex 来列出我引用的科学资源。但我还想为所有我引用的在线资源添加第二个列表。我将参考书目分成两个文件,references.bib
然后online.bib
打印两个参考书目:
\printbibliography[heading=bibintoc, nottype=online]
\printbibliography[title={Web References}, type=online]
我用alphabetic-verb
参考书目样式,其中使用像 [ABD+14] 这样的键/标签,即作者姓名首字母和出版日期。
问题是,对于在线资料,我经常不知道作者或出版日期。如果我不知道作者,我会使用标题的首字母来构建密钥。
如果未指定作者,如何自定义根据标题构建参考书目关键词?
我的 MWE:
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage{english}
\usepackage{filecontents}
\usepackage[natbib=true,backend=biber,style=alphabetic-verb]{biblatex}
\begin{filecontents}{references.bib}
@Article{a,
author = {Some Author and Some Otherauthor and More Of Thiskind and A Longlist},
title = {Some Paper Title},
journal = {Journal of Papers},
year = {2018},
}
@InProceedings{b,
author = {Some Author and Some Otherauthor},
title = {Some Other Paper Title},
journal = {Journal of Papers},
year = {2019},
}
\end{filecontents}
\begin{filecontents}{online.bib}
@online{texoverflow,
title={TeX Stack Exchange},
shorttitle={TeX},
urldate={2020-01},
url={https://tex.stackexchange.com/},
note = {\url{https://web.archive.org/web/20200101144309/https://tex.stackexchange.com/}},
}
\end{filecontents}
\addbibresource{references.bib}
\addbibresource{online.bib}
\begin{document}
Two papers \cite{a,b}.
Tex StackExchange is an online community\footnote{Stackoverflow: \cite{texoverflow}}.
\printbibliography[heading=bibintoc, nottype=online]
\printbibliography[title={Web References}, type=online]
\end{document}
结果是:
但我希望有像 [Tex] 这样的东西作为在线参考的关键词。
编辑我添加了一个只有两位作者的条目来介绍这个案例。
答案1
这很简单。标签由 控制\DeclareLabelalphaTemplate
。
默认定义是:
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
\field[strwidth=3,strside=left,ifnames=1]{labelname}
\field[strwidth=1,strside=left]{labelname}
}
\labelelement{
\field[strwidth=2,strside=right]{year}
}
}
因此您只需将其添加shorthand={TeX}
到您的条目中并将其用作标签。
在评论中@moewe 建议(你应该听他的)将其添加label={TeX}
到你的条目中是最好的选择。手册中对此字段的描述biblatex
解释了它的工作原理:
如果生成常规标签所需的任何数据缺失,则引用样式将使用 来替代常规标签。例如,当作者-年份引用样式为缺少作者或年份的条目生成引用时,它可能会回退到
label
。有关详细信息,请参阅 § 2.3.2。请注意,与 相比shorthand
,label
仅用作后备。另请参阅shorthand
。
如果您想使用标题,则需要\DeclareLabelalphaTemplate
稍微调整定义。您必须告诉定义使用字段labeltitle
:
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
\field[strwidth=3,strside=left,ifnames=1]{labelname}
\field[strwidth=1,strside=left]{labelname}
\field{labeltitle}
}
\labelelement{
\field[strwidth=2,strside=right]{year}
}
}
默认情况下,这将使用TeX 堆栈交换作为标签,这有点长。但是,如果您shorttitle
在条目中添加字段,则将改用此字段。
除非您需要让您的 bib 条目在样式之间保持灵活性,并且使用该shorthand
字段会使事情变得混乱,否则简单地使用shorthand={TeX}
可能是最简单和最好的选择。
平均能量损失
这个 MWE 演示了如何使用标题作为标签。
\documentclass{article}
\begin{filecontents}[overwrite]{\jobname.bib}
@Article{a,
author = {Some Author and Some Otherauthor and More Of Thiskind and A Longlist},
title = {Some Paper Title},
journal = {Journal of Papers},
year = {2018},
}
@online{texoverflow,
title={TeX Stack Exchange},
shorttitle={TeX},
urldate={2020-01},
url={https://tex.stackexchange.com/},
note = {\url{https://web.archive.org/web/20200101144309/https://tex.stackexchange.com/}},
}
\end{filecontents}
\usepackage{polyglossia}
\setmainlanguage{english}
\usepackage[natbib=true,backend=biber,style=alphabetic-verb]{biblatex}
\addbibresource{\jobname.bib}
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
\field[strwidth=3,strside=left,ifnames=1]{labelname}
\field[strwidth=1,strside=left,final]{labelname}
\field{labeltitle}
}
\labelelement{
\field[strwidth=2,strside=right]{year}
}
}
\begin{document}
A Paper \cite{a}
Tex StackExchange is an online community\footnote{Stackoverflow: \cite{texoverflow}}.
\printbibliography[heading=bibintoc, nottype=online]
\printbibliography[title={Web References}, type=online]
\end{document}