Help with getting started - symbol/dingbats/pi and color font, please?

I'm a hobbyist font designer, working on a project that may never leave the realm of personal use, but, I'd like to future proof against the possibility that it will eventually end up being distributed (either just the font, or the whole thing). As a result, I'd like to make the font "properly."

The font itself falls into the category of a symbol (or maybe dingbat or even pi) font providing the symbols necessary to chart out knitting patterns. There are a number of existing fonts that already do this, of course, but each one has it's issues (ranging from an extremely restrictive personal use only license that technically prohibits me sending a pdf copy of a document I create using it to a friend and on up to not providing all the necessary glyphs or providing all the glyphs but spread over several different fonts that don't always play nicely together even though they are part of the same "family").

Enough background, on to my questions (and I'm sure I'll have followups):
  1. This needs to be a fixed width and fixed height font, which only works when character width=character height=line height. I've done a lot of reading, but, I'm still confused as to how I would set the metrics to make this work (not counting making sure the line height is properly set in whatever program the font is used in)? To illustrate, example B (image attached below) is a graph paper sketch showing 2 lines of 4 characters each
  2. The symbols to be used are known as the UK/American style, and as such are (generally) only used by English speakers. All examples that I have found place each symbol within the Latin codepoints, with the most commonly used symbols accessed from the basic English keyboard - such that if someone looks at a document without the font installed (or something like Arial selected), they'd see for example kppkkk\okkkppk. Is this an absolutely wrong thing to do? Do I have to use the PUA to be "correct"?
  3. I'd like to do something like this (see end of this question): with each glyph where the grey stays grey, but the black is recolorable using the word processor's (or other text entry program) text color controls and, if the user chooses to use a background color the background is filled in. Do the various color formats allow that (my personal use looks like I'll have to use COLR - if anyone uses XeLaTex and/or LuaHBTex can confirm that I'd appreciate it) or is built in modifiers like with getting skin tones on emojis the only way to make changes in colored fonts? 

(A is a small subset of commonly used symbols, C I decided not to ask about just yet, but all three are in one image I had prepared before deciding just how I wanted to ask my questions)


  • K Pease
    K Pease Posts: 182
    1: All you should need is for |Ascender|+|Descender| to equal the height of your square.
    2: For something so specialized, user convenience comes first. The Unicode Consortium is not going to break down your door if you make a k that does not look like a k. It is recommended, however, to fill out the rest of the Latin1 places you aren't using with dummy glyphs, or even all the appropriate glyphs (from an open-source libre face if you don't want to draw them yourself) so that it's less of a mystery when they appear.
  • Misti
    Misti Posts: 3
    Thank you K Pease! That simplifies things for me.

    Regarding question #3, I've confirmed I need to use COLR/CPAL, if that makes it easier to answer.

    To address the C sketch, sometime symbols need to crash into each other, and/or make use of small versions of some other symbols along the lines of diacritical marks. The C sketch shows the an example of the glyphs that make those up, and how they would be viewed. Zero width glyphs would be one way to handle this, placing the pseudo diacrits in diacrit codepoints MIGHT be another way (zero width is probably more correct and easier for the end user), but would they also work with COLR?
  • KP Mawhood
    KP Mawhood Posts: 295
    On spacing for C, a simple approach is to "overshoot the width" so that the joins align neatly together with no gaps. This is the same technique used in joined handwriting fonts, or to support connected scripts like Arabic.

    You may also be interested in shape components, which are also used for diacritics.

    If you find that all glyphs fit neatly into a boxes, I'd definitely consider defining the entire font as a "mono-spaced" font. A consistent zero-width might be appropriate, but only if you're not expecting the font to be used alongside regular text / explainers.

    Finally (and you may already be doing this), I would recommend using the same Latin code points for symbols as existing fonts. At least, if there is a common set of rules for knitting pattern fonts… or to follow the standard set by the most popular font.

    People quickly memorise which keys relate to which symbols, and using a standardised character set allows existing documents to be easily switched to your font. The latter would otherwise require character mapping, a time-consuming process.
  • Misti
    Misti Posts: 3
    Thank you KP

    I actually was planning on overshoots, for both the bounding boxes and the symbols that actually collide.
    I will look into shape components (I'll be using Birdfont since it runs on Linux, not sure if it makes use of them or not, exactly which version I'll be using depends on whether COLR fonts work the way I'm hoping they do). It sounds like they would be perfect.

    I'm not really sure mono-spaced will work, unless I'm misunderstanding how to set them up.

    If that box is the em square, with the red line being the baseline, MOST symbols will fit within the the blue area, but some will overshoot the blue guides, others will overshoot the red or green, and some will be only a small portion of the blue area. The important part is that every character is exactly the height and width of the black bounding box (not counting the intentional overshoots). Based on my understanding, monospacing won't give me that consistent 1 em width. But you did remind me of something I wasn't thinking about, it is important to be able to number each line on the right side, so will need to consider a solution (creating 0-9 glyphs just for this, and giving them a wide left bearing is a possibility).

    I AM planning on matching code points with existing fonts, but, off the top of my head only 6 are common across all of them - one of the many tasks I still have to do is make sure there aren't more, then choose codepoints for those that have been randomly placed in the past.
  • Thomas Phinney
    Thomas Phinney Posts: 2,778
    edited May 2022
    Misti said:

    The important part is that every character is exactly the height and width of the black bounding box (not counting the intentional overshoots). Based on my understanding, monospacing won't give me that consistent 1 em width.
    Monospacing will give you a consistent width of… whatever amount you choose. 1/2 an em and 3/5 of the em are the most common amounts, but certainly not required.

    As a counter-example, Google’s Material Symbols is a symbol/dingbat/pi font which is monospaced and uses exactly 1 em glyph advance widths. Seems like a fairly similar case to your font, at least in that regard. (Production and design on Material Symbols is my main gig these days.)