aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2020-05-12 14:36:43 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2020-05-12 14:37:07 -0700
commitbe9e93d4aeb37db8e07d2735527f9afc324ac70d (patch)
tree34e73003803a66112e81a754033ae7601c57e0c7
parent46179d5b3e84b5c709e09924cbda524230ebd3fe (diff)
downloadpandoc-be9e93d4aeb37db8e07d2735527f9afc324ac70d.tar.gz
LaTeX writer: create hypertarget for links with identifier.
Closes #6360.
-rw-r--r--src/Text/Pandoc/Writers/LaTeX.hs50
-rw-r--r--test/command/6360.md6
2 files changed, 33 insertions, 23 deletions
diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs
index 021ef2645..0c73918d3 100644
--- a/src/Text/Pandoc/Writers/LaTeX.hs
+++ b/src/Text/Pandoc/Writers/LaTeX.hs
@@ -1282,29 +1282,33 @@ inlineToLaTeX SoftBreak = do
WrapNone -> return space
WrapPreserve -> return cr
inlineToLaTeX Space = return space
-inlineToLaTeX (Link _ txt (src,_))
- | Just ('#', ident) <- T.uncons src
- = do
- contents <- inlineListToLaTeX txt
- lab <- toLabel ident
- return $ text "\\protect\\hyperlink" <> braces (literal lab) <> braces contents
- | otherwise =
- case txt of
- [Str x] | unEscapeString (T.unpack x) == unEscapeString (T.unpack src) -> -- autolink
- do modify $ \s -> s{ stUrl = True }
- src' <- stringToLaTeX URLString (escapeURI src)
- return $ literal $ "\\url{" <> src' <> "}"
- [Str x] | Just rest <- T.stripPrefix "mailto:" src,
- unEscapeString (T.unpack x) == unEscapeString (T.unpack rest) -> -- email autolink
- do modify $ \s -> s{ stUrl = True }
- src' <- stringToLaTeX URLString (escapeURI src)
- contents <- inlineListToLaTeX txt
- return $ "\\href" <> braces (literal src') <>
- braces ("\\nolinkurl" <> braces contents)
- _ -> do contents <- inlineListToLaTeX txt
- src' <- stringToLaTeX URLString (escapeURI src)
- return $ literal ("\\href{" <> src' <> "}{") <>
- contents <> char '}'
+inlineToLaTeX (Link (id',_,_) txt (src,_)) =
+ (case T.uncons src of
+ Just ('#', ident) -> do
+ contents <- inlineListToLaTeX txt
+ lab <- toLabel ident
+ return $ text "\\protect\\hyperlink" <> braces (literal lab) <> braces contents
+ _ -> case txt of
+ [Str x] | unEscapeString (T.unpack x) == unEscapeString (T.unpack src) -> -- autolink
+ do modify $ \s -> s{ stUrl = True }
+ src' <- stringToLaTeX URLString (escapeURI src)
+ return $ literal $ "\\url{" <> src' <> "}"
+ [Str x] | Just rest <- T.stripPrefix "mailto:" src,
+ unEscapeString (T.unpack x) == unEscapeString (T.unpack rest) -> -- email autolink
+ do modify $ \s -> s{ stUrl = True }
+ src' <- stringToLaTeX URLString (escapeURI src)
+ contents <- inlineListToLaTeX txt
+ return $ "\\href" <> braces (literal src') <>
+ braces ("\\nolinkurl" <> braces contents)
+ _ -> do contents <- inlineListToLaTeX txt
+ src' <- stringToLaTeX URLString (escapeURI src)
+ return $ literal ("\\href{" <> src' <> "}{") <>
+ contents <> char '}')
+ >>= (if T.null id'
+ then return
+ else \x -> do
+ linkAnchor <- hypertarget False id' x
+ return ("\\protect" <> linkAnchor))
inlineToLaTeX il@(Image _ _ (src, _))
| Just _ <- T.stripPrefix "data:" src = do
report $ InlineNotRendered il
diff --git a/test/command/6360.md b/test/command/6360.md
new file mode 100644
index 000000000..3988710bf
--- /dev/null
+++ b/test/command/6360.md
@@ -0,0 +1,6 @@
+```
+% pandoc -f native -t latex --wrap=none
+[Link ("test2",[],[]) [Str "link",Space,Str "to",Space,Str "text",Space,Str "test1"] ("#test1","")]
+^D
+\protect\hypertarget{test2}{\protect\hyperlink{test1}{link to text test1}}
+```