我在运行 tex4ht 时必须将其注释掉\usepackage[T1]{fontenc}
以绕过问题为什么 tex4ht 在包括 usepackaget1font 时不更改动词的字体大小但是现在我发现不包含这个包的一个奇怪的副作用,那就是 tex4ht\_
在数学模式中变成了X
HTML!
这是由 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
,这是输出
同时lualatex foo.tex
给出 PDF
问题是:\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 处理器(DVIPS
或DVIPNG
)无法理解此指令,因此应删除的字符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
结果: