如何使用LaTeX讓自己不亂?

雖然說LaTeX聲稱排版容易,只關注內容,可是混合著源代碼的結構很難讓我只關注內容,最後看得眼睛疼,找什麼都找不到。


直接的辦法是應用 TexShop 或 TexWork 之類的編輯器:代碼窗口在屏幕左邊,PDF 預覽器在屏幕右邊。寫作和修改都在 PDF 文檔上查找,再跳回源文件修改,並不容易混亂。

但其實,LaTeX 是用來排版的,不是用來寫作的。
一個解決方案是:除了數學公式,別用 LeTeX 句法寫作,改用 Markdown 或 Markdown 的擴展。

如果不是專業排版師(有這個職業麼?),只想關注內容,儘量少關注格式、宏包、排版,我所知道最合理的方式是使用 pandoc 寫作,然後輸出 PDF(中間也可以轉成 tex 文檔調試)。

Pandoc 的作者是伯克利哲學系的John MacFarlane,這個工具能在數十種格式之間轉換。Pandoc 主頁那個很誇張的圖就展示這種轉換關係。所以,我們可以選擇最簡單的格式來寫作,比如 markdown,然後轉化成我們想要輸出的結果,比如 tex,甚至直接轉成 PDF 文檔或Beamer 文檔。

Pandoc 依然在進化中,就這一年版本更進的思路來看,最終是想讓用戶直接跳過tex這一步,一步轉化成 PDF 文檔。現在短文檔(筆記、作業、講義等)基本可以直接轉化,如果要實現更複雜的功能(比如參考文獻的文檔內跳躍鏈接),轉換成 tex 文檔之後也就是再按個按鈕的工作量。與 Pandoc 相關的生態也發育良好,好些編輯器只需簡單配置,就能馬上上手。

Pandoc 提供了加強版的 markdown 語法,所以要寫帶有圖表、引用、數學公式、參考文獻、目錄的文章時,直接用 pandoc 寫作更方便,而且不用考慮代碼摺疊,不用考慮拆成十幾塊短文檔。

這是一個 pandoc 的 markdown 語法中文翻譯,不妨花幾分鐘閱讀:Pandoc』s Markdown 語法中文翻譯。

使用 pandoc,寫作和輸出可以分兩步:

1. 寫作文檔。例如,這是 pandoc 的整個使用說明,用 pandoc 語法寫好:http://johnmacfarlane.net/pandoc/demo/README。可以看到,整個文檔的格式非常簡單,我們直接關注內容。

2. 輸出文檔。在終端輸入相應的轉化命令,得到上面那個文檔的pdf版本:http://johnmacfarlane.net/pandoc/demo/example14.pdf。可以看到,外部超鏈接、內部鏈接、目錄、代碼塊格式、頁眉、腳註、版本號、表格等等一應俱全。

評論中 @張蘇 問到編輯器,我之前用Sublime Text 2。但從2014年6月21日開始,我改用 RStudio 作爲編輯器。最新版 RStudio 引入 R Markdown V2,免去在終端輸入 Pandoc 命令。其實,由於終端可以記住之前執行的命令,每次轉換文檔並不繁瑣,只需調出上次的命令,但 R Markdown V2 把「調出終端+回車鍵」兩個步驟簡化爲一個步驟,並簡化了 HTML 和 PDF 輸出的一些設定,還是提高了效率。

簡而言之,現在我們可在 RStudio 編輯器中用 Pandoc 寫作文檔,按一個轉化鍵,輸出 HTML、PDF 或 Word 文檔,並保證豐富的文檔元素:腳註、超鏈接、引用、目錄等。RStudio 的缺點是 PDF 預覽器還不太好用,希望之後的版本能有改進。

初次使用 RStudio 寫作可按以下步驟:

1. 保證電腦上裝有 Tex 套件。Mac 用戶可在MacTeX - TeX Users Group下載一整個
MacTex 套裝(大約2G多)。(Pandoc 作者 John Macfarlane 本來建議安裝 BasicTex(64M),在需要各類 package 時,在終端用`tlmgr`命令下載。不建議這種做法,因爲 BasicTex 實在太簡單,總需要自行安裝許多packages,同時 tlmgr 命令也不是時時都可用的:每當TeX發行版升級時,舊版本會被凍結,tlmgr 命令也沒辦法下載新的 package。)

2. 保證電腦裝有R 3.0以上版本。下載地址:The Comprehensive R Archive Network(小於100M)。

3. 下載安裝最新的 RStudio,地址:Download RStudio。

4. 打開 RStudio,點擊 File--〉New File--〉R Markdown,會彈出一個簡單的 R Markdown 文檔,再按 Knit PDF 就可以經由 TeX 引擎生成相應的 PDF 了。(中文用戶在執行 RStudio 自帶的 R Markdown 文檔時,日期date那行可能會顯示中文,例如「2014年6月21日」,整行刪掉或改成英文日期,就可以順利執行了。)

===

如果熟悉LaTeX語法,可以很快上手。下載pandoc,在Github上找一份LaTeX模板,修改一下,開始用pandoc寫作就可以了。我現在寫筆記、上課的幻燈片、作業、作業答案都是用pandoc寫後輸出pdf文檔,熟練後比用LaTeX寫快許多。

中文世界裡有兩份對pandoc較好的介紹:

1. Markdown寫作進階:Pandoc入門淺談 ← 陽志平的個人網站::技術
2. 黑魔法利器pandoc

對初學者,兩個歷史學家給出了文科生使用 pandoc 寫作文檔的指南:

1. Sustainable Authorship in Plain Text using Pandoc and Markdown


立即想到的幾個建議:

選擇有摺疊功能 (folding) 的編輯軟體,把無關內容隱藏。大項目分多個文件,主文件只管結構,各章節內容及複雜作圖分別另立文件,由 input 和 include 導入。

網上下載或問別人借的模版不要直接用。見過手動加粗居中來做章節標題的,見過希臘字母用英文字母 define 的,把 LaTeX 當 Word 用,不亂才怪。

養成良好的換行 (不是分段) 、製表、空格和縮進習慣,像編程一樣。長公式不要混在文本中間。隨手加標籤,標籤名有體系可循。編輯時善用搜索功能定位。


使用文檔結構樹
使用include
多用注釋
推薦 TeXpen http://sf.net/p/texpen


一些個人建議:

  1. 選取好的發行版並使用 IDE,比如 TeX Live + TeXstudio,勤更新。文本編輯器能給的支持太少了,根本不能應付大型文檔。TeXstudio 這種 IDE 有代碼摺疊,語法句法(不只是拼寫)檢查、inline 預覽、代碼和PDF間跳轉等重要功能。

  2. 下決心用 LaTeX 了,就不要再使用 LyX、Pandoc 啥的了。那些都是隔靴搔癢,和你用 LaTeX 的初衷相違背,排版強迫症發作起來無藥可救。
  3. 處理中文,請使用 XeLaTeX 引擎和 xeCJK 包,不要碰 CTeX 及古老的 CJK 方案。
  4. 善於用 include 切分文檔。
  5. 功能相近的包,選取未停止維護、與引擎兼容且最廣受好評的;功能非常豐富的包,如繪圖包等,學習最先進的。
  6. 把 amsmath 包的官方文檔啃幾遍,有問題上 stackexchange 的 TeX 版找方案。能排公式和排對公式之間的區別是很大的。比如函數該用內置的帶的版本(cos vs cos),絕對值符號究竟是哪個,dfrac 和 frac 的區別等等,有的出版社都不知道。
  7. 學會換行和縮進,usepackage 可以以字典序排列;包內設置,縮進後字典序排列。例如:

    documentclass[a4paper]{article}

    usepackage{amsmath}
    usepackage{fontspec}
    setmainfont{Times New Roman}
    setsansfont{Arial}
    ...
    usepackage{tikz}
    usetikzlibrary{arrows}
    usepackage[indentfirst]{xeCJK}
    setCJKmainfont[BoldFont={SimHei}]{SimSun}
    setCJKsansfont{KaiTi}

    egin{document}
    ...
    end{document}

  8. 遵循最小手動配置原則,盡量不自行定義命令、變數等。杜絕手動幾何調整。
  9. 多看文檔(texdoc 調用)和TeX - LaTeX Stack Exchange。

包推薦:

  • biber 代替 bibtex
  • polyglossia 代替 babel
  • xindy 代替 makeindex
  • 畫圖用 TikZ + Asymptote 分工,代替 MetaPost、PSTricks 和 xfig等等其他所有繪圖包。

其他的推薦想到後會添加到這裡。


說說我的建議:

0. 選一個用得順手的編輯器。語法高亮和代碼塊摺疊應該是兩個必備功能。
1. 按章節劃分文件,在主文件中引入。這樣做的好處有: a) 結構清晰。b) 使用svn做版本控制,多人同時編輯的時候可以避免conflict. c) 更換模板時保持不同版本時只需維護一份正文內容。
2. 需要做特殊處理的地方,盡量不把複雜命令串寫在正文中,而是定義成 newcommand. 這樣源代碼更易讀,特別是在表格中包含這些自定義命令的時候。
3. 每個section和subsection都應該有一行注釋,說明此處要說的是什麼。個人習慣每個(sub)section都是label+注釋。
4. 在給段落、表格、圖片加標籤以便引用的時候,應該有自己統一的風格以便自己區分。個人的習慣是加前綴sec:, tab:, fig:.
5. 在有別人參與修改的時候,應該自定義一些 todo, add, delete, mark等命令。同時應該為這些命令設置一個或幾個trigger. 比如設置一個final_print,當這個trigger為true的時候,所有標為delete的段落不會顯示,方便迅速預覽改動效果。
6. 寫作初期不要為浮動元素添加太多的位置限制。這些可以最後微調。
7. 多添加註釋,特別是對於不常用的宏包和自定義的命令。
8. 不要亂用硬性的命令,比如vspace. 因為很有可能當你做了一些改動以後,某處距離就不是你上次看到的那樣。個人建議只在內容已經完全確定,最後排版微調階段使用這些距離控制命令。


GK下載_電子書_pdf_圖片
DQDG下載_電子書_pdf_圖片

蛋疼的時候弄過的兩本書,
用 XeTeX 生成 ……

其中某個的入口文件

% 講導言區內容移動到不同的文件中
% 樣式相關
input{Styles/Default}
% 調用常用功能的支持
input{Functions/Bases} % 基本
input{Functions/Fonts} % 字體
input{Functions/Graphs} % 插圖與表格
input{Functions/Draws} % 圖形繪製
input{Functions/Notes} % 參考文獻,注釋相關
input{Functions/Maths} % 數學公式
input{Functions/Codes} % 插入代碼

% includeonly{Contents/2_Chap_08} % 單一章節生成和排版調試

egin{document}

% 封面
include{Contents/0_Cover}
% 前言(摘要)、目錄
include{Contents/1_Intro}
% 各章節
include{Contents/2_Chap_01}
include{Contents/2_Chap_02}
include{Contents/2_Chap_03}
include{Contents/2_Chap_04}
include{Contents/2_Chap_05}
include{Contents/2_Chap_06}
include{Contents/2_Chap_07}
include{Contents/2_Chap_08}
include{Contents/2_Chap_09}
include{Contents/2_Chap_10}
include{Contents/2_Chap_11}
include{Contents/2_Chap_12}
include{Contents/2_Chap_13}
include{Contents/2_Chap_14}
include{Contents/2_Chap_15}
include{Contents/2_Chap_16}
include{Contents/2_Chap_17}
% 附錄

egin{appendices}

input{Styles/Appendix}

include{Contents/3_End_A}
include{Contents/3_End_B}
include{Contents/3_End_C}
include{Contents/3_End_D}
include{Contents/3_End_E}
end{appendices}

end{document}

文檔結構

總之就是把 內容和樣式設置 分離就好。


說一下我的方案吧,我用的是Ubuntu

