我想将速记作为单独的条目打印在参考书目中,使用biblatex
。
我的bibliography.bib
包含这个:
@Collection{Pauly1894--1980,
editor = {August Pauly and Georg Wissowa},
title = {Pauly’s Real-Encyclopädie der classischen Altertumswissenschaft},
year = {1894--1980},
location = {Stuttgart},
shorthand = {RE},
shorttitle = {RE},
}
由于这本百科全书通常使用的简写是 ›RE‹,因此我想要完整的条目,它将按字母 ›P‹(代表 Pauly)排序,以及在参考书目中一个非常简短的单独条目,如下所示:
RE,即 Pauly/Wissowa
›,即 Pauly/Wissowa‹ 可以是文本字符串和从原始条目中获取的内容的任意组合。重要的是,速记要放在首位。
\documentclass{scrbook}
\usepackage{fontspec}
\usepackage[backend=biber]{biblatex}
\addbibresource{bibliography.bib}
\begin{document}
\nocite{Pauly1894--1980}
\printbibliography
\end{document}
背景知识:我知道可以打印速记列表。由于我的参考书目只包含其中的两三个,所以这似乎有点臃肿。对我来说,这似乎对于非常大的书目来说是一个可行的解决方案,但对于只包含几页的小书目来说则不然。
编辑:
在对我的一些文件使用 moewes answer 后(效果非常好),我注意到在原始帖子中,我在 BibTeX-Key 和 -macro 中放置了 ›–‹ 而不是 ›--‹ \nocite
。这带来了问题,因此我进行了更改。为了提供信息,我在这里写了这个。
答案1
书目规则之一biblatex
是,只有存在条目的文本才能包含在书目中。另一条规则是,每个条目在书目中只处理一次。
因此,如果您想要一个“second”/“viz.”条目作为简写,则需要为此创建一个新条目。但是,可以使用 Biber 的源映射自动创建此条目。在下面的代码中,这种情况发生在 中\DeclareSourcemap
。如果条目有一个shorthand
字段,则会创建一个新的类型条目specialshorthand
,其中包含简写以及父条目键。排序也设置正确。
然后,该特殊新类型的条目specialshorthand
将打印在参考书目中的正确位置。我们只需决定确切的输出。这就是 所做的\DeclareBibliographyDriver{specialshorthand}
。
我们还需要一个新的数据模型来定义specialshorthand
。在 MWE 中,这是使用 创建的filecontents
。在实际应用中,您可能会将创建的文件存储specialshorthands.dbx
在 TeX 可以找到的地方并删除filecontents
。
\documentclass{scrbook}
\usepackage{fontspec}
\usepackage{filecontents}
\begin{filecontents}{specialshorthands.dbx}
\DeclareDatamodelEntrytypes{specialshorthand}
\DeclareDatamodelFields[type=field, datatype=verbatim]{
parententry,
}
\DeclareDatamodelEntryfields[specialshorthand]{
parententry,
shorthand}
\end{filecontents}
\usepackage[backend=biber, style=authoryear, datamodel=specialshorthands, minxrefs=1]{biblatex}
\begin{filecontents}{\jobname.bib}
@collection{pauly,
editor = {August Pauly and Georg Wissowa},
title = {Pauly’s Real-Encyclopädie der classischen Altertumswissenschaft},
date = {1894/1980},
location = {Stuttgart},
shorthand = {RE},
shorttitle = {RE},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\DeclareSourcemap{
\maps{
\map{
\step[fieldsource=shorthand, final]
\step[fieldsource=entrykey, match=\regexp{(.*)}]
\step[fieldset=xref, fieldvalue=shorthand-of-$1]
\step[entrynew=shorthand-of-$1, entrynewtype=specialshorthand]
\step[fieldsource=shorthand]
\step[fieldset=shorthand, origfieldval, entrytarget=shorthand-of-$1]
\step[fieldset=sortname, origfieldval, entrytarget=shorthand-of-$1]% sortkey would be nicer here
\step[fieldsource=entrykey]
\step[fieldset=parententry, origfieldval, entrytarget=shorthand-of-$1]
\step[fieldset=options, fieldvalue=skiplab, entrytarget=shorthand-of-$1]
}
}
}
\NewBibliographyString{videlicet}
\DefineBibliographyStrings{english}{
videlicet = {viz\adddot},
}
\makeatletter
\DeclareBibliographyDriver{specialshorthand}{%
\usebibmacro{begentry}%
\printfield{shorthand}%
\setunit{\addcomma\space}%
\bibstring[\mkbibemph]{videlicet}%
\setunit{\addspace}%
\entrydata{\thefield{parententry}}{%
\begingroup
\DeclareFieldFormat{bibhyperref}{##1}%
\csuse{blx@hook@cite}%
\csuse{blx@hook@citekey}%
\undef\cbx@lasthash
\undef\cbx@lastyear
\citetrackerfalse\pagetrackerfalse\backtrackerfalse
\defcounter{maxnames}{\blx@maxcitenames}%
\clearfield{shorthand}%
\usebibmacro{cite}%
\endgroup}%
\usebibmacro{finentry}}
\makeatother
\begin{document}
\nocite{pauly,sigfridsson}
\printbibliography
\end{document}
对于尚未发布的biblatex
3.11/Biber 2.11,有些事情可以简化。然后 MWE 希望
\documentclass{scrbook}
\usepackage{fontspec}
\usepackage{filecontents}
\begin{filecontents}{specialshorthands.dbx}
\DeclareDatamodelEntrytypes{specialshorthand}
\DeclareDatamodelFields[type=field, datatype=verbatim]{
parententry,
}
\DeclareDatamodelEntryfields[specialshorthand]{
parententry,
shorthand}
\end{filecontents}
\usepackage[backend=biber, style=authoryear, datamodel=specialshorthands]{biblatex}
\begin{filecontents}{\jobname.bib}
@collection{pauly,
editor = {August Pauly and Georg Wissowa},
title = {Pauly’s Real-Encyclopädie der classischen Altertumswissenschaft},
date = {1894/1980},
location = {Stuttgart},
shorthand = {RE},
shorttitle = {RE},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\DeclareSourcemap{
\maps{
\map{
\step[fieldsource=shorthand, final]
\step[fieldsource=entrykey, match=\regexp{(.*)}]
\step[entrynew=shorthand-of-$1, entrynewtype=specialshorthand, entrynocite]
\step[fieldsource=shorthand]
\step[fieldset=shorthand, origfieldval, entrytarget=shorthand-of-$1]
\step[fieldset=sortkey, origfieldval, entrytarget=shorthand-of-$1]
\step[fieldsource=entrykey]
\step[fieldset=parententry, origfieldval, entrytarget=shorthand-of-$1]
\step[fieldset=options, fieldvalue=skiplab, entrytarget=shorthand-of-$1]
}
}
}
\NewBibliographyString{videlicet}
\DefineBibliographyStrings{english}{
videlicet = {viz\adddot},
}
\makeatletter
\DeclareBibliographyDriver{specialshorthand}{%
\usebibmacro{begentry}%
\printfield{shorthand}%
\setunit{\addcomma\space}%
\bibstring[\mkbibemph]{videlicet}%
\setunit{\addspace}%
\entrydata{\thefield{parententry}}{%
\begingroup
\DeclareFieldFormat{bibhyperref}{##1}%
\csuse{blx@hook@cite}%
\csuse{blx@hook@citekey}%
\undef\cbx@lasthash
\undef\cbx@lastyear
\citetrackerfalse\pagetrackerfalse\backtrackerfalse
\defcounter{maxnames}{\blx@maxcitenames}%
\clearfield{shorthand}%
\usebibmacro{cite}%
\endgroup}%
\usebibmacro{finentry}}
\makeatother
\begin{document}
\nocite{pauly,sigfridsson}
\printbibliography
\end{document}
(希望 3.11 发布后我能更新这个答案以删除旧代码。)