Рейтинг:1

Как настроить fontconfig для сопоставления имени шрифта с дефисом?

флаг cn

У меня проблемы с fontconfig, распознающим UI-монопространство шрифт, который недавно начали использовать несколько веб-сайтов (включая сайты Github и Stack Exchange). Firefox еще не имеет этой специальной ссылки CSS на системные шрифты (см. Ошибка ФФ 1226042, проект спецификации, И его Могу ли я использовать запись), а FF также обманывается с помощью fontconfig, который удовлетворит любой шрифт с его назначением по умолчанию для sans-serif.

В качестве обходного пути я хотел бы явно присвоить это имя шрифта моему предпочтительному моноширинному шрифту (который Паника Санс, измененный вариант DejaVu Sans Mono, который немного смещает подчеркивание вверх), но поскольку это так неясно, в этом вопросе используется Дежавю без моно.

Моя первая попытка этого обходного пути не работает:

  <alias>
    <family>ui-monospace</family>
    <prefer><family>DejaVu Sans Mono</family></prefer>
  </alias>

Еще одна попытка, которая имела больший успех для других шрифтов:

  <match>
    <test name="family"><string>ui-monospace</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>DejaVu Sans Mono</string>
    </edit>
  </match>

Когда я сохраняю это и очищаю кеш, это не работает:

$ grep ui.monospace ~/.config/fontconfig/fonts.conf
    <test name="family"><string>UI-monospace</string></test>
$ fc-кэш -f
$ fc-match 'ui-monospace'
Carlito-Regular.ttf: "Карлито" "Обычный"
$ fc-match без засечек
Carlito-Regular.ttf: "Карлито" "Обычный"

Так что это не работает. Вот любопытная часть: это работает, когда я использую пробел вместо дефиса:

$ sed -i 's/ui-monospace/ui monospace/' ~/.config/fontconfig/fonts.conf
$ grep ui.monospace ~/.config/fontconfig/fonts.conf
    <test name="family"><string>моноширинный пользовательский интерфейс</string></test>
$ fc-кэш -f
$ fc-match 'моноширинный пользовательский интерфейс'
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Книга"

Итак, похоже, проблема в дефисе. Я не вижу никакой документации (или отчетов об ошибках), указывающей на эту проблему; в документы fontconfig для <string> не делайте никаких замечаний о недопустимых символах или о том, как их избежать. Я пытался определить это как <string>ui\-monospace</string> и <string>ui&#45;monospace</string>-), но ни один из них не работал.

Как настроить fontconfig для сопоставления имени шрифта с дефисом?

флаг eg
Я думаю, что это проблема с оболочкой, попробуйте еще раз с `fc-match "ui\-monospace", у меня это работает с оболочкой рыбы.
флаг cn
Дефис не является специальным символом для оболочек (если бы он был, сработало бы `fc-match 'ui-monospace'`). Этот выход должен быть виден _fc-match_, а не оболочке, как показано на примере работы `fc-match "ui\-monospace"`.
флаг eg
Да, первая часть моего комментария неверна. Я имел в виду «интерфейс командной строки» в отличие от API, такого как pango ... В любом случае, кажется, что `fc-match` нуждается в экранировании. Но конфигурация должна работать с hypen в конфигурационном файле.
Рейтинг:0
флаг co

Я поместил этот фрагмент в верхнюю часть моего ~/.config/fontconfig/fonts.conf и это работает:

  <match target="pattern">
    <test qual="any" name="family">
      <string>ui-monospace</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>monospace</string>
    </edit>
  </match>

Он должен быть вверху, перед частью, указывающей, какой моноширинный шрифт я предпочитаю.

Проверено на GitHub и fc-match 'ui\-monospace'.

флаг cn
Да, но это отправляет буквальную обратную косую черту в вызове match. Если вы сделаете `fc-match 'ui-monospace'` или `fc-match ui-monospace` или `fc-match "ui-monospace"`, это не сработает. Как отметил Николя Гой в [комментарии к вопросу] (https://askubuntu.com/q/1355091/260416#comment2347914_1355091), на самом деле это ошибка в командной строке `fc-match`. Кроме того, у меня была другая ошибка рендеринга шрифтов в моих приложениях с графическим интерфейсом, которая была решена перезагрузкой.
флаг co
@AdamKatz несколько символов, таких как `-` или `:`, необходимо экранировать, потому что они имеют особое значение для fontconfig. Часть после `-` интерпретируется как `размер` (но не цифры игнорируются). Однако в конфигурационном файле уже указано для проверки «семейства».

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.