@@ -60,7 +60,7 @@ writeLaTeX options document =
60pandocToLaTeX :: WriterOptions -> Pandoc -> State WriterState Doc
60pandocToLaTeX :: WriterOptions -> Pandoc -> State WriterState Doc
61pandocToLaTeX options (Pandoc meta blocks) = do
61pandocToLaTeX options (Pandoc meta blocks) = do
62 main <- blockListToLaTeX blocks
62 main <- blockListToLaTeX blocks
63− head <- if writerStandalone options
63+ head' <- if writerStandalone options
64 then latexHeader options meta
64 then latexHeader options meta
65 else return empty
65 else return empty
66 let before = if null (writerIncludeBefore options)
66 let before = if null (writerIncludeBefore options)
@@ -76,7 +76,7 @@ pandocToLaTeX options (Pandoc meta blocks) = do
76 let foot = if writerStandalone options
76 let foot = if writerStandalone options
77 then text "\\end{document}"
77 then text "\\end{document}"
78 else empty
78 else empty
79− return $ head $$ toc $$ body $$ foot
79+ return $ head' $$ toc $$ body $$ foot
81-- | Insert bibliographic information into LaTeX header.
81-- | Insert bibliographic information into LaTeX header.
82latexHeader :: WriterOptions -- ^ Options, including LaTeX header
82latexHeader :: WriterOptions -- ^ Options, including LaTeX header
@@ -155,7 +155,7 @@ blockToLaTeX (CodeBlock _ str) = do
155 else return "verbatim"
155 else return "verbatim"
156 return $ text ("\\begin{" ++ env ++ "}\n") <> text str <>
156 return $ text ("\\begin{" ++ env ++ "}\n") <> text str <>
157 text ("\n\\end{" ++ env ++ "}")
157 text ("\n\\end{" ++ env ++ "}")
158−blockToLaTeX (RawHtml str) = return empty
158+blockToLaTeX (RawHtml _) = return empty
159blockToLaTeX (BulletList lst) = do
159blockToLaTeX (BulletList lst) = do
160 items <- mapM listItemToLaTeX lst
160 items <- mapM listItemToLaTeX lst
161 return $ text "\\begin{itemize}" $$ vcat items $$ text "\\end{itemize}"
161 return $ text "\\begin{itemize}" $$ vcat items $$ text "\\end{itemize}"
@@ -164,7 +164,7 @@ blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do
164 let oldlevel = stOLLevel st
164 let oldlevel = stOLLevel st
165 put $ st {stOLLevel = oldlevel + 1}
165 put $ st {stOLLevel = oldlevel + 1}
166 items <- mapM listItemToLaTeX lst
166 items <- mapM listItemToLaTeX lst
167− modify (\st -> st {stOLLevel = oldlevel})
167+ modify (\s -> s {stOLLevel = oldlevel})
168 exemplar <- if numstyle /= DefaultStyle || numdelim /= DefaultDelim
168 exemplar <- if numstyle /= DefaultStyle || numdelim /= DefaultDelim
169 then do addToHeader "\\usepackage{enumerate}"
169 then do addToHeader "\\usepackage{enumerate}"
170 return $ char '[' <>
170 return $ char '[' <>
@@ -218,15 +218,19 @@ blockToLaTeX (Table caption aligns widths heads rows) = do
218 else text "\\begin{table}[h]" $$ centered tableBody $$
218 else text "\\begin{table}[h]" $$ centered tableBody $$
219 inCmd "caption" captionText $$ text "\\end{table}\n"
219 inCmd "caption" captionText $$ text "\\end{table}\n"
221+blockListToLaTeX :: [Block] -> State WriterState Doc
221blockListToLaTeX lst = mapM blockToLaTeX lst >>= return . vcat
222blockListToLaTeX lst = mapM blockToLaTeX lst >>= return . vcat
224+tableRowToLaTeX :: [[Block]] -> State WriterState Doc
223tableRowToLaTeX cols = mapM blockListToLaTeX cols >>=
225tableRowToLaTeX cols = mapM blockListToLaTeX cols >>=
224 return . ($$ text "\\\\") . foldl (\row item -> row $$
226 return . ($$ text "\\\\") . foldl (\row item -> row $$
225 (if isEmpty row then empty else text " & ") <> item) empty
227 (if isEmpty row then empty else text " & ") <> item) empty
229+listItemToLaTeX :: [Block] -> State WriterState Doc
227listItemToLaTeX lst = blockListToLaTeX lst >>= return . (text "\\item " $$) .
230listItemToLaTeX lst = blockListToLaTeX lst >>= return . (text "\\item " $$) .
233+defListItemToLaTeX :: ([Inline], [Block]) -> State WriterState Doc
230defListItemToLaTeX (term, def) = do
234defListItemToLaTeX (term, def) = do
231 term' <- inlineListToLaTeX $ deVerb term
235 term' <- inlineListToLaTeX $ deVerb term
232 def' <- blockListToLaTeX def
236 def' <- blockListToLaTeX def
@@ -293,7 +297,7 @@ inlineToLaTeX Ellipses = return $ text "\\ldots{}"
293inlineToLaTeX (Str str) = return $ text $ stringToLaTeX str
297inlineToLaTeX (Str str) = return $ text $ stringToLaTeX str
294inlineToLaTeX (Math str) = return $ char '$' <> text str <> char '$'
298inlineToLaTeX (Math str) = return $ char '$' <> text str <> char '$'
295inlineToLaTeX (TeX str) = return $ text str
299inlineToLaTeX (TeX str) = return $ text str
296−inlineToLaTeX (HtmlInline str) = return empty
300+inlineToLaTeX (HtmlInline _) = return empty
297inlineToLaTeX (LineBreak) = return $ text "\\\\"
301inlineToLaTeX (LineBreak) = return $ text "\\\\"
298inlineToLaTeX Space = return $ char ' '
302inlineToLaTeX Space = return $ char ' '
299inlineToLaTeX (Link txt (src, _)) = do
303inlineToLaTeX (Link txt (src, _)) = do
@@ -305,14 +309,14 @@ inlineToLaTeX (Link txt (src, _)) = do
305 _ -> do contents <- inlineListToLaTeX $ deVerb txt
309 _ -> do contents <- inlineListToLaTeX $ deVerb txt
306 return $ text ("\\href{" ++ src ++ "}{") <> contents <>
310 return $ text ("\\href{" ++ src ++ "}{") <> contents <>
308−inlineToLaTeX (Image alternate (source, tit)) = do
312+inlineToLaTeX (Image _ (source, _)) = do
309 addToHeader "\\usepackage{graphicx}"
313 addToHeader "\\usepackage{graphicx}"
310 return $ text $ "\\includegraphics{" ++ source ++ "}"
314 return $ text $ "\\includegraphics{" ++ source ++ "}"
311inlineToLaTeX (Note contents) = do
315inlineToLaTeX (Note contents) = do
312 st <- get
316 st <- get
313 put (st {stInNote = True})
317 put (st {stInNote = True})
314 contents' <- blockListToLaTeX contents
318 contents' <- blockListToLaTeX contents
315− modify (\st -> st {stInNote = False})
319+ modify (\s -> s {stInNote = False})
316 let rawnote = stripTrailingNewlines $ render contents'
320 let rawnote = stripTrailingNewlines $ render contents'
317 -- note: a \n before } is needed when note ends with a Verbatim environment
321 -- note: a \n before } is needed when note ends with a Verbatim environment
318 let optNewline = "\\end{Verbatim}" `isSuffixOf` rawnote
322 let optNewline = "\\end{Verbatim}" `isSuffixOf` rawnote