Chapitre 11. Conversion de données

# Chapitre 11. Conversion de données

Description des outils et astuces pour convertir différents formats de données sur un système Debian.

Les outils basés sur des standards sont de très bonne qualité mais la prise en charge des formats propriétaires est limitée.

## 11.1. Outils de conversion de données textuelles

Mes yeux ont été attirés par les paquets suivants de conversions de données textuelles :

Tableau 11.1. Liste des outils de conversion de texte

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`libc6` | V:940, I:999 | 5355 | jeu de caractères | convertisseur de codage de texte entre différents paramètres linguistiques à l’aide d’iconv(1) (fondamental)
`recode` | V:2, I:13 | 528 | charset+eol | convertisseur de codage de texte entre différents paramètres linguistiques (flexible avec plus d’alias et de fonctionnalités)
`konwert` | V:2, I:42 | 137 | jeu de caractères | convertisseur de codage de texte entre différents paramètres linguistiques (le luxe)
`nkf` | V:0.4, I:8.5 | 359 | jeu de caractères | jeux de caractères pour le japonais
`tcs` | V:0.01, I:0.14 | 518 | jeu de caractères | jeu de caractères du traducteur
`unaccent` | V:0.03, I:0.30 | 35 | jeu de caractères | remplacer les lettres accentuées par leur équivalent accentué
`tofrodos` | V:1, I:13 | 50 | eol (fin de ligne) | convertisseur de format de texte entre DOS et UNIX : fromdos(1) et todos(1)
`macutils` | V:0.04, I:0.45 | 319 | eol (fin de ligne) | convertisseur de format de texte entre Macintosh et UNIX :frommac(1) et tomac(1)

### 11.1.1. Convertir un fichier texte avec iconv

| Astuce
iconv(1) fait partie du paquet `libc6` et est toujours disponible sur pratiquement tous les systèmes de type Unix pour permettre la conversion des codages de caractères.

Vous pouvez convertir les codages de caractères d’un fichier texte par iconv(1) en effectuant ce qui suite :

    $ iconv -f encoding1 -t encoding2 input.txt >output.txt

La valeur des codages n’est pas sensible à la casse et ignore « `-` » et « `_` » pour la correspondance. On peut vérifier quels sont les codages pris en charge à l’aide de la commande « `iconv -l` ».

Tableau 11.2. Liste de valeurs de codage et leur utilisation

valeur de codage | utilisation
--- | ---
ASCII | American Standard Code for Information Interchange (Code américain standard pour l’échange d’informations), code sur 7 bits sans caractère accentué
UTF-8 | norme actuelle multi-langues pour tous les systèmes d’exploitation modernes
ISO-8859-1 | ancienne norme pour les langues d’Europe de l’ouest, ASCII + lettres accentuées
ISO-8859-2 | ancienne norme pour les langues d’Europe de l’est, ASCII + lettres accentuées
ISO-8859-15 | ancienne norme pour les langues d’Europe de l’ouest, ISO-8859-1 avec le signe euro
CP850 | page de code 850, caractères de DOS Microsoft avec glyphes pour les langues de l’Europe de l’est, variante de ISO-8859-1
CP932 | page de code 932, variante style Microsoft Windows de Shift-JIS pour le japonais
CP936 | page de code 936, variante style Microsoft Windows de GB2312, GBK ou GB18030 pour le chinois simplifié
CP949 | page de code 949, variante style Microsoft Windows de EUC-KR de « Unified Hangul Code » pour le coréen
CP950 | page de code 950, variante style Microsoft Windows de Big5 pour le chinois traditionnel
CP1251 | page de code 1251, encodage de style Microsoft Windows pour l’alphabet cyrillique
CP1252 | page de code 1252, variante style Microsoft Windows de ISO-8859-15 pour les langues d’Europe de l’ouest
KOI8-R | ancienne norme UNIX de russe pour l’alphabet cyrillique
ISO-2022-JP | codage standard du courrier électronique japonais n’utilisant que des codes à 7 bits
eucJP | ancien code UNIX de japonais sur 8 bits et complètement différent de Shift-JIS
Shift-JIS | norme JIS X 0208 Annexe 1 pour le japonais (consultez CP932)

| Note
Certains encodages ne sont pris en charge que pour la conversion de données et ne sont pas utilisés comme valeurs de paramètres régionaux (Section 8.1, « Les paramètres linguistiques (« locale ») »).

Pour les jeux de caractères qui tiennent dans un seul octet tels que les jeux de caractères ASCII et ISO-8859, le codage des caractères signifie à peu près la même chose que le jeu de caractères.

Pour les jeux de caractères ayant de nombreux caractères tels que JIS X 0213 pour le japonais ou Universal Character Set (UCS, Unicode, ISO-10646-1) (jeu de caractère universel) pour pratiquement toutes les langues, il y a de nombreux schémas de codage pour les insérer dans les séquences d’octets de données.

- EUC et ISO/IEC 2022 (connu aussi en tant que JIS X 0202) pour le japonais

- UTF-8, UTF-16/UCS-2 et UTF-32/UCS-4 pour l’Unicode

Pour ceux-ci, il y a une différence claire entre le jeu de caractères et le codage des caractères.

Page de code est utilisée comme synonyme de table de codage de caractères pour certaines d’entre-elles spécifiques au fournisseur.

| Note

