Comment puis-je créer une police à espacement fixe?

14

Supposons que j'ai une police dans un format modestement populaire ( .ttf, .otf, etc.), et je les droits légaux pour le modifier. En l'état, il s'agit d'une police normale avec différents caractères (glyphes?) Variant en largeur et en espacement. Comment pourrais-je transformer cette police en police à espacement fixe (par exemple, tous les caractères ont les mêmes dimensions, etc.)?

Si possible, existe-t-il des outils automatisés qui peuvent vous aider à deviner? (Les résultats ne doivent pas nécessairement être parfaits .) La police peut être volumineuse (plusieurs caractères) et sa modification peut être fastidieuse.

Toutes les suggestions sur le problème sont très appréciées! :)


Avertissement: désolé si cela est considéré comme un simple guide , mais Google a très peu d'informations sur le sujet, et pour un programmeur qui ne traite pas beaucoup des graphiques ou des polices, ce n'est certainement pas simple . Aussi, désolé si ma terminologie est désactivée ...: P

Miguel
la source
Quel logiciel de police utilisez-vous le cas échéant? Fontlab? Fontforge?
thomasrutter

Réponses:

12

Si vous n'avez pas encore de logiciel d'édition de polices, la bonne nouvelle est que Fontforge est gratuit et open source. La mauvaise nouvelle est qu'il a une courbe d'apprentissage relativement élevée et une interface utilisateur quelque peu inhabituelle.

Fondamentalement, pour qu'une police soit considérée comme monospace, chaque glyphe doit avoir la même largeur, jusqu'au même nombre exact d'unités. Cela inclut même les glyphes qui devraient normalement avoir une largeur nulle ou une certaine largeur (tels que les espaces em, les tirets em, etc.).

Voir l'entrée FAQ "Comment marquer une police comme étant à espacement fixe?"

Pour réellement modifier la largeur de tous les glyphes à la fois dans un lot, vous pouvez simplement aller dans "Metrics" -> "Set Width" dans le menu, mais je ne m'attendrais pas à ce que cela fonctionne pour tous les caractères. Vous devrez probablement modifier manuellement tous les caractères larges tels que «W», «M», «@», etc. afin qu'ils ne se chevauchent pas. Et la combinaison de signes diacritiques (accents destinés à être "combinés" avec des lettres au moment du rendu) peut avoir toutes leurs positions gâchées (ce qui est difficile à tester si vous êtes américain / anglais et que vous ne les utilisez presque jamais).

Une personne qui sait créer et modifier des polices serait en mesure de faire cette tâche, mais ce ne serait toujours pas simple.

thomasrutter
la source
J'ai la même question sur la conversion d'une police en monospace. Je comprends que les étirements seraient mauvais ,. Ce que je recherche vraiment, c'est un outil qui 1) trouvera le glyphe le plus large, 2) puis au lieu d'étirer les glyphes, je voudrais qu'ils soient centrés dans un champ de cette largeur. N'y a-t-il pas d'outil pour le faire?
NJRandy
@thomasrutter dans le cas de gnu unifont? (police bitmap où le glyphe est 8 16 ou 16 16)
user2284570
Très bonne réponse. L'édition directement à partir de l'interface utilisateur de FontForge n'a pas fonctionné pour moi (elle est restée gelée pendant des heures avant de la tuer). Au lieu de cela, j'ai utilisé les liaisons Python. Mon objectif était d'utiliser la police monospacifiée comme solution de rechange, donc le mauvais crénage et le saignement n'étaient pas de gros problèmes. J'ai détaillé tout cela dans une réponse séparée.
Clément
1
Quand j'ai appris pour la première fois, j'ai fait beaucoup de polices mono en modifiant des polices gratuites. Comme tout outil d'automatisation, il ne doit être qu'un point de départ: il faut modifier les résultats si nécessaire. J'ai trouvé que Fontographer avait la courbe d'apprentissage la plus rapide. Sélectionnez les glyphes, allez Set Widthdans Metricsle menu déroulant sous: définissez tous les glyphes sur une largeur moyenne (modifiez plus tard si nécessaire) et enfin, sélectionnez Equalise Sidebearingségalement sous le Metricsmenu pour centrer les glyphes dans le carré em. Bien sûr: étudiez comment d'autres ont surmonté les difficultés particulières de conception de polices à largeur fixe réussies.
Moscarda
7

thomasrutter offre plus d'une réponse technique; Je vais vous montrer quelques principes de typographie pour vous décourager de faire ce que vous voulez faire, sauf si vous en avez vraiment besoin.

Zoomez sur un «i» et un «m» dans Consolas ou Courier, puis Corbel ou Verdana. Remarquez à quel point les lettres doivent être différentes pour que le monospace fonctionne. Pour convertir correctement une police en monospace, il faut beaucoup de connaissances et de travail. L'idée générale d'étirer les polices est désapprouvée par tout concepteur digne de ce nom, c'est pourquoi même passer de la normale à une variante condensée prend une refonte de tous les glyphes.

Donc, regardez Consolas vs Corbel ici et voyez comment, quand il est zoomé, vous pouvez regarder 1) l'espacement entre les lettres, 2) la cohérence de l'épaisseur du trait et 3) la façon dont chaque lettre s'inscrit dans sa boîte. Regardez la face à espacement fixe (première) par rapport à la face à espacement variable (seconde), puis voyez les troisième et quatrième pour voir ce qui se passe lorsque vous essayez de vous étirer et d'espacer pour la rendre égale. Pour le quatrième, j'ai fait le squish Ms à 75% pour entrer dans la boîte, mais maintenant ils sont beaucoup plus maigres que les is. ce sera perceptible quand il sera utilisé.

Comparaison des polices monospaces et à espace variable

Donc, en bref: ne jouez pas avec les polices de caractères; ils sont beaucoup plus formidables que vous ne le pensez!

Brendan
la source
2
Oui, étirer des glyphes larges comme M n'est pas une bonne solution pour exactement la raison pour laquelle Brendan le souligne: ses traits verticaux deviennent plus étroits que les autres lettres et cela semble mauvais. Vous devez réellement modifier les glyphes à la main, en sélectionnant des points de contrôle et en les déplaçant. J'espère que cela donne au PO une idée de la façon dont faire correctement (ou bien) n'est pas une mince tâche. Surtout si vous voulez avoir une couverture glyphe quelque peu décente.
thomasrutter
@Brendan Je pense que cela devrait être différent pour une police bitmap où il n'y a que deux largeurs de glyphes (dans mon cas, les glyphes font 8 ou 16 pixels de large)
user2284570
+1; il n'est pas réaliste d'espérer une traduction automatique complète. Dans des contextes restreints, cependant, ce que vous avez montré dans la troisième image fonctionne bien: si vous souhaitez importer des opérateurs mathématiques manquants dans une police à espacement fixe, cette solution sera plutôt correcte (j'ai posté un logiciel pour le faire comme réponse séparée).
Clément
@Brendan, je ne suis pas d'accord. le problème avec tous vos exemples, c'est que vous n'avez pas appliqué la même transformation à tous les glyphes
symbiont
6

Je suis tombé sur ce problème en essayant de modifier le code source en faisant un usage intensif des symboles Unicode. Dans ce contexte, la plupart du code source est affiché dans une police monospace, et quelques symboles qui ne sont pas couverts par cette police finissent par ruiner l'alignement.

Bien qu'il soit vrai que "monospacifier" une police complète produira des résultats horribles (crénage, largeurs de trait et équilibre général seront entièrement gâchés), l'importation de quelques symboles d'une police à largeur variable dans une police monospace donne des résultats décents. L'animation ci-dessous montre l'utilisation de Consolas + Symbola comme solution de rechange, par rapport à l'utilisation de Consolas + une version monospacifiée de Symbola:

avant et après monospacification

Cela est inutile pour une typographie avancée, mais c'est un bon compromis si vous souhaitez utiliser des symboles dans votre code source sans ruiner l'indentation. Il y a cependant un certain nombre de mises en garde:

  • Les personnages larges saignent un peu sur les espaces voisins (bien qu'ils puissent être légèrement réduits pour atténuer le problème)
  • Le crénage sera mauvais (pas trop de problème, car ce n'est qu'un repli)

J'ai lancé un projet GitHub pour gérer automatiquement ce type de transformations de polices. Il comprend des polices pré-générées et du code utilisant les liaisons Python de fontforge.

Voir aussi cette question emacs.se .

Clément
la source
-1

En traitement de texte, j'ai: (1) créé une table; (2) divisé en colonnes - une colonne pour chaque lettre; (3) centré les lettres; et (4) rendu toutes les frontières, internes et externes invisibles.

user56627
la source
1
Cela ne répond pas à la question. Cela n'aide pas à créer une police et cela ressemble à une perte de temps.
Moscarda