使用 utf-8 输入的 unicode-math 和 tex4ht

使用 utf-8 输入的 unicode-math 和 tex4ht

我有一个文档,我正在使用 LuaTeX 将其编译为 PDF,我想从相同的来源创建一个 HTML 版本。文本是带有变音符号的德语,为了方便起见,我使用了一些 unicode-math(也超链接不喜欢$\phi^2$目录中的内容,但对 没有任何问题$φ²$。最小示例,编译时使用lualatex file

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{unicode-math}
\begin{document}
Löse $\sqrt{φ} = 1$
\end{document}

htlatex file "xhtml,mathml,charset=utf-8"现在使用我添加的编译它输入所以它不会忽略ö,但是unicode 数学与 pdfTeX 不兼容,因此我收到一个错误φ,该错误可以被忽略,然后在输出中消失。

\documentclass{article}
\usepackage[ngerman]{babel}
\makeatletter
\@ifpackageloaded{tex4ht}{
    \usepackage[utf8]{inputenc}
}{
    \usepackage{unicode-math}
}
\makeatother
\begin{document}
Löse $\sqrt{φ} = 1$
\end{document}

所以我用htxelatex file "xhtml,mathml,charset=utf-8",没有输入因为 XeTeX 已经接受 UTF-8 输入,并且确实会抱怨输入被使用。但是,现在öφ在输出中被默默忽略了?!使用编译此代码xelatex file确实给出了预期的结果,因此这是一个 tex4ht 问题。

我想,结果就是,unicode 数学也不起作用,给出很多错误,如果忽略这些错误则会导致根本没有输出。

\documentclass{article}
\makeatletter
\usepackage[ngerman]{babel}
\@ifpackageloaded{tex4ht}{
    %\usepackage{unicode-math}
}{
    \usepackage{unicode-math}
}
\makeatother
\begin{document}
Löse $\sqrt{φ} = 1$
\end{document}

手册中提到的特定于unicode的选项,即-cunihtf,也没有任何效果...我该如何使其工作?

或者这就是手册中所说的“部分支持”XeTeX 的意思(那么为什么它对 pdfTeX 有效?!)。我在这里使用 XeTeX 的唯一原因是因为 tex4ht 似乎没有任何 LuaTeX 支持,但我是否可以使用 LuaTeX 为 tex4ht 创建 DVI?


事情变得更加奇怪了。

\documentclass{article}
\usepackage{newunicodechar}
\newunicodechar{ö}{\"o}
\newunicodechar{φ}{\phi}
\begin{document}
Löse $\sqrt{φ} = 1$
\end{document}

使用 进行编译htxelatex testhtml "xhtml,mathml,charset=utf-8"并插入ϕφ但是ö被插入为 latin-1 编码字符。我不知道这是从哪里来的。

htxelatex testhtml "xhtml,mathml,charset=latin-1"仅改变标题中的字符集,文件即可正确显示。

添加" -cunicode -utf8"第三个选项会导致φ插入为UTF-8,但不会改变 latin-1 ö

答案1

问题在于tex4ht,将 dvi 文件转换为 html 的应用程序不支持 opentype 字体,因此使用 opentype 字体时编译会失败。因为似乎没有人了解tex4htc 源代码并能够修复此错误,所以唯一的解决方案是破解unicode-math不使用 opentype 字体tex4ht

fontspec以类似的方式进行了破解,并且它适用于 texlive 2012,但我不确定 texlive 2013 是否有效,因为涉及的许多软件包都进行了升级 -包裹代码信息页面。我也尝试过破解unicode-math,但是失败了。

您可以添加一些支持\DeclareUnicodeCharacter,但正如您所说,在某些情况下它会失败。

编辑 对于您编辑的问题,如果我稍微编辑一下,我就可以正确编译您的示例:

\documentclass{article}
\ifdefined\HCode
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{newunicodechar}
\newunicodechar{ö}{\"o}
\newunicodechar{φ}{\phi}
\else
\usepackage{unicode-math}
\setmathfont{Asana-Math.otf}
\fi
\begin{document}
Löse $\sqrt{φ} = 1$
\end{document}

并编译

htxelatex filename "xhtml, mathml, charset=utf-8" " -cunihtf -utf8"

相关内容