![许多方程式环境的多列间距](https://linux22.com/image/246031/%E8%AE%B8%E5%A4%9A%E6%96%B9%E7%A8%8B%E5%BC%8F%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%9A%E5%88%97%E9%97%B4%E8%B7%9D.png)
我想我有一个非常简单的问题。我想写下一个逻辑推理系统。这本第 9 页有一个很好的例子文档:
什么环境你会建议我使用什么来获得类似的效果?特别是,我希望获得良好的多列对齐(如在表格中)和每个元素周围的一些标准间距。我并不特别关心整个事物周围的边框。
我尝试使用,tabular
但是它产生的间距太小。这个问题可能可以修复,但感觉像是一种 hack。
编辑:我想我可能被误解了。我不知道不是询问如何写下推理规则本身。我已经知道如何做,并且我使用bussproofs
包来做到这一点。我需要一种方法来将我拥有的所有规则放在一个表中,并在其中留出适当的间距。因此我询问一个环境这对于类似的事情来说是合适的。
编辑(2):好的,如果有人认为这tabular
是正确的方法,您能否告诉我如何为所有单元格(水平和垂直)添加一些填充(边距)。我意识到这可能是一个微不足道的问题,但是我刚刚花了半个小时寻找答案。
答案1
跳过细节,可以通过以下方式实现tabular
:
\usepackage{array}
\newcolumntype{C}{>{$\displaystyle}c<{$}}
\newcommand{\onecol}[1]{\multicolumn{2}{C}{#1}}
上面的代码应该放在序言中。然后可以通过以下方式设置大事:
\begin{figure}
\centering
\renewcommand{\arraystretch}{2} % adjust here for interrow spacing
\begin{tabular}{CC}
\onecol{Formula for first line} \\
\onecol{Formula for second line} \\
\onecol{Formula for third line} \\
Left formula & right formula (row 4)\\
Left formula & right formula (row 5)\\
...
\end{tabular}
\caption{Sequent calculus formulation}\label{fig:seqcalc}
\end{figure}
\arraystretch
您可以定义而不是设置
\newcommand\mystrut{\vrule width 0pt height 24pt depth 24pt}
并\mystrut
在除第一行和最后一行之外的每一行中插入一个单元格。调整尺寸以适应。
答案2
实际上,我认为你应该使用一些 amsmath 环境:gather、aligned 和 gather。我现在正在用手机打字,所以举个例子比较困难(我稍后会更新),但你可能需要这样的东西:
\begin{gather*}
\begin{aligned}
\begin{gathered} Left formula \\ Left formula … \end{gathered} &&
\begin{gathered} Right formula \\ Right formula … \end{gathered}
\end{aligned}
\\
\begin{gathered}
Formula \\
Formula \\
…
\end{gathered}
…
\end{gather*}
如果您需要一组两列的公式(每列居中),请使用对齐和聚集。对于单列,只需使用聚集。将所有内容放在聚集中,以便集合集体居中,您应该会得到示例显示的内容。
答案3
tabular
以下是使用@egreg和@percusse 的建议制作的一个小模型\frac
:
\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{array}% http://ctan.org/pkg/array
\usepackage{MnSymbol}% http://ctan.org/pkg/mnsymbol
\newcolumntype{C}{>{$\displaystyle}c<{$}}
\newcommand{\onecol}[1]{\multicolumn{2}{C}{#1}}
\newcommand{\seq}[2]{\frac{\strut#1}{\strut#2}}
\begin{document}
\begin{figure}[ht]
\centering
\renewcommand{\arraystretch}{2.5} % adjust here for interrow spacing
\begin{tabular}{C@{\quad}C}
\onecol{\seq{}{A \vdash A}\ \textit{Identity}} \\
\onecol{\seq{\Gamma,A,B,\Delta \vdash C}{\Gamma,B,A,\Delta \vdash C}\ \textit{Exchange}} \\
\onecol{\seq{\Gamma \vdash B \qquad B,\Delta \vdash C}{\Gamma,\Delta \vdash C}\ \textit{Cut}} \\
\seq{}{\Gamma \vdash \mathbf{t}}\ (\mathbf{t}_\mathcal{R}) &
\seq{}{\Gamma, \mathbf{f} \vdash A}\ (\mathbf{f}_\mathcal{L}) \\
\seq{\Gamma \vdash A}{\Gamma,I \vdash A}\ (I_\mathcal{L}) &
\seq{}{{}\vdash I}\ (I_\mathcal{R}) \\
\seq{\Gamma,A,B \vdash C}{\Gamma, A \otimes B \vdash C}\ (\otimes_\mathcal{L}) &
\seq{\Gamma \vdash A \qquad \Delta \vdash B}{\Gamma,\Delta \vdash A \otimes B}\ (\otimes_\mathcal{R}) \\
\seq{\Gamma \vdash A \qquad \Delta,B \vdash C}{\Gamma,\Delta,A \multimap B \vdash C}\ (\multimap_\mathcal{L}) &
\seq{\Gamma,A \vdash B}{\Gamma \vdash A \multimap B}\ (\multimap_\mathcal{R}) \\
\seq{\Gamma,A \vdash C}{\Gamma,A \mathbin{\&} B \vdash C}\ (\&_{\mathcal{L}-1}) &
\seq{\Gamma,B \vdash C}{\Gamma,A \mathbin{\&} B \vdash C}\ (\&_{\mathcal{L}-2}) \\
\onecol{\vdots}
\end{tabular}
\caption{Sequent Calculus Formulation of \textbf{ILL}}
\end{figure}
\end{document}
需要注意的事项:
列
tabular
规范将决定两列条目之间的空间:\begin{tabular}{C@{\quad}C}
将在任一列中最宽的元素之间插入
\quad
。要直观地显示间隙,您可以使用C@{}|@{\quad}|@{}C
:似乎
\arraystretch
足以2.5
展开其中的表达式tabular
。\frac
将其内容相对于数学轴居中,因此无需摆弄垂直调整来将内容放在右侧。\frac
还提供了\strut
分子和分母中的 ,以用于间距考虑。或者,\mystrut
按照@egreg 的回答中的定义使用。为方便起见,所有内容都用于宏中\seq
,该宏以与 相同的配置作为参数\frac
。