为什么换行符会在某些环境下使用改变大小的宏破坏行高?
我试图了解这三种方法之间有什么区别:
\newenvironment
- 之间
{}
或\begingroup
/\endgroup
- 在里面
minipage
\documentclass{article}
\begin{document}
\thispagestyle{empty}
\section{With newenvironment}
\newenvironment{env}{\begin{center}\LARGE}{\end{center}}
\begin{env}
Text with\\linebreak
\end{env}
\section{With begin/endgroup}
\begin{center}
{\LARGE
Text with\\linebreak}
\end{center}
\begin{center}
\begingroup
\LARGE
Text with\\linebreak
\endgroup
\end{center}
\section{With minipage}
\begin{center}
\begin{minipage}{\textwidth}\centering
\LARGE
Text with\\linebreak
\end{minipage}
\end{center}
\end{document}
答案1
让我们看看第一个例子发生了什么:
\begin{center}
{\LARGE
Text with\\linebreak}
\end{center}
您打开一个组(\begin
)并将 TeX 命令置于中心线;在此环境中\\
只需\par
添加一些代码即可使其遵循带有*
-variant 和可选间距参数的通常语法。
然后,您使用 打开另一个组{
(使用\begingroup
将是相同的,只要该组以\endgroup
而不是结尾}
)并在其中发出\LARGE
命令。
事实上,\\
这\par
意味着排版了两个段落;第一个段落设置了与 相关的基线跳过\LARGE
。但第二个段落(带有单词linebreak
not:center
环境确实发出了 来\par
结束环境,但这是\par
在以 开始的组{
结束时出现的,并且字体大小命令已被撤消。因此,第二段使用 时生效的 baselineskip 进行排版\end{center}
,即启动环境时的值center
。行不会重叠,因为 TeX 通常不会这样做(两行之间会有 1pt 的垂直空间,更准确地说是 的值\lineskip
)。
如何解决这个问题?很简单!
\begin{center}
\LARGE
Text with\\
linebreak
\end{center}
内部组没有好处,也有坏处。由 打开的组\begin
由 关闭,因此无论如何都会撤消\end
的设置。\LARGE
如果你在你的环境中这样做env
,你只需添加一个分组,但是
\begin{env}
Text with\\
linebreak
\end{env}
可以正常工作,因为它本质上解析为
\begingroup
\begin{center}
\LARGE
Text with\\
linebreak
\end{center}
\endgroup
\begin{env}
(外组由和提供\end{env}
),所以我上面所说的适用。
添加minipage
可能不是您想要的:只需查看此示例的输出即可了解原因:
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\begin{document}
\lipsum*[2]
\begin{center}
\LARGE
Text with\\
linebreak
\end{center}
\lipsum[2]
\newpage
\lipsum*[2]
\begin{center}
\begin{minipage}{\columnwidth}
\centering
\LARGE
Text with\\
linebreak
\end{minipage}
\end{center}
\lipsum[2]
\end{document}
为什么间距不同?minipage
右列的 高度和深度都很大,因此在小页面的上方和下方,TeX 使用粘合\lineskip
,而在左列中\baselineskip
使用 的规定值。
答案2
从技术上讲,你对每个组件的操作并不相同。环境env
和minipage
所有组件都有一个范围,\LARGE
该范围由环境以 结尾\par
。正是这个段落分隔符设置了整个内容 -包括基线跳过-采用适当的字体。
为了在您的示例中解决这个问题,请在字体格式化命令的范围内发出一个 par \LARGE
:
\documentclass{article}
\begin{document}
\thispagestyle{empty}
\section{With newenvironment}
\newenvironment{env}{\begin{center}\LARGE}{\end{center}}
\begin{env}
Text with\\linebreak
\end{env}
\section{With begin/endgroup}
\begin{center}
{\LARGE
Text with\\linebreak\par}% <---- Added \par
\end{center}
\begin{center}
\begingroup
\LARGE
Text with\\linebreak\par% <---- Added \par
\endgroup
\end{center}
\section{With minipage}
\begin{center}
\begin{minipage}{\textwidth}\centering
\LARGE
Text with\\linebreak
\end{minipage}
\end{center}