CINXE.COM

Design Tools

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Design Tools</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="keywords" content="hinting,FontLab,alignment,stems,rasterization,rendering"> <link rel="stylesheet" href="/cms/assets/misc/css/default.css" type="text/css"> <link rel="stylesheet" href="/cms/sites/nrsi/themes/default/_css/default.css" type="text/css"> <style type="text/css"> <!-- A.GlobalNavLink, A.GlobalNavLink:visited { color: #FFFF00; font-size: smaller; font-weight: bold; } --> </style> <!-- 2023-05-25 PKM Added for Google Analytics 4 --> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-FVXRGR2Q9V"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-FVXRGR2Q9V'); </script> <title>Notes on Hinting with FontLab</title> </head> <body style="padding:0; margin:0"> <style> .archive_notice { /* box-shadow: black 0pt 4pt 20px -8px inset; */ display: block; background-color: orange; font-size: 12pt; font-style: normal; font-weight: lighter; line-height: 100%; padding: 5pt; text-align: center; width: auto; } form { display: none } .webform::before { content: "Forms are disabled on this static version of the site."; display: block; width: fit-content; } </style> <div class="archive_notice"> This is an archive of the original scripts.sil.org site, preserved as a historical reference. Some of the content is outdated. Please consult our other sites for more current information: <a href="https://software.sil.org">software.sil.org</a>, <a href="https://scriptsource.org">ScriptSource</a>, <a href="https://silnrsi.github.io/FDBP/">FDBP</a>, and <a href="https://silnrsi.github.io/silfontdev/">silfontdev</a> </div> <table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td style="background: #0068a6; padding-left:20; padding-top:10; white-space:nowrap;" width="110" valign="top"> <p><a href="http://www.sil.org/"> <!-- <img src="/cms/sites/nrsi/themes/default/_media/SIL_logo_left_column.gif" width="86" height="80" border="0"> --> <img src="/cms/sites/nrsi/themes/default/_media/SIL_Logo_TM_Blue_2014.png" width="85" height="95" border="0" alt=""> </a><br><br></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Dhome%26site_id%3Dnrsi.html">Home</a></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Dcontactus%26site_id%3Dnrsi.html">Contact Us</a></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Dgeneral%26site_id%3Dnrsi.html">General</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dbabel%26site_id%3Dnrsi.html">Initiative B@bel</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dwsi_guidelines%26site_id%3Dnrsi.html">WSI Guidelines</a></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Dencoding%26site_id%3Dnrsi.html">Encoding</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dencodingprinciples%26site_id%3Dnrsi.html">Principles</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dunicode%26site_id%3Dnrsi.html">Unicode</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dunicodetraining%26site_id%3Dnrsi.html">Training</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dunicodetutorials%26site_id%3Dnrsi.html">Tutorials</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dunicodepua%26site_id%3Dnrsi.html">PUA</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dconversion%26site_id%3Dnrsi.html">Conversion</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dencconvres%26site_id%3Dnrsi.html">Resources</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dconversionutilities%26site_id%3Dnrsi.html">Utilities</a></p> <p class="Cat4"><a class="Cat4" href="/cms/scripts/page.php%3Fid%3Dteckit%26site_id%3Dnrsi.html">TECkit</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dconversionmaps%26site_id%3Dnrsi.html">Maps</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dencodingresources%26site_id%3Dnrsi.html">Resources</a></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Dinput%26site_id%3Dnrsi.html">Input</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dinputprinciples%26site_id%3Dnrsi.html">Principles</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dinpututilities%26site_id%3Dnrsi.html">Utilities</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dinputtutorials%26site_id%3Dnrsi.html">Tutorials</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dinputresources%26site_id%3Dnrsi.html">Resources</a></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Dtypedesign%26site_id%3Dnrsi.html">Type Design</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dtypedesignprinciples%26site_id%3Dnrsi.html">Principles</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dfontdesigntools%26site_id%3Dnrsi.html">Design Tools</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dfontformats%26site_id%3Dnrsi.html">Formats</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Dtypedesignresources%26site_id%3Dnrsi.html">Resources</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dfontdownloads%26site_id%3Dnrsi.html">Font Downloads</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dfontdownloadsgentium%26site_id%3Dnrsi.html">Gentium</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dfontdownloadsdoulos%26site_id%3Dnrsi.html">Doulos</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dfontdownloadsipa%26site_id%3Dnrsi.html">IPA</a></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Drendering%26site_id%3Dnrsi.html">Rendering</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Drenderingprinciples%26site_id%3Dnrsi.html">Principles</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Drenderingtechnologies%26site_id%3Dnrsi.html">Technologies</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Drenderingopentype%26site_id%3Dnrsi.html">OpenType</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Drenderinggraphite%26site_id%3Dnrsi.html">Graphite</a></p> <p class="Cat2"><a class="Cat2" href="/cms/scripts/page.php%3Fid%3Drenderingresources%26site_id%3Dnrsi.html">Resources</a></p> <p class="Cat3"><a class="Cat3" href="/cms/scripts/page.php%3Fid%3Dfontfaq%26site_id%3Dnrsi.html">Font FAQ</a></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Dlinks%26site_id%3Dnrsi.html">Links</a></p> <p class="Cat1"><a class="Cat1" href="/cms/scripts/page.php%3Fid%3Dglossary%26site_id%3Dnrsi.html">Glossary</a></p> <br> </td> <td valign="top" style="padding:0" xwidth="650"> <div style="background: #6699CC url(/cms/sites/nrsi/themes/default/_media/home_banner_gradient.gif) no-repeat right; padding:0 0 0 25; height:36px; margin:0; color:#FFFFFF;"> <p style="font-family:Times New Roman; font-size:25px; color:#FFFFFF; padding:10 0 0 0; margin:0 0 0 0">Computers & Writing Systems</p> </div> <div style="padding:0 0 0 0; background-color:#000000; color:#FFFFFF"> <table width='100%'> <tr> <td style="padding: 0 0 0 25px"><a class="GlobalNavLink" href="http://www.sil.org/">SIL HOME</a> | <a class="GlobalNavLink" href="https://software.sil.org/products/">SIL SOFTWARE</a> | <a class="GlobalNavLink" href="/support.html">SUPPORT</a> | <a class="GlobalNavLink" href="https://www.givedirect.org/donate/?cid=13536">DONATE</a> | <a class="GlobalNavLink" href="/privacy-policy.html">PRIVACY POLICY</a> </td> <td align='right' width='20%'> <script async src="https://cse.google.com/cse.js?cx=0760bf09a6bff4b0c"></script><style>.gsc-control-cse {padding: 0.6em; min-width: 10em; width: 18em; max-width: 20em} form.gsc-search-box {display: unset;}</style><div class="gcse-search"></div> </td> </tr> </table> </div> <div style="padding:0 25 25 25"> <p class='CategoryPath'>You are here: <a class='CategoryPath' href='/cms/scripts/page.php%3Fid%3Dtypedesign%26site_id%3Dnrsi.html'>Type Design</a> &gt; <a class='CategoryPath' href='/cms/scripts/page.php%3Fid%3Dfontdesigntools%26site_id%3Dnrsi.html'>Design Tools</a><br> Short URL: <a href='/notesonhintingwithfl.html'>https://scripts.sil.org/NotesOnHintingWithFL</a></p> <!-- --> <!-- <div class='Warning' > <p class='Warning_heading' > Site unavailability </p> <p> Due to essential repairs, this website may be unavailable at times during September 6 (Tue) and 7 (Wed). We apologize for the inconvenience. </p> </div> --> <h1>Notes on Hinting with FontLab </h1> <p> <span class='author_date_hits'>Victor Gaultney, 2003-02-21</span></p><p>Most fonts look great when printed, but look terrible on screen. It takes special instructions, built into the font, to improve screen appearance. These "hints" tell the computer how to be consistent when drawing strokes and individual features. Font development programs, such as <a href='http://www.fontlab.com/html/fontlab.html' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;FontLab</a>, will automatically generate these hints, but the results are not always satisfying. Some of these also include the ability to manually set hints.</p> <p>Hinting a font manually can be a long, tedious, frustrating process. It doesn't take much effort, however, to improve upon FontLab's autohinting. You can also tweak individual glyphs while allowing FontLab to deal with the rest.</p> <p>The key to successful hinting is the correct setting of alignment zones and stem values. Once those are in place, even FontLab's automatic hinting works better. Then you can go in and play with those glyphs that really bother you.</p> <p>This article is intended to help you maximize FontLab's autohinting behavior. It is not a full tutorial on hinting strategies or techniques, and doesn't get into details of when it's better to use an align instead of a link, etc. There are some documents that do discuss this. See the list of links at the end of this article.</p> <p>Screenshots are from FontLab 4.5 for Macintosh, but are not substantially different from what you'd see in Windows. Examples are from Roman fonts, but the same concepts can be applied to non-Roman ones as well.</p> <p>If you have comments, corrections, additions, etc. please use the annotation feature at the bottom of this article to add them. Thank you!</p> <hr align='left' size='1'> <p></p> <p>Recent updates:</p> <ul class='dListUnordered'> <li>2003-03-14 Added note on <a href='#NoteEliminate'>eliminating hints before autohinting</a></li> <li>2003-03-14 Added paragraph on <a href='#NoteHintingZones'>hinting alignment zones</a></li> <li>2003-03-14 Added alternate technique for <a href='#NoteSizeTest'>testing at various PPM sizes</a></li> </ul> <hr align='left' size='1'> <p></p> <p class='TOCTitle'></p> <div class='TOC'> <ol> <li class='TOC1'><a href='#81252cd5'>Hinting process in summary</a></li> <li class='TOC1'><a href='#0a4bb09b'>Detailed steps</a> <ol> <li class='TOC2'><a href='#4f3e0ec6'>1) Prepare the font for hinting</a></li> <li class='TOC2'><a href='#2ec2596e'>2) Audit and set Alignment Zones</a></li> <li class='TOC2'><a href='#3676ef57'>3) Audit and determine stem values</a></li> <li class='TOC2'><a href='#b2a94909'>4) Set Type 1 values</a></li> <li class='TOC2'><a href='#8e5889b9'>5) Convert glyphs to TrueType</a></li> <li class='TOC2'><a href='#5b943e6b'>6) Set TrueType stem values</a></li> <li class='TOC2'><a href='#1bd27eaa'>7) Test results</a></li> <li class='TOC2'><a href='#05d61689'>8) Manually revise hints on specific glyphs</a></li> </ol> </li> <li class='TOC1'><a href='#e605e0de'>Sources for information on hinting</a> <ol> <li class='TOC2'><a href='#50fb2693'>Introductory articles</a></li> <li class='TOC2'><a href='#9a3fbd1c'>In-depth Tutorials</a></li> <li class='TOC2'><a href='#c5160bba'>Technical Reference</a></li> <li class='TOC2'><a href='#5f027f1f'>Hinting Tools</a></li> </ol> </li> <li class='TOC1'><a href='#0407c271'>Acknowledgements</a></li> </ol> </div> <hr align='left' size='1'> <p></p> <a name='81252cd5'></a> <h2>Hinting process in summary</h2> <p>The process described below is a general outline for hinting a font in FontLab. This assumes that you've been drawing your glyphs using PostScript B茅zier curves, but want to deliver a hinted TrueType font. Disclaimer: this process seems to work, although I will admit that I don't understand why in every case. There are some steps that mystify me, but they seem to work!</p> <ol type='1' class='dListDecimal'> <li>Prepare the font for hinting. </li> <li>Audit and set Type 1 alignment zones.</li> <li>Audit stem widths and plan your TrueType stem values.</li> <li>Set Type 1 stem values and save font!</li> <li>Convert glyphs to TrueType, save as something else!</li> <li>Set TrueType stem values.</li> <li>Test results.</li> <li>Manually revise hinting on glyphs that need it.</li> </ol> <a name='0a4bb09b'></a> <h2>Detailed steps</h2> <a name='4f3e0ec6'></a> <h3>1) Prepare the font for hinting</h3> <p>The pain you will feel in hinting is directly related to how consistently the glyphs have been designed. Care invested in checking stroke widths, heights, depths, etc. will pay off in better autohinting and easier manual tweaking. Be careful, though - you never want to sacrifice an important glyph feature for the sake of consistency. But despite how consistent you are, sometimes the glyphs just look terrible on screen. But that's why you're reading this article.</p> <p>Finish glyph design before starting to hint. Do not attempt to hint a font while you're still adjusting glyph shapes. You can certainly set alignment zones and stem widths during design, but be sure that you don't later depart from those parameters for new glyphs. Most glyph design is done with PostScript curves. Most hinting techniques, however, require your glyphs to be converted to TrueType curves, and it is impossible to convert them back to PostScript without destroying the hints. Note: You can retain the PostScript curves by copying them to the mask layer.</p> <a name='2ec2596e'></a> <h3>2) Audit and set Alignment Zones</h3> <p>The purpose of this step is to look at the actual coordinates of your glyph outlines, so you can tell the computer how to draw them at low resolutions. There are features in font design programs (including FontLab) that do this auditing for you, but their guesses are usually very poor. You can do the same in two hours or so and with fantastically better results. This is especially true for non-roman scripts.</p> <p>Alignment zones are ranges of vertical (y) coordinate values. When glyph coordinates (the top of the <span class='Em'>o</span>, for example) fall within the range they will be hinted to line up with other glyphs who have values in the same range. Alignment zones are actually a PostScript, not TrueType, feature, but FontLab's TrueType autohinting routines are based upon these settings. If zones are set incorrectly it can cause text to look like a cobblestone path. In the example below, the first line in each pair has incorrectly set alignment zones. The second is from an identical font after the zones have been corrected.</p> <div class='mediacontainer'> <img src='/cms/scripts/../sites/nrsi/media/NHFLAlignZonesM.png' height='71' width='542'> <p class='Caption' style='width: 542'>Example of font with incorrectly set alignment zones (top) and with corrected zones (bottom).</p> </div> <br clear='left'> <br> <p></p> <p>FontLab displays alignment zones as blue horizontal stripes in the Glyph Window. To show them, choose <span class='menu_choice'>View/Show Layers/Alignment Zones</span>. If no zones appear after using this menu selection, the zones may not yet be set. Each blue stripe shows the lower and upper limit of the zone.</p> <div class='mediacontainer'> <img src='/cms/scripts/../sites/nrsi/media/NHFLAlignZonesEx.png' height='291' width='699'> <p class='Caption' style='width: 699'>Alignment zones in FontLab</p> </div> <br clear='left'> <br> <p></p> <p>A zone is needed for each vertical level where glyphs ought to align. For example, in a roman font there are typically five zones, as illustrated above. Non-roman fonts may require more or less, depending on the script. </p> <br clear='left'> <br> <p></p> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/NHFLAlignNodes.png", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=637,height=715");'><img src='/cms/sites/nrsi/media/NHFLAlignNodes_100x111.png' width='100' height='111'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> </div> <p><span class='Runin'>Step 1:</span> Choose a representative set of glyphs and analyze their heights. For many fonts, this would include every glyph. Look at each glyph and write down the vertical coordinates for those points that should align, as in the following example.</p> <br clear='left'> <br> <p></p> <p><span class='Runin'>Step 2:</span> Gather the coordinates from all glyphs into appropriate zones. For example, if the set of coordinates near the x-height level is (916, 922, 923, 935, 940, 944), then the zone would be [916, 944]. Resist the temptation to make your alignment zones very wide. If you find an important point at (850), do not add it to the above range, as it might distort that single glyph. It would be better to create a new zone. Note that in the figure above, a zone is set for ascenders, even though the zone consists of a single unit height. This will ensure that all ascenders align well.</p> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/NHFLAlignFontInfo.png", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=841,height=518");'><img src='/cms/sites/nrsi/media/NHFLAlignFontInfo_100x58.png' width='100' height='58'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> </div> <p><span class='Runin'>Step 3:</span> Enter the coordinates into FontLab. Choose <span class='menu_choice'>File/Font Info/Hinting Settings</span>. Consult the FontLab manual for information on adding specific zones. "Primary zones" are typically ones that are at or above the baseline zone area. Other zones (including the descender zone) should be added as "Secondary zones". Then you're done!</p> <br clear='left'> <br> <p></p> <a name='3676ef57'></a> <h3>3) Audit and determine stem values</h3> <p>The widths of basic vertical and horizontal strokes (called stems) need to be consistent for a font to be readable. Vertical stem widths in the letters <span class='Em'>h</span> <span class='Em'>l</span> <span class='Em'>m</span> <span class='Em'>n</span> should appear to be the same width at all resolutions. Careful design will provide this consistency, but identical widths cannot always be achieved (especially in the case of curved strokes). [Note: "Vertical" stems are those that go up and down, but their width is measured as the change in <span class='Em'>horizontal</span> (X-coordinate) units. Strange, I know. The reverse is true for horizontal stems]</p> <p>The process of auditing stems is similar to that for alignment zones: carefully review each glyph, write down the important measurements, then analyze those widths to determine the optimum stem values. This is the same process whether or not you're using FontLab, but some illustrations from FontLab can be helpful.</p> <div class='mediacontainer'> <img src='/cms/scripts/../sites/nrsi/media/FLTTStemControl.png' height='432' width='562'> <p class='Caption' style='width: 562'>TrueType hinting stem values</p> </div> <br clear='left'> <br> <p></p> <p>Here is an example of a list of vertical stem values from FontLab's TrueType hinting controls. We'll tell you how to get here later. Each defined value has a name (which you set), a standard width, and specifies at which PPM (pixel-per-em) sizes that stems of that width should jump to 2, 3, 4, 5 and six pixels wide. For example, stems that are 86 units wide will appear as a single pixel line until the PPM goes to 36, at which point the stems will become two pixels wide. At 60, the stems become three pixels wide, etc. [Note: PPM is not the same as point size, but you'll have to look elsewhere for an explanation of that.] To make this work you need to know what your stem widths are.</p> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/NHFLStems.png", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=849,height=526");'><img src='/cms/sites/nrsi/media/NHFLStems_100x59.png' width='100' height='59'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> </div> <p>This example shows vertical (red) and horizontal (green) stems for a rather inconsistent font. Stems are always measured from point-to-point (never curve to curve), even if the points are not aligned with one another. Remember that the vertical stem widths are measured as changes in the horizontal direction. Even though the points for the right hand (curved) stem on the <span class='Em'>p</span> are not aligned, measure only the change in the horizontal direction, not the actual distance between the points. In this example the points are 186 units apart, but the horizontal change is only 160 units.</p> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/NHFLVstrStems.jpeg", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=428,height=280");'><img src='/cms/sites/nrsi/media/NHFLVstrStems_100x60.jpeg' width='100' height='60'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> </div> <p><span class='Runin'>Step 1:</span> Start with vertical stem widths. Walk through the glyphs and write down the unit widths you find, and which glyphs use them (and exactly which part of the glyph uses it). The example image shows how I collect this data. I separate the straight stems from the curved, and the upper case from the lower case. This is not necessary, but can help in analyzing the data later.</p> <br clear='left'> <br> <p></p> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/FLAutohintOpts.png", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=476,height=366");'><img src='/cms/sites/nrsi/media/FLAutohintOpts_100x73.png' width='100' height='73'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> </div> <p><span class='Runin'>Step 2:</span> Organize the stems into groups. Sorry, but this requires some additional technical information. FontLab's autohinting routines analyze each glyph and try to match each stem width with one of the values that have been set in the TrueType hinting controls. The precision of this matching is controllable through the <span class='Em'>Autohinting Options</span> dialog. Choose <span class='menu_choice'>FontLab 4/Preferences/Autohinting Options</span>. The <span class='Em'>Single link attachement precision</span> setting determines how many units of variation FontLab will allow when assigning a stem to a value. For example, if one of the font's preset stem values is 168, and if the precision setting is set to <span class='Literal'>3</span>, then all stems that are of widths 165-171 will be assigned to that value, but not stems that are 164 or 172 units wide.</p> <br clear='left'> <br> <p></p> <div class='mediacontainer'> <img src='/cms/scripts/../sites/nrsi/media/NHFLstemclusters.jpeg' height='104' width='544'> <p class='Caption' style='width: 544'>Clustering of stem widths into values</p> </div> <br clear='left'> <br> <p></p> <p>As you trawl through your font, you will hopefully see patterns in stem widths, and how much precision will be necessary. With this in mind, write down the clusters of widths that should appear similar at low resolutions. In the example above, widths of 67-72 units are clustered for hinting purposes and assigned a common value of 69. With precision set at 3, this will assign all stems that have widths of 66-72 units to that value (which is what you want). Whiteboards are great for this! One caveat: I'm not exactly sure what would happen if you created multiple values that overlap ranges, like 96 and 98 (with precision 3). Which value would width 97 be assigned to? I don't know, so I avoid such overlaps.</p> <p>You should now have a list of vertical stem values that cover the important stem widths of your font. You'll use this in Step 4.</p> <p><span class='Runin'>Step 3:</span> Repeat the process for horizontal stems, including serifs. Now you should have two lists of values, X (for vertical values) and Y (for horizontal values). Here is an extended example:</p> <pre class='code'><span> </span><span> </span><span> </span><span> </span>Single link attachement precision = 3 <span> </span><span> </span><span> </span><span> </span> <span> </span><span> </span><span> </span><span> </span>Vertical stems (X values) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>36<span> </span><span> </span><span> </span><span> </span>(33-39) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>89<span> </span><span> </span><span> </span><span> </span>(86-91) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>162<span> </span><span> </span><span> </span><span> </span>(160-164) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>169<span> </span><span> </span><span> </span><span> </span>(167-171) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>175<span> </span><span> </span><span> </span><span> </span>(173-177) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>186<span> </span><span> </span><span> </span><span> </span>(185-187) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>193<span> </span><span> </span><span> </span><span> </span>(190-195) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>206<span> </span><span> </span><span> </span><span> </span>(203-209) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>213<span> </span><span> </span><span> </span><span> </span>(210 - should track with 228) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>228<span> </span><span> </span><span> </span><span> </span>(225-231) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span> <span> </span><span> </span><span> </span><span> </span>Horizontal stems (Y values) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>31<span> </span><span> </span><span> </span><span> </span>(31) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>37<span> </span><span> </span><span> </span><span> </span>(35-38) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>48<span> </span><span> </span><span> </span><span> </span>(47-50) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>56<span> </span><span> </span><span> </span><span> </span>(56-59) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>63<span> </span><span> </span><span> </span><span> </span>(61-65 - should track with 56) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>69<span> </span><span> </span><span> </span><span> </span>(67-72) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>76<span> </span><span> </span><span> </span><span> </span>(73-79) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>86<span> </span><span> </span><span> </span><span> </span>(83-89) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>116<span> </span><span> </span><span> </span><span> </span>(113-118) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>123<span> </span><span> </span><span> </span><span> </span>(120-126 - should track with 116) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>141<span> </span><span> </span><span> </span><span> </span>(139-143) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>163<span> </span><span> </span><span> </span><span> </span>(160-166) <span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>204<span> </span><span> </span><span> </span><span> </span>(203-205)</pre><p>Here the stems are listed in order, with the stem value on the left and the widths it will need to cover on the right in parentheses. There are a few things to note. Vertical stem 213 is intended for the sole use of stems that are 210 units wide, but I chose the higher number to avoid overlapping precision zones. <span class='Em'>Again - I'm not sure if this is necessary.</span> </p> <p>Where it says "should track with..." it means that that stem should track with the other one mentioned. Horizontal stem 63 should track with stem 56, meaning that the two should always appear the same width. You'll see how to enforce that later.</p> <a name='b2a94909'></a> <h3>4) Set Type 1 values</h3> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/FLType1stems.png", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=841,height=518");'><img src='/cms/sites/nrsi/media/FLType1stems_100x58.png' width='100' height='58'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> </div> <p>Enter your values from the above steps into the FontLab Type 1 hinting information dialog. Choose <span class='menu_choice'>File/Font Info/Hinting Settings/Standard stems (T1 hinting)</span>. Enter the V and H stems here. There is a limit of 12 stems widths for each direction (for Type 1). If you have more than 12 values, you can add them later in the TrueType hinting controls.</p> <br clear='left'> <br> <p></p> <p>Now save your font! This should always be kept as your pre-TrueType-hinting version.</p> <a name='8e5889b9'></a> <h3>5) Convert glyphs to TrueType</h3> <div class='Warning'><p class='Warning_heading'>Warning!</p><p>These next steps change the actual outlines of your glyphs, so please be sure you have saved an archive copy.</p> </div><p>The next step is to convert your glyphs to TrueType outlines. Wait - You may not even need to do this. First complete the steps above, then generate a font. It will probably look a lot better on screen already. That may be good enough for you. If not, read on.</p> <p>If you do want more control, conversion is necessary. You don't have to convert every glyph, though. If you only wish to adjust the hints on a particular subset of glyphs (such as the basic 26 uc and lc letters), only convert those.</p> <p>One more safety step. For each glyph that you are about to convert, open the glyph window, clear the mask layer (<span class='menu_choice'>Tools/Templates/Clear Mask</span>) and copy the outline to the mask (<span class='menu_choice'>Tools/Templates/Copy to Mask</span>). This will retain your B茅zier curves in the mask.</p> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/FLTransformTT.png", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=626,height=535");'><img src='/cms/sites/nrsi/media/FLTransformTT_100x83.png' width='100' height='83'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> </div> <p>Finally, select the glyphs you wish to convert in the Font window, choose <span class='menu_choice'>Tools/Transform Range</span>, set the <span class='menu_choice'>Transformation Range</span> to <span class='menu_choice'>Selected characters</span>. Ignore the <span class='menu_choice'>Transformation program</span> setting. In the left pane click the triangle beside <span class='menu_choice'>Contour</span>, scroll down and choose <span class='menu_choice'>Convert to TrueType</span>. Press the right arrow button. The right pane should now say <span class='menu_choice'>Convert to TrueType</span> (and nothing else). Finally, press <span class='GUI_button'>&nbsp;Run&nbsp;</span>.</p> <br clear='left'> <br> <p></p> <a name='5b943e6b'></a> <h3>6) Set TrueType stem values</h3> <p>The next action is to set the TrueType stem values. </p> <p><span class='Runin'>Step 1:</span> Reveal the TrueType hinting tools. Open one of your chosen glyphs to show the outline. Press the <span class='menu_choice'>TrueType hinting</span> button <img src='/cms/scripts/../sites/nrsi/media/FLTTHintButton.png' height='24' width='24'> to reveal the tools. If you get a dialog that warns you about correcting outline problems, press <span class='GUI_button'>&nbsp;OK&nbsp;</span>.</p> <div class='mediacontainer'> <img src='/cms/scripts/../sites/nrsi/media/FLTTHintOptions.png' height='165' width='172'> </div> <p><span class='Runin'>Step 2:</span> Find and remove any existing stem values. Find the <span class='menu_choice'>TrueType Options</span> palette and press the ellipsis button. This will reveal the <span class='menu_choice'>TrueType Stem Control</span> dialog that was illustrated in an earlier section and is repeated below. If there are stems listed select each one and remove it by pressing the <span class='menu_choice'>Remove</span> button <img src='/cms/scripts/../sites/nrsi/media/FLTTStemButtonRemove.png' height='24' width='24'>.</p> <br clear='left'> <br> <p></p> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/FLTTStemControl.png", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=592,height=472");'><img src='/cms/sites/nrsi/media/FLTTStemControl_100x76.png' width='100' height='76'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> </div> <p><span class='Runin'>Step 3:</span> Import the Type 1 stems and enter in any additional ones. To do this, press the <span class='menu_choice'>Copy from Type 1</span> button <img src='/cms/scripts/../sites/nrsi/media/FLTTStemButtonT1.png' height='24' width='24'>. It would be a good idea to review what is there, and make sure it is correct. You will also need to add in any extra stem values that went beyond the limit of 12 Type 1 stems. Be careful when adding stems-it can be very easy to add the wrong type (X or Y) of stem. FontLab's button tooltips are confusing here. Finally, press the <span class='menu_choice'>Optimize PPM</span> button <img src='/cms/scripts/../sites/nrsi/media/FLTTStemButtonOptimize.png' height='24' width='24'> to make the PPM values more uniform. You can always change these later, but this gives a pretty good guess. Press <span class='GUI_button'>&nbsp;OK&nbsp;</span> to finish the step.</p> <p><span class='Runin'>Step 4:</span> Generate a test font. It would be a good idea to give the font a unique name in the <span class='menu_choice'>Font Info</span> dialog so you can test it alongside other versions. Also be sure that all the hinting options are checked in the <span class='menu_choice'>Generate Font/Options</span> dialog. </p> <div class='mediacontainer'> <img src='/cms/scripts/../sites/nrsi/media/FLExportOptions.png' height='129' width='286'> <p class='Caption' style='width: 286'>FontLab Export Options</p> </div> <br clear='left'> <br> <p></p> <a name='1bd27eaa'></a> <h3>7) Test results</h3> <p>Hinting is a trial and error process, so this is not really a singular step in itself. Initial feedback on your results can be obtained through FontLab's windows, but the real test is to try the font in a real setting. Here are some basic helps (thanks to Lawrence Penney for some of these).</p> <p><span class='Runin'>Test in the most common environment</span> (Word and Internet Explorer on Windows), as well as any particular apps/OSes that you care about. The difference between Word and IE is that Word will display text using printer metrics, whereas IE uses screen metrics. They also use different rasterizing systems, so your hints may have different results (and not just in spacing). In other words, you need to look carefully at both in order to be sure that everything is OK. </p> <p>Here's an example of an html file that can be used with IE. Change the font names in the style, add whatever text you want to use and open with IE (or any other browser). You can even add additional styles (.fontthree, .fontfour, etc.).</p> <pre class='code'>&lt;HTML&gt; &lt;HEAD&gt; &lt;TITLE&gt;Hinting Test&lt;/TITLE&gt; &lt;STYLE type='text/css'&gt; .fontone {font-family: "Doulos SIL"} .fonttwo {font-family: "Doulos SIL 0032auto"} &lt;/STYLE&gt; &lt;/HEAD&gt; &lt;BODY BGCOLOR="#FFFFFF"&gt; &lt;p&gt; &lt;span style='font-size:8 pt' class="fontone"&gt; Sample text goes here&lt;/span&gt;&lt;BR&gt; &lt;span style='font-size:8 pt' class='fonttwo'&gt; Sample text goes here&lt;/span&gt;&lt;BR&gt; &lt;/p&gt; &lt;p&gt; &lt;span style='font-size:10 pt' class='fontone'&gt; Sample text goes here&lt;/span&gt;&lt;BR&gt; &lt;span style='font-size:10 pt' class='fonttwo'&gt; Sample text goes here&lt;/span&gt;&lt;BR&gt; &lt;/p&gt; &lt;/BODY&gt; &lt;/HTML&gt;</pre><a name='NoteSizeTest'></a> <p><span class='Runin'>Test a range of sizes.</span> View sample text at what you consider to be "normal" viewing size, and test at 3-4 sizes above and below. Keep in mind that you may run your machine at much higher (or lower!) resolution than others. Someone with a 1024x768 17" monitor will likely choose a smaller size than someone using the same resolution on a 12" laptop. If you are testing on a Mac, zoom the display to 133% to see the Windows equivalent, or choose a different point size (16pt instead of 12 pt). This is due to the typical difference between Mac and Windows resolution, although this is becoming less and less of an issue. A different technique is to set your document in Word for Windows to 75% zoom. This will synchronize the point size and PPM value, so that 12 point on the screen will be the 12 PPM size.</p> <p><span class='Runin'>Test even at large sizes</span>, especially if depending on autohinting. FontLab's routines can add in some pretty wild hints that cause problems when the glyph gets <span class='Em'>big</span> (say, at 48 PPM).</p> <p><span class='Runin'>Watch out for font smoothing/antialiasing.</span> There are huge debates on the whole "fuzzy letters" issue, but most people will have it on. Test in both, although your hints will be much more relevant to unsmoothed images.</p> <p><span class='Runin'>Use pixel magnification utilities.</span> On Mac OS X, <span class='Em'>Pixie</span> (installed with developer tools in Developer/Applications) will give you instant magnification of the region near your pointer. On Windows, use <a href='http://www.csc.calpoly.edu/~bfriesen/software/zoomin.shtml' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;ZoomIn</a>. You can also make screen dumps/snapshots, then view them magnified in an image browser.</p> <a name='05d61689'></a> <h3>8) Manually revise hints on specific glyphs</h3> <p>In order to alter, or even view, the autohinting that FontLab does, you first need to explicitly autohint those glyphs (which gives you Type 1 links), then convert the links to TrueType instructions.</p> <div class='mediacontainerthumb'> <a onclick='javascript:window.open("/cms/sites/nrsi/media/FLConvert2Inst.png", "Popup", "toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1,width=626,height=535");'><img src='/cms/sites/nrsi/media/FLConvert2Inst_100x83.png' width='100' height='83'/><img src='/cms/scripts/../assets/icons/magnify.png'></a> <p class='Caption' style='width: 596'>Creating Type 1 hints and converting to TT instructions</p> </div> <a name='NoteEliminate'></a> <p>This can be done with a single action. Select the glyphs you want to view or edit in the font window. Choose <span class='menu_choice'>Tools/Transform Range</span>, set the <span class='menu_choice'>Transformation Range</span> to <span class='menu_choice'>Selected characters</span>. Ignore the <span class='menu_choice'>Transformation program</span> setting. In the left pane click the triangle beside <span class='menu_choice'>Hints &amp; Guidelines</span>, scroll down and choose <span class='menu_choice'>Autohint</span>. Press the right arrow button. Then click on <span class='menu_choice'>Convert to instructions</span>. Press the right arrow button. The right pane should now have two (and only two) items under <span class='menu_choice'>Program</span>: <span class='menu_choice'>Autohint</span> and <span class='menu_choice'>Convert to instructions</span>. Finally, press <span class='GUI_button'>&nbsp;Run&nbsp;</span>. If you already have hints on any of these glyphs that you wish to eliminate, insert the command <span class='menu_choice'>Remove hints/guides</span> before the other two items and choose only the hints.</p> <br clear='left'> <br> <p></p> <p>Now your glyphs have visible TrueType hints based upon the parameters you set earlier. Yes, you had automatically generated hints before (based on your parameters), but they were created when you generated the font. The difference is that now you can actually see the hints if you open a glyph window and activate the TrueType hinting tools by pressing <img src='/cms/scripts/../sites/nrsi/media/FLTTHintButton.png' height='24' width='24'>. The process of making these hints visible will not improve them automatically, but will allow you to tweak them manually.</p> <p>You're now ready to take the plunge into manual hinting. At this point (I hate to say), I don't have any specific advice as to how to hint, or rehint. The documents listed in the <a href='#hintingInfo'>Sources for information on hinting</a>, below, are good starting places. I hope to have some illustrated examples here someday, but it would be best if you get familiar with what the experts have written first!</p> <p>Nevertheless, here are some general tips:</p> <p><span class='Em'>Pick a subset of glyphs to manually hint, and rely on FontLab to do the rest.</span> Be careful, though, as FontLab's hints can sometimes be too aggressive. One way to manage this is to convert the troublesome glyphs into TrueType curves, then wander through them, deleting hints that don't make sense. This is less work that rehinting the glyphs from scratch, and could give you results that are just as good.</p> <p><span class='Em'>Don't fix what ain't broke.</span> If a glyph looks good, don't touch it. Focus on the difficult ones. The only instance where you would want to modify good-looking glyphs is to make their hint behavior similar to the others, and hopefully make them look even better.</p> <p><span class='Em'>Hint in a deliberate order.</span> Find a few representative glyphs and experiment. Once you've made basic decisions (such as whether to hint vertical stems left-to-right, right-to-left, or outside-in), then hint similar features for all the glyphs in sequence. For example, hint all the vertical stems (X direction) for all glyphs, then do the horizontal ones. For a non-roman script, such as Thai, hint common features (such as all the 'heads') at the same time. This will help you maintain consistency and all the beauty the script deserves.</p> <p><span class='Em'>Pay careful attention to the results of hinting on the outline, not just the pixels.</span> Keep in mind that although the final result (gray dots) is important, you must understand how the renderer is creating the dots. Look carefully at exactly what the hints have done to the outline, not just the dots. How it gets the dots is more important and can give you clues as to how to fix problems.</p> <p><span class='Em'>Avoid using delta hints.</span> Try to do everything without them. Then go back and tweak what just doesn't quite look right. Be sure you take advantage of setting the PPM range for deltas - it can save a lot of work if you can share the same delta among more than one PPM size.</p> <a name='NoteHintingZones'></a> <p><span class='Em'>Consider hinting the alignment zones themselves.</span> If your glyphs seem too short at specific PPM sizes, don't try and use individual deltas to raise them up. Instead, hint the alignment zone itself. This will raise up everything that falls within that zone, so you won't have to tweak each glyph. This hinting is essentially a global delta, so it only affects specific PPM sizes. Normally, you can set deltas to affect a range of PPMs, and even though it looks like you should be able to do this for zones, it doesn't work. <span class='Em'>Note that this will affect all glyphs that rely on autohinting, not just the ones you have already converted to TrueType curves. Cool!</span> See the FontLab documentation on <span class='Em'>Hinting Alignment Zones</span> for more information.</p> <p><span class='Em'>Avoid unnecessary complexity.</span> It is far too easy to keep adding hints to a glyph until you have them on every point or feature. Generally, fewer hints are better, but do use whatever hints are actually <span class='Em'>necessary</span>. If your hinting gets too complex it can result in very strange behavior at large sizes. So if you do have a lots of hints on a glyph (not counting deltas, which work only at specific sizes), it would be a good idea to look very carefully at the glyph at all sizes (including printing resolutions).</p> <p><span class='Em'>You are writing a computer program, not just designing shapes.</span> Hinting is programming, although FontLab gives you a nice interface for it. Try to think as the computer would. <span class='Em'>How would this command affect the others? If I align this point in this way, how will that affect linked points?</span></p> <p><span class='Em'>Have fun!</span> Hinting can actually be enjoyable. When it works. :-)</p> <a name='hintingInfo'></a> <a name='e605e0de'></a> <h2>Sources for information on hinting</h2> <a name='50fb2693'></a> <h3>Introductory articles</h3> <p><span class='Em'>TrueType hinting</span> [Microsoft] <a href='http://www.microsoft.com/typography/hinting/hinting.htm' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://www.microsoft.com/typography/hinting/hinting.htm</a> The best summary of why hinting is needed and how it can be used. Excellent!<br /> <br /> <span class='Em'>Basic Type 1 Hinting</span> [David Lemon, Adobe] <a href='http://www.pyrus.com/downloads/hinting.pdf' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://www.pyrus.com/downloads/hinting.pdf</a> Although focused on Type 1 hinting, the first three pages can be very helpful, and applies to TrueType as well.</p> <p><span class='Em'>TrueType Hinting</span> [Lawrence Penney] <a href='http://www.truetype.demon.co.uk/tthints.htm' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://www.truetype.demon.co.uk/tthints.htm</a> Brief intro with a good number of links to interesting material.</p> <a name='9a3fbd1c'></a> <h3>In-depth Tutorials</h3> <p><span class='Em'>Basic hinting philosophies and TrueType instructions</span> [Vincent Connare, Microsoft] <a href='http://www.microsoft.com/typography/hinting/tutorial.htm' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://www.microsoft.com/typography/hinting/tutorial.htm</a> This is pre-FontLab, and pretty technical, but is useful as a reference to manual hinting strategies.</p> <p><span class='Em'>The raster tragedy at low resolution</span> [Beat Stamm, Microsoft] <a href='http://www.microsoft.com/typography/tools/trtalr.htm' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://www.microsoft.com/typography/tools/trtalr.htm</a> A good description of hinting in general, as well as a walk-through of how to hint troublesome glyphs. Uses examples from Visual TrueType, but most of it works the same way in FontLab</p> <a name='c5160bba'></a> <h3>Technical Reference</h3> <p><span class='Em'>FontLab documentation</span> [FontLab] <a href='http://fontlab.com/html/fontlab.html' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://fontlab.com/html/fontlab.html</a> The best resource for details on hinting with FontLab.<br /> <br /> <span class='Em'>Hinting and production guidelines specification</span> [Microsoft] <a href='http://www.microsoft.com/typography/developers/delivery/hinting.htm' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://www.microsoft.com/typography/developers/delivery/hinting.htm</a> Scary, but potentially useful.</p> <a name='5f027f1f'></a> <h3>Hinting Tools</h3> <p><span class='Em'>FontLab</span> <a href='http://fontlab.com/html/fontlab.html' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://fontlab.com/html/fontlab.html</a> The most common tool for hinting these days. Does not support full TrueType hinting options, but has few serious limitations.</p> <p><span class='Em'>Microsoft Visual TrueType</span> <a href='http://www.microsoft.com/typography/tools/vtt.htm' target='_blank'><img src='/cms/assets/icons/offsite_link.png'>&nbsp;http://www.microsoft.com/typography/tools/vtt.htm</a> A more high-powered tool than FontLab, but probably overkill for most folks.</p> <a name='0407c271'></a> <h2>Acknowledgements</h2> <p>Thanks to Lawrence Penney, Jonathan Kew and the folks at Apple and Microsoft for their wisdom on this topic.</p> <br><hr clear='all'><p>Note: the opinions expressed in submitted contributions below do not necessarily reflect the opinions of our website.</p><div class='Message'> <p><small> "Robert Lloyd Wheelock", Wed, Dec 31, 2003 01:22 (EST)</small><br> <b>Kerning and metrics adjustments with overstrike accent marks</b></p> <p>I\'m familiar with the kerning and metrics adjustment pop-up window in FontLab. When I edit characters for combining (nonspacing) overstruck diactritic and accent marks for a font, how do I adjust the sidebearing lines and centerpoint mark so that the accent automatically goes on the base character(s) it\'s intended to (usually centered, but sometimes right or left)?</p> <p>How do you adjust the red diamette anchor points on characters so they\'ll refer to where a given accent/point would be positioned?</p> </div> <div style='margin: 0 0 0 30px;'> <div class='Message'> <p><small> gaultney, Mon, Jan 12, 2004 10:37 (EST)</small><br> <b>Re: Kerning and metrics adjustments with overstrike accent marks</b></p> <p>That\'s a bit complicated to get into here. You\'ll need to consult the FontLab documentation on attachment points (or ask someone on the FontLab community at MSN) for the help you need.</p> <p>Victor</p> </div> <div style='margin: 0 0 0 30px;'> </div> </div> <hr> <hr> <p><small>漏 2003-2024 <a href='http://www.sil.org/' target='_blank'>SIL International</a>, all rights reserved, unless otherwise noted elsewhere on this page.<br> Provided by SIL's Writing Systems Technology team (formerly known as NRSI). Read our <a href="/privacy-policy.html">Privacy Policy</a>. <a href='/support.html'>Contact us here.</a></small></p> </div> </td> </table> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10