为了总结查看示例
我使用 Biblatex (biber-backend) 作为参考书目工具,但我想这个问题也可能与 Bibtex 有关。我使用的样式是:authoryear-icomp
我这样引用:
\****cite[<number>]{<bibkey>}
这样,Biblatex 就会将数字识别为页码,并且重复引用的引用方式为:
(ibid.)
现在问题:
我有相同的来源,但有特殊的页码,如“20:16”(或后记,如“第 XY 章”),因此 Biblatex 无法将其识别为页码,所以我必须像这样引用它:
\****cite[p.~20:16]{<bibkey>}
这当然意味着 Biblatex 不识别重复引用并将其引用为:
(ibid., p. 20:16)
代替:
(ibid.)
例子 (应该如何)
<text1> \cite[\ibid{chapter XY}]{authorXY}. <text2> \cite[\ibid{chapter XY}]{authorXY}
becomes:
<text1> (authorXY, chapter XY). <text2> (ibid.)
但
<text1> \cite[\ibid{chapter XY}]{authorXY}. <text2> \cite[\ibid{chapter AB}]{authorXY}
becomes:
<text1> (authorXY, chapter XY). <text2> (ibid., chapter AB)
这同上{...}- 命令只是一个占位符,因为我不知道如何实现我所描述的内容。它只是为了解释这个想法。
我希望这能澄清一些事情。
非常感谢您的帮助和想法:)
提前谢谢您!
答案1
这个解决方案非常接近您想要的,不同之处在于您提出的建议\ibid
与我的完全相反\noibidonly
。
我们修改了biblatex
的跟踪器,使得所有后记都被视为“检查前一个后记是否相同”的跟踪器,而不仅仅是正确的页码。
\def\blx@loccit@stricttracker#1{%
\global\csundef{blx@lastnote@#1@\abx@field@entrykey}%
\blx@imc@iffieldundef{postnote}
{}
{\blx@ifcitesingle
{\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote
\xifinlistcs\abx@field@entrykey{blx@trackkeys@#1}
{}
{\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}
{}}}
\def\blx@loccit@numcheck#1{%
\blx@imc@iffieldundef{postnote}
{\@secondoftwo}
{\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}}
这只是\ifpages
删除了勾号的标准定义。
然后我们定义\noibidonly
允许我们重置后记跟踪器,实际上导致当前和下一个后记出现,无论它是否之前立即显示过。
\newrobustcmd*{\noibidonly}{%
\iftoggle{blx@footnote}
{\blx@loccit@reset{foot}}
{\blx@loccit@reset{text}}%
}
我们希望能够在后记中使用此命令,因此我们发出
\DeclarePageCommands*{\noibidonly}
(不过,想想看,那已经不再是必要的了。)
平均能量损失
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[style=authoryear-icomp,ibidpage]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\def\blx@loccit@stricttracker#1{%
\global\csundef{blx@lastnote@#1@\abx@field@entrykey}%
\blx@imc@iffieldundef{postnote}
{}
{\blx@ifcitesingle
{\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote
\xifinlistcs\abx@field@entrykey{blx@trackkeys@#1}
{}
{\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}
{}}}
\def\blx@loccit@numcheck#1{%
\blx@imc@iffieldundef{postnote}
{\@secondoftwo}
{\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}}
\newrobustcmd*{\noibidonly}{%
\iftoggle{blx@footnote}
{\blx@loccit@reset{foot}}
{\blx@loccit@reset{text}}%
}
\makeatother
\DeclarePageCommands*{\noibidonly}
\begin{document}
\cite[20]{cicero} and \cite[20]{cicero} and \cite[20]{cicero}.
\cite[p.~20:16]{wilde} and \cite[p.~20:16]{wilde} and \cite[p.~20:16]{wilde}.
\cite[lorem]{cicero} and \cite[ipsum]{cicero} and \cite[ipsum]{cicero}.
\cite[lorem]{wilde} and \cite[lorem]{wilde} and \cite[lorem\noibidonly]{wilde} and \cite[lorem]{wilde} and \cite[lorem]{wilde}.
\printbibliography
\end{document}
得出