如何将标签放在推理规则(bussproofs 包)的顶部?

如何将标签放在推理规则(bussproofs 包)的顶部?

我使用 bussproofs(而不是数学部分) 来布局推理规则。bussproofs 可以将标签放在规则的左侧和右侧,但不能放在规则的顶部(就像 mathpartir 可以做的那样)。有没有一种简单的方法可以将标签放在 bussproofs 中的规则顶部?

例如,下面将布局一个规则,其标签位于左侧。

\begin{prooftree}
  \AxiomC{$a$}
  \LeftLabel{Name-of-Rule}
  \UnaryInfC{$b$}
\end{prooftree}

我正在寻找以下基于 mathpartir 的乳胶代码的 bussproofs 版本:

\inferrule[Name-of-Rule]{a}{b}

下面是使用 mathpartir 的示例文档,它产生了所需的结果(标签位于顶部并与规则左对齐):

\documentclass{article}
\usepackage{mathpartir}
\begin{document}

\begin{mathpar}
  \inferrule[Foo]{A \quad B}{C}
\end{mathpar}
\end{document}

mathpartir 的结果

这是一个使用 bussproofs 的示例,我不知道如何将标签放在规则的顶部。

\documentclass{article}
\usepackage{bussproofs}
\begin{document}
\begin{prooftree}
  \AxiomC{A}
  \AxiomC{B}
  \LeftLabel{Foo}
  \BinaryInfC{C}
\end{prooftree}
\end{document}

带有 busproofs 的结果

答案1

经过一番尝试,我想出了以下解决方案。它使用保存箱如下所述迷你盒如下所述,以及 NewDocumentEnvironment 在结束块中获取参数如这里所述

\documentclass{article}
\usepackage{bussproofs}
\usepackage{minibox}
\usepackage{xparse}

\newsavebox{\topprooftreebox}
\newlength{\topprooftreewidth}

\NewDocumentEnvironment{topprooftree}{m}%
  {\begin{lrbox}{\topprooftreebox}\ignorespaces}%
  {\DisplayProof\end{lrbox}\begin{center}\settowidth{\topprooftreewidth}%
    {\topprooftreebox}\makebox[\topprooftreewidth]{%
    \minibox{{#1}\\\usebox{\topprooftreebox}}}\end{center}}

\begin{document}
\begin{figure}
\begin{topprooftree}{\textsc{Foo}}
  \AxiomC{A}
  \AxiomC{B}
  \AxiomC{C}
  \TrinaryInfC{B}
\end{topprooftree}
\begin{topprooftree}{\textsc{Foo}}
  \AxiomC{A}
  \AxiomC{B}
  \AxiomC{C}
  \TrinaryInfC{B}
\end{topprooftree}
\end{figure}
\end{document}

事实证明,使用 lrbox 是必不可少的:\makebox并且 \bgroup不能与包一起使用xcolor参见此处的帖子

相关内容