Thay đổi họ phông chữ cho các ký tự của một ngôn ngữ / tập lệnh nhất định bằng fontconfig?


8

Tôi đang dùng Arch Linux, Deepin Desktop. Tôi đang sử dụng Noto Serif làm phông chữ tiêu chuẩn của mình, nhưng tôi không thích các ký tự tiếng Ả Rập của nó. Vì vậy, mục tiêu của tôi là sử dụng một phông chữ khác chỉ dành cho các ký tự tiếng Ả Rập.

Đây là những gì tôi đã cố gắng. Tôi đã tạo một tệp cấu hình mới /etc/fonts/conf.d/với các nội dung sau:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="pattern">
        <test name="lang" compare="contains">
            <string>ar</string>
        </test>
        <test qual="any" name="family">
            <string>sans-serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Naskh Arabic</string>
        </edit>
    </match>

    <match target="pattern">
        <test name="lang" compare="contains">
            <string>ar</string>
        </test>
        <test qual="any" name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Naskh Arabic</string>
        </edit>
    </match>
</fontconfig>

Sau đó tôi chạy fc-cache -r. Nhưng điều này không hoạt động, cùng một phông chữ vẫn được sử dụng và chạy fc-matchtrả về NotoSerif-Regular.ttf: "Noto Serif" "Regular"như trước đây.


Tên bạn đã cho tập tin cấu hình của bạn là gì? Địa phương của bạn là gì (hay cụ thể hơn là LC_CTYPEdanh mục địa phương)?
Gunnar Hjalmarsson

@GunnarHjalmarsson Tôi sử dụng 99-bangla.conftrong ~/.config/fontconfig/conf.dthư mục. Có vẻ như tôi nhận được mặc định khi chạy LANG=bn fc-match. Nhưng google chrome vẫn chọn phông chữ khác
Anwar

Câu trả lời:


2

Nhiều phông chữ Noto báo cáo với hệ thống rằng họ hỗ trợ tập lệnh tiếng Ả Rập, do họ thực hiện một phần. Một trong những phông chữ này là phông chữ Urdu và vì bất kỳ lý do gì, nó được ưu tiên hơn các phông chữ khác hỗ trợ Tập lệnh Ả Rập.

Bạn có thể thích một phông chữ cụ thể hơn các phông khác như sau:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<alias>
  <family>sans-serif</family>
  <prefer>
   <family>Noto Sans</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

 <alias>
  <family>serif</family>
  <prefer>
   <family>Noto Serif</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

 <alias>
  <family>monospace</family>
  <prefer>
   <family>Noto Sans Mono</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

</fontconfig>

Vị trí của phông chữ càng cao thì càng được ưa thích. Trong trường hợp này, chúng tôi thích Noto Naskh Arabiccác phông chữ Ả Rập khác.

Bạn có thể làm điều này tất nhiên với bất kỳ ngôn ngữ hoặc phông chữ nào bạn chọn.

Vì một số lý do, chỉ có tệp cấu hình người dùng làm việc cho tôi, những tệp nằm trong ~/.config/fontconfig/fonts.conf. Lưu ý rằng $XDG_CONFIG_HOMEbiến môi trường phải được đặt thành .configthư mục của bạn trong thư mục chính của bạn, vì vậy $HOME/.config.

Sau đó, bạn phải xây dựng lại cấu hình để nó có hiệu lực bằng cách sử dụng fc-cache. Chỉ ứng dụng mới ra mắt sẽ được hiển thị với cấu hình mới. Khởi động lại máy chủ X hoặc Máy tính để bàn của bạn để các thay đổi có hiệu lực trên toàn cầu.

Chỉnh sửa: Nếu bạn khớp với arngôn ngữ đơn giản là không hoạt động trên tất cả các trang web, bởi vì một số trang web sử dụng enngôn ngữ trong khi hiển thị các ký tự UTF-8 tiếng Ả Rập.

Nếu bạn đến /etc/fonts/conf.dvà đọc READMEvà sau đó đọc bất kỳ tệp cấu hình nào bắt đầu với [30-40]bạn sẽ biết rằng đây là câu trả lời đúng.

Nếu nói một trang web yêu cầu một phông chữ Serif; fontconfig đi qua danh sách này, đầu tiên Noto Serif, khi tìm thấy một ký tự Noto Naskh Arabictiếng Ả Rập, nó sử dụng phông chữ thứ hai trong danh sách - - và thấy rằng phông chữ hỗ trợ tập lệnh tiếng Ả Rập, do đó nó được sử dụng.


1
Cảm ơn! Dường như đối với Deepin, chỉ cần thêm <string>Noto Naskh Arabic</string>vào ~/.config/fontconfig/conf.d/99-deepin.conftệp thực hiện công việc.
Omar Emara

Tên tệp phải nằm trong khoảng từ 50 đến 69 trong Ubuntu tôi đoán
Anwar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.