Herramientas de fuentes

La mayoría de los autores nunca toca a mano un archivo .vf. Pero cuando empieza a crear o conectar fuentes, necesita tres herramientas potentes: la fuente virtual que enlaza una fuente lógica con fuentes reales, el JFM (Japanese Font Metric) que registra anchos de glifos CJK y espaciado de puntuación, y las herramientas de tablas de glifos que muestran qué contiene realmente una fuente. Esta página cubre esas utilidades de bajo nivel, dirigidas a desarrolladores de fuentes y usuarios avanzados.

Fuentes virtuales — una fuente lógica asignada a fuentes reales

Una fuente virtual (.vf) es una capa que asigna la única fuente lógica que ve TeX a glifos reales y operaciones tipográficas de bajo nivel. En palabras de la TeX FAQ, las fuentes virtuales son “a means of collecting bits and pieces together to make the glyphs of a font”, donde esas piezas se toman de otras fuentes, reglas y comandos de composición con información de posicionamiento. Esto permite reasignar el orden de los caracteres, combinar varias fuentes en una, simular versalitas o agrupar las piezas de una fuente matemática en un solo tipo de letra.

El mecanismo divide el trabajo en dos. TeX solo necesita las dimensiones: ancho, alto y profundidad, que lee del archivo compañero .tfm (TeX Font Metric). Cómo se dibuja *realmente* cada glifo —qué glifo de qué fuente real, desplazado cuánto— vive en el .vf, y lo lee el controlador DVI (dvips, dvipdfmx). Así que una fuente virtual es siempre una pareja: un .tfm más un .vf. TeX posiciona todo desde el .tfm; el controlador expande el .vf y vierte el resultado en fuentes reales.

Como el .vf binario no está pensado para humanos, existe una forma de texto legible, el .vpl (Virtual Property List). Escrito como una “property list” anidada, resulta cómodo para especificar e inspeccionar a mano los detalles de una fuente. Dos programas convierten entre las formas, y ambos vienen con todas las distribuciones TeX (vptovf y vftovp, de las herramientas fontware):

  • vptovf.vpl (texto) → .vf + .tfm (binario). Convierte una descripción de fuente virtual escrita o editada a mano en la forma que TeX y el controlador pueden usar.
  • vftovp.vf + .tfm (binario) → .vpl (texto). Devuelve una fuente virtual existente a una forma legible para poder inspeccionar o editar su contenido.

Conviene memorizar el orden de los argumentos. vftovp toma fuente virtual, métrica, salida; vptovf toma descripción, fuente virtual, métrica. En ambos se pueden omitir las extensiones: se añaden .vf / .tfm / .vpl automáticamente. Para desmontar una fuente virtual existente, por ejemplo:

terminal
# 仮想フォントを人間可読の VPL に戻して中身を見る
# Turn a virtual font back into a readable VPL to inspect it
vftovp font.vf font.tfm font.vpl

# 編集後、VPL から .vf と .tfm を作り直す
# After editing, rebuild the .vf and .tfm from the VPL
vptovf font.vpl font.vf font.tfm

Coloque el .tfm resultante bajo .../fonts/tfm/<supplier>/ y el .vf bajo .../fonts/vf/<supplier>/ en el árbol texmf, actualice la base de datos de nombres de archivo con mktexlsr, y entonces podrá localizarlos con kpsewhich font.vf. Para el trabajo moderno de generar fuentes virtuales desde fuentes PostScript, es más común usar fontinst que escribir un .vpl a mano. En la práctica, una fuente virtual es algo que se lee y ajusta a partir de la salida de esas herramientas, más que algo que se escriba desde cero.

JFM — Japanese Font Metric

La composición japonesa necesita algo que un .tfm occidental no puede dar. Los kanji y kana se colocan, por defecto, en una caja cuadrada (de ancho completo), y el espacio entre ellos no es el espacio entre palabras del texto occidental; en su lugar, los huecos se abren o se cierran solo alrededor de la puntuación (paréntesis y signos de cierre). La estructura que contiene esto es el JFM (Japanese Font Metric). pTeX y upTeX usan un archivo JFM binario parecido a un .tfm; LuaTeX-ja describe la misma función como una tabla Lua.

La diferencia principal con un TFM occidental es que un JFM agrupa caracteres en “character classes”. Como especifica el manual de LuaTeX-ja, todas las longitudes de un JFM son números de punto flotante en unidades de tamaño de diseño, ancladas a zw (ancho completo) y zh (alto completo, height + depth); cada clase lleva sus propios width, height, depth e italic (corrección itálica). La clase 0 siempre existe y contiene la gran mayoría de caracteres japoneses que no pertenecen a ninguna otra clase. La puntuación y elementos similares van en clases separadas, y una tabla de glue/kern que se inserta entre una clase y otra produce el espaciado alrededor de signos y paréntesis.

En la familia pTeX, JAglue —el espacio insertado entre dos caracteres japoneses y entre un carácter japonés y texto occidental— se añade automáticamente al componer. El JFM fija el espacio entre clases; entre caracteres japoneses sin clase se usa el kanjiskip predeterminado, y en una frontera japonés/occidental, xkanjiskip. Este último, junto con *kinsoku* (las reglas que impiden ciertos caracteres al inicio o final de línea), es central para el aspecto de la composición japonesa. Un archivo JFM de LuaTeX-ja es un script Lua que hace una única llamada a luatexja.jfont.define_jfm{ ... }, con un esqueleto como este:

latex
-- LuaTeX-ja の JFM(抜粋)。寸法はすべてデザインサイズ単位
-- A LuaTeX-ja JFM (excerpt); all lengths are in design-size units
luatexja.jfont.define_jfm {
  version = 3,
  dir = 'yoko',          -- 横組み / horizontal
  zw = 1.0, zh = 1.0,     -- 全角の幅・高さ / full-width, full-height
  [0] = {                -- 文字クラス 0:大多数の漢字・仮名 / class 0: most kanji & kana
    chars = { '漢' },
    width = 1.0, height = 0.88, depth = 0.12, italic = 0.0,
  },
  [1] = {                -- 句点など別クラス / a class for stops, etc.
    chars = { '。', '、' },
    width = 0.5, height = 0.88, depth = 0.12, italic = 0.0,
  },
}

LuaTeX-ja incluye JFM estándar para distintas necesidades. jfm-ujis.lua es el estándar, basado en la métrica upnmlminr-h.tfm usada en upTeX (la mayoría de caracteres son cuadrados); jfm-jis.lua corresponde a jis.tfm, muy usado en pTeX (los caracteres tienden a ser rectángulos horizontales); jfm-min.lua corresponde al min10.tfm predeterminado de pTeX. En una definición de fuente se selecciona uno con jfm=, como en \jfont\F=HaranoAjiMincho-Regular:jfm=ujis. Los JFM binarios de la familia pTeX, por su parte, se convierten a texto y desde texto con ppltotf y ptftopl, las contrapartes japonesas de pltotf y tftopl para pl/tfm occidentales.

Listar qué contiene una fuente — fonttable y nfssfont

Para ver qué glifos contiene realmente una fuente, se imprime una tabla de glifos (tabla de fuente). La forma sencilla desde un documento es el paquete fonttable, cuya orden central \fonttable{<font>} compone una tabla de todos los glifos de la fuente indicada. El argumento es el nombre de la fuente, más precisamente de su .tfm: cmr10 para Computer Modern Roman, pzdr para Zapf Dingbats, etc.

document.tex
\documentclass{article}
\usepackage{fonttable}
\begin{document}
% フォント名(.tfm)を渡すと全字形の表が出る
% Pass a font (.tfm) name to get a table of every glyph
\fonttable{cmr10}

% NFSS の 4 属性で指定する版(エンコーディング/ファミリ/シリーズ/シェイプ)
% The NFSS-attribute version (encoding/family/series/shape)
\xfonttable{T1}{cmr}{m}{n}
\end{document}

Para especificar mediante los cuatro atributos NFSS, use \xfonttable{<encoding>}{<family>}{<series>}{<shape>} (por ejemplo \xfonttable{T1}{cmr}{m}{n}). Puede restringir el rango de la tabla a bloques de 16 glifos con \fontrange{<low>}{<high>}, hasta un máximo de 256 glifos. Y \fonttext{<font>} compone texto de muestra en la fuente en lugar de una cuadrícula de glifos, útil para juzgar cómo se ve realmente.

Este fonttable es una reempaquetación en forma de paquete de las herramientas clásicas que vienen con TeX, nfssfont.tex y testfont.tex (gran parte del código del paquete es una versión editada de nfssfont.tex, y sus comandos de prueba de glifos reimplementan el testfont.tex de Knuth). Las herramientas clásicas funcionan *interactivamente*: se inicia con tex nfssfont, se escribe un nombre de fuente (como cmr10), se usa \table para imprimir la tabla, \init para cambiar a otra fuente y \bye para terminar.

terminal
# 古典的な対話ツール:起動 → フォント名 → \table\bye
# The classic interactive tool: launch, name the font, \table, \bye
tex nfssfont
# Name of font to test = cmr10
# *\table
# *\bye

De forma relacionada, para registrar la identidad de la fuente actual, \showfont muestra sus cinco atributos NFSS: encoding, family, series, shape y size. Para rastrear el comportamiento de carga de fuentes en sí, el paquete tracefnt resulta útil. Por último, para saber qué hay instalado en el sistema y desde dónde se leen los archivos, los puntos de partida son updmap, que gestiona los mapas de fuentes, y kpsewhich, que encuentra la ubicación real de un archivo (por ejemplo kpsewhich cmr10.tfm).