Latex 中行距學習筆記


Latex中定義行距=基本距離X伸展因子。所以在Latex中更改文章的行距有兩種方法。一個是改變基本距離,一個是改變行距。


1. 基本距離:

  • 在Latex中有個值\baselineskip 表示基本距離。每個字號都對應一個自然的基本距離(為字號的1.2倍)。在article中。如果我們不指定伸展因子。則行距就是每種字號對應的基本距離。在ctexart中,由於是中文文檔類,伸展因子默認為1.3 所以如果不指定伸展因子,行距為文中字號對應基本距離的1.3倍。
  • 改變方法:\fnotsize{字號}{基本距離}\selectfont
  • \baselineskip作用范圍為段落。且一個段落只能有一種\baselineskip存在。例:
    \documentclass[UTF]{ctexart}
    \usepackage{setspace}
    \begin{document}
    \section{test-one}
    \noindent
    \fontsize{20pt}{40pt}\selectfont
    abcd\\
    abcd\\
    abcd\\
    \fontsize{10pt}{20pt}\selectfont
    abcd\\
    abcd\\
    abcd\\
    %以上兩段行距的\baselineskip均為20 行距為1.3*20=26
    \section{test-two} 
    \noindent
    abcd\\
    abcd\\
    abcd\\
    \normalsize   %此時行距為normalsize對應\baselineskip
    abcd\\
    abcd\\
    abcd\\
    \end{document}

ex1

 

2.伸展因子

在latex 中由 \baselinestretch 這個變量表示。從上文看出用修改\baselineskip來修改行距非常不方便。特別是當一個段落有多個字體更難實現。而通過改變伸展因子可以很方便達到這個效果。\baselinestretch是一個全局量。不限於paragraph 。從這個量開始設置起,下邊的內容都是使用這個量。直到它重新定義。

改變方法:\linespread{因子}\selectfont 或者\setstretch{因子}

例:

\documentclass[UTF]{ctexart}
\usepackage{setspace}
\begin{document}
\section{test-one}
\noindent
\setstretch{1}
abcd\\
abcd\\
abcd\\ 
\setstretch{2}
abcd\\
abcd\\
abcd\\
\section{test-two} 
\noindent
abcd\\
abcd\\
abcd\\
\setstretch{3}
abcd\\
abcd\\
abcd\\
\end{document}

ex2

而將原文檔改成:

\documentclass[UTF]{ctexart}
\usepackage{setspace}
\begin{document}
\section{test-one}
\noindent
\setstretch{1}
abcd\\
abcd\\
abcd\\ 

\setstretch{2}
abcd\\
abcd\\
abcd\\
\section{test-two} 
\noindent
abcd\\
abcd\\
abcd\\

\setstretch{3}
abcd\\
abcd\\
abcd\\
\end{document}

ex3

會出現預想的效果。這個我也不太清楚是為什么。

這樣做明顯也不是很方便。所以常用的做法是這樣:

\documentclass[UTF]{ctexart}
\usepackage{setspace}
\begin{document}
\section{test-one}
\begin{spacing}{1}
床前明月光\\
床前明月光\\
床前明月光\\
床前明月光\\
\end{spacing}
\begin{spacing}{2}
床前明月光\\
床前明月光\\
床前明月光\\
床前明月光\\
\\
\end{spacing}
\begin{spacing}{0.4}
床前明月光\\
床前明月光\\
床前明月光\\
床前明月光\\
\end{spacing}
床前明月光\\
床前明月光\\
床前明月光\\
床前明月光\\
\end{document}

ex4

3.\lineskip 前一行下界與后一行上界距離。

4.\lineskipstretch 當小於此值時,baselineskip失效,行距由\lineskip控制。

例:

\documentclass[UTF]{ctexart}
\usepackage{setspace}
\lineskiplimit=5pt
\lineskip=6pt
\begin{document}
\section{test-one}
\begin{spacing}{1}
床前明月光\\
床前明月光\\
床前明月光\\
床前明月光\\
\end{spacing}
\begin{spacing}{2}
床前明月光\\
床前明月光\\
床前明月光\\
床前明月光\\
\\
\end{spacing}
\begin{spacing}{0.4}
床前明月光\\
床前明月光\\
床前明月光\\
床前明月光\\
\end{spacing}
床前明月光\\
床前明月光\\
床前明月光\\
床前明月光\\
\end{document}

ex5

可以看出第三個行間距明顯寬了。

附上ctex liam0205的解釋:liam0205.me/LaTeX-Linespace/

1. baseline 是什么。
TeX 中的每個字符都放在一個 box 里。每個 box 有 base (參考點)、width(寬度)、height(高度)、depth(深度),其中 height + depth = totalheigth (總高)。

若干字符的 box 組成一個詞的盒子,同樣這個盒子也有這樣幾個參數。TeX 斷行之后,會把這一行的所有盒子的 base 連接起來,連接成的線段就是 baseline.

如圖所示:


2. baselineskip 與因子。
每一行都有一條 baseline, 同一段落中相鄰兩行之間的 baseline 的間距稱為行距 (linespace). 顯然行距應當隨着字號的大小變化;若不然,則對於給定的行距數值,較大字號的內容部分顯得擁擠不堪。

行距中與字號相關的部分被記錄在 \baselineskip 這個宏當中,它的單位和字號的單位一樣,都是 pt ( 1pt = 1/72.27 inch). LaTeX 的默認情況下,\baselineskip 的值是當前字號的 1.2 倍——當字號為 10pt 時,\baselineskip 的值為 12pt. 

為了統一對不同字號的內容進行行距的調整,引入了因子的概念,這是一個數值,存在 \baselinestretch 這個宏里面。這是一個與字號無關的值,在 article 文檔類中它默認是 1, 在 ctexart 中默認是 1.3.

因此,根據 linespace = baselineskip * baselinestretch, 在 article 中默認行距是字號的 1.2 倍,而在 ctexart 中默認行距是字號的 1.56 倍。此外,提一下,Word 中的“單倍行距”/“雙倍行距”等名詞,指的是因子的數值為 1 或者 2 的時候的行距;相反 setspace 宏包的 “單倍”、“一倍半”、“雙倍”則是指行距相對於字號的倍數。

修改因子可以直接修改 baselinestretch 的值(\renewcommand),或者使用 \linespread{}\selectfont 來修改。然而為了保持與 LaTeX2e 的一致性,推薦使用后一種方法。setspace 宏包提供的 \setstretch 命令似乎做得更多一些:會同時修改數學公式、浮動體等的間距,使之與正文間距適應。

3. 作用范圍與生效條件
\baselinestretch 的值一旦給定,會一直作用到文檔末尾或者被新的值覆蓋;\baselineskip 的情況類似。因為 TeX 排版的過程是對一整段文字進行計算,在每個可能的斷行點計算總的 ``badness'' 最小的斷行模式,然后進行排版。所以每一段段內的行距,由最后被設置的(覆蓋了前面的)\baselineskip 和 \baselinestretch 決定。【你的問題在於,使用兩個反斜線 ``\\'' 不分段,只是強制斷行。除非必須,永遠不要用 ``\\''.】

\linespread 和 \fontsize{}{} 這類,必須在其后添加 \selectfont 才會生效。\setstretch 大致相當於 \linespread \selectfont, 使用之后直接生效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM