如何让 biblatex 将预注视为作者列表?

如何让 biblatex 将预注视为作者列表?

我正在尝试自定义 biblatex 引用样式(改编自 biblatex-juradiss)。我遇到的问题是,在我的文本中,我使用了许多 \cite 命令,这些命令在预注中给出了两个或更多作者,我希望它们的格式与引用的出版物的编辑者类似。因此,如果我写

\cite[Smith, John and Johnson, Henry][23]{biblabel}

我希望输出看起来像这样:

史密斯/约翰逊在:编辑部/編輯b、其他书目数据,第 23 页。

其中 Editora 和 Editorb 是我的 .bib 文件中条目中的编辑姓氏,而“其他书目数据”代表 biblatex 通常在编辑后输出的内容。Biblatex 很好地列出了编辑列表,我希望作者看起来一样。

请注意,斜线不是斜体,所以我不能在预注中直接在斜线内给出附加作者姓名。此外,biblatex 在编辑器列表中使用的空格比通常的要窄一些。

答案1

主要问题是姓名列表必须由 Biber/BibTeX 解析才能正确使用。但prenotepostnote字段是.tex文件本地的,不会传递给 Biber 以供使用。

因此,我们要么prenote通过写入临时文件的方式将其传递给 Biber,要么使用biblatex/LaTeX 本身在文档内部伪造 Biber 的名称解析。

第一种方法只需很少的额外工作即可实现。该命令\formatasname可以在任何地方使用,以返回名称列表,就像将它们写入文件中.bibbiblatex打印出来一样。

\formatasname将给定的名称写入临时.bib文件,然后引用它们。在此过程中,Biber 将解析这些名称,并将其格式化,就像其他名称一样。

请注意,文件夹中没有.bib以 结尾的文件-formatnames.bib。该文件由以下代码自动创建,并且会在没有警告的情况下被覆盖。

\documentclass[british]{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\makeatletter
\DeclareCiteCommand{\nfblx@formatasname}
  {}
  {\printnames[labelname]{author}}
  {}
  {}

\def\nfblx@bibfile@name{\jobname -formatnames.bib}
\newwrite\nfblx@bibfile
\immediate\openout\nfblx@bibfile=\nfblx@bibfile@name
\newcounter{nfblx@name}
\setcounter{nfblx@name}{0}
\newcommand*{\formatasname}[1]{%
  \stepcounter{nfblx@name}%
  \edef\nfblx@tmp@cite{%
    \noexpand\nfblx@formatasname{nfblx@name@\the\value{nfblx@name}}%
  }%
  \nfblx@tmp@cite
  \immediate\write\nfblx@bibfile{%
    @misc{nfblx@name@\the\value{nfblx@name}, author = {\unexpanded{#1}}, %
          options = {dataonly=true},}%
  }%
}

\AtEndDocument{%
  \closeout\nfblx@bibfile}

\addbibresource{\nfblx@bibfile@name}
\makeatother

\addbibresource{biblatex-examples.bib}

\begin{document}
\cite[\formatasname{Humprey Appleby and Bernard Woolley} in:][13]{sigfridsson}
\printbibliography
\end{document}

在此处输入图片描述

相关内容