用 TeX 編輯論文時,如何選擇合適的 Packages ?
我安裝的 MiKTeX 目錄下的 packages 貌似有兩千多個,該如何選擇合適的 packages 呢?雖然每個 packages 壓縮包內都有相應的 document 和 source ,但,有些時候編輯文章時,突然有了某一個需求,那總不能那麼多 package 一個個的看吧?各位都是如何應對這樣的問題的?
@李阿玲 是出來賣萌的,你們不要理她。
題主之意,應該是「如何根據需求,找到合適的宏包」,而不是「怎麼根據宏包名字,找到說明文檔」。此外,其實 MiKTeX 也是有 texdoc 程序的,雖然設計得很怪異就是了。
題主這個問題,怎麼說呢……問題非常好,也非常有實際價值,但是確實不是那麼好回答。
1
LaTeX 的許多效果通過宏包來實現,而宏包的作者有千千萬萬,每個人的代碼風格都不一樣,而作者之間又缺少有效的溝通手段。這至少導致了以下幾個問題:
- 多個不同宏包實現了相同功能;
- 不同功能宏包之間存在兼容性問題。
此外,由於技術的進步,宏包的迭代不可避免地留下了許多當時很有用現在卻應該避免使用的陳舊宏包。因此對於用戶來說,選擇宏包也是另一個問題(選擇過時的技術意味著放棄了兼容性和一些功能)。以及,宏包名字是英文,中文用戶通常很難猜測某一個功能對應的宏包的名字。者從客觀上也加重了中文用戶選擇宏包的困難程度。
在 CTeX 論壇里,也曾有用戶提出過類似的問題。我記得當時 @劉海洋 前輩的回答大約是「沒有什麼好的辦法,只能靠經驗積累和不斷的搜索」。根據現實情況,確實如此。而且現實情況至今也沒有太大的改變,所以這篇回答就介紹一下一些搜索的技巧,和個人的一些經驗吧。
2
首先想到的,自然是 Google。
(求求你了,搞學術的人不要用百度好嗎,那搜索結果會讓你欲仙欲死……)我們先實際演練看看。比如你希望給 ableofcontents 輸出的目錄做些修改,在章節標題和頁碼之間弄一串虛線。
按照功能搜索,關鍵詞:LaTeX 目錄 虛線
我們發現 Google 很貼心地將 CTeX 論壇的結果放在了第一條,同時列出了在 CTeX 論壇里的類似結果。我們點進去看看。
第一條:
你心裡一定在想:「卧槽,這一堆亂碼一樣的 @ 符號是在做什麼」,而且仔細讀一讀發現,「嗯,好像這個人已經找到了畫虛線的方法,只不過效果不滿意」。於是你覺得和你的問題想關性不太大。不過你發現一個關鍵詞「dottedcontents」,dotted 是一個個點連起來形成虛線,contents 代表 table of contents,是目錄的意思。於是你雖然滿心羊駝,但是默默記住了這個關鍵詞。
關掉標籤頁,你繼續在 Google 的結果里查找線索。連續幾個帖子,都沒有找到有價值的信息,於是你不小心點進去了「bbs.ctex.org站內的其它相關信息」,你發現彈出了一個窗口,關鍵詞變成了「LaTeX 目錄 虛線 site:bbs.ctex.org」。你開始疑惑,後面這個 site 開頭的部分是在做什麼。略作思考你就明白了,site 是「站點」的意思,bbs.ctex.org 正是之前 CTeX 論壇的網址。往下一拉,搜索結果都是 CTeX 論壇里的內容,於是你猜想,原來加上 site: 就能在一個網站里搜索相關內容。
瀏覽過後,你發現你依然沒找到合適的信息。不過不要氣餒,我們至少找到了 dottedcontents 這個名詞。想來它就應該是對應的英文關鍵詞了。於是你在搜索引擎里搜索:LaTeX table of contents dottedcontents
看到這個搜索結果,你就開心了。你發現前四條搜索結果,都和 TeX 相關。這四條結果的域名里都有「TeX」的字樣。
你眼神掃過第四條結果,發現域名是 http://texdoc.net。TeX 指代什麼顯而易見,doc 的話,很可能是指代 Documentation。於是你默默地記下了這麼一件事情,這個網站大概是有很多和 TeX 相關的文檔的,這條搜索結果,大概是講了 titlesec, titleps 和 titletoc 這三個宏包的一篇文檔。
如果你是一個程序員,你對 StackExchange 一定不會陌生,這是一個非常優秀的問答站。你看到第三條結果的標題有「Making the dots in a TOC」的字樣,翻譯成中文正是「在目錄里打虛線」,於是你愉快地點進去了。
你發現 Gonzalo 的答案給出了代碼,同時給出了效果。你兩眼放光,我得到神奇寶貝了!
仔細看一看代碼,發現 Gonzalo 前輩引入了 titletoc 這個宏包。你覺得有點眼熟。剛才在 Google 的搜索結果里,好像就有它。於是你點開了結果中 http://TeXdoc.net 的那條鏈接,得到了一個 PDF 文檔。
在文檔的第 14 頁,你發現有這樣的內容:
這裡講解的正是 dottedcontents 這個命令。根據說明文檔的內容,以及 Gonzalo 前輩的講解,你很容易就能做出自己想要的效果了。
如果你有心,你大概會繼續做下面這些事情:
- Google 搜索關鍵詞:Google 搜索 指令
- Google 搜索關鍵詞:texdoc
- 在找到的文檔里繼續查看感興趣的內容
3
對於中文用戶來說,由於存在語言障礙,搜索結果通常都不那麼令人滿意。實際上大多數時候,我們面對搜索框,根本不知道應該搜索什麼。於是問題變成了,怎麼找到合適的搜索關鍵詞。
有經驗的搜索引擎使用者通常會告訴你,想要一次得到好的結果是困難的,但是逐步接近卻是容易的。對於中文 TeX 用戶來說,結合上面的例子,如果你想要搜索一個功能對應的宏包,一般可以概括成下面幾個步驟:
- 按照功能描述,以中文關鍵詞搜索;
- 瀏覽搜索結果,嘗試找出功能對應的正式名稱(學名);
- 以正式名稱為關鍵詞搜索,嘗試找到對應的宏包名字或者對應的英文關鍵詞(然後按照英文關鍵詞再嘗試檢索到對應宏包的名字);
- 使用 texdoc 在計算機本地查找宏包的說明文檔(即 @李阿玲 的答案)/或者在 texdoc.net 網站上找到宏包的說明文檔。
當然,找到合適的關鍵詞,最快的方法是提問。你可以加入一些 TeX 的 QQ 群,或者在 CTeX 論壇上提問。不過如果你希望儘快得到滿意的回答,你應該學會如何描述你的問題。關於 LaTeX 的提問的智慧,可以參考我之前的這篇文檔:https://att.liam0205.me/uploads/LaTeX_howtoask.pdf
4
是時候祭出大殺器了。
CTAN (Comprehensive TeX Archive Network) 是幹什麼的,各位從它的名字應該能看出來。一般來說,如果有作者寫了一個宏包,自覺還挺有價值,測試之後與常用宏包沒有發現衝突,就會考慮上傳到 CTAN 這個網站。CTAN 網站經過收集、整合、分類,給廣大 TeX 用戶提供了方便的檢索系統:CTAN: Search。具體的用法可以參見頁面當中的 Search Tips。
如果僅止於此,那麼 CTAN 也不能稱之為是大殺器。CTAN 好用的地方在於,它將宏包和工具按照功能,分門別類在了一個個 Topic 底下。
CTAN: Topics戳右側「Cloud」有驚喜。5
常見的宏包推薦。
首先是國外用戶寫的一篇文檔。
9 essential LaTeX packages everyone should use
Elegant LaTeX Team 有翻譯。推薦每個 LaTeX 用戶使用的 9 個宏包接下來……
中文支持。
- ctex - 封裝好的中文支持和版式調整工具,定義了許多方便的工具
- xeCJK - XeLaTeX 下的中文字體選擇和禁則、壓縮的處理
- fontspec - XeLaTeX 下的西文字體選擇
頁面布局類。
- geometry - 調整頁面大小、頁邊距等尺寸
- fancyhdr - 設計頁眉頁腳
- titlesec - 設計章節標題格式
- titletoc - 設計目錄格式
超鏈接和 PDF 的各種功能。
- hyperref - 超鏈接,PDF 書籤,PDF 表單,PDF 元信息……
- media9 - 插入 Flash、視頻等
圖表和浮動體。
- graphicx - 插圖
- xcolor - 顏色
- tikz - 繪圖
- booktabs - 三線表
- multirow - 列合併單元格(cell)
- makecell - 在單元格內手動換行
- longtable - 換頁表格
- tabu - 封裝了各種介面的表格宏包,製表強烈推薦
- threeparttable - 在表格中使用腳標,和 tabu 有衝突,補丁:https://gist.github.com/157a703e0ed8804e7696
- diagbox - 斜線表頭(作者: @劉海洋)
- float - 提供了 H 選項,禁止浮動體浮動(除非必要,不建議這麼干)
- placeins - 提供了 FloatBarrier 命令,限制浮動體浮動範圍
列表環境。
- enumitem - 修改列表環境的各種間距、label 樣式等的不二法門
其他一些工具。
- nag - 檢查你是否使用了過時的宏包和命令的宏包
- etoolbox - 主要是針對宏包和文檔類開發者,不過提供了一些對環境的鉤子,有時候很有用
- xpatch - 修補命令用的
- environ - 增強了 LaTeX 本來的
ewenvironment 的功能,解決了一些花括弧不匹配導致的問題
暫時想到這麼些,回頭再補充吧……
6
請給 @李阿玲 捐助,支持他的 TeX 事業……
(給他捐錢我就有肉吃了啊噗……)
支付寶:13641344123
(歡迎去電騷擾……)
這個問題其實不只對 TeX 存在,計算機領域很多地方都能遇到。如何選擇一個合適的 Python 3 的圖像處理庫?如何選擇一個合適的 JSON C++ 解析庫?如何選擇一個合適的瀏覽器標籤頁管理插件?如何選擇合適的文件名批量命名的軟體?如何挑選合適的支持 x、y、z 語言的代碼編輯器?有關 TeX 的問題在這類問題中,並不是最好回答的,因為 TeX 是小眾工具,也不是主要的生產工具,線上線下的資源和受到的關注都少。當然 TeX 的問題也不是最難回答的,因為 TeX 包組織清晰,來源單一,在 CTAN 上在線能找到的包、在 TeX Live 上預裝的包、在 MiKTeX 上預裝的包,都差不多是相同的,範圍明確。回到問題來,選擇宏包,這個問題一體兩面:一是「找」,找出可能解決問題的一些宏包;二是「挑」,從幾個備選方案中選取最合適的。先說找的問題。寫論文找工具,大概首先是求快。所以建議按下面這個順序來找:
一、翻查。如果頭腦里有個印象,某某書曾經寫過這個問題,過去的某代碼處理過這個問題,那就找出來翻查一下。
二、搜索。搜索關鍵字的選擇很大程度上能決定搜索的質量,這個需要點經驗。我的建議是:優先使用 TeX.sx 等站的站內搜索以及全網 Google;除了用中文,也用英語詞搜索;多換幾個搜索詞。三、索引。網上有一些 TeX 的帶分類的索引,指這類東西:- CTAN 的主題索引:CTAN: Topics
- The TeX Catalogue OnLine, Topic Index
- TeXdoc Online ? TeX and LaTeX Documentation
- TeX Frequently Asked Questions
- CTEX - 在線文檔(這個比較老了)
有一些特定專題內的文檔或網頁,指這類東西:
- CTAN: Package The Comprehensive LaTeX Symbol List.
- CTAN: Package voss-mathmode
- CTAN: Package epslatex
- CTAN: Package free-math-font-survey
- The LaTeX Font Catalogue
- The PracTeX Journal -- Tables in LaTeX2e: Packages and Methods
還有一些對宏包做綜述或選擇的書籍,如:
- The LaTeX Companion, 2nd Edition
- The LaTeX Graphics Companion, 2nd Edition
- LaTeX and Friends
- 中文:我的書,胡偉的書
- TeX - LaTeX Stack Exchange
- 論壇 - CTEX社區
- comp.text.tex
- CTAN: Packages
- The TeX Catalogue OnLine, Brief Ctan Edition
再說挑的問題。當然,要有的挑,先得按上面方法找到一些包。
挑的方法,無外乎看別人的總結(如果備選包是從專題索引中找到的),看手冊做比較,寫測試文檔做實驗之類的辦法。這些大家都能想到,找手冊的方式李阿玲已經舉得很清楚,不必多說。
挑的原則,則需要說兩句。
一、完成功能。這是最基本的。有時備選的宏包初看起來似乎能完成一項工作,試了試後來發現有問題解決不了,那就得換。比如說 tocloft 能改各種目錄格式,但卻不能把幾個目錄項合併寫在同一行,如果要這種效果,就得換 titletoc 或其他工具。
二、代碼易懂,使用方便。例如不使用任何宏包也能調節頁面大小、版心位置之類的參數,但如果使用 geometry 宏包,生活將變得輕鬆許多。
三、宏包兼容性。較長的文檔可能用到許多宏包,要盡量避免選用的宏包與其他包的功能衝突。如果確實有衝突,則保留更重要、更常用的包。例如,nath 包提供了數學公式輸入的一些有趣的語法糖,但它與整個 amsmath 衝突,那麼更大的可能是選擇更重要的 amsmath 而捨棄 nath。
四、文檔維護性。因為陳舊、發布方式局限、使用非自由的發布協議等問題,導致部分常見發行版並不包含這些包,那最好避免使用。例如 picins 包因為協議問題,不在 TeX Live 中收錄,就不如換成 picinpar、floatflt 等功能類似的包;又如隨 CCT 提供的 everb 包,目前僅在 CTeX 套裝中才有,就不如換成功能相似的 fancyvrb、mdframed 等包。
五、投稿系統。投稿的論文如果是以源代碼形式提交,就要考慮對方的系統。投稿系統的 TeX 發行版可能非常保守而不更新新版本,你使用的宏包及版本就要考慮接收方的系統。
.
.按照需要去找合適的包比如我自己的經歷,在引用參考文獻的時候發現只有數字而且都是和文字在一行內的,可是我可能需要(Author,2001)這樣的格式,也許需要是上標的樣式,那樣我就去百度去股溝,就發現了natbib這個包可以實現我需要的功能。
用一段時間你就會發現你自己需要的包就那麼幾個,可以自己做成一個自己合適的模板,每次打開的時候直接都有了。如果有的包本次不需要還可以注釋掉。懂的不多,班門弄斧。我也是進來學習滴。百度 + Google + StackOverflow
其實常用宏包不多,我個人常用的就這麼幾個(XeLaTeX): geometry, hyperref, xcolor, graphicx, caption, amsmath, amssymb, listings, indentfirst, tikz, xeCJK, xltxtra, enumitem, fancyhdr推薦閱讀:
※有沒有簡單的LaTeX多語言支持方案?
※解決類似問題,應該學VBA還是Latex?
※TeXworks中,為什麼不能設置成中文界面?
※LaTeX如何混合排版中文與日文?
※LaTeX畫矢量圖相關(字體、箭頭位置、分組)?
TAG:LaTeX |