Tipos de letra y FreeBSD

A Tutorial

Marcas registradas

FreeBSD es una marca registrada de la Fundación FreeBSD

Adobe, Acrobat, Acrobat Reader, Flash y PostScript son marcas registradas o marcas comerciales de Adobe Systems Incorporated en los Estados Unidos de América y/o otros países.

Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, y TrueType son marcas comerciales de Apple Inc., registradas en los Estados Unidos de América y otros países.

Linux es una marca registrada de Linus Torvalds.

Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media y Windows NT son marcas registradas o marcas comerciales de Microsoft Corporation en los Estados Unidos de América y/o otros países.

Motif, OSF/1, y UNIX son marcas registradas y IT DialTone y The Open Group son marcas comerciales de The Open Group en los Estados Unidos de América y otros países.

Muchos de los nombres usados por los fabricantes y vendedores para diferenciar sus productos son designados como marcas comerciales. Allí donde estos nombres aparezcan en este documento y el Proyecto FreeBSD fuera consciente de la alegación de marca comercial, los nombres tienen a continuación el símbolo “™” o “®”.

Resumen

Este documento contiene una descripción de los distintos ficheros de fuentes que pueden ser utilizados con FreeBSD y el driver syscons, X11, Ghostscript y Groff. Se proporcionan ejemplos para cambiar el display de syscons a modo 80x60 y para utilizar fuentes tipo 1 con los programas de aplicaciones mostrados arriba.


1. Introducción

Hay muchos orígenes (sources) de tipos disponibles y a veces no es fácil discernir cómo usarlos en FreeBSD. La respuesta puede estar en la documentación del componente que desea utilizar. Esto puede llevar su tiempo, por lo que este tutorial intenta proporcionar un atajo para quienes puedan estar interesados.

2. Terminología básica

Hay muchos formatos de tipos diferentes y sufijos de archivos de tipos asociados. En este artículo abordaremos unos cuantos:

.pfa, .pfb

Fuentes PostScript® tipo 1. El .pfa es la forma Ascii y el .pfb la forma Binaria.

.afm

Métricas del tipo asociadas al tipo Tipo 1.

.pfm

Métricas de impresión del tipo asociadas al tipo Tipo 1.

.ttf

Una fuente TrueType®

.fot

Una referencia indirecta a un tipo TrueType (no es un tipo real)

.fon, .fnt

Tipos de pantalla de mapa de bits

La extensión .fot se usa en Windows® como una especie de enlace simbólico al fichero real (.ttf) de la fuente TrueType®. Los ficheros de fuentes .fon también se usan en Windows. No conozco una forma de utilizar este formato de fuente en FreeBSD.

3. ¿Qué formatos de tipo puedo usar?

Qué formato de fuente es útil depende de la aplicación. FreeBSD por sí mismo no utiliza fuentes. Las aplicaciones y/o los controladores pueden utilizar archivos de fuentes. A continuación se muestra una pequeña referencia cruzada de la aplicación/controlador para los sufijos de tipo:

Controlador
vt

.hex

syscons

.fnt

Aplicación
Ghostscript

.pfa, .pfb, .ttf

X11

.pfa, .pfb

Groff

.pfa, .afm

Povray

.ttf

El sufijo .fnt se usa con bastante frecuencia. Sospecho que cuando alguien quería crear un fichero de fuente especializado para su aplicación, por lo general escogía este sufijo. Por lo tanto, es probable que ficheros con este sufijo no sean todos del mismo formato; en concreto, los ficheros .fnt utilizados por syscons en FreeBSD podrían no ser del mismo formato que un .fnt que se pueda encontrar en un entorno MS-DOS®/Windows®. No he intentado utilizar otros ficheros .fnt distintos a los que se proporcionan con FreeBSD.

4. Configuración de una consola virtual en modo de línea 80x60

En primer lugar se debe cargar una fuente 8x8. Para ello, el archivo /etc/rc.conf debe tener la línea (cambie el nombre del tipo por el que sea más apropiado en su región):

font8x8="iso-8x8"		# tipo 8x8 de /usr/share/syscons/fonts/* (o NO para cargar el tipo por defecto).

El comando para cambiar realmente el modo es vidcontrol(1):

% vidcontrol VGA_80x60

Varios programas orientados a consola, como vi(1), tienen que ser capaces de determinar las dimensiones actuales de la pantalla. Como esto se consigue mediante llamadas ioctl al controlador de la consola (como syscons(4)) se determinará correctamente las nuevas dimensiones de la pantalla.

Para hacerlo más sencillo, se pueden añadir estos comandos a los scripts de inicio del sistema para que se ejecuten en el arranque. Agrega esta línea en el archivo /etc/rc.conf.

allscreens_flags="VGA_80x60"	# Establecer el modo vidcontrol para todas las pantallas virtuales

Referencias: rc.conf(5), vidcontrol(1).

5. Utilizar Fuentes Tipo 1 con X11

X11 puede utilizar los formatos .pfa o .pfb . Las fuentes de X11 se encuentran en varios subdirectorios bajo /usr/X11R6/lib/X11/fonts. Cada fichero de fuentes está referenciado a su nombre X11 por el contenido de fonts.dir en cada directorio.

Ya existe un directorio llamado Type1.. La forma más directa de añadir una nueva fuente es ponerla en ese directorio. Una forma aun mejor sería colocar todas las fuentes que quieras añadir en un directorio separado y utilizar un enlace simbólico a las fuentes adicionales. Esto permite identificar los tipos sin mezclarlos con los originales. Por ejemplo:

Crear un directorio para guardar los ficheros de fuentes
% mkdir -p /usr/local/share/fonts/type1
% cd /usr/local/share/fonts/type1

Pon los ficheros .pfa, .pfb y .afm aquí

Uno podría querer mantener los ficheros readme y otra documentación

para las fuentes también aquí
% cp /cdrom/fonts/atm/showboat/showboat.pfb .
% cp /cdrom/fonts/atm/showboat/showboat.afm .

Mantener un índice para tener referencias cruzadas de las fuentes
% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX

Ahora, para utilizar una nueva fuente con X11, el fichero de la fuente debe estar disponible y se tienen que actualizar los nombres de los ficheros de fuentes. Los nombres de fuentes de X11 se parecen a esto:

-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1
     |        |      |    |   |     |  | | | | | |    \    \
     |        |      |    |   |     \  \ \ \ \ \ \     +----+- juego de caracteres
     |        |      |    |   \      \  \ \ \ \ \ +- ancho promedio
     |        |      |    |    \      \  \ \ \ \ +- espaciado
     |        |      |    \	\      \  \ \ \ +- resolución vertical.
     |        |      |     \	 \	\  \ \ +- resolución horizontal.
     |        |      |      \	  \	 \  \ +- puntos
     |        |      |       \     \	  \  +- píxeles
     |        |      |        \     \	   \
  tipo familia  densidad  inclinación anchura estilo adicional

Se tiene que crear un nombre nuevo para cada fuente nueva. Si tienes algo de información de la documentación que viene con la fuente, podría servir como base para crear el nombre. Si no hay información, entonces puedes obtener ideas utilizando strings(1) sobre el fichero de fuentes. Por ejemplo:

%strings showboat.pfb | more
%!FontType1-1.0: Showboat 001.001
%%CreationDate: 1/15/91 5:16:03 PM
%%VMusage: 1024 45747
% Generated by Fontographer 3.1
% Showboat
 1991 by David Rakowski.  Alle Rechte Vorbehalten.
FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup
/UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse
{save true}{false}ifelse}{false}ifelse
12 dict begin
/FontInfo 9 dict dup begin
 /version (001.001) readonly def
 /FullName (Showboat) readonly def
 /FamilyName (Showboat) readonly def
 /Weight (Medium) readonly def
 /ItalicAngle 0 def
 /isFixedPitch false def
 /UnderlinePosition -106 def
 /UnderlineThickness 16 def
 /Notice (Showboat
 1991 by David Rakowski.  Alle Rechte Vorbehalten.) readonly def
end readonly def
/FontName /Showboat def
--stdin--

Basándonos esta información podríamos usar un nombre como este:

-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1

Los componentes de nuestro nombre son:

Tipo

Llamemos a todas las fuentes nuevas type 1.

Familia

El nombre del tipo.

Densidad

