diff options
| author | John MacFarlane <[email protected]> | 2025-11-04 14:30:05 +0100 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2025-11-04 14:30:05 +0100 |
| commit | 814bdbdbef0075f056667c368901856c7fd311da (patch) | |
| tree | 0709de5465d48fce4c266c100356ae61ca8f6c65 | |
| parent | 69479fa49086dae60910fa8cc2d3d658fa95bb43 (diff) | |
Better handling of `\makeatletter` in parsing raw LaTeX.
Closes #11270.
| -rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 14 | ||||
| -rw-r--r-- | test/command/11270.md | 25 |
2 files changed, 38 insertions, 1 deletions
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. diff --git a/test/command/11270.md b/test/command/11270.md new file mode 100644 index 000000000..7cf681033 --- /dev/null +++ b/test/command/11270.md @@ -0,0 +1,25 @@ +``` +% pandoc -f markdown -t native -s +--- +header-includes: | + \makeatletter + \beamer@ignorenonframefalse + \makeatother +... + +^D +Pandoc + Meta + { unMeta = + fromList + [ ( "header-includes" + , MetaBlocks + [ RawBlock + (Format "tex") + "\\makeatletter\n\\beamer@ignorenonframefalse\n\\makeatother" + ] + ) + ] + } + [] +``` |
