@@ -1506,21 +1506,28 @@ macroDef =
15061506letmacro :: PandocMonad m => LP m (Text, Macro)
15071507letmacro = do
15081508 controlSeq "let"
1509− Tok _ (CtrlSeq name) _ <- anyControlSeq
1510− optional $ symbol '='
1511− spaces
1512− contents <- bracedOrToken
1513− return (name, Macro ExpandWhenDefined [] Nothing contents)
1509+ (name, contents) <- withVerbatimMode $ do
1510+ Tok _ (CtrlSeq name) _ <- withVerbatimMode anyControlSeq
1511+ optional $ symbol '='
1512+ spaces
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}
1516+ contents <- bracedOrToken
1517+ return (name, contents)
1518+ contents' <- fromMaybe contents <$> doMacros' 0 contents
1519+ return (name, Macro ExpandWhenDefined [] Nothing contents')
15141520
15151521defmacro :: PandocMonad m => LP m (Text, Macro)
1516−defmacro = try $ do
1517− controlSeq "def"
1518− Tok _ (CtrlSeq name) _ <- anyControlSeq
1519− argspecs <- many (argspecArg <|> argspecPattern)
1522+defmacro = try $
15201523 -- we use withVerbatimMode, because macros are to be expanded
15211524 -- at point of use, not point of definition
1522− contents <- withVerbatimMode bracedOrToken
1523− return (name, Macro ExpandWhenUsed argspecs Nothing contents)
1525+ withVerbatimMode $ do
1526+ controlSeq "def"
1527+ Tok _ (CtrlSeq name) _ <- anyControlSeq
1528+ argspecs <- many (argspecArg <|> argspecPattern)
1529+ contents <- bracedOrToken
1530+ return (name, Macro ExpandWhenUsed argspecs Nothing contents)
15241531
15251532argspecArg :: PandocMonad m => LP m ArgSpec
15261533argspecArg = do