1. 程式人生 > >Linux 桌面玩家指南:12. 優秀的文字化編輯思想大碰撞(Markdown、LaTeX、MathJax)

Linux 桌面玩家指南:12. 優秀的文字化編輯思想大碰撞(Markdown、LaTeX、MathJax)

特別說明:要在我的隨筆後寫評論的小夥伴們請注意了,我的部落格開啟了 MathJax 數學公式支援,MathJax 使用$標記數學公式的開始和結束。如果某條評論中出現了兩個$,MathJax 會將兩個$之間的內容按照數學公式進行排版,從而導致評論區格式混亂。如果大家的評論中用到了$,但是又不是為了使用數學公式,就請使用\$轉義一下,謝謝。

想從頭閱讀該系列嗎?下面是傳送門:

前言

這樣一個標題可能不太準確,因為確實無法準確地解釋什麼叫“文字化編輯思想”。其實我這篇隨筆主要是想探討 Markdown、LaTeX、MathJax,有興趣的朋友可以繼續往下看,同時別忘記了順手點個贊。

先回憶一下我們平時用什麼工具記筆記,最簡單的可能直接上記事本,但是稍微需要點格式支援的,記事本的功能就不夠用了,這時應該至少會用一個類似 Word 的“所見即所得”的視覺化編輯器。很多時候我們要記錄和分享的不僅僅只是文字,它還包含有各種各樣的格式,比如字型、字號、顏色、標題、列表等等。這個格式可以讓我們很容易地分辨筆記中的大綱和細節,也很容易突出顯示需要強調的內容,便於我們閱讀和理解,必要的時候,還可以在筆記中插入圖片。“所見即所得”編輯器提供的編輯方法確實是最樸素的編輯思想:當你想要改變某些文字的樣式時,你只需要選中它,然後在各種選單、對話方塊裡設定它的格式即可。這種排版很美觀、樣式很豐富的文章,可以稱之為“富文字”。

如果進行更深層次的思考,就會發現“富文字”存在很多缺點,特別是對於我們這些程式設計師、理工男來說更是這樣。下面略舉幾例:

  • “富文字”編輯起來太慢了,寫文章時,即要考慮文章內容,又要考慮文章格式,寫幾段字就要點半天滑鼠;
  • “富文字”需要專業的編輯器來編輯和閱讀,如果沒有編輯器,或者編輯器不相容,那只有欲哭無淚了;
  • “富文字”往往讓形式取代邏輯,文章可能從外觀上看各級標題的文字大小、縮排都很正確,但是邏輯上無法指定層級關係;
  • “富文字”中的格式資訊太冗餘了,淹沒了文章的內容;
  • “富文字”對計算機不友好,儲存格式不透明不說,也讓基於文字行比較的工具(如 diff 之類)無用武之地。

所以,優秀的思想應該是這樣的:

  • 文章就應該儲存為純文字的格式,用任何工具都可以閱讀和編輯;
  • 該純文字的內容即要適合人類閱讀,也要計算機容易理解;
  • 能正確指定文章各部分的邏輯結構;
  • 內容和顯示分離,作者只用考慮文章的內容和邏輯結構,而文章怎麼顯示得好看是專業的人和工具的事。

這就是我標題中說的“文字化編輯思想”。這種思想在計算機領域由來已久,並逐漸形成一種哲學。比如網際網路上廣泛使用的 HTML、XML 等,就是把資訊儲存為純文字,用任何工具都可以閱讀和編輯,並且能正確地指定內容的邏輯結構,而瀏覽器和 CSS 則控制文章如何顯示。但是,HTML 標籤還是太多了,如果沒有瀏覽器,完全靠人工腦補閱讀起來還是太困難了。於是,就誕生了 Markdown。

在文字編輯領域還有另外一個難題,那就是數學公式(或者其它類似數學公式的東西,比如樂譜),它們顯示起來是二維的,而且其中使用的很多符號標準鍵盤根本無法輸入,使用的字型和正文也不一樣。好在 Unix/Linux 世界中,它們有一個比較好的解決方法,那就是 LaTeX。當然,也有很多視覺化的編輯器提供數學公式編輯的功能,比如 Word 的公式編輯器,比如 TexMacs。但是正如前文所述,從優秀的“文字化編輯思想”來思考,最好的依然是 LaTeX,因為使用 LaTeX 就是使用純文字的方式輸入數學公式,輸入速度快,人和計算機都容易理解。LaTeX 的思想影響廣泛,很多編輯器都支援以 LaTeX 語法輸入數學公式。要在網頁上顯示數學公式,則非 MathJax 莫屬了,它是一個 JavaScript 庫,可以識別網頁中的 LaTeX 格式的數學公式並將其完美顯示出來。部落格園的數學公式支援用的就是這個。

Markdown 的特點和工具

Markdown 的宗旨就是“易讀易寫”,所以用 Markdown 語法寫的文件,以純文字的格式直接閱讀也是非常方便的。如果對外觀的要求非常高,就可以通過相應的工具將 Markdown 文件轉化成 HTML 或者 PDF。Markdown 的語法非常簡單,一般情況下一個多小時就學會了。目前,我在部落格園中發部落格基本上就是使用部落格園的 Markdown 編輯器了。部落格園使用和 Github 完全一樣的 Markdown 語法,在這裡可以閱讀它的完整介紹:GitHub Flavored Markdown Spec。Markdown 用起來很舒服,除了上傳圖片,基本上不用動滑鼠,而且近期已經有好幾個人表揚我的部落格排版比較舒服了。

在 Linux 桌面系統中,我使用 ReText 編輯 Markdown 文件。在 Ubuntu 中只需要sudo apt-get install retext即可以安裝該軟體。另外還有一些比較出名的 Markdown 編輯器,比如 reMarkable 或者 Typora,但是這兩款編輯器 Ubuntu 的官方軟體倉庫中沒有,需要自己去下載安裝,所以我就不用了。另外就是 Atom 編輯器也支援 Markdown,但是我試用以後覺得它的介面不好看,所以也不用。我覺得 ReText 就不錯了,其介面如下:

很顯然,這個預覽的結果並不漂亮,也和我部落格園中的樣式完全不一樣。這是因為我並沒有為我的預覽功能指定 CSS 樣式表。前面說過,文字化編輯思想就是內容和顯示分離,寫作的時候,只需要考慮內容就可以了,而顯示效果,可以由 CSS 樣式表控制。如果我想讓預覽的效果和我的部落格中一樣,只需要把我部落格中的 CSS 扒下來就可以了。同理,如果看到有哪個網站的文章顯示效果比較好看,把它的 CSS 樣式扒下來即可。另外,從上圖的預覽功能可以看到,現在最新版的 ReText 可以顯示一定的數學公式,但是對行內的數學公式沒有顯示,那是因為我們沒有為 ReText 指定 MathJax 數學公式擴充套件。點選 ReText 的 "編輯"->"個人偏好" 選單,在彈出的對話方塊裡面可以設定我們使用的 CSS 樣式表和 MathJax 擴充套件,如下圖:

再重新啟動 ReText,其預覽效果就是這樣的了:

MathJax 支援 LaTeX 語法,至於 LaTeX 編輯數學公式的語法,我這裡再為大家送上一份資料:《一份不太短的LaTeX 2e介紹》。

數學公式和 LaTex

在我上一節中,我提到了 MathJax,我的部落格中和 ReText 中的數學公式支援就靠它了。MathJax 支援 LaTex 的語法,所以平時寫筆記,使用 Markdown 和 Mathjax 就夠了。但是真正需要寫科技論文的時候,就不得不上 LaTex 了。在這一節裡,我再來談談 LaTeX。

在很多人心中,LaTeX 是一個很專業的排版系統,同時也是一個很複雜的系統。說到專業,確實很多科技論文都是用 LaTeX 寫作,而且很多知名的雜誌社只接受 LaTeX 格式的投稿。使用 LaTeX 排版得到的效果那是超級贊,特別是對科技論文中充斥的數學公式而言。說到複雜,不僅是因為 LaTeX 排版語言命令繁多,更因為它數之不盡的巨集包,學習成本真的是相當相當相當的高。

對於一套 LaTeX 排版系統,它究竟包含哪些東西呢?我認為它主要可以分成這樣幾個部分:

  • 一個排版引擎,TeX 或 pdfTeX 或 XeTeX;
  • 一系列的字型;
  • 一系列的巨集包;
  • 一些工具,比如用來檢視各種排版引擎輸出的排版結果,或者在 dvi、ps、pdf 等格式之間的轉換。

而對於 LaTeX 排版系統的複雜性,我認為主要是由於歷史原因引起的,理由如下:

  • 最早的由 Knuth 教授寫的 TeX 引擎不支援 UTF-8 編碼的輸入檔案,所以要讓它支援中文實在是太難了;
  • 最早的 TeX 系統自帶一套字型,要擴充套件它就得擴充套件相應領域的字型,比如 LaTeX 自帶豐富的數學字型,要把字型安裝到 TeX 系統中是一件非常複雜的事情;
  • 大量的第三方巨集包,安裝和學習都非常困難;
  • 都什麼年代了,誰還用 dvi 格式和 ps 格式啊,用 pdf 多方便啊。

對於這些歷史原因引起的複雜性,現在早就解決了,只是很多書籍沒有寫清楚而已。我認為現在用 LaTeX 其實很方便的,理由如下:

  • Knuth 教授的 Tex 引擎用來瞻仰即可,實際工作中使用 XeTeX 引擎,完美支援 Unicode 字符集和 UTF-8 編碼,中文再也不是問題;
  • 字型神馬的,Knuth 教授的 METAFONT 早過時了,現在誰還不用 TrueType 啊?好的字型當然少不了像 Microsoft、Adobe、Apple 這些既有錢又有品味的公司出品了;
  • XeTeX 引擎可以直接使用作業系統中安裝的字型,再也不用考慮把字型安裝到 TeX 系統中了;
  • XeTeX 引擎直接輸出 pdf 格式的檔案;
  • 排版也可以有 IDE 工具,比如 TeXWorks 或 TexStudio;
  • 至於巨集包太多這個問題,我們可以用現成的發行版嘛,比如 texlive 套裝。

下面開始實戰。我是在 Ubuntu 系統下使用 texlive,使用sudo aptitude search texlive命令,可以看到大量和 texlive 有關的包。考慮到我們需要使用中文,所以需要同時安裝 texlive-lang-cjk 和 texlive-xetex。前面分析過,XeTeX 引擎和 XeLaTeX 引擎是支援Unicode 字符集和 UTF-8 編碼的基礎,而 texlive-lang-cjk 提供中文字型和中文排版的支援。和四年前相比,texlive 更加成熟,以上三個包安裝完之後,不需要借用 Windows 的字型,也不需要修改任何配置檔案,真正做到了開箱即用。這樣安裝 texlive:

sudo aptitude install texlive texlive-lang-cjk texlive-xetex

以前我使用 TeXWorks,現在在朋友的推薦下使用 TexStudio。使用以下命令安裝 TexStudio:

sudo aptitude install texstudio

在使用 TexStudio 的時候,先進入它的設定介面,將引擎更改為 XeLaTeX,如下圖:

然後寫一段測試文字,Build 一下,然後預覽,就可以看到排版效果了:

對於寫寫中文文件,使用 ctex 巨集包就足夠了,並不是很複雜。LaTeX 還有一些更加複雜的功能,比如製作幻燈片啊、繪圖啊什麼的,都有相應的巨集包可以使用,而且安裝 texlive 的時候,都安裝了非常詳細的幫助文件,只需要開啟/usr/share/texlive/doc.html這個檔案,就可以看到所有巨集包和幫助文件的列表,我前面分享的《一份不太短的LaTeX介紹》裡面有,經典的《Tex by Topic》裡面也有,如下圖:

看到這個一公里長的幫助文件列表,你有什麼感想呢?

求打賞

我對這次寫的這個系列要求是非常高的:首先內容要有意義、夠充實,資訊量要足夠豐富;其次是每一個知識點要講透徹,不能模稜兩可含糊不清;最後是包含豐富的截圖,讓那些不想裝 Linux 系統的朋友們也可以領略到 Linux 桌面的風采。如果我的努力得到大家的認可,可以掃下面的二維碼打賞一下:

版權申明

該隨筆由京山遊俠在2018年11月09日釋出於部落格園,引用請註明出處,轉載或出版請聯絡博主。QQ郵箱:[email protected]