\usepackage{listings} % Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore % removes it as a variable-name character so keywords in variables are highlighted. MUST APPEAR % AFTER HYPERREF. %\DeclareTextCommandDefault{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}} \renewcommand{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}} \renewcommand*{\thefootnote}{\Alph{footnote}} % hack because fnsymbol does not work %\renewcommand*{\thefootnote}{\fnsymbol{footnote}} \makeatletter % parindent is relative, i.e., toggled on/off in environments like itemize, so store the value for % use rather than use \parident directly. \newlength{\parindentlnth} \setlength{\parindentlnth}{\parindent} \newcommand{\LstBasicStyle}[1]{{\lst@basicstyle{\lst@basicstyle{#1}}}} \newcommand{\LstKeywordStyle}[1]{{\lst@basicstyle{\lst@keywordstyle{#1}}}} \newcommand{\LstCommentStyle}[1]{{\lst@basicstyle{\lst@commentstyle{#1}}}} \newcommand{\C}[2][3.5in]{\hfill\makebox[#1][l]{\LstCommentStyle{#2}}} % CFA programming language, based on ANSI C (with some gcc additions) \lstdefinelanguage{CFA}[ANSI]{C}{ morekeywords={ _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__, auto, bool, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__, coroutine, disable, dtype, enable, exception, __extension__, fallthrough, fallthru, finally, __float80, float80, __float128, float128, forall, ftype, _Generic, _Imaginary, __imag, __imag__, inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or, otype, restrict, __restrict, __restrict__, __signed, __signed__, _Static_assert, thread, _Thread_local, throw, throwResume, timeout, trait, try, ttype, typeof, __typeof, __typeof__, virtual, __volatile, __volatile__, waitfor, when, with, zero_t}, moredirectives={defined,include_next}% } \lstset{ language=CFA, columns=fullflexible, basicstyle=\linespread{0.9}\sf, % reduce line spacing and use sanserif font stringstyle=\tt, % use typewriter font tabsize=5, % N space tabbing xleftmargin=\parindentlnth, % indent code to paragraph indentation escapechar=\$, % LaTeX escape in CFA code keepspaces=true, % showstringspaces=false, % do not show spaces with cup showlines=true, % show blank lines at end of code aboveskip=4pt, % spacing above/below code block belowskip=3pt, % replace/adjust listing characters that look bad in sanserif literate={-}{\makebox[1ex][c]{\raisebox{0.4ex}{\rule{0.8ex}{0.1ex}}}}1 {^}{\raisebox{0.6ex}{$\scriptstyle\land\,$}}1 {~}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}}1 % {`}{\ttfamily\upshape\hspace*{-0.1ex}`}1 {<}{\textrm{\textless}}1 {>}{\textrm{\textgreater}}1 {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 {->}{\makebox[1ex][c]{\raisebox{0.5ex}{\rule{0.8ex}{0.075ex}}}\kern-0.2ex{\textrm{\textgreater}}}2, moredelim=**[is][\color{red}]{`}{`}, }% lstset \lstnewenvironment{cfa}[1][] {\lstset{#1}} {} \lstnewenvironment{C++}[1][] % use C++ style {\lstset{language=C++,moredelim=**[is][\protect\color{red}]{`}{`},#1}\lstset{#1}} {} % inline code !...! \lstMakeShortInline!