
Estou muito ciente de que isso é considerado uma prática recomendadanãousar sublinhados fora das máquinas de escrever e na caligrafia. Mas às vezes é necessário mesmo assim.
Na minha opinião, a maneira tipograficamente menos ofensiva de sublinhar na impressão é omitir os descendentes. Foi assim também que aprendi a fazer isso com caligrafia. Muito poucas fontes oferecem uma variante sublinhada pré-fabricada, mas alguns processadores de texto (por exemplo, mecanismo de texto do OS X) fazem - dependendo da fonte usada - um trabalho aceitável na emulação deste efeito:
Como eu ajustaria qualquer uma das formas/pacotes existentes para sublinhar para fazer o mesmo?
Como bônus, gostaria de poder ajustar o comportamento (extensão da parte omitida, aplicar a quais letras) por fonte e estilo de texto, de preferência trabalhando com XeLaTeX.
Responder1
Poderíamos fazer para cada letra:
- Produza o sublinhado
- Substitua a linha pela mesma letra, mas mais em negrito, ou por uma letra deslocada para a esquerda e para a direita, mas em segundo plano ou na cor branca
- Escreva a carta
Portanto, obteríamos um sublinhado com lacunas correspondentes.
Aqui modifiquei a soul
abordagem do Marco desta forma, apenas para uma demonstração do que quero dizer, que poderia ser melhorado (ousadia, loop):
\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}
Responder2
Aqui está uma solução usando pacotes contour
e ulem
.
IMO, isso produz um sublinhado muito bonito, especialmente para sublinhar o título:
\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}
Saída:
Fechar-se:
Como desvantagem, a profundidade do sublinhado não pode estar muito próxima da linha de base porque pode ser ocultada pelo contorno.
Responder3
Simplesmente porque achei útil aqui está uma modificação da resposta de Stefan acima que permite controlar a profundidade, espessura e largura do sublinhado. Isto pode ser útil, por exemplo, com uma fonte maior ou mais em negrito. A sintaxe é: \varul<width>[depth][thickness]{stuff}
onde:
<width>
é opcional e dado como um múltiplo de1/100 em
, por exemplo,<10>
daria uma largura de intervalo de0.1em
. o valor padrão é5
[depth]
é opcional e é fornecido como um valor positivo (incluindo unidades) que especifica a distância abaixo da linha de base para desenhar o sublinhado. O valor padrão é0.2ex
.[thickness]
é opcional e é fornecido como um valor positivo (incluindo unidades) especificando a espessura do sublinhado. o valor padrão é0.1ex
- O quarto argumento obrigatório é o que você deseja sublinhar.
Isso funcionará em parágrafos e quebras de linha, mas poderá alterar ligeiramente o espaçamento.
\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
não funciona em um TeXlive atual, então substituí as duas linhas por apenas \fp_set:Nn \l_tmpa_fp {#1 * .01}
.
Responder4
Estou usando a seguinte adaptação da resposta do CDSousa, por dois motivos: primeiro, o contorno do XCharter + por algum motivo parece mais grosseiro que o outro texto; em segundo lugar, para permitir sublinhar de perto (o inconveniente apontado 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%
Exemplo: \myul{1.75pt}{.5pt}{2}{Blupp of (that's \emph{of}, not \emph{off}, of course) a great Synopsis}
tem profundidade de sublinhado 1.75pt
, espessura de sublinhado .5pt
e espaçamento 2pt
e se parece com