左对齐显示数学模式

左对齐显示数学模式

如何才能尽可能原始地实现左对齐显示数学,以便\abovedisplayshortskip仍然按预期工作?

据我了解,可以通过立即\halign内部显示数学模式实现左对齐,但是这使得(再次,据我了解)它占据了显示器的整个宽度,因此不可能存在\abovedisplayshortskip(或\belowditto)。

以下是我现在所拥有的:

Some text $$\displaylines{\kern2\parindent % i.e. \halign
  a + b = c
\hfill}$$ and so continues the paragraph. Until
\bye

答案1

我的第一个想法(你没有等待足够长的时间来获得我的答案)是将数学左对齐设置为比缩进值 \hbox短两倍的:\displaywidth

\newdimen\mydisplayboxwidth
\newdimen\mydisplayindent
\mydisplayindent 2\parindent % 
\noindent OK:
$$\mydisplayboxwidth\displaywidth
  \advance\mydisplayboxwidth-2\mydisplayindent
  \hbox to \mydisplayboxwidth
    {$\mathsurround0pt \displaystyle a + b = c$\hss}
\eqno(1)$$
and so continues the paragraph.
\bye

答案2

没人回答?很抱歉,我做了一件不可思议的事,自己回答了我自己的问题。

感谢@Thruston 从 The TeXbook (第 190 页) 中找到相关部分:

TeX 还允许“对齐显示”,它们不会在数学模式下处理,因为它们在外层不包含公式。对齐显示由以下通用形式的命令创建

$$<assignments>\halign{<alignment>}<assignments>$$

其中<assignments>是可选内容,例如参数更改,不会产生任何数学列表。在此类显示中, 的\halign处理方式与垂直模式完全相同,它会v像往常一样构建垂直列表,但对齐的每一行将移动\displayindent。在处理完对齐和结束赋值之后,TeX 会在主垂直列表中放置一个\predisplaypenalty项目和一些粘连,然后是,接着是项目和粘连。\abovedisplayskipv\postdisplaypenalty\belowdisplayskip

(重点是我的。)

因此,基于这些知识,可以对\displaylines带有缩进的 -like 命令执行类似以下的操作(我省略了它所做的所有其他事情):

\everydisplay={\displayindent=3\parindent}

\def\indentlines#1{
  \halign{
    \mathsurround=0pt
    $\displaystyle ##\hfil$\crcr
    \noalign{
      \ifdim\predisplaysize<\displayindent
        \kern-\abovedisplayskip\vskip\abovedisplayshortskip
      \fi}
    #1\crcr}}

\hsize=38em
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie
consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan
et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis
dolore te feugait nulla facilisi.$$
  \indentlines{ a + b = c. }
$$ Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
labore et dolore magna aliquyam erat, sed diam voluptua.
\bye

由于某种原因,\displayindent需要在显示数学模式内部而不是外部进行设置。

相关内容