From 1f1a30bbf6aa6d1c1dc60ac9d97560346066d02f Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Thu, 22 Jul 2021 23:05:43 -0700
Subject: [PATCH] LaTeX writer: Use ulem for underline.

ulem is conditionally included already when the `strikeout`
variable is set, so we set this when there is underlined text,
and use `\uline` instead of `\underline`.

This fixes wrapping for underlined text.
Closes #7351.
---
 data/templates/default.latex     | 1 +
 src/Text/Pandoc/Writers/LaTeX.hs | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/data/templates/default.latex b/data/templates/default.latex
index d06701675..d6a6208a9 100644
--- a/data/templates/default.latex
+++ b/data/templates/default.latex
@@ -315,6 +315,7 @@ $if(links-as-notes)$
 \DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}}
 $endif$
 $if(strikeout)$
+$-- also used for underline
 \usepackage[normalem]{ulem}
 % Avoid problems with \sout in headers with hyperref
 \pdfstringdefDisableCommands{\renewcommand{\sout}{}}
diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs
index 063e347fb..dd837bdf0 100644
--- a/src/Text/Pandoc/Writers/LaTeX.hs
+++ b/src/Text/Pandoc/Writers/LaTeX.hs
@@ -786,7 +786,9 @@ inlineToLaTeX (Span (id',classes,kvs) ils) = do
         then braces contents
         else foldr inCmd contents cmds)
 inlineToLaTeX (Emph lst) = inCmd "emph" <$> inlineListToLaTeX lst
-inlineToLaTeX (Underline lst) = inCmd "underline" <$> inlineListToLaTeX lst
+inlineToLaTeX (Underline lst) = do
+  modify $ \st -> st{ stStrikeout = True } -- this gives us the ulem package
+  inCmd "uline" <$> inlineListToLaTeX lst
 inlineToLaTeX (Strong lst) = inCmd "textbf" <$> inlineListToLaTeX lst
 inlineToLaTeX (Strikeout lst) = do
   -- we need to protect VERB in an mbox or we get an error