我正在尝试自定义 biblatex 引用样式(改编自 biblatex-juradiss)。我遇到的问题是,在我的文本中,我使用了许多 \cite 命令,这些命令在预注中给出了两个或更多作者,我希望它们的格式与引用的出版物的编辑者类似。因此,如果我写
\cite[Smith, John and Johnson, Henry][23]{biblabel}
我希望输出看起来像这样:
史密斯/约翰逊在:编辑部/編輯b、其他书目数据,第 23 页。
其中 Editora 和 Editorb 是我的 .bib 文件中条目中的编辑姓氏,而“其他书目数据”代表 biblatex 通常在编辑后输出的内容。Biblatex 很好地列出了编辑列表,我希望作者看起来一样。
请注意,斜线不是斜体,所以我不能在预注中直接在斜线内给出附加作者姓名。此外,biblatex 在编辑器列表中使用的空格比通常的要窄一些。
答案1
主要问题是姓名列表必须由 Biber/BibTeX 解析才能正确使用。但prenote
和postnote
字段是.tex
文件本地的,不会传递给 Biber 以供使用。
因此,我们要么prenote
通过写入临时文件的方式将其传递给 Biber,要么使用biblatex
/LaTeX 本身在文档内部伪造 Biber 的名称解析。
第一种方法只需很少的额外工作即可实现。该命令\formatasname
可以在任何地方使用,以返回名称列表,就像将它们写入文件中.bib
并biblatex
打印出来一样。
\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}