为什么换行符会在某些环境下使用改变大小的宏破坏行高?

为什么换行符会在某些环境下使用改变大小的宏破坏行高?

为什么换行符会在某些环境下使用改变大小的宏破坏行高?

我试图了解这三种方法之间有什么区别:

  1. \newenvironment
  2. 之间{}\begingroup/\endgroup
  3. 在里面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。但第二个段落(带有单词linebreaknot: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

从技术上讲,你对每个组件的操作并不相同。环境envminipage所有组件都有一个范围,\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}

相关内容