標籤:

LaTeX 第六課:圖表的排版

本文同時發佈於微信公眾號:兩個少年的奇幻漂流(ID:Amazing_Adventure)

本期的主題是圖表的排版,主要內容有:

  • 普通表格與矩陣
  • 長表格與三線表
  • 圖片的插入與大小控制
  • 浮動體與圖表標題的製作

前段時間期末季實在太忙啦,於是這期就拖到了現在,大家見諒!

---

普通表格與矩陣

在 LaTeX 中,排版表格是一個非常重要的事情。在廣義上,表格不僅包括我們日常所說的表格,也包含矩陣,因為表格的核心其實是對齊。在前面數學公式排版中,我們提到過矩陣的排版,其中就使用「&」符號作為對齊的標誌。在表格中也是如此。

首先要介紹的是 tabular 和 array 環境,它們的功能幾乎沒有差別,也包含了排版表格的核心技術。其主要用法是這樣的:

begin{tabular}[<垂直對齊選項>]{<列格式說明>}nA & B & C nD & E & F nend{tabular}n

我們先解釋列格式說明。列格式說明的基本元素有 l c r 三種,分別表示這一列是靠左、居中還是靠右對齊。在左右兩端或基本元素之間可以加上豎線,表示這裡是不是需要用線來分隔。舉例如下:

在列格式中還有一些其他的說明符,在此也列舉如下:

  • p{<寬度>},表示本列具有固定的寬度,表格內容在其中可以自動換行(但不能手動用 進行換行),並可以用 raggedleft,centering 等命令進行對齊。
  • @{<內容>},添加任意內容,不佔表項計數,同時取消表列間的距離。例如我們需要某一列的數據按小數點對齊,就可以用 r@{.}l 這樣定義兩列,分別輸入整數部分和小數部分,實現這個效果。
  • *{<計數>}{<列格式說明>},將部分列格式說明重複多次。

我們也可以在其中視需要加入橫線進行分隔(hline)。舉例如下:

如果我希望某一行的橫線不貫穿整個表格,則可以使用 cline 命令。cline{x-y} 可以獲得一段從第 x 格到第 y 格的橫線,舉例如下:

垂直對齊選項表示在行內使用時,表格的哪一部分與文字對齊,其參數可以是 t 或者 b,默認條件是居中對齊。舉例如下:

與底部對齊:

居中對齊:

這樣的行內表格並不常見,因此大多數情況下我們不需要用到垂直對齊選項。

有的時候我們需要將表格單元進行合併,我們就可以使用 multicolumn 命令。這一命令的使用方式如下:

multicolumn{<項數>}{<列格式說明>}{<內容>}n

設項數為 n,那麼這一命令表示,將此行連著 n 個格子合併,並填入相應的內容。對被合併的 n 個格子,它們之間的對齊符號全部省略不寫,但前後的對齊符號不可省略。

如果要合併列,則需要用 multirow 宏包提供的 multirow 命令,其使用方式如下:

multirow{<行數>}{<寬度>}{<內容>}nmultirow{<行數>}*{<內容>}n

使用後一種用法就可以不指定寬度,最終其寬度會以內容的寬度為準。將上述兩個命令相互嵌套,即可實現多行多列表格的合併。這樣的操作其實是非常麻煩的,因此在這裡為大家推薦 excel2latex 這個網站,還有同名的 Excel 插件,可以用 Excel 做好表格之後導出成 LaTeX 源碼。

---

長表格與三線表

有的時候我們需要製作的表格,用一整張紙都裝不下。這樣的話我們在新的一頁上需要重新排版一個表頭,同時在頁面接續處需要有一些文字來說明這個表格是跨頁排版的。這個時候我們就需要 longtable 宏包中提供的 longtable 環境。其使用方式如下:

begin{longtable}[<水平對齊項>]{<列格式說明>}n<第一頁表頭>nendfirstheadn<接續處表頭>nendheadn<頁面連接處表尾>nendfootn<最後一頁表尾>nendlastfootn<內容>nend{longtable}n

具體的使用細節可以參考 longtable 的宏包文檔。

在科學論文中,更多使用的是三線表。這樣的表格只在頂部、底部和表頭下方有三條分隔線,其中頂部和底部的線較粗,表頭下方的線較細。這樣的線條可以用 booktabs 宏包提供的如下四種命令來實現:

  • toprule:畫頂部的線
  • midrule:畫表頭下方的線
  • bottomrule:畫底部的線
  • cmidrule:與 cline 命令類似,可以畫出一段短線,它比 midrule 更細;配合 morecmidrules 命令可以畫出多條分隔線,並且其間有合適的間距

