我在使用 biblatex 时遇到以下问题:我使用的引用样式在脚注中提供了完整的引用,后续引用则引用第一个脚注(类似于 verbose-note/verbose-inote)。这些后续引用应仅包含作者的姓氏和对首次引用该脚注的引用,除非此脚注中有此作者的多个作品。因此,我正在寻找类似于“单一标题”选项的功能,但不针对所有引用的作品,而仅限于一个脚注。
为了说明问题,我举了一个最小的例子。“Nachname”不应该有简称,因为对相应脚注的引用已经很明确了。它应该看起来像“Dritter”的简称。但“Buchautor”应该有一个简称,因为脚注中有两部这位作者的作品,第一部分是引用。顺便说一句,“singletitle”选项是由verbose-note和verbose-inote设置的,所以这里不需要明确给出它。
\documentclass[ngerman]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{Nachname1,
author = {Nachname, Vorname},
title = {Titel des Zeitschriftenartikels},
shorttitle = {Titel},
journal = {Zeitschrift},
date = {2006},
volume = {6},
pages = {19--75}
}
@BOOK{Buchautor1,
author = {Buchautor, Hans-Wilhelm},
title = {Irgendein Buch},
shorttitle = {Irgendein},
location = {Buch am Wald},
date = {2000}
}
@BOOK{Nachname2,
author = {Nachname, Vorname},
title = {Ein Buch},
shorttitle = {Buch},
date = {2004},
location = {Berlin}
}
@BOOK{Buchautor2,
author = {Buchautor, Hans-Wilhelm},
title = {Ein weiteres Buch},
shorttitle = {Weiteres},
location = {München},
date = {2002}
}
@ARTICLE{Dritter,
author = {Dritter, Dieter},
title = {Der Dreisprung in Geschichte und Gegenwart},
shorttitle = {Dreisprung},
date = {2010},
journal = {Dynamik}
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}
\usepackage[
style=verbose-inote
]{biblatex}
\bibliography{\jobname}
\begin{document}
\footcite{Nachname1,Dritter}
\footcite{Nachname2}
\footcite{Buchautor1,Buchautor2}
\footcite{Dritter}
\footcite{Nachname2}
\footcite{Buchautor2}
\footcite{Buchautor1}
\footcite{Nachname1}
\end{document}
有人知道我该从哪里开始吗?
答案1
我想我已经明白了。:-)
singletitle
在后续引用中打印短标题由引用 bbl 文件中数据的布尔开关控制。必须用更复杂的方法替换此开关。
我创建了一个新的计数器,每当使用
citecommand
类似的命令时,它就会递增。\footcite
每次第一次引用条目时,都会调用宏
footcite:full
和。我添加了一些功能,以便它 a) 保存当前的值和 b) 创建一个从值和条目字段(每个作者的唯一哈希字符串)派生的唯一命令。如果第一次定义此命令,它将扩展为“single”,之后扩展为“multi”。footcite:save
footcite:save
citecommand
citecommand
fullhash
footcite:note
在用于后续引用的宏中,我\ifsingletitle
用相应的“first-cite”唯一命令的状态测试替换了该测试。
必须在 domwass 最小示例的序言中添加以下内容:
\newcounter{citecommand}% NEW
\renewbibmacro*{prenote}{%
\stepcounter{citecommand}% NEW
\iffieldundef{prenote}
{}
{\printfield{prenote}%
\setunit{\prenotedelim}}}
\makeatletter
\renewbibmacro*{footcite:save}{%
\csxdef{cbx@f@\thefield{entrykey}}{\the\value{instcount}}%
\label{cbx@\the\value{instcount}}%
\csxdef{cbx@g@\thefield{entrykey}}{\the\value{citecommand}}% NEW
\ifcsdef{cbx@\the\value{citecommand}@\thefield{fullhash}}{% NEW
\csxdef{cbx@\the\value{citecommand}@\thefield{fullhash}}{multi}% NEW
}{% NEW
\csxdef{cbx@\the\value{citecommand}@\thefield{fullhash}}{single}% NEW
}% NEW
}
\renewbibmacro*{footcite:note}{%
\ifnameundef{labelname}
{\printfield{label}}
{\printnames{labelname}}%
% \ifsingletitle% DELETED
\ifcsstring{cbx@\csuse{cbx@g@\thefield{entrykey}}@\thefield{fullhash}}{single}% NEW
{}
{\setunit*{\nametitledelim}%
\printfield[title]{labeltitle}}%
\setunit*{\addcomma\space}%
\printtext{%
\bibstring{seenote}\addnbspace
\ref{cbx@\csuse{cbx@f@\thefield{entrykey}}}%
\iftoggle{cbx:pageref}
{\ifsamepage{\the\value{instcount}}
{\csuse{cbx@f@\thefield{entrykey}}}
{}
{\addcomma\space\bibstring{page}\addnbspace
\pageref{cbx@\csuse{cbx@f@\thefield{entrykey}}}}}
{}}}
\makeatother
编辑:由于不需要(直接)引用的值citecommand
,\stepcounter{citecommand}
所以就足够了。