ทำไมความสูงของแบบอักษรจึงเปลี่ยนเมื่อเป็นตัวหนา


9

มันน่ารำคาญมาก ...

เมื่อข้อความใด ๆ ในบรรทัดมีการเปลี่ยนแปลงใบหน้าเพื่อให้ข้อความมีความหนาความสูงของบรรทัดจะเพิ่มขึ้นตาม (ฉันถือว่า) พิกเซลเดียว มันแสดงได้ดีที่สุดด้วยภาพ:

ป้อนคำอธิบายรูปภาพที่นี่

ทำไมนี้ ฉันจะป้องกันมันได้อย่างไร


ตามที่ร้องขอข้อมูลบนแพลตฟอร์ม:

  • Debian GNU / Linux sid (ไม่เสถียร) ใน amd64
  • Emacs ใช้ libgtk-3.so.0 (gtk 3.14.5) บน XFCE 4.12

ฉันลองแบบอักษรต่อไปนี้ที่ 8 พอยต์, 9 พอยต์, 10 พอยต์และ 11 พอยต์:

  • DejaVu Sans Mono
  • DejaVu Sans
  • Serja DejaVu
  • Droid Sans Mono
  • ปลดปล่อยโมโน

ปัญหาเกิดขึ้นเฉพาะกับ DejaVu Sans Mono และ DejaVu Sans เท่านั้นและเฉพาะที่ 9pt และ 10pt (ภาพด้านบนแสดงDejaVu Sans Mono-9)


2
คุณควรดูที่คุณลักษณะที่ใบหน้าของdefunexampleก่อนที่จะวางพื้นที่และจากนั้นอีกครั้งในแต่ละคำหลังจากวางช่องว่างระหว่างdefunและตัวอย่าง C-u C-x =นี้จะกระทำโดยการวางเคอร์เซอร์ที่จุดที่ต้องการและการพิมพ์แล้ว คุณอาจพบว่าใบหน้าที่มีผลต่อdefunหรือตัวอย่างที่มีผลต่อใบหน้านั้นมีคุณลักษณะที่แตกต่างกันซึ่งรับผิดชอบต่อพฤติกรรมที่คุณเห็น - เช่นนอกเหนือจากสีพื้นฐานของพื้นหน้า แอ็ตทริบิวต์ face สามารถกำหนดเองโดยผู้ใช้
กฎหมาย

คุณสามารถเพิ่มระบบปฏิบัติการและตัวจัดการหน้าต่างให้กับคำถามของคุณและข้อมูลบางอย่างเกี่ยวกับ GUI ที่ Emacs ของคุณใช้ (เช่น Gtk2, Gtk3 เป็นต้น)?
จันทร์ที่

@ กฎหมาย: ขอบคุณชาย ด้วยพื้นที่ว่างมันมีการใช้ฟอนต์ล็อคฟังก์ชั่นชื่อหน้าซึ่งมีความสูงที่ไม่ระบุ (ดังนั้นฉันจึงสันนิษฐานว่าเป็นค่าเริ่มต้น?) หากไม่มีช่องว่างจะไม่มีการใช้ใบหน้า (เช่นนั้นฉันจะถือว่าเป็นค่าเริ่มต้นหรือไม่) ค่าเริ่มต้นจะถูกตั้งค่าในธีมของฉันเป็น:height 90(9pt)
edam

@ กฎหมาย: ตรวจสอบเพิ่มเติม .... ในชุดรูปแบบถ้าฉันลบ / เพิ่ม / ลบ / เพิ่ม:weight boldจากfont-lock-function-name-face(และดำเนินการตามcustom-theme-set-facesคำสั่งของชุดรูปแบบ) ฉันสามารถดูความสูงของการdefunเปลี่ยนแปลงบรรทัดโดย 1px! ฉันคิดว่ามันเป็นคุณสมบัติตัวหนาที่ทำให้เกิด
edam

ฉันเดาตามความคิดเห็นของคุณก็คือตระกูลของตัวอักษรที่คุณเลือกนั้นมีความสูงที่แตกต่างกันสำหรับคุณลักษณะที่เป็นตัวหนาดังนั้นจึงไม่สามารถเปลี่ยนแปลงได้เว้นแต่คุณจะลดด้วยตนเอง - ลองผิดลองถูกด้วยการลดขนาดจุด หรือเลือกครอบครัวที่ไม่เปลี่ยนความสูงเมื่อใช้ตัวหนา ฉันเองไม่ใช้ตัวหนาหรือขีดเส้นใต้ในธีมที่กำหนดเองใด ๆ ของฉันอีกต่อไปด้วยเหตุผลหลายประการที่เกี่ยวข้องกับเอฟเฟ็กต์ภาพในบัฟเฟอร์ - เมื่อฉันสร้างขีดเส้นใต้สำหรับบรรทัดปัจจุบันจะเป็นการซ้อนทับ สำหรับตัวหนาฉันใช้สีที่แข็งแกร่งเช่นสีม่วงแดงสีเหลือง ...
กฎหมาย

คำตอบ:


2

ความสูงของแบบอักษรมีการเปลี่ยนแปลงใน DejaVu ที่ขนาดจุดนั้นเนื่องจากข้อมูลความสูงของแบบอักษรระหว่างสองแบบปกติและแบบอักษรหนาจะแตกต่างกันเมื่อควรจะเหมือนกัน

แบบอักษร DejaVu Sans Mono 10 ที่ฉันใช้ไม่ได้เปลี่ยนความสูงของแบบอักษรระหว่างน้ำหนักปกติและตัวหนา ฉันตั้งค่านั้นใน. emacs ของฉันด้วย(set-frame-font "DejaVu Sans Mono-10")

ดังนั้นคุณมีสิ่งที่จะเปรียบเทียบกับข้อมูลสำหรับตัวอักษร "DejaVu Sans 10" ผ่าน (font-info บน Emacs 25):

(font-info "DejaVu Sans Mono-10")
["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" 
"DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:
width=normal:spacing=100:scalable=true" 13 17 0 0 0 8 13 4 8 8 
"/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf" (opentype ((DFLT ...) )))]

แก้ไขตามข้อมูลที่ตามมา:

ในข้อมูลตัวอักษรด้านบนฉันแสดงความสูงของแบบอักษรที่ 17 และคุณรายงานความสูง 15 (ปกติ) หรือ 16 (ตัวหนา) ใน emacs 25 มีข้อมูลฟอนต์เพิ่มเติมหลังจาก 3 0 โดยเฉพาะอย่างยิ่งการลดลงของฟอนต์คือ 4

แม้ว่าฉันจะไม่ได้มีปัญหากับ Emacs 24 หรือ 25 กับ DejaVu Sans Mono และตัวแปร Bold สิ่งที่ง่ายที่สุดคือการใช้แบบอักษรและขนาดที่ไม่เปลี่ยนความกว้าง (ดังแสดงโดยแบบอักษรข้อมูล) ระหว่างปกติและตัวหนา หรืออย่างอื่นที่ไม่ใช่ DejaVu

สำหรับสิ่งที่ก่อให้เกิดสิ่งนี้มันอาจเป็นหนึ่งในห้องสมุดของคุณ (gtk ของฉันคือ libgtk-x11-2.0.so.0) แต่ฉันสงสัยว่ามันจะเป็นห้องสมุดเฉพาะนี้ ยังสงสัยว่าเป็นไฟล์ ttf หรือแพ็คเกจ มีแนวโน้มมากกว่าคือการเรนเดอร์ freetype (ฉันมี libfreetype.so.6) เนื่องจาก DejaVu มีการปรับขนาดเช่นเดียวกับแบบอักษรอื่น ๆ ที่เหมาะกับคุณข้อผิดพลาดในการคำนวณที่ถูกเขียนโดยวิธีที่ DejaVu เขียนนั้นจะอธิบายว่าทำไมงานเหล่านี้ในบางขนาด แต่ไม่ใช่แบบอื่น ๆ

ในการตรวจสอบว่าปัญหานั้นเกิดจาก Emacs โดยเฉพาะหรือไม่คุณอาจสามารถนำหน้าต่างเทอร์มินัลสองบานขึ้นมาหนึ่งอันด้วยพรอมต์ตัวหนาและอีกอันหนึ่งที่ไม่มีและเปรียบเทียบระยะห่างระหว่างบรรทัดกับพวกมัน หากมันแตกต่างจาก Emacs สิ่งนี้จะเกี่ยวข้องกับการเรนเดอร์และ / หรือฟอนต์

หากคุณรวบรวม emacs อาจมีบางอย่างเกิดขึ้นที่นั่น


สิ่งนี้ไม่ทำงาน ... (ฉันใช้DejaVu Sans Mono-9BTW) ฉันจะอัปเดตรายละเอียดด้านบน ...
edam

แบบอักษรของบรรทัดโหมดเหมือนกัน Mono 10 แสดงพฤติกรรมเดียวกัน แต่ 8 และ 11pr ทำไม่ได้! ต้องเป็นเรื่องเกี่ยวกับการแสดงแบบอักษรและความสูงของเส้นที่ต่างกันจะถูกส่งคืนสำหรับแบบปกติและแบบหนา Emacs ใช้ fontconfig หรือไม่
edam

1
Emacs ไม่ได้ใช้ประโยชน์จาก fontconfig และโดยทั่วไปแล้วค่อนข้างพิเศษเมื่อมันมาถึงการเลือก glyph
wasamasa

(font-info "DejaVu Sans Mono-10")["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" "DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:width=normal:spacing=100:scalable=true" 13 15 0 0 0]ให้ฉัน ฉันยังได้ติดตั้งและยังfonts-dejavu-core ttf-dejavu-coreพวกเขาทั้งสองมีDejaVuSansMono.ttf(ในไดเรกทอรีต่าง ๆ แต่เป็นไฟล์ที่เหมือนกันดังนั้นฉันไม่เห็นว่าเรื่องนี้) ฉันยังได้รับHeight: 98จากใบหน้า (เมื่อใช้ DajaVu Sans Mono-10 ซึ่งแสดงถึงปัญหาข้างต้น) ฉันเปิดให้ข้อเสนอแนะเพิ่มเติม! :)
edam

โปรดสังเกตว่าพารามิเตอร์ข้อมูลตัวอักษรบางอย่างของคุณแตกต่างกัน ฉันมี "13 17 ... " ในขณะที่คุณมี "13 15 .. " และถ้าคุณได้รับข้อมูลฟอนต์ช่วยเหลือสำหรับฟังก์ชั่นคุณจะเห็นความแตกต่างแรก 17 (ฉัน) เทียบกับ 15 (คุณ) คือความสูง ดังนั้นลองเปลี่ยนความสูงเป็น 17.
หิน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.