diff options
author | John MacFarlane <fiddlosopher@gmail.com> | 2013-01-12 10:21:19 -0800 |
---|---|---|
committer | John MacFarlane <fiddlosopher@gmail.com> | 2013-01-12 10:21:19 -0800 |
commit | 70e308f2f9673cdf13bb42be4ad9b68265c02df1 (patch) | |
tree | 8af81ce283121cc98b9aa8dd922d400d394c3091 | |
parent | f2aa5fd661cc74326ebc40f80c8854564e386b74 (diff) | |
download | pandoc-70e308f2f9673cdf13bb42be4ad9b68265c02df1.tar.gz |
Escape `|` as `\vert` in LaTeX math.
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.
-rw-r--r-- | src/Text/Pandoc/Writers/LaTeX.hs | 13 | ||||
-rw-r--r-- | tests/Tests/Writers/LaTeX.hs | 4 |
2 files changed, 15 insertions, 2 deletions
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 diff --git a/tests/Tests/Writers/LaTeX.hs b/tests/Tests/Writers/LaTeX.hs index 16e0c3f23..33d6ecc78 100644 --- a/tests/Tests/Writers/LaTeX.hs +++ b/tests/Tests/Writers/LaTeX.hs @@ -32,4 +32,8 @@ tests = [ testGroup "code blocks" [ "in footnotes" =: note (para "hi" <> codeBlock "hi") =?> "\\footnote{hi\n\n\\begin{Verbatim}\nhi\n\\end{Verbatim}\n}" ] + , testGroup "math" + [ "escape |" =: para (math "\\sigma|_{\\{x\\}}") =?> + "$\\sigma\\vert _{\\{x\\}}$" + ] ] |