我正在使用bnf 软件包在我的某个文档中格式化上下文无关语法。我发现任何空格都会反映在输出中。我想保留代码中的空格以提高可读性,但在输出中将其删除。有办法实现这一点吗?
\documentclass[leqno,fleqn,12pt]{report}
\usepackage{bnf}
\begin{document}
\begin{grammar}
[(colon){$\rightarrow$}]
[(semicolon)$|$]
[(comma){}]
[(period){\\}]
[(quote){\begin{bf}}{\end{bf}}]
[(nonterminal){$\langle$}{$\rangle$}]
<rule-working>:<formats>,<correctly>;<without>,<whitespace>.
<rule-not-working> : <formats> , <incorrectly> ; <with> , <whitespace> .
\end{grammar}
\end{document}
答案1
命令\catcode32=9\relax
(或\catcode`\ =9\relax
) 将使 TeX 忽略当前组/环境中的所有空格。您可以定义自己的环境并将其添加到{grammar}
其中。
\documentclass[leqno,fleqn,12pt]{report}
\usepackage{bnf}
\newenvironment{Grammar}{%
\catcode32=9\relax
\begin{grammar}%
}{%
\end{grammar}
}
\begin{document}
% Either
\begin{grammar}
[(colon){$\rightarrow$}]
[(semicolon)$|$]
[(comma){}]
[(period){\\}]
[(quote){\begin{bf}}{\end{bf}}]
[(nonterminal){$\langle$}{$\rangle$}]
\catcode32=9\relax
<rule-working>:<formats>,<correctly>;<without>,<whitespace>.
<rule-not-working> : <formats> , <incorrectly> ; <with> , <whitespace> .
\end{grammar}
% or
\begin{Grammar}
[(colon){$\rightarrow$}]
[(semicolon)$|$]
[(comma){}]
[(period){\\}]
[(quote){\begin{bf}}{\end{bf}}]
[(nonterminal){$\langle$}{$\rangle$}]
<rule-working>:<formats>,<correctly>;<without>,<whitespace>.
<rule-not-working> : <formats> , <incorrectly> ; <with> , <whitespace> .
\end{Grammar}
\end{document}
正如约瑟夫赖特 (Joseph Wright) 指出的那样,你可能还想忽略更多类似太空的字符:
\catcode9=9\relax % Horizontal Tab
\endlinechar=-1\relax % No line endings
\relax
数字后面必须跟一个空格或不可扩展的 TeX 命令,例如,以便 TeX 知道停止读取数字。
或许还有这些(只是为了安全起见):
\catcode10=9 % New line
\catcode11=9 % Vertical Tab
\catcode12=9 % Form Feed
\catcode13=9 % Carriage Return