tex4ht 与 biblatex-chicago 之间的冲突

tex4ht 与 biblatex-chicago 之间的冲突

我无法tex4ht使用biblatex-chicago。使用编译下面的 MWE 会pdflatex产生以下错误:

(/usr/local/texlive/2015/texmf-dist/tex/latex/biblatex/lbx/english.lbx)))

Package biblatex Warning: Language 'american' not supported.
(biblatex)                Using fallback language 'english' on input line 14.


! Package biblatex Error: Patching 'ifthen' package failed.

See the biblatex package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.14 \begin{document}

? 

Package biblatex Warning: Patching footnotes failed.
(biblatex)                Footnote detection will not work.

! Package biblatex Error: Patching \MakeUppercase failed.

See the biblatex package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.14 \begin{document}

? 

我尝试babel使用各种选项进行加载但没有任何改变。

编辑1我最初的例子太简单了:我现在意识到问题仅在尝试使用这些包作为自定义类的一部分时才会发生。

编辑2biblatex仅使用该选项加载时也会出现同样的错误style=chicago-notes,因此我编辑了 MWE 以反映这一点。为了简化调试,我将其放入tex4htMWE 中,以便您可以直接运行pdflatex它。

文件mwe.cls

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mwe}[2016/02/10 biblatex-chicago + tex4ht test]
\LoadClass{article}
\RequirePackage[style=chicago-notes]{biblatex}
\endinput

文件bib4ht.tex

\documentclass{mwe}
\usepackage{tex4ht}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{Sample,
author={Last, First},
title={Sample Book},
year=2016
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
Test.\cite{Sample}
\end{document}

答案1

由于tex4ht修补了一些内部biblatex宏,因此当这些宏在新版本中发生变化时,它有时会失败biblatex。我报告了这个问题tex4ht 错误追踪器并提供了错误修复,现在包含在 TeX 发行版中,因此你的示例可以使用更新的 TeX Live 进行编译而不会出现错误,例如

在此处输入图片描述

答案2

总结使用时不要biblatex从类文件加载tex4ht,除非有人能解决这个问题。如果我将类文件变成包,它就可以正常工作。

biblatex使用芝加哥风格选项调用包biblatex2.sty,并且该文件对类运行一系列测试以修补某些命令。我认为tex4ht使用自定义类进行处理时,由于某种原因biblatex无法成功通过这些测试。


以下是我调查的笔记,可能对那些想真正回答这个问题的人有用。如果你愿意,我很乐意奖励你。

我在文件中添加了\usepackage{tex4ht}和 ,并用 进行编译。输出错误的位置恰好位于文件的第 1409146 行之后:\tracingall.texpdflatex.log

\@firstoftwo #1#2->#1
#1<-\csname etb@tgl@blx@tempa\endcsname
#2<-\etb@err@notoggle {blx@tempa}\@gobbletwo
{\csname}

\etb@tgl@blx@tempa #1#2->#1
#1<-\blx@err@patch {'ifthen' package}
#2<-

\blx@err@patch #1->\blx@error {Patching #1 failed} {This is an internal issue t
ypically caused by a conflict\MessageBreak between biblatex and some other pack
age. Modifying\MessageBreak the package loading order may fix the problem}
#1<-'ifthen' package

\blx@error #1#2->\begingroup \blx@safe@actives \PackageError {biblatex}{#1}{#2.
}\endgroup
#1<-Patching 'ifthen' package failed
#2<-This is an internal issue typically caused by a conflict\MessageBreak betwe
en biblatex and some other package. Modifying\MessageBreak the package loading
order may fix the problem
{\begingroup}
{entering semi simple group (level 1) at line 15}

我所能说的是,该错误是由于etb@tgl@blx@tempa传递方式出现问题而引起的\@firstoftwo


biblatex-chicago如果我执行内部所做的事情,即只执行\RequirePackage[style=chicago-notes]{biblatex},则会出现相同的错误Biblatex.sty,然后默认调用biblatex2.sty

错误'ifthen'发生在 的第 135 行之后biblatex2.sty。当 未定义时发出该错误\TE@hook。定义该命令的唯一包(我搜索了所有包)是xifthen。加载xifthen之前的内容biblatex可消除ifthen错误。

现在仍然有footnote错误,它来自 中的第 154 行之后biblatex2.sty。在这里,包正在检查加载了哪些类,并根据需要重新定义每个脚注命令。当脚注命令成功修补后,它会设置blx@tmpafalse。如果经过所有测试后,blx@tmpa仍然为真,那么它会打印有关脚注的此错误消息。

相关内容