与 Bussproofs 的推理线间距相同

与 Bussproofs 的推理线间距相同

我希望我的文档中的每个推导都满足以下两个要求:

  1. 两个连续推理线之间的距离应该始终相同(图中的红色箭头应具有相同的长度)。
  2. 论文符号应相对于上下推理线垂直居中(图中蓝线应等长)。

梅威瑟:

\documentclass{article}

\usepackage{amsmath}
\usepackage{tikz}
\usepackage{bussproofs}
\usepackage{bussproofs-extra}

\begin{document}
 \begin{center}
  \AxiomC{}
  \UnaryInfC{$B \vdash B$}
  \UnaryInfC{$\vdash A,B$}
  \UnaryInfC{$\neg A \vdash B$}
  \AxiomC{}
  \RightLabel{$\pi_0$}
  \DeduceC{$B \vdash \lVert A\rVert$}
  \RightLabel{\scriptsize$(\mathit{cut})$}
  \BinaryInfC{$\neg A \vdash \lVert A\rVert$}
  \DisplayProof
 \end{center}
\end{document}

答案1

在不了解bussproofs软件包的情况下,我建议您关闭标准的 interlineskip 并在每个推理中包含一个“strut”。

\offinterlineskip在普通 TeX 中,如果您想通过 struts 控制行高,可以在表中使用。 中是否有类似的东西bussproofs

支柱的定义和使用如下:

\def\infcstrut{\vrule width 0pt height Xpt depth Ypt} % once at the beginning
...
\UnaryInfC{$\infcstrut B \vdash B$}

这里Y有一个足够大的数字,可以容纳\lVert第三行基线以下的,并且X= Y+论文符号的高度。

附录:在简单查看了bussproof源代码之后,我很遗憾地说,这个包似乎有自己用于计算行间距离的详细规则,应该不那么容易被覆盖。

第二份附录:这就是我的意思,用纯 TeX 实现的。(但恐怕这不容易推广。)

\hsize 12em
\def\mystrut{\vrule width0pt height10.444pt depth3.5pt}
\def\label{\leaders\vbox to.75ex{\hsize=.25\hsize\line{\hss.}}\vfil}
\def\infc#1{\mystrut\hss$#1$\hss}
\offinterlineskip
\leftline{\valign{&\hrule #&\hbox to.5\hsize{\infc{#}}\cr
&B\vdash B&&\vdash A,B&height.75pt&\neg A \vdash B\cr
\multispan5{\label}&B \vdash \Vert A\Vert\cr
\multispan5{\vss\hbox to0pt{\hskip -.25\hsize$\;\pi_0$\hss}\vss}\cr
}}
\vbox to0pt{\vss\line{\hss\rlap{$\;(cut)$}}\vss}
\hrule
\line{\infc{\neg A \vdash \Vert A\Vert}}
\bye

纯 TeX

答案2

(这不是解决方案,只是一种尝试。)

我不认为这实际上可以实现,但我觉得如果存在解决方案,那么使用以下方法更有可能找到它埃布洛夫

\documentclass{article}
\usepackage{amsmath}
\usepackage{ebproof}
\begin{document}
\begin{center}
    \begin{prooftree}[
        rule margin=0pt,     % Spacing above and below inference lines set to 0.
        rule code={          % This code replaces the code for the inference line with…
            \vspace{.2em}    % … a space above the line…
            \hrule           % … the line itself …
            \vspace{.3em}    % … a space below the line.
        }
        ]  
        \hypo{}
        \infer1{B \vdash B}
        \infer1{\vdash A,B}
        \infer1{\neg A \vdash B}
        \hypo{}
        \ellipsis{\(\pi_0\)}{B \vdash \lVert A\rVert}
        \infer2[\((\mathit{cut})\)]{\neg A \vdash \lVert A\rVert}
    \end{prooftree}
\end{center}
\end{document}

给出:

在此处输入图片描述

它看起来比你现在拥有的要好看一些(如果你问我的话,无论是代码还是外观)。

(使用struct现已废弃的https://tex.stackexchange.com/a/614725/34551但似乎没有达到我想要的,即固定的行高)

相关内容