2.2 源文件結構
重新來看一下我們最開始寫的文檔
\documentclass{article}
\begin{document}
This is my \emph{first} document prepared in \LaTeX.
\end{document}
在這個文檔中可以體現出源文件的結構, 所有的LaTeX文檔都是以\documentclass{文類}
作為開始, 從\documentclass{}
到\begin{document}
之前的所有命令語句統稱為導言, 在\begin{document}
到\end{document}
之間的命令語句和文本統稱為正文. 命令\end{document}
之后的所有字符LaTeX均將其忽略.
2.2.1 文類
標準文類
導言的第一句話, 通常也是LaTeX元文件的第一條命令, 就是文類命令:
\documentclass[參數1, 參數2,……]{文類}[日期]
每個LaTeX源文件都必須從這條命令開始, 它通知LaTeX將該論文源文件按照指定文類規定的文檔格式進行排版, 這個文類命令必須用在導言的首句, 其中的必要參數用于指定所用文類的名稱, 最后一個可選參數日期
是選擇宏包對應日期的版本, 一般情況下省略. 在英文文檔中, 常用的文類有4種
文類名 | 用途 | 特點 |
---|---|---|
article |
短文, 評論, 學術論文 | 無左右頁區分處理, 無chapter結構 |
book |
專業著作, 學位論文 | 默認有左右頁區分處理, 章起右頁 |
report |
科技,實驗報告 | 默認無左右頁區分處理, 章起新頁 |
beamer |
論文陳述幻燈片 | 提供多種主題樣式, 可方便地更換幻燈片整體風格 |
在表格中前三種由于廣泛應用于論文寫作, 因此被稱為標準文類.
可以試一下, 在第一個示例的文類下是無法正常編譯中文的, 如果要編譯中文, 有兩種方式可以選擇,
- 選擇是更換對應文類為
ctexart
,ctexbook
,ctexrep
, 但是這種方式會根據中文論文的排版習慣改變文檔內的顯示形式, 在正文結構里會提到, 而且在使用這四種文類的時候, 如果使用的是XeLaTeX或者是LuaLaTeX編譯方式, 可以直接使用\documentclass{ctex……}
, 這兩種編譯方式可以自動將文檔中的中文識別為UTF8的編碼進行編譯, 如果使用的是(Pdf)LaTeX, 因為由于歷史原因, 這兩種編譯方式默認編碼是GBK, 而CTeX宏集是以默認的編碼格式是UTF8, 所以要使用可選參數[UTF8]來將(PDF)LaTeX的編碼格式設置為UTF8, 則需要使用\documentclass[UTF8]{ctex……}
來設置文類. 因為LaTeX并不會自動識別用戶文檔所用的編碼格式, 所以建議使用者總是加上可選參數[UTF8], 即總是使用\documentclass[UTF8]{ctex……}
; - 另一種是添加中文支持宏包
\usepackage[UTF8]{ctex}
, 因為這種方式沒有改變文類, 只是增添了適應文字類型, 所以文檔內的顯示形式不會改變, 而對于可選參數[UTF8]我們同樣遵循第一點里說的, 建議總是使用[UTF8]
關于LaTeX中中文的輸出更多內容, 可以在C:\CTEX\MiKTeX\doc\latex\ctex\ctex.pdf
(使用MiKTeX)或C:\texlive\2018\texmf-dist\doc\latex\ctex\ctex.pdf
(使用TeX Live)查看ctex.pdf文件
標準文類的選項
選項 | 是否默認 | 說明 |
---|---|---|
10pt | 是 | 常規字體尺寸10pt |
11pt | 否 | 常規字體尺寸10.95pt |
12pt | 否 | 常規字體尺寸12pt |
a4paper | 是(取決于安裝TeX系統時設置) | 紙張幅面,寬210mm×高297mm |
letterpaper | 是(取決于安裝TeX系統時設置) | 紙張幅面, 寬216mm×高279mm |
a5paper | 否 | 紙張幅面, 寬148mm×高210mm |
b5paper | 否 | 紙張幅面, 寬176mm×高250mm |
以上是在設置文類時的可選參數, 上表中提及的選項均可以在所有標準文類中使用.即我們可以使用文類\documentclass[b5paper,11pt]{article}
來設置一個用b5紙, 文檔正文字體大小為11pt的論文文類.
2.2.2 宏包
每個功能強大的命令或環境都是由多個TeX基本命令和LaTeX命令組合而成的, 這種組合命令稱為宏, 存儲這些宏的命令文件稱為宏包, 其擴展名為.sty
.
宏包的作用是擴展或新增某些排版功能, 相當與C++中的#include<>
, 在導言區使用命令
\usepackage[參數1,參數2,……]{宏包名稱}[日期]
來調用宏包, 調用宏包命令只能在導言區使用, 宏包名稱不區分大小寫, 通常均為小寫, 最后一項可選參數日期
與文類命令中的日期作用相同, 通常情況下省略. 雖然LaTeX中的宏包數量上千個, 但是撰寫論文常用的只有20多個, 下表列出了他們的名稱和用途, 具體如何使用可以在幫助->宏包幫助中輸入宏包名稱來查看其對應的幫助文檔.
宏包名 | 用途 | 宏包名 | 用途 |
---|---|---|---|
amsmath |
多種公式環境和數學命令 | graphicx |
插圖處理 |
amssymb |
數學符號生成命令 | hyperref |
創建超文本鏈接和PDF書簽 |
array |
數組和表格制作 | ifthen |
條件判斷 |
caption |
插圖和表格標題格式設置 | ctex |
中文字體 |
ctexcap |
中文字體和標題 | fancyhdr |
頁眉頁腳設置 |
titlesec |
章節標題格式設置 | titletoc |
目錄格式設置 |
fontspec |
字體選擇 | geometry |
版面尺寸設置 |
fancyvrb |
抄錄環境設置 |
2.2.3 正文結構
層次
對于一篇論文或一本書, 它的結構層次是很重要的, LaTeX為不同的文類提供了不同的章節劃分標準.
\documentclass{book}
\begin{document}
\chapter{chapter 1}
\section{section 1}
\subsection{subsection 1}
\subsubsection{subsubsection 1}
\paragraph{paragraph 1}
\subparagraph{subparagraph 1}
This is the full structure of a book.
\section{section 2}
\end{document}
這是
book
文類的結構層次, 其章節的編號不需要我們自己去添加, LaTeX會自動按順序將編號生成好, 如果沒有前一層則會把前一層的編號自動判斷為0, report
文類也是如此.而對于article
文類, 它沒有chapter
結構, 其余的完全相同, 而對ctexbook
, ctexrep
和ctexart
文類, chapter和section結構會居中, 如圖段落與行
試著在正文中編譯以下文字
This is the first line
This is also the first line
!
.
又發現問題了, 這里和Word里有著明顯區別, 編譯出來的文件并沒有按著想象中的換行, 而是排到了一行, 并且會發現在第一個line后面有一個空格, 即可以理解為一個換行相當于一個空格, 英語中單詞和單詞之間會有空格, 所以在這個地方用換行當成空格也無可厚非; 但在中文中, 我們漢字和漢字之間并不需要空格, 那換行產生的空格怎么消除呢?別擔心, 在為中文準備的ctex系列文類和ctex.sty
宏包中, 將這個問題已經處理過了, 看下面的例子
\documentclass[UTF8]{ctexart}
\begin{document}
這個
好
very
好
!
.
good
\end{document}
可以看出來,
ctex……
文類在處理換行的時候, 執行以下判定:如果是漢字+漢字
, 漢字+標點
則取消空格, 如果是英文+英文
, 英文+漢字
, 英文+標點
, 標點+標點
則依舊保留空格. 將使用文類改成使用\usepackage[UTF8]{ctex}
是一樣的效果. 但是如果想取消換行產生的英文空格怎么辦呢, 很簡單, 在前一行的結尾加一個注釋符%
, 就像這樣
Hello%
world
因為注釋符%
的作用是忽略該注釋符和其后的所有文字, 即換行產生的空格也被忽略了, 同時可以知道換行產生的空格是在前一行
但是問題又出現了, 我們發現在上述條件下, 換行產生的空格是沒有了, 同一行中漢字和漢字之間的空格也沒有了, 要解決這個問題的話, 調用的宏包或文類中有一個可選參數space
中含有三個選項可以讓用戶選擇:
可選參數 | 作用 |
---|---|
true |
總不省略漢字換行后的空格, 此時用戶需要% 來取消掉不需要的空格 |
false |
總省略漢字后的換行空格(使用(PDF)LaTeX編譯時); 等同于auto (使用XeLaTeX編譯時), 不建議使用此選項 |
auto |
默認值, 如果漢字后是漢字, 則省略空格, 否則保留 |
即如果想讓漢字后面的空格一直保留的話, 使用\usepackage[space=true]{ctex}
或\documentclass[space=true]{ctexart}
或者在正文部分使用命令\ctexset{space=true}
來使命令后的正文使用對應格式,
注:在正文中使用\ctexset{space=true}
時, 這條命令后緊接的漢字與這條命令前的漢字間的空格依舊由這條命令之前的格式來控制, 可以用以下代碼實驗:
\documentclass{article}
\usepackage{ctex}
\begin{document}
自動
控制
\ctexset{space=true}
強制
空格
\end{document}
LaTeX對空格的控制說完了, 可是要是想換行怎么辦呢?LaTeX給我們提供了一些方法, 先看下面的例子:
\documentclass{article}
\begin{document}
This is the first line.\\
This is the second line without indent.
\end{document}
上面的代碼輸出了:
可以看出來,
\\
這個符號會輸出一個不帶縮進的換行, 如果使用\newline
也可以實現這個效果. 如果想輸出帶縮進的換行, 即新起一段, 可以怎么做呢?當然可以在新的一行前面加上縮進命令\indent
, 或者也可以通過一些新的方式, 看下面的例子
\documentclass{article}
\begin{document}
This is the first line.
This is the second line with indent.
\end{document}
上面代碼會輸出:同樣可以使用段落命令, 例
\documentclass{article}
\begin{document}
This is the first line.\par
This is the second line with indent.
\end{document}
上述代碼輸出效果和兩個換行符產生的效果相同.
注:還可以使用\\
來生成自定義行距的一行, 命令為\\[<長度>]
, 例\\[4mm]
綜上所述, 在LaTeX中的一個換行相當于一個空格, 兩個反斜杠\\
表示新起一行, 與\newline
作用相同, 兩個換行則新起一段, 與\par
產生的效果相同.