stringtranslate.com

Metafont

Metafont es un lenguaje de descripción que se utiliza 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 en, por ejemplo, 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 un tallo o la intersección de un tallo 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 .

Metafont es un lenguaje de macros , en el que operaciones como "dibujar una parte superior de serifa en minúscula en el punto 4" pueden aparecer como una instrucción macro (con el punto como argumento) en el programa de una letra. Para describir formas, Metafont tiene un amplio 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 del trazo vertical, etc.) y luego se llama a un archivo fuente separado, común para una amplia gama de fuentes, para dibujar los glifos individuales; este es el aspecto meta del sistema.

Modos de funcionamiento

Metafont se ejecuta con mayor frecuencia como ayudante de 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 se almacenan normalmente para su posterior reutilización, de modo que Metafont no tenga que ejecutarse cada vez que se muestre un documento, pero por otro lado, las distribuciones de TeX con un componente Metafont normalmente no han incluido ninguna fuente de mapa de bits preconstruida, ya que serían bastante 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 que otros formatos de fuentes eran excepciones, una instalación incompleta de una fuente que no sea Metafont a veces puede dar como resultado que se llame a Metafont y emita un mensaje de error confuso del tipo " somefont .mf not found".

Igualmente importante, pero no tan común, es ejecutar Metafont para generar un archivo de métrica de fuente (TFM); un archivo TFM solo se genera si la variable fontmaking es positiva. Tradicionalmente, las distribuciones de 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 usarla.

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 los nombres de los puntos que el diseñador de la fuente consideró importantes para el diseño. Si se utiliza la utilidad independiente gftodvipara generar imágenes ampliadas de los glifos de la fuente, se incluye esta información de las funciones especiales; las posiciones de los puntos no están limitadas a la resolución de píxeles.

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

Metafont puede reproducir cualquier tipo de salida gráfica, no solo glifos. Sin embargo, MetaPost y Asymptote son los preferidos para ilustraciones matemáticas. Metafont se invoca más comúnmente sin una solicitud directa del usuario. Los archivos DVI solo 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, se debe acceder a los glifos de los tipos de letra siempre 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 (comprimido) (.NNNNpk). El formato pk se introdujo principalmente para reducir el tamaño de los archivos (a aproximadamente la mitad), pero se esperaba que también acelerara el procesamiento, ya que se tendrían que introducir y sacar menos datos . Los formatos GF y PK emplean la codificación de longitud de ejecución de los mapas de bits, pero realizan diferentes codificaciones binarias de las longitudes de ejecución. El formato PK también realiza un preprocesamiento de los mapas de bits (cuadro delimitador, eliminación de filas repetidas) y codifica todas las filas de un carácter como una secuencia de bits larga. [1]

En el estándar de estructura de directorios de TeX , los nombres de archivo 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 al colocarlos en directorios separados, denominados dpiNNNN, por ejemplo dpi300/cmr10.pk.

Idioma

El lenguaje Metafont es un lenguaje interpretado para programas que son esencialmente declarativos en lugar de imperativos . [2]

Variables y ecuaciones

Las variables en Metafont pueden ser de ocho tipos diferentes:

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

De manera inusual, los nombres de las variables no son simples tokens, sino secuencias de tokens simbólicos e índices numéricos; el nombre de la variable x2rno es, por lo tanto, un token alfanumérico , sino una secuencia de los 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, una expresión idiomática compatible con el sistema de declaración de tipos que otorga a todas las variables cuyos nombres difieren solo en índices numéricos el mismo tipo (como se espera para matrices) mientras que las variables con nombres completos que difieren en algún token simbólico se mantienen separadas (como se espera para 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 conjunto) y dependiente desconocido (no conjunto, 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 dependiente y lo elimina de las expresiones para todos los demás dependientes; cuando no quedan independientes en la expresión para una variable dependiente, esa variable se vuelve conocida. La resolución de sistemas de ecuaciones lineales es, por lo tanto, 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 importancia geométrica) es establecer ecuaciones que determinen sus valores. Los sistemas de ecuaciones con frecuencia mezclan ecuaciones numéricas (escalares) con ecuaciones de pares (vectoriales).

Una excepción a lo anterior es la clase de variables de cantidad internas . Estas tienen nombres que consisten en un solo símbolo, siempre son numéricas y siempre se conocen. Tienen una representación interna más directa que las variables ordinarias, lo que hace que sea conveniente para las operaciones primitivas en Metafont (o extensiones de este) utilizarlas implícitamente.

Sintaxis

Metafont tiene tokens de constantes numéricas y de cadena con sintaxis convencional; las cadenas están delimitadas por "comillas, las constantes numéricas pueden tener decimales pero no una parte exponencial . Todos los demás tokens se clasifican como simbólicos y se pueden redefinir arbitrariamente; no existe ninguna restricción de que los tokens con ciertos significados deban tener nombres que consten de ciertos caracteres. En tiempo de ejecución, puede haber además tokens de cápsula , que son efectivamente tokens de valor constante de tipo arbitrario; en el código fuente, estos 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 la clase a la que pertenece el carácter; a diferencia de TeX , Metafont tiene clases de caracteres fijas. Los caracteres ,, ;, (, y )son "solitarios" y solo forman tokens de un solo carácter. Para las clases de caracteres <=>:|, ‘’(comillas simples), +-, /*\, !?, #&@$, ^~, [, ], {}, y ., así como la clase de guión bajo junto con mayúsculas y minúsculas A–Z, el token consiste en la secuencia consecutiva más larga de caracteres de la misma clase. Los caracteres de espacio en blanco no contribuyen a los 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 su lugar existe un comando que convierte dos símbolos en un par de delimitadores coincidentes, pero normalmente los programas Metafont utilizan solo los paréntesis comunes. Además de anular las prioridades en las expresiones, también se requieren delimitadores alrededor de ciertos tipos de argumentos de macro.

Gráficos

Las curvas en Metafont se definen como splines cúbicos , en lugar de cuadráticos, 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 el contorno del glifo directamente, un archivo Metafont describe los trazados de la pluma. Algunas fuentes Metafont más simples, como las fuentes caligráficas matemáticas de la familia Computer Modern , utilizan un solo trazo de pluma con una pluma relativamente grande para definir cada "trazo" visual de los glifos. Las fuentes más complejas, como las fuentes de texto Roman de la familia Computer Modern, utilizan una pluma pequeña para trazar alrededor del 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 de la pluma.

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 la serifa , etc. como parámetros de entrada en cada definición de glifo (que luego definen no una sola fuente, sino una meta -fuente). De este modo, al cambiar el valor de uno de estos parámetros en una ubicación en el 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 los anchos de trazo iguales en todos los tamaños (en lugar de aumentar a medida que se aumenta la escala de la fuente). Además, las fuentes de máquina de escribir y sans-serif Computer Modern se definen utilizando esencialmente el mismo archivo Metafont que la fuente Roman, pero con diferentes parámetros globales.

Usar

Aunque diseñadores de tipos conocidos, como Hermann Zapf , han colaborado con Knuth para crear nuevas fuentes utilizando Metafont, el sistema no ha sido ampliamente adoptado por los diseñadores de tipos profesionales. Knuth atribuye esto al hecho de que "pedirle a un artista que se convierta en un matemático lo suficientemente bueno 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 demostró cómo se podía utilizar para transformar fuentes, de modo que una fuente serif se transforma lentamente en un diseño sans-serif a lo largo de un 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 las deficiencias del lenguaje Metafont original, Knuth desarrolló un sistema Metafont completamente nuevo en 1984, y es este sistema revisado el que se utiliza hoy en día; Metafont tiene un sistema de versiones similar al de TeX , donde el número se aproxima 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:

%file name: beta.mf %mode_setup; % Define una forma similar a un frijol para el carácter B beginchar ( "B" , 11 pt # , 11 pt # , 0 ); % Configura las 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 recogida de pluma pencircle xscaled 0 . 2 w yscaled 0 . 04 w rotado 45 ;         % Dibuja la curva del caracter % z1 es lo mismo que (x1, y1) dibuja z1 .. z3 .. z6 { z2 - z6 }.. z5 ..{ z4 - z2 } z4 .. cycle ; endchar ;   fin

Esto produce el siguiente glifo:

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

mf '\mode=ljfour; configuración_de_modo; entrada beta.mf' ;
gftopk beta.600gf beta.600pk   

Luego se puede utilizar en un archivo LaTeX como el siguiente [8] (todos los archivos deben estar en el mismo directorio o se debe informar al sistema TeX sobre ellos mediante métodos apropiados):

\documentclass { artículo }\newfont { \letterbeta }{ beta } \newcommand { \otherbeta }{{ \letterbeta B }}\begin { document }
Vamos a intentar tener un \otherbeta\ extraño aquí. \end { document }

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 Type 1. La mayoría de ellas utilizan la capacidad de MetaPost para convertir un subconjunto del lenguaje de Metafont en contornos EPS , que posteriormente se pueden convertir a fuentes PostScript Type 1. Generar contornos vectoriales de trazos de lápiz de 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 utilizar un trazador automático , implementado por paquetes como mftrace [13] y TeXtrace [14].

Véase también

Notas

  1. ^ Técnicamente, Metafont genera contornos vectoriales como un paso intermedio en la rasterización de un trazo, pero esos contornos intermedios están adaptados a la resolución rasterizada actual y no son simples como curvas, por lo que están muy lejos de ser utilizables como contornos Tipo 1. Un efecto de la falta de simplicidad son los píxeles espurios 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 mapa de bits final.

Referencias

  1. ^ Rokicki, Tomas (1985). «Packed (PK) Font File Format» (PDF) . TUGboat . 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). Entrevista realizada 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 ecuación cuadrática. Lo correspondiente para 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". Twitter . Consultado el 18 de agosto de 2018 .
  6. ^ Knuth, Donald (1982). "El concepto de una metafuente" (PDF) . Visible Language . 16 (1): 3–27. Archivado desde el original (PDF) el 7 de julio de 2020.
  7. ^ "Knuth: Computadoras y composición tipográfica".
  8. ^ ab Christophe Grandsir. "Tutorial METAFONT".
  9. ^ "CTAN: tex-archive/fuentes/utilidades/metatipo1".
  10. ^ "CTAN: tex-archive/soporte/mf2pt1".
  11. ^ "RJ Kinch, "MetaFog: conversión de formas Metafont en contornos", TUGboat 16(3), 233–43 (1995)" (PDF) . Archivado (PDF) desde el original el 5 de octubre de 2000.
  12. ^ K. Piška, 2004
  13. ^ mftrace – un pequeño programa Python que permite convertir 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 llamaban 'pktrace'.
  14. ^ TeXtrace: una colección de scripts para UNIX que convierten cualquier fuente TeX en una fuente Type1 .pfb de contorno inmediatamente apta para su uso con dvips, pdftex, acroread (y muchos otros programas). Creado por Peter Szabo.

Fuentes

Enlaces externos