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

TL;DRbiblatex누군가가 이 문제를 해결할 수 없다면 를 사용할 때 클래스 파일에서 로드하지 마십시오 tex4ht. 클래스 파일을 패키지로 변환하면 제대로 작동합니다.

biblatex시카고 스타일 옵션을 사용하면 package 를 호출 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내부적으로 하고 있는 일, 즉 단지 do 를 하면 같은 오류가 발생합니다 \RequirePackage[style=chicago-notes]{biblatex}. Biblatex.sty, 기본적으로 biblatex2.sty.

'ifthen'의 135번째 줄 이후에 오류가 발생 합니다 biblatex2.sty. \TE@hook정의되지 않은 경우 발행됩니다 . 해당 명령을 정의하는 유일한 패키지(저는 모두 grep했습니다)는 xifthen. xifthen이전에 로드하면 오류가 biblatex제거됩니다 ifthen.

이제 footnote. biblatex2.sty​여기서 패키지는 어떤 클래스가 로드되었는지 확인하고 각 클래스에 대해 필요에 따라 각주 명령을 재정의합니다. 각주 명령이 성공적으로 패치되면 blx@tmpa로 설정됩니다 false. 모든 테스트 후에도 blx@tmpa여전히 true이면 각주에 대해 이 오류 메시지가 인쇄됩니다.

관련 정보