我已经使用以下命令定义了自定义文本字体命令:
\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}
段落之间有空格,对吧?不过你使用的\DeclareTextFontCommand
which 的作用更大一些。具体来说,它的作用是:
\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 中看到过单位。它显然等同于bp
PostScript 点的 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}}
在每行后添加 % 解决了我的第二个问题。如果没有这些,空格会使文本向右移动。