@@ -242,8 +242,8 @@ withVerbatimMode parser = do
242 return result
242 return result
244rawLaTeXParser :: (PandocMonad m, HasMacros s, HasReaderOptions s)
244rawLaTeXParser :: (PandocMonad m, HasMacros s, HasReaderOptions s)
245− => LP m a -> LP m a -> ParserT String s m (a, String)
245+ => Bool -> LP m a -> LP m a -> ParserT String s m (a, String)
246−rawLaTeXParser parser valParser = do
246+rawLaTeXParser retokenize parser valParser = do
247 inp <- getInput
247 inp <- getInput
248 let toks = tokenize "source" $ T.pack inp
248 let toks = tokenize "source" $ T.pack inp
249 pstate <- getState
249 pstate <- getState
@@ -254,10 +254,11 @@ rawLaTeXParser parser valParser = do
254 case res' of
254 case res' of
255 Left _ -> mzero
255 Left _ -> mzero
256 Right toks' -> do
256 Right toks' -> do
257− res <- lift $ runParserT (do doMacros 0
257+ res <- lift $ runParserT (do when retokenize $ do
258− -- retokenize, applying macros
258+ -- retokenize, applying macros
259− ts <- many (satisfyTok (const True))
260+ ts <- many (satisfyTok (const True))
260− setInput ts
261+ setInput ts
261 rawparser)
262 rawparser)
262 lstate' "chunk" toks'
263 lstate' "chunk" toks'
263 case res of
264 case res of
@@ -284,20 +285,19 @@ rawLaTeXBlock :: (PandocMonad m, HasMacros s, HasReaderOptions s)
284 => ParserT String s m String
285 => ParserT String s m String
285rawLaTeXBlock = do
286rawLaTeXBlock = do
286 lookAhead (try (char '\\' >> letter))
287 lookAhead (try (char '\\' >> letter))
287− -- we don't want to apply newly defined latex macros to their own
288+ snd <$> (rawLaTeXParser False macroDef blocks
289− snd <$> rawLaTeXParser (environment <|> macroDef <|> blockCommand) blocks
289+ <|> rawLaTeXParser True(environment <|> macroDef <|> blockCommand) blocks)
291rawLaTeXInline :: (PandocMonad m, HasMacros s, HasReaderOptions s)
291rawLaTeXInline :: (PandocMonad m, HasMacros s, HasReaderOptions s)
292 => ParserT String s m String
292 => ParserT String s m String
293rawLaTeXInline = do
293rawLaTeXInline = do
294 lookAhead (try (char '\\' >> letter))
294 lookAhead (try (char '\\' >> letter))
295− snd <$> rawLaTeXParser (inlineEnvironment <|> inlineCommand') inlines
295+ snd <$> rawLaTeXParser True (inlineEnvironment <|> inlineCommand') inlines
297inlineCommand :: PandocMonad m => ParserT String ParserState m Inlines
297inlineCommand :: PandocMonad m => ParserT String ParserState m Inlines
298inlineCommand = do
298inlineCommand = do
299 lookAhead (try (char '\\' >> letter))
299 lookAhead (try (char '\\' >> letter))
300− fst <$> rawLaTeXParser (inlineEnvironment <|> inlineCommand') inlines
300+ fst <$> rawLaTeXParser True (inlineEnvironment <|> inlineCommand') inlines
302tokenize :: SourceName -> Text -> [Tok]
302tokenize :: SourceName -> Text -> [Tok]
303tokenize sourcename = totoks (initialPos sourcename)
303tokenize sourcename = totoks (initialPos sourcename)