From c24ab1491808d8be98ab30ba6b3993fa075ca376 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 15 Jul 2014 16:42:39 -0700 Subject: [PATCH] LaTeX writer: Use \nolinkurl in email autolinks. This allows them to be styled using `\urlstyle{tt}`. Thanks to Ulrike Fischer for the solution. --- src/Text/Pandoc/Writers/LaTeX.hs | 11 +++++++++-- tests/writer.latex | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs index 5bbe30fc8..0197d5db6 100644 --- a/src/Text/Pandoc/Writers/LaTeX.hs +++ b/src/Text/Pandoc/Writers/LaTeX.hs @@ -757,10 +757,17 @@ inlineToLaTeX (Link txt ('#':ident, _)) = do return $ text "\\hyperref" <> brackets (text lab) <> braces contents inlineToLaTeX (Link txt (src, _)) = case txt of - [Str x] | x == src -> -- autolink + [Str x] | escapeURI x == src -> -- autolink do modify $ \s -> s{ stUrl = True } - src' <- stringToLaTeX URLString x + src' <- stringToLaTeX URLString src return $ text $ "\\url{" ++ src' ++ "}" + [Str x] | "mailto:" `isPrefixOf` src && + escapeURI x == drop 7 src -> -- email autolink + do modify $ \s -> s{ stUrl = True } + src' <- stringToLaTeX URLString src + contents <- inlineListToLaTeX txt + return $ "\\href" <> braces (text src') <> + braces ("\\nolinkurl" <> braces contents) _ -> do contents <- inlineListToLaTeX txt src' <- stringToLaTeX URLString src return $ text ("\\href{" ++ src' ++ "}{") <> diff --git a/tests/writer.latex b/tests/writer.latex index 1ac79feca..bf08c7111 100644 --- a/tests/writer.latex +++ b/tests/writer.latex @@ -888,7 +888,8 @@ With an ampersand: \url{http://example.com/?foo=1\&bar=2} It should. \end{itemize} -An e-mail address: \href{mailto:nobody@nowhere.net}{nobody@nowhere.net} +An e-mail address: +\href{mailto:nobody@nowhere.net}{\nolinkurl{nobody@nowhere.net}} \begin{quote} Blockquoted: \url{http://example.com/}