biblatex
当我使用带有选项的命令来区分作者\mcite
集合中的不同作者时,我注意到一些奇怪的事情。subentry
如果我多次调用一个集合,第一次调用时子条目无法正常工作:我只得到 a),而不是 a)、b)...
以下是 MWE:
\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage[citestyle=numeric,
bibstyle=numeric,
mcite=true,
subentry,
backend=biber
]{biblatex}
\addbibresource[datatype=bibtex]{./biblio.bib}
\begin{document}
This is some nice text I want to cite as a set\mcite{set1,*Boncella1984,*Tilley1982}.
Another set cite\mcite{set2,*Tilley1982,*Boncella1984}.
\printbibliography
\end{document}
和 bib 文件biblio.bib
:
@article{Boncella1984,
author = {Boncella, James M. and Andersen, Richard A.},
journal = {Inorg. Chem.},
pages = {432--437},
volume = {23},
year = {1984}
}
@article{Tilley1982,
author = {Tilley, T. Don and Andersen, Richard},
journal = {J. Am. Chem. Soc.},
pages = {1772--1774},
volume = {104},
year = {1982}
}
答案1
这可以被认为是一个错误,
biblatex
并被报告为https://github.com/plk/biblatex/issues/815,修复https://github.com/plk/biblatex/pull/822已合并并出现在biblatex
3.12中如果您遇到此问题,请考虑更新您的 TeX 发行版。以下答案仅供参考历史兴趣和背景信息。
仅当子条目在多个不同的(父)集合(在不同位置)中使用时,才会出现问题。为了使\cite{<child>}
(例如\cite{Boncella1984}
,在下面的示例中\cite{sigfridsson}
)正常工作,在读取时需要为条目分配子条目信息.bbl
。如果一个条目属于多个集合,则最后处理的集合获胜(因此\cite{Boncella1984}
/\cite{sigfridsson}
在引用中显示为 [2b] 而不是 [1a])。先验地不清楚什么应该在这种情况下会发生这种情况,所以我猜想“最后一组获胜”是一个不错的规则。然而,在参考书目中,孩子属于哪个组总是很清楚的,并且应该从当前组中获取数字。
这就是https://github.com/plk/biblatex/pull/822当在参考书目中处理设置的条目时,只需增加一个计数器即可实现。
在修复版本发布之前,您可以使用以下解决方法
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[style=numeric,
mcite=true,
subentry,
backend=biber,
]{biblatex}
\usepackage{hyperref}
\makeatletter
\newcount\blx@entrysetcounter
\def\blx@entryset#1{%
\blx@ifdata{#1}
{\begingroup
\blx@imc@clearlist{pageref}%
\blx@getdata{#1}%
\blx@setoptions@type\abx@field@entrytype
\blx@setoptions@entry
\global\blx@entrysetcounter\@ne
\edef\abx@field@entrysetcount{\the\blx@entrysetcounter}%
\blx@execute
\blx@beglangbib
\blx@begunit
\blx@anchor
\blx@entryset@precode
\blx@driver{\blx@imc@thefield{entrytype}}%
\blx@entryset@postcode
\blx@endunit
\blx@endlangbib
\endgroup}
{}%
\let\do\blx@entryset@i}
\def\blx@entryset@i#1{%
\blx@ifdata{#1}
{\begingroup
\blx@resetdata
\blx@getdata{#1}%
\blx@setoptions@type\abx@field@entrytype
\blx@setoptions@entry
\global\advance\blx@entrysetcounter\@ne
\edef\abx@field@entrysetcount{\the\blx@entrysetcounter}%
\addtocounter{instcount}\@ne
\blx@execute
\blx@beglangbib
\blx@begunit
\blx@anchor
\blx@entryset@precode
\blx@driver{\blx@imc@thefield{entrytype}}%
\blx@entryset@postcode
\blx@endunit
\blx@endlangbib
\endgroup}
{\blx@nounit}}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
This is some nice text I want to cite as a set\mcite{set1,*sigfridsson,*worman}.
\cite{sigfridsson} and \cite{worman}
Another set cite\mcite{set2,*worman,*sigfridsson}.
\cite{sigfridsson} and \cite{worman}
\printbibliography
\end{document}