所有方程都以 $\to$ 对齐,其中顶部两个方程以 对齐countingUp
。中间两个方程以 对齐counter
。最后一个方程以 为中心对齐,就像gather
。
这是我所拥有的基础:
\begin{align*}
countingUp \wedge counter < 100 &\to [counter \leftarrow counter + 1] \\
\neg countingUp \wedge counter > 0 &\to [counter \leftarrow counter - 1] \\
counter = 100 &\to \neg countingUp \\
counter = 0 &\to countingUp \\
0 \leq~&counter \leq 100
\end{align*}
答案1
用于alignat*
手动选择对齐点。最后一行需要一点技巧:
\documentclass{article}
\usepackage{mathtools}% loads amsmath
\begin{document}
\begin{alignat*}{2}
\mathit{countingUp} \wedge \mathit{counter} &< 100 &&\to [\mathit{counter} \leftarrow \mathit{counter} + 1] \\
\neg \mathit{countingUp} \wedge \mathit{counter} &> 0 &&\to [\mathit{counter} \leftarrow \mathit{counter} - 1] \\
\mathit{counter} &= 100 &&\to \neg \mathit{countingUp} \\
\mathit{counter} &= 0 &&\to \mathit{countingUp} \\
0 &\leq \mathrlap{\mathit{counter} \leq 100}
\end{alignat*}
\end{document}
答案2
您可以gather*
在嵌套中使用前四行align*
,但结果不会很漂亮。
您可以使最后一行一半位于箭头前,一半位于箭头后。
在代码中,\tv
代表“文本变量”。使用语义命令将允许通过修改定义一次性更改所有这些对象的印刷实现。
\documentclass{article}
\usepackage{amsmath}
\newcommand{\tv}[1]{\mathit{#1}}
\begin{document}
\begin{align*}
\tv{countingUp} \wedge \tv{counter} < 100
&\to [\tv{counter} \leftarrow \tv{counter} + 1] \\
\neg \tv{countingUp} \wedge \tv{counter} > 0
&\to [\tv{counter} \leftarrow \tv{counter} - 1] \\
\tv{counter} = 100
&\to \neg \tv{countingUp} \\
\tv{counter} = 0
&\to \tv{countingUp} \\
&\makebox[0.5\width][r]{$\hphantom{\to{}}0 \leq counter \leq 100$}
\end{align*}
\end{document}
不过,我会考虑左对齐。
\begin{align*}
& \tv{countingUp} \wedge \tv{counter} < 100 \to [\tv{counter} \leftarrow \tv{counter} + 1] \\
& \neg \tv{countingUp} \wedge \tv{counter} > 0 \to [\tv{counter} \leftarrow \tv{counter} - 1] \\
& \tv{counter} = 100 \to \neg \tv{countingUp} \\
& \tv{counter} = 0 \to \tv{countingUp} \\
& 0 \leq counter \leq 100
\end{align*}