git.iko.soy/typeable/pandoc
on master help sign in
LaTeX writer: Only require listings package if needed.
bdd448efiddlosopher
src/Text/Pandoc/Writers/LaTeX.hs+7−2
@@ -49,6 +49,7 @@ data WriterState =
49 , stLink :: Bool -- true if document has links
49 , stLink :: Bool -- true if document has links
50 , stUrl :: Bool -- true if document has visible URL link
50 , stUrl :: Bool -- true if document has visible URL link
51 , stGraphics :: Bool -- true if document contains images
51 , stGraphics :: Bool -- true if document contains images
52+ , stLHS :: Bool -- true if document has literate haskell code
52 }
53 }
53
54
54-- | Convert Pandoc to LaTeX.
55-- | Convert Pandoc to LaTeX.
@@ -58,7 +59,8 @@ writeLaTeX options document =
58 WriterState { stInNote = False, stOLLevel = 1, stOptions = options,
59 WriterState { stInNote = False, stOLLevel = 1, stOptions = options,
59 stVerbInNote = False, stEnumerate = False,
60 stVerbInNote = False, stEnumerate = False,
60 stTable = False, stStrikeout = False, stSubscript = False,
61 stTable = False, stStrikeout = False, stSubscript = False,
61− stLink = False, stUrl = False, stGraphics = False }
62+ stLink = False, stUrl = False, stGraphics = False,
63+ stLHS = False }
62
64
63pandocToLaTeX :: WriterOptions -> Pandoc -> State WriterState String
65pandocToLaTeX :: WriterOptions -> Pandoc -> State WriterState String
64pandocToLaTeX options (Pandoc (Meta title authors date) blocks) = do
66pandocToLaTeX options (Pandoc (Meta title authors date) blocks) = do
@@ -88,6 +90,7 @@ pandocToLaTeX options (Pandoc (Meta title authors date) blocks) = do
88 [ ("subscript", "yes") | stSubscript st ] ++
90 [ ("subscript", "yes") | stSubscript st ] ++
89 [ ("links", "yes") | stLink st ] ++
91 [ ("links", "yes") | stLink st ] ++
90 [ ("url", "yes") | stUrl st ] ++
92 [ ("url", "yes") | stUrl st ] ++
93+ [ ("lhs", "yes") | stLHS st ] ++
91 [ ("graphics", "yes") | stGraphics st ]
94 [ ("graphics", "yes") | stGraphics st ]
92 return $ if writerStandalone options
95 return $ if writerStandalone options
93 then renderTemplate context $ writerTemplate options
96 then renderTemplate context $ writerTemplate options
@@ -139,7 +142,9 @@ blockToLaTeX (CodeBlock (_,classes,_) str) = do
139 st <- get
142 st <- get
140 env <- if writerLiterateHaskell (stOptions st) && "haskell" `elem` classes &&
143 env <- if writerLiterateHaskell (stOptions st) && "haskell" `elem` classes &&
141 "literate" `elem` classes
144 "literate" `elem` classes
145+ then do
146+ modify $ \s -> s{ stLHS = True }
142− then return "code"
147+ return "code"
143 else if stInNote st
148 else if stInNote st
144 then do
149 then do
145 modify $ \s -> s{ stVerbInNote = True }
150 modify $ \s -> s{ stVerbInNote = True }
templates/latex.template+2
@@ -9,8 +9,10 @@ $else$
9\usepackage[mathletters]{ucs}
9\usepackage[mathletters]{ucs}
10\usepackage[utf8x]{inputenc}
10\usepackage[utf8x]{inputenc}
11$endif$
11$endif$
12+$if(lhs)$
12\usepackage{listings}
13\usepackage{listings}
13\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
14\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
15+$endif$
14\setlength{\parindent}{0pt}
16\setlength{\parindent}{0pt}
15\setlength{\parskip}{6pt plus 2pt minus 1pt}
17\setlength{\parskip}{6pt plus 2pt minus 1pt}
16$endif$
18$endif$
tests/lhs-test.latex−2
@@ -2,8 +2,6 @@
2\usepackage{amsmath}
2\usepackage{amsmath}
3\usepackage[mathletters]{ucs}
3\usepackage[mathletters]{ucs}
4\usepackage[utf8x]{inputenc}
4\usepackage[utf8x]{inputenc}
5−\usepackage{listings}
6−\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
7\setlength{\parindent}{0pt}
5\setlength{\parindent}{0pt}
8\setlength{\parskip}{6pt plus 2pt minus 1pt}
6\setlength{\parskip}{6pt plus 2pt minus 1pt}
9\setcounter{secnumdepth}{0}
7\setcounter{secnumdepth}{0}
tests/writer.latex−2
@@ -2,8 +2,6 @@
2\usepackage{amsmath}
2\usepackage{amsmath}
3\usepackage[mathletters]{ucs}
3\usepackage[mathletters]{ucs}
4\usepackage[utf8x]{inputenc}
4\usepackage[utf8x]{inputenc}
5−\usepackage{listings}
6−\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
7\setlength{\parindent}{0pt}
5\setlength{\parindent}{0pt}
8\setlength{\parskip}{6pt plus 2pt minus 1pt}
6\setlength{\parskip}{6pt plus 2pt minus 1pt}
9\usepackage{fancyvrb}
7\usepackage{fancyvrb}