
我發現我的描述可能有誤導性,所以這是一個修改後的問題。我想讓“dog”比普通文字暗一點。我不希望它像“狐狸”一樣黑暗。我正在將 fontspec 與 lualatex 一起使用。
我正在嘗試將一種字體的斜體與另一種稍暗的字體相匹配。我可以用 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] 和 [LuaTeX with luaotfload] 都支援OpenType 字型的引擎所實現的字型功能。 PDF 標準定義了閉合曲線的兩個基本繪製例程:fill
和stroke
。例程fill
僅在閉合曲線內部插入墨水,筆畫以直線繪製曲線,必須聲明其寬度。預設情況下,字體字母的繪製僅按常規完成fill
。當設定了與引擎相關的字體功能時embolden=decimal number
,所使用字體的字母將由兩個例程繪製:fill
plus 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
字體功能。
為了更清楚地了解填充和描邊例程的工作原理,我添加了以下圖像: