我正在尝试使用双水平线编写双向推理规则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 帐户。