Police de type Courier New avec prise en charge Unicode?

8

Je suis programmeur et j'ai vraiment l'habitude de la police Courier New. Je suis assez pointilleux à ce sujet - je trouve d'autres polices (y compris d'autres polices monospace) laides en comparaison.

Cependant, je dois maintenant travailler sur du code qui inclut des chaînes Unicode, et Courier New ne prend pas totalement en charge Unicode.

Quelqu'un pourrait-il recommander une police (monospace) très similaire à Courier New, mais prenant en charge Unicode?

HighCommander4
la source
3
Courier New a une couverture Unicode bien meilleure que la plupart des polices. Il serait utile que vous nous disiez exactement de quels caractères / langues / scripts vous avez besoin d'une couverture.
thomasrutter
@thomasrutter: J'ai besoin d'une couverture des symboles mathématiques et logiques.
HighCommander4

Réponses:

11

Peu ou pas de polices ont "un support complet pour Unicode". Unicode 6.0 a 109 449 points de code. Du point de vue de la conception, il est assez coûteux de créer manuellement chacun de ces glyphes alors que la plupart des gens n'en utiliseront qu'une petite fraction, sans parler du point de vue de la taille du fichier.

Courier New est en fait parmi les polices avec un support Unicode relativement bon à 3248 glyphes (en comparaison, Lucida Sans Unicode n'en a que 1776).

Les polices MingLiU / PMingLiU prennent également en charge une très large gamme de points de code, mais c'est parce que ce sont des polices CKJ (chinois, coréen, japonais), et la plupart des points de code pris en charge proviennent des blocs CKJ. Donc, à moins que vous n'ayez besoin d'une police CKJ, ils ne sont pas très utiles. Et même alors, ils sont divisés en ~ 6 polices différentes couvrant différents blocs de code avec 30 ~ 40k points de code chacun.

Pour la prise en charge des langues à usage général, Arial Unicode MS est le meilleur que je connaisse. Il a un support presque complet sur 64 blocs de code différents, ce qui couvre 50 377 points de code.

Au-delà de cela, il n'y a que la police SIL Unicode BMP Fallback , qui est une police de débogage. Il couvre tous les points de code Unicode 5.1, mais chaque glyphe n'est qu'une boîte rectangulaire contenant le code hexadécimal pour ce point de code. Et la plupart des systèmes d'exploitation sont livrés avec cette police et l'afficheront lorsqu'une police Unicode n'a pas de glyphe pour un caractère particulier.

Je veux dire, il est possible qu'il y ait un typographe ou une fonderie fou qui a créé une police avec des glyphes pour tous les points de code Unicode 5.1 ou 6.0, mais ce serait probablement vraiment, vraiment cher.

La plupart des gens préfèrent simplement avoir des polices couvrant des blocs de langue spécifiques et utiliser plusieurs polices pour fournir une prise en charge multilingue complète. D'autant plus que les différentes familles de langues ont des styles typographiques intrinsèquement différents, de sorte que les glyphes finiraient de toute façon très différents.

Edit: Comme l'a souligné M. Lister, aucune police ne peut actuellement prendre en charge le jeu de caractères Unicode complet, car chaque police ne peut contenir que 65536 glyphes max. Vous pourriez être en mesure de dépasser cette limite avec TruTypeCollections, mais ce seraient toujours des polices distinctes, juste dans un seul fichier.

Lèse majesté
la source
1
Merci pour une réponse détaillée. Je ne savais pas qu'Unicode était assez gros. Les caractères Unicode dans mon code sont des symboles mathématiques et logiques - connaissez-vous une police monospace d'aspect décent avec un support pour ceux-ci?
HighCommander4
4
@ HighCommander4: Ensuite, tout ce dont vous avez vraiment besoin est le bloc Symboles mathématiques et les blocs Opérateurs mathématiques. Vous pouvez voir la liste des blocs Unicode ici . En cliquant sur chacun d'eux, vous pouvez trouver une liste de polices communes qui prennent en charge chaque bloc. Ou cliquez simplement sur l'une des polices, puis recherchez sa liste de blocs pris en charge, par exemple celle-ci pour Code2000 , qui affiche tous les blocs qu'elle prend en charge et par quel pourcentage.
Lèse majesté
2
Je pense avoir lu quelque part que 65536 glyphes est le maximum que tout fichier de police puisse contenir, donc vous ne trouverez jamais une police avec un support Unicode "complet".
M. Lister
1
@ Mr Lister: c'est probablement la limitation de certains éditeurs de polices , mais les points de code Unicode vont jusqu'à E0FFF (ou 10FFFF y compris la zone d'utilisation privée). Donc, si une police doit pouvoir faire référence à ces points de code haut de gamme, elle devrait pouvoir faire référence à tout ce qui se trouve en dessous.
Lèse majesté
2
@ Lèsemajesté Non, ce n'est pas vraiment vrai. Il n'est pas nécessaire que les polices contiennent tous les caractères jusqu'à celui avec l'index Unicode le plus élevé qu'ils possèdent. Sinon, chaque police compatible Windows-1252 devrait contenir plus de 8400 caractères!
M. Lister
3

Essayez le Mono gratuit de GNU Free Font . C'est, en fait, jusqu'à présent la seule police monospace que j'ai trouvée qui soit à la fois lisible et relativement complète en termes de couverture unicode.

Encore plus idéal pour votre cas particulier, il est en fait basé sur Courier.

emacsomancer
la source
2

Vous pouvez toujours utiliser Courier New comme police principale et revenir à une autre police avec une palette de caractères plus large (comme DejaVu Sans Mono ou peut-être Everson Mono) pour les symboles manquants.

C'est ce que fait votre navigateur si vous définissez Courier New comme police à espacement fixe préférée, puis lui demandez d'afficher quelque chose comme ∀x: ∃y: x ∊ y. (Eh bien, sauf pour le fait que ce site spécifie déjà sa propre liste de polices monospace préférées, avec Courier New assez loin dans la liste, donc vous ne verrez probablement pas xet yau - dessus dans Courier New, sauf si vous désactivez ou remplacez également le style SE feuille.)

Bien sûr, cela ne sera pas toujours trop beau, mais dans votre cas, vous dites que les caractères supplémentaires dont vous avez besoin sont principalement des symboles mathématiques. De toute façon, ceux-ci sont très différents des lettres latines normales, de sorte que le décalage entre les différentes polices peut ne pas être aussi apparent qu'il pourrait l'être autrement, surtout si vous choisissez soigneusement la police de secours.

Ilmari Karonen
la source
Intéressant ... Je ne savais pas que les navigateurs faisaient ça. Est-ce un comportement universel sur tous les navigateurs?
Lèse majesté
2
À peu près, oui. Pour autant que je sache, tous les principaux navigateurs modernes prennent en charge la substitution de glyphes. IE 6 et les anciens ne l'ont pas fait, mais vous ne devriez vraiment pas concevoir pour IE 6 de nos jours de toute façon - c'est le chemin des dinosaures, et un bon débarras aussi.
Ilmari Karonen
C'est une bonne idée mais cela nécessite que l'application dans laquelle je travaille avec le code (mon éditeur, dans ce cas), supporte ce type de mécanisme de "repli", ce qui n'est malheureusement pas le cas.
HighCommander4
1

Je sais que c'est une vieille question, mais je me suis dit qu'en tant que programmeur, je pourrais être en mesure d'offrir des conseils. J'utilise FreeMono sur tous mes éditeurs de texte et IDE. Il ressemble assez à Courier New et offre un meilleur support pour Unicode. D'après les informations que je peux obtenir à partir des fichiers de polices eux-mêmes, Courier New prend en charge 3 248 caractères différents tandis que FreeMono prend en charge 4 177 caractères. Je ne sais pas exactement dans quelle mesure FreeMono prend en charge les symboles Unicode mathématiques et logiques, mais je sais que c'est mieux que Courier New par une marge considérable.

Zack Frost
la source
1
Qu'est-ce qui signifie "a un meilleur support pour Unicode"? Comment? Veuillez comparer!
Mensch
@Kurt Désolé pour la confusion! Courier new prend en charge 3 248 caractères Unicode tandis que le mono gratuit prend en charge 4 177 caractères Unicode. J'espère que ça aide.
Zack Frost