我使用 bibtex 作为 biblatex 书目的后端,但它似乎与etoolbox
我不理解的软件包之间存在一些冲突。这是在全新安装的 TeXlive 2014 上发生的。仅当满足以下条件时才会出现错误:
1:BibTeX 是后端
2:我正在使用 biblatex-chicago(没有标签 - 抱歉!)
3:bib 条目在同一个段落中被引用两次
下面是一个最小的例子(为了简单起见,我在文件中嵌入了参考书目 - 这样做并没有改变错误)。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{biblio.bib}
@book{smith_john_1970,
address = {City},
edition = {1st},
title = {Help},
publisher = {A. N. Other},
author = {Smith, John},
year = {1970},
}
\end{filecontents}
\usepackage[backend=bibtex]{biblatex-chicago}
\addbibresource{biblio.bib}
\begin{document}
\cite[732]{smith_john_1970} and \cite[732]{smith_john_1970}
\end{document}
答案1
如果深入研究chicago-notes.cbx
,我们会在 bibmacro 的定义中cite
发现
\ifboolexpr{
test {\iffieldundef{shorthand}}%
or
(
togl {blx@skipbiblist}%
and
togl {cms@inheritshhand}%
and
not test {\iffieldundef{crossref}}%
)
}
确实,这似乎是导致etoolbox
出现问题的布尔表达式。除了其中一个条件之外,其他所有条件都完全正常,问题出在togl {blx@skipbiblist}
。
skipbiblist
skipbib
和它的朋友一样,是skiplab
Biber 独有的选项(不幸的是,skipbiblist
它是相当新的,没有在文档中记录,它是skiplos
它的“朋友”的扩展,工作方式与它类似,见第 62 页 §3.1.3.2类型/条目选项的biblatex
文档)
如果您不使用 Biber,而是使用 BibTeX 或 BibTeX8,则文件biblatex1.sty
将被加载(使用 Biber 则会是biblatex2.sty
),biblatex1.sty
但没有的定义blx@skipbiblist
(它为提供了一个blx@skipbib
,blx@skiplos
并且blx@skiplab
- 所以它更像是好像biblatex1
对我来说) 因此该条件对于 无效etoolbox
,因为blx@skipbiblist
如果您不使用 Biber 则不存在。
但我现在想要修复!
此问题有两个修复程序
1. 使用 Biber
只需使用 Biber 作为您的后端,享受它的所有功能和能力,并摆脱这个小错误;您只需将backend=biber
加载时间选项传递给biblatex
/ biblatex-chicago
(显然已经安装并运行 Biber 而不是 BibTeX)。
这是首选解决方案,例如参见第 1 页 (!)这biblatex-chicago
:
我也强烈鼓励所有尚未这样做的用户切换到 Biber 作为他们的后端;它长期以来一直是作者日期样式的要求,但现在它对于访问注释和参考书目样式的所有功能也变得不可或缺。
或者
2. 自行提供缺失的切换按钮
只需放
\providetoggle{blx@skipbiblist}
到你的序言中。
平均能量损失
\documentclass{article}
\usepackage[notes,backend=bibtex]{biblatex-chicago}
\addbibresource{biblatex-examples.bib}
\providetoggle{blx@skipbiblist}
\begin{document}
\cite{wilde} and \cite{wilde}
\end{document}