Latex -> html 带有数学方程式,便于生成 MathML

Latex -> html 带有数学方程式,便于生成 MathML

编辑,原始问题如下 - 我想将问题简化为以下内容:

  • 获取包含公式中的矩阵和向量的 LaTeX 输入文件并使其可访问的最佳方法是什么?

下面我描述我到目前为止所做的工作,包括将方程式转换为带有 MathML 的网络文档。

我现在知道 Firefox 原生支持 MathML,但 Chrome 不支持,这让我有些困惑。

我非常感谢任何答案/建议/评论 - 我非常感谢迄今为止的所有评论

从这些中我了解到,MathML 可以在 Chrome 等不支持 MathML 的浏览器上使用 MathJax 呈现,(尽管我并不真正了解如何做到这一点。)



原始帖子。

首先,请注意以下与此主题相关的先前问题的几点

我取得了进步,非常感谢以下问题/答案的贡献者;

我也知道

我知道无障碍对于不同的人来说有着不同的含义。

我在这里询问的具体问题是关于使方程式变得易于理解 - 特别是在涉及方程式时生成一些可以被屏幕阅读器读取的输出。

我有几个由 LaTeX 文件生成的 PDF 文档,其中包括矩阵、向量等方程式。

我希望能够生成无障碍或者至少从相同的 LaTeX 文件中提取这些文档的更易于访问的版本。据我所知,一个好方法是使用 LaTeX 到 MathML 转换器。我这样做的假设是,如果 MathML 几乎是方程式可访问性的标准。​​这是我从网络搜索中找到的。

如果我可以将 LaTeX 文档中的方程式转换为 MathML 标准,那么屏幕阅读器应该能够读取 MathML 方程式,这至少可以提高文档的可访问性。

我已经生成了文件math_test.tex来测试该过程如下所示在这个问题的底部。

我已使用以下命令来生成 web 文件...

mk4ht mzlatex math_test.tex "html,mathplayer"  
latexml math_test.tex |latexmlpost --dest=math_test.html -

