如何在参考书目中打印常规条目 + 速记条目?

如何在参考书目中打印常规条目 + 速记条目?

我想将速记作为单独的条目打印在参考书目中,使用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}

在此处输入图片描述

对于尚未发布的biblatex3.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 发布后我能更新这个答案以删除旧代码。)

相关内容