ปัญหาการแสดงผลแบบอักษรใน urxvt - มีช่องว่างระหว่างอักขระมากเกินไป


27

เริ่มต้นก่อนหน้าวันนี้ฉันได้รับปัญหาการแสดงผลแบบอักษรด้วย rxvt-unicode โดยเฉพาะกับตัวอักษรหลายตัวฉันได้รับพื้นที่พิเศษมากมายระหว่างตัวละคร ในฟอนต์อื่น rxvt ปฏิเสธที่จะเปลี่ยนขนาด

นี่คือตัวอย่างของปัญหาการเว้นวรรคระหว่าง urxvt และ xterm

ทรัพยากรแบบอักษร:

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

และการเรนเด

  • urxvt แบบอักษรไม่ดี
  • xterm แบบอักษรที่ดี

ฉันได้ลองวิธีเรียงสับเปลี่ยนและลบรอยหยักทั้งหมดแล้ว การเปลี่ยนขนาดหรือขนาดพิกเซลทำให้ขนาดตัวอักษรเป็น urxvt แต่สิ่งนี้จะเพิ่มระยะห่างพิเศษ

ไม่มีใครมีแนวคิดที่ฉันสามารถลองแก้ไขได้


1
ฉันไม่คิดว่าxtermจริง ๆ แล้วใช้แบบอักษรเดียวกัน Jและ0มีความแตกต่างอย่างเห็นได้ชัด คุณอาจยืนยันสิ่งนี้โดยใช้แบบอักษรที่ไม่มีอยู่ในไฟล์ทรัพยากร ( xterm*faceName: xft:Nosuchfont:medium:size=10) ถ้ามันยังคงเหมือนเดิมแสดงว่าไม่ใช่เทอร์มินัส
goldilocks

@goldilocks ดูเหมือนว่าคุณพูดถูก Urxvt คือการเลือกตัวอักษรที่ไม่ถูกต้องและการกระทำมันชะมัด
casey

1
ฉันสังเกตเห็นสิ่งนี้มาก่อนgvimเมื่อใช้การกำหนดค่าของฉันบนระบบที่ไม่ได้ติดตั้งแบบอักษรที่ฉันต้องการ xftหรือบางสิ่งบางอย่างกลับมาอยู่บนฟอนต์ที่ไม่ใช่การบินอวกาศและนั่นคือลักษณะที่ปรากฏ
goldilocks

2
@goldilocks ปรากฎว่ากฎ fontconfig ที่ไม่ถูกต้องถูกเลื่อนลงในระหว่างการอัปเดตและบล็อกไม่ให้ใช้แบบอักษรบิตแมปทั้งหมด ฉัน nuked มันและฉันกลับมาเป็นปกติ
casey

คำตอบ:


15

Urxvt letterSpaceมีตัวเลือกสำหรับการจัดช่องไฟพื้นฐาน: ดูman urxvt:

-letsp number
Compile frills: จำนวนเงินเพื่อปรับความกว้างของอักขระที่คำนวณโดยเพื่อควบคุมระยะห่างของตัวอักษรโดยรวม ค่าลบจะทำให้ระยะห่างตัวอักษรแน่นขึ้นค่าบวกจะเว้นวรรคตัวอักษรออกมากขึ้น มีประโยชน์ในการหลีกเลี่ยงการวัดแบบอักษรแปลก ๆ ทรัพยากรตัวอักษรสเปซ

ดังนั้นคุณสามารถปรับระยะห่างได้โดยเพิ่มบรรทัดลงในของคุณ~/.Xresourcesเช่น:

URxvt.letterSpace: -1

หมายเหตุ: มันยากที่จะบอกจากภาพหน้าจอแรกของคุณ แต่ดูเหมือนว่า Urxvt จะกลับไปเป็นฟอนต์เริ่มต้นเนื่องจากไม่สามารถค้นหาหรือโหลดเทอร์มินัสดังนั้นจึงมีระยะห่างที่กว้าง เทอร์มินัสเป็นแบบอักษรบิตแมป (ซึ่งเป็นค่าเริ่มต้นซึ่งอาจถูกปิดใช้งาน) ดังนั้นคุณควรใช้xfontselเพื่อคัดลอกสตริงแบบอักษรที่ถูกต้องลงในคำจำกัดความของคุณ

ดูหน้า Arch Wiki ในคำอธิบายแบบอักษร X Logicalสำหรับคำอธิบายโดยละเอียดเกี่ยวกับการทำงานของระบบนี้


3
ฉันมีปัญหานี้เช่นกันและพบว่าurxvt -letsp -2จำเป็นสำหรับฉัน การใช้-1ดีกว่า แต่ตอนแรกฉันไม่รู้ว่ามันไม่พอ
Adam Katz

นอกจากนี้คุณยังสามารถใช้fc-match <font-name>แทนxfontselหากไม่ได้ติดตั้งไว้ ( font-nameคือนิพจน์ที่ระบุในURxvt*fontชื่อแบบอักษรของบรรทัดของคุณ) หากสิ่งนี้ปรากฏขึ้นพร้อมกับค่าที่ตรงกับนิพจน์นิพจน์จะถูกโหลดอย่างถูกต้อง เช่นถ้าfc-match "Noto Mono"ให้DejaVuSans.ttf: "DejaVu Sans" "Book"ก็ถือว่าเป็นนิพจน์ที่ไม่ถูกต้อง
Avinash R

6

ปรากฎว่ามีการเปิดใช้งานกฎในระบบของฉันที่บล็อกแบบอักษรบิตแมปเช่นเทอร์มินัส

กฎนี้ (ในระบบของฉัน) อยู่ใน/etc/fonts/conf.d/70-no-bitmap-fontsและมีอยู่:

<?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>

ฉันออกนี้จากไดเรกทอรีและแบบอักษรของฉันอีกครั้งการแสดงผลถูกต้องในconf.durxvt


3

โปรดทราบว่ามีรายงานข้อผิดพลาดเกี่ยวกับการเว้นวรรคตัวอักษร

ฉันมีปัญหาที่คล้ายกัน ทำตามคำแนะนำของการอภิปรายข้อผิดพลาดฉันตั้งค่าXft.rgba: noneและXft.hintstyle: hintfullใน~/.Xdefaults(แทนXft.rgba: rgbและXft.hintstyle: hintslight) สิ่งนี้ทำให้ฉัน - ฉันใช้ Ubuntu Mono เป็นตัวอักษร


3

โซลูชันของฉันง่ายมาก:

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

ตอนนี้มันทำงานได้อย่างสมบูรณ์


0

สิ่งนี้อาจเกิดขึ้นจากไฟล์ฟอนต์จริง (Monospace ในกรณีของฉัน) มีโอกาสมากกว่าสิ่งใดใน urxvt หากฟอนต์ (ผิดพลาด) ประกาศว่าร่ายมนตร์บางกว้างเกินไป urxvt จะถูกบังคับให้สร้างกริดกว้างเช่นกัน

ในกรณีของฉันแบบอักษร "ตกลง" ที่ฉันพบคือ Bitstream Vera Sans Mono

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.