                      FreeBSD et les polices de caracteres

  Un guide utilisateur

  Dave Bodenstab

   Version: 43184
   2013-11-13 07:52:45 par hrs.
   Resume

   <imdave@synet.net>

   Mercredi 7 Aout 1996

   Ce document decrit les differents fichiers de polices de caracteres qui
   peuvent etre utilises avec FreeBSD et le pilote syscons, X11, GhostScript
   et Groff. Des exemples immediatement applicables sont donnes pour passer
   l'affichage `a la console en mode 80x60 et pour se servir des polices
   "Type 1" avec les programmes d'application precites.

   Version franc,aise de Frederic Haby <frederic.haby@mail.dotcom.fr>.

   [ Multiples pages HTML / Page HTML unique ]

     ----------------------------------------------------------------------

   Table des matieres

   1. Introduction

   2. Terminologie elementaire

   3. Quels formats de polices de caracteres puis-je utiliser?

   4. Configurer une console virtuelle en mode 80x60 lignes

   5. X11 et les polices "Type 1"

   6. Utiliser les polices "Type 1" avec GhostScript

   7. Utiliser les polices "Type 1" avec Groff

   8. Peut-on utiliser des polices "True Type"?

   9. Ou peut-on trouver des polices supplementaires?

   10. D'autres questions

1. Introduction

   Il y a de nombreuses sources de polices de caracteres disponibles, et l'on
   peut se demander comment les utiliser avec FreeBSD. La reponse peut etre
   obtenue en detaillant attentivement la documentation du composant voulu.
   Cela peut prendre beaucoup de temps, ce guide essaie donc de fournir un
   raccourci pour les autres personnes que cela interesserait.

2. Terminologie elementaire

   Il y a de nombreux formats de polices de caracteres avec chacun son propre
   suffixe de nom de fichier. Quelques uns d'entre eux seront discutes dans
   ce document:

   .pfa, .pfb

           Polices PostScript "Type 1". .pfa est le format Ascii et .pfb le
           format Binaire.

   .afm

           Le fichier de dimensions d'une police "Type 1".

   .pfm

           Le fichier de dimensions pour l'impression d'une police "Type 1".

   .ttf

           Police "True Type".

   .fot

           Reference indirecte `a une police "True Type" (ce n'est pas la
           police elle-meme).

   .fon, .fnt

           Police de caracteres "bitmap" pour affichage `a l'ecran.

   Les fichiers .fot sont employes par Windows un peu de la meme fac,on que
   des liens symboliques vers le fichiers de police "True Type" (.ttf). Les
   fichiers .fon sont aussi utilises par Windows. Je ne connais pas de moyen
   de se servir de ces fichiers avec FreeBSD.

3. Quels formats de polices de caracteres puis-je utiliser?

   Le format de fichier de police de caracteres utile depend de
   l'application. FreeBSD lui-meme n'utilise pas de police de caracteres. Ce
   sont les programmes d'application et/ou les pilotes qui se servent
   eventuellement de ces fichiers. Voici un petit tableau associant
   application/pilote de peripherique et suffixe des fichiers de police de
   caracteres:

   +---------------------------------------------------+
   |                | .fnt | .pfa | .pfb | .ttf | .afm |
   |----------------+------+------+------+------+------|
   | Pilote syscons | Oui  |      |      |      |      |
   |----------------+------+------+------+------+------|
   | GhostScript    |      | Oui  | Oui  | Oui  |      |
   |----------------+------+------+------+------+------|
   | X11            |      | Oui  | Oui  |      |      |
   |----------------+------+------+------+------+------|
   | Groff          |      | Oui  |      |      | Oui  |
   |----------------+------+------+------+------+------|
   | Povray         |      |      |      | Oui  |      |
   +---------------------------------------------------+

   Le suffixe .fnt est assez frequemment utilise. Je soupc,onne que lorsque
   quelqu'un veut creer un fichier de police de caracteres specialise pour
   son application, il choisit la plupart du temps ce suffixe. Il y a donc
   des chances pour que des fichiers avec ce suffixe n'aient pas tous le meme
   format; en particulier, les fichiers .fnt utilises par le pilote syscons
   de FreeBSD n'auront peut-etre pas le meme format qu'un fichier .fnt
   utilise dans l'environnement DOS/Windows. Je n'ai jamais essaye d'utiliser
   d'autres fichiers .fnt que ceux fournis avec FreeBSD.

4. Configurer une console virtuelle en mode 80x60 lignes

   Il faut d'abord charger une police de caracteres 8x8. Le fichier
   /etc/sysconfig[1] doit donc contenir les lignes:

 # choose font 8x8 from /usr/share/syscons/fonts/* (or NO for default)
 font8x8=/usr/share/syscons/fonts/cp437-8x8.fnt
    

   La commande pour changer de mode d'affichage est vidcontrol(1):

 bash$ vidcontrol VGA_80x60

   Differents programmes en mode plein-ecran, tel vi(1), doivent pouvoir
   determiner la taille actuelle de l'ecran. Elle peut etre configuree avec
   stty(1):

 bash$ stty crt rows 60 columns 80

   Pour rendre cela moins fastidieux, ces commandes peuvent etre introduites
   dans une procedure executee au demarrage du systeme. Voici une fac,on de
   le faire:

    1. Modifiez /etc/sysconfig comme explique plus haut,

    2. Ajoutez les lignes suivantes `a /etc/rc.local:

 for tty in /dev/ttyv?
 do
   vidcontrol VGA_80x60 <$tty >/dev/null 2<&1
 done
        

    3. Ajoutez les lignes suivantes `a /etc/profile:

 TTYNAME=`basename \`tty\``
 if expr "$TTYNAME" : 'ttyv' > /dev/null
 then
   stty crt rows 60 columns 80
 fi
        

   References: stty(1), vidcontrol(1).

