Gibt es Monospace-Schriftarten, die Leerzeichen unterschiedlicher Breite unterstützen?

(Ertragen Sie mit mir, ich weiß, dass es etwas kontraintuitiv ist, Zeichen zu haben, die keine Monobreite in einer Monospace-Schriftart haben, aber unten gibt es einen legitimen Anwendungsfall.)

Ich habe eine Anwendung, die ich geschrieben habe, wo ich Hexadezimalzeichen mit fester Breite benötige, damit meine Ausgabe wie folgt aussehen kann:

21 41 49 56 44 4d 2c 31 
2c 31 2c 2c 41 2c 42 35 
4e 62 54 66 50 30 3f 36 
66 64 57 36 56 33 69 4b 

Es ist sehr wichtig, dass die Spalten perfekt ausgerichtet bleiben, daher ist eine Monospace-Schriftart von entscheidender Bedeutung.

Ich benötige jedoch nicht so viel Leerraum zwischen den Zeichen, und tatsächlich erschwert dies die Verwendung der Benutzeroberfläche aufgrund der übermäßigen Entfernung. Als Ergebnis möchte ich eine Schriftart finden, bei der die Nicht-Leerzeichen eine konstante Breite haben, aber wo ich die Leerzeichen wie in den Beispielen in https://jkorpela.fi/chars/spaces.html einstellen kann .

Gibt es so ein Tier?

Verwenden Sie Tabulatoren und passen Sie Ihre Tabulatorstopps an. Wie auch immer, es ist schwer zu sagen, da Sie nicht sagen, in welcher Umgebung Sie arbeiten.
Ich glaube, es gibt Schriftarten, die im Großen und Ganzen proportional sind, aber Ziffern mit fester Breite haben.
Es gibt proportionale Schriftarten mit alternativen Glyphen für Ziffern mit festem Abstand ("Tabellenzahlen"), aber ich glaube nicht, dass dies für Zeichen zur Verwendung als Hexadezimalziffern gelten kann. Sie könnten auch erwägen, Ihre eigene Schriftart zu erstellen, vielleicht ausgehend von einer frei modifizierbaren.

Antworten (3)

Wir wissen nichts über die technische Seite der "Anwendung, die Sie geschrieben haben" , aber in einigen Designprogrammen gibt es neben den üblichen Leerzeichen unterschiedliche Breiten Space.

Diese funktionieren sogar für Schriftarten mit festem Abstand, aber ich glaube, dass sie nicht in die eigentliche Schriftartdatei integriert sind, sondern irgendwie von der Software emuliert werden (wieder nicht bewusst, wie es auf der Codierungsebene funktioniert).

Alternativ könnten Sie mit einer komprimierteren Monospace-Schriftart experimentieren.

Siehe dazu: Welche Funktion haben EM- und EN-Räume?

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Sehr interessant. Ich habe alle emund enUnicode-Leerzeichen mit Courier New ausprobiert, aber es überrascht nicht, dass sie alle einem einzigen emLeerzeichen zugeordnet sind. Meine Software zeigt nur eine einzelne Zeichenfolge aus einfachem, nicht reichem Text an, daher ist sie in dieser Hinsicht etwas starr. Ich glaube nicht, dass es eine schmerzlose Möglichkeit gibt, das zu erreichen, was ich möchte, abgesehen davon, die richtige Schriftart zu finden.
Meines Wissens nach fügen TeX und LaTeX überhaupt keine „Leerzeichen“ ein und beziehen sich nicht auf die Schriftart für diese, sondern behandeln alle Leerzeichen selbst. Natürlich ist es möglich, dass sich dieses Verhalten ändert, wenn Sie eine Schriftart mit festem Abstand verwenden (aber selbst wenn dies der Fall ist, können Sie es in diesen Systemen mit ziemlicher Sicherheit wieder ändern).

Es ist äußerst unwahrscheinlich, dass eine Schriftart mit fester Breite über eine solche Funktion verfügt, da die Schriftarten dadurch nicht untereinander ausgerichtet werden könnten. Was der Designer offensichtlich nicht beabsichtigt hat. Aber bedenke:

  1. Für die meisten Pars sind solche Dinge sogar nicht erforderlich, da es ein Zeichen gibt, das eine unbestimmte Breite hat, die vom Benutzer angepasst werden kann. Dies ist das Tabulatorzeichen. Selbst die meisten rudimentären Systeme sollten es Ihnen also ermöglichen, die Registerkarte so zuzuordnen, dass sie das tut, was Sie wollen.

    Fast jedes System, das ich verwendet habe, erlaubte mir, dies einfach zu tun. Manchmal, indem ich mir einfach erlaube, die Tabulatorbreite oder Tabstopps zu definieren. Manchmal durch Zeichnen von einem anderen Punkt aus. Normalerweise keine so große Sache, wie Sie denken, denn alles, was es wirklich braucht, ist ein Wrapper mit einer Schleife.

  2. Wenn Sie wirklich einen besonderen Raum haben müssen. Nehmen Sie einfach eine Open-Source-Schriftart, öffnen Sie sie in Fontforge und definieren Sie den Raum. 15 Minuten Arbeit inklusive Download von Fontforge.

    Obwohl ich sagen würde, dass dies ein wirklich minderwertiger Workflow ist.

In Indesign können Sie dies mit Tabulatoren, "Leerzeichen einfügen" oder mit einem grep-Zeichenstil tun.

Leerzeichen einfügen:

Geben Sie hier die Bildbeschreibung ein

grep Zeichenstil:

Verwenden Sie "/s", um alle Leerzeichen abzugleichen, und erhöhen Sie die Breite mithilfe von Tracking im Zeichenstil.

Geben Sie hier die Bildbeschreibung ein

Ich musste nachschlagen, was InDesign ist, lol. Wollen Sie damit sagen, dass ich mit InDesign eine benutzerdefinierte Schriftart erstellen könnte, indem ich eine vorhandene Monospace-Schriftart ändere?
@KennSebesta es spielt keine Rolle, welche Funktionalität die Schriftart hat. Alle Anwendungen, die für Typografie gedacht sind, haben Leerzeichen in freier Größe und Tabellierungsfunktionen. Die Sache ist, dass Sie ein XY-Problem stellen. In diesem Fall denken Sie, dass der richtige Platz Ihr Problem löst. Es würde wahrscheinlich. Aber was Sie nicht sehen, ist, dass fast jedes System da draußen einen Mechanismus zur typografischen Anpassung hat. Wenn Sie in einem Grafikdesign-Forum fragen, erhalten Sie eine Antwort aus deren Perspektive. Aber wenn Sie nur sagen würden, in welchem ​​System Sie programmieren, würden die Leute sagen, wie Sie das Programm anpassen müssen.
@joojaa Ich fürchte, ich verstehe dich nicht, aber ich entschuldige mich, wenn ich Anstoß erregt habe, da dies nicht meine Absicht war. Ich schreibe ein plattformübergreifendes serielles Open-Source-Terminal, gitlab.com/kubark42/AeroTerm , und ich verwende ein Nur-Text-Widget, da es über alle Funktionen verfügt, die ich benötige. Es unterstützt jede Schriftart, die ich darauf werfe, und wenn ich mich also nur um die Leerzeichenbreite kümmern würde, könnte ich eine Schriftart mit variabler Breite verwenden und dann Unicode verwenden, um das zu erreichen, was ich will. Ich brauche jedoch auch Text zum Ausrichten, was Monospace erfordert. Da es hex ist, interessiere ich mich nur für die Zahlen 0-9und die Buchstaben A-Fund a-f.
@KennSebesta QT hat Möglichkeiten, intern damit umzugehen, dass keine Schriftart erforderlich ist. Siehe stackoverflow.com/questions/13027091/…
Interessant. Ich hatte keine Ahnung, dass dies möglich ist, und ich hatte auch nicht daran gedacht, den Tab zu hacken, um als Leerzeichen zu dienen. Hübsch! FWIW, ich verwende nicht QTextEdit, sondern eine TextArea in QML, also erbt es von TextEdit von QML. Glücklicherweise haben die Qt-Entwickler tabStopDistance über die QML-Schnittstelle verfügbar gemacht. Unglücklicherweise wird es, selbst wenn doublees als a eingestellt ist, zu einem gekürzt int, während die Schriftpixelbreite ein echter Wert ist, sodass dieser coole Hack in diesem Zusammenhang nicht funktioniert. Ich werde versuchen, meine Schriftgröße auf eine ganzzahlige Breite zu zwingen, und ich werde auch einen Fehlerbericht an Qt senden