为什么 vspace 会在段落第一行后添加垂直空间?

为什么 vspace 会在段落第一行后添加垂直空间?

我已经使用以下命令定义了自定义文本字体命令:

\DeclareTextFontCommand{\desc}{
    \fontsize{11pt}{11pt}
    \fontseries{light}\selectfont
    \vspace{10px}
}

我是这样使用它的:

\desc{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at tempor ex. Praesent a luctus enim. Nam mauris odio, ornare at egestas ut, mollis aliquet est. Nunc a rutrum tortor. Suspendisse et odio rutrum, porta ipsum non, fermentum turpis.}

我预期在段落后有 10 像素的空间,但是该空间被添加到第一行后:

段落第一行后添加空格

另外,为什么我删除了段落缩进后第二行和第三行没有与第一行对齐?它们在页面边缘向左移动。

答案1

\vspace在调用的位置添加空格。例如,如果你写

Foo

\vspace{1in} 
Foo

段落之间的空格,而

Foo
\vspace{1in}    
Foo

把它放在第一行之后Foo。所以,我们当然应该看到,如果我们有

Foo

\desc{Foo}

段落之间有空格,对吧?不过你使用的\DeclareTextFontCommandwhich 的作用更大一些。具体来说,它的作用是:

\def \DeclareTextFontCommand #1#2{%
  \DeclareRobustCommand#1[1]{%
    \ifmmode
      \nfss@text{#2##1}%
    \else
      \hmode@bgroup % ❶
       \text@command{##1}%
       #2\check@icl ##1\check@icr
       \expandafter
\egroup \fi
}

❶ 是这里的关键行。\hmode@bgroup离开垂直模式(因此它开始段落),然后开始一个组。所以你的\vspace正在输出段落开始并位于第一行之后。

最有可能的是,您根本不想使用\DeclareTextFontCommand它。假设您想将其用作段落开头的标记,您可以改为这样做:

\NewDocumentCommand{ m }{%
   \par
   \vspace{10px}
   {%
      \fontsize{11pt}{11pt}%
      \fontseries{light}\selectfont
      #1
   }%   
}

以达到您想要的效果。

(附注:我px以前没有在 TeX 中看到过单位。它显然等同于bpPostScript 点的 1/72 英寸。TeXbook据我所知。显然是 eTeX 增强功能,因为如果我使用它,它是一个非法单元,tex但可以使用pdftex和所有 LaTeX 引擎要求.eTeX。

答案2

环境更易于使用,并解决了我的问题。第二个 {} 包含要在文本前应用的样式,第三个 {} 包含要在文本后应用的样式。

\newenvironment{desc}{%
    \fontsize{11pt}{11pt}%
    \fontseries{light}\selectfont%
    \begin{spacing}{1.1}%
}{\end{spacing}\vspace{10px}}

在每行后添加 % 解决了我的第二个问题。如果没有这些,空格会使文本向右移动。

相关内容