Greek Character Set Fonts
for VARKON

The Greeks, by peculiar good fortune and natural enlightenment of mind, had no classics but themselves.
- Charles Augustin Saint-Beuve

Contents

  1. For the Terminally Hasty
  2. Orientation
  3. The Fonts
    1. Four Fonts
    2. Font Naming Convention
    3. Font Revision Level
    4. Font Numbering in VARKON
    5. Greek Fonts Parallel to VARKON Font 0
  4. Greek Encoding Issues

1 - For the Terminally Hasty

Technical (not literary) Greek fonts for the VARKON parametric CAD system, derived from the public domain glyphs of Dr. Allen V. Hershey and others:

com-lemur-vkf-hershey-uniplex_cartographic_greek_vkf0.FNT
com-lemur-vkf-hershey-uniplex_normal_greek_vkf0.FNT
com-lemur-vkf-hershey-duplex_indexical_greek_vkf0.FNT
com-lemur-vkf-hershey-duplex_normal_greek_vkf0.FNT

To use one of these fonts, copy the font file into your $VARKON_ROOT/cnf/fnt directory and rename it to some valid but unused font number; e.g., "10.FNT". Then, in your MBS text statements, use the "tfont" attribute to specify this font; e.g.:

text(#1,vec(0,0),0,"some text": tfont=10);

2 - Orientation

This page appears in two locations on the Web:

1. As a part of the Notebook "Exploring Dr. Hershey's Typography," on Dr. David M. MacMillan's CircuitousRoot website. If you're already reading it as a part of this Notebook, it needs no further introduction.

2. As a standalone document, together with a number of font data files in the same directory, at: http://www.lemur.com/vkf/hershey/greek/index.html. (It is at "lemur.com" rather than much longer "circuitousroot.com" because "lemur.com" is easier to spell.) This is the "canonical" location for this file and for the font data it references.

If you've just encountered it at this second location, you may have been looking either for information on the glyphs of Dr. Allen V. Hershey (often called, inaccurately, "the Hershey fonts") or for fonts for the VARKON parametric CAD system. If you're interested in Dr. Hershey's work, please consult the full Notebook. If you're just looking for more fonts for VARKON, well, what's here is here. If you have further questions as to why what's here is here, please consult the full Notebook.

This page and these font files may also appear in other places. Everything here is either in the public domain or is licensed under the terms of the Free Software Foundations's GNU® Free Documentation License, as indicated. They may be copied anywhere the nature of the public domain or the terms of the GNU FDL (as appropriate to each type of material) permit. Courtesy, at least to living readers, would indicate that copies ought to contain a reference to the "canonical" location.

3 - The Fonts

3.1 - Four Fonts

The Hershey Greek glyphs are mapped here into four fonts. Each tries to approximate to some degree the default VARKON font 0. Within this set of four fonts, there are fonts for the "Uniplex Cartographic," "Uniplex Normal," "Duplex Indexical," and "Duplex Normal" ranges of Hershey glyphs. (The Hershey "Triplex" ranges of glyphs contain no Greek, alas.)

The VARKON fonts 2 and 3 implement an ISO® 8859-1 (Latin 1) mapping, fonts 4 and 5 implement a "PC" mapping, and font 6 (undocumented) implements ISO 8859-2 (Latin 2) In content, these differ from fonts 0 and 1 mostly in the non-ASCII positions (character codes greater than 127). Since I'm not mapping these positions, in order to keep open the possibility of the use of a UTF-8 encoding with these fonts (even though at this time VARKON does not use UTF-8), I haven't created fonts which parallel them.

For common punctuation, the primary difference between VARKON fonts 0/1 and fonts 2/3/4/5/6 is that the in these latter fonts the character sequences "[\]" and "{|}" appear in their "normal ASCII" positions after the uppercase and lowercase letters, while in fonts 0/1 they appear in the first block of character codes (positions 1, 2, 3, and 8, 9, 8, which are control code positions in ASCII). Characters in the difficult-to-type ranges 0-31 & 127 may be specified in MBS using the chr() function.

The four fonts come in a total of three sizes: "cartographic," "indexical," and "normal." The "cartographic" size is quite small (it was intended for use on maps, I believe). The "indexical" size is of moderate height (for use in super- and sub- script indexes, I suppose). The "normal" size is, well, normal. The "uniplex" fonts are drawn for the most part with single lines, while the "duplex" fonts are drawn with doubled lines. All of this is explained in much greater detail in the Notebook.

3.2 - Font Naming Convention

The fonts are named in a cumbersome but descriptive style modelled after that used in the Java® programming language. In this scheme, the name begins with our domain name (lemur.com) in reverse (thus, "com.lemur"; this is another reason to make the canonical location of these fonts lemur.com rather than circuitousroot.com), followed by the directory path to the font description file. The font description file itself is named with a subset of the full set of descriptive components for the Hershey glyphs out of which it is built and the VARKON font which it roughly mirrors.

For example:

com-lemur-vkf-hershey-uniplex_cartographic_greek_vkf0

Reading from left to right, the name starts out with our domain name, reversed: "com-lemur". As dots may be misinterpreted as implying filename suffixes, I've used the hyphen character instead. Then comes the fully qualified pathname to the font description file: "vkf-hershey", again using hyphens (rather than forward slashes, in this case). "vkf" stands for "VARKON Fonts," of course, and the "Hershey" is an optimistic indication that I might in the future do non-Hershey VARKON fonts. The font itself is taken from glyphs in ranges which are Uniplex, Cartographic, Taper0, and Lineface (see the section entitled "Organizing Principles within the Occidental Glyphs" in the Notebook "Exploring Dr. Hershey's Typography," for an explanation of these terms). This may be specified more concisely here by using just two of these: Uniplex (which is actually redundant for this particular font; there are no non-Uniplex Cartographic glyphs) and Cartographic. The font contains Greek characters, but otherwise is intended roughly to mirror VARKON font 0. Putting all of this together: "uniplex_cartographic_greek_vkf0". To distinguish spaces between words in this filename from directory levels and DNS separators as used earlier in the font name, I use an underscore rather than a hyphen here.

3.3 - Font Revision Level

Each font further has a revision level. This is simply noted in a comment in the font description file. There is no place in the VARKON font data file format for a revision field, so the only way to check on a revision number is to compare the .FNT file against those of known revision levels. To assist in this, I'll note the sha1sums of the .FNT files here. (I'm not using sha1sum (the Secure Hash Algorithm) out of any security considerations; it is simply a convenient checksum program.)

