From 70e308f2f9673cdf13bb42be4ad9b68265c02df1 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 12 Jan 2013 10:21:19 -0800 Subject: Escape `|` as `\vert` in LaTeX math. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This avoids a clash with highlighting-kate's macros, which redefine | as a short verbatim delimiter. Thanks to Björn Peemöller for raising this issue. --- src/Text/Pandoc/Writers/LaTeX.hs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/Text/Pandoc') diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs index aede568b6..035a98170 100644 --- a/src/Text/Pandoc/Writers/LaTeX.hs +++ b/src/Text/Pandoc/Writers/LaTeX.hs @@ -214,6 +214,13 @@ stringToLaTeX isUrl (x:xs) = do '\x2013' | ligatures -> "--" ++ rest _ -> x : rest +-- This is needed because | in math mode interacts badly with +-- highlighting-kate, which redefines | as a short verb command. +escapeMath :: String -> String +escapeMath ('|':xs) = "\\vert " ++ escapeMath xs +escapeMath (x:xs) = x : escapeMath xs +escapeMath [] = "" + -- | Puts contents into LaTeX command. inCmd :: String -> Doc -> Doc inCmd cmd contents = char '\\' <> text cmd <> braces contents @@ -603,8 +610,10 @@ inlineToLaTeX (Quoted qt lst) = do then char '`' <> inner <> char '\'' else char '\x2018' <> inner <> char '\x2019' inlineToLaTeX (Str str) = liftM text $ stringToLaTeX False str -inlineToLaTeX (Math InlineMath str) = return $ char '$' <> text str <> char '$' -inlineToLaTeX (Math DisplayMath str) = return $ "\\[" <> text str <> "\\]" +inlineToLaTeX (Math InlineMath str) = + return $ char '$' <> text (escapeMath str) <> char '$' +inlineToLaTeX (Math DisplayMath str) = + return $ "\\[" <> text (escapeMath str) <> "\\]" inlineToLaTeX (RawInline "latex" str) = return $ text str inlineToLaTeX (RawInline "tex" str) = return $ text str inlineToLaTeX (RawInline _ _) = return empty -- cgit v1.2.3