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 を編集しました。デバッグを簡単にするために、 MWEに直接tex4ht実行できるようにしました。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。 このコマンドを定義するパッケージは (すべてを grep で検索しました) のみですxifthenxifthenの前にをロードすると、エラーがbiblatex解消されますifthen

footnoteの 154 行目以降から発生するエラーがまだ残っていますbiblatex2.sty。ここで、パッケージはどのクラスがロードされているかを確認し、それぞれに必要に応じて脚注コマンドを再定義しています。脚注コマンドが正常にパッチされると、 がblx@tmpaに設定されますfalse。すべてのテストの後でもblx@tmpaがまだ true である場合、脚注に関するこのエラー メッセージが出力されます。

関連情報