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, 使用之后直接生效。

posted @ 2013-10-17 21:43  小亮的铺子  阅读(8761)  评论(1编辑  收藏  举报