我使用的biblatex
风格authoryear-ibid
是这样的,即引用如下:(作者 2019),如下所示:(同上)当同一参考文献被连续多次引用时。
我想要的是:当我引用之前已经被引用过的参考文献时,但是不仅仅是之前,我希望引用如下:(作者,同上)。我不知道该怎么做,有人有解决办法吗?
答案1
这种风格authoryear-ibid
不会因为使用同上。同上。:一年几乎不比“op. cit.”长,而且它的巨大优势在于它是一个独特且信息量很大的标签。
但当然可以authoryear-ibid
稍微修改一下,包括同上。同上。. 将下面的重新定义与原文authoryear-ibid.cbx
.相关变化包括替换
\usebibmacro{cite:labeldate+extradate}
和
\ifopcit
{\usebibmacro{cite:opcit}}
{\usebibmacro{cite:labeldate+extradate}}
的定义cite:opcit
直接复制自verbose-trad1.cbx
。此外,还biblatex
必须装载选项opcittracker=context,
。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear-ibid, opcittracker=context, backend=biber]{biblatex}
\newbibmacro*{cite:opcit}{%
\printtext[bibhyperlink]{\bibstring[\mkibid]{opcit}}}
\renewbibmacro*{cite}{%
\global\boolfalse{cbx:loccit}%
\iffieldundef{shorthand}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\printdelim{nonameyeardelim}}}
{\printnames{labelname}%
\setunit{\printdelim{nameyeardelim}}}%
\ifopcit
{\usebibmacro{cite:opcit}}
{\usebibmacro{cite:labeldate+extradate}}}}
{\usebibmacro{cite:shorthand}}}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson}
\cite{knuth:ct:a}
\cite{sigfridsson}
\cite{knuth:ct:a}
\cite{worman}
\cite{knuth:ct:b}
\cite{worman}
\cite{knuth:ct:b}
\cite{sigfridsson}
\cite{sigfridsson}
\printbibliography
\end{document}
给出
我非常怀疑这是否比的正常输出更清晰authoryear-ibid
。
尤其是“Knuth op. cit.”可能提及knuth:ct:a
或knuth:ct:b
要求读者比必要的更加密切地关注以前的引用。
如果你想限制同上。同上。对于只有一部作品的作者,为了避免混淆,您应该加载biblatex
选项并将上面的内容singletitle
替换为\ifopcit
\ifthenelse{\ifopcit\AND\ifsingletitle}
然后 MWE 生成
这里避免了歧义,但是你会得到“op. cit.”和非“op. cit.”引用的奇怪混合。