Einen formatierten Text gleichmäßig unterstreichen, sodass Unterlängen (z. B. „y“) die Zeile überlappen

Einen formatierten Text gleichmäßig unterstreichen, sodass Unterlängen (z. B. „y“) die Zeile überlappen

Ich versuche, einen formatierten Text zu unterstreichen.

Ich versuche Folgendes:

\usepackage{xcolor}
\usepackage{tikz}

\newcommand{\udensdot}[1]{%
    \tikz[baseline=(todotted.base)]{
        \node[inner sep=1pt,outer sep=0pt] (todotted) {#1};
        \draw[densely dotted] (todotted.south west) -- (todotted.south east);
    }%
}%

\newcommand{\ans}[1]{\udensdot{    
        \textcolor{blue}{\fontfamily{pzc}\selectfont{~#1~}}
    }
}
\begin{document}
I go to \ans{the} cinema in \ans{the} evening \ans{eventually}.
\end{document}

Ich erhalte das folgende Ergebnis, wobei die letzte Zeile unter den anderen steht:

Ergebniszeile

Ich möchte, dass alle Zeilen auf derselben Höhe sind und dass die Unterstreichungen (wie hier das „y“) die Unterstreichung überlappen, weiß aber nicht, wie ich das erreichen kann.

Irgendwelche Vorschläge?

Antwort1

Möchten Sie, dass schwarze Punkte die blaue Farbe der Textphrase überdecken, wie in diesem Bild?:

Bildbeschreibung hier eingeben

Wenn dies nicht der Fall ist, Sie aber möchten, dass sich Punkte auf der Grundlinie der Textzeile befinden und die blaue Farbe der Textphrase die schwarze Farbe der Punkte überdeckt, können Sie einen Knoten mit einem erstellen \phantom, die Linie zeichnen und dann einen Knoten mit Text anstelle eines erstellen \phantom:

\documentclass[border=6pt]{standalone}
\usepackage{xcolor}
\usepackage{tikz}

\newcommand{\udensdot}[1]{%
    \tikz[baseline=(todotted.base)]{
        \node[inner sep=1pt,outer sep=0pt] (todotted) {\phantom{\mbox{#1}}};
        \draw[densely dotted] (todotted.base west) -- (todotted.base east);
        \node at (todotted) [inner sep=1pt,outer sep=0pt] {\mbox{#1}};
    }%
}

\newcommand{\ans}[1]{\udensdot{%
        \textcolor{blue}{\fontfamily{pzc}\selectfont{~#1~}}%
    }%
}
\begin{document}
I go to \ans{the} cinema in \ans{the} evening \ans{eventually}.
\end{document}

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Antwort2

Anstatt Ihre eigene Unterstreichung in TikZ zu erstellen, können Sie ein Paket wie das folgende verwenden lua-ul:

% !TeX TS-program = lualatex
\documentclass{article}
\usepackage{lua-ul}
\usepackage{xcolor}

\usepackage{fontspec}
\newfontfamily{\zapf}{Zapf Chancery}

\makeatletter
\newunderlinetype\beginUnderDot{\cleaders\hb@xt@ .44em{\hss\raisebox{-0.5ex}{.}\hss}}
\makeatother
\NewDocumentCommand\underDot{+m}{{\beginUnderDot#1}}

\newcommand{\ans}[1]{%
  {\zapf\underDot{~\textcolor{blue}{#1}~}}%
}
\begin{document}
I go to \ans{the} cinema in \ans{the} evening \ans{eventually}.
\end{document}

Bildbeschreibung hier eingeben

Oder ulem:

\documentclass{article}
\usepackage[normalem]{ulem}
\usepackage{xcolor}

\newcommand{\ans}[1]{%
  {\fontfamily{pzc}\selectfont\dotuline{~\textcolor{blue}{#1}~}}%
}
\begin{document}
I go to \ans{the} cinema in \ans{the} evening \ans{eventually}.
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Eine Lösung besteht darin, base westund base eastim Befehl zu verwenden \udensdot.

Bildbeschreibung hier eingeben

\documentclass[border=6pt]{standalone}
\usepackage{xcolor}
\usepackage{tikz}

\newcommand{\udensdot}[1]{%
    \tikz[baseline=(todotted.base)]{
        \node[inner sep=1pt,outer sep=0pt] (todotted) {#1};
        \draw[densely dotted] (todotted.base west) -- (todotted.base east);
    }%
}

\newcommand{\ans}[1]{\udensdot{%
        \textcolor{blue}{\fontfamily{pzc}\selectfont{~#1~}}%
    }%
}
\begin{document}
I go to \ans{the} cinema in \ans{the} evening \ans{eventually}.
\end{document}

verwandte Informationen