這篇文章是我給Pinghsu主題添加數學公式功能的一個小教程,包含我大量的官方文檔閱讀后的實踐,跟著這篇配置教程走,你可以做到給任何一個需要數學公式的站點添加支持。
教程如標題所述是針對 Mathjax 的實踐,我簡單了解一下 KaTex ,也是個不錯的選擇。
MathJax簡介MathJax是一款運行在瀏覽器中的開源的數學符號渲染引擎,使用MathJax可以方便的在瀏覽器中顯示數學公式,不需要使用圖片。目前,MathJax可以解析Latex、MathML和ASCIIMathML的標記語言。(Wiki)
引入MathJax在頁腳處,引入官方的cdn
官方cdn的js在國內訪問慢,所以我們一般引入的是國內的公共資源cdn提供的js,這里特別感謝BootCDN
但這個js還是會調用到 cdn.mathjax.org 里的一些配置js文件,我們最好在head內加一個dns-prefetch,用于網頁加速,了解更多可以訪問我另外一篇文章:here
外聯config說明我們引入MathJax,發現鏈接后面多了個?config=TeX-AMS-MML_HTMLorMML
這個多出來的東西其實是告訴MathJax,我們要用到的叫TeX-AMS-MML_HTMLorMML.js的配置文件,其用來控制顯示數學公式的HTMl顯示輸出
這個配置文件其實也可以通過指定URL獲取,官方例子如下
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
內聯config說明與會同時,官方其實還提供了一個能讓我們內聯一個配置選項的功能
很簡單就是使用標簽對,但注意的是需要聲明類型type="text/x-mathjax-config"。要想讓這個內聯配置生效就得放在MathJax.js之前,例子如下
其中MathJax.Hub.Config()里的配置選項是本篇文章的重點
識別公式我們可以通過MathJax.Hub.Config()中tex2jax去實現公式識別
官方例子,如下
其中inlineMath識別的單行內的數學公式,我們可以通過$ ... $或( ... )去識別這種數學公式
效果如下:
When $a e 0$, there are two solutions to $(ax^2 + bx + c = 0)$
那么displayMath就是識別整個獨立段落的數學公式并且居中顯示,我們可以通過$$ ... $$或[ ... ]去識別這種數學公式
效果如下:
$$
x = {-b pm sqrt{b^2-4ac} over 2a}
$$
在中文世界里,我們往往喜歡用()或者[]去備注或者圈住重要的字段,所以在一般情況下我們并不需要( ... )和[ ... ]去識別公式
但也會有遇到兩個$$的情況造成誤傷,別急,先看完,你就知道怎么解決了
區域選擇性識別 約束識別范圍我們的數學公式通常是在文章里,那么如何實現只在文章的標簽對里面去做公式識別,如下
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_Display{overflow-x:auto;overflow-y:hidden;}擴展功能
為了更好實現美化數學公式,我們需要擴展一下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" });整理
這里我整理兩份可以整合到主題的代碼,請根據自己的需要修改,簡單注釋了一下
整理一
整理二
配合的css
.MathJax_Display{overflow-x:auto;overflow-y:hidden;} .MathJax{outline:0;}InstantClick回調
代碼如下
適用于整理一的代碼
適用于整理二的代碼
結語寫了好久···
我還會再寫一篇關于數學公式語法···
歡迎訪問我的博客:https://www.linpx.com/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81466.html
摘要:整合到本文更加注重代碼實踐,對于配置相關的知識會一筆帶過,不做過多的詳解。筆者是上傳到私服,然后通過導入。接口是預留給開發者根據不同事件處理業務邏輯的接口。改造筆記二優化邏輯 Moquette簡介 Mqtt作為物聯網比較流行的協議現在已經被大范圍使用,其中也有很多開源的MQTT BROKEN。Moquette是用java基于netty實現的輕量級的MQTT BROKEN. Moquet...
摘要:關閉進程問題順利解決。問題泄也是一個奇葩的問題,百度一下,原來碰到的人挺多,原因就是高版本的驅動會有數據庫和系統時區差異我用的版本是,所以碰到了,修改下配置,執行時區就可以了或者用回版本,該版本不會存在時區問題。 本文主要在上一篇Spring Boot學習筆記(四)構建RESTful API標準工程實例的基礎上,整合MyBatis,實現簡單的MySql數據庫訪問 引入依賴 這里主要依賴...
摘要:介紹并不局限于某一層是對象的容器幫我們管理項目中的所有對象搭建導包直接新建項目,一般的都有,除了依賴準備類書寫配置書寫代碼測試中的概念反轉控制創建對象的方式反轉了從我們自己創建對象反轉給程序來創建依賴注入將必須的屬性注入到對象當中是實現思想 1.spring介紹 spring并不局限于某一層.spring是對象的容器,幫我們管理項目中的所有對象 2.spring搭建 1.導包(idea...
閱讀 3138·2021-10-12 10:11
閱讀 1840·2021-08-16 10:59
閱讀 2851·2019-08-30 15:55
閱讀 1228·2019-08-30 14:19
閱讀 2039·2019-08-29 17:03
閱讀 2472·2019-08-29 16:28
閱讀 3221·2019-08-26 13:47
閱讀 2889·2019-08-26 13:36