为什么`\everypar`会被下一段开头的一对非空括号所干扰?

为什么`\everypar`会被下一段开头的一对非空括号所干扰?

在自定义伪列表环境的末尾,我重新定义\@doendpe以防止环境后面的段落缩进,无论后面是否有空行\end{env}(第一种情况)或没有空行(第二种情况)。这适用于大多数用例(第一种到第三种情况)。

但是,如果紧跟在环境后面的段落开头有一对非空的花括号,则无缩进也会扩展到下一个段落(第 4 种情况)。如果组为空,则它会按预期工作(第 5 种情况):

\documentclass{article}
\parindent8mm
\author{}
\title{}

\makeatletter
\let\orig@doendpe\@doendpe
\newenvironment{mylist}
  {\list{}{%
      \leftmargin0pt
      \parindent0pt
      \bfseries\sffamily
    }\item\relax}
  {\endlist
   \gdef\@doendpe{%
     \@endpetrue
     \everypar{{\setbox\z@\lastbox}\everypar{}\@endpefalse}%
     \global\let\@doendpe\orig@doendpe}%
}
\makeatother

\begin{document}

\begin{mylist}
  1st case
\end{mylist}

test test test

test test test

test test test

\begin{mylist}
  2nd case
\end{mylist}
test test test

test test test

test test test

\begin{mylist}
  3rd case
\end{mylist}

[test test test]

test test test

test test test

\begin{mylist}
  4th case
\end{mylist}

{[}test test test{]}

test test test

test test test

\begin{mylist}
  5th case
\end{mylist}

{}test test test

test test test

test test test

\end{document}

输出:

上述代码的渲染输出

我想知道(1),为什么当括号后紧接着一对非空括号时,此解决方案会中断\end(以及为什么当括号为空时它不会中断)以及(2),我需要在环境的定义使其适用于所有五种用例。

答案1

案例 4 中的括号及其中的文本表示该段落以组为单位开始。在此组中\everypar执行,并且确实会重置自身,但仅限于本地,因此在组之后,重置自身的“doendpe-everypar”魔法再次失效。

您可以改用 para hook:

\documentclass{article}
\parindent8mm
\author{}
\title{}


\newenvironment{mylist}
  {\list{}{%
      \leftmargin0pt
      \parindent0pt
      \bfseries\sffamily
    }\item\relax}
  {\endlist\AddToHookNext{para/begin}{\OmitIndent}}


\begin{document}

\begin{mylist}
  1st case
\end{mylist}

test test test

test test test

test test test

\begin{mylist}
  2nd case
\end{mylist}
test test test

test test test

test test test

\begin{mylist}
  3rd case
\end{mylist}

[test test test]

test test test

test test test

\begin{mylist}
  4th case
\end{mylist}

{[}test test test{]}

test test test

test test test

\begin{mylist}
  5th case
\end{mylist}

{}test test test

test test test

test test test

\end{document}

在此处输入图片描述

相关内容