Normalmente una tipografía se dibuja a mano en un editor: el diseñador coloca puntos y tira de las curvas. Las tipografías de exhibición de Ipak — Bannai, Ganch, Metro y Kalam — están hechas de otro modo. Cada letra la construye un pequeño programa en Python según una regla única para toda la tipografía. La regla es una sola, así que los grosores, los cortes y el ritmo coinciden en todos los signos — de la A a la Ҳ y del 0 al №.
En el artículo: cómo es la regla de cada tipografía, cómo se ensambla el archivo de la tipografía a partir de las letras dibujadas y cuáles son, por ahora, los límites de la versión 0.1.

Primero el motivo, después las letras
Cada tipografía de exhibición no empieza por la letra, sino por un motivo que se reconoce a primera vista: el ladrillo del bannai, el cuchillo del tallador de ganch, las letras metálicas del metro de Taskent, la pluma del kalam (sobre la historia de estas técnicas, en el artículo «Bannai, ganch, kalam»). El motivo se convierte en regla, y la regla, en un programa que construye con ella cualquier letra.
Para comparar los motivos en acción, la palabra TOSHKENT se colocó sobre una foto del aeropuerto de Taskent en lugar del rótulo verdadero.

Bannai: ladrillos trabados
La letra primero se escribe como una imagen de celdas — filas de rejillas y puntos, como en un cuaderno cuadriculado. La mayúscula ocupa 10 filas. La celda es cuadrada: 70 unidades. El trazo son dos celdas; el hueco interior de la letra, no menos de dos: así las letras no se funden a distancia.
Después el programa pone los ladrillos. El ladrillo son dos celdas, y en las filas vecinas las juntas se desplazan medio ladrillo. Es la fábrica trabada: las juntas de una fila no coinciden con las de la vecina. Entre ladrillos queda una junta de 9 unidades. Los trazos oblicuos de K, N, Z avanzan en escalones de fábrica y no en un corte parejo. Los puntos de Ö, el gancho de Ў y el signo ʻ van en filas por encima de la mayúscula; las colas de Қ Ҳ y las cedillas de Ş Ç, en filas por debajo de la línea.

Ganch: el bisel del tallador y la luz
El contorno se construye con rectángulos y octógonos. El trazo vertical mide 168 unidades; el horizontal, 140: así parecen iguales. Las letras «redondas» O, C, G, Q son octógonos.
El último pase es el bisel del tallador. El programa recorre el contorno y, en cada ángulo externo que sea recto o más agudo (hasta 100°), recorta la punta: retrocede 40 unidades a lo largo de cada lado y une los puntos con una recta. En el ángulo recto, eso es un corte a 45°. Los ángulos internos quedan agudos: hasta allí entra el cuchillo. Las caras obtusas de los octógonos no se tocan.
El volumen se calcula aparte, a partir de la imagen de la letra. Para cada punto interior de la letra se halla la distancia hasta el borde más cercano. Sale un «campo de distancias»: cero en el borde, mayor hacia el centro del trazo. Si se imagina ese campo como altura, resulta una arista en medio del trazo y dos faldas hacia los bordes: el corte en V. Después el programa mira hacia dónde está girada cada falda. La falda orientada hacia la luz de arriba a la izquierda se aclara; la opuesta se oscurece. Encima se añade una sombra suave hacia abajo y a la derecha: la letra sobresale del muro. Para el muro de piedra, el mismo campo se invierte y la letra pasa a ser un hueco.

Metro: mayúsculas finas y serifas en cuña
El modelo es la inscripción «КОСМОНАВТЛАР» del andén de la estación de 1984 (arquitectos Серго Сутягин y Сергей Соколов). El trazo es fino: 48 unidades en las líneas principales, 40 en las horizontales. Las letras son anchas, unas 600 unidades con una altura de 700.
En los extremos de los trazos, pequeñas serifas en cuña. La base de la cuña es 40 unidades más ancha que el trazo por cada lado; la altura de la cuña, 34 unidades; y la parte alta converge justo hacia los bordes del trazo. La palabra se compone con un espaciado amplio. La Л, «en casita», como en la estación. El dibujo es propio, hecho por principio; la latina está construida con el mismo sistema.

Kalam: la pluma ancha en ángulo
Para cada letra se define un esqueleto: la línea axial de puntos. La pluma es un segmento de 150 unidades de largo a 65° de la línea. El programa coloca la pluma en cada punto del esqueleto, une las posiciones vecinas en un cuadrilátero y unifica todos los cuadriláteros. Nadie fija el grosor: sale por sí solo de la dirección del trazo. A 65°, las horizontales son pesadas y las verticales ligeras.
Si el trazo va casi a lo largo de la pluma, se adelgaza hasta convertirse en un hilo. Por eso los trazos oblicuos se apartan del ángulo de la pluma al menos 9–10°: así, la línea más fina no baja de 25 unidades. Todos los signos — letras, puntos, cifras, puntuación — se escriben con esa misma pluma.

