Bagaimana saya bisa membuat font monospasi?

14

Misalkan bahwa saya memiliki font dalam format sederhana populer ( .ttf, .otf, dll), dan saya memiliki hak hukum untuk memodifikasinya. Seperti berdiri, itu adalah font normal dengan karakter yang berbeda (mesin terbang?) Bervariasi dalam lebar dan jarak. Bagaimana saya mengubah font tersebut menjadi font monospasi (misalnya semua karakter memiliki dimensi yang sama, dll.)?

Jika memungkinkan, apakah ada alat otomatis yang dapat melakukan beberapa tebakan untuk Anda? (Hasilnya tidak harus sempurna .) Font mungkin besar (banyak karakter), dan mengeditnya bisa membosankan.

Setiap saran tentang masalah sangat kami hargai! :)


Penafian: Maaf jika ini dianggap sebagai howto sederhana , tetapi Google memiliki sedikit informasi tentang subjek, dan untuk seorang programmer yang tidak banyak berurusan dengan grafik atau font, tentu tidak sederhana . Juga, maaf jika terminologi saya tidak aktif ...: P

Miguel
sumber
Perangkat lunak font apa yang Anda gunakan jika ada? Fontlab? Fontforge?
thomasrutter

Jawaban:

12

Jika Anda belum memiliki perangkat lunak pengedit font, kabar baiknya adalah Fontforge gratis dan open source. Berita buruknya adalah ia memiliki kurva belajar yang relatif tinggi dan antarmuka pengguna yang agak tidak biasa.

Pada dasarnya, untuk font yang dianggap monospace, setiap mesin terbang harus memiliki lebar yang sama, hingga jumlah unit yang sama persis. Ini termasuk bahkan mesin terbang yang biasanya harus nol lebar, atau lebar tertentu (seperti spasi em, tanda hubung em, dll).

Lihat entri FAQ "Bagaimana cara menandai font sebagai monospasi?"

Untuk benar-benar mengedit lebar semua mesin terbang sekaligus dalam satu batch, Anda bisa pergi ke "Metrik" -> "Atur Lebar" pada menu, tetapi saya tidak berharap itu berfungsi untuk semua karakter. Anda mungkin harus mengedit secara manual semua karakter lebar seperti 'W', 'M', '@', dll sehingga mereka tidak berakhir tumpang tindih. Dan menggabungkan diakritik (aksen yang dimaksudkan untuk "dikombinasikan" dengan huruf pada waktu render) mungkin memiliki semua posisi mereka kacau (yang sulit untuk menguji apakah Anda orang Amerika / Inggris dan Anda hampir tidak pernah menggunakannya).

Seseorang yang tahu cara membuat dan mengedit font akan dapat melakukan tugas ini tetapi masih tidak mudah.

thomasrutter
sumber
Saya memiliki pertanyaan yang sama tentang konversi font ke monospace. Saya mengerti bahwa bernafas akan menjadi buruk. Apa yang benar-benar saya cari adalah alat yang akan 1) menemukan mesin terbang terluas, 2) kemudian alih-alih meregangkan mesin terbang, saya ingin mereka berpusat di bidang yang lebar. Apakah tidak ada alat untuk melakukan itu?
NJRandy
@thomasrutter dalam kasus gnu unifont? (font bitmap di mana glyph adalah 8 16 atau 16 16)
user2284570
Jawaban yang bagus Mengedit langsung dari UI FontForge tidak bekerja untuk saya (tetap beku selama berjam-jam sebelum saya membunuhnya). Sebagai gantinya saya menggunakan binding Python. Tujuan saya adalah menggunakan font monospasifikasi sebagai fallback, jadi kerning dan pendarahan yang buruk bukan masalah besar. Saya sudah merinci semua ini dalam jawaban terpisah.
Clément
1
Ketika saya pertama kali belajar saya membuat banyak font mono dengan mengedit font gratis. Seperti alat otomasi apa pun, alat ini seharusnya hanya menjadi titik awal: seseorang harus mengubah hasilnya seperlunya. Saya menemukan Fontographer memiliki kurva belajar tercepat. Pilih mesin terbang, pergi ke Set Widthbawah Metricsmenu drop-down: mengatur semua mesin terbang untuk satu lebar rata-rata (ganti nanti jika perlu) dan akhirnya, pilih Equalise Sidebearingsjuga di bawah Metricsmenu untuk memusatkan mesin terbang di em-square. Tentu saja: pelajari bagaimana orang lain telah mengatasi kesulitan-kesulitan khusus untuk merancang font dengan lebar tetap yang sukses.
Moscarda
7

thomasrutter menawarkan lebih banyak jawaban teknis; Saya akan menunjukkan kepada Anda beberapa prinsip tipografi untuk mencegah Anda melakukan apa yang ingin Anda lakukan kecuali Anda benar-benar perlu.

Memperbesar 'i' dan 'm' di Consolas atau Courier lalu Corbel atau Verdana. Perhatikan betapa berbedanya huruf-huruf itu agar monospace berfungsi. Untuk benar mengkonversi font ke monospace dibutuhkan banyak pengetahuan dan pekerjaan. Gagasan umum untuk meregangkan font sama sekali tidak disukai oleh desainer mana pun yang layak mendapatkan garam mereka, itu sebabnya bahkan beralih dari normal ke varian yang kental membutuhkan penggambaran ulang semua mesin terbang.

Jadi, lihat Consolas vs Corbel di sini dan lihat bagaimana, ketika diperbesar, Anda dapat melihat 1) jarak antar huruf, 2) konsistensi ketebalan goresan, dan 3) bagaimana setiap huruf masuk ke dalam kotaknya. Lihatlah wajah monospasi (pertama) dibandingkan dengan variabel spasi wajah (kedua), lalu lihat ketiga dan keempat untuk melihat apa yang terjadi ketika Anda mencoba meregangkan dan ruang untuk membuatnya sama. Untuk yang keempat, saya membuat MS squish hingga 75% untuk masuk ke dalam kotak, tapi sekarang mereka jauh lebih kurus daripada Is. yang akan terlihat saat digunakan.

Perbandingan monospace dan tipografi ruang variabel

Jadi, singkatnya: jangan main-main dengan tipografi; mereka jauh lebih tangguh dari yang Anda harapkan!

Brendan
sumber
2
Ya, meregangkan mesin terbang lebar seperti M bukanlah solusi yang cukup baik untuk alasan yang tepat yang ditunjukkan Brendan: goresan vertikal menjadi lebih sempit daripada huruf lain dan itu terlihat buruk. Anda harus benar-benar mengedit mesin terbang dengan tangan, dengan memilih titik kontrol dan memindahkannya. Semoga ini memberi OP beberapa ide tentang bagaimana melakukan ini dengan benar (atau dengan baik) bukanlah tugas kecil. Terutama jika Anda ingin memiliki cakupan mesin terbang yang lumayan.
thomasrutter
@ Brendan Saya pikir itu harus berbeda untuk font bitmap di mana hanya ada dua lebar mesin terbang (Dalam kasus saya, mesin terbang lebar 8 atau 16 piksel)
user2284570
+1; tidak realistis untuk mengharapkan terjemahan otomatis penuh. Namun, dalam konteks terbatas, apa yang Anda perlihatkan dalam gambar ketiga benar-benar berfungsi dengan baik: jika Anda ingin mengimpor operator matematika yang hilang ke font monospace, solusi itu akan terlihat agak ok (saya memposting perangkat lunak untuk melakukan ini sebagai jawaban terpisah).
Clément
@ Brendan saya tidak setuju. masalah dengan semua contoh Anda, adalah bahwa Anda tidak menerapkan transformasi yang sama untuk semua mesin terbang
symbiont
6

Saya menemukan masalah ini sangat mencoba untuk mengedit kode sumber menggunakan simbol Unicode. Dalam konteks itu, sebagian besar kode sumber ditampilkan dalam satu font monospace, dan beberapa simbol yang tidak tercakup oleh font itu akhirnya merusak perataan.

Meskipun benar bahwa "monospacifying" font penuh akan menghasilkan hasil yang mengerikan (kerning, lebar goresan, dan keseimbangan umum semua akan sepenuhnya kacau), mengimpor hanya beberapa simbol dari font lebar-variabel ke dalam monospace yang menghasilkan hasil yang layak. Animasi di bawah ini menunjukkan penggunaan Consolas + Symbola sebagai mundur, dibandingkan menggunakan Consolas + versi monospasifikasi dari Symbola:

sebelum dan sesudah monospasifikasi

Ini tidak berguna untuk tipografi lanjutan, tetapi kompromi yang bagus jika Anda ingin menggunakan simbol dalam kode sumber Anda tanpa merusak lekukan. Ada beberapa peringatan:

  • Karakter lebar akan berdarah sedikit ke ruang tetangga (meskipun mereka dapat sedikit menyusut untuk mengurangi masalah)
  • Kerning akan menjadi buruk (tidak terlalu masalah, karena hanya mundur)

Saya telah meluncurkan proyek GitHub untuk menangani transformasi font semacam ini secara otomatis. Ini termasuk font yang dibuat sebelumnya, dan kode menggunakan fontforge's Python binding.

Lihat juga pertanyaan emacs.se ini .

Sejuk
sumber
-1

Dalam pengolah kata, I: (1) membuat tabel; (2) dibagi menjadi kolom - satu kolom untuk setiap huruf; (3) menempatkan huruf di tengah; dan (4) menjadikan semua batas, internal dan eksternal tidak terlihat.

pengguna56627
sumber
1
Ini tidak menjawab pertanyaan. Itu tidak membantu membuat font, dan itu terdengar seperti buang-buang waktu.
Moscarda