如何使用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
一些個人建議:
- 選取好的發行版並使用 IDE,比如 TeX Live + TeXstudio,勤更新。文本編輯器能給的支持太少了,根本不能應付大型文檔。TeXstudio 這種 IDE 有代碼摺疊,語法句法(不只是拼寫)檢查、inline 預覽、代碼和PDF間跳轉等重要功能。
- 下決心用 LaTeX 了,就不要再使用 LyX、Pandoc 啥的了。那些都是隔靴搔癢,和你用 LaTeX 的初衷相違背,排版強迫症發作起來無藥可救。
- 處理中文,請使用 XeLaTeX 引擎和 xeCJK 包,不要碰 CTeX 及古老的 CJK 方案。
- 善於用 include 切分文檔。
- 功能相近的包,選取未停止維護、與引擎兼容且最廣受好評的;功能非常豐富的包,如繪圖包等,學習最先進的。
- 把 amsmath 包的官方文檔啃幾遍,有問題上 stackexchange 的 TeX 版找方案。能排公式和排對公式之間的區別是很大的。比如函數該用內置的帶的版本(cos vs cos),絕對值符號究竟是哪個,dfrac 和 frac 的區別等等,有的出版社都不知道。
- 學會換行和縮進,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}
- 遵循最小手動配置原則,盡量不自行定義命令、變數等。杜絕手動幾何調整。
- 多看文檔(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 能很好的解決你的問題.
剛開始我也很亂.但是後來,寫多了就好了.
推薦閱讀:
※學術論文寫作有哪些經驗心得?
※如何有效在知網尋找屬於自己課題的文獻綜述?
※論文寫不下去時咋辦?
※怎麼降低論文的重複率?
※研究生學妹突然要改論文方向跟我一樣,要用我的數據,我不想給,但是她的導師在學校很牛逼,怕得罪他怎麼辦?