忽略环境中的空白

忽略环境中的空白

我正在使用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

相关内容