ฉันจะตั้งค่าแบบอักษรสำรองได้อย่างมีประสิทธิภาพได้อย่างไร


16

TL; DR: วิธีง่าย ๆ ที่จะพูดได้อย่างน่าเชื่อถือคือใช้ Consolas เป็นฟอนต์เริ่มต้น FreeMono สำหรับตัวละครที่ไม่สนับสนุนโดย Consolas และ Symbola สำหรับตัวละครที่ไม่สนับสนุน

เนื่องจากตัวอักษรการเขียนโปรแกรมหลักของฉันไม่ครอบคลุมสัญลักษณ์ทางคณิตศาสตร์ทั้งหมดที่ฉันต้องการฉันจึงเริ่มตั้งค่าตัวเลือกทางเลือกตามที่แสดงด้านล่าง:

(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)

น่าเสียดายที่นี่เปลี่ยนฟอนต์สำหรับตัวละครบางตัวที่ฟอนต์หลักของฉันรองรับด้วยดังนั้นฉันจึงเปลี่ยนเป็น

(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)

หากความเข้าใจของฉันถูกต้องสิ่งนี้ควรตรวจสอบให้แน่ใจว่าตัวละครที่ Consolas ไม่สามารถจัดการได้รับการจัดการโดย FreeMono เว้นแต่ว่า FreeMono จะไม่มีตัวละครเหล่านั้นในกรณีนี้พวกเขาควรจะแสดงโดยใช้ Symbola นอกจากนี้ยังเป็นความเข้าใจของฉันที่tทำเช่นเดียวกับ"fontset-default"ข้างต้น

น่าเสียดายที่ยังมีบางกรณีที่ไม่ได้เลือกแบบอักษรที่ถูกต้อง ฉันพบว่าการเปลี่ยนเป็น

(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Symbola") nil 'append)

ทำงานได้ดีขึ้น แต่ไม่เสมอไป: การเปลี่ยนขนาดตัวอักษรโดยใช้

(set-face-attribute 'default nil :height some-size)

ทำให้การละเว้นทางเลือกถูกละเว้นเนื่องจากมีการสร้างชุดตัวอักษรใหม่

ทางออกปัจจุบันของฉันคือการทำ

(set-fontset-font fontset 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font fontset 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font fontset 'unicode (font-spec :name "Symbola") nil 'append)

ในแต่ละfontset-listชุดแบบอักษร( ) หลังจากเปลี่ยนขนาดแบบอักษรแล้ว

วิธีที่เหมาะสมในการตั้งค่าตัวเลือกทางเลือกคืออะไร

หมายเหตุ : สำหรับวัตถุประสงค์ในการทดสอบต่อไปนี้เป็นอักขระทางคณิตศาสตร์ไม่กี่ตัว: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
การอ้างอิง : คู่มือ Emacs บนแบบอักษรและการปรับเปลี่ยนแบบอักษร


2
ฉันมีความคิดที่ไม่สามารถแก้ปัญหาของคุณได้จริง ๆ แต่ถ้าคุณต้องการสัญลักษณ์ทางคณิตศาสตร์และอื่น ๆ สำหรับทฤษฎีและเอกสารทางวิทยาศาสตร์ทำไมคุณไม่ใช้ TeX และ AucTeX มันจะสร้างความยุ่งยากด้วย X (หรือ Mac หรือ Windows ขึ้นอยู่กับสิ่งที่คุณเรียกใช้) ฟอลต์ไม่จำเป็นและให้เอกสารและตัวอย่างที่มีคุณภาพสูง (เช่นสำหรับโหมด org)

ภายหลัง: แบบอักษร UTF-8 ที่มีชุดอักขระเต็มควรลบปัญหาของคุณทั้งหมด (เช่น GNU Unifont) และเมื่อมีตัวเลือกระหว่างแบบอักษรแฟนซีและร่ายมนตร์ที่ต้องการฉันจะเลือกแบบหลัง

2
@kuli คุณมองโลกในแง่ร้ายเกินไป ดู github.com/cpitclaudel/monospacifier
Ista

ฉันจำไม่ได้ว่าอ่านที่ไหน แต่ฉันเชื่อว่า Eli Zaretskii ตอบคำถามคล้าย ๆ กัน คุณกำลังคิดfontsetในทางที่ผิด Emacs ไม่ได้ตรวจสอบอักขระทุกตัวที่แสดงว่าแบบอักษรรู้วิธีแสดงหรือไม่ นั่นจะเป็นการคำนวณที่เข้มข้นเกินไป ดังนั้นจึงไม่มีกลไก "ทางเลือก" ต่อการค้นหา คุณควรตั้งค่าแบบอักษรเริ่มต้นของคุณแล้วปรับเปลี่ยนชุดแบบอักษรเริ่มต้นด้วยตนเองในบางช่วงเพื่อแสดงโดยใช้แบบอักษรที่แตกต่างกัน ขั้นตอนนี้เป็นคู่มือหรืออาจunicodeจะช่วยให้แพคเกจ
GenaU

@GenaU ฉันอาจเข้าใจผิด แต่ Emacs ตรวจสอบอยู่ ไม่ใช่ทุกฟอนต์เท่านั้นมีเพียงตัวอักษรที่ปรากฏในชุดฟอนต์
clément

คำตอบ:


0

สำหรับผู้ที่ไม่สามารถอ่านเอกสารของ Emacs ได้

การเลือกแบบอักษร

ก่อนที่ Emacs จะสามารถวาดตัวละครบนจอแสดงผลแบบกราฟิกได้นั้นจะต้องเลือก“ แบบอักษร” สำหรับตัวละครนั้น โดยปกติแล้ว Emacs จะเลือกแบบอักษรโดยอัตโนมัติตามใบหน้าที่กำหนดให้กับตัวละครนั้นโดยเฉพาะคุณลักษณะใบหน้า ': ตระกูล', ': น้ำหนัก', ': เอียง' และ ': ความกว้าง' การเลือกแบบอักษรนั้นขึ้นอยู่กับตัวละครที่จะแสดง แบบอักษรบางแบบสามารถแสดงชุดอักขระที่ จำกัด เท่านั้น หากไม่มีแบบอักษรที่ตรงกับความต้องการ Emacs จะค้นหา“ แบบอักษรที่ใกล้เคียงที่สุด” ตัวแปรในส่วนนี้ควบคุมวิธีที่ Emac ทำให้การเลือกนี้

face-font-family-alternatives


describe-characterโดยเฉพาะการทดสอบโดยใช้ตัวอักษรในคำถามที่ตรวจสอบตัวอักษรที่มี ตัวละครแต่ละตัวใช้หนึ่งในฟอนต์ฟรี: Consolas, FreeMono, Symbola การตั้งค่าแบบอักษรกรอบ Consola set-frame-fontโดย

จนถึงตอนนี้ 14 upvotes, downvote, และวิทยาศาสตร์ EU ยังไม่สามารถแก้ไขปัญหานี้ได้


ขอบคุณ! คุณคิดว่าการโพสต์ข้อความนี้เป็นการตอบกลับความคิดเห็นของฉันด้านบนใช่หรือไม่ว่าเป็นคำตอบที่แยกต่างหาก
Clément

1
(ฉันควรชี้แจงว่าฉันทดสอบด้วยเช่นกันใน Emacs 26 และดูเหมือนว่าคำตอบของคุณจะไม่ทำงาน: ฉันใช้(setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))แล้วM-x set-frame-font RET Consolas RETตัวละครก็ใช้สัญลักษณ์ Consolas และ Segoe UI ผสมกัน)
Clément

ฉันทดสอบกับ Manjaro Arch Linux ตามลำดับนี้: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢; ฉันไม่ได้ทดสอบว่าจะเกิดอะไรขึ้นหากไม่ได้ติดตั้งแบบอักษร มันสามารถเป็นไปได้ เนื่องจากชื่อแบบอักษรถูกป้อนด้วยตนเองไม่ใช่จากรายการชื่อที่มีอยู่
Alexandr Karbivnichiy

emacs -Qผมทดสอบด้วยตัวอักษรทั้งหมดในรายการที่ติดตั้งใน
Clément

@ Clément emacs -Q ตัวเลือก impiles มาก: - no-x-resources บางทีปัญหาอยู่ในนั้น สำหรับฉัน Consolas เริ่มจากถ่านนี้เท่านั้น: "×" และสองอย่างแรก "ℕ𝓟" FreeMono และ Symbola
Alexandr Karbivnichiy

-1

M-x customize-variable face-font-family-alternatives

มีรายการที่มีลักษณะดังนี้:

(("Monospace" "courier" "fixed")
 ("Monospace Serif" "Courier 10 Pitch" "Consolas" "Courier Std" "FreeMono" "courier" "fixed")
 ("courier" "CMU Typewriter Text" "fixed")
 ("Sans Serif" "helv" "helvetica" "arial" "fixed")
 ("helv" "helvetica" "arial" "fixed"))

เพิ่มลำดับของคุณในcustomizeส่วนต่อประสานบัฟเฟอร์:

("Consolas" "FreeMono" "Symbola")

หากระบุตระกูลที่ระบุ แต่ไม่มีอยู่ตัวแปรนี้จะระบุตระกูลฟอนต์ทางเลือกที่จะลอง แต่ละองค์ประกอบควรมีแบบฟอร์มนี้:

 (FAMILY ALTERNATE-FAMILIES...)

หากระบุครอบครัว แต่ไม่พร้อมใช้งาน Emacs จะลองตระกูลอื่น ๆ ที่ให้ไว้ในครอบครัวแบบทางเลือกทีละครอบครัวจนกว่าจะพบครอบครัวที่มีอยู่จริง

วิธีใช้face-font-family-alternatives:

ในบัฟเฟอร์ของคุณ: M-x set-frame-font

เลือกแบบอักษรจากรายการ แบบอักษรที่เลือกจะกำหนดลำดับการค้นหาแบบอักษรที่face-font-family-alternativesจะใช้ ในตัวอย่างนี้Consolas

วิธีตรวจสอบตระกูลตัวอักษรที่ใช้แสดงอักขระ: M-x describe-char


ขอบคุณ! แต่ฉันไม่คิดว่านี่จะตอบคำถามได้ AFAICT การกำหนดค่าที่คุณแนะนำจะใช้ FreeMono หากแบบอักษร Consolas ไม่พร้อมใช้งาน แต่จะไม่ใช้ทางเลือก FreeMono สำหรับตัวอักษรที่ Consolas ไม่รองรับ
Clément
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.