LaTeX/頁面佈局
LaTeX 和文件類通常會為您處理頁面佈局問題。對於提交給學術出版物,整個主題將不再由您掌控,因為出版商希望控制演示方式。但是,對於您自己的文件,您可能希望更改一些明顯的設定:頁邊距、頁面方向和列,僅舉三個例子。本教程的目的是向您展示如何配置頁面。
在本章中,我們經常需要處理 TeX 長度。您應該檢視長度以獲取有關該主題的全面詳細資訊。
文件可以是單面或雙面的。文章預設是單面的,書籍是雙面的。雙面文件區分左側(偶數頁)和右側(奇數頁),而單面文件則不區分。最顯著的效果體現在頁邊距上。如果您想使article 類雙面,請使用 \documentclass[twoside]{article}。
LaTeX 中的許多命令和變數都會考慮到這個概念。它們被稱為偶數和奇數。對於單面文件,只有奇數命令和變數才會生效。
LaTeX 中的頁面由許多內部引數定義。每個引數對應於頁面元素的長度,例如,\paperheight 是頁面的物理高度。這裡您可以看到一張圖表,顯示了定義頁面的所有變數。所有尺寸均以 TeX 點 (pt) 為單位,1 英寸等於 72.27pt,或者 1pt ≈ 0.3515 毫米。
- 1 英寸 +
\hoffset - 1 英寸 +
\voffset \oddsidemargin= 31pt\topmargin= 20pt\headheight= 12pt\headsep= 25pt\textheight= 592pt\textwidth= 390pt\marginparsep= 10pt\marginparwidth= 35pt\footskip= 30pt
\marginparpush= 7pt (未顯示)\hoffset= 0pt\voffset= 0pt\paperwidth= 597pt\paperheight= 845pt
當前詳細資訊加上佈局形狀可以從 LaTeX 文件本身打印出來。使用layout包和同名的命令:\usepackage{layout} ... \layout{}
要渲染一個標記文件頁邊距的框架,您當前正在處理的,請新增
\usepackage{showframe}
到文件中。
可能不會立即顯而易見——因為它並沒有真正造成任何嚴重問題——所有標準文件類的預設紙張大小是US letter。與 A4(這是世界上幾乎所有其他地方的標準)相比,它短了 18 毫米(大約 3/4 英寸),寬了 8 毫米(大約 1/4 英寸)。雖然這不是一個嚴重的問題(大多數印表機可以毫無問題地列印文件),但可以將其他大小指定為類選項。對於 A4 格式
\documentclass[a4paper]{article}
|
請注意,標準 LaTeX 類預設情況下使用US Letter,無論您的 TeX 分發配置如何。如果您將 TeX Live 配置為使用 A4 紙張,它將僅在 plainTeX 和未指定紙張尺寸的類中作為預設值。 |
a4paper 選項與 article 文件類本身並沒有任何作用。它只會與某些適當的包一起影響紙張大小,例如geometry包或hyperref包。 |
最通用的頁面佈局包之一是geometry 包。該包的直接優勢是它允許您即使使用不支援這些選項的類也能自定義紙張大小。例如,要設定紙張大小,請將以下內容新增到您的前言中
\usepackage[a4paper]{geometry}
|
The geometry package has many pre-defined page sizes, like a4paper, built in. Others include
- a0paper, a1paper, ..., a6paper,
- b0paper、b1paper、...、b6paper,
- letterpaper,
- legalpaper,
- executivepaper.
要使用 geometry 包顯式地更改紙張尺寸,可以使用 paperwidth 和 paperheight 選項。例如
\usepackage[paperwidth=5.5in, paperheight=8.5in]{geometry}
|
該包在設定頁面佈局方面提供了很多靈活性,包括使用以下內容指定每個頁面的特定佈局:
\newgeometry{
key=val // package options
}
\restoregeometry
雖然非常靈活,但該包也有一些限制。例如,無法將頁面大小提供給各個頁面,這需要不同的方法來解決問題。
頁面大小問題
[edit | edit source]如果您打算最終獲得一個 PDF 檔案,基本上有三種方法:
- TeX → PDF
pdflatex myfile # TeX → PDF
- TeX → DVI → PDF
latex myfile # TeX → DVI dvipdf myfile # DVI → PDF
- TeX → DVI → PS → PDF
latex myfile # TeX → DVI dvips myfile -o myfile.ps # DVI → PS ps2pdf myfile.ps myfile.pdf # PS → PDF
遺憾的是,PDF 輸出頁面的大小可能無法完全尊重您的設定。這些工具中的一些對 DVI、PS 和 PDF 規範的解釋不同,您最終可能得到一個尺寸不完全正確的 PDF 檔案。幸運的是,有一個解決方案:\special 命令允許使用者傳遞 PostScript 或 PDF 引數,這些引數可以在這裡用來適當地設定頁面大小。
- 對於pdflatex正常工作,通常使用 geometry 包就可以。
- 對於 DVI 和 PS 方法,始終獲得正確頁面大小的最安全方法是在 tex 檔案中新增以下內容:
\documentclass[...,a4paper,...]{...}
\special{papersize=210mm,297mm}
|
並將適當的引數附加到輸出生成過程中使用的處理器。
dvips -t a4 ... ps2pdf -sPAPERSIZE=a4 ... # On Windows: ps2pdf -sPAPERSIZE#a4 ... [1]
如果您想要 US Letter 尺寸,請用 8.5in,11in 替換 210mm,297mm,用 letter 替換 a4paper。還要替換a4為letter在命令列引數中。
平板電腦的頁面大小
[edit | edit source]那些想在平板電腦或其他手持數字裝置上閱讀的人需要建立沒有額外空白的文件。為了建立適合手持裝置閱讀的 PDF 文件,不僅要調整文字區域和邊距,還要調整頁面大小。如果您正在尋找一個合理的尺寸,請考慮遵循美國最高法院使用的紙張尺寸,441pt x 666pt(或 6.125 英寸 x 9.25 英寸),它在平板電腦上看起來很棒。您也可以使用最高法院的文字區域尺寸 297pt x 513pt,但這對於除了 Century Schoolbook(最高法院要求使用的字型)以外的其他字型來說太寬了。
邊距
[edit | edit source]習慣閱讀典型紙質文獻的讀者可能想知道為什麼文本週圍有這麼多的空白。例如,在 A4 紙上,文件通常在頁面左右兩側有 44 毫米的邊距寬度,留下約 60% 的頁面寬度用於文字。原因是提高可讀性。研究表明[2][3],當每行有 60-70 個字元時,更容易閱讀文字 - 似乎 66 是最佳數字。因此,設定頁面邊距以確保最佳可讀性,並且過度邊距空白被視為一種結果。有時,在內邊距中會留下此空白,假設文件將被裝訂。
如果您希望避免過多的空白,而不是更改邊距,請考慮使用 兩欄(或更多欄)佈局。這種方法通常被印刷雜誌採用,因為它既提供了可讀的行長,又充分利用了頁面。另一種方法是在不更改邊距的情況下減少頁面上的空白量,即使用 12pt 選項將文件類別的字型大小增大。
如果您想更改文件的邊距,有很多方法可以做到。
- 一種較舊的方法是使用 fullpage 包來獲得一些標準化的較小邊距(大約一英寸),但它會使用 10pt 預設字型大小(以及使用 12pt 文件類選項時大約 90 個字元)建立超過 100 個字元的每行。
\usepackage{fullpage}
|
對於更窄的邊距,fullpage 包有一個 cm 選項(大約 1.5cm),這會導致使用 10pt 預設字型大小時每行大約 120 個字元,大約是可讀字元的兩倍。
\usepackage[cm]{fullpage}
|
- 一種更現代、更靈活的方法是使用 geometry 包。該包允許您指定 4 個邊距,而無需記住特定的頁面尺寸命令。您也可以以釐米和英寸為單位輸入尺寸。在每個值後面使用 cm 表示釐米,使用 in 表示英寸(例如,1.0in 或 2.54cm)。請注意,預設情況下(即,沒有使用任何選項),此包已經減少了邊距,因此對於“標準佈局”,您可能不需要指定任何內容。這些值相對於紙張邊緣(0in)向內延伸。例如,此命令提供更傳統的邊距,更好地利用了頁面的垂直空間,而不會建立 fullpage 包的極長行(如果使用 11pt 文件類選項,對於信紙大小的紙張,行長約為 88 個字元,使用 a4paper 時略短)。
\usepackage[top=1in, bottom=1.25in, left=1.25in, right=1.25in]{geometry}
|
它還可以使用以下命令來重新建立 fullpage 包的行為:
\usepackage[margin=1in]{geometry}
|
您可以將邊距選項與 本段中看到的頁面大小選項結合起來。
- 如果頁面大小為 A4,可以使用 layaureo 包。 big 選項會進一步縮小邊距。
- 不要使用 a4wide 包來建立具有較小邊距的 A4 文件大小頁面。它已經過時並且有錯誤。請改用 geometry 包,例如
\usepackage[a4paper,includeheadfoot,margin=2.54cm]{geometry}
|
- 使用
\addtolength和\setlength命令編輯上面描述的單個頁面尺寸變數。參見 長度 章節。例如,
\setlength{\textwidth}{6.5in}
\addtolength{\voffset}{-5pt}
|
奇數頁和偶數頁邊距
[edit | edit source]使用 geometry 包,選項 left 和 right 分別用於內邊距和外邊距。它們也有別名 inner 和 outer。因此,處理奇數頁和偶數頁不同邊距的最簡單方法是在文件類命令中給出 twoside 選項,並將邊距指定為通常一樣。
\documentclass[twoside]{report}
\usepackage[inner=4cm,outer=2cm]{geometry} %left=4cm,right=2cm would be equivalent
|
這將導致所有內邊距(奇數頁的左邊距和偶數頁的右邊距)為 4cm,外邊距為 2cm。
為 geometry 設定相同的內邊距和外邊距將消除邊距之間的差異。另一種快速消除偶數頁和奇數頁之間位置差異的方法是將 evensidemargin 和 oddsidemargin 設定為奇數頁預設值的一半。
\setlength{\oddsidemargin}{15.5pt}
\setlength{\evensidemargin}{15.5pt}
|
預設情況下,在雙面佈局中,evensidemargin 的值大於 oddsidemargin,因為人們可能希望在頁面的側面寫筆記。大邊距的一側選擇與頁面拼接在一起的一側相反。
請參見 長度。
章節上面的頂部邊距
[edit | edit source]可以使用 titlesec 包更改章節上面的頂部邊距。示例:[1]
\usepackage{titlesec}
\titlespacing*{\chapter}{0pt}{-50pt}{20pt}
\titleformat{\chapter}[display]{\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
|
當更改章節的間距時,必須使用 \titleformat 命令。如果是節,則可以省略此命令。
頁面方向
[edit | edit source]當您談論更改頁面方向時,通常是指更改為橫向模式,因為縱向是預設模式。我們將介紹兩種略有不同的更改方向的樣式。
更改整個文件的方向
[edit | edit source]第一個方法適用於您希望從一開始就將整個文件設定為橫向。 有很多軟體包可用於實現這一點,但我們首選的是 geometry 軟體包。 您只需要呼叫該軟體包,並將landscape作為選項。
\usepackage[landscape]{geometry}
|
但是,如果您打算使用 geometry 設定紙張大小,請不要新增 \usepackage 命令兩次,只需將所有選項串在一起,用逗號分隔。
\usepackage[a4paper,landscape]{geometry}
|
使用標準的 LaTeX 類,您可以使用相同的類選項。
\documentclass[a4paper,landscape]{article}
|
更改特定部分的頁面方向
[edit | edit source]第二種方法適用於您以縱向編寫文件,但有一些內容,例如大型圖表或表格,在橫向頁面上顯示效果更好。 但是,您仍然希望頁首和頁尾在與其他頁面相同的位置顯示。
lscape 軟體包就是為此目的而設計的。 它提供了一個 landscape 環境,環境中的任何內容都基本上是旋轉的。 不會更改實際頁面尺寸。 這種方法更適用於書籍或報告,而不是典型的學術出版物。 使用 pdflscape 代替 lscape 生成 PDF 文件時,頁面在檢視時會保持正向顯示:處於橫向格式的單頁將被旋轉,而其餘頁面將保持縱向方向。
此外,要使表格在橫向頁面上正確居中,必須將 tabular 環境置於 table 環境中,而 table 環境本身位於 landscape 環境中。 例如,它應該看起來像這樣
\usepackage{pdflscape}
% ...
\begin{landscape}
\begin{table}
\centering % optional, probably makes it look better to have it centered on the page
\begin{tabular}{....}
% ...
\end{tabular}
\end{table}
\end{landscape}
|
對於書籍(以及通常使用twoside選項的文件),landscape-環境不幸地沒有關注偶數頁和奇數頁的不同佈局。 該宏可以使用序言中的幾行額外程式碼進行修復[4]。
更改浮動環境的頁面方向
[edit | edit source]如果您使用上述程式碼,您會發現表格被插入到程式碼中的位置。 它不會漂浮! 要解決此問題,您需要 rotating 軟體包。 請參閱 Rotations 章節。
特定頁面的邊距、頁面大小和旋轉
[edit | edit source]如果您需要旋轉頁面以使圖形適合,那麼您很可能也需要縮放邊距和字型大小。 同樣, geometry 軟體包在為單個頁面指定新邊距方面非常有用。
\usepackage{geometry}
\usepackage{pdflscape}
% ...
\newgeometry{margin=1cm}
\begin{landscape}
\thispagestyle{empty} %% Remove header and footer.
\begin{table}
\begin{center}
\footnotesize %% Smaller font size.
\begin{tabular}{....}
% ...
\end{tabular}
\end{center}
\end{table}
\end{landscape}
\restoregeometry
|
請注意,順序很重要!
頁面背景
[edit | edit source]有很多方法可以實現頁面的背景。 以下是最常用的軟體包
- eso-pic 軟體包允許您在每一頁或單個頁面的背景中列印內容。
\usepackage{tikz} % for \gradientbox below.
\usepackage{eso-pic}
\newcommand{\gradientbox}[3]{%
\begin{tikzpicture}
\node[left color=#1,right color=#2] {#3};
\end{tikzpicture}%
}
\AddToShipoutPicture*{%
\AtPageLowerLeft{%
\rotatebox{90}{
\gradientbox{blue!20}{white}{%
\begin{minipage}{\paperheight}%
\hspace*{ \stretch{1} }\textcopyright~2013 \makeatletter\@author\makeatother.\hspace*{ \stretch{1} }
\end{minipage}%
}
}%
}%
}
|
\AddToShipoutPicture 命令的帶星號版本僅適用於當前頁面。
- background 軟體包允許使用者在背景中包含水印和圖片。
\usepackage{background}
\backgroundsetup{
opacity = 0.5,
angle = 0,
contents = {\includegraphics{example.pdf} }
|
多欄頁面
[edit | edit source]使用twocolumn可選類引數
[edit | edit source]使用標準的 LaTeX 文件類,如 article,您可以簡單地將可選引數twocolumn傳遞給文件類:\documentclass[twocolumn]{article},這將產生所需的效果。
雖然這種方法很有用,但它也存在侷限性。 multicol 軟體包提供了以下優點
- 可以支援多達十列。
- 實現了一個multicols環境,因此可以混合文件中的列數。
- 此外,該環境可以巢狀在其他環境中,例如 figure。
- multicol 輸出平衡列,最後一頁上的列長度大致相等。
- 使用multicols*環境來建立不平衡列,其中每列完全填滿後再開始下一列。
- 可以自定義列之間的垂直規則。
- 列環境可以輕鬆地在本地或全域性自定義。
使用 multicol 軟體包
[edit | edit source]multicol 軟體包克服了twocolumn 的一些缺點,並提供了 multicol 環境。 要建立一個典型的兩欄佈局
\begin{multicols}{2}
lots of text
\end{multicols}
|
浮動物件不受此環境完全支援。 它只能在您使用浮動命令的帶星號形式(例如 \begin{figure*})時才能處理,這使得浮動物件跨越所有列。 這並不是一個大問題,因為與列寬度相同的浮動物件可能太小,而且您可能也希望跨越它們。 有關更詳細的討論,請參閱 本節。
multicol 軟體包有兩個重要的引數,可以使用 設定,方法是使用 \setlength
\columnseprule,設定列之間垂直規則的寬度,預設值為 0pt\columnsep,設定列之間的水平間距,預設值為 10pt,這相當窄
要強制在列中換行,可以使用 \columnbreak 命令。
手動頁面格式設定
[edit | edit source]可能存在一些情況,尤其是在非常長的文件(例如書籍)中,LaTeX 無法使所有頁面斷行看起來儘可能好。 因此,可能需要手動調整頁面格式。 當然,您應該只在製作文件的最後階段執行此操作,即所有內容都已完成之後。 LaTeX 提供以下內容
\newpage
|
結束當前頁面並開始新頁面。 |
\pagebreak[number]
|
在命令所在的位置斷開當前頁面。 可選的number引數在 0 到 4 的範圍內設定優先順序。 |
\nopagebreak[number]
|
阻止頁面在命令所在的位置斷開。 可選的number引數在 0 到 4 的範圍內設定優先順序。 |
\clearpage
|
結束當前頁面,並導致輸入中遇到的但尚未出現的任何浮動內容被列印。 |
在專業書籍中,在頁面開頭或結尾出現單行是不希望看到的。在排版中,這種情況被稱為“寡婦行”和“孤兒行”。通常情況下,寡婦行和孤兒行可能出現在 LaTeX 文件中。你可以嘗試使用手動頁面格式來解決它們,但也有自動解決方案。
LaTeX 針對寡婦行和孤兒行(在 LaTeX 術語中稱為“俱樂部行”)有一個“懲罰”引數。懲罰值越高,LaTeX 將越努力避免寡婦行和孤兒行。你可以嘗試透過在你的文件序言中新增以下命令來增加這些懲罰值。
\widowpenalty=300
\clubpenalty=300
|
如果這不起作用,你可以嘗試進一步增加這些值,最大值是 10000。但是,不建議將此值設定得太高,因為將其設定為 10000 會完全禁止 LaTeX 執行此操作,這可能會導致奇怪的行為。
段落之間使用橡皮筋值也有幫助。
\setlength{\parskip}{3ex plus 2ex minus 2ex}
|
或者,你可以使用needspace包來保留一些行,從而防止這些行發生頁面斷行。
\needspace{5\baselineskip}
Some
text
on
5
lines.
|
一個非常有用的故障排除和設計技巧是在 geometry 包中開啟 showframe 選項(它與上面描述的 showframe 包具有相同的效果)。它會在主要頁面元素周圍繪製邊界框,這很有幫助,因為各種區域的邊界通常是不可見的,並且會受到填充空白的複雜影響。
\usepackage[showframe]{geometry}
|
檢查 tex 的日誌也很有幫助 - 它應該提供許多有用的資訊。此外,以下包可以幫助進行視覺除錯佈局
%\usepackage{layout}
%\usepackage{showframe}
% \layout % - place it inside "document" section to see the layout where you need it more conveniently
|
它將列印佈局和框架。這些語句可以在原始檔頂部,並在需要時取消註釋。
本頁面使用來自 Andy Roberts 的 Getting to grips with LaTeX 的材料,經作者許可。

