# tex4ht changes \_ in math mode to X in HTML when not including \usepackage[T1]{fontenc} why?

I had to comment out \usepackage[T1]{fontenc} when running tex4ht to bypass an issue why-tex4ht-do-not-change-font-size-of-verb-when-including-usepackaget1font but now I find a strange side effect for not inlcuding this package, which is tex4ht changes \_ in math mode to X in the HTML !

This is auto-generated by Maple. So I am forced now to use \usepackage[T1]{fontenc}

Is there a reason why tex4ht changes \_ to X when not including \usepackage[T1]{fontenc}

PDF has no problem, it is only tex4ht. Here is MWE

\documentclass[11pt]{article}

\ifdefined\HCode
\usepackage[utf8]{luainputenc}
%\usepackage[T1]{fontenc} %do not use. Make tex4ht \verb not accept  different fonts
\else
\usepackage{fontspec}
\fi

\usepackage{amsmath,mathtools}

\begin{document}
$y = \_C1$
\end{document}


Compiled using make4ht --lua -u foo.tex and this is the output

While lualatex foo.tex gives PDF

Question is: Must one include \usepackage[T1]{fontenc} for tex4ht to give correct outpout? only reason I do not include is to due to the font issue size I linked to above, else I would just include it. And is this is what tex4ht should do? Why it works ok with pdf?

ps. At first I thought it was the \it which causes this, but now I see it is the \_ so I edited the question slightly.

• For reasons I don't know (but probably for denoting some HTML entity), when \_ is processed in your test file, eventually \a:HChar is used, which expands to x. This has nothing to do with \it; try with $\_y={\it \_C1}$ and you'll get an x in front of y as well; curiously, not with $\_y={\it \_C1}$ – egreg Jul 27 '16 at 20:47

The problem is clearly this definition from latex.4ht:

\NewConfigure{textundescore}[1]{\expandafter
\def\csname ?\string\textunderscore\endcsname{\leavevmode#1}}
\Configure{textundescore}{\HChar{95}}


\HChar includes special instruction for tex4ht DVI processor to replace next character (which is x) with character with value 95. As math is converted to image by other DVI processor (DVIPS or DVIPNG), which doesn't understand this instruction, the character which should be removed, x, remains here instead of _. we need to disable the use of \HChar in mathmode, use \mathunderscore instead.

Unfortunately, LaTeX default definition of \_ inserts \textunderscore even in math mode:

\DeclareRobustCommand{\_}{%
\ifmmode\nfss@text{\textunderscore}\else\textunderscore\fi}


we can change it to use \mathunderscore in the math mode:

\DeclareRobustCommand{\_}{%
\ifmmode\mathunderscore\else\textunderscore\fi}


You can try it with the following .cfg file:

\Preamble{xhtml}
\begin{document}
\DeclareRobustCommand{\_}{%
\ifmmode\mathunderscore\else\textunderscore\fi}
\EndPreamble


The result: