ฉันจะสร้างแบบอักษร monospaced ได้อย่างไร


14

สมมติว่าผมมีตัวอักษรในรูปแบบที่เป็นที่นิยมอย่างสุภาพ (ก.ttf, .otfฯลฯ ) และผมก็มีสิทธิตามกฎหมายที่จะแก้ไขได้ มันเป็นฟอนต์ปกติที่มีตัวอักษรแตกต่างกัน (glyphs?) ที่มีความกว้างและระยะห่างต่างกัน ฉันจะเปลี่ยนลักษณะตัวอักษรที่กล่าวมาเป็นแบบตัวอักษรโมโนโพสต์ได้อย่างไร (เช่นตัวละครทุกตัวมีขนาดเท่ากัน ฯลฯ )

ถ้าเป็นไปได้มีเครื่องมืออัตโนมัติที่สามารถคาดเดาได้บ้างไหม? (ผลลัพธ์ไม่จำเป็นต้องสมบูรณ์แบบ ) แบบอักษรอาจมีขนาดใหญ่ (อักขระจำนวนมาก) และการแก้ไขอาจน่าเบื่อ

ข้อเสนอแนะเกี่ยวกับปัญหาได้รับการชื่นชมมาก! :)


Disclaimer: ขออภัยหากนี้ถือว่าเป็นHOWTO ง่ายแต่ Google มีข้อมูลน้อยมากเกี่ยวกับเรื่องนี้และสำหรับโปรแกรมเมอร์ที่ไม่ได้จัดการกับกราฟิกหรือแบบอักษรมากก็แน่ใจว่าไม่ง่าย ขออภัยด้วยหากคำศัพท์ของฉันปิด ... : P


ซอฟต์แวร์ฟอนต์ใดที่คุณใช้ถ้ามี FontLab? FontForge?
thomasrutter

คำตอบ:


12

หากคุณยังไม่มีซอฟต์แวร์แก้ไขแบบอักษรใด ๆ ข่าวดีก็คือ Fontforge ให้บริการฟรีและโอเพนซอร์ส ข่าวร้ายก็คือมันมีช่วงการเรียนรู้ที่ค่อนข้างสูงและส่วนต่อประสานผู้ใช้ที่ค่อนข้างแปลก

โดยทั่วไปสำหรับตัวอักษรที่จะพิจารณาว่าเป็น monospace สัญลักษณ์ทุกอันจะต้องมีความกว้างเท่ากันจนถึงจำนวนหน่วยที่แน่นอน ซึ่งรวมถึงร่ายมนตร์ที่ปกติแล้วควรจะเป็นความกว้างเป็นศูนย์หรือความกว้างที่แน่นอน (เช่นช่องว่าง em, ขีดกลาง em ฯลฯ )

ดูรายการคำถามที่พบบ่อย "ฉันจะทำเครื่องหมายแบบอักษรเป็นแบบ monospaced ได้อย่างไร"

หากต้องการแก้ไขความกว้างของสัญลักษณ์ทั้งหมดในคราวเดียวคุณสามารถไปที่ "Metrics" -> "Set Width" บนเมนู แต่ฉันไม่คิดว่ามันจะใช้ได้กับตัวละครทุกตัว คุณอาจต้องแก้ไขอักขระทั้งหมดเช่น 'W', 'M', '@' ฯลฯ ด้วยตนเองเพื่อไม่ให้ทับซ้อนกัน และการรวม diacriticals (เน้นเสียงที่ตั้งใจจะ "รวม" กับตัวอักษรในเวลาแสดงผล) อาจทำให้ตำแหน่งทั้งหมดของพวกเขาสับสน (ซึ่งเป็นการยากที่จะทดสอบว่าคุณเป็นคนอเมริกัน / อังกฤษและคุณแทบจะไม่เคยใช้เลย)

คนที่รู้วิธีสร้างและแก้ไขแบบอักษรจะสามารถทำงานนี้ได้ แต่มันจะไม่ตรงไปตรงมา


ฉันมีคำถามเดียวกันเกี่ยวกับการแปลงแบบอักษรเป็นแบบ monospace ฉันเข้าใจว่าการขู่ว่าจะไม่ดี สิ่งที่ฉันกำลังมองหาจริงๆคือเครื่องมือที่จะ 1) ค้นหา glyph ที่กว้างที่สุด 2) จากนั้นแทนที่จะยืด glyphs ออกไปฉันอยากให้พวกมันอยู่ตรงกลางในสนามที่มีความกว้าง ไม่มีเครื่องมือที่จะทำเช่นนั้น?
NJRandy

@thomasrutter ในกรณี gnu unifont? (ตัวอักษรบิตแมปที่สัญลักษณ์เป็น 8 หรือ 16 16)
2284570

คำตอบที่ดี การแก้ไขโดยตรงจาก UI ของ FontForge นั้นใช้งานไม่ได้สำหรับฉัน (มันยังคงค้างอยู่นานหลายชั่วโมงก่อนที่ฉันจะฆ่ามัน) ฉันใช้การผูก Python แทน เป้าหมายของฉันคือใช้ฟอนต์ monospacified เป็นทางเลือกดังนั้นการจัดช่องไฟและการตกเลือดที่ไม่ดีจึงไม่ใช่ปัญหาใหญ่ ฉันให้รายละเอียดทั้งหมดนี้ในคำตอบแยกต่างหาก
Clément

1
เมื่อฉันเรียนรู้ครั้งแรกฉันทำแบบอักษรขาวดำจำนวนมากโดยการแก้ไขแบบอักษรฟรี เช่นเดียวกับเครื่องมืออัตโนมัติใด ๆ ควรเป็นจุดเริ่มต้นเท่านั้น: ควรปรับแต่งผลลัพธ์ตามความจำเป็น ผมพบว่าFontographerที่จะมีการเรียนรู้ที่เร็วที่สุด เลือกร่ายมนตร์ไปที่Set Widthใต้Metricsเมนูแบบเลื่อนลง: ตั้งร่ายมนตร์ทั้งหมดเป็นความกว้างเฉลี่ยหนึ่งรายการ (เปลี่ยนในภายหลังถ้าจำเป็น) และสุดท้ายเลือกEqualise Sidebearingsใต้Metricsเมนูเพื่อจัดทำร่ายมนตร์ให้อยู่กึ่งกลางของ em-square แน่นอน: ศึกษาว่าผู้อื่นเอาชนะความยากลำบากโดยเฉพาะอย่างยิ่งในการออกแบบแบบอักษรที่มีความกว้างคงที่ได้อย่างไร
Moscarda

7

thomasrutter ให้คำตอบทางเทคนิคมากกว่า ฉันจะแสดงให้คุณเห็นหลักการของการทำตัวพิมพ์เพื่อกีดกันคุณจากการทำสิ่งที่คุณต้องการจะทำเว้นแต่คุณจะต้อง

ซูมเข้าที่ 'i' และ 'm' ใน Consolas หรือ Courier แล้วตามด้วย Corbel หรือ Verdana ขอให้สังเกตว่าความแตกต่างของตัวอักษรนั้นจะต้องใช้ในการทำงานด้านอวกาศ การแปลงฟอนต์ให้เป็น monospace อย่างเหมาะสมนั้นต้องใช้ความรู้และการทำงานมากมาย ความคิดทั่วไปของการยืดแบบอักษรที่นักออกแบบคนใดทำก็ควรค่ากับเกลือนั่นคือเหตุผลที่ว่าทำไมการเปลี่ยนจากแบบปกติไปเป็นตัวแปรแบบย่อก็คือการวาดสัญลักษณ์ของร่ายมนตร์ทั้งหมด

ดังนั้นดูที่ Consolas vs. Corbel ที่นี่และดูว่าเมื่อซูมเข้ามาคุณสามารถดู 1) ระยะห่างระหว่างตัวอักษร 2) ความหนาของจังหวะที่สอดคล้องกันและ 3) ตัวอักษรแต่ละตัวพอดีกับกล่องอย่างไร ดูที่ใบหน้าแบบโมโนสเปซ (ครั้งแรก) เปรียบเทียบกับใบหน้าแบบเว้นระยะห่าง (วินาที) จากนั้นดูใบหน้าที่สามและสี่เพื่อดูว่าเกิดอะไรขึ้นเมื่อคุณพยายามยืดและเว้นช่องว่างเพื่อทำให้มันเท่ากัน สำหรับครั้งที่สี่ฉันทำ Ms squish เป็น 75% เพื่อเข้าไปในกล่อง แต่ตอนนี้พวกมันดูน่ากลัวกว่า Is จะเห็นได้ชัดเจนเมื่อมีการใช้งาน

การเปรียบเทียบหน้าจออวกาศและอวกาศตัวแปร

ดังนั้นในระยะสั้น: อย่ายุ่งกับ typefaces; พวกมันน่ากลัวกว่าที่คุณคาดไว้มาก!


2
ใช่การยืดร่ายมนตร์แบบกว้างเช่น M นั้นไม่ใช่วิธีแก้ปัญหาที่ดีพอสำหรับเหตุผลที่เบรนแดนชี้ให้เห็น: จังหวะในแนวดิ่งของมันแคบกว่าตัวอักษรอื่น ๆ และดูไม่ดี คุณต้องแก้ไข glyphs ด้วยมือจริง ๆ โดยเลือกจุดควบคุมและเคลื่อนย้ายพวกมัน หวังว่านี่จะช่วยให้ OP มีความคิดว่าการทำสิ่งที่ถูกต้อง (หรืออย่างนี้) ไม่ใช่เรื่องเล็ก โดยเฉพาะอย่างยิ่งถ้าคุณต้องการที่จะมีความครอบคลุมสัญลักษณ์ที่ค่อนข้างดี
thomasrutter

@Brendan ฉันคิดว่ามันควรจะแตกต่างกันสำหรับตัวอักษรบิตแมปที่มีเพียงสองความกว้างของร่ายมนตร์(ในกรณีของฉันร่ายมนตร์กว้าง 8 หรือ 16 พิกเซลกว้าง)
user2284570

+1; มันไม่สมจริงที่จะหวังว่าการแปลอัตโนมัติเต็มรูปแบบ อย่างไรก็ตามในบริบทที่ จำกัด สิ่งที่คุณแสดงในภาพที่สามใช้งานได้ดีจริง ๆ : ถ้าคุณต้องการนำเข้าตัวดำเนินการทางคณิตศาสตร์ที่ขาดหายไปในแบบอักษร monospace คำตอบนั้นจะค่อนข้างโอเค (ฉันโพสต์ซอฟต์แวร์เพื่อทำคำตอบแยกต่างหาก)
Clément

@Brendan ฉันไม่เห็นด้วย ปัญหากับตัวอย่างทั้งหมดของคุณคือคุณไม่ได้ใช้การแปลงแบบเดียวกันกับร่ายมนตร์ทั้งหมด
symbiont

6

ฉันเจอปัญหานี้มากที่พยายามแก้ไขซอร์สโค้ดซึ่งใช้สัญลักษณ์ Unicode อย่างหนัก ในบริบทนั้นซอร์สโค้ดส่วนใหญ่จะแสดงเป็นฟอนต์ monospace หนึ่งตัวและสัญลักษณ์สองสามตัวที่ไม่ครอบคลุมโดยฟอนต์นั้นจบลงด้วยการจัดเรียงที่ไม่ถูกต้อง

แม้ว่าจะเป็นความจริงที่ว่า "การ monospacifying" แบบอักษรเต็มรูปแบบจะให้ผลลัพธ์ที่น่ากลัว (การจัดช่องไฟความกว้างของเส้นขีดและความสมดุลทั่วไปจะถูกทำให้สับสนทั้งหมด) การนำเข้าสัญลักษณ์เพียงไม่กี่ตัวจากแบบอักษรความกว้างแปรเปลี่ยน ภาพเคลื่อนไหวด้านล่างแสดงโดยใช้ Consolas + Symbola เป็นทางเลือกเมื่อเทียบกับการใช้ Consolas + Symbola รุ่นที่มีการทำ monospacified:

ก่อนและหลังการ monospacification

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

  • ตัวอักษรที่กว้างจะมีเลือดออกเล็กน้อยไปยังพื้นที่ใกล้เคียง (แม้ว่าพวกเขาอาจหดเล็กน้อยเพื่อบรรเทาปัญหา)
  • การจัดช่องไฟจะไม่ดี (ไม่มีปัญหามากเกินไปเนื่องจากเป็นเพียงทางเลือก)

ฉันได้เปิดตัวโครงการ GitHubเพื่อจัดการการแปลงแบบอักษรชนิดนี้โดยอัตโนมัติ มันรวมถึงแบบอักษรที่สร้างไว้ล่วงหน้าและรหัสโดยใช้การผูก Python ของ fontforge

ดูคำถาม emacs.seนี้


-1

ในโปรแกรมประมวลผลคำ I: (1) สร้างตาราง; (2) แบ่งออกเป็นคอลัมน์ - หนึ่งคอลัมน์สำหรับแต่ละตัวอักษร (3) จัดตัวอักษรให้อยู่กึ่งกลาง และ (4) แสดงเส้นขอบทั้งหมด, มองไม่เห็นภายในและภายนอก


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