用于编写上下文无关语法的自动换行?

用于编写上下文无关语法的自动换行?

我目前正在用 Latex 编写上下文无关语法,每行都有一个产生式,例如

S -> a | B
B -> C
C -> D | d

目前我正在为此使用数学模式和手动换行。有没有更适合我的情况的环境?例如,我不需要手动换行的环境?谢谢 :-)

答案1

这看起来像是该包的工作listings,它不仅会自动执行换行,而且还允许

  • 箭头->将被渲染为正确的 TeX-ish 箭头;
  • Unicode 字符(例如希腊字符)可以通过 TeX-ish 数学等效符号来呈现;
  • 轻松缩进和内联呈现语法规则;

以及格式控制的其他方面。

示例来源。

\documentclass{article}
\usepackage{listings}

\lstset{
  basicstyle=\itshape,
  xleftmargin=3em,
  literate={->}{$\rightarrow$}{2}
           {α}{$\alpha$}{1}
           {δ}{$\delta$}{1}
}

\begin{document}
\noindent Example of a simple grammar:
\begin{lstlisting}
S -> α | B
B -> C
C -> D | δ
\end{lstlisting}
Note that the rules ``\lstinline{S -> α | B}\,'' and
``\lstinline{C -> D | δ}\,'' involve terminals.
\end{document}

上面控制格式的各种方式如下:

  • basicstyle=\itshape键表示字符将以斜体排版,这在数学环境中很常见。
  • 描述xleftmargin=3em了用于在环境中申请“显示”列表的左缩进lstlisting
  • 说明literate=...指出了呈现各种字符序列的“识字”方法。例如,两个字符->带有相应的箭头,并且出于间距目的,应该为其提供大约两个字符的水平空间。(listings即使您不使用等宽字体,也会尝试为每个字符提供相同的空间;默认值约为0.6em。)其他条目描述了如何排版 unicode 希腊字符。
  • 也可以通过\lstinline宏以内联方式使用这些功能。

结果:

使用 lstlistings 环境的示例 CFG 规范

相关内容