(使用 mk4ht 版本 1.1 和 latexml 版本 0.8.4 - 均在 debian linux 上 - mk4ht 可能有点旧,但 latexml 是最新的,因为 debian 存储库中的 latexml 似乎存在问题已知问题

结果有点多变,并且主要取决于我用来查看文件的 Web 浏览器... - 下面的多个屏幕截图显示了结果,源 LaTeX 代码也在下面。 - 简而言之,Firefox 做得很好,但 Chrome 似乎失去了“垂直间距”。对我来说,Latexml 比 mk4ht 更好,但我知道 mk4ht 可能存在版本问题

我的问题...

  • 使用 latexml 和 Firefox 浏览器可以获得最佳效果 - 我是否做错了什么导致不同的浏览器显示不同的结果?火狐latexml 版本看起来最好,但我需要尝试让它无法使用铬合金如果有意义的话,使其可访问(见下文)
  • 我是否遗漏了什么 - 您对如何生成更易于访问的文件(尤其是具有可读方程式的文档)有更好的建议吗?

不确定为什么网络浏览器的行为如此不同,但显然 Chrome 是一个问题,而且我还没有测试过 IE/Edge/Safari... - 我想知道是否每个人都在为 Firefox 开发 lateml/mk4ht - 对此的任何想法都会很有趣。鉴于 Firefox 的效果要好得多,我想知道我是否需要尝试在 html 的开头放置合适的条件/if 语句,以防止它们被其他网络浏览器读取 - 或者可能只是加载 pdf 文件。


PDF 文件如下所示: 在此处输入图片描述


最佳匹配 - (0.8.4)在 Firefox 中latexml提供以下文件.html 在此处输入图片描述

latexml.html(0.8.4)在 chrome 中给出以下文件 在此处输入图片描述


mk4ht.xht(v1.1)在 Firefox 中提供以下内容 在此处输入图片描述

mk4ht.xht(v1.1)在 Chrome 中显示以下内容 在此处输入图片描述


LaTeX 源文档

\documentclass[12pt,a4]{article}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
\centerline{\textbf{\large{Mathematical expressions}}}
\begin{enumerate}
\item Vectors $\mathbf u$, $\mathbf a$ and $\mathbf b$:
  \begin{align}
    \mathbf u &= \begin{pmatrix} -2\\-1\end{pmatrix}
  & \mathbf a &= \begin{pmatrix} -3\\1\end{pmatrix}
  & \mathbf b &= \begin{pmatrix} 1\\3\end{pmatrix}
  \end{align}
 $\mathbf u = \alpha \mathbf a + \beta \mathbf b \qquad$  Norm:$|| \mathbf u||$.
  \begin{align}
    \hat{\mathbf u} &= \lambda \mathbf a = {\langle\mathbf a, \mathbf u\rangle \over \langle\mathbf a, \mathbf a\rangle} \mathbf a 
                    =   {\begin{pmatrix}-3\\1\end{pmatrix}\cdot\begin{pmatrix}-2\\-1\end{pmatrix} \over \begin{pmatrix}-3\\1\end{pmatrix} \cdot \begin{pmatrix}-3\\1\end{pmatrix} }\mathbf a =  { 5 \over 10 }\mathbf a =
    { 1 \over 2 }\mathbf a = \begin{pmatrix}-1.5\\0.5\end{pmatrix}
  \end{align}
  
\item Matrices
\begin{align*}
\begin{pmatrix}1&3+2i\\3-2i&4\end{pmatrix} &&
{\rm det}{\mathbf A}&= 
\begin{vmatrix}3&4&7\\2&-2&1\\1&2&5\end{vmatrix}
&
\begin{vmatrix}x&1&1\\1&x&1\\1&1&x \end{vmatrix}
&= (x-1)^2(x+2)
\end{align*}
\item  $ a_1 \ge 0 \qquad p(x) = p_0+p_1x+p_2x^2+p_3x^3+p_4x^4+p_5x^5$
\item Transformations:
\begin{align*}
    T:\mathbb R^3 &\rightarrow \mathbb R^2&  \text{where}\quad  
T  \begin{pmatrix}a_1\\a_2\\a_3\end{pmatrix} =  \begin{pmatrix}a_1a_2\\a_1a_3\end{pmatrix}
\end{align*}
\begin{align*}
    T:P_3 &\rightarrow M_{22}  &  \text{where}\quad  
T  \begin{pmatrix}a_0+a_1x+a_2x^2+a_3x^3\end{pmatrix} =  \begin{pmatrix}a_1&a_2\\a_3&a_1-a_0\end{pmatrix}
\end{align*}
\end{enumerate}
\end{document}

答案1

我以为不久前我修复了围栏,当时我删除了 MathML 配置中弃用元素的大多数实例。应该改用。我忽略的是整个表达式必须用括起来的,否则围栏括号无法正确呈现。

现在它应该在 TeX4ht 源中得到修复。这是更新的 mathml.4ht您可以尝试一下。

顺便说一句,最好使用

make4ht math_text.tex "mathml,mathjax"

make4ht 对生成的 HTML 进行后处理,并修复一些问题,尤其是 MathML 中的问题。mathjax选项将加载 MathJax,它修复了许多渲染问题。例如,即使没有修复,它也可以正确显示我们错误的 MathML 代码。

这是在没有 MathJax 的 Firefox 中文件的呈现方式:

清楚的

这是使用 MathJax 的:

mathjax

您可以看到它使用了更漂亮的字体并且它也可以在 Firefox 以外的其他浏览器中运行。

答案2

一个选择是写降价作为.Rmd文件并编译RStudioHTML文件。Rmarkdown工作流程如下:

Rmarkdown 工作流程

在文件的下游.Rmd,所有处理均自动进行RStudio

这是 Rmd 文件:

---
title: ""
author: ""
date: ""
output: 
  html_document:
    pandoc_args: "--mathml"
    keep_tex: true
header-includes:
  - \usepackage{amsmath}
  - \usepackage{amssymb}
---

## Mathematical expressions

1. Vectors $\mathbf u$, $\mathbf a$ and $\mathbf b$:
  \begin{align}
    \mathbf u &= \begin{pmatrix} -2\\-1\end{pmatrix}
  & \mathbf a &= \begin{pmatrix} -3\\1\end{pmatrix}
  & \mathbf b &= \begin{pmatrix} 1\\3\end{pmatrix}
  \end{align}
  
<br>
  
$\begin{aligned}
\quad \mathbf u &= \alpha \mathbf a + \beta \mathbf b \qquad  \text{Norm:}|| \mathbf u|| 
\end{aligned}$

<br>

\begin{align}
    \hat{\mathbf u} 
       &= \lambda \mathbf a \quad 
       = {\langle\mathbf a, \mathbf u\rangle \over \langle\mathbf a, \mathbf a\rangle} \mathbf a 
       = {\begin{pmatrix}-3\\1\end{pmatrix}\cdot\begin{pmatrix}-2\\-1\end{pmatrix} \over \begin{pmatrix}-3\\1\end{pmatrix} \cdot \begin{pmatrix}-3\\1\end{pmatrix} }\mathbf a 
       =  { 5 \over 10 }\mathbf a 
       =  { 1 \over 2 }\mathbf a = \begin{pmatrix}-1.5\\0.5\end{pmatrix}
\end{align}

<br>

2. **Matrices**

\begin{align*}
\begin{pmatrix}1&3+2i\\3-2i&4\end{pmatrix} &&
{\rm det}{\mathbf A}&=
\begin{vmatrix}3&4&7\\2&-2&1\\1&2&5\end{vmatrix}
&
\begin{vmatrix}x&1&1\\1&x&1\\1&1&x \end{vmatrix}
&= (x-1)^2(x+2)
\end{align*}

<br>

3. $\begin{aligned} a_1 \ge 0 \qquad p(x) = p_0+p_1x+p_2x^2+p_3x^3+p_4x^4+p_5x^5 \end{aligned}$

<br>

4. **Transformations:**

\begin{align*}
    T:\mathbb R^3 &\rightarrow \mathbb R^2&  \text{where}\quad
T  \begin{pmatrix}a_1\\a_2\\a_3\end{pmatrix} =  \begin{pmatrix}a_1a_2\\a_1a_3\end{pmatrix}
\end{align*}
\begin{align*}
    T:P_3 &\rightarrow M_{22}  &  \text{where}\quad
T  \begin{pmatrix}a_0+a_1x+a_2x^2+a_3x^3\end{pmatrix} =  \begin{pmatrix}a_1&a_2\\a_3&a_1-a_0\end{pmatrix}
\end{align*}

语法与写入文件中的语法非常接近。在 YAML 标头中.tex切换即可获得相应的 pdf。html_documentpdf_document

这是 HTML 输出:

HTML 输出

为了使用 编写 HTML mathml,我们向 添加了--mathml传递给 的参数pandoc。这就是我们在 HTML 文件顶部看到的内容:

在此处输入图片描述

在这个工作流程中,knitr生成一个.tex文件。我们可以看到,它很普通,与楼主的原始代码非常相似latex,只是添加了环境等元素enumerate

\begin{document}
\centerline{\textbf{\large{Mathematical expressions}}}
\begin{enumerate}
\item Vectors $\mathbf u$, $\mathbf a$ and $\mathbf b$:
  \begin{align}
    \mathbf u &= \begin{pmatrix} -2\\-1\end{pmatrix}
  & \mathbf a &= \begin{pmatrix} -3\\1\end{pmatrix}
  & \mathbf b &= \begin{pmatrix} 1\\3\end{pmatrix}
  \end{align}
 $\mathbf u = \alpha \mathbf a + \beta \mathbf b \qquad$  Norm:$|| \mathbf u||$.
  \begin{align}
    \hat{\mathbf u} &= \lambda \mathbf a = {\langle\mathbf a, \mathbf u\rangle \over \langle\mathbf a, \mathbf a\rangle} \mathbf a
                    =   {\begin{pmatrix}-3\\1\end{pmatrix}\cdot\begin{pmatrix}-2\\-1\end{pmatrix} \over \begin{pmatrix}-3\\1\end{pmatrix} \cdot \begin{pmatrix}-3\\1\end{pmatrix} }\mathbf a =  { 5 \over 10 }\mathbf a =
    { 1 \over 2 }\mathbf a = \begin{pmatrix}-1.5\\0.5\end{pmatrix}
  \end{align}

\item Matrices
\begin{align*}
\begin{pmatrix}1&3+2i\\3-2i&4\end{pmatrix} &&
{\rm det}{\mathbf A}&=
\begin{vmatrix}3&4&7\\2&-2&1\\1&2&5\end{vmatrix}
&
\begin{vmatrix}x&1&1\\1&x&1\\1&1&x \end{vmatrix}
&= (x-1)^2(x+2)
\end{align*}
\item  $ a_1 \ge 0 \qquad p(x) = p_0+p_1x+p_2x^2+p_3x^3+p_4x^4+p_5x^5$
\item Transformations:
\begin{align*}
    T:\mathbb R^3 &\rightarrow \mathbb R^2&  \text{where}\quad
T  \begin{pmatrix}a_1\\a_2\\a_3\end{pmatrix} =  \begin{pmatrix}a_1a_2\\a_1a_3\end{pmatrix}
\end{align*}
\begin{align*}
    T:P_3 &\rightarrow M_{22}  &  \text{where}\quad
T  \begin{pmatrix}a_0+a_1x+a_2x^2+a_3x^3\end{pmatrix} =  \begin{pmatrix}a_1&a_2\\a_3&a_1-a_0\end{pmatrix}
\end{align*}
\end{enumerate}

答案3

根据https://dlmf.nist.gov/LaTeXML/manual/usage/usage.single.html#SS0.SSS0.P5,你可以将选项传递--javascript=LaTeXML-maybeMathJax.js给 latexmlpost,如果浏览器不支持 MathML,它将调用适当的 MathJax 库。更具体地说,调用

latexml myfile --dest=myfile.xml
latexmlpost --javascript=LaTeXML-maybeMathJax.js myfile.xml --dest=myfile.html

加载提供的 javascript 文件,该文件使用配置加载 cloudflare cdn MathJax MML_HTMLorMML。在 Chrome 中,我最终得到:

输出

相关内容