3.4 - Font Numbering in VARKON

Note: The font number for nonstandard VARKON fonts such as these is, itself, nonstandard. The suggestion from the VARKON developers is to start numbering them at 10. All of the images below were generated with the font set to be font number 10.

3.5 - Greek Fonts Parallel to VARKON Font 0

Font Name: com-lemur-vkf-hershey-uniplex_cartographic_greek_vkf0
Glyph Types: Hershey Uniplex Cartographic Taper0 Lineface
Characters Represented: Greek Uppercase and Lowercase, Arabic Digits, and Punctuation & Symbols approximating VARKON Font 0.
Revision: 0, sha1sum: a61563cc4f38854ef38e1c3c39c53651daec1eea
com-lemur-vkf-hershey-uniplex_cartographic_greek_vkf0
Font Description File: com-lemur-vkf-hershey-uniplex_cartographic_greek_vkf0
Font Data (.FNT) File: com-lemur-vkf-hershey-uniplex_cartographic_greek_vkf0.FNT
This image: com-lemur-vkf-hershey-uniplex_cartographic_greek_vkf0.png

Font Name: com-lemur-vkf-hershey-uniplex_normal_greek_vkf0
Glyph Types: Hershey Uniplex Normal Taper0 Lineface
Characters Represented: Greek Uppercase and Lowercase, Arabic Digits, and Punctuation & Symbols approximating VARKON Font 0.
Revision: 0, sha1sum: 677bec9eb2e1ced1e9246a84337e78d96b7d3fe1
com-lemur-vkf-hershey-uniplex_normal_greek_vkf0
Font Description File: com-lemur-vkf-hershey-uniplex_normal_greek_vkf0
Font Data (.FNT) File: com-lemur-vkf-hershey-uniplex_normal_greek_vkf0.FNT
This image: com-lemur-vkf-hershey-uniplex_normal_greek_vkf0.png

