Dlaczego powinienem używać znaków specjalnych Unicode do cyfr rzymskich?

43

Oto odpowiedź na pytanie, które pojawiło się w komentarzach do tego pytania na temat znaków Unicode dla cyfr rzymskich:

Dlaczego jest to konieczne lub preferowane w stosunku do zwykłego sposobu pisania ai, ai-ai, ai-ai-ai, vee-ai itp.?

Na początek w bloku formularzy liczbowych Unicode istnieją punkty kodowe dla cyfr rzymskich, które na pierwszy rzut oka są bardzo podobne do standardowych dużych liter łacińskich lub ich kombinacji (U + 2160 - U + 217F). Na przykład U + 2165 (cyfra rzymska szósta) wygląda bardzo podobnie do VI (łacińska wielka litera V i łacińska wielka litera I).

Powstaje zatem pytanie, dlaczego nie należy używać tych drugich do reprezentowania tych cyfr i np. Wpisywania Louis VIIzamiast Louis Ⅶ. Oczywiście brak znaków specjalnych pozwala uniknąć problemów ze zgodnością czcionek, które ich nie obsługują. Ale nawet jeśli wiem, że tekst będzie renderowany czcionką obsługującą te znaki, dlaczego miałbym zawracać sobie tym głowę?

Wrzlprmft
źródło

Odpowiedzi:

56

W wielu czcionkach rzeczywiście nie ma prawie żadnej różnicy między używaniem znaków Unicode dla cyfr rzymskich a po prostu tworzeniem ich ze zwykłych liter łacińskich. Na przykład następujące przedstawienie Louis VII(u góry) i Louis Ⅶ(u dołu przy użyciu współrzędnych kodowych dla cyfr rzymskich) renderowane za pomocą FreeSans:

wprowadź opis zdjęcia tutaj

Poza niewielką różnicą w odstępach, która prawdopodobnie nie była zamierzona, dane wyjściowe są identyczne.

Oto ten sam tekst renderowany w DejaVu Sans:

wprowadź opis zdjęcia tutaj

Podczas gdy postacie nadal wyglądają identycznie, istnieje znaczna różnica w odstępach. Może to być kwestia gustu, czy ta ostatnia jest lepsza od cyfr rzymskich, ale z pewnością nie byłby dobrym wyborem kerningu dla zwykłych wielkich liter.

Linux Libertine idzie o krok dalej:

wprowadź opis zdjęcia tutaj

W tym przypadku cyfry rzymskie są nieco mniejsze niż duże litery, co odpowiada cyfrom arabskim czcionki. Co najważniejsze, są one połączone, odtwarzając cechę często występującą w ręcznie narysowanych cyfrach rzymskich.

Teraz niektórzy nadal mogą argumentować, że nie ma żadnych ulepszeń w powyższym lub że nie są warte wysiłku. Oto przypadek, w którym nieużywanie znaków Unicode przyniesie okropne wyniki:

wprowadź opis zdjęcia tutaj

(Zwróć uwagę, że niewielki rozmiar cyfr odzwierciedla niektóre historyczne składy.) Coś podobnego może wystąpić w przypadku czcionek skryptowych lub kaligraficznych.

Bez określonych punktów Unicode dla cyfr rzymskich rozwiązanie tego drugiego problemu byłoby możliwe tylko przy:

  • Korzystanie ze złożonej funkcji OpenType (lub podobnej), która próbuje wykryć, czy sekwencja wielkich liter jest cyfrą rzymską. To nieuchronnie spowoduje problemy ze słowami, które również byłyby prawidłową cyfrą rzymską.

  • Za pomocą prostej funkcji OpenType, którą należy ręcznie aktywować dla każdej cyfry rzymskiej.

  • Korzystanie z obszaru prywatnego użytku Unicode. Problemy ze zgodnością prawdopodobnie pojawią się nawet przy przełączaniu między dwiema czcionkami obsługującymi cyfry rzymskie.

Z punktu widzenia Unicode ogromna różnica semantyczna między dużymi literami łacińskimi a cyframi rzymskimi powinna już wystarczyć do oddzielnego kodowania cyfr rzymskich.

Wrzlprmft
źródło
W jakim stopniu cyfry rzymskie stanowią jakikolwiek problem inny niż akronimy i inicjały, z których oba byłyby właściwie obsługiwane, gdyby czcionka zawierała zestaw małych liter? Spodziewałbym się, że scenariusze, w których „VII” powinien być wyświetlany dużymi literami, a nie małymi literami, są takie same, jak scenariusze, w których „NATO” lub „PM” powinny być wyświetlane podobnie. Chociaż być może fajnie jest mieć sposób łączenia poprzeczek za pomocą „VII”, ale nie „VIP”, nie jestem pewien, czy poprzeczki powinny być połączone, gdy w tekście używane są cyfry .
supercat
Bardzo dobrze dodał trochę twoją rozszerzoną semantykę, ale jeśli chcesz uwzględnić w swojej odpowiedzi, możesz to zrobić i źle usunąć moje.
joojaa,
@ supercat: Nie jestem do końca pewien, do czego zmierzasz, ale z mojego doświadczenia wynika, że ​​we współczesnej typografii cyfry rzymskie zawsze mają wielkość kapitału, podczas gdy w językach innych niż niemiecki możliwe jest stosowanie małych liter do skrótów wielkimi literami. W typografii blacklettera używałbyś rzymskiej czcionki do skrótów wielkimi literami i cyfr rzymskich, ale czasami używałbyś mniejszych cyfr rzymskich (jak wyżej), a przy niektórych wyjątkowych okazjach używałbyś wielkich liter.
Wrzlprmft
@Wrzlprmft: Spodziewałbym się, że cyfry rzymskie będą drukowane w tym samym rozmiarze, co „PM” lub „NATO”; w niektórych kontekstach takie rzeczy są drukowane jako wielkie litery, ale w innych sprawia to, że wyróżniają się zbyt mocno. Gdyby czcionka zawierała zestaw wielkich liter, których projekt, w stosunku do reszty czcionki, był odpowiedni dla „PM” lub „NATO”, pomyślałbym, że byłby również odpowiedni dla cyfr rzymskich.
supercat,
@ superupat: W przypadku zwykłej czcionki rzymskiej tak (choć można się spierać, czy byłoby to najlepiej zrobić). Ale co z czcionkami biuletynu i skryptów? Co z tego wyciągniesz?
Wrzlprmft
27

TL; DR Konsorcjum Unicode zaleca, w miarę możliwości, stosowanie litery łacińskiej, a nie cyfr, które zostały uwzględnione w celu zapewnienia zgodności z typografią wschodnioazjatycką.

Pełna historia: (z uzasadnieniem powyższego stwierdzenia)

O ile nie robisz typografii wschodnioazjatyckiej, używanie (niearchaicznych) cyfr rzymskich z Unicode (U + 2160 - U + 217F) jest włamaniem.

Te znaki zostały uwzględnione w celu zapewnienia zgodności ze standardami wschodnioazjatyckimi sprzed Unicode. Znaki te pozostają pionowe tam, gdzie tekst wschodnioazjatycki jest składany od góry do dołu, podczas gdy zwykle tekst w alfabecie łacińskim (np. Imiona) jest pisany w tym kontekście bokiem.

Aby zacytować ostatnią wersję standardu Unicode (v 7.0, rozdz. 22, s. 20) :

Cyfry rzymskie Dla większości celów lepiej jest skomponować cyfry rzymskie z sekwencji odpowiednich liter łacińskich. Jednak wielkie i małe litery cyfr rzymskich do 12, a także L, C, D i M, zostały zakodowane w bloku Formularzy liczb (U + 2150..U + 218F) w celu zapewnienia zgodności ze standardami wschodnioazjatyckimi. W przeciwieństwie do sekwencji liter łacińskich, symbole te pozostają pionowo w układzie pionowym. Ponadto w niektórych lokalizacjach kompaktowe formaty daty używają cyfr rzymskich dla danego miesiąca, ale mogą oczekiwać użycia pojedynczego znaku.

Teoretycznie więc rozróżnienie między cyframi rzymskimi i literami jest kwestią tekstu sformatowanego, takiego jak kursywa, zmiana czcionki lub opcjonalne ligatury. To powiedziawszy, jak pokazuje @Wrzlprmft, niektóre czcionki używają go, aby uniknąć zmiany czcionki dla każdej cyfry rzymskiej, zachowując dobrą typografię.

Istnienie znaku dla XII, a nie dla XIII, oznacza, że ​​istnieje kilka różnych kodowań tej samej cyfry, co prowadzi do trudności w wyszukiwaniu tekstu: jeśli piszesz o Ludwiku XII i Ludwiku XIII, prawdopodobnie napiszesz XIII jako X + I + Ja + ja, ale czy napiszesz XII jako pojedynczy znak? Czy jako X + I + I, aby mieć spójny obraz z XIII? Nie ma jednej dobrej odpowiedzi na to pytanie podczas korzystania z cyfr rzymskich i dlatego konsorcjum Unicode zaleca używanie liter łacińskich, jeśli to możliwe, a nie cyfr.

Edit: dodał TL; DR twierdzenie na początku

Frédéric Grosshans
źródło
9
konsorcjum Unicode zaleca, aby w miarę możliwości używać liter łacińskich, a nie cyfr”. Powinno to być znacznie bardziej widoczne niż obecnie.
Ixrec,
1
Z punktu widzenia semantyki Unicode jest to zdecydowanie najlepsza odpowiedź tutaj. Mogą istnieć praktyczne powody, dla których niektóre czcionki preferują cyfry rzymskie, i to oczywiście jest niezależna kwestia projektowania graficznego, ale semantycznie zawsze są one błędne.
R ..
13

Z perspektywy tego, jak to wygląda, może nie być dużej różnicy. Więc jeśli publikujesz tylko materiały drukowane, to nie ma różnicy, z wyjątkiem niektórych czcionek, co Wrzlprmft wskazuje w swojej doskonałej odpowiedzi.

Semantyka jest ważna

Różnica semantyczna jest ogromna. Używając cyfr rzymskich, wyraźnie widać, że mówisz o cyfrze 5 zamiast litery V. Jasne, że wyglądają tak samo, ale oznaczają inaczej. Oznaczałoby to, że wyszukiwarka może mieć większą szansę na znalezienie „XX znak V” podczas wyszukiwania „XX wersja 5”.

W rzeczywistości przyczyną niektórych problemów jest to, że nie osadzamy informacji semantycznych. Świat byłby rzeczywiście lepszym miejscem, gdybyśmy to zrobili. Zatem użycie właściwego znaczenia semantycznego jest mniej więcej takie samo, jak użycie stylów w edytorze tekstu w porównaniu ze stylem ręcznie. Różnica po ludzku jest niewielka, ale duża automatyzacja.

Czcionki powinny tworzyć różne cyfry rzymskie

Twórcy czcionek tak naprawdę ich nie używają, ponieważ nie są bardzo często używane. Ale używając ich, możesz uzyskać tablice z cyframi rzymskimi na literach, które odróżniają je od tekstu. Tak więc ta funkcja nie jest w pełni wykorzystywana, ponieważ jest rzadka. Czcionki tak naprawdę nie implementują wszystkiego, podobnie jak nie powinny. Korzystając z nich, skorzystasz, jeśli są obecne.

Wniosek

To z pewnością problem z kurczakiem i jajkiem. Jeśli ludzie nie używają zakresów znaków specjalnych, nie zostaną wprowadzone żadne specjalne ograniczenia dla tych zakresów. Dlatego czcionka nie obsługuje specjalnie zaprojektowanych literałów rzymskich, ponieważ byłoby to marnowaniem wysiłku na funkcje, których nikt nie używa. To samo dotyczy wyszukiwania: jeśli nikt nie używa literałów rzymskich, żadna wyszukiwarka nie znajdzie literałów rzymskich i semantyka zostanie utracona. Semantyka cierpi z powodu nieprzyjęcia odpowiedniego znaczenia semantycznego. To samo z pewnością dotyczy również szerszego zakresu znaków Unicode.

Jeśli chodzi o złożoność wprowadzania danych, tak, większość użytkowników nie może pisać znaków rozszerzonych, ale nie jest to wymówka dla znawcy, aby pomijać takie znaki, jeśli ma to sens. Jeśli nikt nie poprawi sytuacji, nigdy nie nastąpi postęp. Piekło nawet słowo ma tryby pisania alfabetu przez wpisanie / alpha. Tak naprawdę nie ma powodu, dla którego nie byłoby łatwego sposobu oznaczania cyfr, a nawet automatycznego sugerowania ich jako takich. Ponownie, jeśli nikt tego nie zrobi, to nigdy nie uzyska szerszej adopcji.

joojaa
źródło
W rzeczywistości wyszukiwarka zwraca znacznie lepsze wyniki przy wyszukiwaniu „Louis VII” niż „Louis Ⅶ”, prawdopodobnie dlatego, że w rzeczywistości większość treści jest generowana za pomocą narzędzi, które nie pozwalają na tak duże rozróżnienie semantyczne.
xpereta,
1
@xpereta tak, ponieważ ludzie nie dbają o semantykę. Jednak jeśli tak, to z łatwością dopasujesz również 7 do cyfr. Znaczna część nieskuteczności na świecie polega na tym, że ludzie nie uważają za ważne wyraźnego wskazania semantycznej różnicy rzeczy, kiedy mogą to łatwo zrobić. Komputer naprawdę nie zna różnicy, nawet jeśli człowiek by to
zrobił
1
@joojaa W tym przypadku prawdopodobnie ma to więcej wspólnego z faktem, że VII jest rzędem wielkości łatwiejszym do wpisania niż Ⅶ. Nie jestem pewien, czy to się kiedykolwiek zmieni.
Ixrec,
Chciałbym rozwinąć nieco ostatni akapit, aby zakończyć twój wniosek, że szersze użycie takich znaków specjalnych zachęciłoby do szerszej implementacji czcionek.
Nathan Tuggy,
2
Zdecydowanie kwestionuję tę odpowiedź dotyczącą semantyki. Znaki cyfr rzymskich Unicode są <compat>równoważne odpowiednim sekwencjom liter łacińskich, co zdecydowanie sugeruje, że jedynym powodem, dla którego są one w Unicode, jest kompatybilność w obie strony z niektórymi starszymi (prawdopodobnie CJK) zestawami znaków, które je miały. Zasadniczo takich znaków nie należy używać, z wyjątkiem wiernych dokumentów w obie strony utworzonych w starszych kodowaniach.
R ..