Veuillez remarquer que la plupart des systèmes de codage partagent le même code avec ASCII pour les caractères sur 7 bits. Mais il y a quelques exceptions, lors de la conversion de programmes C et des données d’URL anciens en japonais depuis ce qui est parfois appelé format de codage shift-JIS vers le format UTF-8, utilisez « `CP932` » comme nom de codage plutôt que « `shift-JIS` » afin d’obtenir le résultat attendu : `0x5C` → « `\` » et `0x7E` → « `~` ». Sinon, ils seront convertis vers les mauvais caractères.

| Astuce
On peut aussi utiliser recode(1) qui offre plus de fonctionnalités que celles combinées de iconv(1), fromdos(1), todos(1), frommac(1) et tomac(1). Pour plus de détails, consultez « `info recode` ».

### 11.1.2. Vérifier que les fichiers sont codés en UTF-8 avec iconv

Vous pouvez vérifier si un fichier texte est codé en UTF-8 à l’aide d’iconv(1) en effectuant ce qui suit :

    $ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found"

| Astuce
Utilisez l’option « `--verbose` » dans les exemples ci-dessus pour trouver le premier caractère non UTF-8.

### 11.1.3. Convertir les noms de fichiers avec iconv

Voici un exemple de script pour convertir le codage des noms de fichiers, dans un seul répertoire, depuis celui créé par un ancien système d’exploitation vers celui d’un système d’exploitation moderne en UTF-8.

    #!/bin/sh
    ENCDN=iso-8859-1
    for x in *;
     do
     mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)"
    done

La variable « `$ENCDN` » spécifie l'encodage d'origine des noms de fichier sous d'anciens OS de la même façon que dans Tableau 11.2, « Liste de valeurs de codage et leur utilisation ».

Pour les cas plus compliqués, veuillez monter le système de fichiers (par exemple une partition d’un disque dur) contenant de tels noms de fichiers avec le codage correct comme option de mount(8) (consultez Section 8.1.3, « Coder les noms de fichiers ») et copier son contenu complet vers un autre système de fichiers monté en UTF-8 avec la commande « `cp -a` ».

### 11.1.4. Convertir les fins de ligne (EOL)

Le format de fichier texte, particulièrement le code de fin de ligne (EOL), dépend de la plateforme.

Tableau 11.3. Liste des styles d’EOL pour différentes plateformes

plateforme | code pour EOL | contrôle | décimal | hexadécimal
--- | --- | --- | --- | ---
Debian (unix) | LF | `^J` | 10 | 0A
MSDOS et Windows | CR-LF | `^M^J` | 13 10 | 0D 0A
Macintosh d’Apple | CR | `^M` | 13 | 0D

Les programmes de conversion du format des fins de lignes (EOL), fromdos(1), todos(1), frommac(1) et tomac(1) sont assez pratiques. `recode`(1) peut aussi être utile.

| Note
Certaines données sur un système Debian, telles que les données de la page wiki du paquet `python-moinmoin`, utilisent le CR-LF du style MSDOS comme code de fin de ligne (EOL). La règle précédente n’est donc que générale.

| Note
La plupart des éditeurs (par exemple `vim`, `emacs`, `gedit`…) peuvent prendre en compte de manière transparente les fichiers ayant une fin de ligne (EOL) de style MSDOS.

| Astuce
L’utilisation de « `sed -e '/\r$/!s/$/\r/'` » en remplacement de todos(1) est préférable lorsque vous désirez unifier le style de caractère de fin de ligne vers le style MSDOS depuis un style mixte MSDOS et UNIX (par exemple, après avoir fusionné deux fichiers de style MSDOS avec diff3(1)). Cela parce que `todos` ajoute un retour charriot (CR) à toutes les lignes.

### 11.1.5. Convertir les tabulations (TAB)

Il y a quelques programmes spécialisés dans la conversion des codes de tabulations.

Tableau 11.4. Liste des commande de conversion de TAB des paquets `bsdmainutils` et `coreutils`

fonction | `bsdmainutils` | `coreutils`
--- | --- | ---
étendre les tabulations en espaces | « `col -x` » | `expand`
convertir les espaces en tabulation | « `col -h` » | `unexpand`

indent(1) du paquet `indent` reformate complètement les espaces dans un programme en C.

Des programmes d’édition tels que `vim` et `emacs` peuvent aussi être utilisés pour la conversion des tabulations. Par exemple avec `vim`, vous pouvez étendre les tabulation avec la séquence de commandes « `:set expandtab` » et « `:%retab` ». Vous pouvez revenir en arrière de cette conversion par la séquence de commandes « `:set noexpandtab` » et « `:%retab!` ».

### 11.1.6. Éditeurs avec conversion automatique

Les éditeurs de textes modernes et intelligents comme le programme `vim` sont assez habiles et prennent assez bien en compte les systèmes de codage de caractères et tous les formats de fichiers. Vous devriez utiliser ces éditeurs avec les paramètres linguistiques UTF-8 dans une console compatible avec UTF-8 pour une meilleure compatibilité.

Un ancien fichier texte UNIX d’Europe de l’Ouest, « `u-file.txt` » enregistré dans le codage latin1 (iso-8859-1) peut être édité avec `vim` de la manière suivante :

    $ vim u-file.txt

C’est possible car le mécanisme d’autodétection du codage du fichier dans `vim` suppose d’abord que le codage est UTF-8 et, s’il échoue, suppose qu’il est latin1.

Un ancien fichier texte en polonais, « `pu-file.txt` », enregistré avec le codage latin2 (iso-8859-2) peut être édité avec `vim` de la manière suivante :

    $ vim '+e ++enc=latin2 pu-file.txt'

Un ancien fichier texte UNIX en japonais, « `ju-file.txt` », enregistré avec le codage eucJP peut être édité avec `vim` de la manière suivante :

    $ vim '+e ++enc=eucJP ju-file.txt'

Un ancien fichier MS-Windows en japonais, « `jw-file.txt` », enregistré dans le codage appelé shift-JIS (plus précisément : CP932) peut être édité avec `vim` de la manière suivante :

    $ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'

Lorsqu’un fichier est ouvert avec les options « `++enc` » et « `++ff` », « `:w` » sur la ligne de commandes de Vim l’enregistre dans son format d’origine et écrase le fichier d’origine. Vous pouvez aussi indiquer le format d’enregistrement et le nom du fichier sur la ligne de commandes de Vim, par exemple, « `:w ++enc=utf8 nouveau.txt` ».

Veuillez vous rapporter à mbyte.txt « multi-byte text support » dans l’aide en ligne de `vim` et Tableau 11.2, « Liste de valeurs de codage et leur utilisation » pour les valeurs de paramètres linguistiques utilisés avec « `++enc` ».

La famille de programmes `emacs` peut effectuer des fonctions équivalentes.

### 11.1.7. Extraire du texte brut

Ce qui suit permet de lire une page web sous forme de fichier texte. C’est très utile pour copier des informations de configuration depuis le Web ou pour appliquer des outils textuels de base d’UNIX comme grep(1) à la page web .

    $ w3m -dump https://www.remote-site.com/help-info.html >textfile

De la même manière, vous pouvez extraire des données en texte brut vers d’autres formats en utilisant ce qui suit :.

Tableau 11.5. Liste d’outils pour extraite des données en texte brut

paquet | popularité | taille | mot clé | fonction
--- | --- | --- | --- | ---
`w3m` | V:11, I:137 | 2853 | html→texte | convertisseur HTML vers texte avec la commande « `w3m -dump` »
`html2text` | V:3, I:68 | 298 | html→texte | convertisseur avancé HTML vers texte (ISO 8859-1)
`lynx` | V:28, I:449 | 2031 | html→texte | convertisseur HTML vers texte avec la commande « `lynx -dump` »
`elinks` | V:3, I:16 | 1789 | html→texte | convertisseur HTML vers texte avec la commande « `elinks -dump` »
`links` | V:2, I:21 | 2321 | html→texte | convertisseur HTML vers texte avec la commande « `links -dump` »
`links2` | V:1, I:10 | 5466 | html→texte | convertisseur HTML vers texte avec la commande « `links2 -dump` »
`catdoc` | V:15, I:171 | 682 | MSWord→texte,TeX | convertir les fichier MSWord en texte brut ou en TeX
`antiword` | V:0.9, I:6.5 | 587 | MSWord→texte,ps | convertir des fichiers MSWord en texte brut ou en ps
`unhtml` | V:0.04, I:0.50 | 40 | html→texte | supprimer les balise d’un fichier HTML
`odt2txt` | V:1, I:21 | 60 | odt→texte | convertisseur du texte OpenDocument vers texte

### 11.1.8. Mettre en évidence et formater des données en texte brut

Vous pouvez mettre en évidence et formater des données en texte brut de la manière suivante :

Tableau 11.6. Liste des outils pour mettre en évidence des données de texte brut

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`vim-runtime` | V:17, I:365 | 38706 | mise en évidence | MACRO Vim pour convertir du code source en HTML avec « `:source $VIMRUNTIME/syntax/html.vim` »
`cxref` | V:0.03, I:0.23 | 1191 | c→html | convertisseur pour les programmes C vers latex et HTML (langage C)
`src2tex` | V:0.02, I:0.18 | 1799 | mise en évidence | convertit de nombreux codes sources en TeX (langage C)
`source-highlight` | V:0.5, I:3.2 | 2131 | mise en évidence | convertit de nombreux codes source vers des fichiers HTML, XHTML, LaTeX, Texinfo, séquences d’échappement en couleur ANSI et DocBook files avec mise en évidence (C++)
`highlight` | V:0.4, I:3.1 | 1411 | mise en évidence | convertit de nombreux codes sources en fichiers HTML, XHTML, RTF, LaTeX, TeX ou XSL-FO avec mise en évidence (C++)
`grc` | V:1.0, I:6.0 | 208 | texte→couleur | coloriseur générique pour n’importe quoi (Python)
`pandoc` | V:10, I:47 | 208068 | texte→tout format | Marqueur de conversion global (Haskell)
`python3-docutils` | V:12, I:52 | 2009 | texte→tout format | formateur de documents ReStructured Text vers XML (Python)
`markdown` | V:0.5, I:5.9 | 56 | texte→html | formateur de document texte Markdown en (X)HTML (Perl)
`asciidoctor` | V:0.4, I:4.8 | 101 | texte→tout format | formateur de documents texte AsciiDoc vers XML/HTML (Ruby)
`python3-sphinx` | V:6, I:27 | 3235 | texte→tout format | système de publication de documents basé sur reStructured Text (Python)
`hugo` | V:0.8, I:5.1 | 66608 | texte→html | système de publication de site statique basé sur Markdown (Go)

## 11.2. Données XML

Le langage de balisage extensible (« The Extensible Markup Language (XML) » est un langage de balisage de documents dont les informations sont structurées.

Consultez une introduction sur XML.COM.

- « Qu’est-ce qu’XML ? »

- « Qu’est-ce qu’XSLT ? »

- « Qu’est-ce qu’XSL-FO ? »

- « Qu’est-ce qu’XLink ? »

### 11.2.1. Conseils de base pour XML

Le texte en XML ressemble un peu à HTML. Il vous permet de gérer de nombreux formats de sortie pour un document. Un système XML facile est le paquet `docbook-xsl` qui est utilisé ici.

Chaque fichier XML commence par la déclaration XML standard suivante :

    <?xml version="1.0" encoding="UTF-8"?>

La syntaxe de base d’un élément XML est balisée de la manière suivante :

    <name attribute="value">content</name>

Un élément XML dont le contenu est vide est balisé de la façon raccourcie suivante :

    <name attribute="value" />

« `attribute="value"` » dans les exemples ci-dessus est optionnel.

L’action commentaire en XML est balisée comme suit :

    <!-- comment -->

En plus d’ajouter des balises, XML demande des conversions mineures de contenu en utilisant des entités prédéfinies pour les caractères suivants :

Tableau 11.7. Liste des entités XML prédéfinies

entité prédéfinie | caractère devant être converti
--- | ---
`&quot;` | `"` : double apostrophe
`&apos;` | `'` : apostrophe
`&lt;` | `<` : inférieur à
`&gt;` | `>` : supérieur à
`&amp;` | `&` : esperluette

