@@ -72,6 +72,7 @@ data WriterState =
72 , stEmptyLine :: Bool -- true if no content on line
72 , stEmptyLine :: Bool -- true if no content on line
73 , stHasCslRefs :: Bool -- has a Div with class refs
73 , stHasCslRefs :: Bool -- has a Div with class refs
74 , stCslHangingIndent :: Bool -- use hanging indent for bib
74 , stCslHangingIndent :: Bool -- use hanging indent for bib
75+ , stIsFirstInDefinition :: Bool -- first block in a defn list
77startingState :: WriterOptions -> WriterState
78startingState :: WriterOptions -> WriterState
@@ -102,7 +103,8 @@ startingState options = WriterState {
102 , stBeamer = False
103 , stBeamer = False
103 , stEmptyLine = True
104 , stEmptyLine = True
104 , stHasCslRefs = False
105 , stHasCslRefs = False
105− , stCslHangingIndent = False }
106+ , stCslHangingIndent = False
107+ , stIsFirstInDefinition = False }
107-- | Convert Pandoc to LaTeX.
109-- | Convert Pandoc to LaTeX.
108writeLaTeX :: PandocMonad m => WriterOptions -> Pandoc -> m Text
110writeLaTeX :: PandocMonad m => WriterOptions -> Pandoc -> m Text
@@ -682,19 +684,25 @@ blockToLaTeX b@(RawBlock f x) = do
682blockToLaTeX (BulletList []) = return empty -- otherwise latex error
684blockToLaTeX (BulletList []) = return empty -- otherwise latex error
683blockToLaTeX (BulletList lst) = do
685blockToLaTeX (BulletList lst) = do
684 incremental <- gets stIncremental
686 incremental <- gets stIncremental
687+ isFirstInDefinition <- gets stIsFirstInDefinition
685 beamer <- gets stBeamer
688 beamer <- gets stBeamer
686 let inc = if beamer && incremental then "[<+->]" else ""
689 let inc = if beamer && incremental then "[<+->]" else ""
687 items <- mapM listItemToLaTeX lst
690 items <- mapM listItemToLaTeX lst
688 let spacing = if isTightList lst
691 let spacing = if isTightList lst
689 then text "\\tightlist"
692 then text "\\tightlist"
690 else empty
693 else empty
691− return $ text ("\\begin{itemize}" <> inc) $$ spacing $$ vcat items $$
694+ return $ text ("\\begin{itemize}" <> inc) $$
696+ -- force list at beginning of definition to start on new line
697+ (if isFirstInDefinition then "\\item[]" else mempty) $$
692 "\\end{itemize}"
699 "\\end{itemize}"
693blockToLaTeX (OrderedList _ []) = return empty -- otherwise latex error
700blockToLaTeX (OrderedList _ []) = return empty -- otherwise latex error
694blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do
701blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do
695 st <- get
702 st <- get
696 let inc = if stBeamer st && stIncremental st then "[<+->]" else ""
703 let inc = if stBeamer st && stIncremental st then "[<+->]" else ""
697 let oldlevel = stOLLevel st
704 let oldlevel = stOLLevel st
705+ isFirstInDefinition <- gets stIsFirstInDefinition
698 put $ st {stOLLevel = oldlevel + 1}
706 put $ st {stOLLevel = oldlevel + 1}
699 items <- mapM listItemToLaTeX lst
707 items <- mapM listItemToLaTeX lst
700 modify (\s -> s {stOLLevel = oldlevel})
708 modify (\s -> s {stOLLevel = oldlevel})
@@ -738,6 +746,8 @@ blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do
738 $$ stylecommand
746 $$ stylecommand
739 $$ resetcounter
747 $$ resetcounter
740 $$ spacing
748 $$ spacing
749+ -- force list at beginning of definition to start on new line
750+ $$ (if isFirstInDefinition then "\\item[]" else mempty)
741 $$ vcat items
751 $$ vcat items
742 $$ "\\end{enumerate}"
752 $$ "\\end{enumerate}"
743blockToLaTeX (DefinitionList []) = return empty
753blockToLaTeX (DefinitionList []) = return empty
@@ -948,7 +958,14 @@ defListItemToLaTeX (term, defs) = do
948 let term'' = if any isInternalLink term
958 let term'' = if any isInternalLink term
949 then braces term'
959 then braces term'
950 else term'
960 else term'
951− def' <- liftM vsep $ mapM blockListToLaTeX defs
961+ def' <- case concat defs of
964+ modify $ \s -> s{stIsFirstInDefinition = True }
965+ firstitem <- blockToLaTeX x
966+ modify $ \s -> s{stIsFirstInDefinition = False }
967+ rest <- blockListToLaTeX xs
968+ return $ firstitem $+$ rest
952 return $ case defs of
969 return $ case defs of
953 ((Header{} : _) : _) ->
970 ((Header{} : _) : _) ->
954 "\\item" <> brackets term'' <> " ~ " $$ def'
971 "\\item" <> brackets term'' <> " ~ " $$ def'