เหตุใดฉันจึงควรใช้อักขระพิเศษของ Unicode สำหรับเลขโรมัน


43

นี่คือการตอบคำถามที่เกิดขึ้นในความคิดเห็นเกี่ยวกับคำถามนี้ในตัวอักษร Unicode สำหรับตัวเลขโรมัน:

เหตุใดจึงมีความจำเป็นหรือต้องการให้ใช้วิธีพิมพ์ ai, ai-ai, ai-ai-ai, ae-ai, vee-ai และอื่น ๆ ตามปกติ

ในการเริ่มต้นจากจุดเริ่มต้นในบล็อกNumber Formsของ Unicode จะมีจุดรหัสสำหรับเลขโรมันที่มองแวบแรกในลักษณะที่คล้ายกับตัวอักษรละตินมาตรฐานหรือการรวมกันของมัน (U + 2160 - U + 217F) ตัวอย่างเช่น U + 2165 (เลขโรมันหก) มีลักษณะเหมือนVI (ตัวพิมพ์ใหญ่ละตินตัว V และตัวพิมพ์ใหญ่ละติน I)

ดังนั้นคำถามที่เกิดขึ้นว่าทำไมไม่ควรใช้หลังเพื่อเป็นตัวแทนของตัวเลขเหล่านั้นและเช่นพิมพ์แทนLouis VII Louis Ⅶเห็นได้ชัดว่าไม่มีการใช้อักขระพิเศษเพื่อหลีกเลี่ยงปัญหาความเข้ากันได้กับแบบอักษรที่ไม่รองรับ แต่แม้ว่าฉันจะรู้ว่าข้อความนั้นจะถูกแสดงด้วยตัวอักษรที่รองรับตัวอักษรเหล่านี้ทำไมฉันถึงต้องใช้มัน?

คำตอบ:


56

ในแบบอักษรจำนวนมากคุณจะพบความแตกต่างระหว่างการใช้ตัวอักษร Unicode กับตัวเลขโรมันและเพียงเขียนจากตัวอักษรละติน stardard ตัวอย่างเช่นการแสดงต่อไปนี้Louis VII(บนสุด) และLouis Ⅶ(ด้านล่างโดยใช้ codepoints สำหรับตัวเลขโรมัน) ที่แสดงผลด้วย FreeSans:

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

นอกเหนือจากความแตกต่างเล็ก ๆ ในระยะห่างซึ่งเป็นไปไม่ได้โดยเจตนาเอาท์พุทเหมือนกัน

นี่คือข้อความเดียวกันที่แสดงผลกับ DejaVu Sans:

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

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

Linux Libertine ก้าวไปอีกขั้นหนึ่ง:

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

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

ตอนนี้บางคนอาจยังยืนยันว่าไม่มีการปรับปรุงใด ๆ ข้างต้นหรือพวกเขาไม่คุ้มค่ากับความพยายาม ดังนั้นนี่เป็นกรณีที่การไม่ใช้อักขระ Unicode จะให้ผลลัพธ์ที่น่ากลัว:

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

(โปรดทราบว่าตัวเลขขนาดเล็กสะท้อนให้เห็นถึงการเรียงพิมพ์ประวัติศาสตร์จริง ๆ ) สิ่งที่คล้ายกันอาจเกิดขึ้นสำหรับแบบอักษรสคริปต์หรือแบบอักษร

หากไม่มีจุด Unicode เฉพาะสำหรับเลขโรมันการแก้ปัญหาที่เกิดขึ้นในภายหลังจะทำได้เฉพาะกับ:

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

  • การใช้คุณสมบัติ OpenType ง่าย ๆ ที่จะต้องเปิดใช้งานด้วยตนเองสำหรับทุกเลขโรมัน

  • การใช้พื้นที่ใช้งานส่วนตัวของ Unicode ปัญหาความเข้ากันได้มีแนวโน้มที่จะเกิดขึ้นแม้ว่าจะสลับระหว่างแบบอักษรสองแบบที่ทั้งสองสนับสนุนตัวเลขโรมัน

จากมุมมองของ Unicode ความแตกต่างทางความหมายอย่างใหญ่หลวงระหว่างตัวอักษรละตินและตัวเลขโรมันควรจะพอเพียงแล้วสำหรับการเข้ารหัสตัวเลขโรมันแบบแยกส่วน


เลขโรมันตัวใดที่ทำให้เกิดปัญหาแตกต่างจากตัวย่อและการเริ่มต้นซึ่งทั้งสองอย่างนี้จะจัดการได้อย่างถูกต้องโดยการใช้แบบอักษรรวมถึงชุดของตัวพิมพ์เล็ก? ฉันคาดว่าสถานการณ์ที่ "VII" ควรแสดงโดยใช้ตัวพิมพ์ใหญ่แทนที่จะเป็น smallcaps เหมือนกับสถานการณ์ที่ "NATO" หรือ "PM" ควรจะแสดงเช่นเดียวกัน ในขณะที่มันอาจจะดีที่จะมีวิธีการเชื่อมต่อกับยอม "ปกเกล้าเจ้าอยู่หัว" แต่ไม่ได้ "วีไอพี" ฉันไม่แน่ใจละควรจะเชื่อมต่อเมื่อมีการใช้ตัวเลขในข้อความ
supercat

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

@supercat: ฉันไม่แน่ใจว่าสิ่งที่คุณมีจุดมุ่งหมาย แต่ในประสบการณ์ของฉันในการพิมพ์ที่ทันสมัยตัวเลขโรมันมักจะมีขนาดเกี่ยวกับเงินทุนในขณะที่ในภาษาอื่นที่ไม่ใช่ภาษาเยอรมันมันเป็นไปได้ที่จะใช้ตัวพิมพ์เล็ก ในการพิมพ์ตัวอักษรสีดำคุณจะใช้แบบอักษรโรมันสำหรับตัวย่อแบบตัวพิมพ์ใหญ่ทั้งหมดและตัวเลขแบบโรมัน แต่บางครั้งคุณอาจใช้ตัวอักษรแบบโรมันตัวเล็ก (ดังด้านบน) และสำหรับโอกาสพิเศษบางอย่างคุณจะต้องใช้ตัวอักษรสีดำทั้งหมด
Wrzlprmft

@Wrzlprmft: ฉันคาดว่าตัวเลขโรมันจะพิมพ์ขนาดเดียวกับ "PM" หรือ "NATO" ในบริบทบางอย่างสิ่งต่าง ๆ เหล่านี้จะถูกพิมพ์เป็นตัวพิมพ์ใหญ่ขนาดเต็ม แต่ในบางส่วนที่ทำให้พวกเขาโดดเด่นมากเกินไป หากตัวอักษรมีชุดของตัวพิมพ์ใหญ่ที่เกี่ยวข้องกับส่วนที่เหลือของแบบอักษรนั้นเหมาะสมสำหรับ "PM" หรือ "นาโต้" ฉันคิดว่ามันจะเหมาะกับตัวเลขโรมันด้วย
supercat

@supercat: สำหรับตัวอักษรโรมันทั่วไปใช่ (แม้ว่าใครจะสามารถยืนยันได้ว่าสิ่งนี้จะเป็นสิ่งที่ดีที่สุดที่จะทำ) แต่เกี่ยวกับตัวอักษรสีดำและแบบอักษรสคริปต์? นอกจากนี้คุณสรุปอะไรจากสิ่งนั้น
Wrzlprmft

27

TL; DRกลุ่ม Unicode ขอแนะนำให้ใช้ตัวอักษรละตินหากเป็นไปได้และไม่ใช่ตัวเลขซึ่งรวมไว้เพื่อความเข้ากันได้กับการพิมพ์ตัวอักษรเอเชียตะวันออก

เรื่องเต็ม: (มีเหตุผลของการยืนยันข้างต้น)

นอกเสียจากว่าคุณกำลังพิมพ์ตัวอักษรเอเชียตะวันออกการใช้ตัวอักษรตัวเลขโรมัน (ไม่ใช่โบราณ) จากยูนิโค้ด (U + 2160 - U + 217F) เป็นแฮ็ค

อักขระเหล่านี้ได้รับการรวมเข้ากันได้กับมาตรฐาน pre-Unicode เอเชียตะวันออก อักขระเหล่านี้ยังคงอยู่ในแนวตั้งโดยที่ข้อความภาษาเอเชียตะวันออกเป็นตัวเรียงพิมพ์จากบนลงล่างในขณะที่โดยปกติข้อความในตัวอักษรละติน (เช่นชื่อ) จะถูกเขียนไปด้านข้างในบริบทนี้

หากต้องการอ้างอิงเวอร์ชันสุดท้ายของมาตรฐาน Unicode (v 7.0, chap. 22, p. 20) :

ตัวเลขโรมัน เพื่อจุดประสงค์ส่วนใหญ่ควรเขียนตัวเลขโรมันจากลำดับของตัวอักษรละตินที่เหมาะสม อย่างไรก็ตามตัวแปรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กของตัวเลขโรมันถึง 12, บวก L, C, D และ M ได้รับการเข้ารหัสในบล็อก Number Forms (U + 2150 .. U + 218F) เพื่อให้เข้ากันได้กับมาตรฐานเอเชียตะวันออก ต่างจากลำดับตัวอักษรละตินสัญลักษณ์เหล่านี้จะอยู่ในแนวตั้ง นอกจากนี้ในบางพื้นที่รูปแบบวันที่กะทัดรัดใช้ตัวเลขโรมันสำหรับเดือน แต่อาจคาดหวังให้ใช้อักขระเดียว

ในทางทฤษฎีแล้วความแตกต่างระหว่างตัวเลขโรมันและตัวอักษรเป็นเรื่องของข้อความที่มีตัวอักษรเช่นตัวเอียงการเปลี่ยนแบบอักษรหรือตัวเลือกเสริม ดังที่ได้กล่าวไว้ว่า @ @ Wrzlprmft แสดงให้เห็นว่าตัวอักษรบางตัวใช้เพื่อหลีกเลี่ยงการเปลี่ยนแบบอักษรสำหรับตัวเลขโรมันแต่ละตัวในขณะที่พิมพ์ตัวอักษรได้ดี

การมีอยู่ของตัวละครสำหรับ XII และไม่ใช่สำหรับ XIII หมายความว่ามีการเข้ารหัสที่แตกต่างกันหลายประการซึ่งทำให้เกิดปัญหาในการค้นหาข้อความ: หากคุณเขียนเกี่ยวกับ Louis XII และ Louis XIII คุณอาจจะเขียน XIII เป็น X + I + ฉัน + ฉัน แต่คุณจะเขียน XII เป็นอักขระตัวเดียวหรือไม่ หรือว่า X + I + I ที่จะมีจอแสดงผลที่สอดคล้องกับ XIII? ไม่มีคำตอบที่ดีสำหรับคำถามนี้ในขณะที่ใช้ตัวอักษรตัวเลขโรมันและนั่นคือเหตุผลที่กลุ่ม Unicode แนะนำให้ใช้ตัวอักษรละตินเมื่อเป็นไปได้และไม่ใช่ตัวเลข

แก้ไข: เพิ่มTL; DR การยืนยันในจุดเริ่มต้น


9
" กลุ่ม Unicodeขอแนะนำให้ใช้ตัวอักษรละตินเมื่อทำได้และไม่ใช่ตัวเลข" นี่ควรจะโดดเด่นกว่าปัจจุบันมาก
Ixrec

1
จากมุมมองความหมายของ Unicode นี่คือคำตอบที่ดีที่สุดที่นี่ อาจมีเหตุผลในทางปฏิบัติเกี่ยวกับแบบอักษรบางแบบที่จะชอบตัวอักษรตัวเลขโรมันและแน่นอนว่าการพิจารณาการออกแบบกราฟิกที่เป็นอิสระ แต่ความหมายพวกมันผิดเสมอ
..

13

จากมุมมองของวิธีการมองว่าอาจมีความแตกต่างไม่มาก ดังนั้นถ้าคุณตีพิมพ์เฉพาะสื่อสิ่งพิมพ์ก็ไม่มีความแตกต่างยกเว้นในบางฟอนต์ที่ Wrzlprmft ชี้ให้เห็นในคำตอบที่ยอดเยี่ยมของเขา

ความหมายมีความสำคัญ

ความแตกต่างทางความหมายมีขนาดใหญ่มาก การใช้ตัวเลขโรมันทำให้ชัดเจนว่าคุณกำลังพูดถึงหมายเลข 5 แทนที่จะเป็นตัวอักษร V แน่นอนว่าพวกเขาดูเหมือนกัน แต่พวกเขาก็มีความหมายที่แตกต่างกัน นั่นหมายความว่าเครื่องมือค้นหาอาจมีโอกาสสูงกว่าในการค้นหา "XX mark V" เมื่อคุณค้นหา "XX เวอร์ชัน 5"

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

แบบอักษรควรทำให้ตัวเลขโรมันแตกต่างกัน

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

ข้อสรุป

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

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


จริงๆแล้วเสิร์ชเอ็นจิ้นจะให้ผลลัพธ์ที่ดีกว่าเมื่อค้นหา "Louis VII" แทนที่จะเป็น "Louis Ⅶ" เนื่องจากในความเป็นจริงเนื้อหาส่วนใหญ่ถูกสร้างขึ้นด้วยเครื่องมือที่ไม่อนุญาตให้แยกความหมายเชิงความหมายเช่นนั้น
xpereta

1
@xpereta ใช่เพราะคนไม่สนใจความหมาย อย่างไรก็ตามหากพวกเขาต้องการคุณก็จะจับคู่ 7 กับตัวเลขได้อย่างง่ายดาย ความไม่มีประสิทธิภาพในโลกส่วนใหญ่เป็นเพราะคนไม่คิดว่าสำคัญที่จะชี้ให้เห็นความแตกต่างของความหมายของสิ่งต่าง ๆ อย่างชัดเจนเมื่อพวกเขาสามารถทำได้อย่างง่ายดาย คอมพิวเตอร์ไม่รู้ถึงความแตกต่างอย่างแท้จริงแม้ว่ามนุษย์จะต้องการ
joojaa

1
@joojaa ในกรณีนี้มันอาจจะเกี่ยวข้องกับข้อเท็จจริงที่ว่า VII เป็นคำสั่งที่มีขนาดใหญ่กว่าพิมพ์ง่ายกว่า than ฉันไม่แน่ใจว่าจะมีการเปลี่ยนแปลงหรือไม่
Ixrec

ฉันจะขยายในย่อหน้าสุดท้ายเล็กน้อยเพื่อจบข้อสรุปของคุณว่าการใช้อักขระพิเศษเช่นนี้จะช่วยกระตุ้นการใช้แบบอักษรให้กว้างขึ้น
นาธาน Tuggy

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