前端整合MathjaxJS的配置笔记

这篇文章是我给Pinghsu主题添加数学公式功能的一个小教程,包含我大量的官方文档阅读后的实践,跟着这篇配置教程走,你可以做到给任何一个需要数学公式的站点添加支持。

教程如标题所述是针对 Mathjax 的实践,我简单了解一下 KaTex ,也是个不错的选择。

MathJax简介

MathJax是一款运行在浏览器中的开源的数学符号渲染引擎,使用MathJax可以方便的在浏览器中显示数学公式,不需要使用图片。目前,MathJax可以解析Latex、MathML和ASCIIMathML的标记语言。(Wiki)

引入MathJax

在页脚处,引入官方的cdn

<script src="//www.90168.org cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

官方cdn的js在国内访问慢,所以我们一般引入的是国内的公共资源cdn提供的js,这里特别感谢BootCDN

<script src="//cdn.bootcss.com/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

但这个js还是会调用到 cdn.mathjax.org 里的一些配置js文件,我们最好在head内加一个dns-prefetch,用于网页加速,了解更多可以访问我另外一篇文章:here

<link rel="dns-prefetch" href="//cdn.mathjax.org" />

外联config说明

我们引入MathJax,发现链接后面多了个?config=TeX-AMS-MML_HTMLorMML

这个多出来的东西其实是告诉MathJax,我们要用到的叫TeX-AMS-MML_HTMLorMML.js的配置文件,其用来控制显示数学公式的HTMl显示输出

这个配置文件其实也可以通过cdn获取,官方例子如下

<script type="text/javascript"
   src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML,http://myserver.com/MathJax/config/local/local.js">
</script>

可惜BootCDN并没有提供这个js,MathJax.js也用到其他js,这些js都来自官方的cdn里,所以这也是解释了上面为什么我们需要对官方cdn进行加速

下面是官方更详细的TeX-AMS-MML_HTMLorMML配置文件的说明

This configuration file is the most general of the pre-defined configurations. It loads all the important MathJax components, including the TeX and MathML preprocessors and input processors, the AMSmath, AMSsymbols, noErrors, and noUndefined TeX extensions, both the native MathML and HTML-with-CSS output processor definitions, and the MathMenu and MathZoom extensions.

In addition, it loads the mml Element Jax, the TeX and MathML input jax main code (not just the definition files), as well as the toMathML extension, which is used by the Show Source option in the MathJax contextual menu. The full version also loads both the HTML-CSS and NativeMML output jax main code, plus the HTML-CSS mtable extension, which is normally loaded on demand.

更多配置文件信息请看:here

http://docs.mathjax.org/en/la...

内联config说明

与会同时,官方其实还提供了一个能让我们内联一个配置选项的功能

很简单就是使用<script></script>标签对,但注意的是需要声明类型type="text/x-mathjax-config"。要想让这个内联配置生效就得放在光棍影院MathJax.js之前,例子如下

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
});
</script>
<script type="text/javascript" src="path-to-MathJax/MathJax.js"></script>

其中MathJax.Hub.Config()里的配置选项是本篇文章的重点

识别公式

我们可以通过MathJax.Hub.Config()tex2jax去实现公式识别

官方例子,如下

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [ [‘$‘,‘$‘], ["\\(","\\)"] ],
        displayMath: [ [‘$$‘,‘$$‘], ["\\[","\\]"] ]
    }
});
</script>
<script type="text/javascript" src="path-to-MathJax/MathJax.js"></script>

其中inlineMath识别的单行内的数学公式,我们可以通过$ ... $\( ... \)去识别这种数学公式

效果如下:

When ane0, there are two solutions to (ax2+bx+c=0)

那么displayMath就是识别整个独立段落的数学公式并且居中显示,我们可以通过$$ ... $$\[ ... ])新视觉影院6080去识别这种数学公式

效果如下:

x=?bpmsqrtb2?4acover2a

在中文世界里,我们往往喜欢用()或者[]去备注或者圈住重要的字段,所以在一般情况下我们并不需要\( ... \)\[ ... ])去识别公式

但也会有遇到两个$$的情况造成误伤,别急,先看完,你就知道怎么解决了

区域选择性识别

约束识别范围

我们的数学公式通常是在文章里,那么如何实现只在文章的标签对里面去做公式识别,如下

var mathId = document.getElementById("post-content");
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [ [‘$‘,‘$‘], ["\\(","\\)"] ],
        displayMath: [ [‘$$‘,‘$$‘], ["\\[","\\]"] ]
    }
});
MathJax.Hub.Queue(["Typeset",MathJax.Hub,mathId]);

默认情况下,MathJax.Hub.Queue(["Typeset",MathJax.Hub])是对整个DOM树进行识别的

