本網站是一個理科網站,往往會涉及數學公式的輸入和顯示,而這在Web上一直是一個難題。所以參考了好幾篇網上的文章,現將自己的學習成果整理一下。主要參考網址:章楊的blog的Web數學公式的輸入和顯示。
TeX是Knuth教授開發的一種優秀的桌面電子排版系統。它提供了一套功能強大并且十分靈活的排版語言,有多達900多條指令,并且具有宏功能,用戶可以不斷地定義自己適用的新命令來擴展TeX系統的功能。
TeX系統有許多優點,如開源、易移植、排版質量高、輸出結果與設備無關等。同時,它也是公認的最好的數學公式排版系統,它在數學和工程領域得到了廣泛的使用,相關領域的學術論文基本都由TeX系統或其兼容系統(如LaTeX系統)排版生成。
在TeX系統中,各種數學符號和公式由不同的數學記號來表示,如\sin表示sin、\sqrt表示根號等。數學記號和數字的組合一般放在
數學公式 | TeX指令 |
---|---|
![]() | ![]() |
f(x)=x2-1 | ![]() |
![]() | ![]() |
一般來說,TeX指令和它所表示的數學公式本身非常接近,或者是該數學符號的英文縮寫。因此TeX指令比較直觀、易學,也很方便輸入,中小學數學涉及的數學符號更是如此。
但在中小學,公式的輸入幾乎不會用Tex,用的都是Word自帶的公式編輯器,我這些年通常使用域代碼,因為高中物理通常在輸入分數、根號時才會涉及公式的輸入,而這種簡單的情況用公式編輯器有點大材小用,也比較難輸,我通常只有在比較復雜的情況下(比如或矩陣)才使用公式編輯器。
TeX系統雖然能完美地顯示數學公式,但是無法在互聯網上使用。目前我采用的方法是將Word中的公式進行截圖,在網頁中用圖像的方式顯示公式,用這種方法比較費時,而且修改也不方便。而HTML超文本標記語言由于自身的缺陷,也很難顯示數學公式。
針對這些問題,國際互聯網協會(World Wide Web Consortium,W3C)于1997年成立了W3C數學工作組,制定一種基于XML語言標準的數學標記語言(Mathematical Markup Language,MathML)。該組織于1998年發布了MathML 1.0版本,當前最新版本是3.0,發布于2010年10月21日。 MathML語言主要從表現(Presentation)和內容(Content)兩個維度來定義各種數學符號和公式。表現標記是從數學表達式的顯示形式來描述數學公式,如<msup>標記表示上標符號,<msub>表示下標符號等;而內容標記是從數學表達式本身的內在含義進行描述數學公式,如<plus>標記表示相加。二者可以從各自的角度表示同一個數學公式,以
表現標記 | 內容標記 | ||||
---|---|---|---|---|---|
|
|
MathML數學標記語言是一個國際標準,Mozilla/Firefox/Netscape(7.1+)瀏覽器已默認支持MathML語言,但Internet Explorer暫不支持MathML標準,需要安裝MathPlayer插件來解析含有MathML標記的網頁。
簡單地說,TeX指令和MathML標記語言是兩種互補性很強的語言。采用TeX指令描述的數學公式簡單、直觀,但瀏覽器不能直接識別和顯示;MathML數學標記語言雖然是為互聯網而設計的,但它的標記語言又相對復雜,不便于輸入。因此,有研究者結合兩者的優點,開發了TeX指令與MathML自動轉換的Java 程序,ASCIIMathML就是其中的佼佼者。
ASCIIMathML轉換程序由美國加州查普曼(Chapman)大學Peter Jipsen開發,其設計思想是在網頁上插入一段JS代碼,將網頁中的TeX指令(TeX/LaTeX-style)自動轉換成MathML表現標記語言,再返回給支持MathML標準的網絡瀏覽器識別和顯示。
由于微軟Internet Explorer瀏覽器不支持MathML標準,若要正確地顯示數學公式,IE客戶端還需要安裝MathPlayer插件,這增加了用戶的不便。因此,皮爾斯學院David Lippman在ASCIIMathML轉換方法基礎上,開發了ASCIIMath Image Fallback轉換程序,該轉換程序自動判斷客戶端瀏覽器是否支持MathML,若支持,則返回MathML表現標記;若不支持,則返回該公式的GIF圖像(遠程調用互聯網上的cgi程序生成圖像)。另外,作者也提供了ASCIIMathTeXImg轉換,直接由TeX指令生成GIF圖像,而無論用戶使用的瀏覽器是否支持MathML。
在ASCIIMathML網站的最新消息是推薦一個新的轉換程序MathJax,它是一個開源的JavaScript顯示引擎,能夠在所有當代瀏覽器上顯示漂亮的數學公式,同時支持Tex和MathML表示。
上面的方法需要用戶在本地保留js文件,而有些網站將處理程序放置在服務器上,你只需在頁面上傳遞公式的Tex表達,就會返回公式的圖像,其實就是上述ASCIIMathTeXImg的服務器版本。我知道的是網站http://www.codecogs.com的服務,例如你想在網頁上顯示a2+b2 的平方根,你只需在網頁所在位置輸入以下html代碼:
1 |
想使用起來更簡單,可用點js代碼,具體過程可參考在博客里輕松使用LaTeX數學公式,不再贅述。
從上面的內容可以知道,ASCIIMathML不是個好選擇,在Firefox顯示正常的公式在IE中只能顯示源ASCII字符,使用http://www.codecogs.com無需在客戶機下載js文件應該最快,但有點受制于人,萬一這個網站服務不正常,那么我的網站上的所有公式圖片都會顯示不出來。
考慮到國內IE用戶占絕大多數,因此決定采用ASCIIMath Image Fallback轉換程序的方法,但采用的是更漂亮的MathJax。你只需在網頁和之間添加js的地址即可:
1 | < script type = "text/javascript" src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" ></ script > |
由上面代碼可知我們是通過CDN(distributed network service)安裝這個js的,這也是推薦的方法,CDN可以自動從你的主機附近最快、最近的服務器上下載js文件,而且會自動升級。當然你也可以將MathJax下載到本地服務器上。然后在網頁任意位置書寫TeX指令描述的數學公式,注意:如果要讓公式單獨占一行,需用
但是手工書寫Tex公式還是非常難的,我使用的是大名鼎鼎的MathType,如下圖進行設置,就可以復制MathType的公式并粘貼為Tex格式。
MathType轉換設置,使得公式粘貼后自動變為Tex格式
如果不使用桌面程序,你也可以使用在線的Tex公式編輯器,比方說http://www.codecogs.com/latex/eqneditor.php。