ディセンダーを省略した下線

ディセンダーを省略した下線

それがベストプラクティスだと考えられていることはよく分かっていますないタイプライターや手書き以外では下線を使用します。しかし、それでも必要な場合もあります。

私の意見では、印刷物で下線を引くときに、タイポグラフィ的に最も目立たない方法は、ディセンダーを省略することです。これは、手書きで下線を引くときに私が学んだ方法でもあります。あらかじめ用意された下線付きのバリエーションを提供するフォントはほとんどありませんが、一部のテキスト プロセッサ (例: OS X テキスト エンジン) は、使用するフォントに応じて、この効果をエミュレートするのに適切な仕事をします。

OS X テキストエディットの下線

下線を引くための既存の方法やパッケージを微調整して同じことを実現するにはどうすればよいでしょうか?

ボーナスとして、フォントとテキスト スタイルごとに動作 (省略部分の範囲、どの文字に適用するか) を微調整できるようにしたいと思っています。できれば XeLaTeX で作業したいです。

答え1

それぞれの文字に対して次の操作を実行できます。

  • 下線を引く
  • 同じ文字で太字にするか、左右にシフトした文字で背景色または白色にして行を上書きします。
  • 手紙を書く

したがって、一致するギャップのある下線が表示されます。

ここで私はsoul、私が言いたいことのデモンストレーションのために、Marco のアプローチを次のように変更しました。改善できる点 (太字、ループ) は次のとおりです。

\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

単に便利だと思ったので、上記の Stefan の回答を修正して、下線の深さ、太さ、幅を制御できるようにします。これは、たとえば、フォントを大きくしたり太字にしたりするときに便利です。構文は次の \varul<width>[depth][thickness]{stuff}とおりです。

  • <width>はオプションで、 の倍数として与えられます1/100 em。例えば、<10>はギャップ幅 を与えます0.1em。デフォルト値は5
  • [depth]はオプションであり、下線を描画するためのベースラインの下の距離を指定する正の値(単位を含む)として指定されます。デフォルト値は です0.2ex
  • [thickness]はオプションで、下線の太さを指定する正の値(単位を含む)として与えられます。デフォルト値は0.1ex
  • 4 番目の必須引数は、下線を引いておくべきものです。

これは段落や改行を越えて機能しますが、間隔がわずかに変わる可能性があります。

ここに画像の説明を入力してください

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

Tobiによる編集: \fp_mul:Nnは現在の TeXlive では動作しないので、2 行を に置き換えました\fp_set:Nn \l_tmpa_fp {#1 * .01}

答え4

私は CDSousa の回答を次のように改変して使用していますが、その理由は 2 つあります。まず、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あり、次のようになります。これ

関連情報