我目前正在用 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
宏以内联方式使用这些功能。
结果: