中心环境内部的行为

中心环境内部的行为

在尝试编写论文标题页时,我意识到我不理解的行为\\。考虑以下 MWE

\documentclass{memoir}
\begin{document}
\begin{center}
  {\Huge\bfseries%
    Eat fresh tires to\\[0.25\baselineskip]
    Get Ready to the Ultimate\\[0.25\baselineskip]
    Victory Against the\\[0.25\baselineskip]
    Dragons
  }% Title
\end{center}
\end{document}

这导致最后一行之前的间距不正确。似乎如下情况:

{\Huge\bfseries%
  Eat fresh tires to\\[0.25\baselineskip]
  Get Ready to the Ultimate\\[0.25\baselineskip]
  Victory Against the\\[0.5\baselineskip]
  Dragons
}% Title

或者

{\Huge\bfseries%
  Eat fresh tires to\\[0.25\baselineskip]
  Get Ready to the Ultimate\\[0.25\baselineskip]
  Victory Against the\\[0.25\baselineskip]
  Dragons\\
}% Title

可以作为一种解决方法。对我来说,它们都不是直观的。

  • 这里处理换行符的正确方法是什么(手动调整垂直间距)?
  • 为什么会发生这种情况?教我如何钓鱼。为什么\\会这样?在哪里记录

答案1

以下内容摘自TeX 按主题分类(部分17.2.1 同时结束段落和组,第 167 页):

如果段落设置在组中,则可能需要确保\par段落的结尾出现在组内。影响段落排版的参数(例如\leftskip\baselineskip)仅在段落结束时才会被查看。因此,用 结束段落

... last words.}\par

导致使用团体外部的价值观,而不是团体内部的价值观。

结束本段的更好方法是

... last words.\par}

或者

... last words.\medskip}

在第二个例子中,垂直命令\medskip 导致\par插入令牌。

由此可见,你应该在组结束前完成一个段落。但是,由于它center本身就构成了一个组,因此最简单的方法是使用

\begin{center}
  \Huge\bfseries%
    Eat fresh tires to\\[0.25\baselineskip]
    Get Ready to the Ultimate\\[0.25\baselineskip]
    Victory Against the\\[0.25\baselineskip]
    Dragons
\end{center}

并避开该群体/\par问题。


另一件需要意识到的事情是,center环境重新定义了工作方式\\。以下内容摘自latex.ltx(哪个memoir按原样使用)-我添加了一些评论:

\message{center,}
\def\@centercr{\ifhmode \unskip\else \@nolnerr\fi
       \par\@ifstar{\nobreak\@xcentercr}\@xcentercr}% \@centercr is \par (with more stuff)
\def\@xcentercr{\addvspace{-\parskip}\@ifnextchar
    [\@icentercr\ignorespaces}
\def\@icentercr[#1]{\vskip #1\ignorespaces}
\def\center{\trivlist \centering\item\relax}% \begin{center}
\def\endcenter{\endtrivlist}% \end{center}
\def\centering{% Called when using \begin{center}
  \let\\\@centercr% \\ is redefined to be \@centercr
  \rightskip\@flushglue\leftskip\@flushglue
  \parindent\z@\parfillskip\z@skip}

很明显,\\center类似\par,从而产生了一个你提到的解决方法

{
  ...
  Dragons\\
}% Title

答案2

不要使用环境{..}内部center,它已经是本地的了。然后你会\par在环境的末尾得到一个适当的center(由环境本身完成):

\documentclass{memoir}
\begin{document}
\begin{center}
  \Huge\bfseries%
    Eat fresh tires to\\[0.25\baselineskip]
    Get Ready to the Ultimate\\[0.25\baselineskip]
    Victory Against the\\[0.25\baselineskip]
    Dragons
\end{center}

default font size and shape
\end{document}

在此处输入图片描述

答案3

其他人都已经给出了显而易见的正确答案——该组需要以 来结束\par

但由于也希望统一开放基线,因此可以简化该示例:

\documentclass{memoir}
\begin{document}
\begin{center}
  {\Huge\bfseries
   \baselineskip=1.25\baselineskip
    Eat fresh tires to\\
    Get Ready to the Ultimate\\
    Victory Against the\\
    Dragons
    \par
  }% Title
\end{center}
\end{document}

答案4

这是因为环境中的段落尚未结束。我希望以下(等效的)解决方案之一对您来说是直观的。

\documentclass{memoir}
\begin{document}

\begin{center}
  {\Huge\bfseries%
    Eat fresh tires to\\[0.25\baselineskip]
    Get Ready to the Ultimate\\[0.25\baselineskip]
    Victory Against the\\[0.25\baselineskip]
    Dragons

  }% Title
\end{center}

\begin{center}
  {\Huge\bfseries%
    Eat fresh tires to\\[0.25\baselineskip]
    Get Ready to the Ultimate\\[0.25\baselineskip]
    Victory Against the\\[0.25\baselineskip]
    Dragons\par
  }% Title
\end{center}

在此处输入图片描述

相关内容