如何修复这些由 Tex4ht 生成的 MathML 代码,或者更改 Latex 代码来绕过该问题

如何修复这些由 Tex4ht 生成的 MathML 代码,或者更改 Latex 代码来绕过该问题

更新:根据要求,在本文底部添加了源形式的 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"> &#x2211;</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">&#x2192;</mo></mrow></mover> 
<mo class="MathClass-rel">=</mo><msub><mrow> <mover class="overset">
<mrow><mi>&#x03C9;</mi></mrow><mrow> 
<mo class="MathClass-bin">&#x25AA;</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”命令。

相关内容