如何将 Unicode 字符放入 HTML 输出中

如何将 Unicode 字符放入 HTML 输出中

我正在尝试制作一本纸质书和电子书。为了制作纸质书,我使用 xelatex 生成 PDF。我已重建所有源文件以使用 UTF-8 编码,西里尔文和日文字符均正确显示。

要获得电子书,您需要生成 HTML。为此,我使用 htlatex,它似乎使用 TeX4ht 来完成工作。

htlatex "mybook.tex" "xhtml, charset=utf-8" " -cunihtf -utf8"

但是在生成 HTML 时,日志中出现错误:

Missing character: There is no ½ in font cmr10!

它似乎抱怨所有字符都不在字体中,所以它根本不输出字符。但是,我们都知道浏览器支持这些字符。

我其实不想选择字体,因为我希望 HTML 文件不指定字体——我想使用浏览器或电子书阅读器的默认字体。但是,我需要以某种方式告诉 LaTeX 不要这么偏执,继续输出字符。有什么办法吗?

我在其他地方读到过,我需要选择“unicode”字体。对于 xelatex,我使用包fontspec,但 Tex4ht 程序显然不允许这样做。(我收到这样的错误)。

我在序言中设定了以下内容:

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

我怀疑这是错误的,因为 T1 表示 Latin1 字符?我需要西里尔文和日语。无论如何,当我这样做时,我得到了新的错误:

Package inputenc Error: Unicode char \u8:¥ not set up for use with LaTeX.

是的,设置不正确。所以,我的问题是:如何选择字体,或者如何说服 htlatex 允许将所有字符写入 HTML 文件?

下面是一个演示该问题的 MWE:

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}
\frontmatter
\mainmatter

The flight was 4½ hours with a 3 hour change.  
We landed in Honolulu.  It was 85° and after 
rearranging the luggage which took a little time, 
ナンシースエンソン quickly got heated up.

\end{document}

我的编译脚本是

htlatex "MWE.tex" "xhtml, charset=utf-8" " -cunihtf -utf8"

答案1

你的示例甚至无法使用pdflatex,因此无法使用并不奇怪tex4ht。让非欧洲脚本正常工作的最简单解决方案tex4ht是使用helpers4ht捆绑,特别是模拟 fonstspec 包.helpers4ht尚未加入 CTAN,你需要自行安装

现在回到您的示例,由于日语,情况会稍微困难一些,需要一些软件包来处理,例如xeCJKXeTeX 或luatexjaLuaTeX。 这两个软件包都不受 的支持,但我们可以使用替代软件包加载器来加载它们,这将在加载tex4ht时抑制它们:tex4ht

\documentclass{book}
\usepackage{alternative4ht}
\altusepackage{luatexja-fontspec}
% \altusepackage{xeCJK}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage{english}
% \setotherlanguage{japanese}
% \usepackage[T1]{fontenc}
% \usepackage[utf8]{inputenc}
\begin{document}
\frontmatter
\mainmatter

The flight was 4½ hours with a 3 hour change.  
We landed in Honolulu.  It was 85° and after 
rearranging the luggage which took a little time, 
ナンシースエンソン quickly got heated up.

\end{document}

您需要使用 LuaTeX 作为引擎来编译此示例tex4ht,例如使用以下命令:

make4ht -ul filename.tex

即使你的文档通常使用 XeTeX 编译,也需要 LuaTeX,因为 Lua 回调用于将 Unicode 转换为适合的格式tex4ht

结果

在此处输入图片描述

答案2

我找到了。

\usepackage[utf8]{inputenc}

我需要使用

\usepackage[utf8x]{inputenc}

更新!

太仓促了。它处理半个字符和度数符号,却不处理日语片假名。

相关内容