stringtranslate.com

Metafuente

Metafont es un lenguaje de descripción utilizado para definir fuentes rasterizadas. También es el nombre del intérprete que ejecuta el código Metafont, generando las fuentes de mapa de bits que se pueden incrustar, por ejemplo, en PostScript . Metafont fue ideado por Donald Knuth como complemento de su sistema de composición tipográfica TeX .

Una de las características de Metafont es que los puntos que definen las formas de los glifos —por ejemplo, la parte superior de una raíz , o la intersección de una raíz y un travesaño— se definen con ecuaciones geométricas; La intención de que los tres tallos de una 'm' estén igualmente espaciados horizontalmente podría expresarse como si los puntos 1, 2 y 3 estuvieran en los extremos inferiores de los tres tallos, mientras que la intención de que todos terminen en la misma posición vertical sería ser .

Metafont es un lenguaje de macros , donde operaciones como "dibujar una parte superior minúscula de la raíz serif en el punto 4" pueden aparecer como una instrucción macro (con el punto como argumento) en el programa para una letra. Para describir formas, Metafont tiene un rico conjunto de operaciones de construcción de rutas que en su mayoría liberan al usuario de tener que calcular puntos de control.

Muchas familias de fuentes Metafont están configuradas de modo que el archivo fuente principal de una fuente solo define una pequeña cantidad de parámetros de diseño ( altura x , ancho em, inclinación, ancho de trazo vertical, etc.), y luego llaman a un archivo fuente separado común. para una amplia gama de fuentes para dibujar los glifos individuales; Este es el metaaspecto del sistema.

Modos de operacion

Metafont se ejecuta con mayor frecuencia como ayuda para los controladores de dispositivos de salida (impresora, pantalla); en esos casos, su trabajo es generar mapas de bits para una fuente para una combinación específica de dispositivo de salida (llamado modo en Metafont) y resolución (visible en el nombre del archivo de salida, ver más abajo). Estos mapas de bits generalmente se almacenan para su reutilización posterior, de modo que no es necesario ejecutar Metafont cada vez que se muestra un documento, pero por otro lado, las distribuciones TeX con un componente Metafont generalmente no incluyen ninguna fuente de mapa de bits prediseñada, ya que serían más bien grandes en comparación con las fuentes a partir de las cuales podrían generarse. Dado que las fuentes Metafont eran tradicionalmente las predeterminadas de TeX, de las cuales otros formatos de fuente eran excepciones, una instalación incompleta de una fuente que no es Metafont a veces puede resultar en que se llame a Metafont y se emita un confuso mensaje de error " alguna fuente .mf no encontrada".

Igualmente importante, pero no tan común, es ejecutar Metafont para generar un archivo de métrica de fuentes (TFM); un archivo TFM solo se genera si la variable de creación de fuentes es positiva. Tradicionalmente, las distribuciones TeX a menudo vienen con todos los archivos TFM pregenerados (ya que son bastante pequeños), pero alguien que instale una fuente Metafont desde las fuentes tendrá que generar su archivo TFM antes de que TeX pueda usarlo.

Una tercera forma de operar Metafont es el modo de prueba : si la variable de prueba es positiva, entonces el archivo de fuente de mapa de bits también contiene información adicional proporcionada mediante specialcomandos, en particular las posiciones y nombres de los puntos que el diseñador de la fuente consideró importantes para el diseño. Si utiliza la gftodviutilidad separada para generar imágenes ampliadas de los glifos de fuente, se incluye esta información de ofertas especiales; Las posiciones de los puntos no se limitan a la resolución de píxeles.

Metafont también se puede ejecutar de forma interactiva y tiene comandos para mostrar en pantalla las imágenes que produce. Knuth ha dicho que usa Metafont como una especie de calculadora de escritorio para resolver ecuaciones complicadas, aunque ahora usa MetaPost para ilustraciones matemáticas.

Metafont puede representar cualquier tipo de resultado gráfico, no sólo glifos. Sin embargo, se prefieren MetaPost y Asymptote para ilustraciones matemáticas. Metafont se invoca con mayor frecuencia sin una solicitud directa del usuario. Los archivos DVI sólo pueden contener referencias a tipos de letra, en lugar de los conjuntos de glifos rasterizados o vectoriales que permiten otros formatos como PostScript. En consecuencia, es necesario acceder a los glifos de los tipos de letra cada vez que se realiza una solicitud para ver, imprimir o convertir un archivo DVI.

Archivos de salida

Metafont genera varios tipos de archivos: para un archivo llamado NAME.mf, puede generar:

