Come posso rendere un font a faccia singola?


14

Supponiamo che ho un carattere in un formato modestamente popolare ( .ttf, .otf, ecc), e ho i diritti legali per modificarlo. Allo stato attuale, è un carattere normale con caratteri diversi (glifi?) Che variano in larghezze e distanze. Come potrei fare per trasformare detto carattere in un carattere a spaziatura fissa (ad esempio, tutti i caratteri hanno le stesse dimensioni, ecc.)?

Se possibile, ci sono strumenti automatici che possono fare alcune congetture per te? (I risultati non devono essere perfetti .) Il carattere potrebbe essere grande (molti caratteri) e modificarlo potrebbe essere noioso.

Eventuali suggerimenti sul problema sono molto apprezzati! :)


Disclaimer: scusate se questo è considerato un semplice howto , ma Google ha pochissime informazioni sull'argomento, e per un programmatore che non si occupa molto di grafica o caratteri, sicuramente non è semplice . Inoltre, scusami se la mia terminologia è disattivata ...: P


Quale software per font stai usando? FontLab? FontForge?
thomasrutter,

Risposte:


12

Se non disponi già di alcun software di modifica dei caratteri, la buona notizia è che Fontforge è gratuito e open source. La cattiva notizia è che ha una curva di apprendimento relativamente alta e un'interfaccia utente piuttosto insolita.

Fondamentalmente, affinché un font sia considerato monospazio, ogni glifo deve avere la stessa larghezza, fino allo stesso numero esatto di unità. Ciò include anche glifi che dovrebbero normalmente avere una larghezza pari a zero o una certa larghezza (come spazi em, trattini, ecc.).

Vedi la voce FAQ "Come segnare un carattere come monospaziato?"

Per modificare effettivamente la larghezza di tutti i glifi contemporaneamente in un batch, puoi semplicemente andare su "Metriche" -> "Imposta larghezza" dal menu, ma non mi aspetto che funzioni per tutti i personaggi. Probabilmente dovrai modificare manualmente tutti i caratteri larghi come "W", "M", "@", ecc. In modo che non si sovrappongano. E combinando i segni diacritici (gli accenti intesi come "combinati" con le lettere al momento del rendering) possono avere tutte le loro posizioni incasinate (il che è difficile da verificare se sei americano / inglese e non li usi quasi mai).

Una persona che sa come creare e modificare i caratteri sarebbe in grado di fare questo compito, ma non sarebbe comunque semplice.


Ho la stessa domanda sul convertire un font in monospace. Capisco che lo streatching sarebbe male. Quello che sto veramente cercando è uno strumento che 1) troverà il glifo più largo, 2) quindi invece di allungare i glifi, vorrei che fossero centrati in un campo di quella larghezza. Non esiste uno strumento per farlo?
NJRandy,

@thomasrutter nel caso di gnu unifont? (carattere bitmap in cui glifi sono 8 16 o 16 16)
user2284570

Bella risposta. La modifica direttamente dall'interfaccia utente di FontForge non ha funzionato per me (è rimasta bloccata per ore prima di ucciderla). Invece ho usato i binding Python. Il mio obiettivo era quello di utilizzare il carattere monospacificato come fallback, quindi cattiva crenatura e sanguinamento non erano grandi problemi. Ho dettagliato tutto questo in una risposta separata.
Clément,

1
Quando ho appreso per la prima volta ho creato molti caratteri mono modificando i caratteri gratuiti. Come qualsiasi strumento di automazione, dovrebbe essere solo un punto di partenza: si dovrebbero modificare i risultati se necessario. Ho scoperto che Fontographer ha la curva di apprendimento più rapida. Selezionare glifi, andare Set Widthsotto Metricsmenu a discesa: impostare tutti i glifi per una larghezza media (cambiamento in seguito, se necessario) e, infine, selezionare Equalise Sidebearingsanche sotto Metricsmenu per centrare i glifi nel em-quadrato. Naturalmente: studia come gli altri hanno superato le difficoltà particolari nella progettazione di caratteri a larghezza fissa di successo.
Moscarda,

7

thomasrutter offre più di una risposta tecnica; Ti mostrerò alcuni principi di tipografia per scoraggiarti dal fare ciò che vuoi fare a meno che tu non ne abbia davvero bisogno.

