JuliaMono – a monospaced font for scientific and technical computing

michaelsbradley1 pts0 comments

The JuliaMono Typeface

JuliaMono - a monospaced font for scientific and technical computing<br>Introduction<br>Screenshots<br>Examples<br>Languages<br>Monospaced fonts<br>Unicode coverage<br>Contextual and stylistic alternates (aka “ligatures”)<br>Stylistic sets<br>Mathematical scriptsCalligraphy and Roundhand script<br>Ball-point script<br>Variation selectors

Customizing the fontUsing FontFreeze<br>Using pyftsubset

Private Use Areas (PUAs)<br>Thanks!<br>Footnotes

Introduction

JuliaMono is a monospaced typeface designed for programming and other text editing environments that require a wide range of specialist and technical Unicode characters. It was presented at the 2020 JuliaCon conference, which was to have been held in Lisbon, Portugal, but instead took place online.

JuliaMono is:

free (but you can buy me a ☕️!)

distributed with a liberal licence [1]

suitable for scientific and technical programming as well as for general purpose hacking

full of Unicode goodness

easy to use, simple, unquirky, friendly, and approachable

available for MacOS, Unix, and Windows [2]

This site uses JuliaMono for all text; if your browser can’t[3] (or you didn’t allow it to) download and display web fonts, you’ll only see the font in action in the images. You’ll see three large dots here when/if the font has been successfully downloaded:

(  )<br>To download and install JuliaMono, see the instructions here.

Screenshots

In VS Code.

In Vim:

In Emacs:

In Helix:

Examples

The following examples will be rendered in JuliaMono by your browser (if it’s successfully downloaded the web font versions), so I hope what you see here is close to what I made.

There are different weights of JuliaMono[4], so you can control the amount of contrast you have in your highlighted code:

JuliaMono-Light<br>JuliaMono-Regular<br>JuliaMono-Medium<br>JuliaMono-Bold<br>JuliaMono-ExtraBold<br>JuliaMono-Black<br>They all occupy the same amount of horizontal space, so they can be mixed without losing alignment.

The CSS markup applied to the following code uses another weight of the typeface, JuliaMono-Medium, which is a smidgeon bolder:

using Zygote: @adjoint<br>function ignore(f)<br>try return f()<br>catch e;<br>return 0;<br>end<br>end<br>@adjoint function ignore(f)<br>try Zygote._pullback(__context__, f)<br>catch e<br>0, ȳ -> nothing<br>end<br>end<br>Each weight has a matching italic variant: so JuliaMono-Light has JuliaMono-LightItalic, and so on.

JuliaMono-LightItalic<br>JuliaMono-RegularItalic<br>JuliaMono-MediumItalic<br>JuliaMono-BoldItalic<br>JuliaMono-ExtraBoldItalic<br>JuliaMono-BlackItalic<br>In the hands of a virtuoso (such as Dr Zygmunt Szpak, the author of the following Julia code fragment[5]), the range of available Unicode characters can be quite expressive:

function T(𝛉::AbstractArray,<br>𝒞::Tuple{AbstractArray,<br>Vararg{AbstractArray}},<br>𝒟::Tuple{AbstractArray, Vararg{AbstractArray}})<br>⊗ = kron<br>l = length(𝛉)<br>𝐈ₗ = SMatrix{l,l}(1.0I)<br>𝐈ₘ = SMatrix{1,1}(1.0I)<br>𝐓 = @SMatrix zeros(l,l)<br>N = length(𝒟[1])<br>ℳ, ℳʹ = 𝒟<br>Λ₁, Λ₂ = 𝒞<br>𝚲ₙ = @MMatrix zeros(4,4)<br>𝐞₁ = @SMatrix [1.0; 0.0; 0.0]<br>𝐞₂ = @SMatrix [0.0; 1.0; 0.0]<br>for n = 1:N<br>index = SVector(1,2)<br>𝚲ₙ[1:2,1:2] .= Λ₁[n][index,index]<br>𝚲ₙ[3:4,3:4] .= Λ₂[n][index,index]<br>𝐦 = hom(ℳ[n])<br>𝐦ʹ = hom(ℳʹ[n])<br>𝐔ₙ = (𝐦 ⊗ 𝐦ʹ)<br>∂ₓ𝐮ₙ = [(𝐞₁ ⊗ 𝐦ʹ) (𝐞₂ ⊗ 𝐦ʹ) (𝐦 ⊗ 𝐞₁) (𝐦 ⊗ 𝐞₂)]<br>𝐁ₙ = ∂ₓ𝐮ₙ * 𝚲ₙ * ∂ₓ𝐮ₙ'<br>𝚺ₙ = 𝛉' * 𝐁ₙ * 𝛉<br>𝚺ₙ⁻¹ = inv(𝚺ₙ)<br>𝐓₁ = @SMatrix zeros(Float64,l,l)<br>for k = 1:l<br>𝐞ₖ = 𝐈ₗ[:,k]<br>∂𝐞ₖ𝚺ₙ = (𝐈ₘ ⊗ 𝐞ₖ') * 𝐁ₙ * (𝐈ₘ ⊗ 𝛉) + (𝐈ₘ ⊗ 𝛉') * 𝐁ₙ * (𝐈ₘ ⊗ 𝐞ₖ)<br># Accumulating the result in 𝐓₁ allocates memory,<br># even though the two terms in the<br># summation are both SArrays.<br>𝐓₁ = 𝐓₁ + 𝐔ₙ * 𝚺ₙ⁻¹ * (∂𝐞ₖ𝚺ₙ) * 𝚺ₙ⁻¹ * 𝐔ₙ' * 𝛉 * 𝐞ₖ'<br>end<br>𝐓 = 𝐓 + 𝐓₁<br>end<br>𝐓<br>end<br>Languages

Here are some samples of various languages[6] :

Ancient Greek<br>Ἄδμηθ’, ὁρᾷς γὰρ τἀμὰ πράγμαθ’ ὡς ἔχει, λέξαι θέλω σοι πρὶν θανεῖν ἃ βούλομαι.

Armenian<br>Իմ օդաթիռը լի է օձաձկերով

Bulgarian<br>Я, пазачът Вальо уж бди, а скришом хапва кюфтенца зад щайгите.

Catalan<br>«Dóna amor que seràs feliç!». Això, il·lús company geniüt, ja és un lluït rètol blavís d’onze kWh.

Czech<br>Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů

Danish<br>Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Walther spillede på xylofon.

English<br>Sphinx of black quartz, judge my vow.

Estonian<br>Põdur Zagrebi tšellomängija-följetonist Ciqo külmetas kehvas garaažis

Finnish<br>Charles Darwin jammaili Åken hevixylofonilla Qatarin yöpub Zeligissä.

French<br>Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwi.

Georgian<br>სწრაფი ყავისფერი მელა ახტება ზარმაც ძაღლს.

German<br>Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich.

Greek<br>Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός.

Guarani<br>Hĩlandiagua kuñanguéra oho peteĩ saʼyju ypaʼũme Gavõme omboʼe hag̃ua ingyleñeʼẽ mitãnguérare neʼẽndyʼỹ.

Hungarian<br>Jó foxim és don Quijote húszwattos lámpánál ülve egy pár bűvös cipőt készít.

IPA<br>[ɢʷɯʔ.nas.doːŋ.kʰlja] [ŋan.ȵʑi̯wo.ɕi̯uĕn.ɣwa]

Icelandic<br>Kæmi ný öxi hér, ykist þjófum nú bæði víl og ádrepa.

Irish<br>Ċuaiġ bé ṁórṡáċ le...

juliamono smatrix font abstractarray index monospaced

Related Articles