Align – How to Align Arrows in a Fraction with Arrows of Non-Fraction Equations

alignfractions

I was wondering how to align the arrows \to and \xrightarrow in the numerator and denominator of the fraction with the arrows \xrightarrow of the other equations? Thanks.

\begin{align*}
  \frac{ e \to_\lambda e'}
       {
         \alpha, [R \blacktriangleright e \blacktriangleleft]_a \parallel \mu
         \xrightarrow[]{[\text{fun}:a]}
         \alpha, [R \blacktriangleright e' \blacktriangleleft]_a \parallel \mu
       }
 \\
  \alpha, [R \blacktriangleright \texttt{new}(b) \blacktriangleleft]_a \parallel \mu
&  \xrightarrow[]{[\text{new}:a,a']}
  \alpha, [R \blacktriangleright a' \blacktriangleleft]_a, [\texttt{ready}(b)]_{a'} \parallel \mu 
 \\
  \alpha, [R \blacktriangleright \texttt{send}(a',v) \blacktriangleleft]_a \parallel \mu
&  \xrightarrow[]{[\text{snd}:a]}
  \alpha, [R \blacktriangleright \texttt{nil} \blacktriangleleft]_a \parallel \mu \uplus \{ \langle a' \Leftarrow v \rangle \}
 \\
  \alpha, [R \blacktriangleright \texttt{ready}(b) \blacktriangleleft]_a \parallel \{ \langle a \Leftarrow v \rangle \uplus \mu
&  \xrightarrow[]{[\text{rcv}:a,v]}
  \alpha, [b(v)]_a \parallel \mu
\end{align*}

enter image description here

Best Answer

I believe you used the fraction just to get a divider line.

\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{array}
\usepackage{booktabs}

\newcommand{\qt}[1]{\blacktriangleright #1 \blacktriangleleft}

\begin{document}

\begin{equation*}
\setlength{\arraycolsep}{0pt}
\begin{array}{ r >{{}}c<{{}} l }
 e & \to_\lambda & e' \\
\midrule
\alpha, [R \qt{e}]_a \parallel \mu 
& \xrightarrow[]{[\text{fun}:a]} &
\alpha, [R \qt{e'}]_a \parallel \mu
\\\addlinespace
\alpha, [R \qt{\texttt{new}(b)}]_a \parallel \mu
& \xrightarrow[]{[\text{new}:a,a']} &
\alpha, [R \qt{a'}]_a, [\texttt{ready}(b)]_{a'} \parallel \mu 
\\\addlinespace
\alpha, [R \qt{\texttt{send}(a',v)}]_a \parallel \mu
& \xrightarrow[]{[\text{snd}:a]} &
\alpha, [R \qt{\texttt{nil}}]_a \parallel \mu \uplus \{ \langle a' \Leftarrow v \rangle \}
\\\addlinespace
\alpha, [R \qt{\texttt{ready}(b)}]_a \parallel \{ \langle a \Leftarrow v \rangle \} \uplus \mu
& \xrightarrow[]{[\text{rcv}:a,v]} &
\alpha, [b(v)]_a \parallel \mu
\end{array}
\end{equation*}

\end{document}

enter image description here

If you want to equalize all arrows:

\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{array}
\usepackage{booktabs}

\newcommand{\qt}[1]{\blacktriangleright #1 \blacktriangleleft}

\newlength{\arlength}

\begin{document}

\begin{equation*}
\settowidth{\arlength}{$\scriptstyle[\text{new}:a,a']$}
% define a local helper command
\newcommand{\Arrow}[1]{\xrightarrow{\makebox[\arlength]{$\scriptstyle#1$}}}
\setlength{\arraycolsep}{0pt}
\begin{array}{ r >{{}}c<{{}} l }
 e & \multicolumn{1}{>{$}c<{$}}{\;\rightarrowfill$_\lambda$\;} & e' \\
\midrule
\alpha, [R \qt{e}]_a \parallel \mu 
& \Arrow{[\text{fun}:a]} &
\alpha, [R \qt{e'}]_a \parallel \mu
\\\addlinespace
\alpha, [R \qt{\texttt{new}(b)}]_a \parallel \mu
& \Arrow{[\text{new}:a,a']} &
\alpha, [R \qt{a'}]_a, [\texttt{ready}(b)]_{a'} \parallel \mu 
\\\addlinespace
\alpha, [R \qt{\texttt{send}(a',v)}]_a \parallel \mu
& \Arrow{[\text{snd}:a]} &
\alpha, [R \qt{\texttt{nil}}]_a \parallel \mu \uplus \{ \langle a' \Leftarrow v \rangle \}
\\\addlinespace
\alpha, [R \qt{\texttt{ready}(b)}]_a \parallel \{ \langle a \Leftarrow v \rangle \} \uplus \mu
& \Arrow{[\text{rcv}:a,v]} &
\alpha, [b(v)]_a \parallel \mu
\end{array}
\end{equation*}

\end{document}

enter image description here

You can emulate a fraction in the first two rows by trimming a \cmidrule:

\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{array}
\usepackage{booktabs}

\newcommand{\qt}[1]{\blacktriangleright #1 \blacktriangleleft}

\newlength{\arlength}

\begin{document}

\begin{equation*}
\settowidth{\arlength}{$\scriptstyle[\text{new}:a,a']$}
\newcommand{\Arrow}[1]{\xrightarrow{\makebox[\arlength]{$\scriptstyle#1$}}}
\setlength{\arraycolsep}{0pt}
\begin{array}{ r >{{}}c<{{}} l }
e & \multicolumn{1}{>{$}c<{$}}{\;\rightarrowfill$_\lambda$\;} & e'
\\
\cmidrule[\fontdimen8\textfont3](l{8.7em}r{6.5em}){1-3}
\alpha, [R \qt{e}]_a \parallel \mu
& \Arrow{[\text{fun}:a]} &
\alpha, [R \qt{e'}]_a \parallel \mu
\\\addlinespace
\alpha, [R \qt{\texttt{new}(b)}]_a \parallel \mu
& \Arrow{[\text{new}:a,a']} &
\alpha, [R \qt{a'}]_a, [\texttt{ready}(b)]_{a'} \parallel \mu
\\\addlinespace
\alpha, [R \qt{\texttt{send}(a',v)}]_a \parallel \mu
& \Arrow{[\text{snd}:a]} &
\alpha, [R \qt{\texttt{nil}}]_a \parallel \mu \uplus \{ \langle a' \Leftarrow v \rangle \}
\\\addlinespace
\alpha, [R \qt{\texttt{ready}(b)}]_a \parallel \{ \langle a \Leftarrow v \rangle \} \uplus \mu
& \Arrow{[\text{rcv}:a,v]} &
\alpha, [b(v)]_a \parallel \mu
\end{array}
\end{equation*}

\end{document}

enter image description here

The amount of trimming has been computed by eye; it could be possible to measure it more precisely.