Better handling of \makeatletter in parsing raw LaTeX.

Closes #11270.
This commit is contained in:
John MacFarlane
2025-11-04 14:30:05 +01:00
parent 69479fa490
commit 814bdbdbef
2 changed files with 38 additions and 1 deletions
+13 -1
View File
@@ -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.
+25
View File
@@ -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"
]
)
]
}
[]
```