latex 文件
\documentclass{amsbook}
\begin{document}
$\mathbf{x}^y$
\end{document}
当编译时
tex4ebook -f epub3 test "mathml"
产生以下数学运算:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline" >
<mstyle mathvariant="bold"><mi>x</mi><msup><mrow></mstyle></mrow><mrow><mi>y</mi></mrow></msup></math>
打开和关闭标签不匹配,这是不正确的 HTML,并导致错误:
DOM parsing of test.xhtml failed
$\mathbf{x}'$
(实际上是上标)和下标也会发生类似的错误。
一个简单的解决方法是将表达式括在上标或下标之前,如下所示
${\mathbf{x}}^y$
${\mathbf{x}}'$
${\mathbf{x}}_0$
但原始表达应该可以工作,因为它是合法的 LaTeX。
答案1
不幸的是,如果没有适当的分组,TeX4ht 无法支持上标和下标。您唯一可以尝试的就是预处理输入文件并添加分组。例如,使用以下 Lua 文件:
for line in io.lines() do
-- regex that reads command that contains just text
local command= "(\\.-{[^{]-})"
line = line:gsub(command .. "%^", "{%1}^") -- fix \mathrm{a}^...
line = line:gsub("%^"..command, "^{%1}") -- fix ...^\mathrm{a}
line = line:gsub(command .. "_", "{%1}_") -- fix \mathrm{a}_...
line = line:gsub("_"..command, "_{%1}") -- fix ..._\mathrm{a}
line = line:gsub(command .. "'", "{%1}'") -- fix \mathrm{a}'...
print(line)
end
此脚本读取标准输入并输出修改后的代码。例如,它替换以下输入:
$\mathbf{x}^y$
$\mathbf{x}'$
$\mathbf{x}^\mathbf{y}$
$\mathbf{x}_\mathbf{y}$
输出如下:
${\mathbf{x}}^y$
${\mathbf{x}}'$
${\mathbf{x}}^{\mathbf{y}}$
${\mathbf{x}}_{\mathbf{y}}$
您可以tex4ebook
使用以下方式执行它:
texlua fix_scripts.lua < test.tex | tex4ebook -f epub3 -j test - "mathml"
结果如下: