我怎样才能很好地对齐这个等式?

我怎样才能很好地对齐这个等式?

我尝试在 lambda 演算中制定一些 lambda 表达式。它类似于代码,但我必须使用 align 环境,因为它包含数学符号。我想知道如何更好地制定它的结构?当前的表达式中间有很多不需要的空格,尽管它捕捉到了我想要的一些内容。

\begin{align*}
\text{cell} = & \text{rec} (& \lambda b.&\lambda c.  &\lambda m.&  \\
              &             & \text{if} &(\text{get?}&(m),      &  \\
              &             &           & \text{seq} &(\text{send}&(\text{contents}(m), c), & \text{ready}(b(c))), \\
              &             &           & \text{if}  &(\text{set?}&(m), & \\
              &             &           &            & \text{ready}&(b(\text{contents}(m))), & \\
              &             &           &            & \text{ready}&(b(c))))) 
\end{align*}

在此处输入图片描述

这就是我想要的

在此处输入图片描述

答案1

虽然不是你想要的,但是这样怎么样:

\documentclass{article}
\usepackage{mathtools, amssymb}

\begin{document}

\begin{alignat*}{4}
\text{cell} ={} & \text{rec} ( & & \lambda\mathrlap{ b.\lambda c. \lambda m.} \\
               & & & \text{if} &( & \mathrlap{\text{get?}(m),} \\
               & & & & & \text{seq} &( & \text{send}(\text{contents}(m), c), \\
               & & & & & & & \text{ready}(b(c))), \\
               & & & & & \text{if}\:( & & \text{set?}(m),\\
               & & & & & & & \text{ready}(b(\text{contents}(m))), \\
               & & & & & & & \text{ready}(b(c)))))
\end{alignat*}

\end{document} 

在此处输入图片描述

答案2

编码有点难,但是最简单而且足够快(这是您所需要的吗?):

在此处输入图片描述

\documentclass{article}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}




\begin{document}
\begin{align*}
\text{cell} =  \text{rec} (&\lambda b.\lambda c.\lambda m.\\
                           &\text{if} (\text{get?}(m), \\
                           &          \quad \text{seq} (\text{send}(\text{contents}(m), c),\\ 
                           & \qquad \quad \text{ready}(b(c))), \\
                           & \quad\text{if}  (\text{set?}(m), \\
                           &\qquad\text{ready}(b(\text{contents}(m))), \\
                           &\qquad\text{ready}(b(c))))) 
\end{align*}
\end{document}

答案3

如果你使用以下代码,你的代码可能会更好lambdax如果你使用此链接上的包,https://ctan.org/pkg/lambdax

要使用这个包,你应该从你的 TeX 发行版下载lambdax.stykeyparse.sty在 MikTeX 上答案是肯定的。)

阅读解释有写道这个包提供了 Lambda 表达式。这是你的目标。

这里有一个小例子,取自https://github.com/rogard/lambdax/blob/main/testfiles/lambdax-001.lvt

\documentclass{article}
\usepackage{lambdax}
\begin{document}
\ExplSyntaxOn
\START
\box_new:N \l_tmp_box
\hbox_set:Nn \l_tmp_box{\LambdaX{(#1)}{x}}
\box_use:N \l_tmp_box
%\END
\ExplSyntaxOff
\end{document}

相关内容