Я не могу 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
все еще верно, то он выводит это сообщение об ошибке сносок.