Add the paper "Evidence normalisation in System FC"
[ghc.git] / docs / opt-coercion / code.sty
1
2 % I have enclosed code.sty, which achieves 99% of what you want without
3 % the need for a separate preprocessor. At the start of your document
4 % you write "\makeatactive". From then on, inline code is written as @\x
5 % -> x_1 & y@. The only difference with what you are used to, is that
6 % instead of
7
8 % @
9 %   foo :: Int -> Int
10 %   foo = \n -> n+1
11 % @
12
13 % you have to write
14
15 % \begin{code}
16 %   foo :: Int -> Int
17 %   foo = \n -> n+1
18 % \end{code}
19
20 % and that you cannot use @ in \section{} and \caption{}. For the paper that occured twice, in which case I had to replace @...@ b y \texttt{...}.
21
22
23 % code.sty  --- nice verbatim mode for code
24
25 % To get '@' use \verb+@+
26
27 \def\icode{%
28     \relax\ifmmode\hbox\else\leavevmode\null\fi
29     \bgroup
30     %\begingroup
31     \@noligs
32     \verbatim@font
33     \verb@eol@error
34     \let\do\@makeother \dospecials
35     \@vobeyspaces
36     \frenchspacing
37     \@icode}
38 \def\@icode#1{%
39     \catcode`#1\active
40     \lccode`\~`#1%
41     \lowercase{\let~\icode@egroup}}
42 \def\icode@egroup{%
43     %\endgroup}
44     \egroup}
45
46 % The \makeatactive command:
47 % makes @ active, in such a way that @...@ behaves as \icode@...@:
48 {
49 \catcode`@=\active
50 \gdef\makeatactive{
51      \catcode`@=\active \def@{\icode@}
52      % Since @ becomes active, it has to be taken care of in verbatim-modes:
53      \let\olddospecials\dospecials \def\dospecials{\do\@\olddospecials}}
54 }
55 % \gdef\makeatother{\g@remfrom@specials{\@}\@makeother\@}
56 \gdef\makeatother{\@makeother\@}
57
58 \newcommand\codetabwidth{42pt}
59 {\catcode`\^^I=\active%
60 \gdef\@vobeytab{\catcode`\^^I\active\let^^I\@xobeytab}}
61 \def\@xobeytab{\leavevmode\penalty10000\hskip\codetabwidth}
62
63 \begingroup \catcode `|=0 \catcode `[= 1
64 \catcode`]=2 \catcode `\{=12 \catcode `\}=12
65 \catcode`\\=12 |gdef|@xcode#1\end{code}[#1|end[code]]
66 |endgroup
67 \def\@code{\trivlist \item\relax
68   \if@minipage\else\vskip\parskip\fi
69   \leftskip\@totalleftmargin\rightskip\z@skip
70   \parindent\z@\parfillskip\@flushglue\parskip\z@skip
71   \@@par
72   \@tempswafalse
73   \def\par{%
74     \if@tempswa
75       \leavevmode \null \@@par\penalty\interlinepenalty
76     \else
77       \@tempswatrue
78       \ifhmode\@@par\penalty\interlinepenalty\fi
79     \fi}%
80   \obeylines \verbatim@font \@noligs
81   \let\do\@makeother \dospecials
82   \everypar \expandafter{\the\everypar \unpenalty}%
83 }
84 \def\code{\@code \frenchspacing\@vobeytab\@vobeyspaces \@xcode}
85 \def\endcode{\if@newlist \leavevmode\fi\endtrivlist}