
Hi, Am Freitag, den 28.08.2015, 00:19 -0800 schrieb Christopher Howard:
Hi. I'm doing a lot of Literate Haskell lately, with proofs and commentary in each module. I'm not very familiar with LaTeX, but I'm learning. (I'm using lhs2tex and texi2pdf.) However, in my commentary, I occasionally have blocks of example interpreter interaction, and I'm not sure what to do with it. Is there a certain command enclosure that would be appropriate? Ideally, it would treat the text like monospace, and also preserve line breaks. Example text would be:
*GCD> extEuclidean 546 2022 (6,100,-27) *GCD> 546 * 100 + 2022 * (-27) == 6 True
But this does not come out looking similar in the final output.
I have a hack used for http://www.joachim-breitner.de/publications/haskell_bytes_portland_2014-06-1... where in interpreter sessions, everything is in mono-spaced fonts but the line following a >. This is the relevant LaTeX code: \usepackage{listings} \definecolor{light-gray}{gray}{0.95} \lstdefinestyle{basic}{ ,columns=flexible ,basewidth={.365em} ,keepspaces=True ,belowskip=0pt ,backgroundcolor=\color{light-gray} ,frame=single ,xleftmargin=1em ,xrightmargin=1em ,basicstyle=\small\sffamily ,stringstyle=\itshape } \lstdefinestyle{shell}{ ,style=basic ,basicstyle=\footnotesize\ttfamily } \lstdefinestyle{haskell}{ style=basic ,language=Haskell ,literate= {ö}{{\"o}}1 {ä}{{\"a}}1 {ü}{{\"u}}1 ,texcl=true ,showstringspaces=false ,keywords={module,where,open,import,using,renaming,to,data,let,in,with,deriving} } \newcommand{\mylabel}[1]{\raisebox{2em}[0pt][0pt]{\makebox[0pt][l]{\makebox[\linewidth][r]{\color{gray}{\sffamily #1}\hspace{1em}}}}\ignorespaces} \lstnewenvironment{haskell}{\pagebreak[3]\lstset{style=haskell}}{\mylabel{Haskell}\pagebreak[2]} %\lstnewenvironment{ghci}{\lstset{style=haskell}}{\mylabel{GHCi}\pagebreak[2]} \lstnewenvironment{shell}{\lstset{style=shell}}{\mylabel{Shell}\pagebreak[2]} \begingroup \gdef\savedgt{>}% \catcode`\>=\active% \catcode`\^^M=\active% \gdef\foo{% \catcode`\>=\active% \catcode`^^M=\active% \def > ##1^^M{\savedgt{} \li!##1!\par}% \def ^^M{\par}% }% \endgroup \newlength{\mylength} \newenvironment{ghci}{ \par \setlength{\mylength}{\linewidth} \addtolength{\mylength}{-2em} \addtolength{\mylength}{-\fboxrule} \addtolength{\mylength}{-\fboxrule} \strut\hspace{1em}\hspace{-\fboxsep}\begin{adjustbox}{minipage={\mylength},valign=b,margin*=\fboxsep,bgcolor=light-gray,frame}% \begingroup \small\ttfamily% \foo }{ \endgroup \end{adjustbox}%\par \adjustbox{lap=-\width}{\color{gray}{\sffamily GHCi}\hspace{\fboxsep}\hspace{\fboxrule}} \par } \newcommand{\inputhaskell}[1]{\lstinputlisting[style=haskell]{#1}\mylabel{Haskell}} \newcommand{\li}{\lstinline[style=haskell]} Greetings, Joachim -- Joachim “nomeata” Breitner mail@joachim-breitner.de • http://www.joachim-breitner.de/ Jabber: nomeata@joachim-breitner.de • GPG-Key: 0xF0FBF51F Debian Developer: nomeata@debian.org