预处理器 lhs2tex 有一种非常简洁的代码对齐方式。请看以下代码片段:
let t1 = foo x
in let g x = if x > 10
then t1
else let t2 = bar x
in let h y = if y > 10
then g (t2 y)
else h (y+1)
in h 1 x
in g 1 2
它根据两个以上的空格检测所需的缩进,并使用(我相信)嵌套的制表符环境来生成以下内容:
请注意,虽然使用了比例字体,但垂直对齐效果很好。
有没有办法在 LaTeX 中方便地重现这种情况?也许甚至使用列表(我已经为其正确配置了语法突出显示)?
答案1
我直接使用 lhs2texpolytable
包对其进行了近似计算,现在得到了所需的输出:
\begin{acode}
\> !let t1 = foo x \\
\> !in \> !let g x = \> !if x > 10 \\
\> \> \> !then \> t1 \\
\> \> \> !else \> !let t2 = bar x \\
\> \> \> \> !in \> !let h y = \> !if y > 10 \\
\> \> \> \> \> \> !then \> g (t2 y) \\
\> \> \> \> \> \> !else \> h (y+1) \\
\> \> \> \> \> !in h 1 x \\
\> \> !in g 1 2. \\
\end{acode}
通过使用这些定义:
\begingroup
\catcode`!=\active
\gdef\activateexclamationmark{% note the global \gdef
\catcode`!=\active%
\def!##1 {\hkw{##1} }%
}
\endgroup
\def\acode{%
\begingroup%
\activateexclamationmark%
\sffamily%
\ptboxed%
\defaultcolumn{@{}l@{ }}%
\ignorespaces%
}
\def\endacode{%
\endptboxed%
\endgroup%
}
\newcommand{\hkw}[1]{\textbf{#1}}
内容catcode
是介绍!
——一个低噪音近似真正的语法高亮,但我想不出一种方法来让语法高亮和能够插入我的标签标记。
我仍然想知道是否有可能定义一个环境,逐字读取其内容并用 替换每两个或多个空格的一段\={n}
,其中n
是最后一个空格的列。