答案1
\documentclass{article}
\usepackage{libertine}
\usepackage[libertine]{newtxmath}
\begin{document}
\begin{tabular}{lr@{$\mskip\thickmuskip$}c@{$\mskip\thickmuskip$}ll}
\multicolumn{2}{l}{\textbf{Serverless Functions}} & & \multicolumn{2}{l}{$\langle f, \Sigma, \mathsf{recv}, \mathsf{step}_f, \mathsf{init} \rangle$} \\
Functions & $F$ & $\coloneq$ & $\cdots$ \\
Function name & $f$ & $\in$ & $F$ \\
Internal states & $\Sigma$ & $\coloneq$ & $\cdots$ \\
Initial state & $\mathsf{init}$ & $\in$ & $F \to \Sigma$ \\
Receive event & $\mathsf{recv}_f$ & $\in$ & $v \times \Sigma \to \Sigma$ \\
Internal step & $\mathsf{step}_f$ & $\in$ & $F \times \Sigma \to \Sigma \times t$ & With effect $t$ \\
Values & $v$ & $\coloneq$ & $\cdots$ & \textsc{json}, \textsc{http}, etc. \\
Commands & $t$ & $\coloneq$ & $\varepsilon$ \\
& & $\vert$ & $\mathbf{return}(v)$ & Return value \\
\end{tabular}
\end{document}
答案2
与使用包的@Henri Menke 答案(+1)有细微的不同tabularray
:
\documentclass{article}
\usepackage{libertine}
\usepackage[libertine]{newtxmath}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{colspec = {l Q[r,$] @{\;} Q[l,$] l},
rowsep = 1pt,
row{1} = {font=\bfseries}
}
\SetCell[c=2]{l} Serverless Functions
& & \SetCell[c=2]{c}
\langle f, \Sigma,
\mathsf{recv}, \mathsf{step}_f,
\mathsf{init} \rangle
& \\
Functions
& F & \coloneq\cdots & \\
Function name
& f & \in F & \\
Internal states
& \Sigma & \coloneq \cdots & \\
Initial state
& \mathsf{init} & \in F \to \Sigma & \\
Receive event
& \mathsf{recv}_f & \in v \times \Sigma \to \Sigma
& \\
Internal step
& \mathsf{step}_f & \in F \times \Sigma \to \Sigma \times t
& With effect $t$ \\
Values
& v & \coloneq \cdots & \textsc{json}, \textsc{http}, etc. \\
Commands
& t & \coloneq \varepsilon
& \\
& & \vert\quad \mathbf{return}(v)
& Return value \\
\end{tblr}
\end{document}
编辑:
上述解决方案适用于tabularray
最新的软件包版本(2021N 之后)。对于较旧的软件包版本,例如 Overleaf 中暂时可用的版本,不幸的是,它不起作用(因为列中的数学环境尚未定义)。因此,您需要使用具有本地定义math
环境的方法:例如:
\documentclass{article}
\usepackage{libertine}
\usepackage[libertine]{newtxmath}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{colspec = {l Q[r] @{\;} Q[l] l},
rowsep = 1pt,
row{1} = {font=\bfseries}
}
\SetCell[c=2]{l} Serverless Functions
& & \SetCell[c=2]{c} $\langle f, \Sigma,
\mathsf{recv}, \mathsf{step}_f,
\mathsf{init} \rangle$
& \\
Functions
& $F$ & $\coloneq\cdots$ & \\
Function name
& $f$ & $\in F$ & \\
Internal states
& $\Sigma$ & $\coloneq \cdots$ & \\
Initial state
& $\mathsf{init}$ & $\in F \to \Sigma$& \\
Receive event
& $\mathsf{recv}_f$ & $\in v \times \Sigma \to \Sigma$
& \\
Internal step
& $\mathsf{step}_f$ & $\in F \times \Sigma \to \Sigma \times t$
& With effect $t$ \\
Values
& $v$ & $\coloneq \cdots$ & \textsc{json}, \textsc{http}, etc. \\
Commands
& $t$ & $\coloneq \varepsilon$
& \\
& & $\vert\quad \mathbf{return}(v)$
& Return value \\
\end{tblr}
\end{document}
这给出了与第一个 MWE 相同的结果,但是定义“数学列”的优势却丢失了。
新版本tabularray
预计将于六月左右推出(TeXlive 2022 发布后)。
答案3
这是仅使用 amsmath align 环境的解决方案。第一行中的数学元素的间距并不完全符合您的要求,但也许已经足够了。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
&\text{\textbf{Serverless Functions}} ~ & \qquad &\langle f, \Sigma,
\text{\textbf{recv}}, \text{\textbf{step}}_f, \text{\textbf{init}} \rangle \\
&\text{Functions} & F &:= \cdots \\
&\text{Function name} & f &\in F \\
&\text{Internal states} & \Sigma &:= \cdots \\
&\text{Initial state} & \text{\textbf{init}} &\in F \rightarrow \Sigma \\
& \text{Receive event} & \text{\textbf{recv}}_f &\in v \times \Sigma \rightarrow \Sigma \\
& \text{Internal step} & \text{\textbf{step}}_f &\in F \times \Sigma \rightarrow \Sigma \times t & &\text{With effect $t$} \\
& \text{Values} & v &:= \cdots & &\text{JSON, HTTP, etc.} \\
& \text{Commands} & t &:= \varepsilon \\
& & &| \text{\quad \textbf{return}$(v)$} & &\text{Return value}
\end{align*}
\end{document}