Ingrandisci una "i" e una "m" in Consolas o Courier e poi Corbel o Verdana. Nota quanto devono essere diverse le lettere per far funzionare la monospazio. Per convertire correttamente un font in monospace ci vuole molta conoscenza e lavoro. L'idea generale di allungare i caratteri è disapprovata da qualsiasi designer degno di nota, ecco perché anche passare da una variante normale a una condensata prende un ridisegno di tutti i glifi.

Quindi, guarda Consolas vs. Corbel qui e vedi come, quando viene ingrandito, puoi guardare 1) spaziatura tra le lettere, 2) consistenza dello spessore del tratto e 3) come ogni lettera si adatta alla sua casella. Guarda la faccia monospaziata (prima) rispetto alla faccia spaziata variabile (seconda), quindi vedi la terza e la quarta per vedere cosa succede quando provi ad allungare e a spaziare per renderla uguale. Per la quarta, ho portato la Squish al 75% per entrare nella scatola, ma ora sono molto più magri dell'Is. sarà evidente quando viene utilizzato.

Confronto di caratteri tipografici monospaziali e spaziali

Quindi, in breve: non scherzare con i caratteri tipografici; sono molto più formidabili di quanto ti aspetteresti!


2
Sì, allungare glifi larghi come M non è una soluzione abbastanza buona esattamente per il motivo indicato da Brendan: i suoi tratti verticali diventano più stretti delle altre lettere e sembra male. Devi effettivamente modificare i glifi a mano, selezionando i punti di controllo e spostandoli. Spero che questo dia all'OP un'idea di come farlo nel modo giusto (o bene) non sia un compito da poco. Soprattutto se si desidera avere una copertura dei glifi piuttosto decente.
thomasrutter,

@Brendan Penso che dovrebbe essere diverso per un font bitmap dove c'è solo due larghezze di glifi (Nel mio caso, i glifi sono larghi 8 o 16 pixel)
user2284570

+1; non è realistico sperare in una traduzione automatica completa. In contesti ristretti, tuttavia, ciò che hai mostrato nella terza immagine funziona davvero bene: se vuoi importare operatori matematici mancanti in un carattere monospace, quella soluzione sembrerà piuttosto ok (ho pubblicato software per farlo come una risposta separata).
Clément,

@Brendan non sono d'accordo. il problema con tutti i tuoi esempi è che non hai applicato la stessa trasformazione a tutti i glifi
simbionte

6

Mi sono imbattuto in questo problema cercando di modificare il codice sorgente facendo un uso pesante dei simboli Unicode. In quel contesto, la maggior parte del codice sorgente viene visualizzato in un carattere monospace e alcuni simboli che non sono coperti da quel carattere finiscono per rovinare l'allineamento.

Anche se è vero che "monospacificando" un carattere completo produrrà risultati orribili (crenatura, ampiezza del tratto e equilibrio generale saranno tutti completamente incasinati), importando solo pochi simboli da un carattere a larghezza variabile in un monospazio si ottengono risultati decenti. L'animazione seguente mostra l'utilizzo di Consolas + Symbola come fallback, rispetto all'utilizzo di Consolas + una versione monospacificata di Symbola:

prima e dopo la monospacificazione

Questo è inutile per la tipografia avanzata, ma è un buon compromesso se si desidera utilizzare i simboli nel codice sorgente senza rovinare il rientro. Ci sono un certo numero di avvertenze:

  • I personaggi ampi sanguineranno un po 'negli spazi vicini (anche se possono essere leggermente ridotti per mitigare il problema)
  • La crenatura sarà male (non è un grosso problema, poiché è solo un fallback)

Ho lanciato un progetto GitHub per gestire automaticamente questo tipo di trasformazioni di font. Include caratteri pre-generati e codice utilizzando i collegamenti Python di fontforge.

Vedi anche questa domanda emacs.se .


-1

Nell'elaboratore di testi, I: (1) ha creato una tabella; (2) diviso in colonne - una colonna per ogni lettera; (3) centrato le lettere; e (4) resi invisibili tutti i bordi, interni ed esterni.


1
Questo non risponde alla domanda. Non aiuta a creare un carattere e sembra una perdita di tempo.
Moscarda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.