---
name: "tfmtodit"
section: "1"
platform: "linux"
package: "groff"
version: "1.24.2-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/tfmtodit"
---

# tfmtodit(1)

adapt TeX Font Metrics files for use with groff and grodvi

## Name

tfmtodit - adapt TeX Font Metrics files for use with *groff* and *grodvi*

## Synopsis

**tfmtodit** \[**-s**\] \[**-g**  *gf-file*\] \[**-k**  *skew-char*\] *tfm-file* *map-file* *font-description*

**tfmtodit** **--help**

**tfmtodit** **-v**

**tfmtodit** **--version**

## Description

*tfmtodit* creates a font description file for use with [*groff*(1)](/groff/1.md)'s **dvi** output device. *tfm-file* is the name of the TeX font metric file for the font. *map-file* assigns *groff* ordinary or special character identifiers to glyph indices in the font; it should consist of a sequence of lines of the form

*i c1* ... *cn*

where *i* is a position of the glyph in the font in decimal, and *c1* through *cn* are glyph identifiers in the form used by *groff* font descriptions. If a glyph has no *groff* names but exists in *tfm-file,* it is put in the *groff* font description file as an unnamed glyph. Output is written in [*groff\_font*(5)](/groff_font/5.md) format to *font-description,* a file named for the intended *groff* font name.

If the font is “special”, meaning that *groff* should search it whenever a glyph is not found in the current font, use the **-s** option and name *font-description* in the **fonts** directive in the output device's *DESC* file.

To do a good job of math typesetting, *groff* requires font metric information not present in *tfm-file.* This is because TeX has separate math italic fonts, whereas *groff* uses normal italic fonts for math. The additional information required by *groff* is given by the two arguments to the **math\_fit** macro in the Metafont programs for the Computer Modern fonts. In a text font (a font for which **math\_fit** is false), Metafont normally ignores these two arguments. Metafont can be made to put this information into the GF (“generic font”) files it produces by loading the following definition after **cmbase** when creating *cm.base*.

```
def ignore_math_fit(expr left_adjustment,right_adjustment) =
    special "adjustment";
    numspecial left_adjustment*16/designsize;
    numspecial right_adjustment*16/designsize;
    enddef;
```

For the EC font family, load the following definition after **exbase**; consider patching *exbase.mf* locally.

```
def ignore_math_fit(expr left_adjustment,right_adjustment) =
    ori_special "adjustment";
    ori_numspecial left_adjustment*16/designsize;
    ori_numspecial right_adjustment*16/designsize;
    enddef;
```

The only difference from the previous example is the “ori\_” prefix to “special” and “numspecial”. The GF file created using this modified *cm.base* or *exbase.mf* should be specified with the **-g** option, which should *not* be given for a font for which **math\_fit** is true.

## Options

**--help** displays a usage message, while **-v** and **--version** show version information; all exit afterward.

- **-g** *gf-file*

  Use the *gf-file* produced by Metafont containing “**special**” and “**numspecial**” commands to obtain additional font metric information.

- **-k** *skew-char*

  The skew character of this font is at position *skew-char.* *skew-char* should be an integer; it may be given in decimal, with a leading 0 in octal, or with a leading 0x in hexadecimal. Any kerns whose second component is *skew-char* are ignored.

- **-s**

  Add the **special** directive to the font description file.

## Exit status

*tfmtodit* exits with status **0** on successful operation, status **2** if the program cannot interpret its command-line arguments, and status **1** if it encounters an error during operation.

## Files

- */usr/share/groff/1.24.2/font/devdvi/DESC*

  describes the **dvi** output device.

- */usr/share/groff/1.24.2/font/devdvi/*F

  describes the font known as *F* on device **dvi**.

- */usr/share/groff/1.24.2/font/devdvi/generate/ec.map* */usr/share/groff/1.24.2/font/devdvi/generate/msam.map* */usr/share/groff/1.24.2/font/devdvi/generate/msbm.map* */usr/share/groff/1.24.2/font/devdvi/generate/tc.map* */usr/share/groff/1.24.2/font/devdvi/generate/texb.map* */usr/share/groff/1.24.2/font/devdvi/generate/texex.map* */usr/share/groff/1.24.2/font/devdvi/generate/texi.map* */usr/share/groff/1.24.2/font/devdvi/generate/texitt.map* */usr/share/groff/1.24.2/font/devdvi/generate/texmi.map* */usr/share/groff/1.24.2/font/devdvi/generate/texr.map* */usr/share/groff/1.24.2/font/devdvi/generate/texsy.map* */usr/share/groff/1.24.2/font/devdvi/generate/textex.map* */usr/share/groff/1.24.2/font/devdvi/generate/textt.map*

  map glyph indices in TeX fonts to *groff* ordinary and special character identifiers. *ec.map* is used for **TREC**, **TIEC**, **TBEC**, **TBIEC**, **HREC**, **HIEC**, **HBEC**, **HBIEC**, **CWEC**, and **CWIEC**; *msam.map* for **SA**; *msbm.map* for **SB**; *tc.map* for **TRTC**, **TITC**, **TBTC**, **TBITC**, **HRTC**, **HITC**, **HBTC**, **HBITC**, **CWTC**, and **CWITC**; *texb.map* for **TB**, **HR**, **HI**, **HB**, and **HBI**; *texex.map* for **EX**; *texi.map* for **TI** and **TBI**; *texitt.map* for **CWI**; *texmi.map* for **MI**; *texr.map* for **TR**; *texsy.map* for **S**; *textex.map* for **SC**; and *textt.map* for **CW**.

## See also

[*groff*(1)](/groff/1.md), [*grodvi*(1)](/grodvi/1.md), [*groff\_font*(5)](/groff_font/5.md)
