我正在尝试排版类型派生树。
% \usepackage{amsmath}
% \usepackage{amssymb}
\newcommand*{\stext}[1]{\text{ #1 }}
\newcommand*{\sd}[1]{\rule[-#1]{\textwidth}{0.4pt}}
\begin{align*}
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y): num \rightarrow num \rightarrow num \qquad & T \vartriangleright{} 1 : num \sd{2ex} \\
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y)\, 1: num \rightarrow num \rightarrow num \qquad & T \vartriangleright{} 5 : num \sd{2ex} \\
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y)\, 1\enskip 5: num \rightarrow num \rightarrow num
\end{align*}
结果看起来不太好:
我真正想要的是这样的:
注意:
底线相对于环境中的其他线居中
水平分界线间距合适(垂直),从左侧开始,宽度正确
我也尝试过使用的方法\hline
,但间距是不可接受的:
\newcommand*{\sd}{\hline}
\begin{align*}
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y): num \rightarrow num \rightarrow num \qquad & T \vartriangleright{} 1 : num \\ \sd
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y)\, 1: num \rightarrow num \rightarrow num \qquad & T \vartriangleright{} 5 : num \\ \sd
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y)\, 1\enskip 5: num \rightarrow num \rightarrow num
\end{align*}
有没有更好的方法?align
这里是否可以使用正确的环境?
答案1
您将\sd
命令改为怎么样\newcommand*{\sd}{\\[-10pt]\hline\\[-10pt]}
?
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
\newcommand*{\sd}{\\[-10pt]\hline\\[-10pt]}
\begin{align*}
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y): num \rightarrow num \rightarrow num \qquad & T \vartriangleright{} 1 : num \\ \sd
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y)\, 1: num \rightarrow num \rightarrow num \qquad & T \vartriangleright{} 5 : num \\ \sd
T \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y)\, 1\enskip 5: num \rightarrow num \rightarrow num
\end{align*}
\end{document}
答案2
基于的这个解决方案怎么样booktabs
?
\documentclass{report}
\usepackage{mathtools}
\usepackage{amssymb}
\usepackage{booktabs}
\begin{document}
\begin{align*}
T & \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y): num \rightarrow num \rightarrow num & \quad & T \vartriangleright{} 1 : \\[-1.5ex]
\cmidrule{1-4}
T & \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y)\, 1: num \rightarrow num \rightarrow num & \quad & T \vartriangleright{} 5 : \\[-1.5ex]
\cmidrule{1-4}
T & \vartriangleright{} (\lambda x: num.\, \lambda y: num.\, x+y)\, 1\enskip 5: num \rightarrow num \rightarrow num
\end{align*}
\end{document}