Como posso fazer uma fonte monoespaçada?

14

Suponha que eu tenho uma fonte em um formato modestamente popular ( .ttf, .otf, etc.), e eu tenho os direitos legais para modificá-lo. Tal como está, é uma fonte normal com diferentes caracteres (glifos?) Variando em larguras e espaçamentos. Como eu iria transformar a fonte em uma fonte monoespaçada (por exemplo, todos os caracteres têm as mesmas dimensões, etc.)?

Se possível, existem ferramentas automatizadas que podem fazer algumas das suposições? (Os resultados não precisam ser perfeitos .) A fonte pode ser grande (muitos caracteres) e a edição pode ser entediante.

Todas as sugestões sobre o problema são muito apreciadas! :)


Isenção de responsabilidade: desculpe se isso é considerado um simples passo a passo , mas o Google tem muito pouca informação sobre o assunto e, para um programador que não lida muito com gráficos ou fontes, com certeza não é simples . Além disso, desculpe se minha terminologia está desativada ...: P

Miguel
fonte
Qual software de fonte você está usando, se houver? Fontlab? Fontforge?
thomasrutter

Respostas:

12

Se você ainda não possui nenhum software de edição de fontes, a boa notícia é que o Fontforge é gratuito e de código aberto. A má notícia é que ele possui uma curva de aprendizado relativamente alta e uma interface de usuário um tanto incomum.

Basicamente, para que uma fonte seja considerada monoespaçada, todo glifo deve ter a mesma largura, até exatamente o mesmo número de unidades. Isso inclui até glifos que normalmente devem ter largura zero ou certa largura (como espaços em, traços, etc.).

Consulte a entrada da FAQ "Como faço para marcar uma fonte como monoespaçada?"

Para editar a largura de todos os glifos de uma só vez em um lote, basta ir em "Métricas" -> "Definir largura" no menu, mas eu não esperava que funcionasse para todos os caracteres. Você provavelmente terá que editar manualmente todos os caracteres largos, como 'W', 'M', '@', etc., para que eles não se sobreponham. E combinar diacríticos (acentos que devem ser "combinados" com letras no momento da renderização) pode ter todas as suas posições confusas (o que é difícil de testar se você é americano / inglês e quase nunca as usa).

Uma pessoa que sabe como criar e editar fontes seria capaz de executar esta tarefa, mas ainda não seria simples.

thomasrutter
fonte
Eu tenho a mesma pergunta sobre a conversão de uma fonte em monoespaço. Eu entendo que esticar seria ruim. O que realmente estou procurando é uma ferramenta que 1) encontre o glifo mais amplo; 2) então, em vez de esticar os glifos, gostaria que eles fossem centralizados em um campo dessa largura. Não existe uma ferramenta para fazer isso?
NJRandy
@thomasrutter no caso de gnu unifont? (fonte de bitmap onde o glifo é 8 16 ou 16 16)
user2284570
Ótima resposta. Editar diretamente da interface do FontForge não funcionou para mim (permaneceu congelado por horas antes de eu a matar). Em vez disso, usei as ligações do Python. Meu objetivo era usar a fonte monoespacificada como substituto, de modo que o kerning e o sangramento ruins não eram grandes problemas. Eu detalhei tudo isso em uma resposta separada.
Clément
1
Quando aprendi, criei muitas fontes mono editando fontes grátis. Como qualquer ferramenta de automação, deve ser apenas um ponto de partida: é preciso ajustar os resultados conforme necessário. Eu achei o Fontographer a melhor curva de aprendizado. Selecione glifos, vá para Set Widthdebaixo Metricsmenu drop-down: definir todos os glifos para uma largura média (mudança posteriormente, se necessário) e, finalmente, selecione Equalise Sidebearingstambém sob Metricsmenu para centralizar os glifos no em-quadrado. Obviamente: estude como outras pessoas superaram as dificuldades específicas do design de fontes de largura fixa de sucesso.
Moscarda
7

thomasrutter oferece mais uma resposta técnica; Vou mostrar alguns princípios de tipografia para desencorajá-lo a fazer o que deseja, a menos que realmente precise.

