Texto
La primitiva text borda letras con una fuente del catálogo. A diferencia
de las demás primitivas (primitivas.md), no recibe una
forma: recibe un String, una fuente y una altura (o una caja donde
encajarse), y el compilador convierte cada letra en columnas de satín o en
relleno tatami. Este capítulo describe sus propiedades, cómo se ubica el
texto (at, align, arc, box), cómo se elige entre satín y relleno,
las fuentes disponibles y sus límites. La lista de fuentes también está en
catalogos.md.
Sintaxis#
text HILO "{" propiedades "}"design "Nombre" { canvas: rect(size: (80mm, 30mm)) }
thread negro = #1c1616 "Negro"
layer texto {
text negro {
value: "HANNOVER"
font: ArialBold
height: 8mm
at: (40mm, 19mm) // con align: center, el centro de la línea base
align: center
style: auto
spacing: 0.5mm
}
}Propiedades#
| Propiedad | Tipo | Por defecto | Rango válido | Significado |
|---|---|---|---|---|
value | String | — (obligatoria) | no vacío (ni sólo espacios) | El texto. \n separa líneas. |
font | Font | Stroke | ver Fuentes | Fuente. |
height | Length | — (obligatoria sin box) | 3–300 mm | Altura de las mayúsculas (la de la "H"), de la línea base hacia arriba. Con box, es el alto máximo. |
at | Point | (0mm, 0mm) | — | Punto de la línea base de la primera línea: su inicio (left), su centro (center) o su final (right). No se permite con box. |
align | left, center, right | left; center con box | — | Alineación horizontal respecto de at (o de la caja). |
spacing | Length | 0 mm | −5–50 mm | Espacio extra entre letras; negativo las junta. Se suma al avance de la fuente (con su kerning). |
arc | Length o none | none | |r| ≥ 10 mm | Texto en arco: radio de la línea base. Ver Texto en arco. |
style | auto, satin, fill | auto | — | Cómo se bordan las letras. Ver Satín o relleno. |
box | Shape | — | — | Caja en que el texto se encaja solo. Ver Texto en una caja. |
min_height | Length | el mínimo de la fuente | 2–300 mm | Sólo con box: alto bajo el cual no se achica. |
Combinaciones inválidas (todas E007):
| Mensaje | Causa |
|---|---|
text is missing value | Falta value. |
text needs height, or a box to fit into | Ni height ni box. |
a text with box is placed by its box: remove `at` | box y at juntos. |
a text in an arc does not fit a box: use at and height | box y arc juntos. |
min_height is for a text with box | min_height sin box. |
Otros diagnósticos: E004 empty text (valor vacío), E002 para height,
min_height, spacing fuera de rango y arc = 5 mm: the radius is at least 10 mm, E002 para una fuente desconocida con sugerencia
(`ArialNegrita` is not valid for font; did you mean `ArialBold`?; los
nombres anteriores en español se sugieren con su nombre nuevo), y E006 si
las letras se salen del canvas.
Ubicación: at y align#
at es un punto de la línea base de la primera línea; align dice qué
punto: el inicio (left, por defecto), el centro (center) o el final
(right). Las letras se dibujan hacia arriba desde la línea base (y hacia
abajo las que bajan, como la "g"). Las coordenadas siguen las del diseño
(Y hacia abajo; ver tipos.md).
Varias líneas#
Un \n en value empieza otra línea. Cada línea se alinea por separado
respecto del mismo at.x, y la línea base de cada una baja 1.7 × height
respecto de la anterior (valor fijo del motor).
design "Dos lineas" { canvas: rect(size: (60mm, 40mm)) }
thread azul = #1f3a8a "Azul"
layer texto {
text azul { value: "MARÍA\nJOSÉ", font: Roboto, box: canvas.inset(4mm), align: center }
}Texto en arco#
arc: r dobla la línea base sobre un círculo de radio |r|. La distancia a lo
largo de la línea se conserva como largo de arco y la altura de las letras
como distancia al círculo. En arco, el texto se centra siempre en at
(se ignora align), y at es el punto medio de la línea base:
rpositivo: el centro del círculo quedardebajo deat; el texto se curva hacia arriba con las letras mirando hacia afuera (el nombre en la parte de arriba de una insignia).rnegativo: el centro queda |r| arriba deat; el texto se curva como una sonrisa y las letras miran hacia el centro (el texto de abajo).
design "Insignia" { canvas: circle(center: (40mm, 40mm), r: 40mm) }
thread oro = #d8a21b "Oro"
layer texto {
// El centro del arco queda 28 mm debajo de `at`: (40mm, 40mm).
text oro { value: "CLUB DEPORTIVO", font: Varsity, height: 8mm, at: (40mm, 12mm), arc: 28mm }
// Radio negativo: el centro queda 28 mm arriba de `at`.
text oro { value: "1926", font: Varsity, height: 8mm, at: (40mm, 68mm), arc: -28mm }
}Texto en una caja#
Con box, el texto no lleva at: se encaja solo en la caja (se usa el
rectángulo que contiene la forma).
Parte del alto
height(o, sinheight, del alto de la caja; nunca más que el alto de la caja).Mide las letras reales y, si no caben a lo ancho o a lo alto, achica el alto (unas pocas vueltas, porque
spacingno escala con el alto).No baja de
min_heighto, sin ella, del alto mínimo de la fuente (tabla de Fuentes). Si ni a ese alto cabe, es E006 con las medidas:Salida del compiladorerror E006: text does not fit its box: at the minimum height (12.0 mm) it measures 144.0 × 13.9 mm, the box is 40.0 × 10.0 mmEn horizontal se ubica según
align(por defectocenter). En vertical se centra la altura de las mayúsculas (de la línea base aheight), no la caja de las letras: así todos los nombres de una plancha comparten la línea base, con o sin acentos. Si un acento o una letra que baja se saliera de la caja, el texto se corre lo justo. Con varias líneas, la banda centrada va de las mayúsculas de la primera línea a la línea base de la última.
param nombre = "BENJAMÍN"
design "Parche" { canvas: rect(size: (90mm, 35mm), radius: 8mm) }
thread blanco = #ffffff "Blanco"
layer texto {
text blanco { value: nombre, font: Montserrat, box: canvas.inset(6mm), height: 12mm, min_height: 6mm }
}Satín o relleno#
style decide cómo se borda cada letra:
style | Fuente Stroke | Fuentes de contorno |
|---|---|---|
satin | Cada trazo de la fuente es una columna de satín de ancho fijo. | Cada letra se descompone en columnas de satín (las partes demasiado anchas, en relleno). |
fill | Las letras se rellenan con tatami, con los contornos de la fuente de Block (Archivo Black). | Cada letra se rellena con tatami. |
auto | Satín bajo 20 mm de altura; relleno desde 20 mm. | Satín si la mediana del grosor de trazo de las letras es ≤ 6 mm; relleno si no. |
Detalles:
- Columna de
Stroke: el ancho es el 17 % de la altura, entre 1.0 y 4.0 mm. El trazo se corta en las esquinas (giros de más de 50°), los tramos se suavizan, y en cada esquina los dos tramos se alargan medio ancho para cubrirla. El punto de la "i" se borda como una columna corta. - Parámetros de las puntadas: el satín y el relleno de las letras usan
el perfil de la tela del diseño (compensación, underlay automático según
el ancho, largo máximo de cruce; ver catalogos.md).
En el lenguaje no se pueden cambiar
underlay,densitynipullde un texto. - Ángulo del relleno: el motor elige uno para todo el texto (el mejor ángulo de la pieza de mayor área), para que las letras se vean parejas.
- Huecos diminutos: los huecos de una letra de contorno de menos de 0.4 mm se cierran (el hilo los taparía de todos modos).
Orden de las letras#
Las letras se bordan en orden de lectura (línea por línea, de izquierda
a derecha). Cada letra termina del lado de la siguiente (en su borde
izquierdo, a media altura), para que el tránsito sea corto. Dentro de una
capa el compilador puede intercalar otros objetos; dentro de un seq
(control.md) el texto se borda entero, letra por letra, en el
orden escrito. Un texto girado al montarlo en un hoop
(bastidor.md) también se borda letra por letra.
Caracteres#
Stroke: ASCII imprimible (32–126) y los acentos y signos del castellano (á é í ó ú ü ñ ¿ ¡y sus mayúsculas), que se componen sobre la letra base.- Fuentes de contorno: los caracteres que trae el archivo TrueType de la
fuente (
Bebases sólo mayúsculas). - Un carácter que la fuente no tiene se omite sin aviso.
Escalado con fit#
Si el diseño se escala con fit (declaraciones.md), el
texto escala con él: height, spacing y arc se multiplican por el mismo
factor.
Fuentes#
Stroke es una fuente de un solo trazo (Hershey "futural"); las demás son
fuentes de contorno TrueType de licencia libre, incluidas en el compilador.
El alto mínimo es el alto de mayúscula bajo el cual sus huecos y uniones
son más chicos de lo que el hilo resuelve; se usa como min_height por
defecto en una caja.
font | Origen | Estilo | Alto mínimo |
|---|---|---|---|
Stroke | Hershey futural | trazo central, ancho parejo | 4 mm |
ArialBold | Arimo 700 | de palo, tipo Arial Bold | 6 mm |
Arial | Arimo 400 | de palo, tipo Arial | 6 mm |
Futura | Jost 700 | geométrica | 6 mm |
Montserrat | Montserrat 700 | moderna | 6 mm |
Poppins | Poppins Bold | moderna redondeada | 6 mm |
Roboto | Roboto 700 | moderna neutra | 6 mm |
MontserratBlack | Montserrat 900 | extra negra (tipo Arial Black) | 7 mm |
RobotoBlack | Roboto 900 | extra negra | 7 mm |
FuturaBlack | Jost 900 | tipo Futura Extra Bold | 7 mm |
Block | Archivo Black | bloque grueso (logos, nombres) | 7 mm |
Condensed | Anton | condensada | 10 mm |
Bebas | Bebas Neue | condensada, sólo mayúsculas | 8 mm |
Oswald | Oswald 600 | condensada | 8 mm |
Varsity | Graduate | universitaria | 8 mm |
Serif | Roboto Slab | con remates | 6 mm |
Times | Tinos Bold | con remates clásica | 6 mm |
Slab | Alfa Slab One | remates gruesos | 8 mm |
Playfair | Playfair Display 700 | con remates, elegante | 8 mm |
Script | Pacifico | manuscrita ligada | 10 mm |
Lobster | Lobster | manuscrita gruesa | 10 mm |
Elegant | Dancing Script 700 | manuscrita elegante | 10 mm |
Brush | Kaushan Script | de pincel | 12 mm |
Gothic | UnifrakturMaguntia | gótica | 12 mm |
Nombres anteriores aceptados sólo como sugerencia en el error: Trazo →
Stroke, Bloque → Block, Condensada → Condensed, ArialNegrita →
ArialBold, Elegante → Elegant, Pincel → Brush, Gotica → Gothic.
design "Estilos" { canvas: rect(size: (120mm, 70mm)) }
thread negro = #1c1616 "Negro"
layer texto {
text negro { value: "Ana", font: Script, height: 12mm, at: (5mm, 20mm) } // auto
text negro { value: "LUIS", font: Block, height: 25mm, at: (5mm, 55mm), style: fill } // tatami
text negro { value: "trazo", font: Stroke, height: 6mm, at: (70mm, 20mm), style: satin } // columna fija
}Límites#
heightentre 3 y 300 mm;min_heightentre 2 y 300 mm.- Un
heightexplícito (sinbox) por debajo del alto mínimo de la fuente daW004(ver Diagnósticos). También si unplace … scale:lo achica bajo ese mínimo. - Los caracteres que la fuente no tiene no se bordan y avisan
W007. arcde radio al menos 10 mm.spacingentre −5 y 50 mm.