標籤:

latex class與宏包的關係?


LaTeX裡面的class指的是document class(文檔類),宏包指的是package。一般情況下文檔類的文件擴展名是.cls,宏包的擴展名是.sty。

一般我們看LaTeX書初學,看到的三大件是article,book和report。不過,這三大類雖然是LaTeX不可動搖之基,但是不支持你敲漢字進去做排版的。在很長時間裡,有人是用包來做漢字輸出的事的,比如CJK包,xeCJK包和LuaTeX-ja。現在在網上依然能找到互相抄來抄去,流毒十餘年的CJK包排漢字的例子,用包來做漢字輸出,CJK早就不夠用了。

一般初學者,看 @劉海洋 的書的,會見到ctex文檔類,含:

  • ctexart
  • ctexbook
  • ctexbeamer
  • ctexrep

這對應著三大件以及beamer的中文化支持。

如果是日本,尤其是用pTeX系引擎的,可以用到下面的文檔類:

  • ujarticle/utarticle
  • ujbook/utbook
  • ujreport/utreport

這對應著日本本地化的橫向排版文檔類和縱向直行文檔類。

對於德語地區(當然英語也能用),還有KOMA-script可以選擇,可以用到下面的文檔類:

  • scrartcl
  • scrbook
  • scrreprt

剩下能夠常用的,比如memoir,ams的文檔類和beamer。一般情況下,LaTeX維護工作做的比較好的期刊或者出版社,也會有自己的文檔類,但是質量參差不齊。最近幾年,冠以各個大學名頭的各種畢業論文文檔類也比較多了,但是大多是非官方支持的,維護情況堪憂,多數情況下維護及使用起來會有坑。

在實現文檔類的時候,有些會把一些子功能做成一個簡單的package,方便維護。而另一方面,一些文檔類因為要做hook,可能要調用一些package。兩者的區別,在功能性上是有交集的,但是大方向上的,文檔類相當於圖書模板,包是功能上的小改。

常用的包,還是有一些的,比如:

  • graphicx
  • hyperref
  • xcolor
  • listings
  • amsmath
  • yhmath
  • tikz
  • fontspec
  • longtable

等等,每個人習慣用的包不太一樣,時間久了之後,基本上都會形成自己的使用習慣。而且,就實現上來說,有一些包的可替代性比較強。


文檔類與宏包的區別其實並沒有想像中的那麼大,兩者都是由LaTeX代碼構成的純文本文件,都能夠進行宏的定義並對最終生成的pdf文檔產生影響。一般情況下,一些宏定義的集合要被寫成文檔類還是宏包主要取決於這些宏定義是否依賴於某些具體的文檔類。

例如說,我需要使用LaTeX撰寫自己的畢業論文,我根據學校的要求做好了一個模板(就是一些LaTeX宏的定義的集合),這個模板只有在我撰寫畢業論文的時候才用得上,那麼它應該被寫成文檔類。但是如果說我在寫模板的時候要完成一項操作:把腳註的編號加上一個圓圈,這項操作的宏代碼一旦完成可以不依賴文檔類在以後的文檔撰寫工作中也能用得上,這種宏定義就可以被寫成宏包。

一般用戶撰寫中文文檔時,都會使用ctexart的文檔類。但是如果是期刊投稿,對方已經提供了模板文件,那麼顯然無法再使用這個文檔類來獲得中文支持,這個時候可以導入宏包ctex來輸入中文字元。兩種手段都能夠獲得中文支持,但是一個利用的是文檔類,一個利用的是宏包。

總結一下:類與宏包沒有太大的區別,一般模板文件都是類,而與具體類不相關的通用型代碼都會被寫成宏包。


推薦閱讀:

LaTeX 比 Office 差的地方的體現之一是 基於表格的簡歷、報告等么?
如何學慣用LaTeX做簡歷?
如何在 Microsoft Word 2013 裡面通過鍵盤輸入公式和希臘字母?
如何設置 enumerate 列表的編號對齊方式?

TAG:LaTeX | Class |