From ba5ca7465adb2bd955bc9e64a620d175c5ef8c1f Mon Sep 17 00:00:00 2001 From: Don Yin Date: Tue, 20 Oct 2026 09:56:37 +0100 Subject: [PATCH] TeX reader: accept empty delimiters in \genfrac --- src/Text/TeXMath/Readers/TeX.hs | 10 +++----- test/reader/tex/genfrac-empty.test | 40 ++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 test/reader/tex/genfrac-empty.test diff --git a/src/Text/TeXMath/Readers/TeX.hs b/src/Text/TeXMath/Readers/TeX.hs index 3a2499c9..1a24d04f 100644 --- a/src/Text/TeXMath/Readers/TeX.hs +++ b/src/Text/TeXMath/Readers/TeX.hs @@ -311,12 +311,10 @@ binomCmds = M.fromList genfrac :: Text -> TP Exp genfrac "\\genfrac" = do - let opener = option "" $ - T.singleton <$> ((char '\\' >> anyChar) <|> anyChar) - let closer = option "" $ - T.singleton <$> ((char '\\' >> anyChar) <|> anyChar) - openDelim <- braces opener <|> opener - closeDelim <- braces closer <|> closer + let delim = option "" $ + T.singleton <$> ((char '\\' >> anyChar) <|> satisfy (/= '}')) + openDelim <- braces delim <|> delim + closeDelim <- braces delim <|> delim bar <- False <$ try (braces (string "0pt")) <|> True <$ texToken displayStyle <- True <$ try (braces (char '0')) <|> False <$ texToken x <- texToken diff --git a/test/reader/tex/genfrac-empty.test b/test/reader/tex/genfrac-empty.test new file mode 100644 index 00000000..eedca996 --- /dev/null +++ b/test/reader/tex/genfrac-empty.test @@ -0,0 +1,40 @@ +<<< tex +\genfrac{}{}{0pt}{}{a}{b} +\genfrac{}{}{1pt}{}{a}{b} +\genfrac{}{}{1pt}{0}{a}{b} +\genfrac{(}{}{0pt}{}{a}{b} +\genfrac{}{)}{0pt}{}{a}{b} +\genfrac(]{0pt}{2}{a}{b} + +>>> native +[ EDelimited + "" + "" + [ Right (EFraction NoLineFrac (EIdentifier "a") (EIdentifier "b")) + ] +, EDelimited + "" + "" + [ Right (EFraction NormalFrac (EIdentifier "a") (EIdentifier "b")) + ] +, EDelimited + "" + "" + [ Right (EFraction DisplayFrac (EIdentifier "a") (EIdentifier "b")) + ] +, EDelimited + "(" + "" + [ Right (EFraction NoLineFrac (EIdentifier "a") (EIdentifier "b")) + ] +, EDelimited + "" + ")" + [ Right (EFraction NoLineFrac (EIdentifier "a") (EIdentifier "b")) + ] +, EDelimited + "(" + "]" + [ Right (EFraction NoLineFrac (EIdentifier "a") (EIdentifier "b")) + ] +]