@@ -200,12 +200,6 @@ withVerbatimMode parser = do
200200 updateState $ \st -> st{ sVerbatimMode = False }
201201 return result
202202
203−rawLaTeXBlock :: (PandocMonad m, HasMacros s, HasReaderOptions s)
204− => ParserT String s m String
205−rawLaTeXBlock = do
206− lookAhead (try (char '\\' >> letter))
207− rawLaTeXParser (environment <|> macroDef <|> blockCommand)
208−
209203rawLaTeXParser :: (PandocMonad m, HasMacros s, HasReaderOptions s)
210204 => LP m a -> ParserT String s m String
211205rawLaTeXParser parser = do
@@ -218,7 +212,7 @@ rawLaTeXParser parser = do
218212 case res of
219213 Left _ -> mzero
220214 Right (raw, st) -> do
221− updateState (updateMacros (const $ sMacros st))
215+ updateState (updateMacros ((sMacros st) <>))
222216 takeP (T.length (untokenize raw))
223217
224218macro :: (PandocMonad m, HasMacros s, HasReaderOptions s)
@@ -227,21 +221,26 @@ macro = do
227221 guardEnabled Ext_latex_macros
228222 lookAhead (char '\\' *> oneOfStrings ["new", "renew", "provide"] *>
229223 oneOfStrings ["command", "environment"])
230− mempty <$ rawLaTeXParser macroDef
231− -- since we're applying macros, we remove the defns
224+ rawBlock "latex" <$> rawLaTeXParser macroDef
232225
233226applyMacros :: (PandocMonad m, HasMacros s, HasReaderOptions s)
234227 => String -> ParserT String s m String
235−applyMacros s = do
236− (guardEnabled Ext_latex_macros >>
237− do let retokenize = doMacros 0 *> (toksToString <$> getInput)
228+applyMacros s = (guardDisabled Ext_latex_macros >> return s) <|>
229+ do let retokenize = doMacros 0 *>
230+ (toksToString <$> many (satisfyTok (const True)))
238231 pstate <- getState
239232 let lstate = def{ sOptions = extractReaderOptions pstate
240233 , sMacros = extractMacros pstate }
241234 res <- runParserT retokenize lstate "math" (tokenize (T.pack s))
242235 case res of
243236 Left e -> fail (show e)
244− Right s' -> return s') <|> return s
237+ Right s' -> return s'
238+
239+rawLaTeXBlock :: (PandocMonad m, HasMacros s, HasReaderOptions s)
240+ => ParserT String s m String
241+rawLaTeXBlock = do
242+ lookAhead (try (char '\\' >> letter))
243+ rawLaTeXParser (environment <|> macroDef <|> blockCommand)
245244
246245rawLaTeXInline :: (PandocMonad m, HasMacros s, HasReaderOptions s)
247246 => ParserT String s m String
@@ -1503,17 +1502,18 @@ authors = try $ do
15031502
15041503macroDef :: PandocMonad m => LP m Blocks
15051504macroDef = do
1506− guardEnabled Ext_latex_macros
15071505 mempty <$ ((commandDef <|> environmentDef) <* doMacros 0)
15081506 where commandDef = do
15091507 (name, macro') <- newcommand
1510− updateState $ \s -> s{ sMacros = M.insert name macro' (sMacros s) }
1508+ guardDisabled Ext_latex_macros <|>
1509+ updateState (\s -> s{ sMacros = M.insert name macro' (sMacros s) })
15111510 environmentDef = do
15121511 (name, macro1, macro2) <- newenvironment
1513− updateState $ \s -> s{ sMacros =
1514− M.insert name macro1 (sMacros s) }
1515− updateState $ \s -> s{ sMacros =
1516− M.insert ("end" <> name) macro2 (sMacros s) }
1512+ guardDisabled Ext_latex_macros <|>
1513+ do updateState $ \s -> s{ sMacros =
1514+ M.insert name macro1 (sMacros s) }
1515+ updateState $ \s -> s{ sMacros =
1516+ M.insert ("end" <> name) macro2 (sMacros s) }
15171517 -- @\newenvironment{envname}[n-args][default]{begin}{end}@
15181518 -- is equivalent to
15191519 -- @\newcommand{\envname}[n-args][default]{begin}@