[tex4ht] Multitude of problems when trying to convert from .tex to .html.
Michal Hoftich
michal.h21 at gmail.com
Sun Mar 7 21:16:11 CET 2021
Hello!
>I am trying to convert some .tex files to .html files (I am hoping to
>automate this process over the next view days as part of a pipeline),
>and I ran into a couple of problems doing so. The documentation I found
>assumes that these problems don't happen, and everything I found so far
>wasn't able to solve these problems, so I decided I'd just ask for it
>here directly.
I've downloaded your project and I can compile it. In particular, I
don't have issues with \tableofcontents, or with \multicolumn. I suspect
that this may be caused by use of older TeX distribution. Which
distribution do you use?
There is one fatal issue, related to your \maketitle.
You use the following code:
%%%%%%%%%%%%%%%%%%%%%%%%%
\title{\begin{center}
%\BeginAccSupp{method=plain,Alt={\GenderRender\\Specification}}
\includegraphics{images/title-black.pdf}
%\EndAccSupp{}
\end{center} Template system and implementation specification for rendering gender-neutral email templates with pronoun information}
%%%%%%%%%%%%%%%%%%%%%%%%%
This causes TeX4ht to fail. The problem is caused mainly by use of
\begin{center}...\end{center}
It is fortunately simple to fix that. Use custom command that will be
changed when TeX4ht is used:
%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand\titlegraphics[1]{%
\begin{center}%
\includegraphics{#1}%
\end{center}%
}
% end.
\title{ %\BeginAccSupp{method=plain,Alt={\GenderRender\\Specification}}
\titlegraphics{images/title-black.pdf}%
%\EndAccSupp{}
Template system and implementation specification for rendering gender-neutral email templates with pronoun information}
%%%%%%%%%%%%%%%%%%%%%%%%%
You may need to delete the .aux and .xref files to fix the fatal error
that happens because of code that was inserted to them on the last
successful run.
All TeX4ht specific stuff can be now fixed in a .cfg file. Save the
following code as config.cfg:
%%%%%%%%%%%%%%%%%%%%%%%%%%
\Preamble{xhtml}
% support for the \subsubsubsection command
\NewSection\subsubsubsection{}
\Configure{subsubsubsection}{\refstepcounter{subsubsubsection}}{}
{\ifvmode\IgnorePar\fi\EndP\HCode{<h6
class="subsubsubsection">}\thesubsubsubsection\space}{\HCode{</h6>}}
% fixes for \title
% we need to redefine commands that cause issues here to do nothing
\Configure{@TITLE}{\renewcommand\titlegraphics[1]{}}
\renewcommand\titlegraphics[1]{\ifvmode\IgnorePar\fi\EndP%
\HCode{<div class="titlegraphics">}\includegraphics{#1}\HCode{</div>}}
% add custom CSS
\Configure{AddCss}{myfixes.css}
% change rungs to gs
\Configure{Ghostscript}{gs}
% don't set image size
\Configure{Gin-dim}{}
% images should have maximum width same as display width
\Css{img {
max-width: 100\%;
height: auto;
}}
\begin{document}
\EndPreamble
%%%%%%%%%%%%%%%%%%%%%%%%%%%
This configuration file does several things:
1. support for \subsubsubsection command is added. Every sectioning
command needs special configuration in TeX4ht. Standard \chapter or
\section commands work out of the box, but new commands needs at least
\NewSection\commandname.
\Configure{subsubsubsection} defines HTML code that should be used for
this command. We also handle the counter here.
2. fixes for \title command. Because contents of \title is used in the
<title> element, which supports only plain text, we need to remove
everything that may cause issues. In particular the image. This is
achieved using:
\Configure{@TITLE}{\renewcommand\titlegraphics[1]{}}
This code is executed when <title> is written to the HTML file. It is
executed in a group, so it doesn't collide with the definition of
\titlegraphics that is used in \maketitle. Because we don't want image
in <title>, we can redefine it to just print nothing.
In \maketitle, the following code will be used:
\renewcommand\titlegraphics[1]{\ifvmode\IgnorePar\fi\EndP%
\HCode{<div class="titlegraphics">}\includegraphics{#1}\HCode{</div>}}
It inserts the image inside a <div> element, so you can style it if you
want. It is centered by default, because the whole contents of
\maketitle are centered using CSS.
3. custom CSS
Because you may want to change how stuff looks, an external CSS file is
inserted using \Configure{AddCss}{myfixes.css}
The myfixes.css can look like this:
%%%%%%%%%%%%%%%%%%%
/* Fix heading sizes */
h5.subsubsectionHead{font-size:1em;}
h6.subsubsubsection{font-size:1em;}
/* Set maximum width */
body{
margin:1em auto;
max-width:65ch;
padding:0 .62em;
line-height: calc(1ex / 0.32);
/* uncomment following line to set bigger font size */
/* font:1.2em/1.62 serif; */
}
%%%%%%%%%%%%%%%%%
It fixes sections that are smaller than the paragraph text and defines
some basic style of your document. You can add more stuff here.
4. images
If rungs is not available on your system, try to change the name of
Ghostscript command using
\Configure{Ghostscript}{gs}
rungs is used by TeX Live. I believe that it is used also by Miktex. It
is possible that some Linux distributions use just `gs`.
Once your PDF file is converted to PNG, run this command:
ebb -x images/*.png
It will create .xbb files with image dimensions for all PNG files in
your images directory. It will remove TeX4ht warnings about unknown
image sizes.
---------------------------
With these fixes, I get relatively nice web page.
To compile your file with this configuration file, run the following
command:
make4ht -c config.cfg spec.tex "fn-in"
BTW, I see that you use Github Actions. You can use make4ht in Github
Actions to compile your file on server and automatically publish on
Github Pages. I use this method here:
https://github.com/michal-h21/tex4ht-doc
Best regards,
Michal
More information about the tex4ht
mailing list.