更新:根据要求,在本文底部添加了源形式的 MathML 代码。
我现在正在配置 tex4ht 以生成 MathML 而不是 .png 来进行数学运算。然后加载 MathJax 进行最终显示。我发现 tex4ht 生成的 MathML 代码存在 3 个问题(到目前为止)。
第一个,\pm
(加号或减号)生成错误的 mathml 代码,我刚刚找到的解决方法是改用\mp
(减号或加号)(但我更喜欢使用它,\pm
因为它更常见)。出于某种原因,\mp
它有效,但\pm
无效。
第三个问题(点)在 Latex 中也有很好的解决方法,我可以使用。到目前为止,第二个问题在 Latex 代码中还没有解决方法。(求和符号的尺寸特别大)
因此,我需要一些帮助,了解如何配置 tex4ht 或 Mathml 以避免此问题,至少对于情况 (2),因为其他问题我现在已经解决了。但我更喜欢使用\pm
情况 (1)。
我在 Linux 上使用 TL 2013。在给出任何操作说明时,请假设我是新手。
下面我展示了 MathML 生成的数学公式的屏幕截图,旁边是 pdflatex 输出和 latex 代码。
下面是每个案例的 MathML 代码。这些案例编号为 1 到 3。案例 (2)(大求和)有一个 MathML 解决方法,即删除<mo mathsize="big">
,但是,我不知道如何告诉 htlatex 此事,或者在哪里配置此更改,或者在 TL 安装中更改内容以进行此更改。当然,我不能每次构建 HTML 文件时都编辑它来手动修复 mathml。我有数百或数千个从 Latex 构建的小型 html 文件。
MWE 如下(collection_of_problems.tex)
\documentclass[12pt]{report}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}
%(1)
\[
y=\pm\sqrt{x}
\]
\[
y=\mp\sqrt{x} %work around, but I prefer (1) not this one.
\]
% (2)
\[
k= \sum_{i}^{2} m_{i}(x)
\]
%bad dot (3)
\[
\overset{\rightarrow}{a} = \overset{\centerdot}{\omega}_{2}
\]
\[
\overset{\rightarrow}{a} = \overset{\cdot}{\omega}_{2}
\]
\[
\overset{\rightarrow}{a} = \overset{\bullet}{\omega}_{2}
\]
\end{document}
用于构建 htm 文件的命令
htlatex collection_of_problems.tex "my,htm"
同一文件夹中的 my.cfg 文件内容如下:
\Preamble{mathml,ext=htm}
\Configure{VERSION}{}
\Configure{DOCTYPE}{\HCode{<!DOCTYPE html>\Hnewline}}
\Configure{HTML}{\HCode{<html>\Hnewline}}{\HCode{\Hnewline</html>}}
\Configure{@HEAD}{}
\Configure{@HEAD}{\HCode{<meta charset="UTF-8" />\Hnewline}}
\Configure{@HEAD}{\HCode{<meta name="generator" content="TeX4ht
(http://www.cse.ohio-state.edu/\string~gurari/TeX4ht/)" />\Hnewline}}
\Configure{@HEAD}{\HCode{<link
rel="stylesheet" type="text/css"
href="\expandafter\csname aa:CssFile\endcsname" />\Hnewline}}
\Configure{@HEAD}{\HCode{<script type="text/javascript"\Hnewline
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"\Hnewline
></script>\Hnewline}}
\Configure{@HEAD}{\HCode{<style type="text/css">\Hnewline
.MathJax_MathML {text-indent: 0;}\Hnewline
</style>\Hnewline}}
\begin{document}
\EndPreamble
创建 .htm 后,只需双击它,假设您已连接到互联网,MathJax 将加载到您的浏览器中,您将看到如上图所示的问题。pdflatex file.tex
当然是构建 pdf 文件。
ps. 奇怪为什么\mp
可以工作但不能\pm
。以下是代码\pm
更新:
MathML 代码。案例(1)
<div class="par-math-display"><!--l. 12--><math xmlns="http://www.w3.org/1998/Math/MathML"
display="block" >
<mrow>
<mi>y</mi> <mo
class="MathClass-rel">=</mo> <mo
class="MathClass-bin">±</mo><msqrt><mrow><mi>x</mi></mrow></msqrt>
</mrow></math>
案例(2)
<p class="nopar" >
<div class="par-math-display"><!--l. 17--><math xmlns="http://www.w3.org/1998/Math/MathML" display="block" >
<mrow>
<mi>k</mi> <mo class="MathClass-rel">=</mo><munderover accentunder="false" accent="false">
<mrow><mo mathsize="big"> ∑</mo>
</mrow><mrow><mi>i</mi></mrow><mrow><mn>2</mn></mrow></munderover><msub><mrow>
<mi>m</mi></mrow><mrow><mi>i</mi></mrow></msub><mrow >
<mo class="MathClass-open">(</mo><mrow><mi>x</mi></mrow>
<mo class="MathClass-close">)</mo></mrow></mrow></math>
案例(3)
<div class="par-math-display"><!--l. 23--><math
xmlns="http://www.w3.org/1998/Math/MathML"
display="block" ><mrow>
<mover class="overset"><mrow><mi>a</mi></mrow><mrow>
<mo class="MathClass-rel">→</mo></mrow></mover>
<mo class="MathClass-rel">=</mo><msub><mrow> <mover class="overset">
<mrow><mi>ω</mi></mrow><mrow>
<mo class="MathClass-bin">▪</mo></mrow></mover></mrow><mrow><mn>2</mn></mrow></msub>
</mrow></math>
</div>
更新2:
感谢下面评论中的@Khaled Hosny,我们找到了一种解决方法,即使用 UTF-8。更改 tex4ht 命令以更改默认值,解决了该问题\pm
。这是要使用的新命令。
htlatex foo.tex "my,htm,charset=utf-8" " -cunihtf -utf8"
剩下的唯一问题是总和的大小。上述情况 (2)。将默认渲染器从默认 HTML-CSS 更改为 MathML 也解决了这个问题。但我现在不确定这是否是我可以使用 MathJax 设置从我这边控制和更改的东西,或者这是否只是客户端浏览器端的东西,所以我可以放手。
答案1
感谢评论中给出的提示,修复方法是在使用 htlatex 构建 HTML 页面时使用 UTF。
要使用的命令是
htlatex foo.tex "my,htm,charset=utf-8" " -cunihtf -utf8"
求和问题规模大不是什么大问题。所以没有必要保持这个开放状态。
答案2
对于求和问题的较大尺寸,您必须修改文件mathml.4ht
,至少在使用 miktex 的 Windows 中,在某个地方C:\users\yourname\AppData\Roaming\MiKTeX\2.9\tex\generic\tex4ht
(如果您在 htlatex 之后读取日志文件,将会显示路径):
您将会看到(在文件中搜索后),定义为的所有内容\:tempd
都会有mathsize="big"
,包括数字 50“总和”,如\:tempd{sum}{50}
。
解决这个问题最快的方法是用“large”或“normal”或“tiny”替换“big”......而最长的方法是定义另一个环境,可能只用于“sum”命令。