5. X11 et les polices "Type 1"

   X11 peut employer les formats de police de caracteres .pfa et .pfb. Il y a
   une reference croisee de chaque fichier sur son nom X11 par
   l'intermediaire du fichier fonts.dir de chaque repertoire.

   Il y a dej`a un repertoire appele Type1. La fac,on la plus immediate
   d'ajouter une police de caracteres est de la mettre dans ce repertoire.
   Une meilleure maniere de proceder est de mettre toutes les nouvelle
   polices dans un repertoire distinct et d'utiliser un lien symbolique sur
   ces nouvelles polices. Il est alors plus facile de distinguer ses propres
   polices de celles qui sont fournies d'origine. Par exemple:

     * Creer un repertoire pour les fichiers de police de caracteres.

 bash$ mkdir -p /usr/local/share/fonts/type1
 bash$ cd /usr/local/share/fonts/type1

     * Y mettre les fichiers .pfa, .pfb et .afm. On peut aussi vouloir y
       conserver les fichiers README et autres documentations concernant les
       polices de caracteres.

 bash$ cp /cdrom/fonts/atm/showboat/showboat.pfb .
 bash$ cp /cdrom/fonts/atm/showboat/showboat.afm .

     * Tenir `a jour un index pour creer les references croisees sur les
       polices.

 bash$ echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX

   Pour pouvoir maintenant utiliser une nouvelle police de caracteres, il
   faut mettre le fichier `a disposition, et mettre `a jour le fichier des
   noms de polices. Les noms de police X11 se presentent comme suit:

 -bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1
      |        |      |    |   |     |  | | | | | |    \    \
      |        |      |    |   |     \  \ \ \ \ \ \     +----+- jeu de caracteres
      |        |      |    |   \      \  \ \ \ \ \ +- largeur moyenne
      |        |      |    |    \      \  \ \ \ \ +- espacement
      |        |      |    \     \      \  \ \ \ +- resolution verticale
      |        |      |     \     \      \  \ \ +- resolution horizontale
      |        |      |      \     \      \  \ +- points
      |        |      |       \  largeur   \  +- pixels
      |        |      |        \            \
    casse   famille graisse inclinaison style supplementaire
    

   Il faut creer un nouveau nom pour chaque nouvelle police. Si la
   documentation qui l'accompagne vous donne quelques informations, elle peut
   servir de base pour definir ce nom. Si vous n'avez aucune information,
   vous pouvez utiliser la commande strings(1) sur le fichier de police. Par
   exemple:

 bash$ 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--
    

   A partir de ces informations, le nom pourrait etre:

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

   Les composantes de ce nom sont:

   Casse

           Appelons simplement toutes nos nouvelles polices type1.

   Famille

           Le nom de la police.

   Graisse

           Normal, gras, medium, semi-gras, etc. D'apres les resultats de
           strings(1) ci-dessus, la police a une graisse medium.

   Inclinaison

           roman, italique ou oblique. Comme ItaliqueAngle vaut 0, nous
           utiliserons roman.

   Largeur

           Normale, large, condensee, etendue, etc. Jusqu'`a ce que nous la
           determinions `a l'usage, nous supposerons qu'elle est normale.

   Style supplementaire

           Habituellement non renseigne, mais nous nous en servons pour
           indiquer que la police contient des majuscules decoratives.

   Espacement

           Proportionnel ou fixe. Comme isFixedPitch est faux, nous utilisons
           Proportionnel.

   Tous ces noms sont arbitraires, mais il faut essayer de rester compatible
   avec les conventions existantes. Une police est connue d'une application
   X11 sous un nom qui peut eventuellement comporter des caracteres de
   substitution, il faut donc choisir un nom significatif. On peut commencer
   en utilisant simplement:

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

   comme nom, puis se servir de xfontsel(1) pour visualiser la police et
   affiner son nom en fonction de ce `a quoi elle ressemble.

   Donc, pour completer notre exemple:

     * Rendre la police accessible `a X11

 bash$ cd /usr/X11R6/lib/X11/fonts/Type1
 bash$ ln -s /usr/local/share/fonts/type1/showboat.pfb .

     * Editer fonts.scale et fonts.dir pour y ajouter une ligne decrivant la
       nouvelle police et incrementer le nombre de polices qui est defini en
       premiere ligne

 bash$ 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 et fonts.dir sont apparemment identiques

 bash$ cp fonts.dir fonts.scale

     * Informer X11 des modifications

 bash$ xset fp rehash

     * Visualiser la nouvelle police

 bash$ xfontsel -pattern -type1-*

   References: xfontsel(1), xset(1), The X Window System in a Nutshell,
   O'Reilly & Associates.

6. Utiliser les polices "Type 1" avec GhostScript

   GhostScript reference les polices via son fichier Fontmap. Il doit donc
   etre modifie de la meme fac,on que le fichier X11 fonts.dir. GhostScript
   peut utiliser des fichiers de police de caracteres aux formats .pfa ou
   .pfb. Voici comment nous utiliserions la police de l'exemple precedent
   avec GhostScript:

     * Mettre la police dans le repertoire des polices de GhostScript

 bash$ cd /usr/local/share/ghostscript/fonts
 bash$ ln -s /usr/local/share/fonts/type1/showboat.pfb .

     * Editer le fichier Fontmap pour que GhostScript ait connaissance de la
       nouvelle police

 bash$ cd /usr/local/share/ghostscript/4.01
 bash$ ex Fontmap
 :$a
 /Showboat        (showboat.pfb) ; % From CICA /fonts/atm/showboat
 :wq

     * Utiliser GhostScript pour visualiser la police

 bash$ 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

   References: fonts.txt de la distribution de GhostScript 4.01.

7. Utiliser les polices "Type 1" avec Groff

   Maintenant que nous pouvons utiliser la nouvelle police avec X11 et
   GhostScript, comment faire pour s'en servir aussi avec groff? Tout
   d'abord, comme nous nous occupons de polices PostScript "Type 1", le
   peripherique groff `a utiliser est ps. Il faut creer un fichier de police
   pour chaque police utilisee par groff. Le nom d'une police groff se resume
   `a un fichier dans le repertoire /usr/share/groff_font/devps. Dans notre
   exemple, ce pourrait etre /usr/share/groff_font/devps/SHOWBOAT. Il faut
   creer ce fichier avec les outils fournis par groff.

   Le premier outil est afmtodit. Il n'est pas normalement installe et doit
   donc etre extrait de la distribution sous forme de sources. Je me suis
   aperc,u qu'il fallait modifier la premiere ligne du fichier, voici donc ce
   que j'ai fait:

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

   Cet outil cree le fichier de police groff `a partir du fichier de
   dimensions de la police (suffixe .afm). Pour continuer avec notre exemple:

     * De nombreux fichiers .afm sont au format Mac... avec des lignes
       terminees par des ^M

       Il faut les convertir au style Unix avec des lignes terminees par des
       ^J

 bash$ cd /tmp
 bash$ cat /usr/local/share/fonts/type1/showboat.afm |
        tr '\015' '\012' >showboat.afm

     * Creons maintenant le fichier de police groff

 bash$ cd /usr/share/groff_font/devps
 bash$ /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT

   La police peut maintenant etre referencee par le nom SHOWBOAT.

   Si l'on utilise GhostScript pour piloter les imprimantes du systeme, il
   n'y a rien d'autre `a faire. Si, par contre, l'on utilise de vraies
   imprimantes PostScript, il faut alors charger la police sur l'imprimante
   pour pouvoir l'utiliser (`a moins que l'imprimante ne dispose de la police
   "showboat" en interne ou sur une disquette de polices accessible). La
   derniere etape consiste `a creer la police chargeable. L'outil pfbtops est
   utilise pour creer le format .pfa de la police et le fichier download est
   modifie pour faire reference `a la nouvelle police. Le fichier download
   doit indiquer le nom interne de la police. Ce nom peut etre facilement
   connu `a l'aide du fichier de police groff, comme le montre l'exemple:

     * Creer le fichier de police .pfa

 bash$ fgrep internalname SHOWBOAT
 internalname Showboat

     * Dire `a groff qu'il faut charger la police

 bash$ ex download
 :$a
 Showboat      showboat.pfa
 .
 :wq

   Pour tester la police:

 bash$ cd /tmp
 bash$ cat >exemple.t <<EOF
 .sp 5
 .ps 15
 C'est un exemple de police 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 5
 Utilisee comme premiere lettre d'un paragraphe. Cela ressemblera `a:
 .sp50p
 \s(48\f5V\s0\fRoici la premiere phrase d'un paragraphe qui utilise
 la police showboat pour sa premiere lettre. Il faut augmenter
 l'espacement vertical pour laisser de la place pour la premiere
 lettre.
 EOF
 bash$ groff -Tps exemple.t >exemple.ps

     * Pour utiliser GhostScript/GhostView

 bash$ ghostview exemple.ps

     * Pour l'imprimer

 bash$ lpr -Ppostscript exemple.ps

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

8. Peut-on utiliser des polices "True Type"?

   Le format de police "True Type" est utilisee par Windows, Windows 95 et le
   Macintosh. Il est assez repandu et il y a de nombreuses polices de ce
   format disponibles.

   Malheureusement, je connais peu d'applications qui puissent utiliser ce
   format: GhostScript et Povray viennent `a l'esprit. Le support par
   GhostScript est, d'apres la documentation, assez rudimentaire et il y a
   des chances que le resultat soit moins bon qu'avec les polices "Type 1".
   Povray version 3 est aussi capable d'utiliser des des polices "True Type",
   mais je doute que beaucoup de personnes creent des documents sous forme de
   pages generees par lancer de rayon :-).

   Il est difficile d'utiliser une police "True Type" avec groff parce que
   groff a besoin d'un fichier de description de la police, et je ne connais
   pas d'outil pour determiner les dimensions d'une police "True Type". De
   plus, il faudrait charger la police sur les imprimantes PostScript avec le
   format approprie et, de nouveau, groff ne peut gerer de cette fac,on les
   polices "True Type".

   Cette situation plutot desolante changera peut-etre bientot. Le Projet
   FreeType developpe actuellement un ensemble d'utilitaire FreeType:

     * Le serveur de polices xfsft pour X11 peut gerer les polices "TrueType"
       en plus des polices ordinaires. Bien que ce soit encore une version
       beta, elle a la reputation d'etre `a peu pres utilisable. Voyez la
       page de Juliusz Chroboczek pour plus d'informations. Il y a des
       instructions de portage sous FreeBSD sur la page logicielle de Stephen
       Montgomery.

     * xfstt est un autre serveur X11, disponible sur
       ftp://sunsite.unc.edu/pub/Linux/X11/fonts.

     * Il y a un programme appele ttf2bdf qui peut creer des fichiers BDF
       utilisables en environnement X `a partir de fichiers "TrueType". Les
       binaires pour Linux sont censes etre disponibles sur
       ftp://crl.nmsu.edu/CLR/multiling/General/.

     * Pour les personnes qui ont besoin de polices "True Type" asiatiques,
       il peut valoir la peine de jetter un coup d'oeil au serveur de polices
       XTT. Il y a des informations sur XTT `a l'adresse:
       http://hawk.ise.chuo-u.ac.jp/student/person/tshiozak/study/freebsd-at-random/x-tt/index-en.html.

     * et d'autres ...

9. Ou peut-on trouver des polices supplementaires?

   Il y a de nombreuses polices disponibles sur l'Internet. Elles sont soit
   completement gratuites ou en "partagiciel". Il y a aussi de nombreux
   CD-ROMs peux onereux qui contiennent beaucoup de polices. Voici quelques
   sites Internet (au mois d'Aout 1996):

     * ftp://ftp.winsite.com (auparavant CICA),

     * http://www.simtel.net/,

     * ftp://ftp.coast.net/,

     * http://af-pc-plloyd.ecel.uwa.edu.au/fonts/index.html,

     * http://www.esselte.com/letraset/index.html,

     * http://www.inil.com/users/elfring/esf.htm.

10. D'autres questions

     * Que sont que les fichiers .pfm?

     * Peut-on generer des fichiers .afm `a partir de fichiers .pfa ou .pfb?

     * Comment generer des fichiers de correspondance de caracteres pour
       groff pour les polices PostScript dont les caracteres ont des noms qui
       ne sont pas standard?

     * Les peripheriques xditview et devX?? peuvent-ils etre configures pour
       acceder aux nouvelles polices?

     * Il serait bien d'avoir des exemples d'utilisation de polices "True
       Type" avec GhostScript et Povray.

     ----------------------------------------------------------------------

   [1] N.d.T.: /etc/rc.conf dans les versions recentes de FreeBSD.
