Ich habe einen langen Text in einer Tabelle, der aus zwei Befehlen mit einem Leerzeichen dazwischen zusammengesetzt ist und unterstrichen werden soll. Wie kann ich dafür sorgen, dass der Text umgebrochen wird, während er unterstrichen ist?
Das folgende Beispiel zeigt das Verhalten mit \underline, \uline und \ul.
Beispiel:
\documentclass{article}
\usepackage{tabularx}
\usepackage{soul}
\usepackage[normalem]{ulem}
\newcommand{\texta}{{Short text from some command.}}
\newcommand{\textb} {{Long text from some other command. This text should be broken on line end and not overflow.}}
\soulregister{\texta}{0}
\soulregister{\textb}{0}
\begin{document}
\begin{tabularx}{\textwidth}{|l|X|}
\hline
nothing & \texta\ \textb \\
\hline
underline & \underline{\texta\ \textb} \\ % Overflows
\hline
uline & \uline{\texta\ \textb} \\ % Overflows
\hline
ul & \ul{\texta\ \textb} \\ % Breaks line, but does not underline. Space is ignored.
\hline
\end{tabularx}
\end{document}
Antwort1
Der \ul
Befehl aus dem soul
Paket funktioniert tatsächlich. Bei der Verwendung treten jedoch zwei Probleme auf.
1) Ihr Text wird aufgrund der zusätzlichen Klammern in den Definitionen von \texta
und nicht unterstrichen \textb
. Entfernen Sie zunächst diese Klammern:
\newcommand{\texta}{Short text from some command.}
\newcommand{\textb}{Long text from some other command. This text should be broken on line end and not overflow.}
2) Sie sollten das Argument von erweitern \ul
:
\edef\myulcmd{\noexpand\ul{\unexpanded\expandafter{\texta}\space\unexpanded\expandafter{\textb}}}%
\myulcmd