但我现在想要修复!

但我现在想要修复!

我使用 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}

skipbiblistskipbib和它的朋友一样,是skiplabBiber 独有的选项(不幸的是,skipbiblist它是相当新的,没有在文档中记录,它是skiplos它的“朋友”的扩展,工作方式与它类似,见第 62 页 §3.1.3.2类型/条目选项biblatex文档

如果您不使用 Biber,而是使用 BibTeX 或 BibTeX8,则文件biblatex1.sty将被加载(使用 Biber 则会是biblatex2.sty),biblatex1.sty但没有的定义blx@skipbiblist(它为提供了一个blx@skipbibblx@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}

相关内容