Después de ejecutar Metafont, normalmente se utiliza el programa gftopk para convertir los archivos NNNNgf al formato pk (empaquetado) (.NNNNpk). El formato pk se introdujo principalmente para reducir el tamaño del archivo (aproximadamente a la mitad), pero se esperaba que también acelerara el procesamiento ya que sería necesario ingresar/salir menos datos . Los formatos GF y PK emplean codificación de longitud de ejecución de mapas de bits, pero realizan codificaciones binarias diferentes de las longitudes de ejecución. El formato PK también realiza un preprocesamiento de los mapas de bits (cuadro delimitador, elidiendo filas repetidas) y codifica todas las filas de un carácter como una larga secuencia de bits. [1]

En el estándar TeX Directory Structure , los nombres de archivos están limitados a 8+3 caracteres, por lo que los archivos GF y PK solo tendrían extensiones .gfy .pk. Los archivos para diferentes resoluciones se mantienen separados colocándolos en directorios separados, denominados dpiNNNN, por ejemplo dpi300/cmr10.pk.

Idioma

El lenguaje Metafont es un lenguaje interpretado para programas que son esencialmente declarativos más que imperativos . [2]

Variables y ecuaciones

Las variables en Metafont pueden ser de ocho tipos diferentes:

Metapost agrega color (un triple de números) como noveno tipo y tiene un modelo completamente diferente (no rasterizado) para imágenes; este último es el principal punto de divergencia entre los dos programas. Las macros de Metafont vardef también viven en el mismo espacio de nombres que las variables y, de alguna manera, pueden considerarse como un noveno tipo de variable, aunque las macros no existen como valores de primera clase en Metafont.

Inusualmente, los nombres de las variables no son simples tokens, sino secuencias de tokens simbólicos e índices numéricos; Por tanto, el nombre de la variable x2rno es un token alfanumérico , sino una secuencia de tres tokens x(simbólico), 2(numérico) y r(simbólico). Los tipos de registros y matrices se pueden simular a través de colecciones de variables que comparten un prefijo de nombre común, un modismo respaldado por el sistema de declaración de tipos que proporciona a todas las variables cuyos nombres difieren sólo en índices numéricos del mismo tipo (como se espera para las matrices) mientras se mantienen las variables completas. El nombre difiere en algún token simbólico separado (como se espera para los registros).

Una característica muy distintiva de Metafont es el uso de ecuaciones para definir variables. Una variable numérica (o componente de un par o variable de transformación) puede estar en los tres estados conocido (conjunto), independiente desconocido (no establecido) y dependiente desconocido (no establecido, pero dado por una expresión lineal de uno o varios independientes). . Cuando Metafont ejecuta una declaración de ecuación, convierte uno de los independientes involucrados en un dependiente y lo elimina de las expresiones de todos los demás dependientes; cuando no quedan independientes en la expresión de una variable dependiente, esa variable se vuelve conocida. Por lo tanto, resolver sistemas de ecuaciones lineales es una característica incorporada del lenguaje Metafont, y el método recomendado para asignar la mayoría de las variables (especialmente aquellas cuyos valores tienen significado geométrico) es enunciar ecuaciones que determinen sus valores. Los sistemas de ecuaciones frecuentemente mezclan ecuaciones numéricas (escalares) con ecuaciones de pares (vectoriales).

Una excepción a lo anterior es la clase de variables de cantidad interna . Estos tienen nombres que constan de un solo token simbólico, son siempre numéricos y siempre se conocen. Tienen una representación interna más directa que las variables ordinarias, lo que hace conveniente que las operaciones primitivas en Metafont (o extensiones del mismo) las utilicen implícitamente.

Sintaxis

Metafont tiene tokens constantes numéricos y de cadena con sintaxis convencionales; las cadenas están delimitadas por "comillas, las constantes numéricas pueden tener decimales pero no una parte de exponente . Todos los demás tokens se clasifican como simbólicos y pueden redefinirse arbitrariamente; No existe ninguna restricción de que los tokens con determinados significados deban tener nombres compuestos por determinados caracteres. En tiempo de ejecución, también puede haber tokens de cápsula , que en realidad son tokens de valor constante de tipo arbitrario; en el código fuente aparecen como tokens simbólicos.