Aumente o zoom em um 'i' e um 'm' em Consolas ou Courier e, em seguida, Corbel ou Verdana. Observe como as letras devem ser diferentes para que o monoespaço funcione. Para converter corretamente uma fonte em monoespaço, é preciso muito conhecimento e trabalho. A idéia geral de esticar as fontes é desaprovada por qualquer designer que se preze, é por isso que mesmo ir do normal para uma variante condensada leva a um redesenho de todos os glifos.

Portanto, veja Consolas vs. Corbel aqui e veja como, quando ampliado, você pode observar 1) espaçamento entre letras, 2) consistência da espessura do traço e 3) como cada letra se encaixa em sua caixa. Observe a face monoespaçada (primeiro) em comparação com a face espaçada variável (segunda), depois veja a terceira e a quarta para ver o que acontece quando você tenta esticar e espaço para torná-la igual. No quarto, fiz a Sra. Esmagar para 75% para entrar na caixa, mas agora eles são muito mais magros que o Is. isso será perceptível quando usado.

Comparação de tipos de letra monoespaços e de espaço variável

Então, resumindo: não mexa com os tipos de letra; eles são muito mais formidáveis ​​do que você esperaria!

Brendan
fonte
2
Sim, esticar glifos largos como M não é uma solução boa o suficiente exatamente pelo motivo que Brendan aponta: seus traços verticais se tornam mais estreitos que outras letras e isso parece ruim. Você precisa editar os glifos manualmente, selecionando pontos de controle e movendo-os. Esperamos que isso dê ao OP uma idéia de como fazer isso corretamente (ou bem) não é uma tarefa pequena. Especialmente se você quiser ter uma cobertura de glifo um tanto decente.
thomasrutter
@Brendan eu acho que deveria ser diferente para um tipo de letra bitmap onde há apenas dois largura de glifos (No meu caso, glifos são ou 8 ou 16 pixels de largura)
user2284570
+1; não é realista esperar uma tradução automática completa. Em contextos restritos, no entanto, o que você mostrou na terceira figura realmente funciona bem: se você deseja importar operadores matemáticos ausentes para uma fonte monoespaçada, essa solução ficará bem (eu publiquei o software para fazer isso como uma resposta separada).
Clément
@Brendan eu não concordo. o problema com todos os seus exemplos, é que você não aplicar a mesma transformação para todos os glifos
simbionte
6

Me deparei com esse mesmo problema, tentando editar o código-fonte, fazendo uso pesado de símbolos Unicode. Nesse contexto, a maior parte do código-fonte é exibida em uma fonte monoespaçada, e alguns símbolos que não são cobertos por essa fonte acabam prejudicando o alinhamento.

Embora seja verdade que "monoespacificar" uma fonte completa produzirá resultados horríveis (kerning, larguras de traço e equilíbrio geral serão totalmente confusos), importando apenas alguns símbolos de uma fonte de largura variável para uma monoespaço, obtemos resultados decentes. A animação abaixo mostra o uso do Consolas + Symbola como substituto, em comparação com o Consolas + uma versão monoespacificada do Symbola:

antes e depois da monospacificação

Isso é inútil para tipografia avançada, mas é um bom compromisso se você deseja usar símbolos em seu código-fonte sem arruinar o recuo. Existem várias advertências:

  • Caracteres largos sangram um pouco nos espaços vizinhos (embora possam ser um pouco encolhidos para atenuar o problema)
  • Kerning será ruim (não é um problema muito grande, pois é apenas um substituto)

Eu lancei um projeto GitHub para lidar com este tipo de transformações fonte automaticamente. Ele inclui fontes pré-geradas e código usando as ligações Python do fontforge.

Veja também esta pergunta do emacs.se .

Clemente
fonte
-1

No processador de texto, eu: (1) criei uma tabela; (2) dividido em colunas - uma coluna para cada letra; (3) centralizou as letras; e (4) tornou todas as fronteiras internas e externas invisíveis.

user56627
fonte
1
Isso não responde à pergunta. Não ajuda a criar uma fonte e parece uma perda de tempo.
Moscarda