我目前正在开发一种biblatex
支持电影、电视剧和电视节目的风格。电视节目的典型条目看起来如下:
@movie{Newton:2012a,
Date = {2012-05-12},
Entrysubtype = {tv},
Organization = {ORF eins},
Title = {Newton}}
entrysubtype = tv
用于标记该条目为电视节目。没有作者或任何类型的创作者,因为电视节目在传统意义上没有导演,organization
用于表示电视台,date
表示播出日期。文内引用如下所示:牛顿(ORF eins,2012 年 5 月 12 日)。重复引用不会显示站点和日期,只是牛顿。
我已经完成了所有这些工作,但有一个问题:当我必须引用同一节目的不同部分时,我希望打印重复引用的日期以消除不同引用的歧义。因此,上述条目的第二次引用将看起来像是另一集牛顿被引用:牛顿(2012 年 5 月 12 日)。
为此,我需要确定标题是否唯一,而 AFAICSbiblatex
没有提供任何工具。我考虑过与某种虚拟作者合作,但我真的不知道如何明智地做到这一点。
所以问题是:我如何判断标题是否唯一。
(如果需要,我会提供更多代码,但我认为总体思路应该很清楚)。
答案1
请尝试刚刚更新的 biblatex 2.0 和 biber 1.0 测试版。现在有一个选项labeltitle
可以启用该extratitle
字段。它的工作原理类似于extrayear
,但会跟踪重复的标签名称/标签标题。对于您的情况,您可以执行以下操作:
\DeclareFieldFormat{citetitle}{%
\iffieldundef{extratitle}{#1}{#1\space\mkbibparens{\printdate}}}
请参阅更新的 biblatex 文档。此外,labeltitle
现在可以自定义,例如labelyear
答案2
我想到了一个只能被描述为丑陋的黑客的东西,但它实际上似乎有效。
首先,我检查是否author
未定义;如果未定义,我将复制title
到author
,然后进行\ifsingletitle
测试,检查是否有来自某个作者的多个标题。由于节目的标题充当作者,因此\ifsingletitle
似乎可以完成这项工作。
原则上代码如下:
\ifciteseen % check whether it's a repeated citation
{\ifnameundef{author} % make sure that there is no author
{\savefield*{title}{\titlecheck}% copy the title to a new macro
\restorename{author}{\titlecheck}% copy the macro to author
\ifsingletitle % check whether author/title is unique
{<code for normal repeated citiations>}
{<code for citations which need to disambiguate>}
}
{…}
}
{…}
这并不好,但我没有发现任何本质问题。
更新:实际上,这不起作用。似乎我无法将字段的内容复制到姓名列表中。
更新2:请参阅 plk 的答案,它确实有效。