The creation of Nekophilia

Nekophilia was created upon the request of Melanie Kuhl to use a font resembling her handwriting in a comic project.

Philipp Böckmann joined her for digitisation and technical implementation and Nekophilia grew into a full-fledged font and eventually even got emoji support and its emoji ligature feature.

Analogue character design

The first step was drawing all the basic characters by hand and subsequently scanning them. This original character set contained all the capital and small letters of the latin alphabet as well as digits, German umlauts, German eszett and the most common special characters.

Scan of the first capital letters by Melanie Kuhl

Digitisation of the characters

Afterwards all characters were redrawn as vector images using Inkscape. Some small adjustments were being made and a lot of derived characters were created which had not been drawn by hand previously.

Creation of the letter "A" in Inkscape

Creation of the font

After creating the first set of glyphs (the latin alphabet) we started the creation of the font in Fontforge. This first step of creating a digital font proved to be surprisingly easy, although as usual the devil was in the details.

The creation of Nekophilia in FontForge

Additions and repeated improvements

Nekophilia went through several stages of additions and improvements. In the beginning only the classic ASCII character set and the German umlauts and eszett were implemented but soon this was expanded to the Windows-1252 character set. Following that, emojis and their ligatures were added.

The Faces of Nekophilia in Fontforge

Challenges & solutions

The creation of Nekophilia confronted us with some challenges. Below, we will describe some of these challenges as well as our ways of overcoming them.

Fundamental learning curve

While using Inkscape was - at least in part - not new to us, the use of a specialised software for creating digital fonts like FontForge was indeed very new and unfamiliar. Luckily the user community of FontForge is - thanks to its open source nature - not small, and we could find some useful online tutorials which helped us to learn how to use the software's more advanced features.

Kerning of a handwritten font

A constant challenge when creating Nekophilia was the correct adjustment of all the kerning values, as its characters have very different shapes due to them being handwritten.

After setting the kerning values pairwise in the beginning, we soon switched to class based kerning. This resulted in better performance of FontForge as well as less work when adding new glyphs and faster corrections.

Class based kerning in Fontforge

For testing the kerning with FontForge, we needed to generate certain character strings in a quick and easy way as soon as a new glyph was added.

Checking the kerning in FontForge

To generate these strings we wrote a small Python script. Feel free to use it however you wish (public domain):

# Put all the glyphs in here which you plan to configure

fontpool = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ" \

           "abcdefghijklmnopqrstuvwxyzäöüß" \

           "0123456789 ?€[]:  # $^!@'`´²³" \

           ";~_&|*/{}.%+§-°,<>()=\\\"‚‘"



# Replacements needed for use in Fontforge

repl_dict = {"/": "slash", "[": "bracketleft",

             "]": "bracketright",

             "^": "asciicircum", "`": "grave",

             "„": "quotedblbase",

             "”": "quotedblleft", "`": "grave",

             "´": "acute", "#": "numbersign",

             "\\": "backslash",

             "‚": "quotesinglbase",

             "‘": "quoteright"}



# Combine all glyphs with each other and

# use replacements for Fontforge if needed

out = [x + y + x for x in fontpool for y in fontpool]

out = [s for t in out for s in t]

out = ["/" + repl_dict[c] if str(c) in repl_dict.keys()

       else c for c in out]



# Generate the file kerning.txt containing all the

# combinations and additionally print them to the console

i = 0

s = ''

with open('kerning.txt', 'w') as writer:

    for e in out:

        s = s + e

        i = i + 1

        if i == len(fontpool * 3):

            i = 0

            print(s)

            print()

            writer.write(s + "\n\n\n")

            s = ''

Executing this script yields a set of character strings which can then be used in FontForge to check the kerning values and correct them if needed.

Generated character strings to check kerning in FontForge

Publication

After private use over a timespan of well over a year and its successful use in the initial comic project Nekophilia is now being published for the first time starting with version 1.21.

In all likelihood it will be expanded upon with further characters and features as well as kerning fixes and other corrections. If you should have any wishes or feedback to help us improve Nekophilia, feel free to send us an email to nekophilia@redneptun.net.

We hope you enjoy using Nekophilia! <3