![\newenvironment 中的意外间距](https://linux22.com/image/362749/%5Cnewenvironment%20%E4%B8%AD%E7%9A%84%E6%84%8F%E5%A4%96%E9%97%B4%E8%B7%9D.png)
免责声明:我问这个问题是因为(1)我想解决这个问题,但是(2)还因为我想了解 LaTeX 内部发生了什么。因此,我并不是在寻找可以做到这一点的软件包,也不是在寻找关于我如何或为什么这样做的评论。我只是想要对这种行为的解释在这个特定的例子中。
我正在尝试使用 \newenvironment 命令创建一个新环境。以下是我所拥有的:
\documentclass[12pt]{article}
\newenvironment{mytitle}{
\begin{center}
\begin{minipage}{0.5\linewidth}
\begin{center}
\rule{\linewidth}{0.4pt}
\LARGE\bfseries
}{
\rule{\linewidth}{0.4pt}
\end{center}
\end{minipage}
\end{center}
}
\begin{document}
\begin{mytitle}
Lorem Ipsum Dipsum Gypsum
\end{mytitle}
\end{document}
结果:
问题:文本末尾和规则之间的空格从哪里来?我尝试过在各处放置百分号、更改值\parskip
、进行不同类型的换行等。这是什么原因造成的?自然的后续问题是如何摆脱它,以便它看起来更像这样:
答案1
芭芭拉在她的评论中正确地描述了这个问题,但解决方案需要的不仅仅是\par
:当在代码中绘制规则时,它位于\LARGE
段落的基线。因此,您需要结束该段落(这就是 的作用\par
),然后返回到正常基线(这就是 的\normalsize
作用。)
当 TeX 设置字体大小时,它会设置两个大小:字体大小本身和行距(基线高度)。因此,您的\LARGE
命令将字体大小设置为 18pt,将行距设置为 22pt。因此,一行的总高度为 22pt。此高度将保持不变,直到您更改它或组结束。因此,在您的代码中,规则绘制在 22pt 的行上,这就是额外的垂直空间的来源。
\normalsize
10pt 文档中的命令将字体大小设置为 10pt,基线为 12pt。只有在\par
发出命令结束上一段后才能执行此操作。
您实际上并不需要内部环境;这可以通过添加而不是删除内部来\begin{center} ... \end{center}
实现。\centering
\begin{center}
\end{center}
\documentclass[12pt]{article}
\newenvironment{mytitle}{
\begin{center}
\begin{minipage}[t]{0.5\linewidth}
\begin{center}
\rule{\linewidth}{0.4pt}
\LARGE\bfseries
}{ \par\normalsize
\rule{\linewidth}{0.4pt}
\end{center}
\end{minipage}
\end{center}
}
\begin{document}
\begin{mytitle}
Lorem Ipsum Dipsum Gypsum
\end{mytitle}
\end{document}
答案2
正确答案是 Alan Munn 的答案,但是,作为一种解决方法,您可以稍微提高一下规则,添加[.4\baselineskip]
,\rule
宏语法是:
\rule[raise]{width}{thickness}
至于\centering
环境center
,Barbara Beeton 已经在她的评论中回答过了,不过,请参见这里:何时应使用 \begin{center} 而不是 \centering?。
\documentclass[12pt]{article}
\newenvironment{mytitle}
{%
\begin{center}
\begin{minipage}{0.5\linewidth}
\rule{\linewidth}{0.4pt}
\LARGE\bfseries\centering
}{%
\rule[.4\baselineskip]{\linewidth}{0.4pt}
\end{minipage}
\end{center}
}
\begin{document}
\begin{mytitle}
Lorem Ipsum Dipsum Gypsum
\end{mytitle}
\end{document}