alignedat 的强制参数是什么?

alignedat 的强制参数是什么?

alignedat有一个强制性论点。但赫伯特(在他的mathmode.pdf)中写道:

在此处输入图片描述

我进行了反复试验,发现可以传递的最大数字是 1073741823,并且没有发生失败。

\documentclass[twocolumn]{article}
\usepackage[a4paper,margin=1cm]{geometry}
\usepackage{amsmath}
\begin{document}
\begin{enumerate}
    \item The degree of (C) is 3.
    \item The degree of (A) is 1.
    \item%
    $\!
    \begin{alignedat}[t]{1073741823}
      -3x(x+1)&-2x(x-1)\\
              &+4(x^2-3x-1)
                  &&=\rlap{$-3x^2-3x-2x^2+2x+v$} \\
              &   &&\hphantom{{}={}}{+}4x^2&&-12x-4\\
              &   &&=-3x^2 &&-3x-2x^2+2x+v \\
              &   &&       &&+4x^2-12x-4 \\
              &   &&=\rlap{$-x^2-13x-4$}
    \end{alignedat}
    $
\end{enumerate}
\end{document}

我的问题:这个论点是为了什么?如果没有必要,为什么它是强制性的?我认为这应该是一个可选论点。

答案1

“对齐”环境的定义是

\newenvironment{alignat}
 {\start@align\z@\st@rredfalse}
 {\endalign}
\newenvironment{xalignat}
 {\start@align\@ne\st@rredfalse}
 {\endalign}
\newenvironment{xxalignat}
 {\start@align\tw@\st@rredtrue}
 {\endalign}
\newenvironment{align}
 {\start@align\@ne\st@rredfalse\m@ne}
 {...}
\newenvironment{flalign}
 {\start@align\tw@\st@rredfalse\m@ne}
 {\endalign}

的第一个参数\start@align(有三个)是一个数字,表示需要哪种类型的对齐方式,与列间距有关;第二个参数声明\ifst@rred应该是什么意思(* 变体当然有\st@rredtrue),第三个参数是列组的数量,-1对于alignflalign没有预定义数量的列组,它是。在的情况下alignat,第三个参数是(明显的)参数(对于和也是\begin{alignat}一样)。xalignatxxalignat

列数(如果设置的话)对于以后容纳方程式编号的测量很重要。

有人可能会说参数 to\begin{alignat}并不是真正必要的,但由于人们使用环境来明确说明(两组)列之间的间距,因此数字对于让用户确定他们在哪里以及是否忘记了非常有用\\。也许该参数可以设为可选的,但它amsmath是 AMS-TeX 的直接后代,其中不使用可选参数;因此语法被保留了下来,我认为它有很好的用途。

因为是它alignedat的“内部”版本alignat必须具有相同的语法。并且对其实用性的考虑也相同。

答案2

嗯,我找到了一个理由不是使用较大的数字作为强制参数,而不是指定确切地精确的数字:这样如果意外忘记了\\行尾的尾标,就会发出错误消息。使用较大的数字不会导致错误消息:

在此处输入图片描述

笔记:

  • 现在我重新阅读了这些评论,我认为这是沃纳休斯在他们的评论中,但直到我刚才真正遇到这个问题时我才明白这一点。

  • 下面的例子使用了alignat*,但alignedat表现出了类似的问题。

代码:

\documentclass{article}
\usepackage{amsmath}

\begin{document}
\noindent
This will flag an error \verb|Package amsmath Error: Extra & on this line| if the double backslash is missing:
\begin{alignat*}{3}
    v_5 &= v_4 - v_3 +1 &&= 1 - 3 +1 &&= 1, \\
    v_6 &= v_5 - v_4 +1 &&= 1 - 1 +1 &&= 0,
\end{alignat*}
But if a large number is used \LaTeX will happily typeset it without warning:
\begin{alignat*}{999}
    v_5 &= v_4 - v_3 +1 &&= 1 - 3 +1 &&= 1, 
    v_6 &= v_5 - v_4 +1 &&= 1 - 1 +1 &&= 0,
\end{alignat*}
\end{document}

答案3

简短回答:参数必须是-1。(但大家应该对我的回答持保留态度,因为“用户”的文档完全缺失,“开发人员”的文档与代码不匹配,而且代码难以理解。)

长答案:首先,有一种align具有微型防呆功能的变体:

  • 环境xalignat采用必需的参数;
  • 当是时-1,该环境等同于align
  • 当它为正数时,会检查方程组的数量 — — 如果&在一行中输入太多 's 则会发出警告。

注1:我无法想象这会在什么情况下有用——除非参数是1(我推测最常见的使用情况是align:有 1 个方程组有 2 个水平部分:第一个向右对齐,第二个向左对齐)。

笔记2:在代码中,我可以看到这个论点-1 可能有一些其他的副作用(预设alignsep@ ——但后来不会被覆盖吗?)我并不完全理解。

第二,返回alignat。这是xalignat;只有当方程组的数量大于 1 时,它才会有所不同(因此上述检查毫无意义),它没有将参数设置为 的快捷方式-1。现在,这引出了上面的“简短答案”。

答案很长:首先应该思考的是预期目的这个环境。我的猜测是,它实现了一个非常重要的功能,这是许多人都想实现的,但任何其他意思是;然而,由于没有记录,这个功能已经被完全遗忘了。

例如:制作一个类似物align,但使用对齐的 + 和 =

         a  +  b   = ccc + ddd + y    (23.11)
   x + aaa  +  bbb =   c + d          (23.12)
            ↑            ⇑

简而言之,我们应该

  • 对齐 +(用箭头标记)和 =,而
  • 向右冲洗标记加号左侧的内容,以及
  • 向左冲洗标记加号右侧的内容。

笔记:为了获得最佳效果,最好还允许“箭头上方的符号”不同(例如,× vs ·);然后需要中心箭头上方的符号。但是,据我所知,这是无法实现的(仅支持向左/向右刷新)。

至少如果我读开发者文档amsmath.dtx正确,这正是aligneat{-1}允许人们做的事情!不幸的是,我看不出文档与代码的匹配程度,因此不能绝对确定。

实验表明,这是有效的:

  \begin{alignat}{-1}
          a  & + {}&&   b  && = {}& ccc & + ddd + y \\
    x + aaa  & + {}&&  bbb && = {}& c   & + d        
  \end{alignat}

下面,我附加了1 +一些+'s 和=' 来表明这个“列”是向左冲

  \begin{alignat}{-1}
          a  &   +   {}&&   b  && = 1 + {}& ccc & + ddd + y \\
    x + aaa  & + 1 + {}&&  bbb &&   =   {}& c   & + d        
  \end{alignat}

它会将奇数列(以 分隔&)向右刷新,将偶数列向左刷新;因此我们需要插入空列来转换所需的格式

  R c L c R c L
  1 + 2 = 2 + 1

(带有+=符号c)到可能的

  R Ł r L r Ł R L
  1 +   2   = 2 +1

Ł是我们向左对齐的地方,最好是居中,并且r代表空的列(一对之间的一个&&)。(请注意,需要{}在二元运算符后插入右端。这样{}会自动插入到左对齐列的左端,这会导致上述代码不对称。)

笔记:在我看来,align类似 的环境组试图解决太多任务,而没有适当的正交性。例如,如果 的克隆允许某些“列”居中,并且某些列可扩展(作为 的“列”之后的间隙),alignat那么 可能是一个杀手级环境。align

例如,如果alignRCL要对齐模式中的列RCLRCLRCL…,那么可以gather将内容放在第二列中,也可以将alignat内容放在第 1、3、4、6、7、9 列中……。此外,还可以使用额外的宏\nogap来允许在L-columns 后留出可扩展的间隙(如align),该宏会抑制这些间隙。这样,就可以将和align的所有效果组合到一个灵活的环境中……——而且,我怀疑,这很可能是对少数 LoC 的编辑!alignatgather

为什么?想象一组等式,每行有几个等式,排列在网格中(如图所示align);但有些列需要gather编辑,有些需要多点对齐(如我上面的例子),有些只是简单的align内容。

还想要更多的蟑螂吗? 我上面讨论的是 的一种味道align;但最初的问题是关于 的一种味道aligned ——而我的答案是错误的alignedat!在alignedat{-1}(而不是alignat{-1})论点中-1 上面提到的副作用——因此它的行为类似于aligned

结论:使用 时alignedat,应该使用一些毫无意义的长参数(如999)而不是-1。但是,请注意,与使用格式alignedat相比, 几乎没有什么优势:它用零和支柱对 中的每个单元格进行排版,这可能是它所做的 99%……matrixrlrlrlrlrlrlrldisplaystylemathsurround

    \strut@
    \setboxz@h{\@lign$\m@th\displaystyle{##}$}%

附加问题:有人知道split里面有什么吗align(或gather)是什么吗应该实现?

相关内容