@@ -39,6 +39,7 @@ import Text.Pandoc.Shared
3939import Data.Maybe ( fromMaybe )
4040import Data.Char ( chr )
4141import Data.List ( isPrefixOf, isSuffixOf )
42+import Control.Monad ( when )
4243
4344-- | Parse LaTeX from string and return 'Pandoc' document.
4445readLaTeX :: ParserState -- ^ Parser state, including options for parser
@@ -400,21 +401,22 @@ unknownCommand = try $ do
400401 notFollowedBy' $ choice $ map end ["itemize", "enumerate", "description",
401402 "document"]
402403 state <- getState
403− if stateParserContext state == ListItemState
404− then notFollowedBy' $ string "\\item"
405− else return ()
404+ when (stateParserContext state == ListItemState) $
405+ notFollowedBy' (string "\\item")
406406 if stateParseRaw state
407407 then do
408408 (name, star, args) <- command
409409 spaces
410410 return $ Plain [TeX ("\\" ++ name ++ star ++ concat args)]
411− else do -- skip unknown command, leaving arguments to be parsed
412− char '\\'
413− letter
414− many (letter <|> digit)
415− optional (try $ string "{}")
411+ else do
412+ (name, _, args) <- command
416413 spaces
417− return Null
414+ if name `elem` commandsToIgnore
415+ then return Null
416+ else return $ Plain [Str $ concat args]
417+
418+commandsToIgnore :: [String]
419+commandsToIgnore = ["special","pdfannot","pdfstringdef"]
418420
419421-- latex comment
420422comment :: GenParser Char st Block
@@ -780,9 +782,9 @@ rawLaTeXInline = try $ do
780782 then do
781783 (name, star, args) <- command
782784 return $ TeX ("\\" ++ name ++ star ++ concat args)
783− else do -- skip unknown command, leaving arguments to be parsed
784− char '\\'
785− letter
786− many (letter <|> digit)
787− optional (try $ string "{}")
788− return $ Str ""
785+ else do
786+ (name, _, args) <- command
787+ spaces
788+ if name `elem` commandsToIgnore
789+ then return $ Str ""
790+ else return $ Str (concat args)