From e0290fd18bb523f5f08e2d5f5d2a8b89916654d2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 31 Oct 2018 21:51:20 -0700 Subject: LaTeX writer: add newline if math ends in a comment. This prevents the closing delimiter from being swalled up in the comment. Closes #4880. --- src/Text/Pandoc/Writers/LaTeX.hs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/Text') diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs index 11d58b90a..a2c7ac34f 100644 --- a/src/Text/Pandoc/Writers/LaTeX.hs +++ b/src/Text/Pandoc/Writers/LaTeX.hs @@ -1168,10 +1168,10 @@ inlineToLaTeX (Str str) = do liftM text $ stringToLaTeX TextString str inlineToLaTeX (Math InlineMath str) = do setEmptyLine False - return $ "\\(" <> text str <> "\\)" + return $ "\\(" <> text (handleMathComment str) <> "\\)" inlineToLaTeX (Math DisplayMath str) = do setEmptyLine False - return $ "\\[" <> text str <> "\\]" + return $ "\\[" <> text (handleMathComment str) <> "\\]" inlineToLaTeX il@(RawInline f str) | f == Format "latex" || f == Format "tex" = do @@ -1272,6 +1272,16 @@ inlineToLaTeX (Note contents) = do -- note: a \n before } needed when note ends with a Verbatim environment else "\\footnote" <> beamerMark <> braces noteContents +-- A comment at the end of math needs to be followed by a newline, +-- or the closing delimiter gets swallowed. +handleMathComment :: String -> String +handleMathComment s = + let (xs, ys) = break (\c -> c == '\n' || c == '%') $ reverse s + in case ys of + '%':'\\':_ -> s + '%':_ -> s ++ "\n" + _ -> s + protectCode :: [Inline] -> [Inline] protectCode [] = [] protectCode (x@(Code ("",[],[]) _) : xs) = x : protectCode xs -- cgit v1.2.3