我创建了以下类文件:
\ProvidesClass{myarticle}[Test class]
\ExecuteOptions{}
\LoadClass{article}
\RequirePackage[backend=biber,style=authoryear]{biblatex}
\PassOptionsToPackage{hyphens}{url}
\RequirePackage[breaklinks=true]{hyperref}
并在下面的文档中使用它:
\documentclass{myarticle}
\title{Test article}
\author{Test}
\begin{document}
\maketitle
Test
\end{document}
编译它时make4ht
出现以下错误信息:
[ERROR] htlatex: Compilation errors in the htlatex run
[ERROR] htlatex: Filename Line Message
[ERROR] htlatex: ./article.tex 8 Package biblatex Error: Patching 'ifthen' package failed.
[ERROR] htlatex: Compilation errors in the htlatex run
.log 文件的一部分如下:
) (/usr/share/texlive/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2021-01-27-14:11
))
! Package biblatex Error: Patching 'ifthen' package failed.
See the biblatex package documentation for explanation.
Type H <return> for immediate help.
...
l.8 \begin{document}
问题出在哪里?如何解决或避免?
答案1
这是因为当前版本的make4ht
(和htlatex
)tex4ht.sty
在类加载后加载包。这导致一些 TeX4ht 配置文件未加载,即修补早期包补丁的文件。在您的情况下hyperref-hooks.4ht
和biblatex-hooks.4ht
。这些对于正确支持这些包是必需的。
这是用于加载 TeX4ht 和处理后的 TeX 文件的命令:
Make.latex_command = "${htlatex} --interaction=${interaction} ${latex_par} '\\makeatletter"..
"\\def\\HCode{\\futurelet\\HCode\\HChar}\\def\\HChar{\\ifx\"\\HCode"..
"\\def\\HCode\"##1\"{\\Link##1}\\expandafter\\HCode\\else"..
"\\expandafter\\Link\\fi}\\def\\Link#1.a.b.c.{\\g@addto@macro"..
"\\@documentclasshook{\\RequirePackage[#1,html]{tex4ht}${packages}}"..
"\\let\\HCode\\documentstyle\\def\\documentstyle{\\let\\documentstyle"..
"\\HCode\\expandafter\\def\\csname tex4ht\\endcsname{#1,html}\\def"..
"\\HCode####1{\\documentstyle[tex4ht,}\\@ifnextchar[{\\HCode}{"..
"\\documentstyle[tex4ht]}}}\\makeatother\\HCode ${tex4ht_sty_par}.a.b.c."..
"\\input \"\\detokenize{${tex_file}}\"'"
该代码最初来自htlatex
。重要的部分是:
\\g@addto@macro"..
"\\@documentclasshook{\\RequirePackage[#1,html]{tex4ht}${packages}}
它添加\RequirePackage{tex4ht}
到\documentclasshook
。问题是执行此钩子时为时已晚。如今,我们可以使用新的 LaTeX 钩子机制在加载类之前执行代码。 的开发版本make4ht
已经修复了这个问题,但您可以使用构建文件使用它make4ht
:
Make.latex_command = "${htlatex} --interaction=${interaction} ${latex_par} '\\makeatletter"..
"\\def\\HCode{\\futurelet\\HCode\\HChar}\\def\\HChar{\\ifx\"\\HCode"..
"\\def\\HCode\"##1\"{\\Link##1}\\expandafter\\HCode\\else"..
"\\expandafter\\Link\\fi}\\def\\Link#1.a.b.c.{\\AddToHook"..
"{class/before}{\\RequirePackage[#1,html]{tex4ht}${packages}}"..
"\\let\\HCode\\documentstyle\\def\\documentstyle{\\let\\documentstyle"..
"\\HCode\\expandafter\\def\\csname tex4ht\\endcsname{#1,html}\\def"..
"\\HCode####1{\\documentstyle[tex4ht,}\\@ifnextchar[{\\HCode}{"..
"\\documentstyle[tex4ht]}}}\\makeatother\\HCode ${tex4ht_sty_par}.a.b.c."..
"\\input \"\\detokenize{${tex_file}}\"'"
修改后的代码如下:
\\AddToHook"..
"{class/before}{\\RequirePackage[#1,html]{tex4ht}${packages}}
使用以下方法编译您的文件:
make4ht -e build.lua article.tex
编译时应该不会出现错误。