以以下简单的 latex 文件为例
\documentclass{article}
\usepackage{amsfonts,amsmath}
\newcommand\R{\mathbb{R}}
\begin{document}
$\overrightarrow{AB}$
$|\mathbf{v}|$
$e^{x^2+y^2}$
$\{ x\in\R | x<0 \}$
\begin{align*}
f & = 1+2+3+4+\dots+n\\
& = \binom{n+1}2
\end{align*}
\end{document}
并使用来自的配置文件通过 tex4ht/make4ht 运行它 TeX4ht 与 Chrome 的问题
\Preamble{xhtml,mathml,html5}
\Configure{HTML}{\HCode{<html lang="en">\Hnewline}}{\HCode{\Hnewline</html>}}
\Configure{@HEAD}{\HCode{\Hnewline<script type="text/javascript"
src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=MML_CHTML">
</script>\Hnewline}}
\begin{document}
\EndPreamble
(例如,使用make4ht -u -c file.cfg file.tex
)。在 Firefox、Safari 和 Chrome 上,这将生成一个包含错误的网页,如下所示
问题出在 mathjax 设置上。如果我将配置文件更改为使用
\Configure{@HEAD}{\HCode{\Hnewline<script type="text/javascript"
src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_CHTML">
</script>\Hnewline}}
然后该页面在 Firefox 上可以正确显示,但是上标和下标等在 Chrome 上无法正确显示,并且在 Safari 上所有内容都是梨形的:
这显示了 tex4ht 制作的网页在 firefox、chrome 和 safari 上的显示情况。
我已经尝试了给出的所有 mathjax 设置http://docs.mathjax.org/en/latest/config-files.html,以及尝试使用 直接配置 mathjax MathJax.Hub.Config
,但我找不到让这些示例工作的方法。Firefox 可以很好地显示此页面,但有些 mathjax 配置无法显示,Chrome 则无法显示,而 Safari 则完全不能令人满意。
我也尝试过使用 Michal 的mathjax-latex-4ht
包,描述如下使用 exsheets 将 latex 转换为 html,并将方程式保留为 latex。这几乎是完美的,除了它不能处理\R
我的 MWE 中的宏:
有没有办法配置 tex4ht 和 mathjax 以便在所有浏览器上都能很好地运行此示例?令人恼火的是,pandoc 似乎在这里产生了合理的输出,但在我的实际应用中,我有一些重要的后期处理要做,这可以使用 tex4ht 来实现,但我不确定是否可以从 pandoc 开始完成。
答案1
这是由\mathbf
命令配置中的错误引起的:
\Configure{mathbf}%
{\bgroup \Tg<\a:mathml mi mathvariant="bold">\PauseMathClass}%
{\Tg</\a:mathml mi>\egroup }%
tex4ht
自动在数学变量和运算符周围添加标记,但在本配置中,该功能被命令禁用\PauseMathClass
,因为在本例中标记是明确添加的。必须在 结束后打开自动标记\mathbf
,否则将导致标记无效。由于您的第二个数学示例包含\mathbf
,因此所有后续示例都包含无效标记。我们需要使用\EndPauseMathClass
命令再次打开标记。
我将在tex4ht
源代码中修复此问题,但修复到 TeXLive 需要一些时间,因此您可以暂时使用以下配置。
\Preamble{xhtml,mathml,html5}
\Configure{HTML}{\HCode{<html lang="en">\Hnewline}}{\HCode{\Hnewline</html>}}
\Configure{@HEAD}{\HCode{\Hnewline<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=MML_CHTML">
</script>\Hnewline}}
\begin{document}
\EndPreamble
结果: