Skip to content

Commit a7c4b60

Browse files
committed
L-lesson-08 translation
1 parent e115a5e commit a7c4b60

1 file changed

Lines changed: 314 additions & 0 deletions

File tree

zh-hant/lesson-08.md

Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
---
2+
layout: "lesson"
3+
lang: "zh-hant"
4+
title: "表格"
5+
description: "本課展示了如何在 LaTeX 中建立表格,如何影響單元格的對齊,如何新增表格線條,以及如何合併單元格。"
6+
toc-anchor-text: "LaTeX 表格"
7+
toc-description: "表格的基礎知識。"
8+
---
9+
10+
# 表格
11+
12+
<span
13+
class="summary">本課展示了如何在 LaTeX 中建立表格,如何影響單元格的對齊,如何新增表格線條,以及如何合併單元格。</span>
14+
15+
LaTeX 中的表格使用`tabular`環境來建立。本課假設你已載入`array`宏包,它為LaTeX表格新增了更多功能。這個宏包之所以不是 LaTeX 核心的一部分,僅僅是出於歷史原因。因此,請在導言區新增以下內容,我們就可以開始了:
16+
17+
```latex
18+
\usepackage{array}
19+
```
20+
{: .noedit :}
21+
22+
要排版`tabular`環境,我們需要告訴 LaTeX 需要多少列以及它們應該如何對齊。這是通過一個必需的參數(通常被稱為表格導言)來完成的,在這個參數中,你使用單字母名稱(稱為導言標記)來指定列。可用的列類型有:
23+
24+
<!-- don't line wrap this table, markdown seems to not support this -->
25+
26+
| 類型 | 描述 |
27+
| --------------- | :---------------------------------------------------------------------------------------- |
28+
| `l` | 左對齊列 |
29+
| `c` | 居中對齊列 |
30+
| `r` | 右對齊列 |
31+
| `p{寬度}` | 固定寬度為`寬度`的列;文字將自動換行並完全對齊 |
32+
| `m{寬度}` |`p`類似,但相對於行的其餘部分垂直居中 |
33+
| `b{寬度}` |`p`類似,但底部對齊 |
34+
| `w{對齊}{寬度}` | 以固定`寬度`列印內容,如果內容過大則靜默溢位。你可以使用`l``c``r`來選擇水平對齊方式。 |
35+
| `W{對齊}{寬度}` |`w`類似,但如果內容過寬,這將發出溢位框警告。 |
36+
37+
此外,還有一些其他可用的導言標記,它們不定義列但可能也很有用:
38+
39+
<!-- don't line wrap this table, markdown seems to not support this -->
40+
41+
| 類型 | 描述 |
42+
| ----------------- | :----------------------------------------------------------------------- |
43+
| `*{數量}{字元串}` | 在導言中重複`字元串` `數量`次。通過這種方式,你可以定義多個相同的列。 |
44+
| `>{聲明}` | 在每個單元格內容之前將`聲明`放在下一列中(這對於設定不同的字型等很有用) |
45+
| `<{聲明}` | 在前一列的每個單元格內容之後放置`聲明` |
46+
| <span>` | `</span> | 新增垂直線 |
47+
| `@{聲明}` |`聲明`替換列之間的空格 |
48+
| `!{聲明}` | 在現有空格的中心新增`聲明` |
49+
50+
這兩個表格列出了 LaTeX 和`array`宏包提供的所有可用列類型。一些來自不同宏包的其他列類型在本課的[更多細節](more-08)中介紹。
51+
52+
`l``c``r`的寬度將是其最寬單元格的自然寬度。每個列都必須聲明,因此如果你想要三個居中對齊的列,你需要在表格導言中使用`ccc`。空格會被忽略,所以`c c c`是一樣的。
53+
54+
在表格主體中,列使用`&`分隔,新行使用`\\`開始。
55+
56+
我們已經有了建立第一個表格所需的一切。在下面的程式碼中,`&``\\`是對齊的。這在 LaTeX 中不是必需的,但有助於閱讀原始碼。
57+
58+
```latex
59+
% !TEX program=lualatex
60+
61+
\documentclass{ctexart}
62+
\usepackage{array}
63+
64+
\begin{document}
65+
\begin{tabular}{lll}
66+
動物 & 食物 & 大小 \\
67+
狗 & 肉 & 中等 \\
68+
馬 & 乾草 & 大 \\
69+
青蛙 & 蒼蠅 & 小 \\
70+
\end{tabular}
71+
\end{document}
72+
```
73+
74+
如果表格列包含大量文字,僅使用`l``c``r`會出現問題。看看下面的例子會發生什麼:
75+
76+
```latex
77+
% !TEX program=lualatex
78+
79+
\documentclass{ctexart}
80+
\usepackage{array}
81+
82+
\begin{document}
83+
\begin{tabular}{cl}
84+
動物 & 描述 \\
85+
狗 & 狗是犬屬的成員,屬於狼形犬科,是最廣泛分佈的陸地食肉動物。 \\
86+
貓 & 貓是一種小型食肉目家養動物。它是貓科中唯一的家養物種,通常被稱為家貓,以區別於該科的野生成員。 \\
87+
\end{tabular}
88+
\end{document}
89+
```
90+
91+
問題在於`l`類型列會以其自然寬度排版其內容,即使有頁面邊界也不會換行。要解決這個問題,你可以使用`p`列。這會將其內容作為段落排版,並指定寬度作為參數。將上面的結果與以下內容進行比較:
92+
93+
```latex
94+
% !TEX program=lualatex
95+
96+
\documentclass{ctexart}
97+
\usepackage{array}
98+
99+
\begin{document}
100+
\begin{tabular}{cp{9cm}}
101+
動物 & 描述 \\
102+
狗 & 狗是犬屬的成員,屬於狼形犬科,是最廣泛分佈的陸地食肉動物。 \\
103+
貓 & 貓是一種小型食肉目家養動物。它是貓科中唯一的家養物種,通常被稱為家貓,以區別於該科的野生成員。 \\
104+
\end{tabular}
105+
\end{document}
106+
```
107+
108+
如果你的表格有許多相同類型的列,在導言中輸入那麼多列定義會很麻煩。你可以使用`*{num}{string}`來簡化,它會重複`string` `num`次。所以`*{6}{c}`等同於`cccccc`。為了證明它確實有效,這裡是本課的第一個表格,使用新學到的語法:
109+
110+
```latex
111+
% !TEX program=lualatex
112+
113+
\documentclass{ctexart}
114+
\usepackage{array}
115+
116+
\begin{document}
117+
\begin{tabular}{*{3}{l}}
118+
動物 & 食物 & 大小 \\
119+
狗 & 肉 & 中等 \\
120+
馬 & 乾草 & 大 \\
121+
青蛙 & 蒼蠅 & 小 \\
122+
\end{tabular}
123+
\end{document}
124+
```
125+
126+
## 新增線條
127+
128+
在介紹線條之前,先提一個建議:線條在表格中應該謹慎使用,通常垂直線看起來不夠專業。事實上,對於專業的表格,你不應該使用任何標準線條;相反,你應該熟悉`booktabs`宏包的功能,這就是為什麼我們先在這裡介紹它。為了完整性,標準線條在[更多資訊](more-08)頁面中展示。
129+
130+
`booktabs`提供了四種不同類型的線條。每個這些命令都必須作為行中的第一個內容使用,或緊跟在另一個線條之後。
131+
三個線條命令是:`\toprule``\midrule``\bottomrule`。從它們的名稱就可以清楚地知道它們的使用位置:
132+
133+
```latex
134+
% !TEX program=lualatex
135+
136+
\documentclass{ctexart}
137+
\usepackage{array}
138+
\usepackage{booktabs}
139+
140+
\begin{document}
141+
\begin{tabular}{lll}
142+
\toprule
143+
動物 & 食物 & 大小 \\
144+
\midrule
145+
狗 & 肉 & 中等 \\
146+
馬 & 乾草 & 大 \\
147+
青蛙 & 蒼蠅 & 小 \\
148+
\bottomrule
149+
\end{tabular}
150+
\end{document}
151+
```
152+
153+
`booktabs`提供的第四個線條命令是`\cmidrule`。它可以用來繪製一條不跨越整個表格寬度的線條,而是隻跨越指定的列範圍。列範圍作為數字範圍輸入:`{`_數字_`-`_數字_`}`。即使你只想為單個列繪製線條,也需要將其指定為範圍(兩個數字相同)。
154+
155+
```latex
156+
% !TEX program=lualatex
157+
158+
\documentclass{ctexart}
159+
\usepackage{array}
160+
\usepackage{booktabs}
161+
162+
\begin{document}
163+
\begin{tabular}{lll}
164+
\toprule
165+
動物 & 食物 & 大小 \\
166+
\midrule
167+
狗 & 肉 & 中等 \\
168+
\cmidrule{1-2}
169+
馬 & 乾草 & 大 \\
170+
\cmidrule{1-1}
171+
\cmidrule{3-3}
172+
青蛙 & 蒼蠅 & 小 \\
173+
\bottomrule
174+
\end{tabular}
175+
\end{document}
176+
```
177+
178+
你可以使用`\cmidrule`的短版本,在任一端新增一個可選參數,括號中的`r``l`分別表示規則在 ******** 端縮短:
179+
180+
```latex
181+
% !TEX program=lualatex
182+
183+
\documentclass{ctexart}
184+
\usepackage{array}
185+
\usepackage{booktabs}
186+
187+
\begin{document}
188+
\begin{tabular}{lll}
189+
\toprule
190+
動物 & 食物 & 大小 \\
191+
\midrule
192+
狗 & 肉 & 中等 \\
193+
\cmidrule{1-2}
194+
馬 & 乾草 & 大 \\
195+
\cmidrule(r){1-1}
196+
\cmidrule(rl){2-2}
197+
\cmidrule(l){3-3}
198+
青蛙 & 蒼蠅 & 小 \\
199+
\bottomrule
200+
\end{tabular}
201+
\end{document}
202+
```
203+
204+
你可能已經猜到,`r``l`分別表示規則在********端縮短。
205+
206+
有時,線條會將兩行分隔得太開,但為了更清楚地表達含義,你仍需要通過某種方式將它們分開,這時使用`\addlinespace`來插入一個小分隔。
207+
208+
```latex
209+
% !TEX program=lualatex
210+
211+
\documentclass{ctexart}
212+
\usepackage{array}
213+
\usepackage{booktabs}
214+
215+
\begin{document}
216+
\begin{tabular}{cp{9cm}}
217+
\toprule
218+
動物 & 描述 \\
219+
\midrule
220+
狗 & 狗是犬屬的成員,屬於狼形犬科,是最廣泛分佈的陸地食肉動物。 \\
221+
\addlinespace
222+
貓 & 貓是一種小型食肉目家養動物。它是貓科中唯一的家養物種,通常被稱為家貓,以區別於該科的野生成員。 \\
223+
\bottomrule
224+
\end{tabular}
225+
\end{document}
226+
```
227+
228+
## 合併單元格
229+
230+
在 LaTeX 中,你可以使用`\multicolumn`命令來水平合併單元格。它必須作為單元格中的第一個內容使用。`\multicolumn`需要三個參數:
231+
232+
1. 應該合併的單元格數量
233+
2. 合併單元格的對齊方式
234+
3. 合併單元格的內容
235+
236+
對齊方式可以包含任何在`tabular`導言中合法的內容,但**只能包含單個列類型**
237+
238+
```latex
239+
% !TEX program=lualatex
240+
241+
\documentclass{ctexart}
242+
\usepackage{array}
243+
\usepackage{booktabs}
244+
245+
\begin{document}
246+
\begin{tabular}{lll}
247+
\toprule
248+
動物 & 食物 & 大小 \\
249+
\midrule
250+
狗 & 肉 & 中等 \\
251+
馬 & 乾草 & 大 \\
252+
青蛙 & 蒼蠅 & 小 \\
253+
fuath & \multicolumn{2}{c}{未知} \\
254+
\bottomrule
255+
\end{tabular}
256+
\end{document}
257+
```
258+
259+
你還可以使用`\multicolumn`在一個單元格上,以防止應用表格導言中為當前列定義的任何內容。以下內容使用這種方法來居中表格的標題行:
260+
261+
```latex
262+
% !TEX program=lualatex
263+
264+
\documentclass{ctexart}
265+
\usepackage{array}
266+
\usepackage{booktabs}
267+
268+
\begin{document}
269+
\begin{tabular}{lll}
270+
\toprule
271+
\multicolumn{1}{c}{動物} & \multicolumn{1}{c}{食物} & \multicolumn{1}{c}{大小} \\
272+
\midrule
273+
狗 & 肉 & 中等 \\
274+
馬 & 乾草 & 大 \\
275+
青蛙 & 蒼蠅 & 小 \\
276+
fuath & \multicolumn{2}{c}{未知} \\
277+
\bottomrule
278+
\end{tabular}
279+
\end{document}
280+
```
281+
282+
垂直合併單元格在 LaTeX 中不受支援。通常,只需留空單元格即可讓讀者正確的理解,而無需明確地使單元格跨越多行。
283+
284+
```latex
285+
% !TEX program=lualatex
286+
287+
\documentclass{ctexart}
288+
\usepackage{array}
289+
\usepackage{booktabs}
290+
291+
\begin{document}
292+
\begin{tabular}{lll}
293+
\toprule
294+
組 & 動物 & 大小 \\
295+
\midrule
296+
草食動物 & 馬 & 大 \\
297+
& 鹿 & 中等 \\
298+
& 兔子 & 小 \\
299+
\addlinespace
300+
肉食動物 & 狗 & 中等 \\
301+
& 貓 & 小 \\
302+
& 獅子 & 大 \\
303+
\addlinespace
304+
雜食動物 & 烏鴉 & 小 \\
305+
& 熊 & 大 \\
306+
& 豬 & 中等 \\
307+
\bottomrule
308+
\end{tabular}
309+
\end{document}
310+
```
311+
312+
## 練習
313+
314+
使用簡單的表格示例開始嘗試表格。嘗試使用`l``c``r`列類型進行不同的對齊。如果你在表格行中缺少項目會發生什麼?如果你在表格行中新增太多項目會發生什麼?嘗試使用`\multicolumn`命令跨越多列。

0 commit comments

Comments
 (0)