CSDN-MarkDown編輯器使用手冊(4)--- 數學公式
輸入數學公式
1 數學公式的web解決方案
在網頁上顯示漂亮的數學公式,是多年來數學工作者和學者的願望。最容易實現的方式就是使用離線編輯器如word,Latex等編寫完公式,然後截圖作為圖片在html網頁中顯示。然而這種方式存在很多缺點:
- 無法線上修改,離線修改後必須重新截圖
- 放大顯示會失真,這是點陣圖的天生缺陷
- 不同的離線編輯器生成的顯示效果不同,很難統一
- 由於無法直接編輯,所以即使看到了公式,也無法在此基礎上進一步修改,不利於交流
當然,點陣圖顯示公式也有一個最大的優點,那就是相容所有瀏覽器,不需要任何外掛就可以瀏覽。
隨著html, css的持續發展,使用純html+css來顯示公式已經非常可行,於是大名鼎鼎的
2 MathJax渲染過程簡單模擬
2.1 MathJax最簡示例
先來看一個帶公式的最簡網頁例項mathjax.html。
<!DOCTYPE html>
<html>
<head>
<title>MathJax TeX Test Page</title>
<script type="text/x-mathjax-config" >
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
</head>
<body >
When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</body>
</html>
在瀏覽器中開啟mathjax.html,會顯示如下圖:
其對應的html程式碼如下圖:
2.2 模擬MathJax渲染原理
從前面的例子可以看出,MathJax中數學公式是用一些特殊字串表示的,這些字串被特定的邊界$ $
和$$ $$
包圍。然後MathJax引擎會根據邊界提取公式表示式,然後把它們替換成使用者顯示公式的html+css程式碼。
下面我們來模擬這一過程。用math.js模擬MathJax.js,如下所示:
window.onload = function()
{
var body = document.getElementsByTagName('body')[0];
var oldBody = body.innerHTML;
var newBody = oldBody.replace(/[^$]\$([^$]+)\$[^$]/g, function(str, r1){
return MathJax_inline(r1);
});
newBody = newBody.replace(/\$\$([^$]+)\$\$/g, function(str, r1){
return MathJax_block(r1);
});
body.innerHTML = newBody;
}
// 把公式內容描述轉換為顯示描述
function MathJax_inline(r1)
{
return '<span style="color:red">' + r1 + '</span>';
}
function MathJax_block(r1)
{
return '<div style="color:red">' + r1 + '</div>';
}
html頁面相應修改:
<!DOCTYPE html>
<html>
<head>
<title>MathJax TeX Test Page</title>
<script type="text/javascript" src="math.js"></script>
</head>
<body>
When $a \ne 0$, there are two solutions to $ax^2 + bx + c = 0$ and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</body>
</html>
來看看效果:
雖然沒有正確顯示出公式,但是已經識別出了公式邊界,並把公式部分用紅色顯示出來。真正的MathJax是把公式表示式替換成顯示公式的html程式碼,而不是簡單的設定為紅色,但是這其中的處理原理是一致的。
3 CSDN-MarkDown編輯器常用數學公式輸入教程
MathJax支援多種公式輸入輸出規範,輸入格式可以是MathML, TeX,ASCIImath中的任何一種,輸出格式可以是html+css,或svg,或MathML。下面僅對最常用的Tex輸入規範進行說明。
3.1 公式定界符與關鍵字
CSDN-MarkDown編輯器使用的公式定界符為$
和$$
,單美元符號包圍的是行內公式,雙美元符號包圍的是塊公式。
Tex關鍵字(字元轉義序列)表示特殊顯示符號,如\frac表示分數,其後面可以跟隨引數,引數多少與關鍵字有關。
3.2 上下標
^表示上標,_表示下標,如果上(下)標內容多於一個字元就需要使用{},注意不是( ), 因為( )經常是公式本身組成部分,為避免衝突,所以選用了{ } 將其包起來。
示例:$x^{y^z}=(1+e^x)^{-2xy^w}$
效果:
上面輸入的上下標都是在字元的右側,要想在左側或者兩側都寫上下標,那麼需要使用\sideset語法。
示例:$\sideset{^1_2}{^3_4}\bigotimes$
效果:
3.3 括號和分隔符
( )和[ ]就是自身了,由於{ } 是Tex的元字元,所以表示它自身時需要轉義。
示例:$f(x,y) = x^2 + y^2, x\epsilon[0,100]$
效果:
有時候括號需要大號的,普通括號不好看,此時需要使用\left和\right加大括號的大小。
示例:$(\frac{x}{y})^8$,$\left(\frac{x}{y}\right)^8$
效果:
\left和\right必須成對出現,對於不顯示的一邊可以使用 . 代替。
示例:$\left.\frac{{\rm d}u}{{\rm d}x} \right| _{x=0}$
效果:
3.4 分數
使用\frac{分子}{分母}格式,或者 分子\over 分母。
示例:$\frac{1}{2x+1}$
或者$1\over{2x+1}$
效果:
3.5 開方
示例:$\sqrt[9]{3}$ 和 $\sqrt{3}$
效果:
3.6 省略號
有兩種省略號,\ldots 表示語文字底線對其的省略號,\cdots表示與文字中線對其的省略號。
示例:$f(x_1, x_2, \ldots, x_n)=x_1^2 + x_2^2+ \cdots + x_n^2$
效果:
3.7 向量
示例:$\vec{a} \cdot \vec{b}=0$
效果:
3.8 積分
示例:$\int_0^1x^2{\rm d}x $
效果:
3.9 極限
示例:$\lim_{n\rightarrow+\infty}\frac{1}{n(n+1)}$
效果:
3.10 累加、累乘
示例:$\sum_1^n\frac{1}{x^2}$, $\prod_{i=0}^n\frac{1}{x^2}$
效果:
3.11 希臘字母
希臘字元示例:$$\alpha A \beta B \gamma \Gamma \delta \Delta \epsilon E
\varepsilon \zeta Z \eta H \theta \Theta \vartheta
\iota I \kappa K \lambda \Lambda \mu M \nu N
\xi \Xi o O \pi \Pi \varpi \rho P
\varrho \sigma \Sigma \varsigma \tau T \upsilon \Upsilon
\phi \Phi \varphi \chi X \psi \Psi \omega \Omega$$
效果:
3.12 數學符號大彙總