% I have enclosed code.sty, which achieves 99% of what you want without % the need for a separate preprocessor. At the start of your document % you write "\makeatactive". From then on, inline code is written as @\x % -> x_1 & y@. The only difference with what you are used to, is that % instead of % % @ % foo :: Int -> Int % foo = \n -> n+1 % @ % % you have to write % % \begin{code} % foo :: Int -> Int % foo = \n -> n+1 % \end{code} % % and that you cannot use @ in \section{} and \caption{}. For the paper that occurred twice, in which case I had to replace @...@ b y \texttt{...}. % % % code.sty --- nice verbatim mode for code % To get '@' use \verb+@+ \def\icode{% \relax\ifmmode\hbox\else\leavevmode\null\fi \bgroup %\begingroup \@noligs \verbatim@font \verb@eol@error \let\do\@makeother \dospecials \@vobeyspaces \frenchspacing \@icode} \def\@icode#1{% \catcode`#1\active \lccode`\~`#1% \lowercase{\let~\icode@egroup}} \def\icode@egroup{% %\endgroup} \egroup} % The \makeatactive command: % makes @ active, in such a way that @...@ behaves as \icode@...@: { \catcode`@=\active \gdef\makeatactive{ \catcode`@=\active \def@{\icode@} % Since @ becomes active, it has to be taken care of in verbatim-modes: \let\olddospecials\dospecials \def\dospecials{\do\@\olddospecials}} } % \gdef\makeatother{\g@remfrom@specials{\@}\@makeother\@} \gdef\makeatother{\@makeother\@} \newcommand\codetabwidth{42pt} {\catcode`\^^I=\active% \gdef\@vobeytab{\catcode`\^^I\active\let^^I\@xobeytab}} \def\@xobeytab{\leavevmode\penalty10000\hskip\codetabwidth} \begingroup \catcode `|=0 \catcode `[= 1 \catcode`]=2 \catcode `\{=12 \catcode `\}=12 \catcode`\\=12 |gdef|@xcode#1\end{code}[#1|end[code]] |endgroup \def\@code{\trivlist \item\relax \if@minipage\else\vskip\parskip\fi \leftskip\@totalleftmargin\rightskip\z@skip \parindent\z@\parfillskip\@flushglue\parskip\z@skip \@@par \@tempswafalse \def\par{% \if@tempswa \leavevmode \null \@@par\penalty\interlinepenalty \else \@tempswatrue \ifhmode\@@par\penalty\interlinepenalty\fi \fi}% \obeylines \verbatim@font \@noligs \let\do\@makeother \dospecials \everypar \expandafter{\the\everypar \unpenalty}% } \def\code{\@code \frenchspacing\@vobeytab\@vobeyspaces \@xcode} \def\endcode{\if@newlist \leavevmode\fi\endtrivlist}