簡明的使用方法如下:

begin{tabular}[<垂直對齊項>]{<列對齊說明>}ntoprule n<表頭>nmidrulen<內容> nbottomrulen

booktabs 宏包沒有提供單獨的表格環境,只需要在普通的表格中插入新定義的線條即可。詳細的使用說明可以看看 booktabs 的文檔。下面用一個比較複雜的三線表來回顧一下我們到現在為止講到的全部內容吧(自己動手之前別忘了需要的宏包噢)。

---

圖片的插入與大小控制

說完了表,我們來說圖。插入一張圖片的核心命令是

includegraphics[<選項>]{<文件名>}n

同時我們在插圖時一般都需要調用 graphicx 宏包。下面默認全部調用。在使用 XeLaTeX 進行編譯時,被插入的圖片支持 EPS,PDF,PNG,JPEG,BMP 等五種格式。一般使用較多的是 PDF、PNG。PDF 圖片是矢量圖形的標準格式,也是最推薦使用的(一般的作圖軟體都支持輸出 PDF 格式的圖片);PNG 則是無損壓縮的像素圖模式,顯示計算機製作的非自然圖形。

圖形文件一般和 .tex 源文件在同一目錄下,因此可以直接寫文件名插入。但有的時候圖片會被合併到一個文件夾中進行管理,此時就可以使用 graphicx 宏包提供的 graphicspath 命令來指定這個文件夾。指定後,所有圖片的搜索都將在這個文件夾中進行。

graphicspath{{figures/}}n

例如上面這個命令就可以指定根目錄下的 figures 文件夾為圖片文件夾。

插入的圖片可以指定大小,只要在 includegraphics 命令中的選項中指定即可。例如

includegraphics[width_=textwidth]{pic}n

就可以將 pic 這張圖片伸展成與版心等寬,恰好充滿版面的寬度。類似的指標還有 height(表示圖片的高度)和 scale(表示圖片的比例)。

---

浮動體與圖表標題的製作

一般情況下,圖表都會佔據頁面中大塊的位置,造成分頁的困難。放在前面一頁位置不夠,放在後面一頁又會造成前面一頁底部有大量空白,非常不美觀。於是 LaTeX 使用浮動體來解決這個問題。也就是說在排版的時候,如果當前位置放不下圖表,那就先排版後面的內容,再在後面找合適的地方來放圖表。針對圖片和表格,LaTeX 提供了 figure 和 table 兩種環境,不僅可以實現浮動,還可以分別編號並生成目錄。下面我來舉例為大家說明浮動體環境的使用方式。

begin{figure}[<浮動位置>]nincludegraphics[<選項>]{<文件名>}ncaption{<圖標題>}nlabel{<標籤>}nend{figure}n

begin{table}[<浮動位置>]ncaption{<表標題>}nlabel{<標籤>}nbegin{tabular}{<列對齊說明>}n...nend{tabular}nend{table}n

浮動位置有如下四種:

  • h:here,表示放置在當前位置
  • t:top,表示放置在某頁頂部
  • b:bottom,表示放置在某頁底部
  • p:page,表示獨佔一頁

這四種說明符可以組合使用,自左向右優先順序遞降。至於最後這個圖表出現在哪裡,我們就不需要關心了。但是可能出現的一種情況是,如果你的浮動體太多而其他內容太少,它們可能會被堆到整個文檔的最後一起出現。這個時候你可能就需要使用 minipage 等方法手動安排一下它們的位置了。

圖表的標題用 caption 命令來指定。需要注意的是,表的標題應該在表的上方,而圖的標題應該在圖的下方。這個是排版中的一個默認的規則。圖表標題格式的控制可以使用 caption 宏包來實現,細節較多,大家可以閱讀 caption 宏包的文檔來了解。圖表同樣也可以進行交叉引用,只需要加個一個標籤,就可以用 ref 命令進行引用了。

另外有的時候,我們希望某個浮動體就在我們書寫源碼的地方。這時我們可以調用 float 宏包,並將浮動位置指定為 H,就可以實現了。

---

以上介紹的是最簡單的圖表排版技巧,下期我們將介紹參考文獻的製作,敬請期待!

歡迎關注我們??

weixin.qq.com/r/rzlIUCT (二維碼自動識別)


推薦閱讀:

LaTeX 使用 listings 宏包插入代碼時,如何將代碼的字體設定為 Monaco?
LaTeX如何混合排版中文與日文?
LaTeX 第一課:準備就緒

TAG:LaTeX |