LCDF Type Software


On this page: LCDF Typetools // Type 1 utilities // Autofont

LCDF Typetools

cfftot1, mmafm, mmpfb, otfinfo, otftotfm, t1dotlessj, t1lint, t1rawafm, t1reencode, t1testpage, ttftotype42

Source code
On Github
lcdf-typetools-2.110.tar.gz (674355 bytes)

Binaries (maintained by others)
Windows: lcdf-typetools-w32.tar.gz - available as part of Akira Kakuto’s W32TeX
Please note that I don’t provide support for Windows ports.
Mac OS X: Homebrew, MacPorts, Fink, i-Installer
Debian Linux: packages
Linux RPMs: maintained by Peter Linnell
NeXTstep: from Detlev Droege

cfftot1, mmafm, mmpfb, otfinfo, otftotfm, t1dotlessj, t1lint, t1rawafm, t1reencode, t1testpage, ttftotype42

Otftotfm examples
WarnockPro-Regular, WarnockPro-It, MinionPro-Regular, MinionPro-It
These PDF documents illustrate the range of features available in Adobe’s OpenType fonts, and accessible through otftotfm. A sample text is typeset multiple times, by LaTeX, with different OpenType features enabled. Quick descriptions of the feature names.

Otftotfm usage guides, wrapper scripts, and users
Fontools, by Marc Penninga
Guide from John Owens
Guide from Adam Lindsay
MinionPro support for LaTeX

Multiple master metrics
Adobe Systems has kindly agreed to provide access to AMFM and AFM font metrics for all the multiple master fonts in the Adobe Type Library. Mmafm uses these files to generate single-instance AFM metrics files.
mm-metrics-1.2.tar.gz (TGZ format, 2608466 bytes) (ZIP format, 3009430 bytes)
Thanks to Terry O'Donnell for making this possible.

The LCDF Typetools package contains several command-line programs for manipulating PostScript Type 1 and PostScript-flavored OpenType fonts.

Cfftot1 translates a Compact Font Format (CFF) font, or a PostScript-flavored OpenType font, into PostScript Type 1 format. It correctly handles subroutines and hints.

Mmafm and mmpfb create instances of multiple-master fonts: mmafm creates the AFM file (font metrics) for an instance, given the AMFM and AFM files distributed with the multiple master; mmpfb creates a normal, single-master font for an instance, given the multiple master font itself. These tools help multiple master fonts work with UNIX programs for single-master fonts, like afm2tfm, ps2pk, GhostScript ps2pdf, and the X11 Type 1 font server. Mmafm and mmpfb were previously distributed in their own package, mminstance.

Otfinfo reports information about OpenType fonts, such as the features they support and the contents of their 'size' optical size features.

Otftotfm creates TeX font metrics and encodings that correspond to an OpenType font (either PostScript or TrueType-flavored). It will interpret glyph positionings, substitutions, and ligatures as far as it is able. You can say which OpenType features should be activated.

T1dotlessj creates a Type 1 font whose only character is a dotless j matching the input font’s design.

T1lint checks a Type 1 font for correctness.

T1rawafm produces a raw AFM from Type 1 font data.

T1reencode replaces a font’s internal encoding with one you specify.

T1testpage creates a PostScript proof for a Type 1 font. It is preliminary software.

Ttftotype42 generates a PostScript Type 42 font wrapper for a TrueType font. The glyph names are identical to those generated by programs like pdftex and otftotfm, so encoding files can be shared by pdftex and dvips.

Please write me with problems, patches, or suggestions.

Changes in version 2.110: Print more Unicode positions in otfinfo -u, add embedding information to otfinfo -i, and add otfinfo --variable for variable fonts.

Changes in versions 2.107–2.109: Improve result of otftotfm --math-spacing, and fix more bugs triggered by unusual fonts.

Changes in versions 2.101–2.106: Fix some otftotfm bugs involving TrueType and unusual CFF fonts.

Older changes

Changes in version 2.100: Fix an otftotfm bug that could lead to an infinite loop.

Changes in version 2.99: Fix a cfftot1 bug that could corrupt some output fonts.

Changes in versions 2.96–2.98: Support more platforms, specifically MIPS.

Changes in version 2.95: Don’t crash on certain erroneous fonts.

Changes in versions 2.91–2.94: Correct compilation problems.

Changes in versions 2.84–2.90: Support larger and newer fonts, and improve glyph name mappings.

Changes in version 2.83: Otftotfm will more frequently use the TrueType kern table as a backup.

Changes in version 2.82: Otftotfm correctly handles fonts where some glyphs are encoded in more than one slot.

Changes in versions 2.80–2.81: Add new options and fix “em” and “ex” measurements for TrueType fonts.

Changes in version 2.79: Otftotfm supports generic TrueType kern tables. Plus some bug fixes and new features to other programs.

Changes in versions 2.77–2.78: Bug fix to generic OTF/TTF handling code fixes crashes on some fonts.

Changes in version 2.76: Bug fix to mmpfb avoids generating problematic subroutines.

Changes in versions 2.73–2.75: Bug fix to cfftot1 removes some stray moveto type commands that could corrupt the output font.

Changes in versions 2.70–2.72: Add new t1rawafm program. Also some bug fixes and other improvements.

Changes in versions 2.67–2.69: Improve otftotfm’s font name construction and ligature sorting.

Changes in version 2.66: Improve kerning pairs and metric information for TrueType fonts.

Changes in versions 2.64–2.65: Add support for newer fonts and fix Flex-related bugs in cfftot1 and otftotfm.

Changes in versions 2.62–2.63: Small t1dotlessj bug fix: throw away UniqueIDs.

Changes in version 2.61: Otftotfm automatically handles fonts with unusually large characters.

Changes in version 2.60: Otftotfm: more --base-encodings fixes.

Changes in version 2.59: Otftotfm tweak: --position doesn’t add characters to the encoding.

Changes in versions 2.50–2.58: Otftotfm supports the --base-encodings option.

Changes in versions 2.46–2.49: Otftotfm cleanups, otfinfo extended output.

Changes in version 2.45: Add new ttftotype42 program.

Changes in versions 2.43–2.44: Support new, fixed size features.

Changes in version 2.42: Otftotfm altselector characters are actually encoded.

Changes in versions 2.40–2.41: Otftotfm includes support for TrueType-flavored OpenType fonts!

Changes in versions 2.38–2.39: Add otfinfo -i option, and small improvements.

Changes in versions 2.35–2.37: Bug fixes and improvements, including new otftotfm --warn-missing option, otfinfo --font-version option, and t1reencode new encodings.

Changes in versions 2.33–2.34: Otftotfm improvements, including new --position option.

Changes in versions 2.29–2.32: Otftotfm bug fixes and small improvements.

Changes in versions 2.27–2.28: Otftotfm supports explicit kern inputs and math spacing improvements.

Changes in versions 2.24–2.26: Otftotfm behavior improvements and bug fixes (no crashes on newer fonts).

Changes in version 2.23: Otftotfm: fix --unicoding.

Changes in version 2.22: Otftotfm: include default ligatures unless specifically directed not to.

Changes in version 2.21: --base fonts get no kerns or ligatures, to save space; and cfftot1 correctly installs keys like "isFixedPitch" that are left to default values.

Changes in version 2.20: Otftotfm: add --math-spacing and --space-factor options.

Changes in version 2.19: Otftotfm: add --include/exclude-subs options (Achim Blumensath). Also, run the system updmap, making automatic mode much easier to set up. Otfinfo: add --query-glyphs option.

Changes in version 2.17: Add t1reencode, and an --output-encoding option for otftotfm.

Changes in version 2.16: Small --include/exclude-alternates bugfix, and support different include/exclude alternates for different features.

Changes in version 2.14–2.15: Compile fixes for IRIX and AIX and add maintainer mode (no substantive changes).

Changes in version 2.13: otftotfm supports --enable-selfauto-loc, to help run with TeX SELFAUTODIR configurations. Also, automatic mode searches both $TEXMF and $VARTEXMF for a writable directory.

Changes in versions 2.10–2.12: otftotfm supports TeX Directory Structure 1.1, and we can compile on Cygwin.

Changes in version 2.9: otftotfm adds --letter-feature option.

Changes in version 2.8: Fixes otftotfm abort bug on fonts without GSUB or GPOS tables.

Changes in version 2.7: Fixes otftotfm bug with ‘dotlessj’ character in some encodings.

Changes in version 2.6: t1testpage adds --smoke option.

Changes in version 2.5: Update for gcc-3.4 compilability.

Changes in version 2.4: Fix off-by-one encoding bug in cfftot1.

Changes in version 2.3: otftotfm adds --default-ligkern option.

Changes in version 2.2: otftotfm will complete successfully even if t1dotlessj does not.

Changes in version 2.1: Improved otftotfm documentation.

Changes in version 2.0: Fixes binary file problems on Windows.

Changes in version 1.99: Fixes an otftotfm assertion failure.

Changes in version 1.98: Add support for a constructed ‘SSsmall’ character to otftotfm.

Changes in version 1.97: Fixes cfftot1 bug on fonts with supplemental encodings.

Changes in version 1.96: Otftotfm can call t1dotlessj automatically when required.

Changes in version 1.91: Add t1dotlessj and fix mmpfb, which had been broken since version 1.65.

Changes in version 1.88: Fixes bug where otftotfm’s --extend option did not work. (The bug: the extension factor was applied to characters’ heights, not their widths.)

Changes in version 1.86: Otftotfm supports pdftex better.

Changes in version 1.85: Otftotfm supports --altselector-feature, an addition to the --altselector-char mechanism, and fixed an intermittent hang.

Changes in version 1.80: Otftotfm supports new --altselector-char, --include-alternates, and --exclude-alternates options. These options support the selection of specific alternate characters in the TeX file, using Sivan Toledo’s technique. Requested by Martin Budaj.

Changes in version 1.75: Cfftot1 handles the case when ‘hintmask’ is the first operator in a Type 2 charstring. Reported by Tom Kacvinsky.

Changes in version 1.70: Otftotfm supports the --min-kern option (requested by Ulrich Dirr).

Changes in version 1.67: Otftotfm includes default ligatures when there aren’t any, and virtual fonts work correctly (FONTDSIZE specified). Reported by Adam Lindsay.

Changes in version 1.60: Cfftot1 can handle fonts with the ‘seac’ operator (requested by Ralf Koenig).

Changes in version 1.52: Add --design-size option to otftotfm, and document t1testpage.

Changes in version 1.51: Otftotfm sets the font’s DESIGNSIZE to the actual design size, stored in the font’s “size” feature.

Changes in version 1.50: Add otfinfo program, and remove otftotfm’s --query options. Merge mminstance package. Fix build problems and some crashes.

Changes in version 0.53: Fix crashes reported by Bruce D’Arcus, Adam Lindsay, and Marco Kuhlmann, and some build problems.

Changes in version 0.50: Otftotfm supports more complex contextual substitutions, particularly for -ffrac and -fordn.

Changes in version 0.19: Otftotfm supports emptyslot UNICODINGs, for encoding slots that should remain unused.

Changes in version 0.18: Otftotfm will synthesize some missing characters, specifically ‘cwm’, ‘visualspace’, and ‘Germandbls’. Also, don’t output a KRN between two characters if there exists a LIG for those two characters.

Changes in version 0.17: Ligatures removed with LIGKERN commands won’t show up in the encoding.

Changes in version 0.16: Change automatic-mode storage location for dvips files to TEXMF/dvips/VENDOR (usually TEXMF/dvips/lcdftools); you may need to move your old files and run mktexlsr. Prefer shorter ligatures made out of regular letters (Bruce D’Arcus). Add --coding-scheme option (Marco Kuhlmann). Add --ligkern and --unicoding options. Remove any virtual font foo.vf when installing a non-virtual font foo.tfm, to reduce the risk that an old virtual font will screw up your installation.

Changes in version 0.15: Support left context-sensitive substitutions for ExPontoPro’s -fcalt, and fix bug that could overcount kerning.

Changes in version 0.14: Support context-sensitive substitutions for -finit, and add -L/--letterspacing option.

Changes in version 0.13: Fix bugs with error message generation, and --without-kpathsea works.

Changes in version 0.11: Handle the simple context-sensitive substitutions required for ‘cswh’ and ‘fina’ features (Contextual Swash and Terminal Forms).

Changes in version 0.10: Update ls-R files for new encodings.

Changes in version 0.9: Fix configuration errors on Mac OS X and other systems, and otftotfm’s output lines are directory-free.

Multiple master tools: mmafm & mmpfb

Mmafm and mmpfb are available as part of the lcdf-typetools package.

Type 1 utilities

Source code and documentation
On Github
t1utils-1.42.tar.gz (184666 bytes)

Prebuilt binaries
Packages are available for Debian GNU/Linux. C. M. Connelly is the maintainer.
Packages are available for Windows. Thanks to Kees Zeelenberg for the link.
Packages for SGI IRIX, maintained by Felix Ritter.
NetBSD package, maintained by Jonathan Buller.

t1ascii, t1binary, t1disasm, t1asm, t1unmac, t1mac

Six free UNIX/Windows command-line tools for dealing with Type 1 fonts. This is a revision of I. Lee Hetherington’s beloved t1utils package. t1ascii changes PFB (binary) fonts into PFA (ASCII) format; t1binary goes the opposite direction. t1disasm translates PFBs or PFAs into a human-readable and -editable format; t1asm goes the opposite direction. Finally, t1unmac (formerly unpost) translates a Macintosh Type 1 font into either PFB or PFA format, and t1mac goes the opposite direction.

Changes in recent versions

Versions 1.37–1.42: Fix an infinite loop on some fonts and fix some security and compilation issues.

Older changes

Versions 1.34–1.36: Add --enable-multiplatform switch.

Versions 1.32–1.33: Fix memory corruption bug. Problem reported by Werner Lemberg.

Version 1.31: Support fonts where the first eexec-encrypted byte is binary 0. Problem reported by Werner Lemberg.

Version 1.30: Support fonts where "currentfile eexec" isn’t followed by a newline.

Version 1.29: T1disasm can handle an Omega font sent in by Werner Lemberg.

Version 1.27: Add optional warning to t1ascii when a font contains long lines (more than 255 characters). Requested by Werner Lemberg.

Versions 1.25–1.26: Fix t1asm buglet: text following "currentfile closefile" considered harmful. Reported by Luc Devroye.

Version 1.24: No user-visible changes; just fix compilation bugs on some platforms. Reported by Nelson Beebe.

Version 1.23: Fixes bugs in t1mac and t1unmac’s MacBinary handling: the CRC was calculated incorrectly. Patch provided by Tom Kacvinsky <>.

Version 1.22: Fixes a serious bug in handling PFA fonts with DOS line endings. This bug can cause font corruption, and has been present since Version 1.13. Reported by Han The Thanh <>.

Versions 1.20–1.21: Fixes small, non-critical bugs in t1asm -a and PFA line length options reported by Tom Kacvinsky <> and Rainer Menzner <>.

Versions 1.18–1.19: Fixes a bug where t1mac generated corrupt Macintosh fonts, and generates better Macintosh files.

