考虑以下代码:
\documentclass{article}
\newcommand{\Field}[1]{
\vspace{2\baselineskip}%
{%
\fontsize{12.0pt}{14.4pt} \selectfont%
\noindent%
\rule{1.0in}{1.0pt}%
\noindent%
#1%
}%
}
\newcommand{\field}[1]{
\vspace{2\baselineskip}%
{%
\fontsize{12.0pt}{14.4pt} \selectfont%
\noindent%
\rule{1.0in}{1.0pt}%
\noindent%
#1%
}%
}
\begin{document}
\Field{By}
\hfill
\field{By}
\end{document}
\Field
观察发现和之间的唯一区别\field
在于\field
的定义中有一个额外的换行符。现在,在编译时, 的规则和 的文本之间有一个明显的额外垂直空间,\field
但 的没有\Field
。这是为什么呢?
答案1
这是常见的问题,任何字体更改命令都应在其范围内包含最后一段结束,否则该段落将设置为原来的基线跳过。
在\Field
字体大小发生变化但段落设置为规范化基线跳过的情况下,大小变化的范围在段落结束之前就结束了。
%
请注意,在几行末尾有不需要它们的地方(\noindent%
但定义在其他地方有几个虚假的空格字符,我在%%
这里标记了。
\newcommand{\field}[1]{%%
\vspace{2\baselineskip}%
{%
\fontsize{12.0pt}{14.4pt}%%
\selectfont
\noindent
\rule{1.0in}{1.0pt}%
\noindent
#1%
}%
}
\par
正如芭芭拉所说,在宏定义中使用会更清晰。