
1. 為什么排版工具值得花時間學很多人第一次接觸排版工具都是被逼的。導師甩過來一個模板說“按這個格式改”然后你打開一看滿屏的反斜杠和花括號頭都大了。但真正用進去之后會發(fā)現(xiàn)這類工具解決的是一個非常本質(zhì)的問題內(nèi)容與格式的分離。你寫的是文字排版是另一回事。用普通文字處理軟件你一邊寫一邊調(diào)字體、調(diào)行距、調(diào)縮進寫著寫著就忘了自己本來想說什么。而用標記語言的方式你只管寫內(nèi)容格式交給命令和模板去控制。這個思路一旦習慣效率提升是肉眼可見的。這篇文章面向的是剛上手或者用了一段時間但總覺得不順手的人。我會把日常寫作中最常用的命令操作拆開講清楚包括文檔結(jié)構(gòu)、數(shù)學公式、表格圖片、交叉引用、參考文獻這幾個核心模塊。每個命令不僅告訴你“怎么寫”還會解釋“為什么這么設(shè)計”以及我在實際使用中踩過的坑。不管你是寫論文、做報告、整理筆記還是給團隊寫技術(shù)文檔這套東西都能用得上。下面直接從最基礎(chǔ)的文檔骨架開始。2. 文檔骨架與中文排版的第一道坎2.1 文檔類選擇article、report還是book任何一份文檔都是從\documentclass開始的。這個命令決定了整個文檔的基礎(chǔ)排版規(guī)則。常見的選擇有這么幾種article適合短篇文檔、期刊論文、實驗報告。沒有章的概念只有節(jié)。report適合長篇報告、學位論文。有章的概念支持多級標題。book適合書籍。有章、部分、前后附錄等完整結(jié)構(gòu)。選哪個不是隨便定的。如果你用article寫學位論文寫到后面發(fā)現(xiàn)需要“章”這一級結(jié)構(gòu)再改文檔類會引發(fā)一堆連鎖問題。我的建議是一開始就按最終篇幅選。超過三十頁的內(nèi)容直接用report別猶豫。文檔類后面可以跟選項比如字號和紙張\documentclass[12pt, a4paper]{article}12pt是正文字號a4paper是紙張大小。不寫的話默認是10pt和信紙尺寸。國內(nèi)用A4居多建議顯式指定。2.2 中文支持從踩坑到穩(wěn)定方案中文排版是很多人遇到的第一個大坑。早期方案是CJK宏包配置繁瑣字體還得手動指定。現(xiàn)在主流方案是ctex宏包或者ctexart文檔類。最省事的做法是直接用ctexart\documentclass[UTF8]{ctexart}這樣中文支持、字體配置、段落縮進都幫你處理好了。如果必須用article那就加載ctex宏包\documentclass[UTF8]{article} \usepackage{ctex}注意編碼一定要用UTF-8。如果源文件是GBK編碼編譯時中文會變成亂碼而且報錯信息往往指向奇怪的地方排查起來很費時間。我遇到過一種情況在舊編輯器里寫的文檔換到新環(huán)境編譯中文全沒了。查了半天發(fā)現(xiàn)是文件編碼問題。所以養(yǎng)成習慣源文件統(tǒng)一UTF-8編輯器默認編碼也設(shè)成UTF-8。2.3 標題層級與文檔結(jié)構(gòu)命令文檔的骨架靠這幾個命令撐起來\section{一級標題} \subsection{二級標題} \subsubsection{三級標題}在report和book里還有\(zhòng)chapter{章標題}。這些命令會自動編號也會自動寫入目錄。有一個細節(jié)很多人不知道帶星號的版本不編號。比如\section*{致謝}這個標題不會出現(xiàn)在目錄里也不會有編號。致謝、前言、附錄說明這類內(nèi)容通常用帶星號的版本。另外\tableofcontents生成目錄\newpage強制換頁\appendix切換附錄編號方式。這些命令組合起來一份文檔的骨架就搭好了。我個人的習慣是先寫完整份文檔的所有標題把結(jié)構(gòu)定下來再往里填內(nèi)容。這樣不會寫著寫著發(fā)現(xiàn)結(jié)構(gòu)亂了回頭調(diào)整成本很高。3. 數(shù)學公式從行內(nèi)到多行對齊3.1 行內(nèi)公式與行間公式的取舍數(shù)學公式分兩種行內(nèi)公式和行間公式。行內(nèi)公式用$...$包裹比如$a^2 b^2 c^2$它會嵌在文字中間。行間公式用\[...\]或者equation環(huán)境單獨占一行居中顯示。什么時候用行內(nèi)什么時候用行間我的判斷標準是看這個公式是否需要被引用。如果后面要提到“根據(jù)公式(1)”那就用equation環(huán)境它會自動編號。如果只是順帶提一下的簡單表達式行內(nèi)就夠了。行內(nèi)公式設(shè) $x 0$則有... 行間公式 \begin{equation} E mc^2 \label{eq:energy} \end{equation}\label是給公式起個名字后面用\ref{eq:energy}就能引用它的編號。這個機制后面講交叉引用時還會展開。3.2 多行公式對齊align環(huán)境的正確用法寫論文時經(jīng)常遇到多行公式需要對齊的情況。最常用的是align環(huán)境\begin{align} f(x) (x1)^2 \\ x^2 2x 1 \end{align}是對齊點\\是換行。對齊點通常放在等號前面這樣多行公式的等號會豎直對齊看起來非常整齊。如果不想讓某一行編號在那一行末尾加\nonumber。如果整組公式只想要一個編號用aligned環(huán)境嵌套在equation里。這里有個坑align環(huán)境里每一行默認都會編號。如果你寫了五行公式就會得到五個編號。很多時候這不是你想要的。所以要么用\nonumber逐個取消要么用align*完全不編號。3.3 矩陣、分段函數(shù)與常見符號矩陣用pmatrix、bmatrix、vmatrix等環(huán)境\begin{pmatrix} a b \\ c d \end{pmatrix}p是圓括號b是方括號v是豎線。矩陣里的分隔列\(zhòng)\分隔行。分段函數(shù)用cases環(huán)境\begin{equation} f(x) \begin{cases} x^2, x \geq 0 \\ -x, x 0 \end{cases} \end{equation}常見符號需要記一下\alpha、\beta、\sum、\int、\infty、\partial、\nabla。這些不用死記用多了自然就熟了。我建議在文檔里放一個常用符號表需要的時候查一下比翻手冊快。提示如果公式編譯報錯先檢查花括號是否配對再檢查有沒有用了未加載宏包的命令。很多符號需要amsmath或amssymb宏包支持。4. 表格與圖片位置控制的藝術(shù)4.1 表格的基本結(jié)構(gòu)表格用tabular環(huán)境\begin{table}[htbp] \centering \caption{實驗數(shù)據(jù)對比} \label{tab:data} \begin{tabular}{|c|c|c|} \hline 樣本 均值 標準差 \\ \hline A 3.2 0.5 \\ B 4.1 0.7 \\ \hline \end{tabular} \end{table}{|c|c|c|}定義了三列每列居中豎線分隔。\hline畫橫線。\caption是表格標題\label用于引用。這里有個細節(jié)\caption要放在\begin{tabular}之前還是之后放在之前標題在表格上方放在之后標題在表格下方。學術(shù)論文里表格標題通常在上方圖片標題在下方。這不是硬性規(guī)定但跟著慣例走不會錯。4.2 浮動體位置參數(shù)htbp到底怎么用[htbp]這四個字母代表四種位置偏好hhere就放在這里ttop放到頁頂bbottom放到頁底ppage單獨放一頁它們是有優(yōu)先級的從左到右依次嘗試。但最終決定權(quán)在排版引擎手里。如果頁面剩余空間不夠它會自動調(diào)整。很多人遇到的問題是表格或圖片跑到了文檔末尾怎么都拉不回來。這時候可以試試加!比如[!ht]意思是“盡量滿足我的要求”。但說實話浮動體的位置控制是這類工具的一個設(shè)計特點不是bug。它的邏輯是讓版面更美觀避免大片空白。我的經(jīng)驗是不要跟浮動體較勁。寫的時候用[htbp]最后定稿時再統(tǒng)一調(diào)整。如果實在需要固定位置可以用float宏包的[H]參數(shù)強制“就在這里”。但這樣可能導致頁面出現(xiàn)大片空白慎用。4.3 圖片插入與尺寸控制圖片用graphicx宏包\usepackage{graphicx} \begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{figure.png} \caption{系統(tǒng)架構(gòu)圖} \label{fig:arch} \end{figure}width0.8\textwidth表示圖片寬度是正文寬度的80%。這個比例很常用既不會太小看不清也不會撐滿頁面顯得擁擠。圖片格式方面PDF和PNG適合矢量圖和截圖JPG適合照片。如果圖片是PDF格式編譯方式要用pdflatex或xelatex不能用傳統(tǒng)的latex。注意圖片文件名不要用中文和空格。雖然某些環(huán)境下能識別但換一個編譯器就可能報錯。用英文加下劃線或連字符省心。5. 交叉引用與參考文獻讓文檔自己維護邏輯5.1 label與ref的配對邏輯交叉引用的核心是\label和\ref的配對。\label放在需要被引用的位置\ref放在引用發(fā)生的位置。\section{實驗方法} \label{sec:method} 如第\ref{sec:method}節(jié)所述...編譯后\ref{sec:method}會自動替換成章節(jié)編號。如果后面插入了新章節(jié)導致編號變化引用處的數(shù)字會自動更新。這就是“內(nèi)容與格式分離”的好處。\label的命名建議用“類型:描述”的格式比如sec:method、fig:arch、tab:data、eq:energy。這樣一看就知道引用的是什么類型的東西排查問題時很方便。有一個經(jīng)典坑編譯兩次才能正確顯示引用。第一次編譯生成輔助文件第二次編譯才把引用數(shù)字填進去。如果引用顯示為??再編譯一次就好了。5.2 參考文獻手動管理與自動管理參考文獻有兩種做法。手動管理是直接用thebibliography環(huán)境\begin{thebibliography}{99} \bibitem{ref1} 作者. 文章標題. 期刊名, 年份. \bibitem{ref2} 作者. 書名. 出版社, 年份. \end{thebibliography}引用時用\cite{ref1}。這種方式適合參考文獻不多的情況簡單直接。自動管理用BibTeX或BibLaTeX。把文獻信息存在.bib文件里用\bibliography{文件名}引入。這種方式適合文獻多、需要反復調(diào)整格式的場景。BibTeX的工作流程是先編譯一次生成.aux文件再運行BibTeX處理文獻然后再編譯兩次。聽起來麻煩但編輯器通常有一鍵完成的功能。我個人的選擇是少于二十篇文獻用手動多于二十篇用BibTeX。手動管理雖然原始但勝在可控不會出現(xiàn)莫名其妙的編譯錯誤。5.3 引用格式的常見問題引用格式報錯通常有幾個原因.bib文件里有語法錯誤、文獻類型寫錯了、必填字段缺失。比如article必須有author、title、journal、year這幾個字段少一個就可能報錯。還有一個常見問題是中文文獻的處理。BibTeX對中文支持不太好可能需要用bibtex的變體或者手動調(diào)整。如果中文文獻多可以考慮用BibLaTeX加biblatex-gb7714-2015樣式對中文支持更友好。6. 編譯流程與常見報錯排查6.1 編譯引擎的選擇常見的編譯引擎有四種引擎特點適用場景l(fā)atex傳統(tǒng)引擎輸出DVI老項目不推薦新用pdflatex直接輸出PDF英文文檔兼容性好xelatex支持Unicode和系統(tǒng)字體中文文檔首選lualatex新一代引擎功能強復雜排版需求中文文檔我推薦xelatex配合ctex宏包字體配置最省心。pdflatex雖然也能處理中文但字體配置麻煩容易出問題。6.2 報錯信息的閱讀方法編譯報錯信息往往很長但關(guān)鍵信息通常在第一個錯誤處。后面的錯誤可能是連鎖反應不用全看。常見錯誤類型Undefined control sequence用了未定義的命令通常是拼寫錯誤或缺少宏包。Missing $ inserted數(shù)學符號寫在了數(shù)學環(huán)境外面。File not found圖片或文獻文件路徑不對。Runaway argument花括號不配對。排查時從第一個錯誤開始改完再編譯不要試圖一次改完所有錯誤。因為后面的錯誤可能是前面的錯誤引起的。6.3 輔助文件與清理策略編譯過程中會生成一堆輔助文件.aux、.log、.toc、.out等。這些文件記錄了交叉引用、目錄、書簽等信息。正常情況下不用管它們但如果編譯出現(xiàn)奇怪的問題可以刪掉這些輔助文件重新編譯。.log文件是排查問題的關(guān)鍵。里面記錄了詳細的編譯過程包括加載了哪些宏包、處理了哪些頁面、報了什么錯。遇到看不懂的報錯打開.log文件搜索Error關(guān)鍵詞通常能找到線索。提示如果改了\label的名字一定要重新編譯兩次否則引用可能還是舊的編號。7. 幾個讓我少走彎路的實操習慣7.1 宏包加載順序有講究宏包加載順序會影響最終效果。一般來說ctex或fontspec這類字體相關(guān)的宏包要早加載hyperref要晚加載。因為hyperref會修改很多內(nèi)部命令如果它先加載后面的宏包可能會覆蓋它的設(shè)置。一個比較穩(wěn)妥的順序是文檔類 → 字體和編碼 → 基礎(chǔ)功能宏包amsmath、graphicx→ 特殊功能宏包 →hyperref→ 自定義命令。7.2 自定義命令減少重復勞動如果某個命令反復出現(xiàn)可以定義快捷方式\newcommand{\R}{\mathbb{R}} \newcommand{\dd}{\mathrmdrlblxrh1}這樣寫公式時用\R代替\mathbb{R}用\dd代替\mathrmdrlblxrh1省時省力而且格式統(tǒng)一。如果后面想改樣式改一處定義就行不用全文替換。7.3 版本控制與增量編譯寫長文檔一定要用版本控制。每次改完一個章節(jié)就提交一次出問題了可以回退。配合編輯器的自動編譯功能改完保存就能看到效果效率很高。增量編譯是指只編譯改動的部分不重新編譯整個文檔。對于幾十頁的文檔全量編譯可能要十幾秒增量編譯能把這個時間降到一兩秒。大多數(shù)現(xiàn)代編輯器都支持這個功能。7.4 模板改造的邊界很多人拿到模板后想大改比如換字體、調(diào)行距、改頁邊距。我的建議是先搞清楚模板為什么這么設(shè)計。學術(shù)模板的格式要求通常有明確依據(jù)隨意改動可能導致格式審查不通過。如果確實需要調(diào)整用geometry宏包調(diào)頁邊距用setspace宏包調(diào)行距用titlesec宏包調(diào)標題格式。這些宏包提供了標準化的接口比直接改內(nèi)部命令安全得多。我在實際使用中最大的體會是這類工具的學習曲線確實存在但前期投入的時間會在后期成倍地省回來。尤其是寫長文檔的時候自動編號、自動目錄、自動引用這些功能手動做一遍要花幾個小時而且容易出錯。一旦把常用命令練熟寫作就變成了純粹的“寫內(nèi)容”格式的事情完全不用操心。