Как использовать собственные шрифты в Obsidian (и на мобильном тоже)
Научился этому, подглядев код темы obsidian_ia.
Фишка тут в чём? Вы можете, как известно, задать собственные шрифты для текста, интерфейса и кода в настройках, но на смартфоне или планшете это не будет работать (нужно, чтобы указанные шрифты были доступны — если на компе вы можете установить нужные вам шрифты, то на смартфоне как правило нет).
А что, если мы просто добавим сами шрифты в CSS, который использует Obsidian?
Для начала нужно закодировать нужные файлы шрифта (в TTF-формате, обычно для каждого начертания отдельный файл) в Base64. Для каждого файла выполним команду
base64 -i файл_шрифта.ttf -o файл_шрифта.txt
Затем создадим CSS-файл (показываю на примере шрифта iA Writer Mono S):
@font-face {
font-family: "iA Writer Mono S";
src: url(data:application/octet-stream;base64,<ТЕКСТ ЗАКОДИРОВАННОГО ШРИФТА>) format('truetype');
}
@font-face {
font-family: "iA Writer Mono S";
font-style: italic;
src: url(data:application/octet-stream;base64,<ТЕКСТ ЗАКОДИРОВАННОГО ШРИФТА>) format('truetype');
}
@font-face {
font-family: "iA Writer Mono S";
font-weight: bold;
src: url(data:application/octet-stream;base64,<ТЕКСТ ЗАКОДИРОВАННОГО ШРИФТА>) format('truetype');
}
@font-face {
font-family: "iA Writer Mono S";
font-weight: bold;
font-style: italic;
src: url(data:application/octet-stream;base64,<ТЕКСТ ЗАКОДИРОВАННОГО ШРИФТА>) format('truetype');
}
Дальше вместо каждого <ТЕКСТ ЗАКОДИРОВАННОГО ШРИФТА> добавляем содержимое соответствующего текстового файла, закодированного на предыдущем шаге.
Полученный файл кладём в папку .obsidian/snippets внутри вашего хранилища, после чего в настройках на вкладке Appearance подключаем этот сниппет, и указываем имя шрифта в разделе Font.
После этого ваш шрифт будет использован и на десктопе, и на смартфоне, и на планшете — везде, куда у вас синхронизируются данные вашего хранилища.
У меня давно лежит порядка десяти разных шрифтов в виде сниппетов, и, когда надоедает один шрифт, я меняю его на другой. :)
P.S. Возможно, лучше было бы использовать не TTF, закодированный в Base64, а какой-нибудь Woff2, но я не пробовал — текущий вариант меня вполне устраивает.