置頂介紹文

這裡主要放一些關於數學和 LaTeX 的文章, 文章內的檔案一律用 xelatex 編譯而成。
如果你想下載我的 tex 檔回去修改編譯, 請將 preamble.7z 解壓縮後和 tex 檔放在同一個資料夾中即可編譯。
部落格內的文章也有部份是網路或書籍中的資料經過統整編輯而成, 如有侵權請告知。
有任何問題也歡迎留言或 E-mail 給我。

2016年10月3日 星期一

LaTeX 表格設計

從 Word 轉移到 LaTeX 的過程中, 就屬表格和插入圖片最難以掌握, 因為似乎總不能隨心所欲的想怎樣就怎樣, 不過學會之後, 會發現 LaTeX 的表格很好掌握喔!

這篇會把所有表格常用的語法, 包括基本表格 (tabular) 環境, 表格內水平置中 (center), 垂直置中, 表格手動內換行 (break line) 以及 設定表格樣式 (newcolumntype) 的語法一併說明。

\documentclass[12pt]{article}

\usepackage[CJKnumber]{xeCJK} %讓中英文字體分開設置
\setCJKmainfont[BoldFont={cwTeX Q Hei Bold}]{cwTeX Q Ming Medium} % 設預設中文字型及預設粗體

\usepackage[a4paper, margin=1.5cm]{geometry}%設定紙張及邊界
\renewcommand{\baselinestretch}{1.4}%設定行距{倍數}

\usepackage{tabularx, array, slashbox}%表格
\usepackage{makecell} %表格內換行
\usepackage{multirow}
\renewcommand{\multirowsetup}{\centering} %合併表格後, 內容水平置中

\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{B}[1]{>{\centering\arraybackslash}b{#1}}

\begin{document}

\begin{tabular}{|c|p{0.2\textwidth}|p{5cm}|P{0.3\linewidth}|}
\hline
1-1 & 1-2 & 1-3 & 1-4 \\
\hline
2-1& 這是很多字的第二欄, 所以他會自動換行, 一直換一直換一直換......... & 2-3 \par 第一種手動換行 \par 2-3 & \makecell[t]{2-4 \\ 第二種手動換行 \\ 2-4} \\
\hline
3-1 & \multicolumn{2}{c|}{\makecell[t]{雙欄合併 \\ 換行要用 makecell}} & 3-4 \\
\hline
4-1 & \multicolumn{1}{c|}{單格水平置中} & \multicolumn{1}{r|}{單格水平靠右} & 4-4 \\
\hline
5-1 & \multirow{4}{\linewidth}{垂直置中} & 5-3 & \mbox{} \vspace*{2cm} \\
\hline
\end{tabular}


\end{document}

在 tabular 環境中先設定參數, c 表示該欄均水平置中, p{}表示表格頂端對齊, 大括號內則是欄寬, 可以是絕對長度 (5cm), 也可以是相對長度 (0.2\textwidth)。而在 c 和 p 這兩個表格樣式 (columnstyle) 之間用 | 可以畫出表格的鉛直線。

因為每一欄只能有一種表格樣式 (columnstyle), 用 c 置中就無法再用 p 來設定寬度, 反之亦然, 因此若要置中同時設定表格寬度, 就必須先在宣告區定義
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}, 那麼 LaTeX 會在每一欄一開始加入 \centering\arraybackslash 來讓內容水平置中。

由於表格環境裡已經用 \\ 來表示換列, 所以表格單格內換行必須用 \par 或是 \makecell 來處理。\par 可用在一般的換行, 但是有些地方會行不通; \makecell 則是相當的泛用, 其中參數 [t] 是用來設定為頂端對齊, 若用 [c] 則是中間對齊。

若需要雙欄合併可用 \multicolumn 語法, 第一個指令為合併欄數, 第二個指令為合併後水平對齊方式, c 為置中, r 為置右, 第三欄則為表格內文字。也因為 \multicolumn 可以重新定義水平對齊方式, 所以我們可以用合併"一欄" 的語法來讓單欄表格內容水平置中或水平靠右。

若需要設定表格列高則在末欄加上 \vspace 即可, 如果末欄沒有文字時需要用 \mbox{} 假裝文字。

設定了表格列高後, 如希望文字垂直置中, 則用 \multirow 語法, 第一欄為列數, 用來調整文字位置, 第二欄為欄寬, 用 \linewidth 表示與現在欄寬一致, 第三欄為表格內文字。又因為我在宣告區設定了 \renewcommand{\multirowsetup}{\centering}, 所以內容會呈現水平置中, 此設定預設值為靠左 (\raggedright), 如果希望靠右, 則設定為 \renewcommand{\multirowsetup}{\raggedleft} 即可。

在 LaTeX 或是較正式的排版中, 我們不建議用表格來達成排版的目的, 表格主要還是運用於資料的整理及傳達, 而排版應該在文章中讓 LaTeX 自行計算即可。一旦這樣來理解表格, 那麼 LaTeX 的表格不僅更能表現出我們要的效果, 並且在設定好之後完全沒有格式跑掉的疑慮, 其方便性體驗過就能明白了。

article_latex表格基本功.tex
article_latex表格基本功.pdf