Normal, bold, medium, semibold, etc. De la salida de strings(1) de arriba, parece que esta fuente tiene un peso medium.

Inclinación

roman, italic, oblique, etc. Puesto que ItalicAngle es cero, se usará roman.

Anchura

Normal, wide, condensed, extended, etc. Hasta que se pueda examinar, se asumirá que será normal.

Estilo adicional

Generalmente se omite, pero esto indicará que el tipo contiene mayúsculas decorativas.

Espaciado

proportional o monospaced. Se usa Proportional ya que isFixedPitch es falso.

Todos estos nombres son arbitrarios pero uno debería intentar ser compatible con las convenciones ya existentes. Una fuente es referenciada por un programa X11 por el nombre con posibles wild cards, así que el nombre escogido debería tener algo de sentido. Uno podría empezar simplemente por usar

...-normal-r-normal-...-p-...

como nombre y después usar xfontsel(1) para examinarlo y ajustar el nombre en función de la apariencia de la fuente.

Para completar nuestro ejemplo:

Hacer la fuente accesible a X11
% cd /usr/X11R6/lib/X11/fonts/Type1
% ln -s /usr/local/share/fonts/type1/showboat.pfb .

Edita fonts.dir y fonts.scale, añadiendo la linea que describe la fuente
e incrementa el número de fuentes que se encuentra en la primera linea.
% ex fonts.dir
:1p
25
:1c
26
.
:$a
showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
.
:wq

fonts.scale parece idéntico a fonts.dir...
% cp fonts.dir fonts.scale

Dile a X11 que ha habido cambios
% xset fp rehash

Examina la nueva fuente
% xfontsel -pattern -type1-*

Referencias: xfontsel(1), xset(1), The X Windows System in a Nutshell, O’Reilly & Associates.

6. Uso de tipos Type 1 con Ghostscript

Ghostscript referencia una fuente mediante su Fontmap. Éste se debe modificar de una forma similar al fonts.dir de X11. Ghostscript puede utilizar tanto el formato de fuente .pfa como el formato .pfb. Usando la fuente del ejemplo anterior, así es como se utiliza con Ghostscript:

Pon la fuente en el directorio de fuentes de Ghostscript
% cd /usr/local/share/ghostscript/fonts
% ln -s /usr/local/share/fonts/type1/showboat.pfb .

Edita Fontmap para que Ghostscript reconozca la fuente
% cd /usr/local/share/ghostscript/4.01
% ex Fontmap
:$a
/Showboat        (showboat.pfb) ; % From CICA /fonts/atm/showboat
.
:wq

Utiliza Ghostscript para examinar la fuente
% gs prfont.ps
Aladdin Ghostscript 4.01 (1996-7-10)
Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA.  All rights
reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb...
 /1899520 581354 1300084 13826 0 done.
GS>Showboat DoFont
Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb...
 1939688 565415 1300084 16901 0 done.
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
GS>quit

Referencias: fonts.txt in the Ghostscript 4.01 distribution

7. Uso de tipos Type 1 con Groff

Ahora que la fuente puede ser utiliza tanto por X11 como port Ghostscript, ¿cómo se puede utilizar la nueva fuente con groff? Antes de nada, puesto que estamos tratando con fuentes PostScript® tipo 1, el dispositivo groff al que aplica es el dispositivo ps. Se debe crear un fichero de fuentes para cada fuente que pueda usar groff. Un nombre de fuente de groff es tan solo un fichero en /usr/share/groff_font/devps. Con nuestro ejemplo, el fichero de fuentes podría ser /usr/share/groff_font/devps/SHOWBOAT. El fichero tiene que ser creado utilizando herramientas proporcionadas por groff.

La primera herramienta es afmtodit. No está instalada por defecto, pero puede encontrarla en la distribución original. Descubrí que tenía que cambiar la primera línea del archivo, así que procedí del siguiente modo:

% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp
% ex /tmp/afmtodit.pl
:1c
#!/usr/bin/perl -P-
.
:wq

Esta herramienta creará el fichero de fuentes de groff a partir del fichero de métricas (sufijo .afm.) Siguiendo con nuestro ejemplo:

