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使用芝加哥風格選項呼叫 package biblatex2.sty,並且該檔案對類別執行一系列測試以修補某些命令。我認為當處理tex4ht和使用自訂類別時,由於某種原因biblatex無法成功通過這些測試。


以下是我的調查筆記,可能對想要真正回答問題的人有用。如果你這樣做,我很樂意獎勵賞金。

我將\usepackage{tex4ht}和添加\tracingall到文件中.tex並使用pdflatex.輸出錯誤的地方就在文件的第1409146行之後.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未定義時發出。定義該命令的唯一包(我對所有命令進行了 grep 操作)是xifthen.xifthen之前加載biblatex可以消除ifthen錯誤。

現在仍然存在footnote錯誤,該錯誤來自biblatex2.sty.這裡,包正在檢查載入了哪些類,並根據每個類的需要重新定義腳註命令。當腳註指令成功修補後,它會被設定blx@tmpafalse。如果在所有測試之後blx@tmpa仍然為真,那麼它會列印有關腳註的錯誤訊息。

相關內容