Los signos ʻ y ʼ en cada estilo
Los signos no se toman tal cual de las comillas: cada uno está dibujado según la regla de su tipografía. Lo común es una sola cosa: el ʻ tiene la masa abajo y el ʼ, arriba, así que las siluetas miran en direcciones distintas y no se confunden.
| Tipografía | ʻ | ʼ |
|---|---|---|
| Bannai | un «seis» de fábrica: cabeza de 2×2 celdas abajo, cola hacia arriba a la derecha | lo mismo girado 180° |
| Ganch | cuña con la masa abajo, inclinación de 10° | cuña con la masa arriba, inclinación de 23° |
| Metro | cuña con la base abajo y la punta hacia arriba a la derecha | cuña con la base arriba y la punta hacia abajo a la izquierda |
| Kalam | gesto de la pluma: un trazo fino de arriba hacia abajo a la izquierda y, abajo, un giro con presión | el mismo gesto girado 180° |
A O y G el signo lo acerca el kerning por medición (sobre él, más abajo): el ʻ debe leerse como parte de la letra y no como una comilla suelta.
De la imagen a la tipografía
Una imagen todavía no es una tipografía. La tipografía debe colocar las letras con las distancias correctas, conocer las reglas uzbekas y abrirse en cualquier programa.
El ensamblaje. El programa de cada estilo entrega un diccionario: símbolo, contorno, anchura, márgenes izquierdo y derecho. El ensamblaje convierte las curvas al formato TrueType, iguala la dirección de los contornos y escribe el archivo a través de FontBuilder. Las minúsculas remiten a las mismas mayúsculas: las tipografías son de exhibición, para inscripciones en mayúsculas. Los caracteres tecleados ' ‘ ’ ` remiten a los signos ʻ y ʼ.
Las distancias, por medición. El programa toma un par de letras y mide la distancia blanca entre ellas línea a línea, a lo largo de toda la altura de la mayúscula; los huecos profundos se recortan, porque el ojo no se asoma a ellos. El patrón es el promedio de los pares HH, HO, OH y OO de esa misma tipografía. Cada par se acerca al patrón, pero solo a medias: si no, los pares abiertos como LT se pegan. Esa corrección para un par de letras concreto se llama kerning. La latina recibe kerning con la latina, y el cirílico, con el cirílico. Las cifras no reciben kerning, para que las columnas de números queden parejas.
Los signos ʻ y ʼ, aparte. El signo es pequeño y va arriba, así que se mide solo en la banda del signo: el 38 % superior de la altura de la mayúscula (en detalle, en el artículo «La banda del signo»). El ʻ se coloca pegado a O y G: 0,45 del hueco HH. Después del ʻ, el hueco HH corriente. El ʼ va justo en medio: 0,8 del hueco por ambos lados.
La prohibición de toques. Después de todas las correcciones, el programa comprueba el punto más estrecho del par en toda la altura, colas bajo la línea incluidas. Ningún par puede acercarse más de un 5 % del cuerpo. La corrección también está limitada: como máximo un 15 % del cuerpo en cualquier dirección. Las correcciones menores de 20 unidades no se escriben.
La sustitución uzbeka. La gente teclea Oʻzbekiston con el apóstrofo corriente. La tipografía lo cambia ella sola por el signo debido con una regla escrita dentro del archivo; en el formato OpenType, esa regla se llama calt. Después de O, ante una letra, va ʻ. Después de G, ʻ, también a final de palabra (BOGʻ), pero no en la combinación ng a final de palabra y no ante s a final de palabra (el posesivo inglés 's). Entre dos letras, en los demás casos, va ʼ, como en MAʼNO. La lógica es la misma que en la tipografía de trabajo Ipak Davlat; sobre ella hay un artículo: «o' → oʻ».

Al final, el ensamblaje imprime una prueba: todo el repertorio de signos y las palabras de control — OʻZBEKISTON RESPUBLIKASI, ҚЎҚОН · ҒАЛЛАОРОЛ · ҲАЁТ, ÖZBEKISTON · TOŞKENT.

Los límites de la versión 0.1
- Solo mayúsculas y un solo estilo. Las minúsculas se componen con las mismas mayúsculas. De pesos, por ahora, no hay.
- Bannai, para inscripciones grandes. La fábrica cuadrada está cerca de la tipografía píxel; para placas y cuerpos pequeños no está pensada.
- El ángulo de la pluma de Kalam es nuestra elección. Los 65° se eligieron comparando sobre una misma palabra; no es una cita de una fuente.
- Las distancias están ajustadas automáticamente. Para un rótulo conviene comprobarlas a ojo sobre la palabra concreta.
- La sustitución no distingue idiomas. En las tipografías de exhibición la regla funciona para cualquier texto: en el inglés DON'T, el apóstrofo también se convertirá en ʼ. Para texto no uzbeko conviene desactivar la sustitución en el programa de composición.
Conclusión
En cada una de las cuatro tipografías de exhibición hay 94 signos: la latina con Ö Ğ Ş Ç, el cirílico con Ў Қ Ғ Ҳ, los signos ʻ y ʼ, cifras y puntuación. Todas están construidas con una regla única por tipografía y se distribuyen bajo la licencia abierta SIL OFL 1.1, como toda la biblioteca.
Fuentes
La descripción se basa en el código de construcción de las tipografías de exhibición de Ipak y en la documentación de las herramientas: fontTools, skia-pathops, SciPy, HarfBuzz, la especificación OpenType; sobre el modelo de Metro, Wikipedia, «Kosmonavtlar (Tashkent Metro)».
Enlaces:
- fontTools: FontBuilder. https://fonttools.readthedocs.io/en/latest/fontBuilder/fontBuilder.html
- skia-pathops — operaciones booleanas sobre contornos. https://github.com/fonttools/skia-pathops
- SciPy: distance_transform_edt — el campo de distancias. https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.distance_transform_edt.html
- HarfBuzz — el motor de composición de texto. https://harfbuzz.github.io/
- OpenType: la función calt (Contextual Alternates). https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae#tag-calt
- OpenType: la función kern (Kerning). https://learn.microsoft.com/en-us/typography/opentype/spec/features_ko#tag-kern
- Wikipedia: Kosmonavtlar (Tashkent Metro). https://en.wikipedia.org/wiki/Kosmonavtlar_(Tashkent_Metro)