Muchos ficheros .afm están en formato Mac donde ^M delimita lineas
Tenemos que convertirlo a estilo UNIX(R) donde ^J delimita lineas
% cd /tmp
% cat /usr/local/share/fonts/type1/showboat.afm |
	tr '\015' '\012' >showboat.afm

Ahora crea el fichero de fuentes de groff
% cd /usr/share/groff_font/devps
% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT

Ahora se puede hacer referencia al tipo con el nombre SHOWBOAT.

Si se usa Ghostscript para controlar las impresoras del sistema, entonces no se necesita hacer nada más. Sin embargo, si se utilizan verdaderas impresoreas PostScript®, entonces la fuente se tiene que descargar a la impresora para que pueda ser utilizada (a menos que resulte que la impresora ya tenga incluida la fuente showboat o esté en un disco de fuentes accesible). El último paso es crear una fuente descargable. La herramienta pfbtops se usa para crear el formato .pfa de la fuente y download se modifica para referenciar la nueva fuente. download debe referenciar el nombre interno de la fuente. Éste se puede determinar fácilmente a partir del fichero de fuentes groff como se puede ver:

Crear el fichero de fuentes .pfa
% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa

Por supuesto, si el archivo .pfa ya existe, simplemente crea un enlace simbólico para referenciarlo.

Obtén el nombre interno de la fuente
% fgrep internalname SHOWBOAT
internalname Showboat
Dile a groff que se tiene que descargar la fuente
% ex download
:$a
Showboat      showboat.pfa
.
:wq

Para probar el tipo:

