@@ -119,20 +119,15 @@ anyEnvironment = try $ do
119119
120120-- | Process LaTeX preamble, extracting metadata.
121121processLaTeXPreamble :: GenParser Char ParserState ()
122−processLaTeXPreamble = try $ manyTill
123− (choice [bibliographic, comment, unknownCommand, nullBlock])
124− (try (string "\\begin{document}")) >>
125− spaces
122+processLaTeXPreamble =
123+ skipMany $ notFollowedBy' anyEnvironment >> block
126124
127125-- | Parse LaTeX and return 'Pandoc'.
128126parseLaTeX :: GenParser Char ParserState Pandoc
129127parseLaTeX = do
130− optional processLaTeXPreamble -- preamble might not be present (fragment)
131− spaces
132− blocks <- parseBlocks
133128 spaces
134− optional $ try (string "\\end{document}" >> many anyChar)
135− -- might not be present (fragment)
129+ blocks <- try (processLaTeXPreamble >> spaces >> environment "document")
130+ <|> many block
136131 spaces
137132 eof
138133 state <- getState
@@ -420,8 +415,8 @@ ignore = try $ do
420415
421416unknownCommand :: GenParser Char ParserState Block
422417unknownCommand = try $ do
423− notFollowedBy' $ choice $ map end ["itemize", "enumerate", "description",
424− "document"]
418+ spaces
419+ notFollowedBy' $ oneOfStrings ["\\begin","\\end","\\item"]
425420 state <- getState
426421 when (stateParserContext state == ListItemState) $
427422 notFollowedBy' (string "\\item")