[comp.text.tex] Styles for lispcode and grammars wanted...

krey@gmdzi.UUCP (Juergen Krey) (07/10/90)

Does anyone have a style or environment-macro for TeX or LaTeX to
format lispcode, with boldfacing defun- and defvar-names, keyword-args,
etc. I found some hints in texinfo.tex, but it's to difficult for me to 
adapt parts of it for my low demands.
Moreover i'm looking for a macro-set to pretty-print formal grammars like 
(Extended) Backus-Naur Form with LaTeX/TeX.
Thanks for nay help/hints
HjK

Damian.Cugley@prg.oxford.ac.uk (Damian Cugley) (07/12/90)

> From: krey@gmdzi.UUCP (Juergen Krey)
> Message-ID: <3074@gmdzi.UUCP>

> Moreover i'm looking for a macro-set to pretty-print formal grammars like 
> (Extended) Backus-Naur Form with LaTeX/TeX.
> Thanks for any help/hints
> HjK

Here's one I threw together for my own use.  It does EBNF, in LaTeX, in
the style I like - catagory names italicized in angle brackets, and
`::=' introducing productions.

Example of use:
------------------------------------------------------------------------
Generally glue is quoted using this notation~\TBcite[\p271]:
\begin{EBNF}
    \item[glue]
	\<dimen> [~`plus' \<stretch>~] [~`minus' \<stretch>~].
    \item[stretch]
	\<dimen> | \<fil dimen>.
    \item[fil dimen] 
	\<factor> (~`fil' | `fill' | `filll'~).
\end{EBNF}
A \<stretch> which is a \<dimen> ...
------------------------------------------------------------------------

This is "list" environment in the style of "description" etc (Sec. 5.7).
Thus, productions start with 
 
	\item[LHS]
  
which produces   

	<LHS> ::=

in the document.  (This was so I can alter the ::= to something else if
I really want to.)  Each production is in LR (horizontal) mode.  The
whole thing is indented to \parindent, with turnover lines indented a
further 2 em.

`|' produces a vertical line.  

\<FOO> or \Cat{FOO} produces <FOO>, with FOO italicized.  

You might prefer  {\tt plus}  instead of  `plus'  etc.


Here's the code:
------------------------------------------------------------------------
% Damian Cugley <Damian.Cugley@prg.oxford.ac.uk> Wed 11 Jul 1990

\begingroup \catcode`\|=13
    \gdef\EBNF
    {\list{???}%
      {%
	\catcode`\|=13 \def|{$\mid$}%
	\def\makelabel##1{\<##1> ::=}%
	\parsep=0pt \itemsep=\smallskipamount
	\leftmargin=\parindent \advance\leftmargin+2em
	\labelsep=0.5em \labelwidth=1.5em
	\raggedright
      }%
    }
\endgroup

\let\endEBNF\endlist

\def\Cat#1{\hbox{$\langle${\it #1\/}$\rangle$}}
\def\<#1>{Cat{#1}}
------------------------------------------------------------------------

 /--------------------------------------------------------------------\
 | Damian Cugley, Programming Research Group, 11 Keble Rd, Oxford, UK |
 | Damian.Cugley@prg.oxford.ac.uk  =or=  ...@oxford.prg in UK         |
 \--------------------------------------------------------------------/