我想知道在递归定义(形式)语言时应该使用哪个标准符号作为分隔符,例如以下算术表达式片段:
X ::= 0 | 1 | X + X | X * X |
我使用 |,但我必须手动在横线和左右符号之间添加空格。此外,在其他文档或论文中,横线看起来比标准横线大,所以我想知道是否有特定的符号或最佳做法。
编辑:这是我现在正在使用的代码的简短版本:
\documentclass[11pt,letterpaper]{report}
\usepackage{amssymb,amsmath,amsfonts,amsxtra,amsthm}
% etc...
\begin{document}
% ...
\[ A ::= 0 | 1 | A+A | A \times A \]
%...
\end{document}
虽然我正在寻找更像第 4 页定义的间距,但大约在 1.1 的末尾http://perso.ens-lyon.fr/olivier.laurent/folgames.pdf例如。我认为它被称为 Backus-Naur 范式或类似的东西。
答案1
这些条看起来像关系符号,所以\mid
应该是选择。
但是,为其定义自己的命令肯定可以被视为最佳实践:只需更改其定义,即可轻松更改符号的外观。这里有一个示例,其中用于\renewcommand
展示如何在不更改文档代码的情况下修改符号。
\documentclass[11pt,letterpaper]{report}
\usepackage{amsmath,amssymb,amsthm}
\usepackage{bm} % for the second version
\newcommand{\bnfor}{\mid}
\begin{document}
\[ A ::= 0 \bnfor 1 \bnfor A+A \bnfor A \times A \]
\renewcommand{\bnfor}{\mathrel{\big\bracevert}}
\[ A ::= 0 \bnfor 1 \bnfor A+A \bnfor A \times A \]
\end{document}