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