2

Given a latex file named 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}

and a configuration file named tst.cfg

\Preamble{xhtml}
\begin{document}
\Configure{OpfMetadata}{\EndP\HCode{<dc:publisher>puuu</dc:publisher>}}
\EndPreamble

and tex4ebook v0.3b with pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) returns the error message

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

How can this error be avoided? Note that the other (commented) babel languages do not generate such error, only the spanish one does. Removing the \tableofcontents also removes the error.

1
  • This happens even without the .cfg file. The issue is that Spanish Babel redefines definition of \' accent, which is used in table of contents. I still haven't found a solution unfortunately.
    – michal.h21
    Apr 30, 2021 at 15:31

1 Answer 1

1

There are two problems. The error is caused by the fact that Spanish Babel changes definition of ~ active character. It is used in TOC for \part command by TeX4ht. We can fix that by slightly modified version of \tocpart macro. This macro is used by TeX4ht to print part entry in the table of contents. Save the following code as 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

There is also other issue, accented characters, such as í are printed as í'I. This can be fixed using the following version of 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

I updated TeX4ht sources, so these fixes should be only temporary, until TeX distributions are updated.

Epub file should be then created correctly:

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .