惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
腾讯CDC
V
V2EX
Martin Fowler
Martin Fowler
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog
博客园 - 【当耐特】
Cisco Talos Blog
Cisco Talos Blog
The Hacker News
The Hacker News
K
Kaspersky official blog
Security Latest
Security Latest
H
Help Net Security
博客园_首页
美团技术团队
Spread Privacy
Spread Privacy
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
G
Google Developers Blog
NISL@THU
NISL@THU
爱范儿
爱范儿
I
Intezer
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
N
News and Events Feed by Topic
P
Privacy International News Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
P
Palo Alto Networks Blog
G
GRAHAM CLULEY
Hacker News: Ask HN
Hacker News: Ask HN
I
InfoQ
The Cloudflare Blog
F
Full Disclosure
SecWiki News
SecWiki News
宝玉的分享
宝玉的分享
N
Netflix TechBlog - Medium

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活 翻译 – CSS Sprites:实用技术还是生厌之物? « 张鑫旭-鑫空间-鑫生活 纯CSS实现易拉罐3D滚动效果 « 张鑫旭-鑫空间-鑫生活 纯CSS实现侧边栏/分栏高度自动相等 « 张鑫旭-鑫空间-鑫生活 CSS+JavaScript实现页面不同布局的切换 « 张鑫旭-鑫空间-鑫生活 JavaScript实现最简单的拖拽效果 « 张鑫旭-鑫空间-鑫生活 自己写的无图片版jQuery zxxbox弹出框插件 « 张鑫旭-鑫空间-鑫生活 中国古代道家思想与网页重构的思考 « 张鑫旭-鑫空间-鑫生活 让所有浏览器支持HTML5 video视频标签 « 张鑫旭-鑫空间-鑫生活 纯CSS实现各类气球泡泡对话框效果 « 张鑫旭-鑫空间-鑫生活 JS HEX十六进制与RGB, HSL颜色的相互转换 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变、高光等文字效果 « 张鑫旭-鑫空间-鑫生活 去除冗余 – 精简您的CSS样式代码 « 张鑫旭-鑫空间-鑫生活 对overflow与zoom”清除浮动”的一些认识 « 张鑫旭-鑫空间-鑫生活 jQuery Pagination Ajax分页插件中文详解 « 张鑫旭-鑫空间-鑫生活 absolute绝对定位的非绝对定位用法 « 张鑫旭-鑫空间-鑫生活 网页布局思想浅议-淘宝新版首页为实例 « 张鑫旭-鑫空间-鑫生活 回流与重绘:CSS性能让JavaScript变慢? « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(二) « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(一) « 张鑫旭-鑫空间-鑫生活 60个极富创造性的震撼的电影海报设计 « 张鑫旭-鑫空间-鑫生活 jQuery Lightbox(balupton版)图片展示插件讲解 « 张鑫旭-鑫空间-鑫生活 博客内嵌flash音乐播放器代码、下载与使用 « 张鑫旭-鑫空间-鑫生活 CSS3 animate实现图片墙3D翻转效果 « 张鑫旭-鑫空间-鑫生活 图片旋转效果的一些研究、jQuery插件及实例 « 张鑫旭-鑫空间-鑫生活 CSS3 border-image详解、应用及jQuery插件 « 张鑫旭-鑫空间-鑫生活 jQuery-两款不同原理的圆角插件讲解 « 张鑫旭-鑫空间-鑫生活 页面可用性之outline轮廓外框的一些研究 « 张鑫旭-鑫空间-鑫生活 CSS3 transition实现超酷图片墙动画效果 « 张鑫旭-鑫空间-鑫生活 HTML CSS列表元素ul,ol,dl的研究与应用 « 张鑫旭-鑫空间-鑫生活 jQuery图片文本滚动切换插件jCarousel中文翻译与详解 « 张鑫旭-鑫空间-鑫生活 酷酷的jQuery鼠标悬停图片放大切换显示效果 « 张鑫旭-鑫空间-鑫生活 IE6下z-index犯癫不起作用bug的初步研究 « 张鑫旭-鑫空间-鑫生活 checkbox复选框的一些深入研究与理解 « 张鑫旭-鑫空间-鑫生活 jQuery之使用slideToggle实现垂直下拉菜单 « 张鑫旭-鑫空间-鑫生活 jQuery-innerfade内部列表自动淡入淡出插件 « 张鑫旭-鑫空间-鑫生活 jQuery-火焰灯效果导航菜单 « 张鑫旭-鑫空间-鑫生活 IE下css bug集合-翻译自haslayout.net « 张鑫旭-鑫空间-鑫生活 翻译-IE7/8@font-face嵌入字体与文字平滑 « 张鑫旭-鑫空间-鑫生活 jQuery-马化腾产品设计与用户体验的一些技术实现 « 张鑫旭-鑫空间-鑫生活 像素的世界及其在web开发制作中的应用 « 张鑫旭-鑫空间-鑫生活 css行高line-height的一些深入理解及应用 « 张鑫旭-鑫空间-鑫生活 CSS实现圆角六色渐变自适应按钮详解 « 张鑫旭-鑫空间-鑫生活 我熟知的三种三栏网页宽度自适应布局方法 « 张鑫旭-鑫空间-鑫生活 jQuery照片图像剪裁插件Jcrop中文翻译详解 « 张鑫旭-鑫空间-鑫生活 Ajax Upload多文件上传插件翻译及中文演示 « 张鑫旭-鑫空间-鑫生活 告别图片—使用字符实现兼容性的圆角尖角效果beta版 « 张鑫旭-鑫空间-鑫生活 大小不固定的图片、多行文字的水平垂直居中 « 张鑫旭-鑫空间-鑫生活 jQuery boxy弹出层对话框插件中文演示及讲解 « 张鑫旭-鑫空间-鑫生活 JavaScript实现新浪微博文字放大显示动画效果 « 张鑫旭-鑫空间-鑫生活 翻译:让网络更快一些——最小化浏览器中的回流(reflow) « 张鑫旭-鑫空间-鑫生活 jQuery之addClasas与removeClass使用实例 « 张鑫旭-鑫空间-鑫生活 关于Google圆角高光高宽自适应按钮及其拓展 « 张鑫旭-鑫空间-鑫生活 JavaScript实现图片幻灯片滚动播放动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery-鼠标经过显示大图并跟随鼠标效果插件 « 张鑫旭-鑫空间-鑫生活 关于gif图片(或png8)杂边锯齿的问题 « 张鑫旭-鑫空间-鑫生活 对html与body的一些研究与理解 « 张鑫旭-鑫空间-鑫生活 鲜为人知的一个解决兼容性问题的利器——小数 « 张鑫旭-鑫空间-鑫生活 搜狐白社会似iphone短信对话框效果的优化 « 张鑫旭-鑫空间-鑫生活 关于文字内容溢出用点点点(…)省略号表示 « 张鑫旭-鑫空间-鑫生活 jquery之append与insertBefore使用实例 « 张鑫旭-鑫空间-鑫生活 jQuery之图片关联伸缩效果 « 张鑫旭-鑫空间-鑫生活 jquery之图片左右切换动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery之replace字符串替换实现不同尺寸图片切换 « 张鑫旭-鑫空间-鑫生活 jQuery-实现图片的放大镜显示效果 « 张鑫旭-鑫空间-鑫生活 jQuery-单击文字或图片内容放大显示效果插件 « 张鑫旭-鑫空间-鑫生活 reflection.js-实现图片投影倒影效果js插件 « 张鑫旭-鑫空间-鑫生活 jQuery-很酷的弹出层效果js插件 « 张鑫旭-鑫空间-鑫生活 复选框单选框与文字对齐问题的研究与解决 « 张鑫旭-鑫空间-鑫生活 css margin的相关属性,问题及应用 « 张鑫旭-鑫空间-鑫生活 IE6下png背景不透明问题的综合拓展 « 张鑫旭-鑫空间-鑫生活
数学标记语言MathML简介、工具及兼容 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2018-10-24 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=8108
本文可全文转载,个人网站无需授权,只要保留原作者、出处以及文中链接即可,任何网站均可摘要聚合,商用请联系授权。

MathML头图缩略图

//zxx: 本文在Firefox或者Safari浏览器下浏览会有更好的体验。

一、MathML简介

MathML指“数学标记语言”,是XML语言的一个子集,用来在web网页,甚至部分软件中显示数学公式。

简言之,就是使用特殊的类似HTML的标记在网页中显示数学公式。

因为有些数学公式很复杂,普通HTML根本没法驾驭,例如下面这个公式:

一个复杂的数学公式

都有哪些MathML标记呢?可以看下面的定义列表说明(非原文访问会数学公式排版异常):

1. 按类别分类的MathML表现元素

顶级元素

<math>
用在最外部包裹,表示里面的都是数学公式。例如,就一个变量x,则有:
<math><mi>x</mi></math>

效果是:x

记号元素

<mglyph>
有些现存的Unicode字符是不可用的,此时就可以使用<mglyph>替换显示,可以理解为MathML世界中的图片元素,支持width, height以及alt等属性。例如:
<math>
  <mi><mglyph src="my-glyph.png" alt="my glyph"/></mi>
</math>
<mi>
mi是’math identifier’的缩写,字面意思数学标识符,多指函数名,变量或者符号常量。示意(下面标识符之间无任何关联,仅仅示意语义):
<math> 
  <mi> y </mi>  
  <mi> sin </mi>
  <mi mathvariant="monospace"> x </mi>
  <mi mathvariant="bold"> &pi; </mi>
</math>
<mn>
mn是’math number’的缩写,表示数值,支持各种数值。示意(仅示意,无关联):
<math> 
  <mn> 0 </mn>
  <mn> 1.337 </mn>
  <mn> twelve </mn>
  <mn> XVI </mn>     
  <mn> 2e10 </mn> 
</math>
<mo>
mn是’math operators’的缩写,表示数学操作符,例如加减乘除,各种括号,分号等。示意:
<math>
<mrow>
  <mn>5</mn>
  <mo>+</mo>
  <mn>5</mn>
</mrow> 

<mrow>
  <mo> [ </mo> 
  <mrow>
    <mn> 0 </mn>
    <mo> ; </mo> 
    <mn> 1 </mn>
  </mrow>
  <mo> ) </mo>
</mrow>
</math>
<ms>
ms是’math string literal’的缩写,表示一个字符串文字,这个字符串需要由编程语言和计算机代数系统来解释。默认情况下,字符串文字显示为用双引号括起来(&quot;); 通过使用lquoterquote属性,您可以设置要显示的自定义字符。示意:
<math>
  <ms lquote="„" rquote="“"> abc </ms>
</math>
<mspace>
mspace是’math space’的缩写,表示空白间距,其尺寸可以通过width, height以及depth等尺寸控制。示意:
<math>
  <mi>x</mi>
  <mspace width="40px"></mspace>
  <mi>y</mi>
</math>

效果是:xy

<mtext>
MathML <mtext>元素用于呈现没有符号含义的任意文本,例如注释或注解。示意:
<math> 
  <mtext> 毕达哥拉斯定理 </mtext>  
  <mtext> /* 在这里注释 */ </mtext>
</math>

总体布局

<menclose>
MathML <menclose>元素用来把内容封闭在指定的记号中(通过设置notation属性)。示意一个根号效果:
<math> 
  <menclose notation="radical">
     <msup><mi>a</mi><mn>2</mn></msup>
     <mo>+</mo>
     <msup><mi>b</mi><mn>2</mn></msup>
  </menclose>
</math>

在支持的浏览器,例如Firefox浏览器中,表现会如后面这样:根号效果截图

<menclose>元素支持的封闭符合非常多,款式各种各样,让人大开眼界,有兴趣可以看MDN这个文档

<merror>
MathML <merror>元素用来标记这个计算公式或者表达式是错误的,浏览器会通过边框和背景色样式加以明显区分。示意:
<merror>
  <mrow>
    <mtext>除以0:</mtext>
    <mfrac>
      <mn> 1 </mn>
      <mn> 0 </mn>
    </mfrac>
  </mrow>
</merror>
</math>

当前浏览器实时效果是: 除以0: 1 0

Firefox浏览器截图效果是:出错Firefox截图效果

<mfenced>
MathML <maction>元素可以添加自定义的对称闭合符号(如括号),以及自定义分隔符(如逗号)。示意:
<math>
  <mfenced open="{" close="}" separators=";;,"> 
    <mi>a</mi> 
    <mi>b</mi> 
    <mi>c</mi> 
    <mi>d</mi> 
    <mi>e</mi> 
  </mfenced> 
</math>

当前浏览器实时效果是:abcde

在支持的浏览器下面会这样呈现:自定义括号和分隔符效果截图

<mfrac>
MathML <mfrac>'math fraction',表示分数,也即是除法。示意:
<math>  
  <mfrac bevelled="true">
     <mfrac>
        <mi> a </mi>
        <mi> b </mi>
     </mfrac>
     <mfrac>
        <mi> c </mi>
        <mi> d </mi>
     </mfrac>
  </mfrac>
</math>

当前浏览器实时效果是: a b c d

在支持的浏览器下面会这样呈现:分数效果

<mpadded>
MathML <mpadded>元素用来给封闭内容增加格外的padding一遍进行位置和尺寸的调整。
<mphantom>
Phantom这个单词是幻影的意思。因此MathML <mphantom>表示当前元素是个“幻影”,也就是不可见,但是位置尺寸都保留,类似CSS世界中的visibility:hidden。示意:
<math>
<mrow>
  <mi> x </mi>
  <mo> + </mo> 
  <mphantom>
    <mi> y </mi>
    <mo> + </mo>
  </mphantom>
  <mi> z </mi>
</mrow>
</math>

当前浏览器实时效果是: x + y + z

在支持的浏览器下面会这样呈现:幻影效果

<mroot>
MathML <mroot>元素表示根号。示意:
<math>
 <mroot>
    <mi>x</mi>
    <mn>3</mn>
 </mroot> 
</math>

当前浏览器实时效果是: x 3

在支持的浏览器下面会这样呈现:根号效果

<mrow>
MathML <mrow>元素用于对子表达式进行分组,子表达式通常包含一个或多个运算符及其各自的操作数(例如)。 此元素水平呈现。上面很多案例已经有示意,这里不重复演示。
<msqrt>
MathML <msqrt>元素表示开平方根。示意:
<math>
 <msqrt>
    <mi>x</mi>
  </msqrt> 
</math>

当前浏览器实时效果是: x

<mstyle>
MathML <mstyle>元素用于更改其子项的样式。例如设置颜色为茶色:
<math> 
  <mstyle displaystyle="true" mathcolor="teal">
    <mrow>
      <mi>i</mi>
      <mo form="infix">=</mo>
      <mn>1</mn>
    </mrow>
  </mstyle>
</math>

在支持的浏览器下面会这样呈现:颜色变化效果

脚本和限制元素

<mmultiscripts>
MathML <mmultiscripts>元素允许你创建一个类似张量对象。“张量”(tensor)理论是数学的一个分支学科,在力学中有重要应用。张量是一个定义在的一些向量空间和一些对偶空间的笛卡儿积上的多重线性映射,其坐标是|n|维空间内,有|n|个分量的一种量, 其中每个分量都是坐标的函数, 而在坐标变换时,这些分量也依照某些规则作线性变换。

这个元素的理解难度已经超出我的能力范畴,溜了溜了……

<mover>
MathML <mover>元素用来在表达式的上方添加重音或限制。示意:
<math>
<mover accent="true">
  <mrow>
    <mi> x </mi>
    <mo> + </mo>
    <mi> y </mi>
    <mo> + </mo>
    <mi> z </mi>
  </mrow>
  <mo> &#x23DE; <!--上花括号--> </mo>
</mover> 
</math>

当前浏览器实时效果是: x + y + z

在支持的浏览器下面会这样呈现:mover

<msub>
MathML <msub>好理解,表示下标。示意:
<math>
  <msub>
    <mi>X</mi>
    <mn>1</mn>
  </msub>
</math>

当前浏览器效果: X 1

<msubsup>
MathML <msubsup>元素表示同时上标和下标。示意:
<math displaystyle="true">   
  <msubsup>
    <mo> &#x222B;<!-- 积分 --> </mo>
    <mn> 0 </mn>
    <mn> 1 </mn>
  </msubsup>
</math>

当前浏览器实时效果是: 0 1

在支持的浏览器下面会这样呈现:msubsup

<msup>
MathML <msup>表示上标,参见下标<msub>
<munder>
MathML <munder>元素和<mover>对立,表示在表达式下方强调或者限制。示意:
<math>
<munder accent="true">
  <mrow>
    <mi> x </mi>
    <mo> + </mo>
    <mi> y </mi>
    <mo> + </mo>
    <mi> z </mi>
  </mrow>
  <mo> &#x23DF; <!--下花括号--> </mo>
</munder> 
</math>

当前浏览器实时效果是: x + y + z

在支持的浏览器下面会这样呈现:mover

<munderover>
MathML <munderover>元素表示同时出现在上面和下面。示意:
<math displaystyle="true"> 
  <munderover >
    <mo> &#x222B; <!--积分--> </mo>
    <mn> 0 </mn>
    <mi> &#x221E; <!--无穷--> </mi>
  </munderover>
</math>

当前浏览器实时效果是: 0

在支持的浏览器下面会这样呈现:munderover

表格数学

<mlabeledtr>
MathML <mlabeledtr>元素用于表示行内label标签,要么在左侧要么在右侧(由<mtable>元素上的side属性决定)。 <mlabeledtr>的子元素必须是<mtd>元素。 第一个子节点是label标签,而所有其他子节点表示行内容,并且与<mtr>元素的子节点相同。根据我在Firefox浏览器下的测试,应当作为label标签的第一个子节点并未显示。

标签为显示

<mtable>
MathML <mtable>元素可以理解为HTML届的<table>元素,虽然属性出入较大,但排版布局表现很类似。
<mtd>
MathML <maction>元素可以理解为HTML届的<td>元素,表示单元格,两者排版效果很类似。
<mtr>
MathML <maction>元素可以理解为HTML届的<tr>元素,表示表格行,两者排版布局效果很类似。

未分类元素

<maction>
MathML <maction>元素可以添加交互行为,例如展现的是表达式,点击一下出现的是表达式计算结果。示意一个1+1=2的效果:
<math>
<maction actiontype="toggle">
  <mrow>
    <mn>1</mn>
    <mo>+</mo>
    <mn>1</mn>
  </mrow>
  <mrow>
    <mo>=</mo>
    <mn>2</mn>
  </mrow> 
</maction>
</math>

效果如下GIF:
1+1=2

2. 语义注释

在MathML中,有两种标记数学的方法:Presentation MathML用于控制数学方程或表达式的布局,也就是用户看到的外观(上面介绍的部分),而Content MathML用于使数学方程或表达式更语义化,便于计算机理解。 MathML元素<semantics><annotation><annotation-xml>用于联合展示和内容标记,以及提供数学表达式的布局信息和语义。

<annotation>
MathML <annotation>表示注解与说明。
<annotation-xml>
MathML <annotation-xml>指明函数或表达式结构。
<semantics>
MathML <semantics>表示里面含有语义化信息。

上面3元素看下面一个案例就能知道大概作用了:

<math>
  <semantics>
    <!-- Presentation MathML -->
    <mrow>
      <msup>
        <mi>x</mi>
        <mn>2</mn>
      </msup>
      <mo>+</mo>
      <mi>y</mi>
    </mrow>
    <!-- Content MathML -->
    <annotation-xml encoding="MathML-Content">
      <apply>
        <plus/>
        <apply>
          <power/>
          <ci>x</ci>
          <cn type="integer">2</cn>
        </apply>
        <ci>y</ci>
      </apply>
    </annotation-xml>
    <!-- 图像注解 -->
    <annotation encoding="image/png" src="some/path/formula.png"/>
    <!-- TeX注解 -->
    <annotation encoding="application/x-tex">
      x^{2} + y 
    </annotation> 
  </semantics>
</math>

其他

  • 可以看到都以MathML标记都是字母m开头。
  • 上面所有展示的MathML代码效果都可以在这个页面看到,您可以狠狠地点击这里:MathML示意demo

二、浏览器的兼容处理

首先看下兼容性,Chrome浏览器在版本24的时候曾经昙花一现支持了下,不过很快就取消了支持,据说是出于安全考虑。

MathML兼容性

据说IE浏览器可以安装MathPlayer插件支持下,不过我个人觉得最终效果尔尔。

至于Chrome浏览器,我查找了下,有个名叫mathml.css的项目:https://github.com/fred-wang/mathml.css

针对Chrome这类不支持的浏览器使用CSS进行了公式布局的模拟。使用方法可以是直接引入下面JS代码:

<script src="//fred-wang.github.io/mathml.css/mspace.js"></script>

这个mspace.js会检测当前浏览器是否支持MathML,如果不支持,就会加载mathml.css文件做兼容,但也只是一定程度上的兼容,根据我的实际使用测评,很多标签和属性功能并不支持,然后,最终呈现的排版效果和原本支持的浏览器(如Firefox)相差甚远,只能说凑合使用。

补充于2020-03-13

外面的世界总有不确定性,于是我把上面项目demo自己服务器上也迁移了一份,顺便优化了下显示的字体,主要针对Chrome浏览器显示。

mathml.css效果的demo演示

字体设置:

math {
    font-family: Cambria Math, Latin Modern Math;
}

Cambria Math是Windows系统,Latin Modern Math是macOS系统。

三、在线生成MathML的工具介绍

从第一段的介绍就可以看出MathML非常复杂,是个完整的XML语言体系,其中还有茫茫多的XML属性还没介绍,由于对于复杂公式,我们想要完全手写出来,呵呵,估计要废掉大半的血条。

好在有现成的工具,可以直接生成MathML代码。经过自己一番实践,发现下面这个工具是极好的!

手写公式自动变MathML

例如,我在画布中写个x2+y2=z2,结果右上角MathML代码就出来了,实在太牛了!

手写公式自动识别为MathML语言

四、小众语言,总会有用的

MathML这么语言,虽然小众,但总归有用的,举例来说,我之前写了很多动画相关的文章,例如抛物线运动,矩阵变换介绍等,都需要用到数学公式,如果得到精美的自己想要的公式代码呢?经过这几天学习,我就知道该怎么玩了。

先打开上面介绍的在线生成MathML的工具,手写数学公式,然后把生成的MathML代码在Firefox浏览器中显示,然后截图,一个精致的数学公式效果图就出来了!

要是没有对MathML的学习和研究,肯定不会知道原来还可以这么玩,对吧?

学习呢,不要功利心太强,就算当下看不到效益,但在将来某一天,总会给你带来雪中送炭般的帮助的。

感谢阅读,欢迎交流!

本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
本文地址:https://www.zhangxinxu.com/wordpress/?p=8108

(本篇完)