% cd /tmp
% cat >example.t <<EOF
.sp 5
.ps 16
Esto es un ejemplo de la fuente showboat:
.br
.ps 48
.vs (\n(.s+2)p
.sp
.ft SHOWBOAT
ABCDEFGHI
.br
JKLMNOPQR
.br
STUVWXYZ
.sp
.ps 16
.vs (\n(.s+2)p
.fp 5 SHOWBOAT
.ft R
Para usarla como primera letra de un párrafo, se parecerá a:
.sp 50p
\s(48\f5H\s0\fRere es la primera frase de un párrafo que usa
la fuente showboat como su primera letra.
Se debe usar espaciado vertical adicional para proporcionar espacio
para la letra más grande.
EOF
% groff -Tps example.t >example.ps

Para usar ghostscript/ghostview
% ghostview example.ps

Para imprimirlo
% lpr -Ppostscript example.ps

Referencias: /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man, groff_font(5), groff_char(7), pfbtops(1).

8. Conversión de tipos TrueType a un formato groff/PostScript para groff

Esto puede llevar un poco de trabajo por la sencilla razón de que depende de algunas herramientas que no se instalan como parte del sistema base:

ttf2pf

Herramientas de conversión de TrueType a PostScript. Esto permite la conversión de tipos TrueType a archivos de métrica de tipo ascii (.afm).

Actualmente disponible en http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/. Nota: Estos ficheros son programas PostScript y se deben descargar a disco manteniendo pulsado Shift cuando se hace click en el enlace. De otro modo tu navegador podría intentar arrancar ghostview para visualizarlos.

Los archivos importantes para esta tarea son:

  • GS_TTF.PS

  • PF2AFM.PS

  • ttf2pf.ps

    Todo este lío de mayúsculas y minúsculas en los nombres es porque se tiene en cuenta las shells de DOS. ttf2pf.ps utiliza el resto como mayúsculas, por lo que cualquier cambio de nombre debe tener esto en cuenta. (En realidad, GS_TTF.PS y PFS2AFM.PS son parte de la distribución de Ghostscript, pero se pueden usar como herramientas independientes. FreeBSD no incluye esta última.) También puede ser que quieras instalarlas en /usr/local/share/groff_font/devps(?).

afmtodit

Crea ficheros de fuentes para usarlas con groff a partir de ficheros de métricas ascii. Esto normalmente se encuentra en el directorio /usr/src/contrib/groff/afmtodit y requiere algo de trabajo hacerlo funcionar.

Si crees que trabajar en /usr/src no es muy buena idea, simplemente copia el contenido del directorio anterior en otra ubicación.

En el directorio, necesitarás compilar la utilidad. Escribe:

# make -f Makefile.sub afmtodit

Es posible que tengas que copiar también /usr/contrib/groff/devps/generate/textmap a /usr/share/groff_font/devps/generate si no existe.

Una vez que todas estas utilidades estén en su sitio, estará listo para comenzar:

  1. Crea .afm tecleando:

    % gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name

    Donde TTF_name es tu fichero de fuentes TrueType, PS_font_name es el nombre del fichero para .pfa, AFM_name es el nombre que quieres darle a .afm. Si no especificas nombres para los ficheros .pfa o .afm, se generarán nombres por defecto para los ficheros de fuentes TrueType.

    Esto también produce un archivo .pfa, el archivo ascii de las métricas del tipo PostScript (.pfb es para el formato binario). Esto no será necesario, pero podría (creo) ser útil para un servidor de fuentes.

    Por ejemplo, para convertir el tipo para código de barras 30f9 usando los nombres de archivo predeterminados use el siguiente comando:

    % gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf
    Aladdin Ghostscript 5.10 (1997-11-23)
    Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    Converting 3of9.ttf to 3of9.pfa and 3of9.afm.

    Si quieres almacenar las fuentes convertidas en A.pfa y B.afm, usa este comando:

    % gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B
    Aladdin Ghostscript 5.10 (1997-11-23)
    Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    Converting 3of9.ttf to A.pfa and B.afm.
  2. Crea el fichero PostScript de groff:

    Ve al directorio /usr/share/groff_font/devps para que el siguiente comando sea más fácil de ejecutar. Probablemente necesitarás privilegios de root. (O si no te sientes cómodo trabajando en ese directorio, asegúrate de hacer referencia a los archivos DESC, text.enc y generate/textmap que están en el directorio.)

    % afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name

    Donde file.afm es el AFM_name creado arriba por ttf2pf.ps y PS_font_name es el nombre de fuente utilizado en ese comando, así como el nombre que groff(1) utilizará para referenciar esta fuente. Por ejemplo, asumiendo que has usado el primer tiff2pf.ps de arriba, entonces la fuente 3of9 Barcode se puede crear con el siguiente comando:

    % afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9

    Asegúrate de que el fichero resultado PS_font_name (es decir, 3of9 en el ejemplo anterior) se encuentra en el directorio /usr/share/groff_font/devps ya sea copiándolo o moviéndolo a él.

    Nótese que si ttf2pf.ps asigna un nombre de fuente utilizando el que se encuentra en el fichero de fuentes TrueType y quieres utilizar un nombre diferente, debes editar el fichero .afm antes de ejecutar afmtodit. Este nombre también tiene que coincidir con el utilizado en el fichero Fontmap si quieres conectar mediante una tubería (pipe) groff(1) con gs(1).

9. ¿Se pueden usar los tipos TrueType con otros programas?

Windows, Windows 95 y Mac utilizan el formato de tipo TrueType. Es bastante popular y hay una gran cantidad de fuentes disponibles en este formato.

Desafortunadamente, hay pocas aplicaciones que conozca que puedan utilizar este formato: me vienen a la mente Ghostscript y Povray. El soporte en Ghostscript, según la documentación, es rudimentario y los resultados en general inferiores a los obtenidos con fuentes tipo 1. La versión 3 de Povray también puede utilizar fuentes TrueType, pero dudo de que haya mucha gente creando documentos como una serie de páginas de trazado de rayos :-).

Esta deprimente situación podría cambiar pronto. El Proyecto FreeType está actualmente desarrollando un útil conjunto de herramientas FreeType:

10. ¿Dónde se pueden obtener tipos adicionales?

Hay muchos tipos disponibles en Internet. Son totalmente gratuitos o share-ware. Además, muchos de esos tipos están disponibles en la categoría de ports x11-fonts/

11. Preguntas adicionales

  • ¿Para qué se usan los ficheros .pfm?

  • ¿Se puede generar un fichero .afm a partir de un .pfa o .pfb?

  • ¿Cómo generar ficheros de mapas de caracteres de groff para fuentes PostScript con nombres de caracteres no estándar?

  • ¿Se pueden configurar los dispositivos xditview y devX para acceder a todos los tipos nuevos?

  • Sería bueno tener ejemplos de uso de fuentes TrueType con Povray y Ghostscript.


Last modified on: 5 de noviembre de 2021 by Fernando Apesteguía