From 814bdbdbef0075f056667c368901856c7fd311da Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 4 Nov 2025 14:30:05 +0100 Subject: Better handling of `\makeatletter` in parsing raw LaTeX. Closes #11270. --- src/Text/Pandoc/Readers/LaTeX.hs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index 11419b15f..f12c73d7b 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -144,7 +144,8 @@ rawLaTeXBlock = do toks <- getInputTokens snd <$> ( rawLaTeXParser toks - (macroDef (const mempty) <|> + (makeAtLetterSection <|> + macroDef (const mempty) <|> do choice (map controlSeq ["include", "input", "subfile", "usepackage"]) skipMany opt @@ -154,6 +155,17 @@ rawLaTeXBlock = do (void (environment <|> blockCommand)) (mconcat <$> many (block <|> beginOrEndCommand))) +makeAtLetterSection :: PandocMonad m => LP m () +makeAtLetterSection = try $ do + controlSeq "makeatletter" + void $ manyTill + ( whitespace + <|> newlineTok + <|> macroDef (const ()) + <|> void environment + <|> void blockCommand + ) (controlSeq "makeatother") + -- See #4667 for motivation; sometimes people write macros -- that just evaluate to a begin or end command, which blockCommand -- won't accept. -- cgit v1.2.3