LaTeX reader: improved support for \hyperlink, \hypertarget.

Closes #2549.
This commit is contained in:
John MacFarlane 2017-08-25 22:04:57 -07:00
parent c9be2de5c1
commit 1b3431a165
2 changed files with 61 additions and 6 deletions

View file

@ -1391,11 +1391,8 @@ inlineCommands = M.fromList $
<|> citation "citeauthor" AuthorInText False)
, ("nocite", mempty <$ (citation "nocite" NormalCitation False >>=
addMeta "nocite"))
-- hyperlink: for now, we just preserve contents.
-- we might add the actual links, but we need to avoid clashes
-- with ids produced by label.
, ("hypertarget", braced >> tok)
, ("hyperlink", braced >> tok)
, ("hyperlink", hyperlink)
, ("hypertarget", hypertargetInline)
-- glossaries package
, ("gls", doAcronym "short")
, ("Gls", doAcronym "short")
@ -1450,6 +1447,26 @@ inlineCommands = M.fromList $
, ("Rn", romanNumeralLower)
]
hyperlink :: PandocMonad m => LP m Inlines
hyperlink = try $ do
src <- toksToString <$> braced
lab <- tok
return $ link ('#':src) "" lab
hypertargetBlock :: PandocMonad m => LP m Blocks
hypertargetBlock = try $ do
ref <- toksToString <$> braced
bs <- grouped block
case toList bs of
[Header 1 (ident,_,_) _] | ident == ref -> return bs
_ -> return $ divWith (ref, [], []) bs
hypertargetInline :: PandocMonad m => LP m Inlines
hypertargetInline = try $ do
ref <- toksToString <$> braced
ils <- grouped inline
return $ spanWith (ref, [], []) ils
romanNumeralUpper :: (PandocMonad m) => LP m Inlines
romanNumeralUpper =
str . toRomanNumeral <$> romanNumeralArg
@ -1972,7 +1989,7 @@ blockCommands = M.fromList $
, ("setdefaultlanguage", setDefaultLanguage)
, ("setmainlanguage", setDefaultLanguage)
-- hyperlink
, ("hypertarget", try $ braced >> grouped block)
, ("hypertarget", hypertargetBlock)
-- LaTeX colors
, ("textcolor", coloredBlock "color")
, ("colorbox", coloredBlock "background-color")

38
test/command/2549.md Normal file
View file

@ -0,0 +1,38 @@
```
% pandoc -f latex -t native
\hypertarget{foo}{%
\section{A section}\label{foo}
}
^D
[Header 1 ("foo",[],[]) [Str "A",Space,Str "section"]]
```
```
% pandoc -f latex -t native
\hypertarget{bar}{%
\section{A section}\label{foo}
}
^D
[Div ("bar",[],[])
[Header 1 ("foo",[],[]) [Str "A",Space,Str "section"]]]
```
```
% pandoc -f latex -t native
Bar \hypertarget{foo}{Foo}
^D
[Para [Str "Bar",Space,Span ("foo",[],[]) [Str "Foo"]]]
```
```
% pandoc -f latex -t native
\hypertarget{foo}{%
\begin{verbatim}
bar
\end{verbatim}
}
^D
[Div ("foo",[],[])
[CodeBlock ("",[],[]) "bar"]]
```