我们要约束识别范围,官方文档告诉我们MathJax.Hub.Queue的第三个参数就是识别范围,上面的代码就是告诉我们要在id为post-content的标签内去做公式识别

避开特殊标签和Class

还有其他方法吗?

有,那就是避开一些特殊的标签或者Class,如下

MathJax.Hub.Config({
    tex2jax: {
        inlineMath:  [ ["$", "$"] ],
        displayMath: [ ["$$","$$"] ],
        skipTags: [‘script‘, ‘noscript‘, ‘style‘, ‘textarea‘, ‘pre‘,‘code‘,‘a‘],
        ignoreClass:"class1"
    }
});
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);

其中skipTags用来避开一些特殊的标签,这里避开是script,noscript,style,textarea,pre,code,a的标签内

ignoreClass用来避开标签内声明的CSS Class属性,这里避开的是带有class="class1"的标签内

如果我们不想让mathjax识别评论里的公式就可以用ignoreClass

如果有多个Class需要避开,我们可以通过 | 来区分,写成ignoreClass: "class1|class2"基于可以了

更多

获取更多tex2jax的配置信息访问:here

美化数学公式

去掉蓝框

上图所示的是,点击该公式时周围有一圈蓝色的边框,我们可以通过添加CSS去掉,如下

.MathJax{outline:0;}

如果要改变字体大小,如下

.MathJax span{font-size:15px;}

扩展功能

为了更好实现美化数学公式,我们需要扩展一下MathJax.Hub.Config(),如下

MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX", "output/HTML-CSS"],
    tex2jax: {
        inlineMath:  [ ["$", "$"] ],
        displayMath: [ ["$$","$$"] ],
        skipTags: [‘script‘, ‘noscript‘, ‘style‘, ‘textarea‘, ‘pre‘,‘code‘,‘a‘],
        ignoreClass:"class1"
    },
    "HTML-CSS": {
    }
});
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);

我们可以再HTML-CSS添加可用字体,如下

"HTML-CSS": {
    availableFonts: ["STIX","TeX"]
}

我们要关闭下图的公式右击菜单

也是在HTML-CSS添加设置,如下

"HTML-CSS": {
    showMathMenu: false
}

去掉加载信息

Mathjax.js在加载的时候,我们可以再网页左下角看到加载情况,可以直接在MathJax.Hub.Config()里配置去掉,如下

MathJax.Hub.Config({
    showProcessingMessages: false,
    messageStyle: "none"
});

整理

这里我整理两份可以整合到主题的代码,请根据自己的需要修改,我用的是第一份

整理一

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    showProcessingMessages: false,
    messageStyle: "none",
    extensions: ["tex2jax.js"],
    jax: ["input/TeX", "output/HTML-CSS"],
    tex2jax: {
        inlineMath:  [ ["$", "$"] ],
        displayMath: [ ["$$","$$"] ],
        skipTags: [‘script‘, ‘noscript‘, ‘style‘, ‘textarea‘, ‘pre‘,‘code‘,‘a‘],
        ignoreClass:"comment-content"
    },
    "HTML-CSS": {
        availableFonts: ["STIX","TeX"],
        showMathMenu: false
    }
});
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
</script>
<script src="//cdn.bootcss.com/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

整理二

<script type="text/x-mathjax-config">
var mathId = document.getElementById("post-content");
MathJax.Hub.Config({
    showProcessingMessages: false,
    messageStyle: "none",
    extensions: ["tex2jax.js"],
    jax: ["input/TeX", "output/HTML-CSS"],
    tex2jax: {
        inlineMath:  [ ["$", "$"] ],
        displayMath: [ ["$$","$$"] ],
        skipTags: [‘script‘, ‘noscript‘, ‘style‘, ‘textarea‘, ‘pre‘,‘code‘,‘a‘],
        ignoreClass:"comment-content"
    },
    "HTML-CSS": {
        availableFonts: ["STIX","TeX"],
        showMathMenu: false
    }
});
MathJax.Hub.Queue(["Typeset",MathJax.Hub,mathId]);
</script>
<script src="//www.bsck.org cdn.bootcss.com/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

修复与Instantclick的冲突

代码如下

适用于整理一的代码

<script data-no-instant>
InstantClick.on(‘change‘, function(isInitialLoad){
    if (isInitialLoad === false) {
        if (typeof MathJax !== ‘undefined‘){
            MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
        }
    }
});
InstantClick.init();
</script>

适用于整理二的代码

<script data-no-instant>
InstantClick.on(‘change‘, function(isInitialLoad){
    if (isInitialLoad === false) {
        if (typeof MathJax !== ‘undefined‘){
            var mathId = document.getElementById("post-content");
            MathJax.Hub.Queue(["Typeset",MathJax.Hub,mathId]);
        }
    }
});
InstantClick.init();
</script>
时间: 2024-11-14 15:31:23

前端整合MathjaxJS的配置笔记的相关文章

nginx图片过滤处理模块http_image_filter_module安装配置笔记

nginx图片过滤处理模块http_image_filter_module安装配置笔记 http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是即时计算的结果,所以网站访问量大的话,不建议使用. 安装还是很简单的,默认HttpImageFilterModule模块是不会编译进ngi

Maven配置笔记

android-m2e插件与maven 自定义用户配置路径 不管插件还是maven,默认的用户配置路径是统一的:${user.home}/.m2/settings.xml 但是插件可以通过eclipse设置用户配置的路径(配置方法参考<ADT+Android-m2e环境搭建>):而maven不能永久指定,只能在每次使用mvn命令时加上"-s 新路径"参数. 依赖 如果使用android-m2d,在eclipse中写好依赖配置(<dependency>),保存之后

notepad++ 配置笔记

0.notepad++简介 Notepad++是一套非常有特色的自由软件的纯文字编辑器,有完整的中文化接口及支援多国语言撰写的功能.它的功能比 Windows 中的 Notepad更强大.Notepad++ 不仅有语法高亮功能,也有语法折叠功能,并且有大量扩展插件. 1.相关设置 [1]设置->首选项 设置tab [2]设置->首选项 设置函数和关键字自动完成 [3]设置->语言格式设置 设置全局字体 [4]设置->语言格式设置 修改C语言样式 notepad++ 配置笔记,布布扣

ciso 9124配置笔记

ciso 9124配置笔记 新建 网络,常用命令 初始化配置 ciso 9124的默认用户名密码为:admin,[email protected] 机器新开机进入初始化模式,第一个问题是否进入dialog模式,选择no,如果选择yes则进入交互模式,选择no则进入CLI模式 输入用户名密码进入命令行模式:admin,[email protected] 设置交换机的管理地址 switch# config t switch (config)# switchname switch switch(con

solr 4.8+mysql数据库数据导入 + mmseg4j中文全文索引 配置笔记

1.如何将solr部署,请参考之前的文章 2.按上述配置好后,在solr_home文件夹中,将包含collection1文件夹,这就是solr的一个实例.下面我们来看看collection1中的文件内容. collection1中包含conf和data两个子文件夹.data中包含tlog和index(如果没有也没关系,稍后再solr建立索引时,将会被创建).tlog是记录日志的文件夹,index是存放索引的文件夹.conf中包含lang文件夹和若干文件.lang文件夹中包含的是词库文件,但是so

NAS配置Time Machine,在D-Link DNS-320上的配置笔记

今天打算把Time Machine备份的工作交给NAS,曾经是放在一块外置硬盘上的,尽管速度要比NAS快,可是每次插拔外接都有些麻烦.而NAS又具有实时在线.定时关机启动的功能.配合Time Machine能够实现最大程度的数据备份. 事实上这个配置笔记是一边做一边写的,笔者本人也不知道会踩到什么雷,所以配置的过程不一定是最简洁的,仅仅求给大家带来一些思路.解决一些实际问题. 废话不多说了,叙述一下准备工作.DNS-320的入门级NAS一台(双盘位),更新了最新的固件,把当中一个盘拔出来后换上了

android开发环境 eclipse + android sdk配置笔记

本开发环境为:eclipse + android sdk,步骤说明的顺序,没有特别要求,看个人爱好了 步骤说明: 1.安装eclipse 2.配置jdk 3.安装android sdk 4.安装ADT,关联eclipse和android 详细说明: 1.安装eclipse * 到官方网下载eclipse(http://www.eclipse.org/downloads/),我是下载的Eclipse IDE for Java EE Developers. * 正常解压安装,注意记得路径就可以了 2

Hadoop2.2.0分布式环境配置笔记2-编译64位hadoop源码

11.配置hadoop分布式环境!  三台机器都需要这么配置 1).将/opt/modules/hadoop-2.2.0-src重命名  mv /opt/modules/hadoop-2.2.0-src/ /opt/modules/hadoop-2.2.0-src_x32_back 2).解压64位源码 tar -zxvf /opt/modules/hadoop-2.2.0-src_x32_back/hadoop-dist/target/hadoop-2.2.0.tar.gz -C /opt/m

GNS3&GNS3-IOU-VM-1.5.2配置笔记

一.c3640-jk9s-mz.124-16是学习CISCO过程中我们最常用IOS,很强大的一个IOS版本,解压后有66.5M,此IOS不单单支持路由交换实验,同时还支持IPv6.VPN.Voip.MPLS-VPN 等,所以人们通常称之为全能型IOS 另一好用的:c3745-adventerprisek9_ivs-mz.124-25d.image可用于mplsvpn 二.local-server-IOS  //本地GNS3使用. remote-server-IOS //GNS3-IOU-VM上使