
Soy muy consciente de que se considera una buena práctica.noutilizar subrayado excepto en máquinas de escribir y en escritura a mano. Pero, aun así, a veces es necesario.
En mi opinión, la forma tipográficamente menos ofensiva de subrayar en forma impresa es omitir los descendentes. Así también aprendí a hacerlo a mano. Muy pocas fuentes ofrecen una variante subrayada prefabricada, pero algunos procesadores de texto (por ejemplo, el motor de texto OS X) hacen, dependiendo de la fuente utilizada, un trabajo aceptable al emular este efecto:
¿Cómo modificaría cualquiera de las formas/paquetes existentes para subrayar para hacer lo mismo?
Como beneficio adicional, me gustaría poder modificar el comportamiento (extensión de la parte omitida, aplicar a qué letras) según la fuente y el estilo de texto, preferiblemente trabajando con XeLaTeX.
Respuesta1
Podríamos hacer para cada letra:
- Producir el subrayado
- Sobrescribe la línea con la misma letra pero más negrita o con una desplazada hacia la izquierda y hacia la derecha, pero en fondo o en color blanco.
- Escribe la carta
Entonces obtendríamos un subrayado con espacios coincidentes.
Aquí modifiqué el soul
enfoque de Marco de esta manera, solo para una demostración de lo que quiero decir, que podría mejorarse (audacia, bucle):
\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}
Respuesta2
Aquí hay una solución usando paquetes contour
y ulem
.
En mi opinión, esto produce un subrayado muy atractivo, especialmente para subrayar títulos:
\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}
Producción:
De cerca:
Como inconveniente, la profundidad del subrayado no puede estar muy cerca de la línea base porque puede quedar oculta por el contorno.
Respuesta3
Simplemente porque lo encontré útil, aquí hay una modificación de la respuesta anterior de Stefan que le permite controlar la profundidad, el grosor y el ancho del subrayado. Esto podría resultar útil, por ejemplo, con una fuente más grande o más negrita. La sintaxis es: \varul<width>[depth][thickness]{stuff}
donde:
<width>
es opcional y se da como un múltiplo de1/100 em
, por ejemplo,<10>
daría un ancho de espacio de0.1em
. El valor predeterminado es5
[depth]
es opcional y se proporciona como un valor positivo (incluidas las unidades) que especifica la distancia debajo de la línea base para dibujar el subrayado. El valor predeterminado es0.2ex
.[thickness]
es opcional y se proporciona como un valor positivo (incluidas las unidades) que especifica el grosor del subrayado. El valor predeterminado es0.1ex
- El cuarto argumento, obligatorio, es el que desea subrayar.
Esto funcionará en todos los párrafos y saltos de línea, pero puede cambiar ligeramente el espaciado.
\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}
Editado por Tobi: \fp_mul:Nn
no funciona en un TeXlive actual, así que reemplacé las dos líneas con solo \fp_set:Nn \l_tmpa_fp {#1 * .01}
.
Respuesta4
Estoy usando la siguiente adaptación de la respuesta de CDSousa, por dos razones: en primer lugar, el contorno XCharter + por alguna razón parece más tosco que el otro texto; en segundo lugar, para permitir un subrayado cercano (el inconveniente señalado por CDSousa):
\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%
Ejemplo: \myul{1.75pt}{.5pt}{2}{Blupp of (that's \emph{of}, not \emph{off}, of course) a great Synopsis}
tiene profundidad de subrayado 1.75pt
, grosor de subrayado .5pt
y espaciado 2pt
, y parece