当没有组时,为什么无法使用 \par 处理 \centering?

当没有组时,为什么无法使用 \par 处理 \centering?

这是我上一个问题的后续,为什么我无法将群组置于中心?

我问为什么不能使用 \centering 来将组居中。我得到的答案是,当发现 \par(或空白行)时,将处理段落。并且只有当我在关闭组之前留下空白行/ \par 命令时,它才会处理 \centering 命令。

好吧,成功了。但是,根据这个解释,我在想如果我做类似的事情

\centering 这是一个文本

这是另一段文字

或者

\centering 这是一段文本 \par 这是另一段文本

“这是另一段文本”不应居中,因为“这是一段文本”段落以空行 / \par 结尾。

我错在什么地方?

谢谢

答案1

\centering是一项宣言,因此其范围延伸至“永远”,但“永远”的意思是“直到发布宣言的组结束”。

在你的情况下\centering是在顶层发布的,因此其范围延伸到文档末尾,除非被类似的声明(如\raggedright或 )所撤销\raggedleft \uncentering声明,因此分组是必要的。

然而,根据 TeX 的规则,段落在执行时会设置一些相关参数的值\par

因此,正如你之前的问题一样,

{\centering This text will not be centered}

And neither this one

将排版两个正常对齐的段落,因为\par空行所隐含的在的范围\centering结束时起作用,将段落参数恢复为之前的值{

如果你想要居中文本,然后是两端对齐的文本,你需要这样做段落:

{\centering This text will be centered\par}
\noindent And this text will start from the left margin.

然而,良好的排版要求居中部分与对齐部分分开:

\begin{center}
This text will be centered
\end{center}
And this text will start from the left margin.

例子

\documentclass{article}

\begin{document}

\section{Bad}

{\centering This text will not be centered}

And neither this one

\section{Ugly}

{\centering This text will be centered\par}
\noindent And this text will start from the left margin.

\section{Good}

\begin{center}
This text will be centered
\end{center}
And this text will start from the left margin.

\end{document}

在此处输入图片描述

答案2

并且仅当我在关闭组之前留下一个空行/ \par 命令时,它才会处理 \centering 命令。

这是误导。\centering对某些参数有直接影响。然而,只有这些参数的值在当时\par段落构建器由(空白行显式或隐式)触发,将影响段落形状。

因此,该命令会被立即“处理”,但如果一个组在下一个组之前关闭,或者另一个命令再次重置段落参数(主要是左跳、右跳),\centering则可能没有任何效果。\par

请注意,这同样适用于\baselineskip例如。

也许,不要使用具有误导性的 LaTeX2e“命令”术语。TeX 是一种宏扩展语言,并且\centering是一种宏。

$ latexdef centering

\centering:
macro:->\let \\\@centercr \rightskip \@flushglue \leftskip \@flushglue \parindent \z@ \parfillskip \z@skip

正如我们在上文中看到的,它执行了一些分配。如果组关闭,这些分配将被取消。如果在之前发生这种情况\par,则对段落生成器的影响将为零。

相关内容