筆記/Blog都是用vim+vimwiki寫的markdown格式(感謝vimwiki新近支持markdown格式), Blog的話在vim里用wordpress插件直接發布,markdown里幾乎可以隨意內嵌latex語法,wordpress有很多插件可以支持。筆記的話通過pandoc把markdown轉成latex, 再用pdflatex轉成pdf。

我覺得關鍵是結合markdown簡潔直白的優勢在必要的時候能夠嵌入latex複雜豐富的功能


好多年不用office,基本寫東西全部用latex。關於看著亂的問題,其實看習慣就好了,我和老闆,朋友們的郵件里要討論數學問題基本就是latex格式,$$也容易提示這是數學符號了。

編譯器一般用kile或者texmaker,都是免費的,而且也有一些簡單的摺疊和顯示文章結構的功能。


做到心中有碼
然後就能體會到盲打一整頁然後一次編譯成功的快感


1. 使用 include
2. 寫注釋
3. 理清自己的思路


我用Vim來編輯LaTeX,插件自帶摺疊功能,可以很容易地看清楚文章結構。
也曾經用過類似於TeXworks之類的編輯器,似乎這類編輯器都帶有文檔結構表,應該也能很容易地看清文章架構。

如果文章較長、組織結構較複雜的話,可以考慮分成多個子文件來撰寫。

或許也可以嘗試下用所見即所得的編輯器如LyX來寫tex文檔,不過我個人不太喜歡這種方式。


先得選好模板,latex的優勢就在於,自動排版,有個模板定義,你就不用在格式費心了,重點放在內容上。


如果你熟悉emacs,則簡單的辦法是用emacs+org(emacs的擴展包)編輯文檔,然後再輸出為latex格式,這樣就不用記latex的命令了。


我的做法是將不同部分分成獨立文檔,在主文檔里include{}進來。


確實是這樣,我的體驗是:

1.有時候為了一個表格折騰1個小時

2.用glossary添加縮寫和符號設置什麼的很麻煩

3.碼字的時候還要debug...

4.快要交了突然編譯不過去

但是,問題就在於,用word更讓我發怒,每次用word恨不得去微軟門口堵那幫工程師罵一頓。

後來用latex寫多了就可以自如一些了,現在好多了,每次編譯之後看到文章也比較順心。

其實我建議如果不是以下幾種情況不必使用latex

1.論文或出版物超過150頁

2.寫書

3.強迫症患者


我使用Mybase將Latex的章節目錄分別管理;然後統一編譯


習慣問題。看得多了,代碼中也能看出公式來。
還是習慣問題。嚴格按照某種固定格式,該縮進就縮進,該高亮就高亮。嚴格限制屏幕中需要處理的信息量,該分章節就分章節。這樣,自然就顯得整潔,自然有條理。人的瞬時記憶是有限的,對於固定模式更高效,一次處理少量的數據也更快一些。

如果你不是必須用latex,換工具。如果你只是投稿,可以先把文字編輯好,再來用latex整理。

如果你堅持使用latex,就像整理書桌一樣整理自己的文字。按照自己的想法去做想做的事,不要被工具所左右。當然,駕馭一個工具,必然有一定的學習曲線,但一旦學成,它就成了你的習慣。

另外,平時寫文檔,我也推薦pandoc和markdown,既可發布pdf,也可發布網頁。現在一些論壇和博客系統(如jekyll)都是支持markdown的。我自己就是用markdown記筆記,然後發到用github建的jekyll博客上。


Texlive + TexStudio 能很好的解決你的問題.
剛開始我也很亂.但是後來,寫多了就好了.


推薦閱讀:

學術論文寫作有哪些經驗心得?
如何有效在知網尋找屬於自己課題的文獻綜述?
論文寫不下去時咋辦?
怎麼降低論文的重複率?
研究生學妹突然要改論文方向跟我一樣,要用我的數據,我不想給,但是她的導師在學校很牛逼,怕得罪他怎麼辦?

TAG:排版 | LaTeX | 論文寫作 |