
Ich bin mir durchaus bewusst, dass es als Best Practice giltnichtUnterstreichungen anders als auf Schreibmaschinen und in Handschrift zu verwenden. Aber manchmal ist es trotzdem nötig.
Meiner Meinung nach ist die typografisch am wenigsten anstößige Art, im Druck zu unterstreichen, die Unterlängen wegzulassen. So habe ich es auch beim Handschreiben gelernt. Nur sehr wenige Schriftarten bieten eine vorgefertigte unterstrichene Variante, aber einige Textverarbeitungsprogramme (z. B. die OS X-Text-Engine) können diesen Effekt – abhängig von der verwendeten Schriftart – akzeptabel nachbilden:
Wie kann ich eine der vorhandenen Methoden/Pakete zum Unterstreichen optimieren, um dasselbe zu erreichen?
Als Bonus hätte ich gerne die Möglichkeit, das Verhalten (Umfang des ausgelassenen Teils, Anwendung auf welche Buchstaben) je nach Schriftart und Textstil anzupassen, vorzugsweise in Zusammenarbeit mit XeLaTeX.
Antwort1
Wir könnten für jeden Buchstaben Folgendes tun:
- Erstellen Sie die Unterstreichung
- Überschreiben Sie die Zeile mit dem gleichen, aber fetteren Buchstaben oder mit einem nach links und rechts verschobenen Buchstaben, jedoch in der Hintergrund- oder Weißfarbe.
- Schreibe den Brief
Wir würden also eine Unterstreichung mit passenden Lücken erhalten.
Hier habe ich soul
Marcos Ansatz folgendermaßen abgewandelt, nur um zu demonstrieren, was ich meine und was verbessert werden könnte (Fettdruck, Schleife):
\setcounter{errorcontextlines}{999}
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{soul}
\usepackage{color}
\makeatletter
\newcommand*{\whiten}[1]{\llap{\textcolor{white}{{\the\SOUL@token}}\hspace{#1pt}}}
\DeclareRobustCommand*\myul{%
\def\SOUL@everyspace{\underline{\space}\kern\z@}%
\def\SOUL@everytoken{%
\setbox0=\hbox{\the\SOUL@token}%
\ifdim\dp0>\z@
\raisebox{\dp0}{\underline{\phantom{\the\SOUL@token}}}%
\whiten{1}\whiten{0}%
\whiten{-1}\whiten{-2}%
\llap{\the\SOUL@token}%
\else
\underline{\the\SOUL@token}%
\fi}%
\SOUL@}
\makeatother
\begin{document}
\sffamily\Huge
\myul{jumping quickly}
\end{document}
Antwort2
Hier ist eine Lösung mit contour
und ulem
Paketen.
Meiner Meinung nach erzeugt dies eine sehr gut aussehende Unterstreichung, insbesondere für die Unterstreichung von Titeln:
\documentclass{article}
\usepackage[outline]{contour}
\usepackage{ulem}
\normalem % use classical emph
\newcommand \myul[4]{%
\begingroup%
\renewcommand \ULdepth {#1}%
\renewcommand \ULthickness {#2}%
\contourlength{#3}%
\uline{\phantom{#4}}\llap{\contour{white}{#4}}%
\endgroup%
}
\newcommand \myulline[4]{%
\begingroup%
\renewcommand \ULdepth {#1}%
\renewcommand \ULthickness {#2}%
\contourlength{#3}%
\noindent\rlap{\uline{\hspace{\textwidth}}}\contour{white}{#4}%
\endgroup%
}
\begin{document}
\bfseries
\Huge
\myulline{5pt}{1pt}{2pt}{Chapter Eight}
\vspace{1cm}
\normalsize
\normalfont
Test. \myul{2pt}{0.5pt}{1pt}{Quit jumping quickly!} Test.
Test. \myul{1.2pt}{0.5pt}{0.5pt}{Quit jumping quickly!} Test.
\end{document}
Ausgabe:
Nahaufnahme:
Ein Nachteil besteht darin, dass die Unterstreichungstiefe nicht sehr nahe an der Grundlinie liegen kann, da sie durch die Kontur verdeckt werden kann.
Antwort3
Einfach weil ich es nützlich fand, ist hier eine Modifikation von Stefans Antwort oben, mit der Sie die Tiefe, Dicke und Breite der Unterstreichung steuern können. Dies kann beispielsweise bei einer größeren oder fetteren Schriftart nützlich sein. Die Syntax lautet: \varul<width>[depth][thickness]{stuff}
wobei:
<width>
ist optional und wird als Vielfaches von angegeben1/100 em
, z. B.<10>
würde eine Lückenbreite von ergeben0.1em
. Der Standardwert ist5
[depth]
ist optional und wird als positiver Wert (einschließlich Einheiten) angegeben, der den Abstand unterhalb der Grundlinie angibt, in dem die Unterlinie gezeichnet werden soll. Der Standardwert ist0.2ex
.[thickness]
ist optional und wird als positiver Wert (einschließlich Einheiten) angegeben, der die Dicke der Unterstreichung angibt. Der Standardwert ist0.1ex
- Das vierte, obligatorische Argument ist das, was Sie unterstrichen haben möchten.
Dies funktioniert über Absätze und Zeilenumbrüche hinweg, der Abstand kann sich jedoch geringfügig ändern.
\documentclass{article}
\usepackage{soul}
\usepackage{xcolor}
\usepackage{xparse}
\makeatletter
\ExplSyntaxOn
\cs_new:Npn \white_text:n #1
{
\fp_set:Nn \l_tmpa_fp {#1 * .01}
\llap{\textcolor{white}{\the\SOUL@syllable}\hspace{\fp_to_decimal:N \l_tmpa_fp em}}
\llap{\textcolor{white}{\the\SOUL@syllable}\hspace{-\fp_to_decimal:N \l_tmpa_fp em}}
}
\NewDocumentCommand{\whiten}{ m }
{
\int_step_function:nnnN {1}{1}{#1} \white_text:n
}
\ExplSyntaxOff
\NewDocumentCommand{ \varul }{ D<>{5} O{0.2ex} O{0.1ex} +m } {%
\begingroup
\setul{#2}{#3}%
\def\SOUL@uleverysyllable{%
\setbox0=\hbox{\the\SOUL@syllable}%
\ifdim\dp0>\z@
\SOUL@ulunderline{\phantom{\the\SOUL@syllable}}%
\whiten{#1}%
\llap{%
\the\SOUL@syllable
\SOUL@setkern\SOUL@charkern
}%
\else
\SOUL@ulunderline{%
\the\SOUL@syllable
\SOUL@setkern\SOUL@charkern
}%
\fi}%
\ul{#4}%
\endgroup
}
\makeatother
\begin{document}
\varul{\Huge jumping quickly}\par\smallskip
\varul[1pt][1pt]{\Huge jumping quickly}
\end{document}
Bearbeitung von Tobi: \fp_mul:Nn
funktioniert in einem aktuellen TeXlive nicht, also habe ich die beiden Zeilen einfach durch ersetzt \fp_set:Nn \l_tmpa_fp {#1 * .01}
.
Antwort4
Ich verwende die folgende Anpassung der Antwort von CDSousa, und zwar aus zwei Gründen: Erstens sieht XCharter + Kontur aus irgendeinem Grund gröber aus als der übrige Text, und zweitens, um enge Unterstreichungen zu ermöglichen (der Nachteil, auf den CDSousa hingewiesen hat):
\usepackage{ulem}
\normalem % use classical emph
\usepackage{color}
\usepackage{pgffor}
\newcommand\myul[4]{% arg 1: underline depth; arg 2: underline thickness; arg 3: space around descenders in pt (!)
\begingroup%
\renewcommand\ULdepth{#1}%
\renewcommand\ULthickness{#2}%
\uline{\phantom{\smash{#4}}}%
\foreach \hshift in {0.0, 0.1, ..., #3}{%
\foreach \upshift in {-0.4, -0.3, ..., 1.0}{%
\llap{\color{white}\raisebox{\upshift0pt}[0pt]{#4}\hspace{\hshift0pt}}%
\llap{\color{white}\raisebox{\upshift0pt}[0pt]{#4}\hspace{-\hshift0pt}}%
}%
}%
\llap{#4}%
\endgroup%
Beispiel: \myul{1.75pt}{.5pt}{2}{Blupp of (that's \emph{of}, not \emph{off}, of course) a great Synopsis}
hat Unterstreichungstiefe 1.75pt
, Unterstreichungsdicke .5pt
und Abstand 2pt
und sieht aus wie