我正在尝试使用inference
包semantic
来描述一种语言的静态语义。
我想用空格分隔推理规则中的非终端符,而无需手动插入它们。
有没有办法自动用空格将后面的代码中的单词分开SimpleExpr_1 RelOper SimpleExpr_2
,就像写成那样SimpleExpr_1\ RelOper\ SimpleExpr_2
?
\inference
{\Gamma \vdash Expr_1 : \textsc{Integer} \quad
\Gamma \vdash Expr_2 : \textsc{Integer}}
{\Gamma \vdash SimpleExpr_1 RelOper SimpleExpr_2 : \textsc{Boolean}}
编辑:我应该补充一下,我尝试过这里提出的解决方案:使数学模式遵循空格,但出于我不知道的原因,它似乎不适用于inference
。有什么想法吗?
答案1
我看到您已经在使用\quad
,数学模式中的其他间距命令是:
\,
稀薄空间
\:
中等空间
\;
更厚的空间
\quad
更厚的
\qquad
更厚
\!
负薄空间
答案2
一种方法是重新定义\predicatebegin
数学模式中的空格,使其不被忽略。不过,一个微妙的点是,这些标记已经被读取,因此空格已经有了 catcode 10。这可以使用 来恢复\scantokens
。我认为最好只扫描从|-
到 的标记:
,但这很容易改变。
\documentclass{article}
\usepackage{semantic}
\begingroup\catcode`\ =\active%
\gdef\mathobeyspaces{\catcode`\ =\active\let =\ }%
\endgroup
\def\predicatebegin#1|-#2:#3\predicateend
{$#1|-\mathobeyspaces \scantokens{#2}:#3$}%
\begin{document}
\inference
{\Gamma |-Expr_1:\textsc{Integer} \quad
\Gamma |-Expr_2: \textsc{Integer}}
{\Gamma |-SimpleExpr_1 RelOper SimpleExpr_2: \textsc{Boolean}}
\end{document}