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 ++++++++++++-- test/command/4880.md | 7 +++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 test/command/4880.md 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 diff --git a/test/command/4880.md b/test/command/4880.md new file mode 100644 index 000000000..638e3edee --- /dev/null +++ b/test/command/4880.md @@ -0,0 +1,7 @@ +``` +% pandoc -t latex +$x=y%comment$ +^D +\(x=y%comment +\) +``` -- cgit v1.2.3