我正在尝试创建一个与 Aarne Ranta 所著的“实现编程语言”一书中的推理规则大致类似的规则:
\vdash
我希望角色在场景中水平对齐。我正在使用prftree
包,并且文档第 10 节特别提到,没有内置功能可以实现这一点。
为了模拟外观,我尝试使用两个\prfStackPremises
相邻的,一个用于环境(s \gamma
),一个用于评估。这几乎可以正常工作,但我无法让环境右对齐,评估左对齐,就像上图所示。这是我现在拥有的 MWE:
\documentclass{article}
\usepackage{prftree}
\begin{document}
\begin{displaymath}
\begin{prfenv}
\prftree[r]{\textsc{EApp}}
{
\prfStackPremises
{\gamma}
{\gamma_1}
{\dots}
{\gamma_{n-1}}
{\gamma \triangleright id_1 := v_1, \dots, id_n := v_n}
}
{
\prfStackPremises
{\vdash_e e_1 \Downarrow \langle v_1,\gamma_1 \rangle}
{\vdash_e e_2 \Downarrow \langle v_2,\gamma_2 \rangle}
{\dots}
{\vdash_e e_n \Downarrow \langle v_n,\gamma_n \rangle}
{\vdash_s stmts \Downarrow \langle v, \gamma' \rangle}
}
{\gamma \vdash_e id(e_1, \dots, e_n) \Downarrow \gamma''}
\end{prfenv}
\end{displaymath}
\end{document}
排版内容如下:
正如您所见,堆叠的前提是中心对齐的,而我希望它们分别右对齐和左对齐。
我尝试过使用\hfill
,但\tag*{}
无济于事。我还查看了文档中关于水平对齐的任何提及,但没有看到任何内容。如果可以简化此操作,我愿意使用其他软件包。提前感谢您提供的帮助!
答案1
这个包ebproof
正是我最终需要的。它内置了对齐功能!这是该 MWE 的修复版本,每个vdash
es 旁边都有对齐字符:
\documentclass{article}
\usepackage{ebproof}
\begin{document}
\[
\begin{prooftree}
\hypo{\gamma &\vdash_e e_1 \Downarrow \langle v_1,\gamma_1 \rangle}
\infer[no rule]1{\gamma_1 &\vdash_e e_2 \Downarrow \langle v_2,\gamma_2 \rangle}
\infer[no rule]1{\vdots&}
\infer[no rule]1{\gamma_{n-1} &\vdash_e e_n \Downarrow \langle v_n,\gamma_n \rangle}
\infer[no rule]1{\gamma \triangleright id_1 := v_1, \dots, id_n := v_n &\vdash_s stmts \Downarrow \langle v, \gamma'\rangle}
\infer1[\textsc{EApp}]{\gamma \vdash_e id(e_1, \dots, e_n) \Downarrow \langle v,\gamma_n \rangle}
\end{prooftree}
\]
\end{document}
排版如下: