回顧我學習和使用 LaTeX 的經歷,有幾個時間節點讓我感觸頗深:

  • 初次接觸 LaTeX 時,感受到它對樣式強大的控制能力和對數學公式的排版能力,心中對 Microsoft Word 頗有憤懣。

  • 熟練使用 LaTeX 后,困于 LaTeX 中過于強大的樣式控制能力帶來的復雜性與筆記等需要速記的場景之間難以調和的矛盾。

  • 初次接觸 Markdown 時,感受到它在內容和樣式之間取得了比較好的平衡。它的樣式可以用 CSS 來控制。

  • 折騰 Sphinx、Pandoc 等工具嘗試將 Markdown 文稿轉換為 LaTeX 文稿時,對這些工具的轉換效果和細節問題感到崩潰。

在這之后很多年里,我一直期待能有一個工具,能夠更好地平衡 Markdown 的便捷性和 LaTeX 對樣式的控制能力和對數學公式的排版能力。前幾天,我發現了 markdown 宏包。我認為已找到了這樣夢想中的工具。并且,我認為在熟練使用它之后,可以更好地實現 LaTeX 設計之初的愿望:內容與樣式分離

本文又名:「你喜愛的 Markdown 寫作,現更以 LaTeX 呈現」。
——來自 Harry Chen 的 Apple 風格標題。

介紹

markdown 宏包是 Vít Novotny 維護的一個宏包。它的核心機制使用 Lua 編寫,同時提供了針對 Plain TeX/LaTeX/ConTeXt 等格式的接口。由于現代 TeX 發行版(TeX Live、MiKTeX 等)通常都包含了 Lua 解釋器,因而使用 markdown 宏包通常無需額外安裝其他工具,只需打開 --shell-escape 標記即可(LuaLaTeX 除外)。相對 Sphinx、Pandoc 等第三方工具以及之前社區實現的其他類似功能的宏包,這算是一個飛躍式的進步。

markdown 的環境和 \markdownInput 的命令。前者用于在 LaTeX 文稿中直接書寫 Markdown 標記內容,后者用于從 Markdown 文件中讀入內容。markdown 宏包會在遇到 markdown 環境或者 \markdownInput 命令時,將相應內容交由 Lua 解釋器處理,從而將內容翻譯成一堆預定義好的 LaTeX 宏。由于這個步驟需要調用 Lua 解釋器,故而需要打開 --shell-escape 標記;當然,如果使用 LuaLaTeX 的話,因為直接能交給 Lua 解釋器處理,故而不需要打開 --shell-escape。而后,TeX 引擎會讀入這些翻譯得到的 LaTeX 宏,進行正常的 LaTeX 處理。

對于常見的 Markdown 功能,markdown 宏包都預設了 LaTeX 宏相應的實現。例如 \markdownRendererImage 是用來渲染圖片的宏,當解析到 ![imagelabel](imagepath "image caption") 時,Lua 解釋器就會使用這個宏來拼接得到翻譯結果:\markdownRendererImage{imagelabel}{imagepath}{imagepath}{image caption}。而后,根據 \markdownRendererImage 的定義,TeX 引擎會在后續步驟展開這個宏,再去排版得到相應的結果。


具體內容看看這里吧:

https://liam.page/2020/03/30/writing-manuscript-in-Markdown-and-typesetting-with-LaTeX/