我使用 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}
这是一个使用 bussproofs 的示例,我不知道如何将标签放在规则的顶部。
\documentclass{article}
\usepackage{bussproofs}
\begin{document}
\begin{prooftree}
\AxiomC{A}
\AxiomC{B}
\LeftLabel{Foo}
\BinaryInfC{C}
\end{prooftree}
\end{document}
答案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
:参见此处的帖子