Font Name: com-lemur-vkf-hershey-duplex_indexical_greek_vkf0
Glyph Types: Hershey Duplex Indexical Taper0 Lineface
Characters Represented: Greek Uppercase and Lowercase, Arabic Digits, and Punctuation & Symbols approximating VARKON Font 0.
Revision: 0, sha1sum: e7fa02ac7851bc9efaa1de2cd5845022eca5edc8
com-lemur-vkf-hershey-duplex_indexical_greek_vkf0
Font Description File: com-lemur-vkf-hershey-duplex_indexical_greek_vkf0
Font Data (.FNT) File: com-lemur-vkf-hershey-duplex_indexical_greek_vkf0.FNT
This image: com-lemur-vkf-hershey-duplex_indexical_greek_vkf0.png

Font Name: com-lemur-vkf-hershey-duplex_normal_greek_vkf0
Glyph Types: Hershey Duplex Normal Taper0 Lineface
Characters Represented: Greek Uppercase and Lowercase, Arabic Digits, and Punctuation & Symbols approximating VARKON Font 0.
Revision: 0, sha1sum: b86c5237551636fbacb56533f208894a441397ef
com-lemur-vkf-hershey-duplex_normal_greek_vkf0
Font Description File: com-lemur-vkf-hershey-duplex_normal_greek_vkf0
Font Data (.FNT) File: com-lemur-vkf-hershey-duplex_normal_greek_vkf0.FNT
This image: com-lemur-vkf-hershey-duplex_normal_greek_vkf0.png

4 - Greek Encoding Issues

Encoding Greek can be complex and subtle, as the language employs several auxiliary marks, has characters which vary in form depending upon their position, and includes in its most general form several now archaic characters. The ordinary range of unadorned Greek characters employed in scientific and technical work, however, is much easier.

The most modern standard way to encode Greek characters is Unicode®/ISO-10646. However, the Unicode handling of Greek is not without difficulties. Initially it had only one range of Greek, suitable for modern "monotonic" Greek but not for the "polytonic" Greek of tradition. Its handling of monotonic Greek is based in turn on ISO-8859-7 (equivalent to Greek National Standard ELOT 928) (Unicode 1.0, Vol. 1, p. 42; RFC 1947). However, Unicode monotonic Greek puts the main alphabetic sequences starting at U+0391 (ALPHA) and U+03B1 (alpha). Since the Greek coding range starts at U+0370, this is equivalent to 0x21 (0d33) and 0x41 (0d65) (Unicode 1.0, Vol. 1, p. 200). This is out of sequence with the equivalent ASCII, which starts alphabetic characters with 0d65 (A) and 0d97 (a) Actually, Unicode maps lowercase Greek into the same relative position as uppercase Latin. Writing a VARKON string at an ASCII keyboard for the first four Greek letters (capital Α Β Γ Δ) starting at 0d33 would mean writing: !"#$ Writing the first four Greek letters in lowercase (α β γ δ) would require writing, in uppercase: ABCD

Instead, I'll employ a mapping which aligns the main alphabetic ASCII and Greek characters as much as possible. For example, the first four characters would be entered as "ABGD" or "abgd". This must necessarily involve some compromise.

