Jak zapobiec, by „automatyczna” pogrubiona wersja czcionki była szersza niż zwykła i miała ten sam rozmiar pt?

10

Mam czcionkę o stałej szerokości ( PT Mono), której wolę używać w programowaniu IDE. Czcionka ma tylko Regular, wszystkie inne Boldi Italicsą uzyskiwane przez pochylenie i „pogrubienie” Regular. Problem polega na tym, że „pogrubione” znaki są szersze niż zwykłe, więc łańcuchy kodu źródłowego w oknie IDE składają się teraz ze znaków nieposiadających odstępu.

Jak kontrolować „pogrubienie” czcionki, aby nie stała się szersza niż zwykła?

Problem zilustrowano na zrzucie ekranu poniżej ( PT Monobez pogrubionej czcionki). Zobacz, jak słowa „unsigned char” i „sizeof” wychodzą ze swoich właściwych pozycji.

automatyczne pogrubienie zmienia szerokość

Oto kolejny przykład Droid Sans Mono(bez dedykowanego pogrubienia). wprowadź opis zdjęcia tutaj

A tutaj przykład, kiedy czcionka ma dedykowaną pogrubioną wersję ( Liberation Mono). Pogrubienie i regularność są idealnie dopasowane. wprowadź opis zdjęcia tutaj

Problemem jest z pewnością niepoważne renderowanie pogrubione w sytuacjach, w których pogrubienie nie jest zapewnione. Winien jest silnik czcionek.

UPD: Istnieje plik, do /etc/fonts/conf.avail/90-synthetic.confktórego odwołuje się z /etc/fonts/conf.d/tuningu silnika czcionek, aby wykonać syntetyczne pogrubienie czcionek, które nie mają pogrubionej wersji. Jeśli dowiązanie symboliczne do tego pliku zostanie usunięte z /etc/fonts/conf.d/, pogrubienie zniknie. Nie jest to dokładnie potrzebne, ale przynajmniej leczy przypadek, gdy czcionki monospace nie są monospace (patrz poniżej PT Mono). Nadal pożądane jest precyzyjne dostrojenie pogrubienia (za pomocą pliku konfiguracyjnego lub freetype2poprawki.

wprowadź opis zdjęcia tutaj

mbaitoff
źródło
Nie możesz tego kontrolować. Projekt czcionki zostałby zrujnowany. Nawet jeśli precyzyjnie zmniejszysz rozmiar (czego nie możesz), aby dopasować regularne odstępy między czcionkami, pogrubiona czcionka będzie wyglądać na mniejszą. Jeśli chcesz mieć czcionkę o jednolitym odstępie, po prostu nie używaj pogrubionej czcionki ... lub wypróbuj terminal
zetah
To nieprawda. Czcionki, które mają zarówno zwykłe, jak i pogrubione kroje pisma w osobnych plikach, mają tę samą szerokość znaków zarówno zwykłą, jak i pogrubioną czcionką. Na przykład LetterGothic.
mbaitoff
Poprawiono mnie. Zauważyłem to samo za pomocą SciTE (a może ty też używasz edytora opartego na Scintilli - może Geany?), Gdy moją czcionką jest Droid Sans Mono, ale uznałem to za pewnik i nie miałem pojęcia, że ​​ważona czcionka może mieć różne odstępy nawet w przypadku czcionek o stałej szerokości, natomiast czcionka pogrubiona używa tego samego odstępu co zwykła. Co więcej, wydaje się, że również proporcjonalne czcionki mają tę „cechę”, którą zauważyliście, nie wszyscy. Przepraszam za moją odważną pierwszą odpowiedź, powinienem był najpierw sprawdzić
zetah
@zetah: Patrzyłem przez różne pliki czcionek i wygląda na to, że zmiana szerokości ma miejsce tylko wtedy, gdy nie ma dedykowanej pogrubionej wersji czcionki. Zaktualizuję pytanie o więcej zrzutów ekranu.
mbaitoff
1
wspomniano również tutaj: bugs.launchpad.net/ubuntu/+source/ttf-droid/+bug/565393
zetah

Odpowiedzi:

9

mbaitoff , zamieszczam to jako uzupełnienie twojej aktualizacji, a nie jako odpowiedź

Jeśli użytkownik utworzy plik o nazwie ~/.fonts.conf:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="font">
        <test name="spacing" compare="eq">
            <const>mono</const>
        </test>
        <edit name="embolden" mode="assign">
            <bool>false</bool>
        </edit>
    </match>
</fontconfig>

wówczas aplikacje mogą używać pogrubionej czcionki o stałej szerokości, jeśli jest dostępna, i wyłączać „pogrubienie syntetyczne”, jeśli używana czcionka nie jest pogrubiona.

Jest to po prostu alternatywa i nieco inne podejście z innym rezultatem

zetah
źródło
Jeśli /etc/conf.d/50-user.confnazwa dowiązania symbolicznego zostanie zmieniona na później 90-synthetic.conf, nie musisz całkowicie usuwać pogrubienia. 99-user.confdziała w porządku. W przeciwnym razie 90-synthetic.confwłącza to ponownie.
musiKk