ブレークラインとハイフネーションを可能にする白い輪郭の下線を定義します

ブレークラインとハイフネーションを可能にする白い輪郭の下線を定義します

下線を定義します(次のサイトに基づいています)。https://alexwlchan.net/2017/10/latex-underlines/)。

これが私の最初のコードでした:

\usepackage{ulem}
\renewcommand{\ULdepth}{1.8pt}
\contourlength{0.8pt}
\newcommand{\myuline}[1]{%
  \uline{\phantom{#1}}%
  \llap{\contour{white}{#1}}%
}

このコードの問題は、大量のテキストに下線を引くと、改行もハイフンも許可されないことです。調査したところ、これが問題である可能性があることがわかりました。\phantomそこで、 を in whiteに\contour置き換え、次のコードを追加します (輪郭の改行を許可するため)。\phantom\textcolor

\usepackage{ulem}
\renewcommand{\ULdepth}{1.8pt}
\contourlength{0.8pt}

% contour each word to allow linebreaks
\RequirePackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\MIR}{m}
 {
  \seq_set_split:Nnn \l_tmpa_seq { ~ } { #1 }
  \seq_map_inline:Nn \l_tmpa_seq { \contour{white}{##1} ~ } \unskip
 }
\ExplSyntaxOff

% define underline
\newcommand{\myuline}[1]{%
  \uline{\textcolor{white}{#1}}%
  \llap{\contour{white}{#1}}%
}

しかし、これでは問題は解決せず、\llap改行もハイフネーションも許可されないことに気付きました...それでは、どうすれば問題を解決できるのかわかりません。助けてください。

答え1

持っているものを修正して、次のものを使用できます

\usepackage{contour}
\usepackage[normalem]{ulem}
\renewcommand{\ULdepth}{1.8pt}
\contourlength{0.8pt}

\newcommand{\myuline}[1]{%
  \uline{\phantom{#1}}%
  \llap{\contour{white}{#1}}%
}

% myuline on each word to allow linebreaks
\RequirePackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\myulineX}{m}
 {
  \seq_set_split:Nnn \l_tmpa_seq { ~ } { #1 }
  \seq_map_inline:Nn \l_tmpa_seq { \myuline{##1} ~ } \unskip
 }
\ExplSyntaxOff

すると、alexwlchan の希望通りの素敵な下線が引け、改行を越えても下線が引けるようになります。次のように使用します:

\myulineX{Now the \texttt{myulineX} text will have nice underlines that avoid
  descenders, and also don't cause issues with line-breaking.}

取得するため:

例

しかし、下線は単語間のスペースを越えて続きません。それが問題なら、解決方法がわかりません(コメントも参照してください)ここ同じ意味だと思います。

関連情報