htlatex 将 HTML 输出中出现的所有“ff”和“fi”转换为空字符

htlatex 将 HTML 输出中出现的所有“ff”和“fi”转换为空字符

我在 Windows 7 下运行 MiKTeX,尝试使用 htlatex 将一些 LaTeX 编译为 HTML。

htlatex 似乎将 HTML 中的每个“ff”和“fi”实例转换为 NUL 字节。想知道是否有人有任何见解!

这是我正在使用的配置文件(我在网上看到的一些东西可能就是问题所在):

\Preamble{xhtml}
\Configure{HtmlPar}
{\EndP\Tg<p>}
{\EndP\Tg<p>}
{\HCode{</p>\Hnewline}}
{\HCode{</p>\Hnewline}}
\Configure{emph}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
\Configure{textbf}{\ifvmode\ShowPar\fi\HCode{<b>}}{\HCode{</b>}}
\begin{document}
\EndPreamble

下面是一个示例 tex 文件,可以说明我的问题:

\documentclass{article}

\begin{document}

\section{Letters}
\subsection{Valid Letters}
AA Aa aA aa\\
BB Bb bB bb\\
CD Cd cD cd\\
\subsection{Invalid Letters}
FF Ff fF ff\\
FI Fi fI fi\\

\section{Strings}
a string of text\\
a fine string of text\\
a definition of an efficient and fine string of text\\
finally, the problem is solved!\\

\end{document}

这是我运行该命令后得到的输出

htlatex example.tex MyFonts.cfg "xhtml, NoFonts, -css" -utf8 -shell-escape

1 字母

1.1 有效信件

AA Aa aA aa
BB Bb bB bb
CD Cd cD cd

1.2 无效信件

FF Ff fF
FI Fi fI

2 根弦

一串文本
一串清晰的文本
一串有效而清晰的文本

终于,问题解决了!

如果我查看 HTML 输出,所有出现的“ff”和“fi”都已被 NUL 字符替换。有人知道为什么吗?

谢谢!

答案1

您以错误的方式编译它。

正确的编译顺序是:

htlatex filename "tex4ht.sty opt" "tex4ht command opt" "t4ht command opt" "latex opt"

在你的情况下这意味着这个命令:

htlatex filename "MyFonts, NoFonts, -css" " -utf8" "" -shell-escape

这为我生成了良好的 html。

进一步说明:

您请求命令-utf8的选项tex4ht,但是您没有提供unicode字体-cunihtf或的选项-cmozhtf,因此生成的html是latin-1编码的。unicode的正确编译顺序是:

htlatex filename "MyFonts,  NoFonts, -css, charset=utf-8" " -utf8 -cunihtf" "" -shell-escape

请注意,在这种情况下,连字符会转换为 Unicode 字符,这可能不是您想要的。您可以使用我的制作4小时工具:

您可以将选项移动tex4ht.sty到文件中cfg

\Preamble{xhtml,NoFonts, -css}

所以您不需要在命令行上指定它们。现在您可以简单地调用:

make4ht -u -c MyFonts -s filename 

还要注意,该NoFonts选项可能很危险 - 如果你将其添加到你的 tex 文件中:

\textbf{příliš} \emph{žluťoučký} \textit{ďábelské}

\usepackage[utf8]{inputenc}

生成的 html 如下所示:

<b>Hello příliš</b> <em>žluťoučký</em> ďábelské 

\textbf您可以看到和有 html 标签\emph,因为您为这些命令提供了配置,但\textit没有生成任何标记。如果您删除NoFonts选项,由于tex4ht命令中的错误,重音字符周围会产生大量不必要的元素,这可能是您使用 的原因NoFonts。要解决此问题,您可以配置\textbf\emph关闭 html 字体:

\Configure{emph}{\ifvmode\ShowPar\fi\HCode{<em>}\NoFonts}{\EndNoFonts\HCode{</em>}}
\Configure{textbf}{\ifvmode\ShowPar\fi\HCode{<b>}\NoFonts}{\EndNoFonts\HCode{</b>}}

但是如果你不想为所有字体更改命令提供这样的配置,你可以使用make4ht过滤器。创建 make 文件filename.mk4

local filter = require "make4ht-filter"
local process = filter{"cleanspan", "fixligatures", "hruletohr"}
Make:htlatex()
Make:htlatex()
Make:match("html$",process)

此示例中使用了三个过滤器:

  • cleanspan 删除重音字母周围的虚假跨度元素
  • fixligatures 用基本字符替换连字符
  • -----hruletohr用<hr />元素替换一系列字符

如果删除该NoFonts选项,生成的 html 现在是:

<b>příliš</b> <em>žluťoučký</em> <span class="cmti-10">ďábelské </span>

因此,即使\textit没有产生语义上有意义的代码,文本也会由于 css 而变成斜体。

相关内容