这是我上一个问题的后续,为什么我无法将群组置于中心?
我问为什么不能使用 \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
,则对段落生成器的影响将为零。