Monaspace
(monaspace.githubnext.com)- Monaspace adalah sistem font baru untuk memasukkan ekspresi tipografi yang lebih kaya ke tampilan kode sambil tetap mempertahankan grid monospace
- Fitur utamanya, Texture Healing, mengoreksi ketidakseimbangan ruang kosong pada pasangan huruf yang berdekatan dengan glyph alternatif, sehingga mengurangi perbedaan kepadatan pada teks monospace
- Pendekatan ini menerapkan contextual alternates OpenType pada font untuk kode, dapat digunakan di sebagian besar editor tanpa plugin editor terpisah, dan juga menyediakan pengaturan untuk Visual Studio Code
- Monaspace memiliki sumbu ketebalan 200–800, kemiringan 0 hingga -11°, dan lebar 100–125; code ligature per bahasa dapat dinyalakan atau dimatikan sebagai style set
- GitHub Next telah mengembangkan font ini bersama Lettermatic sejak 2022, dengan tujuan memperluas tampilan kode menjadi sarana ekspresi yang lebih luas untuk dimanfaatkan oleh alat pengembangan
Sistem font yang memperluas tampilan kode monospace
- Monaspace adalah “superfamily” font untuk kode, dengan fokus mengembangkan cara kode ditampilkan di layar
- Sejak masa awal teletype, kode ditampilkan dengan font monospace, dan Monaspace berupaya memuat lebih banyak makna sambil mempertahankan grid ini
- Editor yang ada sering menyampaikan informasi di luar syntax highlighting berbasis warna melalui elemen antarmuka seperti hover, garis bawah, dan dekorasi grafis
- Monaspace menyediakan palet yang lebih ekspresif pada tingkat font, yang dapat dimanfaatkan oleh kode dan alat pengembangan
Saran Copilot dan tipografi
- Saran kode seperti Copilot dapat memiliki suara tipografis tersendiri melalui Monaspace
- Ghost text dapat membuat kode yang disarankan lebih sulit di-parse dan dievaluasi
- Jika ekspresi font itu sendiri menunjukkan bagian mana yang merupakan kode yang disarankan, potongan kode yang disarankan akan lebih mudah dibedakan nanti
Keterbatasan font monospace yang menjadi sasaran Texture Healing
- Karena font monospace menempatkan semua huruf dalam kotak dengan lebar yang sama, kepadatan teks menjadi tidak merata
- Huruf sempit seperti
ldanimembutuhkan serif yang dilebih-lebihkan untuk mengisi kotaknya, dan tetap menyisakan lebih banyak ruang kosong daripada yang diperlukan - Huruf lebar seperti
mdanwdipadatkan di dalam kotak sehingga bentuknya terdistorsi, goresannya menipis, dan ruang bagian dalamnya juga terbatas - Batasan ini adalah masalah struktural pada font monospace yang berlanjut sejak era teletype tahun 1960-an
Cara kerja Texture Healing
- Texture Healing mencari pasangan huruf berdekatan yang salah satunya kekurangan ruang dan yang lain memiliki ruang berlebih, lalu mengganti glyph-nya
- Huruf sempit diganti dengan glyph alternatif yang menyerahkan sebagian ruang kosongnya kepada tetangga, sementara huruf lebar diganti dengan glyph alternatif yang melebar hingga tepi kotak
- Fitur ini diimplementasikan sebagai contextual alternates OpenType
- contextual alternates umumnya digunakan pada aksara Arab atau font tulisan tangan, yang bentuk glyph-nya berubah sesuai huruf di sekitarnya
- Monaspace menerapkan teknologi ini pada font monospace untuk kode
- Teks yang dihasilkan tetap mengikuti grid monospace
- Cara mengaktifkan Texture Healing di Visual Studio Code dapat dilihat di dokumentasi Monaspace
Sumbu dan gaya font
- Sumbu ketebalan Monaspace tersedia dari 200 hingga 800
- 200: Extra Light
- 300: Light
- 400: Regular
- 500: Medium
- 600: Semibold
- 700: Bold
- 800: ExtraBold
- Sumbu kemiringan tersedia dari 0 hingga -11°
- 0: Normal
- -5.5°: titik tengah saat sebagian huruf berubah dari bentuk oblique menjadi italic
- -11°: Italic
- Sumbu lebar tersedia dari 100 hingga 125
- 100: Normal
- 112.5: Semiwide
- 125: Wide
- Monaspace mencakup nama-nama keluarga seperti Neon, Argon, Xenon, Radon, dan Krypton
Code ligature dan pengaturan OpenType
- Monaspace menyertakan code ligature untuk berbagai bahasa pemrograman
- Ligature disusun sebagai style set, sehingga pengguna dapat menyalakan atau mematikan hanya set yang diinginkan
- Setiap style set dirancang secara garis besar berdasarkan kebutuhan bahasa tertentu
ss01: mencakup ligature untuk urutan karakter yang umum terlihat di JavaScriptss05: menyediakan ligature untuk operator F#
- Fitur OpenType tambahan juga tersedia
calt: mengaktifkan Texture Healingliga: menyesuaikan jarak karakter berulang seperti///dan||, serta dirancang agar tidak aktif di dalam urutan yang lebih panjang seperti////
- Di Visual Studio Code, fitur dan style set yang diinginkan diaktifkan dengan menentukannya pada
editor.fontLigaturesdisettings.json
Pembuatan dan distribusi
- Monaspace dibuat dengan tujuan meningkatkan tampilan kode untuk semua developer
- GitHub Next memulai pekerjaan ini pada 2022 dan membuat font tersebut bersama Lettermatic
- Daftar kontributor, dokumentasi, dan file font dapat dilihat di repo Monaspace
- Unduhan tersedia di repositori GitHub
1 komentar
Opini Hacker News
Fitur Texture Healing menggunakan fitur OpenType dengan sangat cerdik, membuat kombinasi font monospace yang bermasalah terlihat jauh lebih baik tanpa merusak grid sama sekali.
Pendekatan sederhana mungkin membuat ligatur untuk pasangan huruf yang menyulitkan seperti
miataulm, tetapi di sini tampaknya ia memilih glyph alternatif yang mengisi ruang lebar tetap secara berbeda tergantung huruf di sekitarnya.Dalam praktiknya sulit digunakan. Lebar huruf berubah tergantung huruf setelahnya, sehingga teks melompat-lompat saat diketik. Keren saat dibaca, tetapi buruk saat ditulis.
Riley Cran, yang merancang teknik ini sebagai bagian dari proyek ini, dan seluruh tim https://lettermatic.com luar biasa.
Misalnya, pada
time_limitdi contoh dasar,mkedua memilikiidi kedua sisinya sehingga punya ruang untuk “tumbuh” lebih besar, dan jelas terlihat lebih lebar daripadampertama. Saya tidak yakin apakah ini bagus.Texture healing ini juga sudah merusak grid sel karakter yang sempurna, jadi dalam beberapa hal terasa seperti mengambil kelemahan dari kedua sisi.
Saya melihat ligatur yang mewah pun kurang lebih serupa. Kita bisa memakai karakter asli di kode sumber, dan Unicode didukung luas. Raku melakukannya begitu, tetapi agar benar-benar bersinar, dibutuhkan tata huruf yang lebih baik, termasuk font dengan lebar variabel.
Awalnya saya mengira ini “keluarga font monospace lain lagi, kelihatannya bagus,” tetapi setelah melihat texture healing, saya jadi benar-benar ingin mencobanya.
Saya sangat menyukai ide memakai gaya font yang berbeda untuk tiap penggunaan. Namun karena saya terutama memakai terminal, saya tidak tahu terminal mana yang mendukungnya, dan editor teks command-line sepertinya juga harus mendukungnya. Meski begitu, menurut saya ini ide yang hebat.
ESC[<10-19>madalah escape sequence untuk memilih font 0–9.Apakah benar-benar berfungsi adalah perkara lain. Saya memakai Alacritty dan tidak bisa menemukan apakah ini didukung, dan ketika mencobanya sendiri juga tidak menghasilkan apa-apa.
Saya penasaran bagaimana orang melihat contoh Mix & Match.
Radon, yang bergaya tulisan tangan, pada dasarnya tampak seperti italic sehingga cocok dengan font lain. Namun sisanya terlalu mirip dalam metrik dan sebagainya, sehingga contoh seperti “string dokumen yang berwibawa” atau “suara Copilot” cukup sulit dibedakan.
Sudah lama saya mencari alternatif terbuka untuk Operator Mono, dan berkat Mix & Match, akhirnya saya merasa ini mungkin bisa menjadi alternatif itu.
Pasti ada yang tidak suka, tetapi secara pribadi saya ingin mencobanya.
Varian lainnya tidak cukup berbeda untuk menyampaikan informasi.
Ligaturnya cukup banyak, tetapi bagi saya masih kurang. Sekarang
!=dan<=sudah terasa dasar, dan saya terus menyadari betapa bagusnya Fira Code saat menyesuaikan tinggi*pada*ptr, menempatkan:di tengah padaX:Y, atau menaikkanxpada0xFF.Saya hampir menyukai tampilan varian Krypton, tetapi garis horizontal pada huruf kecil
tterlalu rendah dibanding tinggi huruf seperti huruf kecilc. Jadi untuk saat ini sepertinya saya akan tetap memakai Fira Code, dan saya berniat mengecek lagi sekitar setahun setelah ada umpan balik pengguna untuk melihat apa yang berubah.*pada/**tidak sejajar.Ini terutama terlihat pada contoh seperti
// What if tentative ideas looked handwritten?dan/** * What if docstrings looked authoritative? */.Idenya bagus, tetapi saya penasaran kenapa kita tidak melihat lebih banyak font sempit seperti PragmataPro
Saya sudah memakainya hampir 10 tahun dan ingin ada lebih banyak pilihan di area ini, tetapi sepertinya tidak ada yang mau membuatnya sesempit itu. Berkeley Graphics sudah hampir setahun menggoda versi sempit dari Berkeley Mono, tetapi belum ada perkembangan apa pun
Di Monaspace ini juga ada slider lebar, tetapi rasanya titik awalnya “lebih lebar daripada PragmataPro” dan ujungnya menuju “sangat lebar sampai tidak masuk akal”. Saya penasaran kenapa tidak dibuat juga agar bisa turun ke versi yang sempit
Iosevka bawaan cukup mendekati, tetapi jarak antarbarisnya jauh lebih besar. Untungnya bisa dikustomisasi di pengaturan menjadi hampir sama dengan
leading = 1110. Nilai ini saya temukan lewat coba-cobaSaat mencari font paling sempit, saya menyadari Quinze adalah jawabannya. Kira-kira 20% lebih sempit daripada Iosevka atau M+. Saya tidak menemukan materi yang mudah untuk membandingkannya dengan PragmataPro, tetapi jika Iosevka adalah interpretasi gratis dari PragmataPro, maka Quinze juga mestinya lebih sempit
Dalam praktiknya, Quinze begitu sempit sampai ketika saya memaksanya dipakai untuk semua teks fixed-width di browser, keterbacaan justru memburuk, bukan membaik. Karena pada tinggi yang sama, ia terlihat jauh lebih kecil daripada font “normal”. Di lingkungan coding saya memakainya dengan ukuran font yang lebih besar, dan itu cocok dengan lebarnya yang sempit
Kekurangannya, Quinze sangat minimalis. Hampir hanya ASCII, tanpa ligature, dan tanpa kustomisasi. Bagi saya hal-hal itu tidak mengganggu
Meski begitu, bisa sesempit yang diinginkan
https://mplusfonts.github.io/
Di browser saya memakai “Bell MT” sebagai pengganti Times, dan juga memakainya sebagai font variable-width di emacs Org mode. Bagus, tetapi saya berharap ada versi yang lebih besar dan lebih sempit
Selain itu, salah satu font fixed-width sempit yang bagus adalah “The Sans Mono Condensed”, yang menjadi terkenal berkat buku-buku O’Reilly awal. Setelah itu O’Reilly beralih ke font fixed-width lain. Kekurangannya hanya punya set karakter Barat, tetapi saya sangat menyukainya
Saya terganggu karena simbol Radon di halaman ditulis Rd. Kalau Radon, seharusnya Rn
Radium adalah
Ra, Radon adalahRn, dan saya sampai mengecek ulang apakah benar ada unsur lain yang diawaliRdan memilikiddalam namanyaRhKarena mono flag tidak disetel, saya harus mencobanya dengan GTK2 gvim agar font bisa dimuat
Hasil
% ttfmono MonaspaceArgon-Regular.otfadalahmonospaced flag = 0, dan tertulis0 = variable-width, otherwise = monospacedSayangnya, sepertinya flag ini membuat ligature tidak aktif
Meski begitu, di vim yang dijalankan pada
styang sudah dipatch, saya bisa melihat ligature dan texture healing, dan saya benar-benar menyukainya. Saat mengetik, baris hanya bergerak sangat halus, dan ketika kursor melewatinya, misalnya karenamyang melebar, tidak ada bayangan sisa. Ini dirancang dengan baik untuk kodeKalau boleh meminta satu fitur, saya ingin bisa memilih beberapa varian, seperti nol bersudut dengan garis miring terbalik, atau mempertahankan
!pada ligature!=. Maksudnya bisa dilihat di sini: https://github.com/be5invis/Iosevka/blob/main/doc/stylistic-...https://st.suckless.org/patches/ligatures/
Saya memakai versi yang dirilis hari ini, jadi mungkin baru saja diperbaiki
Harus secara eksplisit mengaktifkan kotak centang “Show all fonts” agar font yang “bukan fixed-width” juga terlihat
Di sistem modern, sepertinya font untuk kode sekarang bisa melampaui font fixed-width
Saya sudah beberapa kali merekomendasikannya di sini, tetapi saya memakai Input Sans, font coding proportional-width
https://input.djr.com
Sepertinya di font ini kesalahan ketik bisa lebih sulit ditemukan
Saat memakai Vim lewat SSH, tidak masalah tetap memakai fixed-width, tetapi berkat Neovim sudah ada banyak frontend, namun hampir tidak ada yang tampaknya mendukung font proportional-width. Yang mendukung pun cenderung sangat lambat sampai menyakitkan untuk dipakai
>=menjadi≥? Saya mencoba pratinjau web di ponsel, tetapi mungkin itu keterbatasan Firefox AndroidSebagai referensi, ligature itu seperti ini: https://fonts.google.com/knowledge/glossary/ligature
Saya selalu bingung bagaimana 0 bertitik bisa menjadi semacam standar di font seperti ini. Saya selalu tertukar dengan 8, jadi jauh lebih suka 0 bergaris miring
Kalau ada varian seperti itu, saya pasti ingin mencoba font ini
Desainer font mungkin bisa menekankan sisi cembung pada 0 bertitik dan sisi cekung pada
8agar secara visual bisa dibedakan, tetapi saya tidak tahu apakah font ini melakukan ituTexture healing benar-benar ide yang cerdik dan indah
Saya juga ingin mencobanya pada tulisan tangan bahasa Mandarin yang sering dipakai dalam lebar tetap. Karakter yang umum tetapi sangat rapat, terutama karakter tradisional seperti
邊鐵餐廳臺藥機麵顧露樓幫讓, akan sangat diuntungkan jika bisa diberi ruang tambahan dan direntangkan lebih lebar