
Я вижу, где мое описание могло ввести в заблуждение, поэтому вот исправленный вопрос. Я хочу сделать "dog" немного темнее обычного текста. Я не хочу, чтобы он был таким же темным, как "fox". Я использую 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
Я только что отправил issue #498 на страницу GitHub для latex3/fontspec. Связано с этой веткой в SE. Когда они ответят мне, я прокомментирую здесь. Тем временем, обходной путь (работает с lualatex):
В большинстве случаев, особенно для текста нормального или почти нормального размера, визуальное восприятие веса более тесно связано с вертикальными штрихами, чем с горизонтальными. Это связано с тем, что большинство символов имеют более толстые вертикальные штрихи.
Настройка fontspec
для FakeStretch
работает хорошо. Все, что она делает, это горизонтальное масштабирование, что является простым линейным преобразованием и максимально безошибочно. Поэтому для небольшого изменения веса я бы использовал FakeStretch
пока и подождал разрешения на FakeBold
.
Если вам также необходимо изменить толщину горизонтальных штрихов, это невозможно сделать с помощью FakeStretch
. Но при необходимости вы можете увеличить размер шрифта с помощью ScaleAgain
и компенсировать это значением FakeStretch
.
Связанное примечание: Я использую комбинацию ScaleAgain
и FakeStretch
для создания синтетических капителей для шрифтов, в которых их нет. Не идеально, но хорошо.
решение2
Оба движка TeX [XeTeX] и [LuaTeX с luaotfload] поддерживают функцию шрифта, реализованную движком, embolden=decimal_number
для шрифтов OpenType. Стандарт PDF определяет две основные процедуры рисования для замкнутых кривых: fill
и stroke
. Процедура вставляет чернила только внутрь замкнутой кривой, а штрих рисует кривую линией, ее ширина должна быть объявлена. По умолчанию fill
рисование букв шрифтов выполняется только процедурой . Когда установлена функция шрифта, зависящая от движка, то буквы используемого шрифта рисуются обеими процедурами: плюс и ширина линии процедуры устанавливается равной .fill
embolden=decimal number
fill
stroke
stroke
decimal_number/100 em
Например, вы можете попробовать использовать using 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
внутреннюю функцию шрифта.
Для большей ясности я добавляю следующее изображение, показывающее, как работают процедуры заливки и обводки: