在“center”环境之后修改了 \par 的定义

在“center”环境之后修改了 \par 的定义

我已经重新定义了命令\par如下所示这篇TUGboat文章(第 232 页)。
但是当我使用环境时,center段落的结构会以奇怪的方式被修改(例如 if \parfillskip = 0pt)。
我不知道center环境为什么以及如何影响 的定义\par,您有什么想法吗?

\documentclass{article}
\usepackage{lipsum}

\let\oldpar\par

\def\newpar{%
\ifhmode\unskip%
    \strut\vadjust{}\nobreak%
    \discretionary{}%
        {\hbox{\hskip2\parindent%
            \vrule depth 273sp%
            width 0sp height \ht\strutbox}}%
        {\hbox{\hskip\parindent}}%
    \hskip-2\parindent minus 2\parindent%
    \hskip\hsize minus\hsize%
    \kern0pt\parfillskip0pt%
    \oldpar%
    \ifdim\prevdepth=273sp%
        \nobreak%
        \vskip-2\baselineskip%
        \hbox{\strut}%
    \fi%
\fi}

\AtBeginDocument{\def\par{\newpar}}

\begin{document}

\lipsum[1-2]

\begin{center}
\textbf{Bla bla}
\end{center}

\lipsum[1-2]

\end{document}

在此处输入图片描述

答案1

\end{center}(像几乎所有的 latex 显示和列表环境一样)最终执行\endtrivlist,进而执行\@doendpe定义为

\def\@doendpe{\@endpetrue
     \def\par{\@restorepar
              \clubpenalty\@clubpenalty
              \everypar{}\par\@endpefalse}\everypar
               {{\setbox\z@\lastbox}%
                \everypar{}\@endpefalse}}

这将重新定义\par以控制环境后的缩进。如果center前面有一个段落结束,则其后的文本将开始一个新段落。

章节标题使用类似的定义来\par抑制章节后第一段的缩进。

\par在其他几个地方被重新定义,特别是在表格中,minipage 所以基本上,问题中所建议的定义不能用作全局定义(没有在乳胶中进行更具侵入性的改变),但可以在仅由简单段落组成的受限环境中使用。

相关内容