![与 Bussproofs 的推理线间距相同](https://linux22.com/image/441445/%E4%B8%8E%20Bussproofs%20%E7%9A%84%E6%8E%A8%E7%90%86%E7%BA%BF%E9%97%B4%E8%B7%9D%E7%9B%B8%E5%90%8C.png)
我希望我的文档中的每个推导都满足以下两个要求:
- 两个连续推理线之间的距离应该始终相同(图中的红色箭头应具有相同的长度)。
- 论文符号应相对于上下推理线垂直居中(图中蓝线应等长)。
梅威瑟:
\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
答案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但似乎没有达到我想要的,即固定的行高)