Merge branch 'three-eight' of linux.cs.tufts.edu:/r/c--/papers/dfopt into three-eight
[packages/hoopl.git] / paper / code.sty
1
2 \NeedsTeXFormat{LaTeX2e}
3 \ProvidesPackage{code}
4
5
6 % I have enclosed code.sty, which achieves 99% of what you want without
7 % the need for a separate preprocessor. At the start of your document
8 % you write "\makeatactive". From then on, inline code is written as @\x
9 % -> x_1 & y@. The only difference with what you are used to, is that
10 % instead of
11
12 % @
13 %   foo :: Int -> Int
14 %   foo = \n -> n+1
15 % @
16
17 % you have to write
18
19 % \begin{code}
20 %   foo :: Int -> Int
21 %   foo = \n -> n+1
22 % \end{code}
23
24 % 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{...}.
25
26
27 % code.sty  --- nice verbatim mode for code
28
29 % To get '@' use \verb+@+
30
31 \def\icode{%
32     \relax\ifmmode\hbox\else\leavevmode\null\fi
33     \bgroup
34     %\begingroup
35     \@noligs
36     \verbatim@font
37     \verb@eol@error
38     \let\do\@makeother \dospecials
39     \@vobeyspaces
40     %\frenchspacing
41     %% next two lines provide more sensible spacing 
42     \@tempdima = \fontdimen2\font\relax
43     \spaceskip = 0.65\@tempdima
44     %%
45     \@icode}
46 \def\@icode#1{%
47     \catcode`#1\active
48     \lccode`\~`#1%
49     \lowercase{\let~\icode@egroup}}
50 \def\icode@egroup{%
51     %\endgroup}
52     \egroup}
53
54 % The \makeatactive command:
55 % makes @ active, in such a way that @...@ behaves as \icode@...@:
56 {
57 \catcode`@=\active
58 \gdef\makeatactive{
59      \catcode`@=\active \def@{\icode@}
60      % Since @ becomes active, it has to be taken care of in verbatim-modes:
61      \let\olddospecials\dospecials \def\dospecials{\do\@\olddospecials}}
62 }
63 % \gdef\makeatother{\g@remfrom@specials{\@}\@makeother\@}
64 \gdef\makeatother{\@makeother\@}
65
66 \newcommand\codetabwidth{42pt}
67 {\catcode`\^^I=\active%
68 \gdef\@vobeytab{\catcode`\^^I\active\let^^I\@xobeytab}}
69 \def\@xobeytab{\leavevmode\penalty10000\hskip\codetabwidth}
70
71 \begingroup \catcode `|=0 \catcode `[= 1
72 \catcode`]=2 \catcode `\{=12 \catcode `\}=12
73 \catcode`\\=12 |gdef|@xcode#1\end{code}[#1|end[code]]
74 |endgroup
75 \def\@code{\trivlist \item\relax
76   \if@minipage\else\vskip\parskip\fi
77   \leftskip\@totalleftmargin\rightskip\z@skip
78   \parindent\z@\parfillskip\@flushglue\parskip\z@skip
79   \@@par
80   \@tempswafalse
81   \def\par{%
82     \if@tempswa
83       \leavevmode \null \@@par\penalty\interlinepenalty
84     \else
85       \@tempswatrue
86       \ifhmode\@@par\penalty\interlinepenalty\fi
87     \fi}%
88   \obeylines \verbatim@font \@noligs
89   \let\do\@makeother \dospecials
90   \everypar \expandafter{\the\everypar \unpenalty}%
91 }
92 \def\code{\@code \frenchspacing\@vobeytab\@vobeyspaces \@xcode}
93 \def\endcode{\if@newlist \leavevmode\fi\endtrivlist}
94