подчеркивание без нижних выносных элементов

подчеркивание без нижних выносных элементов

Я прекрасно понимаю, что это считается лучшей практикой.нетиспользовать подчеркивание не только на пишущих машинках и в рукописном тексте. Но иногда это все же необходимо.

По моему мнению, наименее оскорбительный с точки зрения типографики способ подчеркивания в печати — это опустить нижние выносные элементы. Именно так я научился делать это в рукописном тексте. Очень немногие шрифты предлагают готовый подчеркнутый вариант, но некоторые текстовые процессоры (например, текстовый движок OS X) делают — в зависимости от используемого шрифта — приемлемую работу по эмуляции этого эффекта:

OS X TextEdit подчеркивание

Как бы мне настроить любой из существующих способов/пакетов подчеркивания, чтобы сделать то же самое?

В качестве бонуса я хотел бы иметь возможность настраивать поведение (степень пропущенной части, применять к определенным буквам) для каждого шрифта и стиля текста, желательно работая с XeLaTeX.

решение1

Мы могли бы сделать для каждой буквы:

  • Произвести подчеркивание
  • Заменить строку той же, но более жирной буквой или смещенной влево и вправо, но на фоне или белом цвете.
  • Напиши письмо

Таким образом, мы получим подчеркивание с соответствующими пробелами.

Здесь я модифицировал soulподход Марко следующим образом, просто для демонстрации того, что я имею в виду, и что можно улучшить (смелость, цикл):

\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}

подчеркивание пробелами

решение2

Вот решение с использованием пакетов contourи ulem.

На мой взгляд, это создает очень красивое подчеркивание, особенно для подчеркивания заголовков:

\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}

Выход:

пример вывода

Крупным планом:

пример детали

Недостатком является то, что глубина подчеркивания не может быть очень близка к базовой линии, поскольку она может быть скрыта контуром.

решение3

Просто потому, что я нашел это полезным, вот модификация ответа Стефана выше, которая позволяет вам контролировать глубину, толщину и ширину подчеркивания. Это может быть полезно, например, с более крупным или жирным шрифтом. Синтаксис: \varul<width>[depth][thickness]{stuff}где:

  • <width>необязательно и задано как кратное 1/100 em, например, <10>даст ширину зазора 0.1em. Значение по умолчанию:5
  • [depth]необязательно и задается как положительное значение (включая единицы), которое указывает расстояние ниже базовой линии для рисования подчеркивания. Значение по умолчанию — 0.2ex.
  • [thickness]необязательно и задается как положительное значение (включая единицы), определяющее толщину подчеркивания. Значение по умолчанию:0.1ex
  • Четвертый, обязательный аргумент — это то, что вы хотите подчеркнуть.

Это будет работать для абзацев и переносов строк, но может немного изменить интервал.

введите описание изображения здесь

\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}

Редактировал Тоби: \fp_mul:Nnне работает в текущей версии TeXlive, поэтому я заменил две строки просто на \fp_set:Nn \l_tmpa_fp {#1 * .01}.

решение4

Я использую следующую адаптацию ответа CDSousa по двум причинам: во-первых, XCharter + contour по какой-то причине выглядит более грубо, чем остальной текст; во-вторых, чтобы обеспечить тесное подчеркивание (недостаток, на который указал 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%

Пример: \myul{1.75pt}{.5pt}{2}{Blupp of (that's \emph{of}, not \emph{off}, of course) a great Synopsis}имеет глубину подчеркивания 1.75pt, толщину подчеркивания .5ptи интервал 2ptи выглядит какэтот

Связанный контент