'\"t .ds V 2.34 .de M .BR "\\$1" "(\\$2)\\$3" .. .de Sp .if n .sp .if t .sp 0.4 .. .de BUP .IP \(bu 3n .. .TH OTFTOTFM 1 "LCDF Typetools" "Version \*V" .SH NAME otftotfm \- create TeX font metrics from PostScript OpenType fonts .SH SYNOPSIS .B otftotfm \%[\fB\-a\fR] \%[\fBoptions\fR] \%\fIfontfile\fR.otf [\fItexname\fR] ' .SH DESCRIPTION .BR Otftotfm creates the font metric and encoding files required to use an OpenType font with TeX. You supply an OpenType ".otf" font file, a base ".enc" encoding, and a TeX name "\fItexname\fR" for the resulting font, and say which OpenType features should be turned on. Then .B otftotfm generates and installs the corresponding TeX-related metric files (".tfm" TeX font metrics, ".vf" virtual fonts, and ".enc" encoding files). It only works on PostScript-flavored OpenType fonts. .LP The easiest way to use .B otftotfm is with the .B \-a option; see Automatic Mode below. Without .BR \-a , .B otftotfm writes all its output files to the current directory. .LP After running "\fBotftotfm\fR \fIfontfile\fR.otf \fItexname\fR" and installing the results (manually or with .BR \-a ), you can use the OpenType font in plain TeX with a command like this: .Sp .nf \efont\emyfont=\fItexname\fR at 10pt {\emyfont This text uses the OpenType font.} .fi .Sp LaTeX users will generally make a ".fd" input file so that commands like "\erenewcommand{\ermdefault}{TeXName}" work correctly. See the EXAMPLE section for more; check the DIAGNOSTICS and FREQUENTLY ASKED QUESTIONS sections if you have trouble. ' .SS "OpenType Features" .LP OpenType fonts support optional .I features that change their appearance. Use the .B \-f option to turn on selected features. For example, "\fB\-f\fRsmcp" replaces lower-case letters with the corresponding small capitals, in fonts that support this. ' .PP You'll generally provide at least the "\fB\-f\fRkern" and "\fB\-f\fRliga" options, which activate pair kerns and f-ligatures. Other interesting features include "\fB\-f\fRcpsp", for capital spacing; "\fB\-f\fRdlig", for optional ligatures; "\fB\-f\fRlnum", "\fB\-f\fRonum", "\fB\-f\fRpnum", and "\fB\-f\fRtnum", to control digit glyphs; "\fB\-f\fRsmcp", for small capitals; "\fB\-f\fRswsh", for swash variants; and "\fB\-f\fRcswh", for contextual swash. See the FEATURE DIRECTORY section below for more. The .M otfinfo 1 program will report which features a font supports; run "\fBotfinfo\fR \fB\-f\fR \fIfontfile\fR.otf". ' .PP Feature options can also apply a feature to a subset of characters in the font. For example, "\fB\-\-lf\fR smcp" .I only replaces letters with small capitals, whereas "\fB\-f\fRsmcp" might additionally replace digits and punctuation marks with small-capital versions. ' .SS Automatic Mode .PP Automatic mode, triggered by the .BR \-a / \-\-automatic option, installs font metrics and encoding files where TeX can find them, and additionally installs a Type 1 font and mapping for .M dvips 1 . This requires a TeX installation that follows the TeX Directory Structure standard (http://www.tug.org/tds/), such as most Unix TeX installations. ' .PP Automatic mode should run seamlessly out of the box. .B Otftotfm will install metrics files, encodings, map files, and Type\~1 fonts into .I $HOME/.texmf-var or any other writable TEXMF directory, and run .M updmap 1 to update the global lists of installed fonts. (On older teTeX installations, you may first need to copy the system's .I updmap.cfg file to .I $HOME/texmf/web2c and run .M mktexlsr 1 .) You can then run "\fBotftotfm\fR .B \-a .IR file .otf .IR texname \&" and immediately refer to the font in TeX using the .I texname you supplied. Again, you will have to write ".fd" files and/or typescripts to make the font conveniently accessible from LaTeX or ConTeXt. See the DIAGNOSTICS section if you have problems with these instructions. ' .PP In automatic mode, .B otftotfm searches your $TEXMFVAR or $TEXMF path for a writable directory, then installs files under that directory tree as follows: ' .TS l l l . \fBFile type\fR \fBDirectory\fR \fBFilename\fR TFM TEXMF/fonts/tfm/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR[--base].tfm VF TEXMF/fonts/vf/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR.vf PL TEXMF/fonts/pl/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR[--base].pl VPL TEXMF/fonts/vpl/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR.vpl encoding TEXMF/fonts/enc/dvips/\fIvendor\fR/ a_\fIsignature\fR.enc or TEXMF/dvips/\fIvendor\fR/ PFB font TEXMF/fonts/type1/\fIvendor\fR/\fItypeface\fR/ \fIPStexname\fR.pfb font map TEXMF/fonts/map/dvips/\fIvendor\fR/ \fIvendor\fR.map or TEXMF/dvips/\fIvendor\fR/ .TE .PP "TEXMF" stands for the writable TEXMF directory. \fITexname\fR is the font name supplied as .BR otftotfm 's second argument, and \fIPStexname\fR is the PostScript name of the input font. The \fIvendor\fR and \fItypeface\fR strings are required by TDS; they default to "lcdftools" and the font's family name, respectively, but see the .B \-\-vendor and .B \-\-typeface options. \fISignature\fR is an opaque 6-character encoding signature. .PP You can override these directories with environment variables and options as follows. Options take precedence over environment variables. ' .TS l l l . \fBFile type\fR \fBEnvironment variable\fR \fBOption\fR TFM TFMDESTDIR \-\-tfm\-directory VF VFDESTDIR \-\-vf\-directory PL PLDESTDIR \-\-pl\-directory VPL VPLDESTDIR \-\-vpl\-directory encoding ENCODINGDESTDIR \-\-encoding\-directory PFB font T1DESTDIR \-\-type1\-directory font map \- \-\-map\-file .TE .PP .B Otftotfm will update the .I TEXMF/ls-R file when installing files under TEXMF. It will also run the .M updmap 1 program after changing a map file, unless the .B \-\-no\-updmap option was supplied. However, if an executable file called .IR TEXMF/dvips/updmap exists, this file is executed (from the .I TEXMF/dvips directory) rather than the global .BR updmap . This is so you can write a fast, customized version of .B updmap if desired. ' .SH EXAMPLE This section uses MinionPro to show one way to install OpenType fonts for LaTeX. We begin with six fonts: "MinionPro-Regular.otf", "MinionPro-It.otf", "MinionPro-Semibold.otf", "MinionPro-SemiboldIt.otf", "MinionPro-Bold.otf", and "MinionPro-BoldIt.otf". .PP Our first task is to decide how to encode the fonts. The "encoding scheme" is used by TeX to decide how to typeset accents and symbols like "$". The "LY1" encoding scheme is a good choice for many OpenType fonts; it corresponds to the "texnansx.enc" encoding file, so we will supply .B otftotfm with the "\fB\-e\fR texnansx" option. .PP Next, we decide on a naming scheme for the font metric files. Let's use the OpenType font names as a base. (There's generally no need to follow the six-character "Karl Berry" naming scheme.) Just in case we come back later and add a different encoding scheme, we'll prepend "LY1--" to each name. .PP We're now ready to run .B otftotfm for the first set of fonts. Note the "\fB\-f\fRkern \fB\-f\fRliga" options, which access pair kerns and the default "f" ligatures. .Sp .nf \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Regular.otf \e \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-Regular \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-It.otf \e \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-It \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Semibold.otf \e \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-Semibold \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-SemiboldIt.otf \e \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-SemiboldIt \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Bold.otf \e \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-Bold \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-BoldIt.otf \e \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-BoldIt .fi .Sp The small-caps fonts are generated with an additional "\fB\-f\fRsmcp" option. We append "--fsmcp" to the font metric names as well, differentiating them from the regular fonts. Although MinionPro's italic fonts support small-caps, the LaTeX font selection scheme can't access them easily, so we've left them off. .Sp .nf \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Regular.otf \e \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1--MinionPro-Regular--fsmcp \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Semibold.otf \e \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1--MinionPro-Semibold--fsmcp \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Bold.otf \e \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1--MinionPro-Bold--fsmcp .fi .Sp To get old-style numerals, just add the "\fB\-f\fRonum" option to each invocation -- and, to reduce confusion, append "--fonum" to the font metric names. .PP At this point, all our font metric files are installed, and it's finally time to create the ".fd" file. (The ".fd" format is documented in .IR "The LaTeX Companion" .) Let's call the LaTeX font family "MinionPro". Then the ".fd" file is "LY1MinionPro.fd", and it contains: .Sp .nf \eDeclareFontFamily{LY1}{MinionPro}{} \eDeclareFontShape{LY1}{MinionPro}{m}{n}% { <\-> LY1--MinionPro-Regular }{} \eDeclareFontShape{LY1}{MinionPro}{m}{it}{ <\-> LY1--MinionPro-It }{} \eDeclareFontShape{LY1}{MinionPro}{m}{sc}% { <\-> LY1--MinionPro-Regular--fsmcp }{} \eDeclareFontShape{LY1}{MinionPro}{sb}{n}% { <\-> LY1--MinionPro-Semibold }{} \eDeclareFontShape{LY1}{MinionPro}{sb}{it}% { <\-> LY1--MinionPro-SemiboldIt }{} \eDeclareFontShape{LY1}{MinionPro}{sb}{sc}% { <\-> LY1--MinionPro-Semibold--fsmcp }{} \eDeclareFontShape{LY1}{MinionPro}{b}{n}{ <\-> LY1--MinionPro-Bold }{} \eDeclareFontShape{LY1}{MinionPro}{b}{it}% { <\-> LY1--MinionPro-BoldIt }{} \eDeclareFontShape{LY1}{MinionPro}{b}{sc}% { <\-> LY1--MinionPro-Bold--fsmcp }{} \eDeclareFontShape{LY1}{MinionPro}{bx}{n}% { <\-> ssub * MinionPro/b/n }{} \eDeclareFontShape{LY1}{MinionPro}{bx}{it}% { <\-> ssub * MinionPro/b/it }{} \eDeclareFontShape{LY1}{MinionPro}{bx}{sc}% { <\-> ssub * MinionPro/b/sc }{} .fi .PP We're now ready to use MinionPro in LaTeX, with lines like this in the document preamble: .Sp .nf \eusepackage[LY1]{fontenc} \erenewcommand{\ermdefault}{MinionPro} \erenewcommand{\ebfdefault}{b} .fi .PP Of course, we're free at any time to add more MinionPro variants with .BR otftotfm ; they'll become accessible to LaTeX as soon as we edit the "MinionPro.fd" file. ' .SH OPTIONS With long options, you need type only as many characters as will make the option unique. .SS Font Feature and Transformation Options .PD 0 .TP 5 .BI \-s " script\fR[.\fIlang\fR], " \-\-script= "script\fR[.\fIlang\fR]" Apply features suitable to the script system .I script and language system .IR lang . Scripts and language systems are two-to-four-letter names assigned by Microsoft and Adobe. Examples include "latn" (Latin script), "grek" (Greek script), and "yi.YIC" (Yi script with classic characters). If .I lang is not specified, .B otftotfm will use the default language system for that script. You can give this option multiple times. Run "\fBotfinfo\fR \-s \fIfont\fR" to see the list of scripts and languages a font supports. Defaults to "latn". ' .Sp .TP 5 .BI \-f " feature\fR, " \-\-feature= "feature" Activate the feature named .IR feature . Features are four-letter names assigned by Microsoft and Adobe; they are meant to correspond to font behaviors, such as kerning or small-capitals. Examples include "liga" (default ligatures), "dlig" (discretionary ligatures), "kern" (kerning), and "c2sc" (replacing capitals with small capitals). Give this option multiple times to apply multiple features. Run "\fBotfinfo\fR \-f [\-\-script option] \fIfont\fR" to see the list of features a font supports for a specified script. Defaults to any features required by the selected scripts. ' .Sp .TP 5 .BI \-\-lf " feature\fR, " \-\-letter\-feature= "feature" Activate the feature named .IR feature , but only for letters. For instance, the "\-f smcp" option will apply the small-caps feature to all characters in the encoding; this may result in changes to punctuation and numbers as well as letters. The "\-\-lf smcp" option will apply the small-caps feature only to letters, meaning characters with the "Letter" Unicode property. ' .Sp .TP 5 .BI \-\-subs\-filter " pattern" .TP 5 .BI \-\-include\-subs " pattern" .TP 5 .BI \-\-exclude\-subs " pattern" .TP 5 .BI \-\-clear\-subs Limit the characters that .B otftotfm will substitute. Substitution is allowed on an input character if it matches at least one of the .B \-\-include patterns, and none of the .B \-\-exclude patterns. Each pattern applies to all following features, except that the .B \-\-clear option clears any accumulated patterns. The .BI \-\-subs\-filter " pattern" option acts like .B \-\-clear\-subs followed by .BI \-\-include\-subs " pattern\fR. " For pattern syntax, see CHARACTER PATTERNS, below. .Sp In the command line below, the '' pattern will force the "onum" feature to substitute only numbers (and not, for example, punctuation). The "salt" feature can still substitute any character. .nf \fBotftotfm\fR \fB\-f\fRsalt \fB\-\-include\-subs\fR='' \fB\-f\fRonum \.\.\. .fi ' .Sp .TP 5 .BI \-E " fac\fR, " \-\-extend= fac Widen, or extend, the font by a factor of .IR fac . Like .M afm2tfm 1 's .B \-e option. ' .Sp .TP 5 .BI \-S " amt\fR, " \-\-slant= amt Oblique, or slant, the font by .IR amt . Like .M afm2tfm 1 's .B \-s option. ' .Sp .TP 5 .BI \-L " amt\fR, " \-\-letterspacing= amt Letterspace each character by .IR amt units, where 1000 units equals one em. The width of each character increases by .IR amt , with half the space distributed to each sidebearing. Boundary-character kerns are added to maintain alignment at the ends of lines. ' .Sp .TP 5 .BR \-\-math\-spacing "[=\fIskewchar\fR]" Ignore the font's claimed character widths, deriving horizontal metrics from bounding boxes instead. This results in similar spacing as the Computer Modern Math Italic font, with increased sidebearings for letters like f and j. .Sp If you provide .IR skewchar , a number between 0 and 255 or a single character, then .B otftotfm adds heuristically-derived kerns to the font that may improve accent positions in math mode. To get the benefits, you must tell TeX about the .I skewchar with a command like "\eskewchar\efont=\fIskewchar\fR". ' .Sp .TP 5 .BI "\-k " "N\fR, " \-\-min\-kern= N Only output kerning pairs whose absolute value is .IR N or larger. Larger minimum kerns make kerning less precise, but shrink the output TFM file. The default minimum kern is 2.0, or 0.002 em. ' .Sp .TP 5 .BI \-\-space\-factor= fac Scale the width of the inter-word space by a factor of .IR fac . ' .Sp .TP 5 .BI \-\-design\-size= size Set the output font's design size to .IR size , a value in TeX points. This value is mostly just documentation, since LaTeX essentially ignores fonts' design sizes, but plain TeX may occasionally use the design size to decide how large a font should be. (Loading a font in TeX "at" a particular size effectively ignores the design size; loading a font plain or "scaled" by a given factor uses the design size.) The default is taken from the input font's optical size feature, or 10pt if it has no such feature. .PD ' ' .SS Encoding Options ' .PD 0 .TP 5 .BI \-e " encoding\fR, " \-\-encoding= encoding Select the output metrics's base .M dvips 1 encoding. .B Otftotfm will search for .IR encoding [.enc] the same way that .B dvips would, so you may not need to give a full pathname. Say .B \-e \- to start with the font's default encoding. See ENCODINGS, below, for more information. ' .Sp .TP 5 .BI \-\-literal\-encoding= encoding Select the .M dvips 1 encoding used for the font. No glyph substitutions will be permitted, so the output encoding will equal the input encoding (and .B otftotfm will not generate an output encoding). ' .Sp .TP 5 .BI \-\-ligkern= command Execute the specified LIGKERN .IR command in addition to any in the encoding. For example, "\fB\-\-ligkern\fR 'T {L} h'" suppresses any T_h ligature in the font. You can supply multiple .B \-\-ligkern options. See ENCODINGS, below. ' .Sp .TP 5 .BI \-\-position= command Execute the specified POSITION .IR command in addition to any in the encoding. For example, "\fB\-\-position\fR 'T 10 0 20'" adds ten units of space to either side of the "T" character. You can supply multiple .B \-\-position options. See ENCODINGS, below. ' .Sp .TP 5 .BI \-\-unicoding= command Execute the specified UNICODING .IR command in addition to any in the encoding. For example, "\fB\-\-unicoding\fR 'pi1 =: uni03D6'" tells .B otftotfm to encode "/pi1" as U+03D6 GREEK PI SYMBOL. You can supply multiple .B \-\-unicoding options. See ENCODINGS, below. ' .Sp .TP 5 .BI \-\-no\-encoding\-commands Ignore any LIGKERN and/or UNICODING commands in the encoding file. ' .Sp .TP 5 .BI \-\-no\-default\-ligkern Don't include .BR otftotfm 's default LIGKERN commands. ' .Sp .TP 5 .BI \-\-coding\-scheme= scheme Set the font's TFM coding scheme to .IR scheme , which must be a string less than 40 characters long containing no parentheses. The default is the encoding's PostScript name. Most tools ignore the coding scheme, so you probably don't need to worry about this command unless you are using fontinst. ' .Sp .TP 5 .BI \-\-boundary\-char= char Set the font's boundary character to .IR char , which should either be a single non-digit character, or a number between \-1 and 255. The default is taken from the encoding. ' .Sp .TP 5 .BI \-\-altselector\-char= char Set the font's alternate-selector character to .IR char , which should either be a single non-digit character, or a number between \-1 and 255. Use an alternate selector if you want to choose between different versions of a character from within a TeX file. For instance, say that your font provides three versions of "A". If you want to access them all, pick a character to be your alternate selector -- say "*". Then give .B otftotfm the .BR \-\-altselector\-char= '*' option. In TeX, "A" will produce the normal version, "A*" will produce the first alternate, and "A**" will produce the second alternate. Furthermore, "s*t" will activate any discretionary "s_t" ligature in the font. The default alternate-selector character is taken from the encoding. .Sp The .B \-\-altselector\-char mechanism uses the features specified by .BR \-\-altselector\-feature options. You don't need to turn on those features if you use .BR \-\-altselector . .Sp See Sivan Toledo's article cited in the SEE ALSO section for more information. ' .Sp .TP 5 .BI \-\-altselector\-feature= feature Activate the feature named .I feature for the .B \-\-altselector\-char mechanism. Give this option multiple times to activate multiple features. This option activates features only for use with .BR \-\-altselector\-char ; use the .B \-\-feature option to activate features globally. Defaults to the .I salt and .I dlig features. ' .Sp .TP 5 .BI \-\-alternates\-filter= pattern .TP 5 .BI \-\-include\-alternates= pattern .TP 5 .BI \-\-exclude\-alternates= pattern .TP 5 .BI \-\-clear\-alternates Limit the alternate characters that .B otftotfm will select. An alternate is used if it matches at least one of the .B \-\-include patterns, and none of the .B \-\-exclude patterns. Each pattern applies to all following features, except that the .B \-\-clear option clears any accumulated patterns. The .BI \-\-alternates\-filter " pattern" option acts like .B \-\-clear\-alternates followed by .BI \-\-include\-alternates " pattern\fR. " For pattern syntax, see CHARACTER PATTERNS, below. .Sp OpenType fonts can have many alternates per character, most of which aren't interesting. For example, the character "a" in WarnockPro-Regular has five alternates, "ordfeminine", "Asmall", "asuperior", "a.end", and "orn.013". The .B \-\-altselector\-char option lets you cycle through these alternates, but it's better to leave out the ones you don't want, to avoid overfull encodings. Thus, if you were only interested in ".end" variants, you might supply an .BR \-\-include\-alternates= "'*.end'" option. .Sp In the command line below, the '*.end' pattern will apply to "aalt" alternates, but not to "salt" alternates. .nf \fBotftotfm\fR \fB\-f\fRsalt \fB\-\-include\-alternates\fR='*.end' \fB\-f\fRaalt \.\.\. .fi ' .PD ' ' .SS Automatic Mode Options ' .PD 0 .TP 5 .BI \-a "\fR, " \-\-automatic Select automatic mode. ' .Sp .TP 5 .BI \-v " vendor\fR, " \-\-vendor= vendor Set the font vendor name, which is used to locate files within the TDS. Defaults to "lcdftools". .Sp In automatic mode, TeX and friends will generally find required font files independently of the vendor you select. ' .Sp .TP 5 .BI \-\-typeface= typeface Set the font typeface name, which is used to locate files within the TDS. Defaults to the current font's family name with unsuiable characters removed. ' .Sp .TP 5 .BI \-\-no\-type1 Do not use .M cfftot1 1 to create Type 1 fonts corresponding to the OpenType input fonts. ' .Sp .TP 5 .BI \-\-no\-dotlessj Do not use .M t1dotlessj 1 to create a special dotless-j font when the input font doesn't have dotless-j. ' .Sp .TP 5 .BI \-\-no\-updmap Do not run an .M updmap 1 program. This can be useful if you're installing a bunch of fonts; it is much faster to run .B updmap once, at the end, than to run it once per font. .PD ' ' .SS Output Options .PD 0 .TP 5 .BI \-n " texname\fR, " \-\-name= texname Set the TeX name of the output font, which is used in font map files and, in automatic mode, to generate the output filename. The default is derived from the OpenType font's name and the features you selected. ' .Sp .TP 5 .BI \-p "\fR, " \-\-pl Output human-readable PL and VPL metrics, not binary TFM and VF metrics. Note: .BR Otftotfm 's PL and VPL output files are legal, but the .B fontinst program may not accept them (it has a picky parser). Make sure to supply a .BR \-\-coding\-scheme ; if that doesn't help, run the TFM output through .M tftopl 1 . ' .Sp .TP 5 .BI \-\-no\-virtual Do not generate virtual fonts (VFs and VPLs). .B Otftotfm will warn if the selected font features cannot be implemented without virtual fonts. ' .Sp .TP 5 .BI \-\-no\-encoding Do not generate an encoding file. ' .Sp .TP 5 .BR \-\-output\-encoding [=\fIfile\fR] Only generate an encoding file; do not generate any other output. The encoding file is written to .IR file , or to standard output if no .I file argument is supplied. ' .Sp .TP 5 .BI \-\-no\-map Do not generate a font map line for the font. .PD ' ' .SS File Location Options .PD 0 .TP 5 .BI \-\-tfm\-directory= dir .TP 5 .BI \-\-pl\-directory= dir .TP 5 .BI \-\-vf\-directory= dir .TP 5 .BI \-\-vpl\-directory= dir .TP 5 .BI \-\-encoding\-directory= dir .TP 5 .BI \-\-type1\-directory= dir Set the directory used for various output types. Each directory may be set by an environment variable, and defaults to a TDS directory in automatic mode, or to "." otherwise. Environment variable names and default TDS locations are described in the Automatic Mode section above. ' .Sp .TP 5 .BI \-\-map\-file= filename Set file in which .B otftotfm will write a font map line for the font. The default is the standard output in manual mode, and "TEXMF/fonts/map/dvips/\fIvendor\fR/\fIvendor\fR.map" (or "TEXMF/dvips/\fIvendor\fR/\fIvendor\fR.map" on older installations) in automatic mode. .PD ' ' .SS Miscellaneous Options .PD 0 .TP 5 .BI \-\-glyphlist= file Use .I file as the Adobe glyph list, which helps translate glyph names to Unicode code points. See ENCODINGS, below, for more information. ' .Sp .TP 5 .BR \-V ", " \-\-verbose Write progress messages to standard error. ' .Sp .TP 5 .BR \-\-no\-create Do not create or modify any files. Instead, write messages about the program's hypothetical progress to standard error. ' .Sp .TP 5 .BR \-\-force Generate all files, even if it looks like versions are already installed. ' .Sp .TP 5 .BR \-q ", " \-\-quiet Do not generate any error messages. ' .Sp .TP 5 .BI \-\-kpathsea\-debug= flags Set path searching debugging flags. See the .I Kpathsea manual for details. ' .Sp .TP 5 .BR \-h ", " \-\-help Print usage information and exit. ' .Sp .TP 5 .BR \-\-version Print the version number and some short non-warranty information and exit. .PD ' .SH ENCODINGS .B Otftotfm interprets encoding files as Unicode. For example, if an input encoding has "/dotlessi" at position 10, then .B otftotfm detects that the user wants to encode Unicode character U+0131 LATIN SMALL LETTER DOTLESS I at position 10. The output encoding will use whatever glyph the font suggests for that Unicode character, given the collection of features you chose. .PP You can control this process with "UNICODING" comments in the input encoding file. UNICODING comments have the following format: .nf % UNICODING \fIglyph\fR =: \fIchoice1\fR [\fIchoice2\fR ...] ; .fi \fIGlyph\fR and the .IR choice s are PostScript glyph names. This comment tells .B otftotfm that the glyph named .I glyph translates into the first Unicode value in the .I choice list that has a character in the font. For example, .nf % UNICODING pi1 =: uni03D6 ; .fi tells otftotfm that the character "/pi1" encodes as U+03D6 GREEK PI SYMBOL, and .nf % UNICODING Delta =: uni0394 uni2206 ; .fi tells it that U+0394 GREEK CAPITAL LETTER DELTA should be preferred to U+2206 INCREMENT as an encoding for "/Delta". You can also supply regular glyph names: .nf % UNICODING Delta =: Deltagreek Delta ; .fi .B Otftotfm uses Adobe's .I glyphlist.txt file to translate glyph names to Unicode; see .IR http://partners.adobe.com/asn/developer/type/unicodegn.html . .LP You can map a glyph to nothing to remove that glyph from the input encoding. This is useful to remove optional characters; for instance: .nf % UNICODING ff =: ; fi =: ; fl =: ; ffi =: ; ffl =: ; .fi The f-ligatures will be added back to the encoding, preferably at their original locations, if some font feature requires them. .LP Map a glyph to 'emptyslot' if you don't want .B otftotfm to use the slot for a ligature character. For example, given this UNICODING, .nf % UNICODING ff =: ff emptyslot ; .fi .B otftotfm will leave the 'ff' encoding slot unused if the font has no 'ff' glyph. (Note that most OpenType fonts provide a visible representation for unused encoding slots, namely a box with an X inside.) .LP Each UNICODING line can contain multiple commands, separated by spaced semicolons. .PP LIGKERN comments in the encoding can add ligatures and inhibit kerns, as in .M afm2tfm 1 . To add a ligature, say: .nf % LIGKERN \fIglyph1\fR \fIglyph2\fR =: \fIresult\fR ; .fi The "=:" operator indicates a normal ligature, where both the input glyphs are removed and replaced by .IR result . To preserve the left-hand glyph, for an effect like "\fIglyph1\fR \fIglyph2\fR =: \fIglyph1\fR \fIresult\fR", use "|=:" instead; to preserve the right-hand glyph, use "=:|". The other five ligature operators are not yet supported. To remove all kerns between two characters, say: .nf % LIGKERN \fIglyph1\fR {} \fIglyph2\fR ; .fi A "*" matches any character, so .nf % LIGKERN a {} * ; .fi removes all kerns with "a" as the left-hand character, and .nf % LIGKERN * {} * ; .fi removes all kerns. .PP .B Otftotfm also supports extended syntax for setting kern values and inhibiting ligatures. To add an \fIn\fR-unit kern between two glyphs, say: .nf % LIGKERNX \fIglyph1\fR {\fIn\fR} \fIglyph2\fR ; .fi where \fIn\fR is an integer. This: .nf % LIGKERNX \fIglyph1\fR {L} \fIglyph2\fR ; .fi inhibits any ligature between .I glyph1 and .IR glyph2 . "{LK}" and "{KL}" inhibit both ligatures and kerns. .PP You can set the .B \-\-boundary\-char and .B \-\-altselector\-char from an encoding file with commands like this: .nf % LIGKERN || = \fIboundarychar\fR ; % LIGKERNX ^^ = \fIaltselectorchar\fR ; .fi As with UNICODING, each LIGKERN or LIGKERNX line can contain multiple commands, separated by spaced semicolons. .PP The POSITION command shifts a glyph within its bounding box. The syntax is .nf % POSITION \fIglyph\fR \fIpdx\fR \fIpdy\fR \fIadx\fR ; .fi This will add .I pdx units of space to .IR glyph 's left edge; raise it up by .I pdy units; and add .I adx units to its width. For example, to add 10 units of space to either side of the "T" glyph, supply .nf % POSITION T 10 0 20 .fi To move the "degree" symbol up by 20 units, supply .nf % POSITION degree 0 20 0 .fi .PP Finally, the CODINGSCHEME command specifies a default .B \-\-coding\-scheme for the encoding; for example: .nf % CODINGSCHEME EXTENDED TEX FONT ENCODING .fi .PP The .BR \-\-unicoding , .BR \-\-ligkern , and .B \-\-position options let you add virtual UNICODING, LIGKERN/LIGKERNX, and POSITION comments to an encoding. .PP .B Otftotfm has a default set of eight ligatures, namely: .nf space l =: lslash ; space L =: Lslash ; question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ; hyphen hyphen =: endash ; endash hyphen =: emdash ; quoteleft quoteleft =: quotedblleft ; quoteright quoteright =: quotedblright .fi LIGKERN commands in the encoding file and .B \-\-ligkern options can override these defaults, or supply the .B \-\-no\-default\-ligkern option to turn them off. .PP Some common encoding files have commands that are inappropriate for OpenType fonts. For example, "t1.enc" hard-codes f-ligatures, which can cause problems with small-cap fonts. Supply the .B \-\-no\-encoding\-commands option to ignore all commands from the encoding file. Explicit .B \-\-ligkern and .B \-\-unicoding options are processed in any case. ' .SS New Glyphs .PP New glyphs, such as ligatures and contextual substitutions, are added to the encoding in any empty spaces, using their original locations when possible. If the encoding doesn't have enough space for all new glyphs, shorter ligatures composed of unaccented letters get precedence. ' .SS Synthetic Glyphs .PP .B Otftotfm can synthesize some glyphs using virtual font manipulations, if a required glyph is not available in the input font. Specifically, it will synthesize: .Sp .PD 0 .TP 22 cwm TeX's compound word mark (a zero-width "strut" rule with height equal to the font's x-height) .TP ascendercompwordmark "cwm" with height equal to the font's ascenders .TP capitalcompwordmark "cwm" with height equal to the font's capitals .TP visualspace A square cup used to represent spaces .TP dotlessj A dotless "j", synthesized with .M t1dotlessj 1 .TP dblbracketleft Kerned version of "[[" .TP dblbracketright Kerned version of "]]" .TP bardbl The parallel symbol "||" .TP asteriskmath Vertically-centered "*" .TP twelveudash 2/3-em-wide dash .TP threequartersemdash 3/4-em-wide dash .TP centigrade "(degrees)C" .TP interrobang Combined "?!" symbol .TP interrobangdown Inverted interrobang .TP pertenthousand Per-ten-thousand sign (% with two extra 0s) .TP IJ "IJ" ligature .TP ij "ij" ligature .TP Germandbls "SS" (a capital sharp-s) .TP SSsmall Small-capital version of "SS" .TP FFsmall Small-capital version of "FF" .TP FIsmall Small-capital version of "FI" .TP FLsmall Small-capital version of "FL" .TP FFIsmall Small-capital version of "FFI" .TP FFIsmall Small-capital version of "FFL" .PD ' ' .SH "GLYPH PATTERNS" .LP The .BR \-\-include\-subs and .BR \-\-include\-alternates options, and their .B \-\-exclude variants, accept the following types of pattern. .BUP Glyph names. Example: "Aacute". Use .M otfinfo 1 's .B \-g option to see a font's glyph names, and "\fBcfftot1\fR \fIfont\fR.otf | \fBt1testpage\fR" to generate a PostScript file showing each glyph. .BUP Glyph name patterns using the shell-style glob-matching rules: "*" matches any number of characters, "?" matches any single character, and "[...]" matches any character in a set. Example: "*.end". .BUP Unicode category properties in angle brackets. Examples: "", "", "". The complete list of both short and long names: Letter/L, UppercaseLetter/Lu, LowercaseLetter/Ll, TitlecaseLetter/Lt, ModifierLetter/Lm, OtherLetter/Lo; Number/N, DecimalNumber/Nd, LetterNumber/Nl, OtherNumber/No; Punctuation/P, ConnectorPunctuation/Pc, DashPunctuation/Pd, OpenPunctuation/Ps, ClosePunctuation/Pe, InitialPunctuation/Pi, FinalPunctuation/Pf, OtherPunctuation/Po; Symbol/S, MathSymbol/Sm, CurrencySymbol/Sc, ModifierSymbol/Sk, OtherSymbol/So; Mark/M, SpacingMark/Mc, EnclosingMark/Me, NonspacingMark/Mn; Separator/Z, SpaceSeparator/Zs, LineSeparator/Zl, ParagraphSeparator/Zp; Other/C, Surrogate/Cs, Format/Cf, Control/Cc, PrivateUse/Co, Unassigned/Cn. Category values current as of Unicode 4.0. .BUP Unicode ranges. Example: "U+007f-U+008C". .PP The "!" prefix negates a pattern, and you can separate multiple patterns by spaces. ' .SH "FEATURE DIRECTORY" .LP This section lists features common to Western OpenType fonts and describes how .B otftotfm handles them for common fonts. Please send the author mail if .B otftotfm does not handle a feature you need, or you believe it handles some feature incorrectly. .Sp .PD 0 .TP 5 .IR aalt ", Access All Alternates" Lets the user choose between all available alternate forms for a character. This includes things like superscript and subscript variants, different styles (swash, for example), and even ornaments. The .BR \-\-altselector\-feature= aalt option can help an .BR \-\-altselector\-char provide useful access to alternates, but the .I aalt feature isn't usually useful on its own. Try the .IR salt " and " calt features instead. .TP 5 .IR c2sc ", Small Capitals From Capitals" Replaces capital letters with small capitals: a sort of converse of the more conventional .I smcp feature, which replaces lower-case letters with small capitals. Supported. .TP 5 .IR calt ", Contextual Alternates" Lets the user choose between context-appropriate swash forms for each character. For example, given the word "DREW" in a cursive typeface, the "R E W" might be translated to calmer forms than the initial "D". There may be more than one choice for a given letter, in which case the user should be able to select among them. TeX can't support complex contextual alternates, or alternate selection, but .B otftotfm supports some fonts quite well. The input encoding should have lots of empty space for variants, and it should specify a boundary character. See also .IR cswh . .TP 5 .IR case ", Case-Sensitive Forms" Shifts punctuation marks up to a position that works well with all-capital-letter sequences. For example, the hyphen character, which generally centers vertically on the x-height, is raised up to center vertically on a capital letter. Also replaces text figures with lining figures, and accent marks with forms more appropriate for capitals. Supported. .TP 5 .IR cpsp ", Capital Spacing" Adds a bit of space on either side of each capital letter. Supported. (However, the OpenType tag registry suggests that .I cpsp be on by default, but applying to all-caps text only; TeX cannot easily implement that contextual intelligence.) .TP 5 .IR cswh ", Contextual Swash" Lets the user choose between context-appropriate swash forms for each character. For example, in the words "Ab AC", the first "A" might be translated to a swash form, while the second might not. There may be more than one choice for a given letter, in which case the user should be able to select among them. TeX can't support complex contextual swashes, or alternate selection, but .B otftotfm supports some fonts quite well. The input encoding should have lots of empty space for swash variants, and it should specify a boundary character. See also .IR calt . .TP 5 .IR dlig ", Discretionary Ligatures" Activates uncommon ligatures, such as "c_t", "s_p", and "s_t". Supported. .TP 5 .IR dnom ", Denominators" Replaces digits and some punctuation marks with smaller forms sitting on the baseline, intended for fraction denominators. Supported. .TP 5 .IR fina ", Terminal Forms" Substitutes appropriate forms for letters occurring at the ends of words. This feature doesn't select swash variants; it's intended for normal use, and the specification recommends that it be on by default. Partially supported: TeX will only treat spaces as the ends of words, where a correct implementation would probably include punctuation too. See .IR cswh for selecting swash variants active at the ends of words. .TP 5 .IR frac ", Fractions" Replaces simple sequences like "1/2" with nice-looking fractions. Supported, but beware: many fonts will translate "11/32" into "1" + "1/3" + "2". .TP 5 .IR hist ", Historical Forms" Replaces characters with historical variants. Usually, this means at least translating regular "s" to long "s". Supported. .TP 5 .IR kern ", Kerning" Adjusts the space between characters (pair kerning). Generally supported, and you should probably turn it on. .TP 5 .IR liga ", Standard Ligatures" Activates common ligatures, such as "f_f", "f_i", "f_f_j", and (in some Adobe fonts) "T_h". Generally supported, and you should probably turn it on. .TP 5 .IR lnum ", Lining Figures" Uses lining figures, the set of digits that are all about as high as capital letters. Supported. Compare .IR onum ; see also .IR pnum and .IR tnum. .TP 5 .IR numr ", Numerators" Replaces digits and some punctuation marks with smaller, raised forms intended for fraction numerators. Supported, but not usually useful. .TP 5 .IR onum ", Oldstyle Figures" Uses old-style figures, also known as text figures. This is the set of digits that have ascenders and descenders like lower-case letters. Supported. Compare .IR lnum ; see also .IR pnum and .IR tnum . .TP 5 .IR ordn ", Ordinals" Designed for Spanish and French. Replaces ordinal numbers, such as "2.o", with forms where the "o" is raised, and replaces the sequence "No" with an integrated glyph. Supported. .TP 5 .IR ornm ", Ornaments" Replaces some alphabetic characters in the font with ornaments, and links the bullet character to a set of all bullet-like ornaments, from which the user can choose. Partially supported: TeX can handle alphabetic substitutions, but not bullet choice. .TP 5 .IR pnum ", Proportional Figures" Digits will have different widths. Supported. Compare .IR tnum ; see also .IR lnum and .IR onum. .TP 5 .IR salt ", Stylistic Alternates" Lets the user choose between stylistic alternate forms for a character. The .BR \-\-altselector\-char mechanism provides useful access to this feature. If you turn on .IR salt globally, .B otftotfm takes the first alternate form whenever there's more than one choice. See also .IR aalt and .IR ss01 ; .IR salt is generally more useful than .IR aalt for TeX, since it refers exclusively to stylistic alternates. .TP 5 .IR sinf ", Scientific Inferiors" Replaces digits and some punctuation marks with smaller, lowered forms intended for subscripts. Supported. .TP 5 .IR size ", Optical Size" This feature stores information about the range of optical sizes for which the font was intended. There is no point in selecting it with .BR otftotfm , since it should not change the font's appearance in any way. .TP 5 .IR smcp ", Small Capitals" Replaces lower-case letters with small capitals. Supported. Compare .IR c2sc . .TP 5 .IR ss01 - ss20 ", Stylistic Sets 1-20" Replaces characters with a uniform set of stylistic alternates. Differs from features like .I salt in that a Stylistic Set is uniform: an .I ssXX feature should never involve selection from a set of possible alternate characters. Supported. .TP 5 .IR sups ", Superscript" Replaces digits, some punctuation marks, and some lower-case letters with smaller, raised forms intended for superscripts. Supported. .TP 5 .IR swsh ", Swash" Activates all swash forms for each character. There may be more than one swash form, in which case .B otftotfm will pick the first one listed. Supported, except that swash variants other than the first are inaccessible. .TP 5 .IR tnum ", Tabular Figures" All digits will have the same width, so that tables and the like will align visually. Supported. Compare .IR pnum ; see also .IR lnum and .IR onum. .TP 5 .IR zero ", Slashed Zero" Replaces the zero character with a slashed zero. Supported. .PD ' .SH "DIAGNOSTICS AND TROUBLESHOOTING" ' .TP 5 no writable directory found in $TEXMF ' .B Otftotfm could not find a writable directory in your $TEXMFVAR or $TEXMF path. Did you create a .I $HOME/.texmf-var or .I $HOME/texmf directory? If so, run the command "kpsewhich \-\-expand\-path='$TEXMF'" to verify that directory is not being found. You may need to set your TEXMF environment variable, to '{!!'"$HOME"'/texmf,!!$TEXMFMAIN}', for instance (note the different kinds of quotes; on my machine, this expands to \&'{!!/home/kohler/texmf,!!$TEXMFMAIN}'). ' .TP 5 \&'\fIchar\fR' has no encoding, ignoring kern removal .PD 0 .TP 5 (or ligature removal, lig/kern removal, or ligature) .PD ' These messages indicate a slight problem with your encoding file: one of the LIGKERN commands referred to a character not present in the encoding. This might be due to a misspelling in the LIGKERN command or the encoding file, or it might be an oversight. Either fix the encoding file or ignore the warning. ' .TP 5 can't map '\fIchar\fR' to Unicode ' Another encoding file problem: One of the glyph names in an UNICODING block could not be converted to Unicode. This is problematic since UNICODING exists wholly to translate glyph names into Unicode. Fix the encoding file or ignore the warning. ' .TP 5 not enough room in encoding, ignoring \fIN\fR glyph(s) ... ' There wasn't space in the encoding for all the glyphs referred to by the features you selected. For example, maybe the font had more ligatures than there were empty slots in the encoding. Fix this warning by selecting fewer features, or by using an encoding with more empty slots, such as the 7t.enc encoding distributed with .BR otftotfm . ' .SH "FREQUENTLY ASKED QUESTIONS" .TP 5 How can I get a small-caps "SS" in place of the German sharp-S? ' Supply the option "\fB\-\-unicoding\fR 'germandbls =: SSsmall'". ' .TP 5 How can I prevent f-ligatures from forming in a small-caps font? ' This should happen automatically, but some overzealous encoding files add f-ligatures even when the font doesn't request them. Try the "\fB\-\-no\-encoding\-commands\fR" option if this is a problem for you. ' .TP 5 \fBOtftotfm\fR seems to take a long time. ' Use the .B \-V option to see what it's doing. Often the culprit is the .M updmap 1 program; if you're planning to run .B otftotfm multiple times, give it the .B \-\-no\-updmap option and run .B updmap manually when you're done. ' .SH "BUGS" .\" .LP .\" Presumably some context-sensitive positionings and ligatures could be .\" implemented with TeX's boundary character, but .\" .B otftotfm .\" doesn't do that yet. .LP See the documentation for .B \-\-pl above if you have problems running .BR otftotfm 's output through .BR fontinst . ' .SH "SEE ALSO" .LP .M pltotf 1 , .M tftopl 1 , .M vptovf 1 , .M afm2tfm 1 , .M dvips 1 , .M cfftot1 1 , .M otfinfo 1 , .M t1dotlessj 1 , .M t1testpage 1 , .M kpsewhich 1 , .M updmap 1 .LP .I "Adobe Type 1 Font Format" .LP Adobe Technical Notes #5176, .IR "The Compact Font Format Specification" , and #5177, .I "The Type 2 Charstring Format" .LP .IR "OpenType Specification" , Version 1.4 .LP .IR "A Directory Structure for TeX Files" , http://www.tug.org/tds/ .LP .IR "Kpathsea: A library for path searching" , http://www.tug.org/kpathsea/ .LP Sivan Toledo, .IR "Exploiting Rich Fonts" , TUGboat 21(2), 2000, http://www.tug.org/TUGboat/Articles/tb21-2/tb67tole.pdf .LP Michel Goossens, Frank Mittelbach, and Alexander Samarin, .IR "The LaTeX Companion" (for information on the .fd file format). ' .SH AUTHOR Eddie Kohler (kohler@cs.ucla.edu) .PP Thanks to Karl Berry, Marco Kuhlmann, Adam Lindsay, Bruce D'Arcus, Thomas Esser, Claire Connelly, Nelson H.F. Beebe, and Ryuji Suzuki for suggestions, bug reports, and help. Particular thanks to Achim Blumensath and Michael Zedler for suggestions and patches, some of them extensive.