我有一个文档,我正在使用 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 字体时编译会失败。因为似乎没有人了解tex4ht
c 源代码并能够修复此错误,所以唯一的解决方案是破解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"