给定一个名为tst.tex
\documentclass{book}
\usepackage[spanish,es-noquoting]{babel} % https://tex.stackexchange.com/questions/157095/spanish-babel-and-chemformula-package
% \usepackage[english]{babel}
% \usepackage[french]{babel}
% \usepackage[german]{babel}
\begin{document}
\title{ttt}
\tableofcontents
\part{ppp}
\end{document}
以及一个名为tst.cfg
\Preamble{xhtml}
\begin{document}
\Configure{OpfMetadata}{\EndP\HCode{<dc:publisher>puuu</dc:publisher>}}
\EndPreamble
和 tex4ebook v0.3b 与 pdfTeX,版本 3.14159265-2.6-1.40.21(TeX Live 2020)返回错误消息
tex4ebook -c tst.cfg tst.tex
[STATUS] tex4ebook: Conversion started
[STATUS] tex4ebook: Input file: tst.tex
[ERROR] htlatex: Compilation errors in the htlatex run
[ERROR] htlatex: Filename Line Message
[ERROR] htlatex: ./tst.tex 13 Extra \fi.
[ERROR] htlatex: ./tst.4ct 3 Extra \endcsname.
[ERROR] htlatex: Compilation errors in the htlatex run
[ERROR] htlatex: Filename Line Message
[ERROR] htlatex: ./tst.tex 13 Extra \fi.
[ERROR] htlatex: ./tst.4ct 3 Extra \endcsname.
[ERROR] htlatex: Compilation errors in the htlatex run
[ERROR] htlatex: Filename Line Message
[ERROR] htlatex: ./tst.tex 13 Extra \fi.
[ERROR] htlatex: ./tst.4ct 3 Extra \endcsname.
HTML Tidy for Linux version 5.4.0
[STATUS] tex4ebook: Conversion finished
如何避免此错误?请注意,其他(注释掉的)babel 语言不会产生此类错误,只有西班牙语会产生此类错误。删除\tableofcontents
也会删除该错误。
答案1
有两个问题。错误是由于西班牙语 Babel 更改了~
活动字符的定义而引起的。TeX4ht\part
将其用于目录中的命令。我们可以通过稍微修改\tocpart
宏版本来修复它。TeX4ht 使用此宏在目录中打印部分条目。将以下代码保存为myconfig.cfg
:
\Preamble{xhtml}
\def\tocpart#1#2#3{\par\HCode{<span class="partToc" \a:LRdir>}\if !#1!\else #1\ \fi #2\HCode{</span>}\par}%
\Configure{OpfMetadata}{\EndP\HCode{<dc:publisher>puuu</dc:publisher>}}
\begin{document}
\EndPreamble
还有其他问题,重音字符,例如 ,í
会打印为í'I
。可以使用以下版本的 修复此问题spanish.4ht
:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% spanish.4ht (2015-02-17-15:57), generated from tex4ht-4ht.tex
% Copyright (C) 2000-2009 Eitan M. Gurari
% Copyright 2009-2015 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2015-02-17-15:57}
\expandafter\def\csname spanish:"shorthand\endcsname
#1{\leavevmode \hbox{\csname a:spanish"#1\endcsname}}
\edef\:temp{\expandafter\noexpand
\csname spanish:"shorthand\endcsname\space a}
\expandafter\HLet\csname spanish@sh@\string"@a@\endcsname=\:temp
\NewConfigure{spanish"a}{1}
\edef\:temp{\expandafter\noexpand
\csname spanish:"shorthand\endcsname\space o}
\expandafter\HLet\csname spanish@sh@\string"@o@\endcsname=\:temp
\NewConfigure{spanish"o}{1}
\edef\:temp{\expandafter\noexpand
\csname spanish:"shorthand\endcsname\space e}
\expandafter\HLet\csname spanish@sh@\string"@e@\endcsname=\:temp
\NewConfigure{spanish"e}{1}
\edef\:temp{\expandafter\noexpand
\csname spanish:"shorthand\endcsname\space A}
\expandafter\HLet\csname spanish@sh@\string"@A@\endcsname=\:temp
\NewConfigure{spanish"A}{1}
\edef\:temp{\expandafter\noexpand
\csname spanish:"shorthand\endcsname\space O}
\expandafter\HLet\csname spanish@sh@\string"@O@\endcsname=\:temp
\NewConfigure{spanish"O}{1}
\edef\:temp{\expandafter\noexpand
\csname spanish:"shorthand\endcsname\space E}
\expandafter\HLet\csname spanish@sh@\string"@E@\endcsname=\:temp
\NewConfigure{spanish"E}{1}
\edef\:tempc{\expandafter\noexpand
\csname spanish:'shorthand\endcsname\space i}
\expandafter\HLet\csname spanish@sh@\string'@i@\endcsname=\:tempc
\NewConfigure{spanish'i}{1}
\def\:tempc{\csname a:spanish'i\endcsname}
\expandafter\HLet\csname \string\OT1\string\'-i\endcsname\:tempc
\AtBeginDocument{
\def\:tempc{\a:guillemotright}
\HLet\guillemotright\:tempc
\def\:tempc{\a:guillemotleft}
\HLet\guillemotleft\:tempc
}
\NewConfigure{guillemotright}{1}
\Configure{guillemotright}{\o:guillemotright:}
\NewConfigure{guillemotleft}{1}
\Configure{guillemotleft}{\o:guillemotright:}
\let\:tempc\es@accent
%\pend:defIII\:tempc{%
\def\:tempc#1#2#3{%
\expandafter\:text@composite@x
\csname OT1\string#1\endcsname#3\@empty}
\HLet\es@accent\:tempc
\def\:text@composite@x#1#2{%
\expandafter\ifx \csname \string#1-\string#2\endcsname\relax
\expandafter\ifx \csname \string#1- :\endcsname\relax
\expandafter\expandafter\expandafter\:gobble
\else
\expandafter\expandafter
\expandafter\expandafter
\expandafter\expandafter
\csname \string#1- :\endcsname
\fi
\else \expandafter\:gobble
\fi
{#2}%
}
\def\chk:acc#1#2#3{%
\if !#2!\expandafter\:gobbleIII \else
\if \noexpand#1\noexpand#2%
\a:es@accents#3\b:es@accents
\expandafter\expandafter\expandafter\gob:accc
\else
\expandafter\expandafter\expandafter\chk:acc
\fi
\fi
{#1}%
}
\def\gob:accc#1{\gob:acc}
\def\gob:acc#1#2{\if !#2!\expandafter\gobe:acc
\else \expandafter\gob:acc\fi
}
\expandafter\ifx\csname documentclass\endcsname\relax\then
\def\gobe:acc#1\@text@composite#2\@text@composite#3{}
\else
\let\gobe:acc=\:gobble
\fi
\NewConfigure{es@accent}[2]{\expandafter
\def\csname #1- :\endcsname##1{\chk:acc{##1}#2{}{}}}
\NewConfigure{es@accents}{2}
\AtBeginDocument{%
\def\bbl@umlauta{\ifx \EndPicture \:UnDef \expandafter \n:bbl@umlauta:
\else \expandafter \o:bbl@umlauta: \fi }%
}
\Hinput{spanish}
\endinput
我更新了 TeX4ht 源,因此这些修复应该只是暂时的,直到 TeX 发行版更新。
然后应该可以正确创建 Epub 文件: