Wie kann ich eine Schriftart mit einem einheitlichen Abstand erstellen?

14

Nehmen wir an , ich habe eine Schriftart in einem bescheiden beliebtes Format ( .ttf, .otfusw.), und ich habe die gesetzlichen Rechte , es zu ändern. So wie es aussieht , handelt es sich um eine normale Schriftart mit unterschiedlichen Zeichen (Glyphen?), Die sich in Breite und Abstand unterscheiden. Wie würde ich diese Schrift in eine monospaced Schrift verwandeln (z. B. alle Zeichen haben die gleichen Abmessungen usw.)?

Gibt es, wenn möglich, automatisierte Tools, mit denen Sie einiges raten können? (Die Ergebnisse müssen nicht unbedingt perfekt sein .) Die Schrift ist möglicherweise groß (viele Zeichen), und die Bearbeitung kann mühsam sein.

Anregungen zu dem Problem werden sehr geschätzt! :)


Haftungsausschluss: Es tut uns leid, wenn dies als einfaches Howto betrachtet wird , aber Google hat nur sehr wenige Informationen zu diesem Thema und für einen Programmierer, der sich nicht viel mit Grafiken oder Schriftarten beschäftigt, ist dies sicherlich nicht einfach . Tut mir auch leid, wenn meine Terminologie nicht stimmt ...: P

Miguel
quelle
Welche Schriftartensoftware verwenden Sie, falls vorhanden? Fontlab? Fontforge?
Thomasrutter

Antworten:

12

Wenn Sie noch keine Schriftartbearbeitungssoftware haben, ist Fontforge kostenlos und Open Source. Die schlechte Nachricht ist, dass es eine relativ hohe Lernkurve und eine etwas ungewöhnliche Benutzeroberfläche hat.

Grundsätzlich muss jede Glyphe dieselbe Breite haben, bis auf die exakt gleiche Anzahl von Einheiten. Dies schließt auch Glyphen ein, deren Breite normalerweise Null oder eine bestimmte Breite sein sollte (z. B. Leerzeichen, Gedankenstriche usw.).

Siehe den FAQ-Eintrag "Wie markiere ich eine Schriftart als monospaced?"

Um tatsächlich die Breite aller Glyphen auf einmal in einem Stapel zu bearbeiten, können Sie einfach im Menü "Metriken" -> "Breite festlegen" auswählen, aber ich würde nicht erwarten, dass dies für alle Zeichen funktioniert. Sie müssen wahrscheinlich alle breiten Zeichen wie 'W', 'M', '@' usw. manuell bearbeiten, damit sie sich nicht überschneiden. Wenn Sie diakritische Zeichen (Akzente, die beim Rendern mit Buchstaben "kombiniert" werden sollen) kombinieren, sind möglicherweise alle Positionen durcheinander (was schwer zu testen ist, wenn Sie Amerikaner / Engländer sind und sie so gut wie nie verwenden).

Eine Person, die weiß, wie man Schriften erstellt und bearbeitet, könnte diese Aufgabe erledigen, aber es wäre immer noch nicht einfach.

thomasrutter
quelle
Ich habe die gleiche Frage zum Konvertieren einer Schriftart in Monospace. Ich verstehe, dass das Behandeln schlecht wäre. Was ich wirklich suche, ist ein Werkzeug, das 1) die breiteste Glyphe findet, 2) dann anstatt die Glyphen zu dehnen, möchte ich, dass sie in einem Feld dieser Breite zentriert sind. Gibt es dafür kein Werkzeug?
NJRandy
@ thomasrutter im falle von gnu unifont? (Bitmap-Schriftart, bei der die Glyphen entweder 8 16 oder 16 16 sind)
user2284570
Gute Antwort. Das direkte Bearbeiten von FontForges UI funktionierte jedoch nicht für mich (es blieb stundenlang eingefroren, bevor ich es tötete). Stattdessen habe ich die Python-Bindungen verwendet. Mein Ziel war es, die monospacified-Schrift als Fallback zu verwenden, sodass schlechtes Kerning und Ausbluten keine großen Probleme darstellten. Ich habe das alles in einer separaten Antwort beschrieben.
Clément
1
Als ich das erste Mal lernte, machte ich viele Mono-Schriften, indem ich freie Schriften bearbeitete. Wie jedes Automatisierungswerkzeug sollte es nur ein Ausgangspunkt sein: Man sollte die Ergebnisse nach Bedarf optimieren. Ich fand, dass Fontographer die schnellste Lernkurve hat. Wählen Sie Glyphen, gehen Sie Set Widthunter MetricsDrop-Down - Menü: stellen Sie alle Glyphen auf eine durchschnittliche Breite (ändern später , wenn nötig) und schließlich wählen Sie Equalise Sidebearingsauch unter MetricsMenü die Glyphen im em-Quadrat zu zentrieren. Natürlich: Studieren Sie, wie andere die Schwierigkeiten beim Entwerfen erfolgreicher Schriften mit fester Breite überwunden haben.
Moscarda
7

thomasrutter bietet eher eine technische antwort; Ich zeige Ihnen einige Prinzipien der Typografie, um Sie davon abzuhalten, das zu tun, was Sie tun möchten, es sei denn, Sie müssen es wirklich tun.

Vergrößern Sie ein "Ich" und ein "Ich" in Consolas oder Courier und dann in Corbel oder Verdana. Beachten Sie, wie unterschiedlich die Buchstaben sein müssen, damit Monospace funktioniert. Das Konvertieren einer Schriftart in Monospace erfordert viel Wissen und Arbeit. Die allgemeine Idee, Schriften überhaupt zu dehnen, wird von jedem Designer missbilligt, der es wert ist, sie zu strecken. Deshalb werden auch beim Übergang von einer normalen zu einer komprimierten Variante alle Glyphen neu gezeichnet.

Schauen Sie sich also Consolas vs. Corbel hier an und sehen Sie, wie Sie beim Vergrößern 1) den Abstand zwischen den Buchstaben, 2) die Konsistenz der Strichstärke und 3) die Passform jedes Buchstabens in der Box sehen können. Schauen Sie sich das monospaced Gesicht (zuerst) im Vergleich zum variabel beabstandeten Gesicht (zweitens) an, und sehen Sie sich dann das dritte und vierte an, um zu sehen, was passiert, wenn Sie versuchen, sich zu strecken und den Abstand zu verringern, um es gleich zu machen. Beim vierten Mal habe ich die Ms auf 75% gequetscht, um in die Schachtel zu kommen, aber jetzt sind sie viel dünner als die Is. Das wird sich bemerkbar machen, wenn es benutzt wird.

Vergleich von Monospace- und Variable Space-Schriften

Also, kurz gesagt: Leg dich nicht mit Schriften an; Sie sind viel beeindruckender als man erwarten würde!

Brendan
quelle
2
Ja, breite Glyphen wie M zu strecken, ist nicht gut genug, genau aus dem Grund, warum Brendan darauf hinweist: Die vertikalen Striche werden schmaler als bei anderen Buchstaben, und das sieht schlecht aus. Sie müssen die Glyphen tatsächlich von Hand bearbeiten, indem Sie Kontrollpunkte auswählen und sie verschieben. Hoffentlich gibt dies dem OP eine Vorstellung davon, wie wichtig es ist, dies richtig (oder gut) zu machen. Vor allem, wenn Sie eine anständige Glyphenabdeckung wünschen.
Thomasrutter
@Brendan Ich denke, es sollte für eine Bitmap-Schriftart anders sein, bei der es nur zwei Glyphenbreiten gibt (in meinem Fall sind Glyphen entweder 8 oder 16 Pixel breit)
user2284570
+1; Es ist unrealistisch, auf eine vollautomatische Übersetzung zu hoffen. In eingeschränkten Kontexten funktioniert das, was Sie im dritten Bild gezeigt haben, tatsächlich gut: Wenn Sie fehlende mathematische Operatoren in eine Monospace-Schriftart importieren möchten, wird diese Lösung eher in Ordnung aussehen (ich habe Software veröffentlicht, um dies als separate Antwort zu tun).
Clément
Ich stimme nicht zu. Das Problem bei all Ihren Beispielen ist, dass Sie nicht auf alle Glyphen dieselbe Transformation angewendet haben
symbiont
6

Ich bin auf genau dieses Problem gestoßen, als ich versuchte, den Quellcode zu bearbeiten, indem ich Unicode-Symbole stark verwendete. In diesem Zusammenhang wird der größte Teil des Quellcodes in einer Monospace-Schriftart angezeigt, und einige Symbole, die nicht in dieser Schriftart enthalten sind, beeinträchtigen die Ausrichtung.

Obwohl es wahr ist, dass das "Monospacifizieren" einer vollständigen Schrift zu schrecklichen Ergebnissen führt (Kerning, Strichbreiten und allgemeine Ausgewogenheit werden völlig durcheinander gebracht), führt das Importieren von nur wenigen Symbolen von einer Schrift variabler Breite in eine Monospace-Schrift zu anständigen Ergebnissen. Die folgende Animation zeigt die Verwendung von Consolas + Symbola als Fallback im Vergleich zur Verwendung von Consolas + einer monospazifizierten Version von Symbola:

vor und nach der Monospazifizierung

Dies ist für fortgeschrittene Typografie nutzlos, aber ein guter Kompromiss, wenn Sie Symbole in Ihrem Quellcode verwenden möchten, ohne die Einrückung zu beeinträchtigen. Es gibt jedoch eine Reihe von Einschränkungen:

  • Breite Zeichen bluten ein wenig auf benachbarte Leerzeichen (obwohl sie leicht verkleinert werden können, um das Problem zu beheben)
  • Kerning wird schlecht (kein allzu großes Problem, da es nur ein Fallback ist)

Ich habe ein GitHub-Projekt gestartet , um diese Art von Schriftumwandlungen automatisch durchzuführen. Es enthält vorgenerierte Schriftarten und Code, der die Python-Bindungen von fontforge verwendet.

Siehe auch diese Frage von emacs.se .

Clément
quelle
-1

In der Textverarbeitung habe ich: (1) eine Tabelle erstellt; (2) in Spalten aufgeteilt - eine Spalte für jeden Buchstaben; (3) zentrierte die Buchstaben; und (4) alle inneren und äußeren Grenzen unsichtbar gemacht.

user56627
quelle
1
Dies beantwortet die Frage nicht. Es hilft nicht, eine Schriftart zu erstellen, und es klingt nach Zeitverschwendung.
Moscarda