The mapping of Latin to Greek characters here for α to ω is based in part on the "Beta Code" developed by David W. Packard and used by the Thesaurus Linguae Graecae (TLG®) (I am assuming that the Beta Code for γ is "G" rather than "C" as is published in The 2003 TLG Beta Code Manual.) Note that this mapping is not itself Beta Code, which is really quite a different thing.

Regrettably, the key mapping used in the "greek_utf-8" keymap for the vim text editor (I am a longtime user of vi/vim) differs from Beta Code. I chose to stick with a Beta Code like pattern here, though, because it is more generally known.

Here is the mapping of Greek used in these fonts.

ASCII Encoding Used Here Hershey Glyph Number
Character
(rendered by your browser; not a Hershey glyph)
Character Name Unicode ASCII decicmal ASCII hexadecimal ASCII character Uniplex Cartographic Uniplex Normal Duplex Indexical Duplex Normal
Α α alpha U+0391, U+03B1 65, 97 41, 61 A, a 27 527, 627 1027, 1127 2027, 2127
Β β beta U+0392, U+03B2 66, 98 42, 62 B, b 28 528, 628 1028, 1128 2028, 2128
Γ γ gamma U+0393, U+03B3 71, 103 47, 67 G, g 29 529, 629 1029, 1129 2029, 2129
Δ δ delta U+0394, U+03B4 68, 100 44, 64 D, d 30 530, 630 1030, 1130 2030, 2130
Ε ε epsilon U+0395, U+03B5 69, 101 45, 65 E, e 31 531, 631 1031, 1131 2031, 2131
Ζ ζ zeta U+0396, U+03B6 90, 122 5A, 7A Z, z 32 532, 632 1032, 1132 2032, 2132
Η η eta U+0397, U+03B7 72, 104 48, 68 H, h 33 533, 633 1033, 1133 2033, 2133
Θ n/a THETA, script theta U+0398, U+03D1 81, 113 51, 71 Q, q 34 534, 634 1034, 1134 2034, 2134
Ι ι iota U+0399, U+03B9 73, 105 49, 69 I, i 35 535, 635 1035, 1135 2035, 2135
Κ κ kappa U+039A, U+03BA 75, 107 4B, 6B K, k 36 536, 636 1036, 1136 2036, 2136
Λ λ lambda U+039B, U+03BB 76, 108 4C, 6C L, l 37 537, 637 1037, 1137 2037, 2137
Μ μ mu U+039C, U+03BC 77, 109 4D, 6D M, m 38 538, 638 1038, 1138 2038, 2138
Ν ν nu U+039D, U+03BD 78, 110 4E, 6E N, n 39 539, 639 1039, 1139 2039, 2139
Ξ ξ xi U+039E, U+03BE 67, 99 43, 63 C, c 40 540, 640 1040, 1140 2040, 2140
Ο ο omikron U+039F, U+03BF 79, 111 4F, 6F O, o 41 541, 641 1041, 1141 2041, 2141
Π π pi U+03A0, U+03C0 80, 112 50, 70 P, p 42 542, 642 1042, 1142 2042, 2142
Ρ ρ rho U+03A1, U+03C1 82, 114 52, 72 R, r 43 543, 643 1043, 1143 2043, 2143
Σ σ sigma U+03A3, U+03C3 83, 115 53, 73 S, s 44 544, 644 1044, 1144 2044, 2144
Τ τ tau U+03A4, U+03C4 84, 116 54, 74 T, r 45 545, 645 1045, 1145 2045, 2145
Υ υ upsilon U+03A5, U+03C5 85, 117 55, 75 U, u 46 546, 646 1046, 1146 2046, 2146
Φ [n/a] PHI, script phi U+03A6, U+03C6 70, 102 46, 66 F, f 47 547, 647 1047, 1147 2047, 2147
Χ χ chi U+03A7, U+03C7 88, 120 58, 78 X, x 48 548, 648 1048, 1148 2048, 2148
Ψ ψ psi U+03A8, U+03C8 89, 121 59, 79 Y, y 49 549, 649 1049, 1149 2049, 2149
Ω ω omega U+03A9, U+03C9 87, 119 57, 77 W, w 50 550, 650 1050, 1150 2050, 2150
[n/a] non-tailed delta none not used 183 683
[n/a] lunate or straight epsilon U+03F5 27 1B ESC 184 684 1184 2184
θ non-script lowercase theta U+03B8 28 1C FS 185 685 1185 2185
φ non-script lowercase phi U+03D5 29 1D RS 186 686 1186 2186
[n/a] final sigma U+03C2 30 1E US 187 687 1187 2187
[n/a] not sure none not used 2190 or 2197

