@@ -1506,21 +1506,28 @@ macroDef =
1506letmacro :: PandocMonad m => LP m (Text, Macro)
1506letmacro :: PandocMonad m => LP m (Text, Macro)
1507letmacro = do
1507letmacro = do
1508 controlSeq "let"
1508 controlSeq "let"
1509+ (name, contents) <- withVerbatimMode $ do
1509− Tok _ (CtrlSeq name) _ <- anyControlSeq
1510+ Tok _ (CtrlSeq name) _ <- withVerbatimMode anyControlSeq
1510− optional $ symbol '='
1511+ optional $ symbol '='
1513+ -- we first parse in verbatim mode, and then expand macros,
1514+ -- because we don't want \let\foo\bar to turn into
1515+ -- \let\foo hello if we have previously \def\bar{hello}
1512− contents <- bracedOrToken
1516+ contents <- bracedOrToken
1517+ return (name, contents)
1518+ contents' <- fromMaybe contents <$> doMacros' 0 contents
1513− return (name, Macro ExpandWhenDefined [] Nothing contents)
1519+ return (name, Macro ExpandWhenDefined [] Nothing contents')
1515defmacro :: PandocMonad m => LP m (Text, Macro)
1521defmacro :: PandocMonad m => LP m (Text, Macro)
1516−defmacro = try $ do
1522+defmacro = try $
1518− Tok _ (CtrlSeq name) _ <- anyControlSeq
1519− argspecs <- many (argspecArg <|> argspecPattern)
1520 -- we use withVerbatimMode, because macros are to be expanded
1523 -- we use withVerbatimMode, because macros are to be expanded
1521 -- at point of use, not point of definition
1524 -- at point of use, not point of definition
1522− contents <- withVerbatimMode bracedOrToken
1525+ withVerbatimMode $ do
1527+ Tok _ (CtrlSeq name) _ <- anyControlSeq
1528+ argspecs <- many (argspecArg <|> argspecPattern)
1529+ contents <- bracedOrToken
1523− return (name, Macro ExpandWhenUsed argspecs Nothing contents)
1530+ return (name, Macro ExpandWhenUsed argspecs Nothing contents)
1525argspecArg :: PandocMonad m => LP m ArgSpec
1532argspecArg :: PandocMonad m => LP m ArgSpec
1526argspecArg = do
1533argspecArg = do