Suppose that I have a font in a modestly popular format (.ttf, .otf, etc.), and I have the legal rights to modify it. As it stands, it is a normal font with different charaters (glyphs?) varying in widths and spacings. How would I go about turning said font into a monospaced font (e.g. all characters are same dimensions, etc.)?

If possible, are there any automated tools that can do some of the guesswork for you? (The results don't have to be perfect.) The font may be large (many characters), and editing it could be tedious.

Any suggestions on the problem are much appreciated! :)

Disclaimer: Sorry if this is considered a simple howto, but Google has very little information on the subject, and for a programmer that doesn't deal with graphics or fonts much, it sure isn't simple. Also, sorry if my terminology is off... :P

  • What font software are you using if any? Fontlab? Fontforge? Commented Sep 24, 2012 at 23:53

3 Answers 3


If you don't already have any font editing software, the good news is that Fontforge is free and open source. The bad news is that it has a relatively high learning curve and a somewhat unusual user interface.

Basically, for a font to be considered monospace, every glyph has to be the same width, right down to the exact same number of units. This includes even glyphs that should normally be zero width, or a certain width (such as em spaces, em dashes, etc).

See the FAQ entry "How do I mark a font as monospaced?"

To actually edit the width of all glyphs at once in a batch:
Run FontForge.
Go to File > Open to load the font.
Go to Edit > Select > Glyphs with only References (while holding Shift).
Go to Edit > Select > Glyphs with only Splines (while holding Shift).
Go to Metrics > Set Width To: (insert value)* then select Center in Width.
Go to Field > Generate Fonts.

*The Width parameter depends on the font. Start with the value 1000: if there is too much space between the characters, decrease the value (by 50/100 pts); if there is not enough space, increase the value (by 50/100 pts).

  • I have the same question about converting a font to monospace. I understand that streatching would be bad,. What I am really looking for is a tool that will 1) find the widest glyph, 2) then instead of stretching the glyphs, I would like them centered in a field that width. Is there no tool to do that?
    – LambdaFox
    Commented Nov 16, 2014 at 16:39
  • @thomasrutter in the case of gnu unifont? (bitmap font where glyph are either 8 16 or 16 16) Commented Aug 4, 2015 at 17:23
  • Great answer. Editing directly from FontForge's UI didn't work for me though (it remained frozen for hours before I killed it). Instead I used the Python bindings. My goal was to use the monospacified font as a fallback, so bad kerning and bleeding were not big issues. I've detailed all this in a separate answer.
    – Clément
    Commented Dec 6, 2015 at 23:38
  • 1
    When I was first learning I made a lot of mono fonts by editing free fonts. Like any automation tool, it should only be a starting point: one should tweak the results as necessary. I found Fontographer to have the quickest learning curve. Select glyphs, go to Set Width under Metrics drop-down menu: set all glyphs to one average width (change later if needed) and finally, select Equalise Sidebearings also under Metrics menu to centre the glyphs in the em-square. Of course: study how others have overcome the difficulties particular to designing successful fixed width fonts.
    – Moscarda
    Commented Jul 11, 2016 at 5:13
  • Note that the link in this answer has gone stale: it is now fontforge.org/docs/faq.html#faq-monospace .
    – dgnuff
    Commented Jun 1, 2020 at 7:29

I came across this very problem trying to edit source code making heavy use of Unicode symbols. In that context, most of the source code is displayed in one monospace font, and a few symbols that are not covered by that font end up ruining alignment.

Though it's true that "monospacifying" a full font will yield horrible results (kerning, stroke widths, and general balance will all be entirely messed up), importing just a few symbols from a variable-width font into a monospace one yields decent results. The animation below shows using Consolas + Symbola as a fallback, versus using Consolas + a monospacified version of Symbola:

before and after monospacification

This is useless for advanced typography, but it's a nice compromise if you want to use symbols in your source code without ruining indentation. There are a number of caveats though:

  • Wide characters will bleed a bit onto neighbouring spaces (though they can be slightly shrunk to mitigate the issue)
  • Kerning will be bad (not too much of a problem, as it's only a fallback)

I've launched a GitHub project to handle this kind of font transformations automatically. It includes pre-generated fonts, and code using fontforge's Python bindings.

See also this emacs.se question.


thomasrutter offers more of a technical answer; I'll show you some principles of typography to discourage you from doing what you want to do unless you really need to.

Zoom in on an 'i' and an 'm' in Consolas or Courier and then Corbel or Verdana. Notice how different the letters have to be in order to make monospace work. To properly convert a font to monospace takes a lot of knowledge and work. The general idea of stretching fonts at all is frowned upon by any designer worth their salt, that's why even going from normal to a condensed variant takes a redraw of all of the glyphs.

So, look at Consolas vs. Corbel here and see how, when it's zoomed in, you can look at 1) spacing between letters, 2) consistency of stroke thickness, and 3) how each letter fits into its box. Look at the monospaced face (first) compared to the variable spaced face (second), then see the third and fourth to see what happens when you try to stretch and space to make it equal. For the fourth, I made the Ms squish to 75% to get in the box, but now they're much skinnier than the Is. that will be noticeable when it's used.

Comparison of monospace and variable space typefaces

So, in short: don't mess with typefaces; they're a lot more formidable than you'd expect!

  • 2
    Yes, stretching wide glyphs like M is not a good enough solution for exactly the reason Brendan points out: its vertical strokes become narrower than other letters and that looks bad. You have to actually edit the glyphs by hand, by selecting control points and moving them. Hopefully this gives the OP some idea of how doing this right (or nicely) is no small task. Especially if you want to have a somewhat decent glyph coverage. Commented Sep 26, 2012 at 0:06
  • @Brendan I think it should be different for a bitmap font where there is only two width of glyphs (In my case, glyphs are either 8 or 16 pixels wide) Commented Aug 4, 2015 at 17:21
  • +1; it's unrealistic to hope for a full automatic translation. In restricted contexts, though, what you showed in the third picture actually works well: if you want to import missing mathematical operators into a monospace font, that solution will look rather ok (I posted software to do this as a separate answer).
    – Clément
    Commented Dec 6, 2015 at 23:40
  • @Brendan i don't agree. the problem with all your examples, is that you didn't apply the same transformation to all glyphs
    – symbiont
    Commented Nov 10, 2019 at 12:53

Not the answer you're looking for? Browse other questions tagged or ask your own question.