| Attention
« `<` » ou « `&` » ne peuvent pas être utilisés dans des attributs ni des éléments.

| Note
Lorsque des entités définies par l’utilisateur de style SGML sont utilisées, par exemple « `&une_étiquette;` », la première définition prend le pas sur les suivantes. La définition de l’entité est exprimée par « `<!ENTITY une_étiquette "valeur entité">`".

| Note
Tant que le balisage XML est fait de manière cohérente avec un jeu particulier de nom de balises (soit certaines données comme valeur de contenu ou d’attribut), la conversion vers un autre XML est une tâche triviale en utilisant Extensible Stylesheet Language Transformations (XSLT).

### 11.2.2. Traitement XML

Il existe de nombreux outils pour traiter les fichiers XML tels quele langage extensible de feuilles de style (« the Extensible Stylesheet Language XSL «).

En gros, une fois créé un fichier XML correctement formaté, vous pouvez le convertir vers n’importe quel format en utilisant le langage extensible de transformation des feuilles de style (XSLT) (« Extensible Stylesheet Language Transformations »).

Le Langage extensible de feuilles de style pour le formatage des objets (XSL-FO) (« Extensible Stylesheet Language for Formatting Objects » est censé être la solution au formatage. Le paquet `fop` est nouveau dans l’archive `main` de Debian du fait de ses dépendances vers le langage de programmation Java. Le code LaTeX est donc habituellement créé depuis XML en utilisant XSLT, et le système LaTeX est utilisé pour créer des fichiers imprimables comme DVI, PostScript et PDF.

Tableau 11.8. Liste d’outils XML

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`docbook-xml` | V:15, I:408 | 2126 | xml | Définition de type de document XML (DTD) pour DocBook
`docbook-xsl` | V:14, I:145 | 14823 | xml/xslt | feuilles de style XSL pour le traitement de DocBook XML vers divers formats de sortie avec XSLT
`xsltproc` | V:15, I:73 | 83 | xslt | processeur en ligne de commandes XSLT (XML→ XML, HTML, texte brut, etc.)
`xmlto` | V:0.5, I:8.6 | 124 | xml/xslt | convertisseur XML-vers-tout avec XSLT
`fop` | V:0.7, I:8.1 | 281 | xml/xsl-fo | convertir les fichiers Docbook XML en PDF
`dblatex` | V:0.9, I:5.8 | 4636 | xml/xslt | convertir les fichiers Docbook en documents DVI, PostScript, PDF avec XSLT
`dbtoepub` | V:0.05, I:0.50 | 37 | xml/xslt | Convertisseur Docbook XML vers .epub

Comme XML est un sous-ensemble du Langage généralisé de balisage ( Standard Generalized Markup Language SGML »), il peut être traité par les nombreux outils disponibles pour SGML, comme Document Style Semantics and Specification Language (DSSSL).

Tableau 11.9. Liste des outils DSSSL

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`openjade` | V:1, I:22 | 1066 | dsssl | processeur DSSSL à la norme ISO/IEC 10179:1996 DSSSL (le plus récent)
`docbook-dsssl` | V:0.5, I:7.9 | 2594 | xml/dsssl | feuilles de style DSSSL pour le traitement des DocBook XML vers divers formats de sortie avec DSSSL
`docbook-utils` | V:0.4, I:5.6 | 287 | xml/dsssl | utilitaires pour les fichiers DocBook y compris la conversion avec DSSSL vers d’autres formats (HTML, RTF, PS, man, PDF) avec des commandes `docbook2*`

| Astuce
`yelp` de GNOME est parfois pratique pour lire les fichiers XML DocBook directement car il effectue un rendu propre sous X.

### 11.2.3. Extraire des données XML

Vous pouvez extraire des données HTML ou XML depuis d’autres formats en utilisant ce qui suit :

Tableau 11.10. Liste d’outils d’extraction de données XML

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`man2html` | V:0.1, I:1.3 | 142 | manpage→html | convertisseur de page de manuel en HTML (prise en charge de CGI)
`doclifter` | V:0.01, I:0.05 | 487 | troff→xml | convertisseur de troff vers DocBook XML
`texi2html` | V:0.2, I:3.0 | 1847 | texi→html | convertisseur de Texinfo vers HTML
`info2www` | V:0.9, I:1.5 | 76 | info→html | convertisseur depuis GNU info vers HTML (prise en charge de CGI)
`wv` | V:0.2, I:2.5 | 733 | MSWord→n’importe quoi | convertisseur de document depuis Microsoft Word vers HTML, LaTeX, etc.
`unrtf` | V:0.3, I:2.9 | 159 | rtf→html | convertisseur de documents de RTF vers HTML, etc
`wp2x` | V:0.01, I:0.09 | 200 | WordPerfect→tous | fichiers WordPerfect 5.0 et 5.1 vers TeX, LaTeX, troff, GML et HTML

### 11.2.4. Analyse statique (lint) de données XML

Vous pouvez convertir les fichiers HTML non-XML en XHTML qui est une instance XML correctement formatée. XHTML peut être traité par les outils XML.

La syntaxe des fichiers XML et la qualité des URL qu’ils contiennent peuvent être vérifiées.

Tableau 11.11. Liste d’outils d’impression élégante du XML

paquet | popularité | taille | fonction | description
--- | --- | --- | --- | ---
`libxml2-utils` | V:62, I:209 | 211 | xml↔html↔xhtml | outil XML en ligne de commandes xmllint(1) (vérification de la syntaxe, reformatage, décomposition…)
`tidy` | V:0.9, I:7.3 | 79 | xml↔html↔xhtml | vérificateur de syntaxe et reformateur HTML
`weblint-perl` | V:0.06, I:0.91 | 32 | lint | vérificateur de syntaxe et de style minimal pour HTML
`linklint` | V:0.06, I:0.47 | 343 | vérification lint | vérificateur rapide de liens et outils de maintenance de sites web

Une fois qu’un fichier XML propre est créé, vous pouvez utiliser la technologie XSLT pour extraire des données dans le contexte de balisage, etc.

## 11.3. Composition

Le programme UNIX troff, développé à l’origine par AT&T, peut être utilisé pour une composition simple. Il est habituellement utilisé pour créer des pages de manuel.

TeX, créé par Donald Knuth, est un outil très puissant de composition et c’est le standard de fait. LaTeX, écrit à l’origine par Leslie Lamport permet un accès de haut niveau à la puissance de TeX.

Tableau 11.12. Liste des outils de typographie

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`texlive` | V:1, I:28 | 55 | (La)TeX | système TeX pour la composition, l’aperçu et l’impression
`groff` | V:2, I:24 | 16514 | troff | système de formatage de texte GNU troff

### 11.3.1. Composition roff

Traditionnellement, roff est le système de traitement de texte principal sous UNIX. Consultez roff(7), groff(7), groff(1), grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm(7), et « `info groff` ».

Vous pouvez lire ou imprimer un bon didacticiel et document de référence sur la macro « `-me` » dans « `/usr/share/doc/groff/` » en installant le paquet `groff`.

| Astuce
« `groff -Tascii -me -` » produit une sortie en texte brut avec du code d’échappement ANSI. Si vous désirez obtenir une sortie semblable à une page de manuel avec de nombreux « ^H » et « _ », utilisez plutôt « `GROFF_NO_SGR=1 groff -Tascii -me -` ».

| Astuce
Pour supprimer les « ^H » et les « _ » d’un fichier texte issu de `groff`, filtrez le par « `col -b -x` ».

### 11.3.2. TeX/LaTeX

La distribution logicielle TeX Live offre un système TeX complet. Le métapaquet `texlive` fournit une bonne sélection de paquets de TeX Live qui devraient suffire aux tâches les plus courantes.

De nombreuses références sont disponibles pour TeX et LaTeX :

- The teTeX HOWTO : le guide local de teTeX sous Linux ;

- tex(1) ;

- latex(1) ;

- texdoc(1) ;

- texdoctk(1) ;

- « The TeXbook », par Donald E. Knuth, (Addison-Wesley) ;

- « LaTeX - A Document Preparation System », par Leslie Lamport, (Addison-Wesley) ;

- « The LaTeX Companion », par Goossens, Mittelbach, Samarin, (Addison-Wesley).

C’est l’environnement de composition typographique le plus puissant. De nombreux processeurs SGML l’utilisent comme processeur de texte en « backend ». Lyx qu’on trouvera dans le paquet `lyx` et GNU TeXmacs qui provient du paquet `texmacs` offrent un environnement d’édition agréable en mode WYSIWYG pour LaTeX bien que nombreux sont ceux qui choisissent d’utiliser Emacs et Vim pour éditer les sources.

De nombreuses ressources sont disponibles en ligne :

- The TEX Live Guide - TEX Live 2007 ( `/usr/share/doc/texlive-doc-base/english/texlive-en/live.html` ») (paquet `texlive-doc-base`) ;

- Un guide simple pour Latex et Lyx (« A Simple Guide to Latex/Lyx »)

- Traitement de texte avec LaTeX (« Word Processing Using LaTeX »)

Lorsque les documents deviennent plus importants, TeX cause parfois des erreurs. Vous devez augmenter la taille de l’espace dans « `/etc/texmf/texmf.cnf` » (ou, de manière plus rigoureuse, éditez « `/etc/texmf/texmf.d/95NonPath` » et lancez update-texmf(8)) afin de corriger cela.

| Note

Le fichier source au format TeX de « The TeXbook » est disponible sur le site www.ctan.org de l’archive de TeX. Ce fichier contient la plupart des macros nécessaires. J’ai entendu dire que vous pouvez traiter ce document avec tex(1) après avoir commenté les lignes 7 à 10 et ajouté « `\input manmac \proofmodefalse` ». Je recommande vivement l’achat de ce livre (et de tous les autres livres de Donald E. Knuth) plutôt que d’utiliser la version en ligne, mais la version source est un très bon exemple d’utilisation de TeX !

### 11.3.3. Imprimer convenablement une page de manuel

Vous pouvez imprimer convenablement une page de manuel en PostScript en utilisant l’une des commandes suivantes :

    $ man -Tps some_manpage | lpr

### 11.3.4. Créer une page de manuel

Bien que l’écriture d’une page de manuel (manpage) dans le format troff brut soit possible, il existe quelques paquets facilitant cette tâche :

Tableau 11.13. Liste de paquets facilitant la création de pages de manuel

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`docbook-to-man` | V:0.6, I:5.7 | 189 | SGML→manpage | macros de conversion de DocBook SGML vers roff man
`help2man` | V:0.6, I:6.3 | 542 | text→manpage | générateur automatique d’une pages de manuel depuis --help
`info2man` | V:0.01, I:0.19 | 134 | info→manpage | convertisseur depuis GNU info vers POD ou page de manuel
`txt2man` | V:0.06, I:0.64 | 112 | text→manpage | convertir du texte brut ASCII au format d’une page de manuel

## 11.4. Données imprimables

Sur un système Debian, les données imprimables sont définies dans le format PostScript. Common UNIX Printing System (CUPS) utilise Ghostscript en tant que programme de tramage « rasterisation » pour les imprimantes non-PostScript.

Les données imprimables peuvent aussi être exprimées au format PDF sur les systèmes Debian récents.

Les fichiers PDF peuvent être affichés et les entrées de formulaire peuvent être remplies en utilisant des outils d’affichage graphiques tels que Evince ou Okular (consulter la Section 7.4, « Applications graphiques ») et les navigateurs modernes tels que Chromium.

Les fichiers PDF peuvent être édités en utilisant quelques outils graphiques tels que LibreOffice, Scribus ou Inkscape (consulter la Section 11.6, « Outils de données graphiques »).

| Astuce
Les fichiers PDF peuvent être lus avec GIMP et convertis au format PNG en utilisant une résolution supérieure à 300 dpi. Le fichier produit peut être utilisé comme image d’arrière-plan pour LibreOffice pour produire une présentation agréable avec un minimum d’efforts.

### 11.4.1. Ghostscript

Le cœur de la manipulation des données imprimables est l’interpréteur Ghostscript PostScript (PS) qui génère une image tramée (« raster image »).

Tableau 11.14. Liste des interpréteurs Ghostscript PostScript

paquet | popularité | taille | description
--- | --- | --- | ---
`ghostscript` | V:142, I:563 | 177 | L’interpréteur GPLGhostscript PostScript/PDF
`ghostscript-x` | V:0, I:15 | 88 | interpréteur GPL Ghostscript PostScript/PDF - prise en charge de l’affichage X
`libpoppler156` | V:9, I:16 | 4989 | bibliothèque de rendu PDF dérivée du visualisateur PDF xpdf
`libpoppler-glib8t64` | V:68, I:297 | 576 | bibliothèque de rendu PDF (bibliothèque partagée basée sur GLib)
`poppler-data` | V:150, I:585 | 13086 | CMaps pour PDF la bibliothèque de rendu (pour la prise en charge de CJK : Adobe-*)

| Astuce
« `gs -h` » permet d’afficher la configuration de Ghostscript.

### 11.4.2. Fusionner deux fichiers PS ou PDF

Vous pouvez fusionner deux fichiers PostScript (PS) ou Portable Document Format (PDF) en utilisant gs(1) de Ghostscript.

    $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps
    $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf

| Note
Le format PDF qui est un format imprimable multi-plateformes largement utilisé, est essentiellement un format PS compressé avec quelques fonctionnalités et extensions supplémentaires .

| Astuce
En ligne de commande, psmerge(1) et d’autres commandes du paquet `psutils` sont utiles pour manipuler des documents PostScript. pdftk(1) issu du paquet `pdftk` est aussi utile pour la manipulation de documents PDF.

### 11.4.3. Utilitaires pour les données imprimables

Les paquets suivants fournissant des utilitaires pour les données imprimables ont attiré mon attention :

Tableau 11.15. Liste des utilitaires pour les données imprimables

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`poppler-utils` | V:106, I:474 | 756 | pdf→ps,text,… | utilitaires PDF : `pdftops`, `pdfinfo`, `pdfimages`, `pdftotext`, `pdffonts`
`psutils` | V:4, I:51 | 34 | ps→ps | outils de conversion de document PostScript
`poster` | V:0.1, I:1.7 | 57 | ps→ps | créer des posters de grande dimension à partir de pages PostScript
`enscript` | V:1, I:11 | 2138 | text→ps, html, rtf | convertir du text ASCII en PostScript, HTML, RTF ou Pretty-Print
`a2ps` | V:0.7, I:7.1 | 4109 | text→ps | Convertisseur de « N’importe quoi vers PostScript » et imprimeur élégant
`pdftk` | V:1, I:22 | 28 | pdf→pdf | outil de conversion de documents PDF : `pdftk`
`html2ps` | V:0.1, I:1.7 | 256 | html→ps | convertisseur de HTML vers PostScript
`gnuhtml2latex` | V:0.05, I:0.58 | 26 | html→latex | convertisseur de html vers latex
`latex2rtf` | V:0.1, I:2.1 | 495 | latex→rtf | convertir des documents de LaTeX en RTF qui peuvent être lus par MS Word
`ps2eps` | V:2, I:33 | 95 | ps→eps | convertisseur de PostScript vers EPS (PostScript encapsulé)
`e2ps` | V:0.01, I:0.11 | 104 | text→ps | convertisseur de texte vers PostScript avec la prise en charge du codage japonais
`impose+` | V:0.1, I:1.5 | 118 | ps→ps | Utilitaires PostScript
`trueprint` | V:0.01, I:0.09 | 148 | text→ps | imprime élégamment de nombreux codes source (C, C++, Java, Pascal, Perl, Pike, Sh, et Verilog) vers PostScript. (langage C)
`pdf2svg` | V:0.2, I:3.0 | 33 | pdf→svg | convertisseur de PDF vers le format Scalable vector graphics (« SVG »)
`pdftoipe` | V:0.01, I:0.46 | 70 | pdf→ipe | convertisseur de PDF vers le format IPE d’XML

### 11.4.4. Imprimer avec CUPS

Les commandes lp(1) et lpr(1) proposées par le Common UNIX Printing System (CUPS) fournissent toutes deux des options de personnalisation des données imprimables.

Vous pouvez imprimer 3 copies d’un fichier en utilisant une des commandes suivantes :

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

Vous pouvez personnaliser davantage le fonctionnement de l’imprimante en utilisant des options d’impression telles que « `-o number-up=2` », « `-o page-set=even` », « `-o page-set=odd` », « `-o scaling=200` », « `-o natural-scaling=200` », etc., documentées sur Impression et options en ligne de commande.

## 11.5. La conversion de données de courrier électronique

Les paquets suivants, destinés à la conversion de données de courrier électronique, ont attiré mon attention :

Tableau 11.16. Liste de paquets facilitant la conversion de données de courrier électronique

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`sharutils` | V:3, I:28 | 1436 | mail | shar(1), unshar(1), uuencode(1), uudecode(1)
`mpack` | V:0.9, I:8.0 | 109 | MIME | encoder et décoder des messages MIME : mpack(1) et munpack(1)
`tnef` | V:0.4, I:4.1 | 103 | ms-tnef | dépaqueter des attachements MIME de type « application/ms-tnef » qui est un format propre à Microsoft
`uudeview` | V:0.2, I:1.8 | 105 | mail | encodeur et décodeur pour les formats suivants : uuencode, xxencode, BASE64, quoted printable et BinHex

| Astuce
Le serveur IMAP4 (Internet Message Access Protocol), version 4, peut être utilisé pour récupérer des courriels depuis des systèmes de courriels propriétaires si le logiciel de courriel client peut aussi être configuré pour utiliser IMAP4.

### 11.5.1. Bases concernant les données de courrier électronique

Les données (SMTP) de courrier électronique doivent être limitées à des séries de données de 7 bits. Les données binaires et les données textuelles sur 8 bits sont codées dans un format sur 7 bits avec Multipurpose Internet Mail Extensions (MIME) et la sélection du jeu de caractères (consultez le Tableau 11.2, « Liste de valeurs de codage et leur utilisation »).

Le format standard d’enregistrement du courrier électronique est « mbox » selon la RFC2822 (RFC822 mise à jour). Consultez mbox(5) (fourni par le paquet `mutt`.

Pour les langues européennes, on utilise habituellement pour le courriel « `Content-Transfer-Encoding: quoted-printable` » avec le jeu de caractères ISO-8859-1 car il n’y a pas beaucoup de caractères de 8 bits. Si le texte européen est codé en UTF-8, on préférera utiliser « `Content-Transfer-Encoding: quoted-printable` » car ce sont essentiellement des données sur 7 bits.

Pour le japonais, « `Content-Type: text/plain; charset=ISO-2022-JP` » est habituellement utilisé pour le courriel afin de conserver le texte sur 7 bits. Mais les anciens systèmes Microsoft peuvent envoyer des données de courriel en Shift-JIS sans le déclarer proprement. Si le texte japonais est codé en UTF-8, on utilisera de préférence Base64 car il comporte de nombreuses données sur 8 bits. La situation des autres langues asiatiques est similaire.

| Note
Pour les données de courriel non-UNIX accessibles par un logiciel client ne venant pas de Debian qui est capable de dialoguer avec le serveur IMAP4, vous pourrez peut-être les récupérer en utilisant votre propre serveur IMAP4 ).

| Note
Si vous utilisez d’autres formats d’enregistrement de courriel, les mettre dans le format mbox est une bonne première étape. Un programme client souple comme mutt(1) peut être pratique pour le faire.

Vous pouvez éclater le contenu d’une boîte à lettre en messages séparés en utilisant procmail(1) et formail(1).

Chaque message de courrier électronique peut être dépaqueté en utilisant munpack(1) qui provient du paquet `mpack` (ou d’autres outils spécialisés) afin d’en obtenir le contenu codé en MIME.

## 11.6. Outils de données graphiques

Bien que des programmes ayant une interface graphique comme gimp(1) soient très puissants, des outils en ligne de commandes comme imagemagick(1) sont assez utiles pour la manipulation automatique d’images au moyen de scripts.

Le format standard de fait pour les images d’appareils photo numériques est Exchangeable Image File Format (EXIF) qui est composé d’une image au format JPEG à laquelle sont ajoutées des balises de métadonnées. Il peut contenir des informations telles que la date, l’heure ou les paramètres de l’appareil photo.

Le brevet de compression de données sans perte Lempel-Ziv-Welch (LZW) est arrivé en fin de validité. Les utilitaires du format Graphics Interchange Format (GIF) qui utilise la méthode de compression LZW peuvent être maintenant librement disponibles sur un système Debian.

| Astuce
Tous les appareils photo numériques ou les scanners ayant un support d’enregistrement amovible fonctionnent sous Linux avec des lecteurs « USB storage » s’ils sont conformes à la Design rule for Camera Filesystem et utilisent un système de fichiers FAT. Consultez Section 10.1.7, « Périphériques d’enregistrement amovibles ».

### 11.6.1. Outils de données graphiques (métapaquet)

Les métapaquets suivants sont des bons points de départ pour rechercher des outils pour des données graphiques en utilisant aptitude(8). « Packages overview for Debian PhotoTools Maintainers » peut être un autre point de départ.

Tableau 11.17. Liste d’outils pour les données graphiques (métapaquet)

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`education-graphics` | I:0.35 | 25 | svg, jpeg, … | métapaquet pour l’apprentissage des arts graphiques et picturaux
`open-font-design-toolkit` | I:0.04 | 9 | ttf, ps, … | métapaquet pour la conception de fontes libres

| Astuce
Recherchez d’autres outils pour les images en utilisant l’expression rationnelle « `~Gworks-with::image` » dans aptitude(8) (consultez Section 2.2.6, « Options de la méthode de recherche avec aptitude »).

### 11.6.2. Outils de données graphiques (interface graphique)

Les paquets suivants contenant des outils graphiques pour la conversion, l’édition et l’organisation de données graphiques ont attiré mon attention.

Tableau 11.18. Liste d’outils pour les données graphiques (interfaces graphiques)

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`gimp` | V:44, I:216 | 32791 | image (bitmap) | programme GNU de manipulation d’images ( GNU Image Manipulation Program »)
`xsane` | V:9, I:129 | 1512 | image (bitmap) | interface graphique X11 de SANE (Scanner Access Now Easy) basée sur GTK
`scribus` | V:1, I:13 | 32423 | ps/pdf/SVG/… | éditeur DTP Scribus
`libreoffice-draw` | V:82, I:418 | 10995 | image (vectorielle) | suite de bureautique LibreOffice - dessin
`inkscape` | V:12, I:78 | 112538 | image (vectorielle) | éditeur SVG (Scalable Vector Graphics)
`dia` | V:1, I:17 | 3802 | image (vectorielle) | éditeur de diagrammes (Gtk)
`xfig` | V:0.6, I:8.9 | 7951 | image (vectorielle) | outil de génération interactive de figures sous X11
`gocr` | V:0.5, I:3.9 | 549 | image→texte | logiciel OCR libre
`eog` | V:26, I:143 | 10524 | image (Exif) | visionneur d’images « Eye of Gnome » (l’œil de Gnome)
`gthumb` | V:3, I:12 | 5162 | image (Exif) | visionneur et gestionnaire de photos (GNOME)
`geeqie` | V:3, I:11 | 2903 | image (Exif) | visionneur d’images utilisant GTK
`shotwell` | V:14, I:246 | 6334 | image (Exif) | gestionnaire de photos numériques (GNOME)
`gwenview` | V:40, I:115 | 6000 | image (Exif) | visionneur d’images (KDE)
`kamera` | I:114 | 992 | image (Exif) | gestion des appareils photo numériques dans les applications KDE
`digikam` | V:1.5, I:8.3 | 324 | image (Exif) | application de gestion de photos numériques pour KDE
`darktable` | V:4, I:11 | 35876 | image (Exif) | table lumineuse et chambre noire virtuelles pour photographes
`hugin` | V:0.5, I:5.6 | 6476 | image (Exif) | assembleur de photos pour panorama
`librecad` | V:1, I:14 | 9164 | DXF, ... | éditeur de données 2D pour la CAD
`freecad` | V:1, I:21 | 112 | DXF, ... | éditeur de données 3D pour la CAD
`blender` | V:2, I:20 | 92911 | blend, TIFF, VRML, … | éditeur de contenu 3D pour l’animation, etc.
`mm3d` | V:0.02, I:0.21 | 4123 | ms3d, obj, dxf, … | éditeur de modèles 3D basé sur OpenGL
`fontforge` | V:0.6, I:5.6 | 4054 | ttf, ps, … | éditeur de fontes pour les fontes PS, TrueType et OpenType
`xgridfit` | V:0.01, I:0.08 | 878 | ttf | programme pour l’ajustement à la grille et l'optimisation de rendu des fontes TrueType

### 11.6.3. Outils de données graphiques (ligne de commande)

Les paquets suivants contenant des outils en ligne de commande pour la conversion, l’édition et l’organisation de données graphiques ont attiré mon attention.

Tableau 11.19. Liste d’outils pour les données graphiques (ligne de commande)

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`imagemagick` | V:9, I:278 | 79 | image (bitmap) | programmes de manipulation d’images
`graphicsmagick` | V:1.0, I:8.6 | 5816 | image (bitmap) | programmes de manipulation d’images (dérivés d’`imagemagick`)
`netpbm` | V:27, I:288 | 8435 | image (bitmap) | outils de conversion graphique
`libheif-examples` | V:0.3, I:3.5 | 438 | heif→jpeg(bitmap) | conversion de High Efficiency Image File Format (HEIF) aux formats JPEG, PNG ou Y4M avec la commande heif-convert(1)
`icoutils` | V:3, I:34 | 221 | png↔ico (bitmap) | conversion des icônes et curseurs de MS Windows de et vers des formats PNG (favicon.ico)
`pstoedit` | V:2, I:39 | 1075 | ps/pdf→image (vectorielle) | convertisseur de fichiers PostScript et PDF en graphiques vectoriels éditables (SVG)
`libwmf-bin` | V:5, I:83 | 149 | Windows/image (vectorielle) | outils de conversion de metafile de Windows (données graphiques vectorielles)
`fig2sxd` | V:0.03, I:0.18 | 158 | fig→sxd (vectorielle) | conversion de fichiers XFig dans le format OpenOffice.org Draw
`unpaper` | V:2, I:16 | 417 | image→image | outil de post-traitement pour des pages numérisées pour OCR
`tesseract-ocr` | V:8, I:33 | 2209 | image→texte | logiciel OCR libre basé sur le moteur commercial OCR de HP
`tesseract-ocr-eng` | V:8, I:33 | 4032 | image→texte | moteur de données OCR : fichier de langue de tesseract-ocr pour le texte en anglais
`ocrad` | V:0.3, I:2.4 | 608 | image→texte | logiciel OCR libre
`exif` | V:3, I:51 | 335 | image (Exif) | utilitaire en ligne de commandes pour afficher les informations EXIF contenues dans les fichiers JPEG
`exiv2` | V:2, I:19 | 429 | image (Exif) | outil pour manipuler les méta-données EXIF/IPTC
`exiftran` | V:1, I:11 | 81 | image (Exif) | transformer les images JPEG des appareils photo numériques
`exiftags` | V:0.3, I:2.7 | 309 | image (Exif) | utilitaire pour lire les balises Exif depuis un fichier JPEG d’appareil photo numérique
`exifprobe` | V:0.2, I:2.1 | 506 | image (Exif) | lire les métadonnées des images numériques
`dcraw` | V:0.8, I:7.3 | 428 | image (Raw)→ppm | décoder les images brutes (« raw ») des appareils photo numériques
`findimagedupes` | V:0.1, I:1.1 | 75 | image→empreinte | rechercher des images visuellement similaires ou dupliquées
`ale` | V:0.02, I:0.16 | 850 | image→image | assembler des images pour en améliorer la fidélité ou créer des mosaïques
`imageindex` | V:0.2, I:1.2 | 143 | image (Exif)→html | créer des galeries HTML statiques depuis des images
`outguess` | V:0.11, I:0.99 | 230 | jpeg,png | outil universel Stéganographique
`jpegoptim` | V:0.6, I:6.0 | 59 | jpeg | optimisation de fichiers JPEG
`optipng` | V:2, I:40 | 187 | png | optimisation de fichiers PNG, compression sans perte
`pngquant` | V:1, I:10 | 62 | png | optimisation de fichiers PNG, compression avec pertes

## 11.7. Diverses conversions de données

Il y a de nombreux programmes pour convertir les données. Les paquets suivants ont attiré mon attention en utilisant l’expression rationnelle « `~Guse::converting` » avec aptitude(8) (consultez Section 2.2.6, « Options de la méthode de recherche avec aptitude »).

Tableau 11.20. Liste d’outils divers de conversion de données

paquet | popularité | taille | mot clé | description
--- | --- | --- | --- | ---
`alien` | V:1, I:13 | 150 | rpm/tgz→deb | convertisseur de paquets étrangers vers des paquets Debian
`freepwing` | V:0.00, I:0.02 | 447 | EB→EPWING | convertisseur de « Electric Book » (Livre électronique - populaire au Japon) en un simple format JIS X 4081 (un sous-ensemble de EPWING V1)
`calibre` | V:7, I:24 | 65193 | tout→EPUB | convertisseur de livre numérique et gestion de bibliothèque

Vous pouvez aussi extraire des données depuis le format RPM avec ce qui suit :

    $ rpm2cpio file.src.rpm | cpio --extract

Chapitre 10. Gestion des données |  | Chapitre 12. Programmation