Excepto cuando los caracteres están involucrados en constantes numéricas o de cadena, la extensión del token que contiene un carácter particular depende de a qué clase pertenece el carácter; A diferencia de TeX , Metafont tiene clases de caracteres fijas. Los personajes ,, ;, (y )son "solitarios" y solo forman fichas de un solo personaje. Para las clases de caracteres <=>:|, ‘’(comillas simples), +-, /*\, !?, , #&@$, ^~, [, ], {}y ., así como la clase de guión bajo junto con mayúsculas y minúsculas de la A a la Z, el token consta de la secuencia consecutiva más larga de caracteres del mismo clase. Los caracteres en blanco no aportan tokens. %inicia un comentario que dura hasta el final de la línea.

Una aplicación notable de estas reglas es que #aparecen con frecuencia como parte de nombres de variables en el código Metafont, por ejemplo, em#y pt#.

Los delimitadores (como los paréntesis) no tienen significados incorporados; en cambio, hay un comando que convierte dos tokens simbólicos en un par de delimitadores coincidentes, pero normalmente los programas Metafont usan sólo los paréntesis comunes. Además de anular las prioridades en las expresiones, también se requieren delimitadores en torno a ciertos tipos de argumentos macro.

Gráficos

Las curvas en Metafont se definen como splines cúbicas en lugar de cuadráticas, para lograr una mayor versatilidad a costa de una aritmética más compleja. [3]

A diferencia de los formatos de fuentes de contorno más comunes (como TrueType o PostScript Type 1 ), una fuente Metafont se compone principalmente de trazos con "plumas" de ancho finito, junto con regiones rellenas. Por lo tanto, en lugar de describir directamente el contorno del glifo, un archivo Metafont describe las rutas del lápiz. Algunas fuentes Metafont más simples, como las fuentes matemáticas caligráficas de la familia Computer Modern , utilizan un solo trazo de lápiz con un lápiz relativamente grande para definir cada "trazo" visual de los glifos. Las fuentes más complejas, como las fuentes de texto romanas de la familia Computer Modern, utilizan un bolígrafo pequeño para trazar el contorno de los "trazos" visuales, que luego se rellenan; el resultado es muy parecido a una fuente de contorno, pero con esquinas ligeramente suavizadas definidas por la forma del bolígrafo.

Dado que las formas de las fuentes se definen mediante ecuaciones en lugar de números codificados directamente, es posible tratar parámetros como la relación de aspecto, la inclinación de la fuente, el ancho del trazo, el tamaño de serif , etc., como parámetros de entrada en cada definición de glifo (que luego definen no un fuente única, sino una metafuente ). Por lo tanto, al cambiar el valor de uno de estos parámetros en una ubicación del archivo Metafont, se puede producir un cambio consistente en toda la fuente. Computer Modern Roman ilustra muchos usos de esta característica; una instalación típica de TeX incluye varias versiones de la fuente en pasos de 5 a 17 cpp, con anchos de trazo iguales en todos los tamaños (en lugar de aumentar a medida que se amplía la fuente). Además, las fuentes de máquina de escribir y sans-serif de Computer Modern se definen utilizando esencialmente el mismo archivo Metafont que la fuente Roman, pero con diferentes parámetros globales.

Usar

Si bien diseñadores tipográficos conocidos, como Hermann Zapf , han colaborado con Knuth para crear nuevas fuentes usando Metafont, el sistema no ha sido ampliamente adoptado por los diseñadores tipográficos profesionales. Knuth atribuye esto al hecho de que "pedirle a un artista que sea lo suficientemente matemático como para entender cómo escribir una fuente con 60 parámetros es demasiado". [4] Jonathan Hoefler comentó que el sistema Metafont finalmente se convirtió en "una tecnología detrás de cero de tus fuentes favoritas... La idea de Knuth de que las letras comienzan con formas esqueléticas es errónea". [5] [ se necesita una mejor fuente ]

El sistema Metafont permite procesar fuentes de formas inusuales; en 1982, Knuth mostró cómo se podía utilizar para transformar fuentes, con una fuente serif pasando lentamente a un diseño sans-serif a lo largo del texto. [6]

Historia

Donald Knuth comenzó a trabajar en software de creación de fuentes en 1977 y produjo la primera versión de Metafont en 1979. Debido a deficiencias en el lenguaje Metafont original, Knuth desarrolló un sistema Metafont completamente nuevo en 1984, y es este sistema revisado el que se utiliza hoy. ; Metafont tiene un sistema de versiones similar al de TeX , donde el número se acerca asintóticamente a e con cada revisión. [7]

Ejemplo

El siguiente ejemplo crea una forma cerrada similar a un frijol para el carácter "B" de una fuente:

%nombre de archivo: beta.mf %mode_setup; % Defina una forma similar a un frijol para el carácter B beginchar ( "B" , 11 pt # , 11 pt # , 0 ); % Configurar coordenadas como un sistema de ecuaciones y1 = y2 = y3 = 0 ; y4 = y5 = y6 = h ; x1 = x4 = 0 ; x2 = x5 = w ; x3 = x6 = 2 * w ;       % Definir círculo de lápiz de recogida de lápiz xscaled 0 . 2 escala wy 0 . 04 w girado 45 ;         % Dibujar la curva del carácter % z1 es lo mismo que (x1, y1) dibujar z1 .. z3 .. z6 { z2 - z6 }.. z5 ..{ z4 - z2 } z4 .. ciclo ; endchar ;   fin

Esto produce el siguiente glifo:

El ejemplo anterior se procesará con una línea de comando como: [8]

mf '\mode=ljcuatro; configuración_modo; entrada beta.mf' ; gftopk beta.600gf beta.600pk   

Luego se puede usar en un archivo LaTeX como [8] (todos los archivos deben estar en el mismo directorio o el sistema TeX debe ser informado sobre ellos usando los métodos apropiados):

\documentclass { artículo }\newfont { \letterbeta }{ beta } \newcommand { \otherbeta }{{ \letterbeta B }}\begin { document }
Intentemos tener una \otherbeta\ extraña aquí.\end { documento }

El archivo PDF resultante debería verse así:

Producción de fuentes PostScript Tipo 1

Existen varias herramientas para convertir programas Metafont a fuentes PostScript Tipo 1 . La mayoría hace uso de la capacidad de MetaPost para convertir un subconjunto del lenguaje Metafont en esquemas EPS , que posteriormente se pueden convertir a fuentes PostScript Tipo 1. Generar contornos vectoriales de trazos de lápiz Metafont no es trivial, ya que el modelo Metafont de un glifo es una imagen rasterizada y los contornos exactos de la mayoría de los trazos no son curvas de Bézier . [nota 1]

El enfoque común para generar fuentes Tipo 1 con trazos de lápiz sigue siendo generar un mapa de bits de alta resolución y luego usar un autotracer , implementado por paquetes como mftrace [13] y TeXtrace [14].

Ver también

Notas

  1. ^ Técnicamente, Metafont genera contornos vectoriales como un paso intermedio para rasterizar un trazo, pero esos contornos intermedios se adaptan a la resolución ráster actual y no son simples como curvas, por lo que están muy lejos de ser utilizables como contornos de Tipo 1. Un efecto de la falta de simplicidad son los píxeles falsos en el lado cóncavo de un trazo que obtienen un valor de 2 en lugar de 1; sin embargo, la selección automática de imágenes que se envían como glifos en una fuente normalmente evita que esto aparezca en el final. mapa de bits.

Referencias

  1. ^ Rokicki, Tomás (1985). "Formato de archivo de fuente empaquetado (PK)" (PDF) . Remolcador . 6 (3): 115-120. Archivado (PDF) desde el original el 6 de noviembre de 2011 . Consultado el 9 de agosto de 2019 .
  2. ^ Knuth, Donald (1986). El libro METAFONT . Addison Wesley. ISBN 0-201-13445-4.
  3. ^ Knuth, Donald (25 de enero de 2000). "Entrevista: Donald E. Knuth" (Entrevista). Entrevistado por Advogato. Archivado desde el original el 22 de enero de 2009 . Consultado el 13 de enero de 2016 . ...las matemáticas son realmente simples para una cuadrática. Lo correspondiente a una cúbica es seis veces más complicado...
  4. ^ CSTUG, Universidad Carolina, Praga, marzo de 1996, Preguntas y respuestas con el profesor Donald E. Knuth, reproducido en TUGboat 17 (4) (1996), 355–67. La cita es de la página 361. Disponible en línea en [1]
  5. ^ Hoefler, Jonathan. "La idea de Knuth de que las letras comienzan con formas esqueléticas es errónea. Pero su trabajo es importante y tuvo un impacto duradero". Gorjeo . Consultado el 18 de agosto de 2018 .
  6. ^ Knuth, Donald (1982). "El concepto de metafuente" (PDF) . Lenguaje visible . 16 (1): 3–27. Archivado desde el original (PDF) el 7 de julio de 2020.
  7. ^ "Knuth: informática y tipografía".
  8. ^ ab Christophe Grandsir. "Tutorial METAFONT".
  9. ^ "CTAN: tex-archive/fonts/utilities/metatype1".
  10. ^ "CTAN: tex-archive/support/mf2pt1".
  11. ^ "RJ Kinch," MetaFog: conversión de formas de Metafont en contornos ", TUGboat 16(3), 233–43 (1995)" (PDF) . Archivado (PDF) desde el original el 5 de octubre de 2000.
  12. ^ K. Píška, 2004
  13. ^ mftrace: un pequeño programa Python que le permite rastrear una fuente de mapa de bits TeX en una fuente PFA o PFB (una fuente escalable PostScript Type1) o TTF (TrueType). Tiene licencia GNU GPL. Creado por Han-Wen Nienhuys. Las versiones anteriores a la 1.0.5 se denominaban 'pktrace'.
  14. ^ TeXtrace: una colección de scripts para UNIX que convierten cualquier fuente TeX en una fuente de contorno Type1 .pfb inmediatamente adecuada para usar con dvips, pdftex, acroread (y muchos otros programas). Creado por Peter Szabo.

Fuentes

enlaces externos