![使用 htlatex 和 MathJax/mathML 方法的转换问题](https://linux22.com/image/266821/%E4%BD%BF%E7%94%A8%20htlatex%20%E5%92%8C%20MathJax%2FmathML%20%E6%96%B9%E6%B3%95%E7%9A%84%E8%BD%AC%E6%8D%A2%E9%97%AE%E9%A2%98.png)
我正在使用下面这个答案中显示的方法将我的 LaTeX 文件转换为 HTML,以便 MathJax 通过 MATHML 处理生成的 LaTeX 文件:
"... mathml which can be then displayed with mathjax...."
一切都运行良好,使用上述方法,数学看起来比标准方法好得多htlatex
。除了$\dot{x}$
现在显示得非常奇怪并且渲染效果不佳之类的事情。我在 IE、Firefox 和 Chrome 上尝试过这种方法,都遇到了同样的问题。
我将显示小型 tex 文件,然后显示htlatex
我使用的命令,然后显示htlatex
.cfg
文件(与上面答案中显示的文件完全相同.cfg
),然后显示 HTML 输出。
LaTeX 文件:
\documentclass[12pt]{article}%
\begin{document}
$\dot{\alpha}$
$x \dot{x}$
\end{document}
用于生成 HTML 的命令(也是上面答案中给出的相同命令):
htlatex t.tex "t.cfg,charset=utf-8" " -cunihtf -utf8"
上面使用的文件t.cfg
与上面答案中显示的文件相同,因此不会再在这里显示。
生成的 HTML 的屏幕截图(请注意,x
带点的文字看起来不正确):
将其与 PDF 输出进行比较:
这是 HTML 文件本身。我认为问题是 MATHML 不正确?这是一个htlatex
错误吗?还是 MATHML?还是 MathJax?如何纠正它?
<!DOCTYPE html>
<html>
<head> <title></title>
<meta charset="UTF-8" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<link rel="stylesheet" type="text/css" href="t.css" />
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
></script>
<style type="text/css">
.MathJax_MathML {text-indent: 0;}
</style>
</head><body
>
<!--l. 4--><p class="noindent" ><!--l. 4--><math
xmlns="http://www.w3.org/1998/Math/MathML"
display="inline" ><mover
accent="true"><mrow
><mi
>α</mi></mrow><mo
class="MathClass-op">̇</mo></mover></math>
<!--l. 5--><math
xmlns="http://www.w3.org/1998/Math/MathML"
display="inline" ><mi
>x</mi><mi
>ẋ</mi></math>
</p>
</body>
</html>
虽然总体来说,在这种新方法(mathml/mathjax,我不知道它是如何工作的)下,数学看起来更好,但还是有一些地方数学在 HTML 中呈现得不好。这是另一个例子
\documentclass[12pt]{article}%
\begin{document}
$\dot{x}_{1}^{2}$
\end{document}
答案1
主要问题是 tex4ht 已配置为使用预组合的重音 x,\dot{x}
这是错误的翻译,并产生不正确的输出,如您所见。生成的 MathML 应使用<mover>
与点 x 相同的形式。
(1)是你的原件
<!DOCTYPE html>
<html>
<head> <title></title>
<meta charset="UTF-8" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
></script>
<style type="text/css">
.MathJax_MathML {text-indent: 0;}
</style>
</head><body
>
<!--l. 4--><p class="noindent" ><!--l. 4--><math
xmlns="http://www.w3.org/1998/Math/MathML"
display="inline" ><mover
accent="true"><mrow
><mi
>α</mi></mrow><mo
class="MathClass-op">̇</mo></mover></math>
<!--l. 5--><math
xmlns="http://www.w3.org/1998/Math/MathML"
display="inline" ><mi
>x</mi><mi
>ẋ</mi></math>
</p>
</body>
</html>
(2)这是否固定使用实数 x,请注意,您会得到预期的数学斜体 x。
<!DOCTYPE html>
<html>
<head> <title></title>
<meta charset="UTF-8" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
></script>
<style type="text/css">
.MathJax_MathML {text-indent: 0;}
</style>
</head><body
>
<!--l. 4--><p class="noindent" ><!--l. 4--><math
xmlns="http://www.w3.org/1998/Math/MathML"
display="inline" ><mover
accent="true"><mrow
><mi
>α</mi></mrow><mo
class="MathClass-op">̇</mo></mover></math>
<!--l. 5--><math
xmlns="http://www.w3.org/1998/Math/MathML"
display="inline" ><mi
>x</mi><mover
accent="true"><mrow
><mi
>x</mi></mrow><mo
class="MathClass-op">̇</mo></mover></math>
</p>
</body>
</html>
但是,既然你正在使用 MathJax,那么你可以直接给它 TeX 片段并让它翻译它们 (3)
<!DOCTYPE html>
<html>
<head> <title></title>
<meta charset="UTF-8" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
></script>
<style type="text/css">
.MathJax_MathML {text-indent: 0;}
</style>
</head><body
>
<!--l. 4--><p class="noindent" >
$\dot{\alpha}$
$x \dot{x}$
</p>
</body>
</html>
答案2
在 matml 的配置中,数学重音的处理方式很复杂tex4ht
。我不太理解这种方式,所以我无法提供干净的解决方案。
\begin{document}
简单的解决方法是在文件后面添加此行cfg
:
\def\dot#1{\Tg<mover accent="true">#1\HCode{<mo>⋅</mo></mover>}}
但这在以下情况下仍然失败
$\dot{x}_{1}^{2}$
其他方法是配置tex4ht
为不转换数学,这两个答案中描述了这一点: