subrayar omitiendo los descendentes

subrayar omitiendo los descendentes

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:

Subrayado de edición de texto de OS X

¿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 soulenfoque 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}

subrayado con espacios

Respuesta2

Aquí hay una solución usando paquetes contoury 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:

salida de ejemplo

De cerca:

detalle de ejemplo

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 de 1/100 em, por ejemplo, <10>daría un ancho de espacio de 0.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 es 0.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.

ingrese la descripción de la imagen aquí

\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:Nnno 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 .5pty espaciado 2pt, y pareceeste

información relacionada