diff options
Diffstat (limited to 'doc/context/sources/general/fonts/fonts/fonts-appendix.tex')
-rw-r--r-- | doc/context/sources/general/fonts/fonts/fonts-appendix.tex | 483 |
1 files changed, 0 insertions, 483 deletions
diff --git a/doc/context/sources/general/fonts/fonts/fonts-appendix.tex b/doc/context/sources/general/fonts/fonts/fonts-appendix.tex deleted file mode 100644 index 2eab26a93..000000000 --- a/doc/context/sources/general/fonts/fonts/fonts-appendix.tex +++ /dev/null @@ -1,483 +0,0 @@ -% language=uk - -\startcomponent fonts-appendix - -\environment fonts-environment - -\startchapter[title=Appendix][color=darkgray] - -\startsection[title=The \type {tfm} file,reference=fontdata:tfm] - -The (binary) \type {tfm} file is not human readable but can be turned into a -verbose property list which is not that hard to understand. - -\starttyping -tftopl texnansi-lmr10.tfm -\stoptyping - -Here is an excerpt from the data file. It starts with some general properties of -the font. The \type {O} means that the value is in octal while the \type {R} is a -real. Keep in mind that \TEX\ has no datatype \quote {real} so internally it is -just integers representing scaled points. - -\startnarrowtyping -(FAMILY LMROMAN10) -(FACE O 352) -(CODINGSCHEME LY1 ENCODING /TEX'N'ANSI, Y&Y/) -(DESIGNSIZE R 10.0) -(COMMENT DESIGNSIZE IS IN POINTS) -(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE) -(CHECKSUM O 4720464277) -\stopnarrowtyping - -A text font has the following font dimensions: - -\startnarrowtyping -(FONTDIMEN - (SLANT R 0.0) - (SPACE R 0.333333) - (STRETCH R 0.166667) - (SHRINK R 0.111112) - (XHEIGHT R 0.43055) - (QUAD R 1.0) - (EXTRASPACE R 0.111112) - ... -) -\stopnarrowtyping - -Kerns and ligatures are packed into a table that is basically a sequence of -labelled entries. Here we see the entry for the character \type {f} which has -three ligatures: \type {ff}, \type {fi} and \type {fl}. Because ligatures can be -chained, octal slot 13 will have ligature entries for \type {ffl} and \type -{ffi}. - -\startnarrowtyping -(LIGTABLE - ... - (LABEL C f) - (LIG C f O 13) - (LIG C i O 14) - (LIG C l O 10) - (KRN O 135 R 0.027779) - (KRN O 41 R 0.027779) - (KRN O 51 R 0.027779) - (KRN O 77 R 0.027779) - (KRN O 223 R 0.027779) - (KRN O 224 R 0.027779) - (KRN O 140 R 0.027779) - (KRN O 47 R 0.027779) - (STOP) - ... -) -\stopnarrowtyping - -Each character gets its own entry. In this case there is no depth involved so it -is not shown. The comment is just a repetition of the entry in the ligtable. - -\startnarrowtyping -(CHARACTER C f - (CHARWD R 0.30555) - (CHARHT R 0.688875) - (CHARIC R 0.079222) - (COMMENT - (LIG C f O 13) - (LIG C i O 14) - (LIG C l O 10) - (KRN O 135 R 0.027779) - (KRN O 41 R 0.027779) - (KRN O 51 R 0.027779) - (KRN O 77 R 0.027779) - (KRN O 223 R 0.027779) - (KRN O 224 R 0.027779) - (KRN O 140 R 0.027779) - (KRN O 47 R 0.027779) - ) -) -\stopnarrowtyping - -\stopsection - -\startsection[title=The \type {vf} file,reference=fontdata:vf] - -A virtual font specification file can be converted to a more readable format with -\type {vftovp}, for instance: - -\starttyping -vftovp eurm10.vf -\stoptyping - -The information in a \type {vf} file will be combined with the data in the -accompanying \type {tfm} file so the output looks similar: - -\startnarrowtyping -(VTITLE ) -(FAMILY UNSPECIFIED) -(FACE F MRR) -(CODINGSCHEME TEX MATH ITALIC) -(DESIGNSIZE R 10.0) -(COMMENT DESIGNSIZE IS IN POINTS) -(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE) -(CHECKSUM O 24401046203) -(SEVENBITSAFEFLAG TRUE) -\stopnarrowtyping - -Because this font is a math font there is no space defined. - -\startnarrowtyping -(FONTDIMEN - (SLANT R 0.0) - (SPACE R 0.0) - (STRETCH R 0.0) - (SHRINK R 0.0) - (XHEIGHT R 0.459) - (QUAD R 1.0) - (EXTRASPACE R 0.0) -) -\stopnarrowtyping - -A virtual font will take glyphs from another font and therefore there are entries -that refer to these fonts. In the following definition index \type {0} is created -(the \type {D} specifies a decimal entry). - -\startnarrowtyping -(MAPFONT D 0 - (FONTNAME eurm10) - (FONTCHECKSUM O 4276740471) - (FONTAT R 1.0) - (FONTDSIZE R 10.0) -) -(MAPFONT D 1 - (FONTNAME cmmi10) - (FONTCHECKSUM O 1350061076) - (FONTAT R 1.0) - (FONTDSIZE R 10.0) -) -\stopnarrowtyping - -The zero indexed font is the default, so in the following entry this font is -taken: - -\startnarrowtyping -(CHARACTER C W - (CHARWD R 0.986) - (CHARHT R 0.691) - (CHARIC R 0.056) - (COMMENT - (KRN O 177 R 0.056) - (KRN O 75 R -0.056) - (KRN O 73 R -0.083) - (KRN O 72 R -0.083) - ) - (MAP - (SETCHAR C W) - ) -) -\stopnarrowtyping - -The next specification is a combination of two other glyphs becoming a new -glyph. We see here that the \type {MAP} table is actually a sort of program: - -\startnarrowtyping -(CHARACTER O 200 - (CHARWD R 0.622) - (CHARHT R 0.691) - (MAP - (PUSH) - (MOVEDOWN R -0.18) - (MOVERIGHT R 0.015) - (SELECTFONT D 2) - (SETCHAR O 40) - (POP) - (SELECTFONT D 0) - (SETCHAR C h) - ) -) -\stopnarrowtyping - -The character information is also in the \type {tfm} companion and that is what -\TEX\ uses. The virtual information kicks in when the backend is creating the -page stream and embedding the fonts. - -\stopsection - -\startsection[title=The \type {map} file,reference=fontdata:map] - -In a map file each line maps a font name onto a file that contains the font -shapes in bitmap or outline format. For instance in the file \type -{lm-texnansi.map} we find the line: - -\startnarrowtyping -texnansi-lmr10 LMRoman10-Regular "enclmtexnansi ReEncodeFont" <lm-texnansi.enc <lmr10.pfb -\stopnarrowtyping - -The backend will fetch the glyph data from \type {lmf10.pfb} and use the given -encoding file to resolve indices to glyph names. A \type {pfb} file can contain -more than 256 entries so names are used to access the data. The string between -quotes is used for the encoding vector in the resulting file. - -The second entry in the line is the font name that will be used. This name is -also used to control subset behaviour. Multiple references to this name will be -collapsed into one inclusion when possible, thereby making the file as small as -possible. You better make sure that the names are unique for a specific font. - -In addition to this, there can be directives for extending the font (horizontal -stretch) and transforming it into a slanted variant. Both are to be used with -care. - -In \MKIV\ map files are only used for virtual math fonts and just as in \MKII\ we -load such files selectively. Users don't have to worry about this. - -\stopsection - -\startsection[title=The \type {enc} file,reference=fontdata:enc] - -For historic reasons, an encoding file is a blob of \POSTSCRIPT, probably because -it can be copied into the final output directly. Given that \TEX\ got extended -anyway, you can wonder why this information never ended up in an extended \type -{tfm} or \type {vf} file. It had definitely made the traditional process much -more robust. - -\startnarrowtyping -/enclmtexnansi[ -/.notdef -/Euro -... -/dotaccent -/hungarumlaut -/ogonek -... -/ffi -/ffl -/dotlessi -/dotlessj -/grave -... -/thorn -/ydieresis -] def -\stopnarrowtyping - -There are excactly 256 entries in such a vector and the names should match those -in a \type {pfb} file. - -\stopsection - -\startsection[title=The \type {afm} file,reference=fontdata:afm] - -Here we show an excerpt from an \type {afm} file that comes with Latin Modern -Roman. Just as with a \type {tfm} file we start with some general information. -However we don't need to convert the file as is it already in human readable -format. - -\startnarrowtyping -StartFontMetrics 2.0 -Comment Generated by MetaType1 (a MetaPost-based engine) -Comment Creation Date: 7th October 2009 -Notice Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS). -Comment Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG. -Comment METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki -Comment from GUST (http://www.gust.org.pl). -Comment This work is released under the GUST Font License. -Comment For the most recent version of this license see -Comment This work has the LPPL maintenance status `maintained'. -Comment The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. -Comment This work consists of the files listed in the MANIFEST-Latin-Modern.txt file. -FontName LMRoman10-Regular -FullName LMRoman10-Regular -FamilyName LMRoman10 -Weight Normal -ItalicAngle 0 -IsFixedPitch false -UnderlinePosition -146 -UnderlineThickness 40 -Version 2.004 -EncodingScheme FontSpecific -FontBBox -430 -290 1417 1127 -CapHeight 683.33333 -XHeight 430.55556 -Descender -194.44444 -Ascender 694.44444 -Comment PFM parameters: LMRoman10 0 0 0xEE -Comment TFM designsize: 10 (in points) -Comment TFM fontdimen 1: 0 (slant) -Comment TFM fontdimen 2: 3.33333 (space) -Comment TFM fontdimen 3: 1.66667 (space stretch) -Comment TFM fontdimen 4: 1.11111 (space shrink) -Comment TFM fontdimen 5: 4.3055 (xheight) -Comment TFM fontdimen 6: 10 (quad) -Comment TFM fontdimen 7: 1.11111 (extra space) -Comment TFM fontdimen 8: 6.833 (non-standard: uc height) -Comment TFM fontdimen 9: 6.9445 (non-standard: ascender) -Comment TFM fontdimen 10: 11.27 (non-standard: accented cap height) -Comment TFM fontdimen 11: 1.94443 (non-standard: descender depth) -Comment TFM fontdimen 12: 11.27 (non-standard: max height) -Comment TFM fontdimen 13: 2.9 (non-standard: max depth) -Comment TFM fontdimen 14: 5 (non-standard: digit width) -Comment TFM fontdimen 15: 0.88889 (non-standard: uc stem) -Comment TFM fontdimen 16: 12 (non-standard: baselineskip) -Comment TFM fontdimen 17: 0.69444 (non-standard: lc stem) -Comment TFM fontdimen 18: 0.55556 (non-standard: u, i.e., font unit) -Comment TFM fontdimen 19: 0.22223 (non-standard: overshoot) -Comment TFM fontdimen 20: 0.25 (non-standard: thin stem, hair) -Comment TFM fontdimen 21: 0.30556 (non-standard: cap thin stem, i.e., cap_hair) -Comment TFM headerbyte 9: FontSpecific -Comment TFM headerbyte 49: LMRoman10 -Comment TFM headerbyte 72: 234 -\stopnarrowtyping - -Watch the comments! Because \TEX\ needs a couple of so called fontdimens to be -set, the comments list the appropriate values. When a \type {tfm} file is -generated from an \type {afm} file, these values have to be used. - -Each character (or glyph) gets an entry. When we run out of indices i.e.\ pass -the 255 boundary (we start at 0) the index becomes \type {-1}. Only the width is -specified. The height and depth have to be derived from the bounding box for -which the specification starts with key \type {B}. - -\startnarrowtyping -StartCharMetrics 821 -... -C 32 ; WX 333.33333 ; N space ; B 0 0 0 0 ; -... -C 102 ; WX 305.55556 ; N f ; B 33 0 357 705 ; L f ff ; L i fi ; L k f_k ; L l fl ; -C 105 ; WX 277.77777 ; N i ; B 33 0 247 657 ; -C 108 ; WX 277.77777 ; N l ; B 33 0 255 694 ; -... -C -1 ; WX 500 ; N Acute ; B 181 493 388 656 ; -C -1 ; WX 500 ; N acute ; B 188 510 374 698 ; -C -1 ; WX 500 ; N acute.ts1 ; B 208 513 392 699 ; -... -EndCharMetrics -\stopnarrowtyping - -Watch how this font defines a space character and keep in mind that these fonts -date from the time that there was only one kind of space. The \type {L} entry -specifies a ligature. - -The names of glyphs are standardized, and even the \type {f_k} is conforming to -standards. This standardization makes it possible to go back from glyphs to characters -when copying text from a typeset document. - -The kern table is pretty large here and for a reason. First of all the file -defines 821 glyphs so the average amount of kerns per glyph is not that large. -But take a look at the \type {A}. Because the \type {Aacute} has the same shape -it kerns in a similar way. This means that ideally all combined characters end up -with the same value as their base glyph. However, in our case a bit more -selective approach is taken. The \type {Adieresis} has a different set of kerns, -probably to save space. It is for this reason that \OPENTYPE\ fonts have a model -of kern classes so that similar shapes can be treated as one when setting kerns. -You see a similar issue with ligatures, where often the right part of the shape -kerns the same as the (stand alone) first part of the shape does. - -\startnarrowtyping -StartKernData -StartKernPairs 9230 -... -KPX seven.prop hyphen.prop -37 -KPX seven.prop four.prop -74 -KPX seven.prop six.prop -18.5 -KPX hyphen.prop one.prop -37 -KPX hyphen.prop two.prop -18.5 -KPX hyphen.prop seven.prop -55.5 -KPX seven.oldstyle four.oldstyle -74 -KPX A T -83.333 -KPX Aacute T -83.333 -KPX Abreve T -83.333 -KPX Acircumflex T -83.333 -... -KPX Adieresis C -27.778 -... -KPX f bracketright 27.778 -KPX f exclam 27.778 -KPX f parenright 27.778 -KPX f question 27.778 -KPX f quotedblleft 27.778 -KPX f quotedblleft.cm 27.778 -KPX f quotedblright 27.778 -KPX f quotedblright.cm 27.778 -KPX f quoteleft 27.778 -KPX f quoteright 27.778 -... -KPX ff bracketright 27.778 -KPX ff exclam 27.778 -KPX ff parenright 27.778 -KPX ff question 27.778 -KPX ff quotedblleft 27.778 -KPX ff quotedblleft.cm 27.778 -KPX ff quotedblright 27.778 -KPX ff quotedblright.cm 27.778 -KPX ff quoteleft 27.778 -KPX ff quoteright 27.778 -... -EndKernPairs -EndKernData -\stopnarrowtyping - -If you look closely at the names, you will notice that some glyphs have a -variant. In \OPENTYPE\ fonts these variants are grouped in features like \type -{oldstyle}. The first part of such a name is still part of the standardization, -but the second part is up to the font designer. - -The file ends with: - -\startnarrowtyping -EndFontMetrics -\stopnarrowtyping - -\stopsection - -\startsection[title=The \type {otf} file,reference=fontdata:otf] - -In the \LUATEX\ manual you can find an overview of the raw \OTF\ format as -exposed in a \LUA\ table. The first decade of \LUATEX\ we used the built|-|in -loader but even then in \CONTEXT\ we didn't use that format directly but used it -to create a more compact and efficient table instead. The current release of -\CONTEXT\ uses its own loader written in \LUA, but the fundamentals have not -changed much. The tables are cached and can be read in at high speed. The -structure of the tables is unlikely to change much although more data might get -added. Although you can access the data it seldom makes sense to do so. Where -needed interfaces are provided. - -\stopsection - -\startsection[title=The \type {lfg} file,reference=fontdata:lua] - -We use the goodies file control what gets added, replaced, patched or manipulated -in a font. A goodie file permits us to go beyond what font provide by default. -The content of a goodie file differs per font. As we also use this for -experiments, not all entries that you find in such files are meant for users. - -\stopsection - -\startsection[title=Used fonts] - -The examples in the document depend on the fonts used. Here is a list of fonts used -to render this version. Because fonts might have changed in the meantime, some examples -might come out other than intended. - -\startluacode -local list = table.load("fonts-mkiv-usedfonts.lua") or { } - -local NC, NR = context.NC, context.NR - -for i=1,#list do - local l = list[i] - context.starttabulate { "|lB|l|" } - local basename = string.lower(file.basename(l.filename)) - local version = string.lower(l.version) - local filesize = (l.size or 0) / 1000 .. " Kb" - local instances = l.instances or 1 - NC() context("filename") NC() context.type(basename) NC() NR() - NC() context("instances") NC() context.type(instances) NC() NR() - NC() context("filesize") NC() context.type(filesize) NC() NR() - NC() context("version") NC() context.type(version) NC() NR() - context.stoptabulate() -end -\stopluacode - -\stopsection - -\stopchapter - -\stopcomponent - |