
私の説明が誤解を招く可能性があることがわかりましたので、質問を修正します。「dog」を通常のテキストより少しだけ暗くしたいのですが、「fox」ほど暗くしたくはありません。lualatex で fontspec を使用しています。
あるフォントのイタリック体を、少しだけ暗い別のフォントに合わせようとしています。FakeBold でそれを実現する方法はありますか? 下の例では、「dog」は「fox」と同じ暗さですが、少しだけ暗くしたいだけです。
(ここでは例として GentiumPlus を使用しています。実際のフォントではありません。)
\documentclass[12pt]{article}
\usepackage{fontspec}
\setmainfont{GentiumPlus}
\newfontfamily{\fbgentium}{GentiumPlus}[%
ItalicFeatures={FakeBold=1.5},
Scale = MatchLowercase]
% Want this to be just slightly dark
\newfontfamily{\ltgentium}{GentiumPlus}[%
ItalicFeatures={FakeBold=1.05}, % specify a small amount here (tried 0.05)
Scale = MatchLowercase]
\begin{document}
\itshape
The quick brown {\fbgentium fox}
jumps over the lazy {\ltgentium dog.}
\end{document}
答え1
私は、latex3/fontspec の GitHub ページに問題 #498 を提出しました。SE のこのスレッドにリンクされています。返信が来たら、ここにコメントします。その間、回避策 (lualatex で動作します):
ほとんどの場合、特に標準または標準に近いサイズのテキストの場合、太さの視覚的な外観は、水平ステムよりも垂直ステムに密接に関連しています。これは、ほとんどの文字の垂直ステムの方が太いためです。
fontspec
の設定はうまくFakeStretch
機能します。水平方向にスケールするだけなので、単純な線形変換であり、バグがほとんどありません。したがって、重みを少し変更する場合は、FakeStretch
今のところ を使用し、 の解決を待ちますFakeBold
。
水平ステムの太さも変更する必要がある場合、 では実行できませんFakeStretch
。ただし、必要な場合は、 を使用してフォントのサイズを大きくしScaleAgain
、FakeStretch
値で補正することができます。
関連メモ:合成小文字大文字を作成するには、合成小文字大文字のないフォントに対してScaleAgain
との組み合わせを使用します。完璧ではありませんが、良いです。FakeStretch
答え2
embolden=decimal_number
TeX エンジン [XeTeX] と [luaotfload 付き LuaTeX] は両方とも、OpenType フォントのエンジン実装フォント機能をサポートしています。PDF 標準では、閉じた曲線の 2 つの基本的なペイント ルーチンが定義されています:fill
およびstroke
。fill
ルーチンは閉じた曲線の内側にのみインクを挿入し、stroke は曲線を線で描画します。線の幅は宣言する必要があります。フォントの文字のペイントは、fill
デフォルトではルーチンによってのみ行われます。エンジン依存のフォント機能がembolden=decimal number
設定されている場合は、使用されているフォントの文字は両方のルーチンによってペイントされます:fill
プラスstroke
およびルーチンの線幅stroke
は に設定されますdecimal_number/100 em
。
たとえば、次のように使用してみてくださいxetex
:
\font\fa=[lmroman10-regular]
\font\fb=[lmroman10-regular]:embolden=1.7
\fa Default: only fill is used.
\fb Special: fill plus stroke is used.
\bye
LaTeX fontspec パッケージは、その特定の構文を内部的にフォント機能FakeBold=decimal number
に変換しますembolden=decimal_number
。
塗りつぶしとストロークのルーチンがどのように機能するかをより明確にするために、次の画像を追加します。