- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MathML是一种编写数学的网络标准,可以轻松缩放而无需像素化(就像 SVG)、复制和粘贴以及屏幕阅读器阅读。
Chrome 拒绝在存在 JavaScript polyfill 的基础上实现它。 (I kid you not.) Edge 的支持是'Not currently planned' .因此,只有 Safari 和 Firefox(以及 some EPub readers)支持 MathML。
鉴于实现如此参差不齐,后备内容是 100% 必要的。通常的解决方案是 MathJax ;但这不适用于 JavaScript 已禁用或更可能已损坏的用户。
我们生活在一个 HTML 很容易允许没有 JavaScript 的后备内容的时代(参见 <picture>
、 <audio>
和 <video>
标签)。 MathML 有什么方法可以做到这一点吗?
最佳答案
据我所知,没有仅 HTML 的方法来检测对 MathML 的支持。
但是, 有一种 SVG 方式。
<switch>
SVG 元素呈现其自身的第一个直接子元素,其中该子元素的某些 bool 属性缺失或计算结果为真。一个这样的属性是 requiredExtensions
属性,它要求用户代理必须支持特定的扩展以呈现指定的元素。
所以,如果你有一个 SVG <foreignObject>
元素(用于在 SVG 中嵌入非 SVG 元素)与 requiredExtensions="http://www.w3.org/1998/Math/MathML"
放在上面,然后把<foreignObject>
在 <switch>
里面元素,<math>
如果支持 MathML,将呈现元素,如果不支持 MathML,将呈现下一个元素。
因此,对于一个基本的 MathML 示例:<math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>+</mo><mn>1</mn><mo>=</mo><mn>2</mn></math>
是 1 + 1 = 2 的 MathML。
一个基本的 SVG 回退是 <svg xmlns="http://www.w3.org/2000/svg" width="65" height="23"><text y="15" font-size="16">1 + 1 = 2</text></svg>
(可以使用 Mathjax-Node 生成更复杂的回退)。
因此完整的带有回退的 MathML 表达式将是:
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="40">
<switch>
<foreignObject requiredExtensions="http://www.w3.org/1998/Math/MathML" width="120" height="40">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mn>1</mn><mo>+</mo><mn>1</mn><mo>=</mo><mn>2</mn><mtext>MathML</mtext>
</math>
</foreignObject>
<text y="15" font-size="16">1 + 1 = 2 (SVG)</text>
</switch>
</svg>
我已经在 Firefox(呈现 MathML)、Edge、IE11 和 Chrome(呈现 SVG)中测试了以上内容。我没有测试 Safari,因为我没有 Mac。
编辑:Safari 9 呈现 MathML。
为什么?
很好。
如果你想保持复制 + 过去的能力,你不能使用 <picture>
嵌入 SVG/MathML 混合体的标签 - 使用 <object>
相反:
(我在这里使用的是 DataUrl,但您可以轻松地将 SVG 保存为外部文件):
<object typemustmatch type="image/svg+xml" data="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjQwIj4NCiAgPHN3aXRjaD4NCiAgICA8Zm9yZWlnbk9iamVjdCByZXF1aXJlZEV4dGVuc2lvbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPg0KICAgICAgPG1hdGggeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiPg0KICAgICAgICA8bW4+MTwvbW4+PG1vPis8L21vPjxtbj4xPC9tbj48bW8+PTwvbW8+PG1uPjI8L21uPjxtdGV4dD5NYXRoTUw8L210ZXh0Pg0KICAgICAgPC9tYXRoPg0KICAgIDwvZm9yZWlnbk9iamVjdD4NCiAgICA8dGV4dCB5PSIxNSIgZm9udC1zaXplPSIxNiI+MSArIDEgPSAyIChTVkcpPC90ZXh0Pg0KICA8L3N3aXRjaD4NCjwvc3ZnPg==">
1 + 1 = 2 (You don't support SVG)
</object>
(您可以使用 CloudConvert 或类似的方法将 SVG 呈现为 PNG,如果您确实想要,则将其放入对象中。)
就这样吧。稍作预渲染,您就有了一个不需要 JavaScript 或 CSS 的 MathML 回退——只需要 HTML。
编辑:我制作了一个 NPM 包来自动创建 MathML、SVG 和 PNG。可以查到here .
关于MathML 的纯 HTML 回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48336557/
我有一个 MATHML 公式(由 http://www.mathtoweb.com/cgi-bin/mathtoweb_online.pl 生成)。我想将其粘贴到 Libreoffice 中。我怎样才
我不明白什么? 下面的代码工作正常: from sympy.printing.mathml import print_mathml s = "x**2 + 8*x + 16" print_mathml
我有一些网页大量使用 MathJax(或 MathML?),我想将其转换成电子书并显示在我的 kindle 上,它不支持足够的 javascript,也不支持 MathML。所以我想预处理 .html
我的浏览器 Firefox 3.6 似乎可以很好地显示 W3C 测试套件中的 Mathml 方程。但是,如果我将代码复制到我的网页中,例如 here ,所有 Firefox 生成的都是类似于 x y
我今天发现 Windows 7 带有一个非常令人印象深刻的 MathPanel 实用程序,用于执行方程的手写识别: 这很好。 (这里我已经输入了 sRGB 颜色空间 Gamma 转换部分的公式) 但现
我们很快就会开始开发 TeX 到 MathML 的转换器。所以,我想知道哪些浏览器(从哪个版本开始)正式支持 MathML?谢谢 最佳答案 几乎没有,只有 Firefox 和 Safari 可以处理
我试图显示一个简单的方程式,但它不起作用。我的代码如下(html5): a i =
我有一个包含文本区域的页面。用户将在其中输入 mathML,当用户单击输出按钮时,MathML 应呈现并显示在文本区域下方。但是渲染没有发生。 Textarea 可能包含多个用于渲染的 mathml
我正在尝试构建与 this site 相同的功能用户将在文本区域中输入数学表达式并将其呈现为 MathML 格式。 例子: Input expression string: cos(x^3) Then
快速了解 MathML 及其在世界范围内的使用的最佳方法是什么? 我的意思是: 你用什么来渲染/编辑它 它是否用于您可以向我指出的任何商业/开源应用程序 它是否流行并被大量使用? 是否有可以在 C#、
我在使用我们的学习管理系统 (LMS) 中内置的 MathML 编辑器时发现了一些奇怪的东西。当我输入 float 时,它用 包裹小数点标签。 例如,我期望 1.2输出为: 1.2 但是,编辑器输出
我一直在努力为 ckeditor 添加 mathml 支持。我浏览了几个链接,但似乎没有一个起作用。我什至尝试过 ckeditor 的 WIRIS 插件,但它没有给我任何结果。对于WIRIS,我关注了
我在使用我们的学习管理系统 (LMS) 中内置的 MathML 编辑器时发现了一些奇怪的东西。当我输入 float 时,它用 包裹小数点标签。 例如,我期望 1.2输出为: 1.2 但是,编辑器输出
我使用 MathML 创建一些数据 block ,我需要通过 OpenXML SDK 将其插入到 docx 文件中。我听说这是可能的,但我没有做到。有人可以帮我解决这个问题吗? 最佳答案 据我所知,O
我正在使用 MathDox用于生成 MathML 的公式编辑器。现在我想将 MathDox 生成的 MathML 转换为表达式,稍后我可以使用它来评估以找到答案。 For eg: MathML:
我想像这样转换表达式: “a*x^2+b*x^2+c+d”…… “对数((a*x)/sin(x))”... “1/x”... 使用 JavaScript 进入 MathML。有什么建议么?我找到的最接
我有一个 PHP 脚本输出:((5^2x^2)^2+3)/(sqrt(sqrt(81))) 我希望它像您编写的那样正确格式化。 在哪里可以找到这样的 ASCII 到 MathML 转换器:http:/
我正在尝试为用户实现一种输入简化数学符号的方法,而不是传统的 LaTex 符号。然后将使用 MathJax 呈现表达式的结果。但我似乎找不到“简化的数学符号”或 ad-hoc ASCII 到 late
具体来说(MathJax 不是我要找的)我有一个网页,里面有一些 MathML。“FireFox”浏览器可以很好地解析它,但是当我尝试通过 javascript 添加相同的代码时,它没有'解析它。如何
MathML是一种编写数学的网络标准,可以轻松缩放而无需像素化(就像 SVG)、复制和粘贴以及屏幕阅读器阅读。 Chrome 拒绝在存在 JavaScript polyfill 的基础上实现它。 (I
我是一名优秀的程序员,十分优秀!