prftree 中堆叠房屋的水平对齐

prftree 中堆叠房屋的水平对齐

我正在尝试创建一个与 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 的修复版本,每个vdashes 旁边都有对齐字符:

\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}

排版如下:

带有水平对齐的 vdash 的推理规则

相关内容