Version 1.17: Fixes to t1unmac’s new options, and added support for BinHex 4.0 format. Added new program, t1mac, which is the inverse of t1unmac: it translates PFB or PFA fonts into Macintosh format.

Version 1.16: Adds support to t1unmac for AppleSingle and AppleDouble files.

Version 1.15: Fixes a non-critical bug with some error messages.

Version 1.14: Fixes a serious bug in t1asm reported by Rainer Menzner <>.

Version 1.13: A thorough rewrite of t1disasm for consistency with the other programs. All programs can read binary PFA fonts (requested by Tom Kacvinsky <>). T1asm and t1disasm can handle synthetic fonts, like many older Oblique fonts.

Version 1.12: Tom Kacvinsky <> reported a problem with rare fonts that had spaces after "currentfile eexec" and before a newline; fixed. Also several cosmetic changes.

Version 1.11: Luc Devroye <> reported a t1asm/t1disasm bug on rare fonts that defined a readhexstring procedure; fixed. t1binary now has a maximum block length of 232-1, as requested by Werner Lemberg <>. t1ascii and t1binary will take both PFA and PFB fonts. Fonts which don’t require conversion are passed through mostly unchanged.

Version 1.10: Tom Kacvinsky <> provided a patch so t1asm/t1disasm work on Type 2-like fonts (with negative lenIV). Giuseppe Ghibò <> suggested an option to control line length in PFA output.

Version 1.9: Johan Vromans <> found a font which t1asm and t1disasm didn’t work on. They do now.

Version 1.8: Bug fixes and more Type 2 charstring commands in t1asm and t1disasm, and better error messages on unreadable files.

Version 1.7.2: A patch from Tom Kacvinsky <> so that t1asm will work on fonts without /Subrs arrays. Removed spurious debugging messages from t1disasm. Includes patches from Jan-Jaap van der Heijden <> to support building t1utils under 32-bit Windows.

Version 1.6: Some bugs in t1unmac have been fixed (it previously didn’t pay attention to ‘-r’). Better diagnostics are issued on bad input files. ‘--help’ messages improved.

Version 1.5: All programs have configure scripts for easier installation, and accept long options including --help. t1asm and t1disasm have been extended with Type 2 charstring commands, which also occur in some multiple master fonts like Adobe Jenson. Bugs in t1ascii have been fixed.

Autofont version 0.96

Perl source code and documentation
Autofont-0.96.tar.gz (25618 bytes)

autofont-mktextfm, autofont-mktexpk, autofont-mkpsres

This package provides some Perl scripts that simplify font handling for TeX. The basic idea behind Autofont is that TeX-required font information, including TFM and VF font metrics, PK bitmap fonts, and DVIPS '' references, should be generated on the fly when required, based on the TeX font name. With Autofont, referring to a PostScript font is sufficient to install that font for TeX’s purposes. The user writes an .fd file and that’s it. This differs from fontinst, where fonts must be explicitly installed.

Autofont can automatically transform fonts based on "instructions" embedded in the font name. For example, "Times-Roman--sl167" refers to an artificially slanted version of Times Roman, and "ACaslon-Regular--f" refers to a version of Adobe Caslon Regular that includes the ff, ffi, and ffl ligatures found in Adobe Caslon Expert. Again, there is no need to install anything explicitly; simply refer to the fonts by name and Autofont will take care of the required virtual font manipulations.

Autofont requires a Unix TeX installation based on Web2c.

Changes in versions 0.95–0.96: Support for installations with different newlines than the default.

Changes in version 0.94: Update for newer TeTeX installations, and support "BemboExpert-Italic" expert font name pattern.

Changes in version 0.93: Update build process, add support for "TF" titling figure fonts and "--rawexpf" and "--spstr" font modifiers.

Changes in version 0.92: Autofont-mktextfm stores files in a TeX Directory Structure, and autofont-mktexpk uses dvips configuration files to decide how to run ps2pk or gsftopk.

 Eddie Kohler