@@ -171,8 +171,8 @@ pandocToLaTeX options (Pandoc (Meta title authors date) blocks) = do
171-- | Convert Elements to LaTeX
171-- | Convert Elements to LaTeX
172elementToLaTeX :: WriterOptions -> Element -> State WriterState Doc
172elementToLaTeX :: WriterOptions -> Element -> State WriterState Doc
173elementToLaTeX _ (Blk block) = blockToLaTeX block
173elementToLaTeX _ (Blk block) = blockToLaTeX block
174−elementToLaTeX opts (Sec level _ (id',_,_) title' elements) = do
174+elementToLaTeX opts (Sec level _ (id',classes,_) title' elements) = do
175− header' <- sectionHeader id' level title'
175+ header' <- sectionHeader ("unnumbered" `elem` classes) id' level title'
176 innerContents <- mapM (elementToLaTeX opts) elements
176 innerContents <- mapM (elementToLaTeX opts) elements
177 return $ vsep (header' : innerContents)
177 return $ vsep (header' : innerContents)
@@ -236,7 +236,7 @@ toSlides bs = do
237elementToBeamer :: Int -> Element -> State WriterState [Block]
237elementToBeamer :: Int -> Element -> State WriterState [Block]
238elementToBeamer _slideLevel (Blk b) = return [b]
238elementToBeamer _slideLevel (Blk b) = return [b]
239−elementToBeamer slideLevel (Sec lvl _num (ident,_,_) tit elts)
239+elementToBeamer slideLevel (Sec lvl _num (ident,classes,_) tit elts)
240 | lvl > slideLevel = do
240 | lvl > slideLevel = do
241 bs <- concat `fmap` mapM (elementToBeamer slideLevel) elts
241 bs <- concat `fmap` mapM (elementToBeamer slideLevel) elts
242 return $ Para ( RawInline "latex" "\\begin{block}{"
242 return $ Para ( RawInline "latex" "\\begin{block}{"
@@ -244,7 +244,7 @@ elementToBeamer slideLevel (Sec lvl _num (ident,_,_) tit elts)
244 : bs ++ [RawBlock "latex" "\\end{block}"]
244 : bs ++ [RawBlock "latex" "\\end{block}"]
245 | lvl < slideLevel = do
245 | lvl < slideLevel = do
246 bs <- concat `fmap` mapM (elementToBeamer slideLevel) elts
246 bs <- concat `fmap` mapM (elementToBeamer slideLevel) elts
247− return $ (Header lvl (ident,[],[]) tit) : bs
247+ return $ (Header lvl (ident,classes,[]) tit) : bs
248 | otherwise = do -- lvl == slideLevel
248 | otherwise = do -- lvl == slideLevel
249 -- note: [fragile] is required or verbatim breaks
249 -- note: [fragile] is required or verbatim breaks
250 let hasCodeBlock (CodeBlock _ _) = [True]
250 let hasCodeBlock (CodeBlock _ _) = [True]
@@ -404,7 +404,8 @@ blockToLaTeX (DefinitionList lst) = do
404 "\\end{description}"
404 "\\end{description}"
405blockToLaTeX HorizontalRule = return $
405blockToLaTeX HorizontalRule = return $
406 "\\begin{center}\\rule{3in}{0.4pt}\\end{center}"
406 "\\begin{center}\\rule{3in}{0.4pt}\\end{center}"
407−blockToLaTeX (Header level (id',_,_) lst) = sectionHeader id' level lst
407+blockToLaTeX (Header level (id',classes,_) lst) =
408+ sectionHeader ("unnumbered" `elem` classes) id' level lst
408blockToLaTeX (Table caption aligns widths heads rows) = do
409blockToLaTeX (Table caption aligns widths heads rows) = do
409 modify $ \s -> s{ stInTable = True, stTableNotes = [] }
410 modify $ \s -> s{ stInTable = True, stTableNotes = [] }
410 headers <- if all null heads
411 headers <- if all null heads
@@ -475,15 +476,17 @@ defListItemToLaTeX (term, defs) = do
475 return $ "\\item" <> brackets term' $$ def'
476 return $ "\\item" <> brackets term' $$ def'
477-- | Craft the section header, inserting the secton reference, if supplied.
478-- | Craft the section header, inserting the secton reference, if supplied.
478−sectionHeader :: [Char]
479+sectionHeader :: Bool -- True for unnumbered
480 -> [Inline]
482 -> [Inline]
481 -> State WriterState Doc
483 -> State WriterState Doc
482−sectionHeader ref level lst = do
484+sectionHeader unnumbered ref level lst = do
483 txt <- inlineListToLaTeX lst
485 txt <- inlineListToLaTeX lst
484 let noNote (Note _) = Str ""
486 let noNote (Note _) = Str ""
485 noNote x = x
487 noNote x = x
486 let lstNoNotes = bottomUp noNote lst
488 let lstNoNotes = bottomUp noNote lst
489+ let star = if unnumbered then text "*" else empty
487 -- footnotes in sections don't work unless you specify an optional
490 -- footnotes in sections don't work unless you specify an optional
488 -- argument: \section[mysec]{mysec\footnote{blah}}
491 -- argument: \section[mysec]{mysec\footnote{blah}}
489 optional <- if lstNoNotes == lst
492 optional <- if lstNoNotes == lst
@@ -491,7 +494,7 @@ sectionHeader ref level lst = do
492 res <- inlineListToLaTeX lstNoNotes
495 res <- inlineListToLaTeX lstNoNotes
493 return $ char '[' <> res <> char ']'
496 return $ char '[' <> res <> char ']'
494− let stuffing = optional <> char '{' <> txt <> char '}'
497+ let stuffing = star <> optional <> char '{' <> txt <> char '}'
495 book <- gets stBook
498 book <- gets stBook
496 opts <- gets stOptions
499 opts <- gets stOptions
497 let level' = if book || writerChapters opts then level - 1 else level
500 let level' = if book || writerChapters opts then level - 1 else level