双线推理规则的垂直对齐不正确

双线推理规则的垂直对齐不正确

我正在尝试使用双水平线编写双向推理规则mathpartir。文档说我应该能够使用\mprset{fraction={===}}如下方法:

\documentclass{article}

\usepackage{mathpartir}

\begin{document}
\begin{mathpar}
\mprset{fraction={===}}
\inferrule*
{
}
{
  C \rightarrow C'
}
\and
\inferrule*
{
  C \rightarrow C
}
{
  C \rightarrow C'
}
\and
\inferrule*
{
  C \rightarrow C_{\beta}
}
{
  C \rightarrow C'
}
\end{mathpar}
\end{document}

这确实用双水平线格式化了规则,但它也破坏了垂直对齐,因此在上面的最后一个例子中,现在C \rightarrow C'与双线重叠。

另请参阅此处,带虚线的分数或推理规则,但如果可能的话,我希望得到一个解决方案inferrule

答案1

要调整的三个参数:

\eqgap双线之间的距离;

\overgap文本与规则之间的分离;以及

\inferrulerule两条基准线的粗细。

此 MWE 显示它在数学模式下使用,但它在数学模式之外也能工作。我对推理规则了解不多,但如果数学轴与“分母”对齐,那么此 MWE 就会起作用。

\documentclass{article}
\usepackage{stackengine}
\def\eqgap{.2ex}
\def\overgap{.4ex}
\def\inferrulerule{.2pt}

\newlength\rulelength
\newlength\toplength
\newlength\bottomlength

\newcommand\myinferrule[2]{%
  \stackMath%
  \setlength\bottomlength{\widthof{$#1$}}%
  \setlength\toplength{\widthof{$#2$}}%
  \ifdim\toplength>\bottomlength%
    \setlength\rulelength{\the\toplength}%
  \else%
    \setlength\rulelength{\the\bottomlength}%
  \fi%
  \mathrel{%
  \stackon[\overgap]{\stackon[\eqgap]{\stackon[\overgap]{#1}%
    {\rule{\the\rulelength}{\inferrulerule}}}%
    {\rule{\the\rulelength}{\inferrulerule}}}{#2}%
  }%
}
\begin{document}
\[
\mathrm{Math~Axis} \myinferrule{C \rightarrow C'}{C \rightarrow C_{\beta}}
\]
\end{document}

在此处输入图片描述

如果数学轴应该与规则一致,那么这个 MWE 将适用:

\documentclass{article}
\usepackage{stackengine}
\def\eqgap{.2ex}
\def\overgap{.4ex}
\def\inferrulerule{.2pt}

\newlength\rulelength
\newlength\toplength
\newlength\bottomlength

\newcommand\myinferrule[2]{%
  \stackMath%
  \setlength\bottomlength{\widthof{$#1$}}%
  \setlength\toplength{\widthof{$#2$}}%
  \ifdim\toplength>\bottomlength%
    \setlength\rulelength{\the\toplength}%
  \else%
    \setlength\rulelength{\the\bottomlength}%
  \fi%
  \mathrel{%
    \stackunder[\overgap]{%
      \stackon[\overgap]{%
        \stackanchor[\eqgap]%
          {\rule{\the\rulelength}{\inferrulerule}}%
        {\rule{\the\rulelength}{\inferrulerule}}%
      }{#2}%
    }{#1}%
  }%
}
\begin{document}
\[
\mathrm{Math~Axis} \myinferrule{C \rightarrow C'}{C \rightarrow C_{\beta}}
\]
\end{document}

在此处输入图片描述

利用这些参数,

\[
\myinferrule{C \rightarrow C'}{C \rightarrow C_{\beta}} ~
\myinferrule{\scriptstyle C \rightarrow C'}{\scriptstyle C \rightarrow C_{\beta}} ~
\myinferrule{\scriptscriptstyle C \rightarrow C'}{\scriptscriptstyle C \rightarrow C_{\beta}}
\]

排版为不同的数学样式:

在此处输入图片描述

如果您需要定期将其设置为不同的数学样式,我可以这样做(以额外的编码为代价),这样就不需要在参数本身中设置样式,就像这里一样。所以如果是这种情况,请告诉我。

答案2

最好的办法是购买 的新版本mathpartir,其中已修复了此问题。针对我的错误报告, 的作者mathpartir回复如下:

我推出了新版本 1.2.1,其中分数宏的处理方式略有不同,我希望它在垂直间距方面的表现会更好。

http://cristal.inria.fr/~remy/latex/mathpartir.sty
http://cristal.inria.fr/~remy/latex/mathpartir.tex
http://cristal.inria.fr/~remy/latex/mathpartir.pdf

我还添加了调整垂直间距的选项,以防它不能正常工作。

这似乎如我所料,并且比上面提出的任何解决方案都更好。作者没有 Stack Exchange 帐户。

相关内容