简单任务
假设有一个example.tex
包含 Haskell 列表的文件:
\documentclass{article}
\usepackage{fancyvrb}
\DefineVerbatimEnvironment{code}{Verbatim}{fontsize=\small}
\begin{document}
\begin{code}
sequence :: [IO a] -> IO [a]
sequence [] = return []
sequnce (c : cs) = do
x <- c
xs <- sequence cs
return (x : xs)
\end{code}
\end{document}
让我们准备通过以下方式处理此文件lhs2TeX
:
\documentclass{article}
%include lhs2TeX.fmt
%include lhs2TeX.sty
\begin{document}
\begin{code}
sequence :: [IO a] -> IO [a]
sequence [] = return []
sequnce (c : cs) = do
x <- c
xs <- sequence cs
return (x : xs)
\end{code}
\end{document}
lhs2TeX example.tex -o example_new.tex
pdflatex example_new.tex
我们所拥有的:
这正是我想要的来源样子。
真实示例
\input
在现实世界中,主文件中通常有许多包含 haskell 源的文件,这些文件由命令收集:
hardmod.tex
:
\documentclass{disser}
\usepackage{fancyvrb}
\DefineVerbatimEnvironment{code}{Verbatim}{fontsize=\small}
\begin{document}
\input{first}
\input{second}
\end{document}
first.tex
:
Some stuff
\begin{code}
sequence :: [IO a] -> IO [a]
sequence [] = return []
sequnce (c : cs) = do
x <- c
xs <- sequence cs
return (x : xs)
\end{code}
and more words.
second.tex
:
Another example of code:
\begin{code}
ap :: Monad m => m (a -> b) -> m a -> m b
ap mf mx = do
f <- mf
x <- mx
return (f x)
\end{code}
And a conclusion.
lhs2TeX
生成整个乳胶文档,这就是为什么hardmod.tex
使用准备的良好源代码进行编译有点棘手的原因lhs2TeX
。
问题:如何lhs2TeX
在这种复杂结构化的文档中使用以获得良好的源格式?
答案1
实际答案
您有两个选择:
使用
lhs2TeX
的%include
指令而不是\input
。这是最简单的方法,我推荐它。使用 分别处理每个文件
lhs2TeX
,然后合并结果。每个文件必须有一行%include polycode.fmt
。如果您需要对代码的不同部分使用非常不同的格式指令(例如,如果您使用lhs2TeX
来处理不同的编程语言),则此选项非常有用。
请注意,您的问题实际上是lhs2TeX 手册。
一些补充说明
您应该将源代码放在
.lhs
文件中,而不是.tex
文件里。关键在于lhs2TeX
您拥有有文化的 Haskell 源代码,并且它们仍然是有效的 Haskell。你不应该使用
%include lhs2TeX.fmt %include lhs2TeX.sty
这早已被弃用。相反,使用
%include polycode.fmt
你说你的示例看起来和你想要的排版 Haskell 代码完全一样,但实际上,你没有利用 的
lhs2TeX
对齐功能,这是使用它的主要优点之一。要使=
输出中的符号对齐,请确保在源中符号前面有两个空格。