From a2a0f73eb816917839eeffad9e487394ebd88443 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 22 Nov 2023 23:24:55 -0500 Subject: LaTeX writer: handle identifiers inside heading contents. `\phantomsection` can't be used in this case, so we need `\hypertarget`. Closes #9209. --- src/Text/Pandoc/Writers/LaTeX/Util.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Text/Pandoc/Writers/LaTeX/Util.hs b/src/Text/Pandoc/Writers/LaTeX/Util.hs index 8dcec54dd..86b95795c 100644 --- a/src/Text/Pandoc/Writers/LaTeX/Util.hs +++ b/src/Text/Pandoc/Writers/LaTeX/Util.hs @@ -260,8 +260,14 @@ wrapDiv (_,classes,kvs) t = do hypertarget :: PandocMonad m => Text -> LW m (Doc Text) hypertarget "" = return mempty hypertarget ident = do - label <- labelFor ident - return $ text "\\phantomsection" <> label + inHeading <- gets stInHeading + if inHeading + then do -- see #9209 (these cases should be rare) + ref <- literal <$> toLabel ident + return $ text "\\protect\\hypertarget" <> braces ref <> "{}" + else do + label <- labelFor ident + return $ text "\\phantomsection" <> label labelFor :: PandocMonad m => Text -> LW m (Doc Text) labelFor "" = return empty -- cgit v1.2.3