                  FreeBSD et les polices de caracteres

Un guide utilisateur

  Dave Bodenstab

   Copyright (c) 1999 Groupe de Documentation de FreeBSD. Tous droits
   reserves.

   <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.

   La redistribution du code source (SGML), modifie ou non, et
   compile (HTML, PostScript, etc.) est soumise aux conditions
   suivantes :

    1. Le copyright ci-dessus, la presente liste de conditions et
       l'avertissement qui la suit doivent figurer dans le code
       source.

    2. Le code source distribue sous forme compilee doit faire
       apparaitre le copyright ci-dessus, la presente liste de
       conditions et l'avertissement qui la suit.

   CE DOCUMENT EST FOURNI ``TEL QU'EN L'ETAT'' PAR LE PROJET DE
   DOCUMENTATION FRANC,AISE DE FreeBSD ET IL N'EST DONNE AUCUNE
   GARANTIE, IMPLICITE OU EXPLICITE, QUANT A SON UTILISATION
   COMMERCIALE, PROFESSIONNELLE OU AUTRE. LES COLLABORATEURS DU
   PROJET DE DOCUMENTATION FRANC,AISE DE FreeBSD NE PEUVENT EN AUCUN
   CAS ETRE TENUS POUR RESPONSABLES DE QUELQUE DOMMAGE OU PREJUDICE
   DIRECT, INDIRECT, SECONDAIRE OU ACCESSOIRE (Y COMPRIS LES PERTES
   FINANCIeRES DUES AU MANQUE A GAGNER, A L'INTERRUPTION D'ACTIVITES,
   OU LA PERTE D'INFORMATIONS ET AUTRES) DECOULANT DE L'UTILISATION
   DE LA DOCUMENTATION OU DE L'IMPOSSIBILITE D'UTILISER CELLE-CI, ET
   DONT L'UTILISATEUR ACCEPTE L'ENTIERE RESPONSABILITE.

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

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

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.

  Notes

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

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

        Ce document, ainsi que d'autres peut etre telecharge sur
                   ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions `a propos de FreeBSD, lisez la documentation avant
                 de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.
