如何自动将推理中的单词与语义包分离?

如何自动将推理中的单词与语义包分离?

我正在尝试使用inferencesemantic来描述一种语言的静态语义。

我想用空格分隔推理规则中的非终端符,而无需手动插入它们。

有没有办法自动用空格将后面的代码中的单词分开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}

相关内容