下線と取り消し線を混ぜる

下線と取り消し線を混ぜる

Word では、あらゆる種類のフォント書式設定が可能です。

ここに画像の説明を入力してください

上記の例では、取り消し線/取り消し線(このように)と下線を組み合わせています。私も同じことができるようにしたいのですが、ulemまたはsoulこれを便利な方法で可能にします。

  • ulem:

    ここに画像の説明を入力してください

    \documentclass{article}
    \usepackage[a6paper,showframe]{geometry}% Just for this example
    \usepackage{ulem}
    \begin{document}
    Lorem ipsum dolor sit amet, \sout{consectetur adipiscing elit. 
    Praesent} in nisi magna. Mauris \sout{auctor gravida} fermentum. 
    Proin enim \uline{massa, \sout{\textbf{lobortis in} ligula} vel, convallis} fermentum 
    nulla. \uline{Nam in mattis nulla}. Vestibulum vel \uline{auctor orci. 
    Praesent \textit{\textbf{ornare, eros} ac} euismod} congue, turpis est facilisis 
    nisi, a sollicitudin massa lectus imperdiet tellus. Duis at 
    tempor velit. \sout{Nulla \uline{gravida}, dolor in cursus}. 
    \end{document}
    
  • soul:

    soulドキュメンテーション「ネストされたsoulコマンドは機能しない」と明示的に述べています。

    ここに画像の説明を入力してください

    そのため、次の例はエラーなしでコンパイルされません。

    \documentclass{article}
    \usepackage[a6paper,showframe]{geometry}% Just for this example
    \usepackage{soul}
    \begin{document}
    Lorem ipsum dolor sit amet, \st{consectetur adipiscing elit. 
    Praesent} in nisi magna. Mauris \st{auctor gravida} fermentum. 
    Proin enim \ul{massa, \st{\textbf{lobortis in} ligula} vel, convallis} fermentum 
    nulla. \ul{Nam in mattis nulla}. Vestibulum vel \ul{auctor orci. 
    Praesent \textit{\textbf{ornare, eros} ac} euismod} congue, turpis est facilisis 
    nisi, a sollicitudin massa lectus imperdiet tellus. Duis at 
    tempor velit. \st{Nulla \ul{gravida}, dolor in cursus}. 
    \end{document}
    

理想的には、これらのフォント「効果」マクロを互換的に使用できるようにしたいと思います。下線の中に取り消し線、または取り消し線の中に下線を、フォントの使用に影響を与えずに使用できます(例:イタリックまたは大胆な)。Word からの出力は次のとおりです。

ここに画像の説明を入力してください

(次の質問も参照してください:ソウルを使った下線+取り消し線

答え1

以下はマーティンの回答を改変したものです。LaTeX でのクールなテキスト強調表示\tikzstここで私はMartin の に基づいて定義しました\tikzul

これは、

  • 取り消し線と下線
  • 取り消し線と強調表示

ここに画像の説明を入力してください

注記:

  • 通常、\tikzmark解法には2回の実行が必要です。 がネストして使用されているため\tikzmark三つ実行されます。(この点を指摘してくれた @Werner に感謝します)。

    tikzmarkネストされたの位置は親の の位置に依存するため、追加の実行が必要になります\tikzmark。したがって、最初の実行は「外側」 の位置を安定させ\tikzmark、2 番目は「内側」 の位置を安定させ\tikzmark、3 番目は実際の描画を行います。

  • \tikzmark本文の横に大きな中括弧を追加する

コード:

\documentclass[twoside,11pt]{book}

\usepackage{zref-abspage}
\usepackage{zref-user}
\usepackage{tikz}
\usepackage{atbegshi}
\usetikzlibrary{calc,decorations.pathmorphing}

\makeatletter
\newcommand{\currentsidemargin}{%
  \ifodd\zref@extract{textarea-\thetextarea}{abspage}%
    \oddsidemargin%
  \else%
    \evensidemargin%
  \fi%
}

\newcounter{textarea}
\newcommand{\settextarea}{%
   \stepcounter{textarea}%
   \zlabel{textarea-\thetextarea}%
   \begin{tikzpicture}[overlay,remember picture]
    % Helper nodes
    \path (current page.north west) ++(\hoffset, -\voffset)
        node[anchor=north west, shape=rectangle, inner sep=0, minimum width=\paperwidth, minimum height=\paperheight]
        (pagearea) {};
    \path (pagearea.north west) ++(1in+\currentsidemargin,-1in-\topmargin-\headheight-\headsep)
        node[anchor=north west, shape=rectangle, inner sep=0, minimum width=\textwidth, minimum height=\textheight]
        (textarea) {};
  \end{tikzpicture}%
}


\usepackage{lipsum}
\newcommand\xlipsum[1][]{{\let\par\relax\lipsum*[#1]}}

\tikzset{tikzul/.style={yshift=-.75\dp\strutbox}}

\newcounter{tikzul}%
\newcommand\tikzul[1][]{%
    \begingroup
    \global\tikzullinewidth\linewidth
    \def\tikzulsetting{[#1]}%
    \stepcounter{tikzul}%
    \settextarea
    \zlabel{tikzul-begin-\thetikzul}%
    \tikz[overlay,remember picture,tikzul] \coordinate (tikzul-\thetikzul) at (0,0);% Modified \tikzmark macro
    \ifnum\zref@extract{tikzul-begin-\thetikzul}{abspage}=\zref@extract{tikzul-end-\thetikzul}{abspage}
    \else
        \AtBeginShipoutNext{\tikzul@endpage{#1}}%
    \fi
    \bgroup
    \def\par{\ifhmode\unskip\fi\egroup\par\@ifnextchar\noindent{\noindent\tikzul[#1]}{\tikzul[#1]\bgroup}}%
    \aftergroup\endtikzul
    \let\@let@token=%
}
\newlength\tikzullinewidth


\def\tikzul@endpage#1{%
\setbox\AtBeginShipoutBox\hbox{%
\box\AtBeginShipoutBox
\hbox{%
\begin{tikzpicture}[overlay,remember picture,tikzul]
\draw[#1]
    let \p1 = (tikzul-\thetikzul), \p2 = ([xshift=\tikzullinewidth+\@totalleftmargin]textarea.south west) in
    \ifdim\dimexpr\y1-\y2<.5\baselineskip
        (\x1,\y1) -- (\x2,\y1)
    \else
        let \p3 = ([xshift=\@totalleftmargin]textarea.west) in
        (\x1,\y1) -- +(\tikzullinewidth-\x1+\x3,0)
        % (\x3,\y2) -- (\x2,\y2)
        (\x3,\y1)
       \myloop{\y1-\y2+.5\baselineskip}{%
           ++(0,-\baselineskip) -- +(\tikzullinewidth,0)
       }%
    \fi
;
\end{tikzpicture}%
}}%
}%


\def\endtikzul{%
    \zlabel{tikzul-end-\thetikzul}%
    \ifnum\zref@extract{tikzul-begin-\thetikzul}{abspage}=\zref@extract{tikzul-end-\thetikzul}{abspage}
    \begin{tikzpicture}[overlay,remember picture,tikzul]
        \expandafter\draw\tikzulsetting
            let \p1 = (tikzul-\thetikzul), \p2 = (0,0) in
            \ifdim\y1=\y2
                (\x1,\y1) -- (\x2,\y2)
            \else
                let \p3 = ([xshift=\@totalleftmargin]textarea.west), \p4 = ([xshift=-\rightmargin]textarea.east) in
                (\x1,\y1) -- +(\tikzullinewidth-\x1+\x3,0)
                (\x3,\y2) -- (\x2,\y2)
                (\x3,\y1)
                \myloop{\y1-\y2}{%
                    ++(0,-\baselineskip) -- +(\tikzullinewidth,0)
                }%
            \fi
        ;
    \end{tikzpicture}%
    \else
    \settextarea
    \begin{tikzpicture}[overlay,remember picture,tikzul]
        \expandafter\draw\tikzulsetting
            let \p1 = ([xshift=\@totalleftmargin,yshift=-.5\baselineskip]textarea.north west), \p2 = (0,0) in
            \ifdim\dimexpr\y1-\y2<.5\baselineskip
                (\x1,\y2) -- (\x2,\y2)
            \else
                let \p3 = ([xshift=\@totalleftmargin]textarea.west), \p4 = ([xshift=-\rightmargin]textarea.east) in
                (\x3,\y2) -- (\x2,\y2)
                (\x3,\y2)
                \myloop{\y1-\y2}{%
                    ++(0,+\baselineskip) -- +(\tikzullinewidth,0)
                }
            \fi
        ;
    \end{tikzpicture}%
    \fi
    \endgroup
}

% -------------------------------------------------------------- Additions by Peter Grill

\tikzset{tikzst/.style={yshift=0.5\dp\strutbox}}

\newcounter{tikzst}%
\newcommand\tikzst[1][]{%
    \begingroup
    \global\tikzstlinewidth\linewidth
    \def\tikzstsetting{[#1]}%
    \stepcounter{tikzst}%
    \settextarea
    \zlabel{tikzst-begin-\thetikzst}%
    \tikz[overlay,remember picture,tikzst] \coordinate (tikzst-\thetikzst) at (0,0);% Modified \tikzmark macro
    \ifnum\zref@extract{tikzst-begin-\thetikzst}{abspage}=\zref@extract{tikzst-end-\thetikzst}{abspage}
    \else
        \AtBeginShipoutNext{\tikzst@endpage{#1}}%
    \fi
    \bgroup
    \def\par{\ifhmode\unskip\fi\egroup\par\@ifnextchar\noindent{\noindent\tikzst[#1]}{\tikzst[#1]\bgroup}}%
    \aftergroup\endtikzst
    \let\@let@token=%
}
\newlength\tikzstlinewidth


\def\tikzst@endpage#1{%
\setbox\AtBeginShipoutBox\hbox{%
\box\AtBeginShipoutBox
\hbox{%
\begin{tikzpicture}[overlay,remember picture,tikzst]
\draw[#1]
    let \p1 = (tikzst-\thetikzst), \p2 = ([xshift=\tikzstlinewidth+\@totalleftmargin]textarea.south west) in
    \ifdim\dimexpr\y1-\y2<.5\baselineskip
        (\x1,\y1) -- (\x2,\y1)
    \else
        let \p3 = ([xshift=\@totalleftmargin]textarea.west) in
        (\x1,\y1) -- +(\tikzstlinewidth-\x1+\x3,0)
        % (\x3,\y2) -- (\x2,\y2)
        (\x3,\y1)
       \myloop{\y1-\y2+.5\baselineskip}{%
           ++(0,-\baselineskip) -- +(\tikzstlinewidth,0)
       }%
    \fi
;
\end{tikzpicture}%
}}%
}%


\def\endtikzst{%
    \zlabel{tikzst-end-\thetikzst}%
    \ifnum\zref@extract{tikzst-begin-\thetikzst}{abspage}=\zref@extract{tikzst-end-\thetikzst}{abspage}
    \begin{tikzpicture}[overlay,remember picture,tikzst]
        \expandafter\draw\tikzstsetting
            let \p1 = (tikzst-\thetikzst), \p2 = (0,0) in
            \ifdim\y1=\y2
                (\x1,\y1) -- (\x2,\y2)
            \else
                let \p3 = ([xshift=\@totalleftmargin]textarea.west), \p4 = ([xshift=-\rightmargin]textarea.east) in
                (\x1,\y1) -- +(\tikzstlinewidth-\x1+\x3,0)
                (\x3,\y2) -- (\x2,\y2)
                (\x3,\y1)
                \myloop{\y1-\y2}{%
                    ++(0,-\baselineskip) -- +(\tikzstlinewidth,0)
                }%
            \fi
        ;
    \end{tikzpicture}%
    \else
    \settextarea
    \begin{tikzpicture}[overlay,remember picture,tikzst]
        \expandafter\draw\tikzstsetting
            let \p1 = ([xshift=\@totalleftmargin,yshift=-.5\baselineskip]textarea.north west), \p2 = (0,0) in
            \ifdim\dimexpr\y1-\y2<.5\baselineskip
                (\x1,\y2) -- (\x2,\y2)
            \else
                let \p3 = ([xshift=\@totalleftmargin]textarea.west), \p4 = ([xshift=-\rightmargin]textarea.east) in
                (\x3,\y2) -- (\x2,\y2)
                (\x3,\y2)
                \myloop{\y1-\y2}{%
                    ++(0,+\baselineskip) -- +(\tikzstlinewidth,0)
                }
            \fi
        ;
    \end{tikzpicture}%
    \fi
    \endgroup
}
% --------------------------------------------------------------

\def\myloop#1#2#3{%
    #3%
    \ifdim\dimexpr#1>1.1\baselineskip
        #2%
        \expandafter\myloop\expandafter{\the\dimexpr#1-\baselineskip\relax}{#2}%
    \fi
}

\makeatother

\begin{document}

text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text text \tikzst[black, ultra thick]{text text text text text
text text text text text text text text} text text text
text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text

{\tikzset{tikzul/.style={yshift=1ex}}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.
Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus
et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra
metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus
eu tellus sit amet tortor gravida placerat. Integer sapien est, iaculis in, pretium
quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. \tikzul[line width=1.5\ht\strutbox,semitransparent,yellow]{Aenean
faucibus. Morbi dolor nulla, \tikzst[black, ultra thick]{malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci eget risus. Duis nibh mi, congue
eu, accumsan eleifend, sagittis quis}, diam. Duis eget orci sit amet orci dignissim
rutrum.}
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
test
}

\begin{quote}
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text \tikzst[black, ultra thick]{text text text text text text
text text text text text text text text text text text
text text text text text text text} text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
\end{quote}

{\tikzset{tikzul/.style={yshift=.5ex}}

\begin{quote}
text text text text text text text text text text text
text text text text text text text text text text text
\begin{quote}
text text text text text text text text text text text
text text \tikzul[green]{text text \tikzst[black, ultra thick]{text text text text text text text
text text text text text text text text text text text
text text text text 
text text text text text text text}
text text text text text text text text text text text
text text text text text text text text text text text
text text text text} text text text text text text text
\end{quote}
text text text text text text text text text text text
text text text text text text text text text text text
\end{quote}

\large
new text text text text text text text text text text text
text text \tikzul[red]{first text text text text \tikzst[black, ultra thick]{text text text text
teXt teXt teXt teXt teXt teXt teXt teXt teXt teXt teXt
teXt teXt teXt} teXt teXt teXt teXt teXt teXt teXt teXt
teXt teXt teXt last} teXt teXt teXt teXt teXt teXt teXt
text text text text text text text text text text text
text text text text text text text text text text text

text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text text text text text text text
text text\par\noindent text text text text text text text text text
text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
}

\begin{itemize}
    \item \tikzul{test test test} test
    \item test \tikzul{test test test} test
    \item aa \tikzul{test test test} test
    \item b \tikzul{test test 
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
        test} test
\end{itemize}

text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text text text text text text text
text text

 text text text text text text text text text
text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text

text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text text text text text text text
text text

\noindent text text text text text text text text text
\par text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text


\end{document}

答え2

いくつかのオプションがあり、以下のすべてが改行をサポートしています。

  • lua-ul:https://tex.stackexchange.com/a/533377/250119(ハイライト+下線に特化、最も簡単に使用できるソリューション、デフォルトで動作します)
  • 以下を使用したカスタム回答tikz:https://tex.stackexchange.com/a/176118/250119任意のネストが可能ただし、ネストする場合は3回以上のコンパイルが必要)
  • soulpos: 私の答えはhttps://tex.stackexchange.com/a/685471/250119(ハイライト+取り消し線に特有) - コマンドを定義するには TeX プログラミングの知識が必要であり、これには 2 回のコンパイルが必要です。
  • soul:https://tex.stackexchange.com/a/178701/250119(取り消し線+下線に特有) - このパッケージは本質的に を使用するため\leaders、答えは 0.1 ポイント幅のボックスを繰り返すことで機能し、結果として PDF が重くなります。

これらのソリューション改行をサポートしていません:

補完として、代わりに以下を使用したソリューションを示しますulem私の答えの定義\dwave)-- ulem「均一な水平」制限はありませんが、ハイフネーションをサポートしていませんどちらか:

%! TEX program = lualatex
\documentclass{article}
\usepackage{ulem}

\makeatletter
\protected\def\ulinesout{%
    \leavevmode \bgroup
    \UL@setULdepth
    \markoverwith {%
        \rlap{\rule[.55ex]{2pt}{0.4pt}}%
        \rule[-\ULdepth]{2pt}{0.4pt}%  \rule[-.673ex]{2pt}{0.4pt}
    }%
    \ULon 
}
\makeatother
\begin{document}

\uline{a}\ulinesout{b}\sout{c}

\uline{Producing a colored underline or strike-through is }\ulinesout{not supported by
regular uline}\sout{ or sout, but it is quite easy to colorize using the
markoverwith mechanism}

\end{document}

ドキュメントに記載されているようにulem、これは「真に柔軟な」ルールではありませんが、この場合は不可能であるように思われ、これは多くの小さな部分を繰り返すことによってルールを描画します。

ulem ドキュメント

この欠点は、上にリンクされたパッケージのソリューションの欠点と同じですsoul

関連情報