Vấn đề kết xuất phông chữ trong urxvt - quá nhiều khoảng trống giữa các ký tự


27

Bắt đầu từ hôm nay tôi nhận được các vấn đề kết xuất phông chữ với rxvt-unicode. Cụ thể với nhiều phông chữ, tôi nhận được rất nhiều khoảng trống giữa các ký tự. Trong các phông chữ khác rxvt từ chối thay đổi kích thước.

Dưới đây là một ví dụ về vấn đề khoảng cách giữa urxvt và xterm.

Các tài nguyên phông chữ:

URxvt*font:     xft:Terminus:medium:size=10
xterm*faceName: xft:Terminus:medium:size=10

Và các kết xuất

  • urxvt phông chữ xấu
  • xterm phông chữ tốt

Tôi đã thử tất cả các hoán vị của gợi ý và khử răng cưa. Thay đổi kích thước hoặc pixelize sẽ thay đổi kích thước phông chữ trong urxvt nhưng điều này cũng làm tăng khoảng cách thêm.

Có ai có ý tưởng tôi có thể cố gắng khắc phục điều này?


1
Tôi không nghĩ xtermlà thực sự sử dụng cùng một phông chữ. Các J0là khác biệt rõ rệt. Bạn có thể xác nhận điều này bằng cách sử dụng phông chữ không tồn tại trong tệp tài nguyên ( xterm*faceName: xft:Nosuchfont:medium:size=10). Nếu nó vẫn trông giống nhau, rõ ràng đó không phải là Terminus.
goldilocks

@goldilocks Có vẻ như bạn đúng. Urxvt đang chọn sai phông chữ hiển thị nó một cách khủng khiếp.
casey

1
Tôi đã nhận thấy điều này trước gvimkhi sử dụng cấu hình của mình trên một hệ thống có cài đặt phông chữ tôi muốn. xfthoặc một cái gì đó rơi trở lại trên một phông chữ không đơn cách và đó là cách chúng xuất hiện.
goldilocks

2
@goldilocks Hóa ra một quy tắc fontconfig xấu bị trượt trong khi cập nhật và đã chặn tất cả các phông chữ bitmap có sẵn. Tôi đã bắt nó và tôi trở lại bình thường.
casey

Câu trả lời:


15

Urxvt có một tùy chọn cho k sâu cơ bản : letterSpace. Xem man urxvt:

-letsp number
Biên dịch frills: Số tiền để điều chỉnh độ rộng ký tự được tính bằng cách kiểm soát khoảng cách ký tự tổng thể. Các giá trị âm sẽ thắt chặt khoảng cách chữ cái, các giá trị dương sẽ loại bỏ các chữ cái ra nhiều hơn. Hữu ích để làm việc xung quanh các số liệu phông chữ lẻ; thư tài nguyên Không gian.

Vì vậy, bạn có thể điều chỉnh khoảng cách bằng cách thêm một dòng vào ~/.Xresources, như vậy:

URxvt.letterSpace: -1

Lưu ý: rất khó để nói từ ảnh chụp màn hình đầu tiên của bạn, nhưng có vẻ như Urxvt đang quay trở lại phông chữ mặc định vì nó không thể tìm thấy hoặc tải Terminus, do đó khoảng cách rộng. Terminus là một phông chữ bitmap (có khả năng bị tắt theo mặc định), vì vậy bạn nên sử dụng xfontselđể sao chép chuỗi phông chữ chính xác vào định nghĩa của mình.

Xem trang Arch Wiki trên X Mô tả Phông chữ Hợp lý để biết mô tả chi tiết về cách hệ thống này hoạt động.


3
Tôi đã có vấn đề này là tốt và thấy rằng đó urxvt -letsp -2là cần thiết cho tôi. Sử dụng -1là tốt hơn, nhưng ban đầu tôi không nhận ra rằng vì nó không đủ.
Adam Katz

Ngoài ra, bạn có thể sử dụng fc-match <font-name>thay vì xfontselnếu nó chưa được cài đặt ( tên phông chữ là biểu thức được cho trong URxvt*fonttên phông chữ của dòng của bạn ). Nếu giá trị này hiển thị với giá trị khớp với biểu thức, phông chữ sẽ được tải chính xác. ví dụ: nếu fc-match "Noto Mono"cho DejaVuSans.ttf: "DejaVu Sans" "Book"thì nó có thể được coi là một biểu thức phông chữ không chính xác.
Avinash R

6

Hóa ra một quy tắc đã được kích hoạt trên hệ thống của tôi đã chặn các phông chữ bitmap như Terminus.

Quy tắc này (trên hệ thống của tôi) đã có /etc/fonts/conf.d/70-no-bitmap-fontsvà chứa:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Reject bitmap fonts -->
 <selectfont>
  <rejectfont>
   <pattern>
     <patelt name="scalable"><bool>false</bool></patelt>
   </pattern>
  </rejectfont>
 </selectfont>
</fontconfig>

Tôi đã xóa cái này khỏi conf.dthư mục và phông chữ của tôi một lần nữa được hiển thị đúng urxvt.


3

Xin lưu ý rằng có một báo cáo lỗi liên quan đến khoảng cách chữ.

Tôi đã có vấn đề tương tự. Theo các khuyến nghị của cuộc thảo luận về lỗi, tôi đặt Xft.rgba: noneXft.hintstyle: hintfullvào ~/.Xdefaults(thay vì Xft.rgba: rgbXft.hintstyle: hintslight). Điều này đã sửa nó cho tôi - mặc dù tôi đã sử dụng Ubuntu Mono làm phông chữ.


3

Giải pháp của tôi rất đơn giản:

URxvt*font:     xft:mono:medium:size=10
xterm*faceName: xft:mono:medium:size=10

Bây giờ nó hoạt động hoàn hảo.


0

Điều này có thể phát sinh từ tệp phông chữ thực tế (Monospace trong trường hợp của tôi) nhiều khả năng hơn từ bất cứ thứ gì trong urxvt. Nếu phông chữ (một cách sai lầm) tuyên bố một số glyphs quá rộng, urxvt buộc phải làm cho lưới rộng.

Trong trường hợp của tôi, phông chữ "OK" mà tôi tìm thấy là Bitstream Vera Sans Mono.

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.