Конфликт между 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Мой первоначальный пример был слишком минималистичным: теперь я понимаю, что проблема возникает только при попытке использовать эти пакеты как часть пользовательского класса.

ПРАВКА 2Та же ошибка возникает при загрузке biblatexс style=chicago-notesопцией, поэтому я отредактировал MWE, чтобы отразить это. Чтобы упростить отладку, я вставил tex4htв MWE, чтобы вы могли просто запустить 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

TL;DRНе загружайте biblatexиз файла класса при использовании tex4ht, если только кто-то не сможет решить эту проблему. Если я превращу свой файл класса в пакет, он будет работать нормально.

biblatexс опцией стиля chicago вызывает пакет 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не определено. Единственный пакет, который определяет эту команду (я проверил все их) — это xifthen. Загрузка xifthenдо этого biblatexустраняет ifthenошибку.

Теперь все еще есть footnoteошибка, которая появляется после строки 154 в biblatex2.sty. Здесь пакет проверяет, какие классы загружены, и переопределяет команды сносок по мере необходимости для каждого из них. Когда команда сноски успешно исправлена, она устанавливается blx@tmpaв false. Если после всех тестов blx@tmpaвсе еще верно, то он выводит это сообщение об ошибке сносок.

Связанный контент