我正在尝试制作一本纸质书和电子书。为了制作纸质书,我使用 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,你需要自行安装。
现在回到您的示例,由于日语,情况会稍微困难一些,需要一些软件包来处理,例如xeCJK
XeTeX 或luatexja
LuaTeX。 这两个软件包都不受 的支持,但我们可以使用替代软件包加载器来加载它们,这将在加载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}
更新!
太仓促了。它处理半个字符和度数符号,却不处理日语片假名。