The Hershey glyph ranges contain several alternative Greek glyphs. I've mapped four of these into positions 27, 28, 29, and 30 of the character code space. These positions are unused in VARKON fonts 0 and 1. (Positions j, J, v, and V are also unused in the present mapping, but using these raises compatibility issues with the (non-Beta Code) "greek_utf-8" keyboard mapping for the vim(1) text editor as well as other keyboard mappings on which it is based.)

The first of these glyphs, present only in the Cartographic and Uniplex Normal ranges, is a delta without the "tail," perhaps as might more easily be written on a blackboard. I don't use this glyph, although as the Greek fonts here are really suited only for technical rather than literary use, perhaps I should.

The second alternative glyph appears to be an alternative epsilon which more closely resembles the mathematical sign for "element of." I've mapped this to position 27. This might be the "straight" or "lunate" epsilon identified by Unicode as U+03F5.

The third of these is a non-script lowercase theta. I've mapped it to position 28. This is the Unicode (version 2.0 and later) U+03B8 character, which in current Unicode is part of the normal alphabetic run. In current Unicode, the script theta is now outside of the normal alphabetic run, at U+03D1, and is identified as a technical symbol. (These two were in switched positions in the original Unicode version 1.0.)

The fourth of these is a non-script lowercase phi. I've mapped it to position 29. This is the Unicode (version 2.0 and later) U+03C6 character, which in current Unicode is part of the normal alphabetic run. In current Unicode, the script theta is now outside of the normal alphabetic run, at U+03D5, and is identified as a technical symbol. (These two were in switched positions in the original Unicode version 1.0.)

The fifth of these is a conventional final sigma (Unicode U+03C2). I've mapped it to position 30.

Finally, the Duplex Indexical Taper1 Roman & Italic Ligatures and Extra Greek range (Range No. 71) contains a symbol at Hershey glyph number 2190 (in the GNU Plotutils distribution) or 2197 (in Hershey's "Calligraphy for Computers") which might be an alternative and more script-like rho. Or not. I've not mapped it.

In these Greek fonts, the non-ASCII positions from 128 to 255 (decimal) are unused. The use of characters in this space makes Unicode/UTF-8 migration difficult. Even though VARKON does not support Unicode/UTF-8, I'm omitting them in the hope that in the future it will.

Since Greek characters often are used for mathematics, a good argument could be made for mapping Hershey mathematical symbols into unused space in the character maps. Were this done, it might be useful to consult the character mapping used by Prof. Don Knuth in his TeXTM typesetting system, as that system is used by many mathematicians. I have not done this mapping, though.

In case you're lost, here is a slightly more extensive than usual set of links.

For further information on VARKON, see:
http://www.tech.oru.se/cad/varkon/

The next four links take you to the location in this Notebook one level above this present page and then upward to the CircuitousRoot home page. These links are fully qualified (not relative) URLs, so they should work from either version of this page (Notebook or canonical).
VARKON Fonts from the Hershey Glyphs
Exploring Dr. Hershey's Typography
CircuitousRoot Notebooks
CircuitousRoot

The final pair of links takes you to the "canonical" location for my VARKON/Hershey fonts:
http://www.lemur.com/vkf/hershey/index.html
and then to the lemur.com home page:
http://www.lemur.com/index.html