当不包括 \usepackage[T1]{fontenc} 时,tex4ht 会将数学模式中的 \_ 更改为 HTML 中的 X,为什么?

当不包括 \usepackage[T1]{fontenc} 时,tex4ht 会将数学模式中的 \_ 更改为 HTML 中的 X,为什么?

我在运行 tex4ht 时必须将其注释掉\usepackage[T1]{fontenc}以绕过问题为什么 tex4ht 在包括 usepackaget1font 时不更改动词的字体大小但是现在我发现不包含这个包的一个奇怪的副作用,那就是 tex4ht\_在数学模式中变成了XHTML!

这是由 Maple 自动生成的。所以我现在被迫使用\usepackage[T1]{fontenc}

tex4ht在不包括时会\_变成什么原因X\usepackage[T1]{fontenc}

PDF 没有问题,只是 tex4ht。这是 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} 

使用编译 make4ht --lua -u foo.tex,这是输出

Mathematica 图形

同时lualatex foo.tex给出 PDF

Mathematica 图形

问题是:\usepackage[T1]{fontenc}tex4ht 必须包含一个才能给出正确的输出吗?我没有包含的唯一原因是由于我上面链接的字体大小问题,否则我会直接包含它。这是 tex4ht 应该做的吗?为什么它可以与 pdf 配合使用?

附言:起初我以为是\it导致了这个问题,但现在我发现是,\_所以我稍微修改了问题。

答案1

问题显然出在以下定义latex.4ht

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

\HChar包含特殊指令,用于 tex4ht DVI 处理器将下一个字符(即 )替换x为值为 的字符95。由于其他 DVI 处理器(DVIPSDVIPNG)无法理解此指令,因此应删除的字符x仍保留在此处,而不是_。我们需要在数学模式下禁用\HChar\mathunderscore而改用 。

不幸的是,即使在数学模式下,LaTeX 的默认定义也会\_插入:\textunderscore

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

\mathunderscore我们可以将其更改为在数学模式下使用:

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

你可以使用以下.cfg文件尝试一下:

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

结果:

在此处输入图片描述

相关内容