Capitolo 11. Conversione di dati

# Capitolo 11. Conversione di dati

In questo capitolo sono descritti strumenti e trucchi per convertire tra diversi formati di dati in un sistema Debian.

Gli strumenti standard sono eccellenti, ma il supporto per i formati proprietari per i dati è limitato.

## 11.1. Strumenti di conversione di dati testuali

Quelli che seguono sono pacchetti per la conversione dei dati testuali che hanno attirato la mia attenzione.

Tabella 11.1. Elenco di strumenti di conversione di dati testuali

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`libc6` | V:942, I:1000 | 5481 | set di caratteri | convertitore della codifica del testo tra localizzazioni usando iconv(1) (fondamentale)
`recode` | V:2, I:13 | 528 | set caratteri+carattere fine riga | convertitore della codifica del testo tra localizzazioni (versatile, maggior numero di alias e funzionalità)
`konwert` | V:2, I:42 | 137 | set di caratteri | convertitore della codifica tra localizzazioni (elegante)
`nkf` | V:0.4, I:8.5 | 360 | set di caratteri | traduttore del set di caratteri per il giapponese
`tcs` | V:0.01, I:0.14 | 518 | set di caratteri | traduttore del set di caratteri
`unaccent` | V:0.03, I:0.28 | 35 | set di caratteri | sostituisce le lettere accentate con le equivalenti senza accento
`tofrodos` | V:1, I:12 | 50 | carattere fine riga | convertitore del formato di testo tra DOS e Unix: fromdos(1) e todos(1)
`macutils` | V:0.04, I:0.43 | 319 | carattere fine riga | convertitore del formato di testo tra Macintosh e Unix: frommac(1) e tomac(1)

### 11.1.1. Convertire un file di testo con iconv

| Suggerimento
iconv(1) viene fornito come parte del pacchetto `libc6` ed è sempre disponibile praticamente su tutti i sistemi in stile Unix, per fare la conversione della codifica dei caratteri.

Si può convertire la codifica di un file di testo con iconv(1) nel modo seguente.

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

Nel trovare corrispondenze con i valori delle codifiche non viene tenuto conto delle lettere maiuscole o minuscole e vengono ignorati i caratteri "`-`" e "`_`". Si possono controllare le codifiche supportate con il comando "`iconv -l`".

Tabella 11.2. Elenco dei valori delle codifiche e loro uso

valore della codifica | uso
--- | ---
ASCII | American Standard Code for Information Interchange, codifica americana standard per lo scambio di informazioni, codice a 7 bit senza caratteri accentati
UTF-8 | attuale standard multilingua per tutti i sistemi operativi moderni
ISO-8859-1 | vecchio standard per le lingue europee occidentali, ASCII + caratteri accentati
ISO-8859-2 | vecchio standard per le lingue europee orientali, ASCII + caratteri accentati
ISO-8859-15 | vecchio standard per le lingue europee occidentali, ISO-8859-1 con simbolo dell'euro
CP850 | code page 850, caratteri Microsoft DOS con caratteri grafici per le lingue europee occidentali, variante di ISO-8859-1
CP932 | code page 932, variante in stile Microsoft Windows di Shift-JIS per il giapponese
CP936 | code page 936, variante in stile Microsoft Windows di GB2312, GBK o GB18030 per il cinese semplificato
CP949 | code page 949, variante in stile Microsoft Windows di EUC-KR o Unified Hangul Code per il coreano
CP950 | code page 950, variante in stile Microsoft Windows di Big5 per il cinese tradizionale
CP1251 | code page 1251, codifica in stile Microsoft Windows per l'alfabeto cirillico
CP1252 | code page 1252, variante in stile Microsoft Windows di ISO-8859-15 per le lingue europee occidentali
KOI8-R | vecchio standard UNIX russo per l'alfabeto cirillico
ISO-2022-JP | codifica standard per la posta elettronica in giapponese che usa solo codici a 7 bit
eucJP | vecchio standard UNIX giapponese con codici a 8 bit completamente diverso da Shift-JIS
Shift-JIS | standard JIS X 0208 Appendix 1 per il giapponese (vedere CP932)

| Nota
Alcune codifiche sono gestite solo per la conversione dei dati e non sono utilizzate come valori di localizzazione (Sezione 8.1, «La localizzazione»).

Per i set di caratteri contenuti in un singolo byte, come i set di caratteri ASCII e ISO-8859, la codifica di carattere è quasi la stessa cosa del set di caratteri.

Per i set di caratteri con molti caratteri, come JIS X 0213 per il giapponese o Universal Character Set (UCS, Unicode, ISO-10646-1) per praticamente tutte le lingue, esistono molti schemi di codifica per inserirli nella sequenza dei byte dati.

- EUC e ISO/IEC 2022 (chiamato anche JIS X 0202) per il giapponese

- UTF-8, UTF-16/UCS-2 e UTF-32/UCS-4 per Unicode

In questi casi c'è una netta differenza tra il set di caratteri e la codifica di caratteri.

Il termine code page è usato come sinonimo di tabella di codifica dei caratteri per alcune tabelle specifiche di produttori.

| Nota

Notare che la maggior parte dei sistemi di codifica condividono con ASCII gli stessi codici per i caratteri a 7 bit. Ci sono però alcune eccezioni. Se si stanno convertendo dati di vecchi programmi C o URL in giapponese dal formato di codifica volgarmente chiamato Shift-JIS in formato UTF-8, usare "`CP932`" come nome di codifica invece di "`shift-JIS`" per ottenere i risultati attesi: `0x5C` → "`\`" e `0x7E` → "`~`". Altrimenti questi vengono convertiti nei caratteri sbagliati.

| Suggerimento
Si può anche usare recode(1) che offre più della semplice combinazione delle funzionalità di iconv(1), fromdos(1), todos(1), frommac(1) e tomac(1). Per maggiori informazioni vedere "`info recode`".

### 11.1.2. Controllare se un file è in UTF-8 con iconv

Si può controllare se un file di testo è nella codifica UTF-8 usando iconv(1) nel modo seguente.

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

| Suggerimento
Usare l'opzione "`--verbose`" nell'esempio precedente per trovare il primo carattere non UTF-8.

### 11.1.3. Convertire nomi di file con iconv

Ecco uno script d'esempio per convertire in una directory la codifica dei nomi di file dai nomi creati in un vecchio sistema operativo a quelli UTF-8 moderni.

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

La variabile "`$ENCDN`" specifica la codifica originale usata per i nomi di file nei sistemi operativi più vecchi come in Tabella 11.2, «Elenco dei valori delle codifiche e loro uso».

Per scenari più complessi, montare, usando come opzione di mount(8) la codifica appropriata (vedere Sezione 8.1.3, «Codifica per i nomi di file»), il file system (ad esempio una partizione in un disco fisso) contenente tali nomi di file e copiare usando il comando "`cp-a`" il suo intero contenuto in un altro file system montato come UTF-8.

### 11.1.4. Conversione del carattere di fine riga

Il formato dei file di testo e specificatamente il codice EOL (End of line, fine riga) è dipendente dalla piattaforma.

Tabella 11.3. Elenco di stili per EOL per differenti piattaforme

piattaforma | codice EOL | carattere di controllo | decimale | esadecimale
--- | --- | --- | --- | ---
Debian (unix) | LF | `^J` | 10 | 0A
MSDOS e Windows | CR-LF | `^M^J` | 13 10 | 0D 0A
Macintosh di Apple | CR | `^M` | 13 | 0D

I programmi di conversione del formato di EOL, fromdos(1), todos(1), frommac(1) e tomac(1), sono piuttosto comodi. Anche recode(1) è utile.

| Nota
Alcuni dati nel sistema Debian, come i dati della pagina wiki per il pacchetto `python-moinmoin`, usano CR-LF in stile MSDOS come codice EOL. Perciò la regola sopra descritta è solamente una regola generale.

| Nota
La maggior parte degli editor (es. `vim`, `emacs`, `gedit`, …) può gestire file con EOL in stile MSDOS in modo trasparente.

| Suggerimento
È meglio usare "`sed -e '/\r$/!s/$/\r/'`" invece di todos(1) quando si desidere unificare lo stile EOL allo stile MSDOS da uno stile misto MSDOS e Unix (ad esempio dopo la fusione di 2 file in stile MSDOS con diff3(1)). Questo perché `todos` aggiunge CR a tutte le righe.

### 11.1.5. Conversione di tabulazioni

Esistono alcuni programmi popolari specializzati nella conversione dei codici di tabulazione.

Tabella 11.4. Elenco di comandi di conversione di TAB dai pacchetti `bsdmainutils` e `coreutils`

funzione | `bsdmainutils` | `coreutils`
--- | --- | ---
espande le tabulazioni in spazi | "`col -x`" | `expand`
de-espande gli spazi in tabulazioni | "`col -h`" | `unexpand`

indent(1) nel pacchetto `indent` riformatta completamente gli spazi bianchi nei programmi C.

Anche programmi editor come `vim` ed `emacs` possono essere usati per la conversione di TAB. Per esempio con `vim`, è possibile espandere i TAB con la sequenza di comandi "`:set expandtab`" e "`:%retab`". Si può annullare questa azione con la sequenza di comandi "`:set noexpandtab`" e "`:%retab!`".

### 11.1.6. Editor con auto-conversione

Gli editor moderni intelligenti come il programma`vim` sono piuttosto bravi e gestiscono bene qualsiasi sistema di codifica e formato di file. Per una migliore compatibilità questi editor andrebbero usati con la localizzazione UTF-8 in console con capacità UTF-8.

Un vecchio file di testo Unix in lingua europea occidentale, "`u-file.txt`" salvato nella codifica latin1 (iso-8859-1) può essere modificato con `vim` semplicemente con il comando seguente.

    $ vim u-file.txt

Ciò è reso possibile dal fatto che il meccanismo di rivelazione automatica della codifica dei file di `vim` presuppone come prima cosa che la codifica sia UTF-8 e, se ciò fallisce, presuppone che sia latin1.

Un vecchio file di testo Unix in lingua polacca, "`pu-file.txt`" salvato nella codifica latin1 (iso-8859-1) può essere modificato con `vim` con il comando seguente.

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

Un vecchio file di testo Unix in giapponese, "`ju-file.txt`" salvato nella codifica eucJP può essere modificato con `vim` con il comando seguente.

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

Un vecchio file di testo MS-Windows in giapponese, "`jw-file.txt`" salvato nella cosiddetta codifica shift-JIS (più precisamente CP932) può essere modificato con `vim` con il comando seguente.

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

Quando un file viene aperto con le opzioni "`++enc`" e "`++ff`", l'uso di "`:w`" nella riga di comando di Vim lo salva nel formato originale sovrascrivendo il file originale. Si può anche specificare nella riga di comando di Vim il formato e il nome con cui salvare il file, ad esempio "`:w ++enc=utf8 nuovo.txt`".

Fare riferimento a mbyte.txt per il "supporto di testi multi-byte" nell'aiuto in linea di `vim` e a Tabella 11.2, «Elenco dei valori delle codifiche e loro uso» per i valori delle localizzazione usati con "`++enc`".

La famiglia di programmi `emacs` può svolgere funzioni equivalenti.

### 11.1.7. Estrazione del testo puro

Il comando seguente legge una pagina web mettendola in un file di testo. È molto utile quando si copiano configurazioni dal Web o per applicare strumenti di testo base Unix come grep(1) sulla pagina web.

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

In modo analogo, si possono estrarre dati in testo puro da altri formati con gli strumenti seguenti.

Tabella 11.5. Elenco di strumenti per estrarre dati in testo puro

pacchetto | popcon | dimensione | parola chiave | funzione
--- | --- | --- | --- | ---
`w3m` | V:10, I:134 | 2853 | html→testo puro | conversione da HTML a testo semplice con il comando "`w3m -dump`"
`html2text` | V:3, I:68 | 298 | html→testo puro | convertitore avanzato da HTML a testo semplice (ISO 8859-1)
`lynx` | V:29, I:448 | 2031 | html→testo puro | conversione da HTML a testo semplice con il comando "`lynx -dump`"
`elinks` | V:3, I:16 | 1791 | html→testo puro | conversione da HTML a testo semplice con il comando "`elinks -dump`"
`links` | V:2, I:21 | 2321 | html→testo puro | conversione da HTML a testo semplice con il comando "`links -dump`"
`links2` | V:0.8, I:8.6 | 5466 | html→testo puro | conversione da HTML a testo semplice con il comando "`links2 -dump`"
`catdoc` | V:15, I:170 | 682 | MSWord→testo puro, TeX | converte file MSWord in testo puro o TeX
`antiword` | V:0.9, I:6.7 | 587 | MSWord→testo puro, ps | converte file MSWord in testo puro o ps
`unhtml` | V:0.05, I:0.49 | 40 | html→testo puro | rimuove i tag marcatori da file HTML
`odt2txt` | V:1, I:20 | 60 | odt→testo puro | converte da OpenDocument Text in testo puro

### 11.1.8. Evidenziare e formattare dati in puro testo

È possibile evidenziare e formattare dati in testo puro usando gli strumenti seguenti.

Tabella 11.6. Elenco di strumenti per evidenziare dati in testo puro

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`vim-runtime` | V:18, I:360 | 38849 | evidenziare | MACRO Vim per convertire codice sorgente in HTML con "`:source $VIMRUNTIME/syntax/html.vim`"
`cxref` | V:0.01, I:0.23 | 1191 | c→html | convertitore per programmi C in latex e HTML (linguaggio C)
`src2tex` | V:0.02, I:0.16 | 1799 | evidenziare | converte molti codici sorgenti in TeX (linguaggio C)
`source-highlight` | V:0.4, I:3.1 | 2131 | evidenziare | converte molti codici sorgenti in file HTML, XHTML, LaTeX, Texinfo, sequenze di escape per colori ANSI e DocBook con evidenziazione (C++)
`highlight` | V:0.4, I:3.1 | 1412 | evidenziare | converte molti codici sorgenti in file HTML, XHTML, RTF, LaTeX, TeX o XSL-FO con evidenziazione (C++)
`grc` | V:0.9, I:5.9 | 208 | testo→colori | colorazione generica per tutto (Python)
`pandoc` | V:10, I:46 | 209102 | testo→tutto | convertitore universale di marcatori (Haskel)
`python3-docutils` | V:11, I:50 | 2013 | testo→tutto | formattatore di documenti ReStructured Text in XML (Python)
`markdown` | V:0.4, I:6.1 | 56 | testo→html | formattatore Markdown di documenti di testo in (X)HTML (Perl)
`asciidoctor` | V:0.4, I:5.0 | 101 | testo→tutto | formattatore AsciiDoc di documenti di testo in XML/HTML (Ruby)
`python3-sphinx` | V:6, I:25 | 3234 | testo→tutto | sistema di pubblicazione di documenti basati su ReStructured Text (Python)
`hugo` | V:0.8, I:5.3 | 66736 | testo→html | sistema di pubblicazione di siti statici basato su Markdown (Go)

## 11.2. Dati XML

XML (Extensible Markup Language) è un linguaggio a marcatori per documenti contenenti informazioni strutturate.

Vedere informazioni introduttive su XML.COM.

- "Cosa è XML?"

- "Cosa è XSLT?"

- "Cosa è XSL-FO?"

- "Cosa è XLink?"

### 11.2.1. Suggerimenti base per XML

I testi XML hanno un aspetto simile all'HTML. Permettono di gestire formati di output multipli per un documento. Un facile sistema per XML è il pacchetto `docbook-xsl` che è stato usato per questo documento.

Ogni file XML inizia con una dichiarazione XML standard come la seguente.

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

La sintassi di base per un elemento XML usa un marcatore come il seguente.

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

Gli elementi XML senza contenuto sono indicati nella seguente forma breve.

    <name attribute="value" />

La parte "`attributo="valore"`" negli esempi precedenti è opzionale.

In XML una sezione di commento è marcata nel modo seguente.

    <!-- comment -->

A parte l'aggiunta dei marcatori, XML richiede solo una minima conversione dei contenuti usando entità predefinite per i caratteri seguenti.

Tabella 11.7. Elenco di entità predefinite per XML

entità predefinita | carattere in cui convertire
--- | ---
`&quot;` | `"` : virgolette
`&apos;` | `'` : apostrofo
`&lt;` | `<` : minore-di
`&gt;` | `>` : maggiore-di
`&amp;` | `&` : e-commerciale

| Attenzione
"`<`" e "`&`" non possono essere usati in attributi o elementi.

| Nota
Quando vengono usate entità definite in stile SGML, ad esempio "`&qualche-tag;`", la prima definizione prevale su tutte le altre. La definizione di entità è espressa nella forma "`<!ENTITY qualche-tag "valore entità">`".

| Nota
Fintanto che i marcatori XML sono usati in modo coerente con un certo set dei nomi di tag (qualche dato usato come contenuto o valore di attributo), la conversione in un altro XML è un compito banale usando XSLT (Extensible Stylesheet Language Trasformations.

### 11.2.2. Elaborazione XML

Sono disponibili molti strumenti per elaborare file XML, come l'XSL (Extensible Stylesheet Language).

Fondamentalmente, una volta creato un file XML ben formato, lo si può convertire in qualsiasi formato usando XSLT (Extensible Stylesheet Language Transformation).

XSL-FO (Extensible Stylesheet Language for Formatting Object), linguaggio per fogli di stile estensibile per la formattazione di oggetti, è pensato per essere una soluzione per la formattazione. Il pacchetto `fop` è una novità nell'archivio Debian `main` a causa delle sue dipendenze dal linguaggio di programmazione Java. Perciò il codice LaTeX è solitamente generato dall'XML usando XSLT ed il sistema LaTeX viene usato per creare file adatti alla stampa come DVI, PostScript e PDF.

Tabella 11.8. Elenco di strumenti XML

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`docbook-xml` | V:15, I:404 | 2126 | xml | DTD (Document Type Definition) XML per DocBook
`docbook-xsl` | V:14, I:145 | 14823 | xml/xslt | fogli di stile XSL per elaborare XML DocBook con XSLT in vari formati di output
`xsltproc` | V:15, I:72 | 83 | xslt | elaboratore a riga di comando XSLT (XML→ XML, HTML, testo semplice, ecc.)
`xmlto` | V:0.5, I:8.8 | 124 | xml/xslt | convertitore da-XML-a-tutto con XSLT
`fop` | V:0.6, I:7.6 | 281 | xml/xsl-fo | converte file XML DocBook in PDF
`dblatex` | V:0.9, I:5.9 | 4636 | xml/xslt | converte file DocBook con XSLT in documenti DVI, PostScript, PDF
`dbtoepub` | V:0.05, I:0.58 | 37 | xml/xslt | convertitore da XML DocBook a .epub

Dato che XML è un sottoinsieme di SGML (Standard Generalized Markup Language), può essere elaborato dagli strumenti completi disponibili per SGML, come DSSSL (Document Style Semantics and Specification Language).

Tabella 11.9. Elenco di strumenti DSSSL

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`openjade` | V:1, I:22 | 1066 | dsssl | elaboratore standard DSSSL ISO/IEC 10179:1996 (più recente)
`docbook-dsssl` | V:0.5, I:8.0 | 2594 | xml/dsssl | fogli di stile DSSSL per elaborare XML DocBook con DSSSL in vari formati di output
`docbook-utils` | V:0.3, I:5.7 | 287 | xml/dsssl | utilità per file DocBook, inclusa la conversione in altri formati (HTML, RTF, PS, man, PDF) con comandi `docbook2*` con DSSSL

| Suggerimento
A volte `yelp` di GNOME è utile per leggere file XML DocBook direttamente dato che li visualizza in modo decente in X.

### 11.2.3. Estrazione di dati XML

Si possono esstrarre dati HTML o XML da altri formati usando gli strumenti seguenti.

Tabella 11.10. Elenco di strumenti di estrazione di dati XML

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`man2html` | V:0.1, I:1.3 | 142 | pagine man→html | convertitore da pagine man a HTML (supporto CGI)
`doclifter` | I:0.04 | 487 | troff→xml | convertitore da troff a XML DocBook
`texi2html` | V:0.2, I:2.9 | 1847 | texi→html | convertitore da texinfo a HTML
`info2www` | V:0.9, I:1.5 | 76 | info→html | convertitore da GNU info a HTML (supporto CGI)
`wv` | V:0.2, I:2.5 | 733 | MSWord→tutto | convertitore di documenti da Microsoft Word a HTML, LaTeX, ecc.
`unrtf` | V:0.3, I:3.0 | 159 | rtf→html | convertitore di documenti da RTF a HTML, ecc.
`wp2x` | I:0.09 | 200 | WordPerfect→tutto | da file WordPerfect 5.0 e 5.1 a TeX, LaTeX, troff, GML e HTML

### 11.2.4. Pulizia di dati XML

I file HTML non-XML possono essere convertiti in XHTML che è un'istanza di XML ben strutturato. XHTML può essere elaborato con strumenti XML.

La sintassi dei file XML e la correttezza deli URL in essi può essere verificata.

Tabella 11.11. Elenco di strumenti per belle stampe XML

pacchetto | popcon | dimensione | funzione | descrizione
--- | --- | --- | --- | ---
`libxml2-utils` | V:60, I:210 | 211 | xml↔html↔xhtml | strumento XML a riga di comando con xmllint(1) (controllo di sintassi, riformattazione, eliminazione sporcizia, …)
`tidy` | V:0.8, I:7.5 | 79 | xml↔html↔xhtml | controllore della sintassi e riformattatore per HTML
`weblint-perl` | V:0.05, I:0.96 | 32 | lint | strumento di controllo della sintassi e dello stile di base per HTML
`linklint` | V:0.06, I:0.49 | 343 | controllo dei collegamenti | controllore veloce di collegamenti e strumento per manutenzione di siti web

Una volta che è stato generato codice XML corretto, si può usare la tecnologia XSLT per estrarre dati in base al contesto dei marcatori

## 11.3. Impaginazione

Per semplici impaginazioni si può usare il programma Unix troff sviluppato da AT&T. Viene di solito usato per creare pagine man.

TeX, creato da Donald Knuth è uno strumento di impaginazione molto potente ed è lo standard di fatto. LaTeX, scritto originariamente da Leslie Lamport, permette un accesso alla potenza di TeX a più alto livello.

Tabella 11.12. Elenco di strumenti per impaginazione

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`texlive` | V:1, I:27 | 55 | (La)TeX | sistema TeX per impaginazione, anteprima e stampa
`lilypond` | V:0.6, I:5.7 | 16924 | (La)TeX | impaginatore di musica
`groff` | V:2, I:24 | 16514 | troff | sistema di formattazione di testi GNU troff

### 11.3.1. Impaginazione roff

Tradizionalmente il sistema di elaborazione di testi Unix principale è roff. Vedere 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) e "`info groff`".

Si può leggere o stampare un buon tutorial e documento di consultazione sulla macro "`-me`" in "`/usr/share/doc/groff/`", dopo aver installato il pacchetto `groff`.

| Suggerimento
"`groff -Tascii -me -`" produce output in puro testo con codici di escape ANSI. Se si desidera produrre un output in stile pagine man con molti "^H" e "_", usare invece "`GROFF_NO_SGR=1 groff -Tascii -me -`".

| Suggerimento
Per rimuovere i "^H" e "_" da un file di testo generato con `groff`, filtrarlo con "`col -b -x`".

### 11.3.2. TeX/LaTeX

La distribuzione software TeX Live offre un sistema TeX completo. Il metapacchetto `texlive` fornisce una buona selezione dei pacchetti TeX Live che dovrebbe essere sufficiente per la maggior parte dei compiti più comuni.

Ci sono molti documenti consultabili disponibili per TeX e LaTeX.

- teTeX HOWTO: The Linux-teTeX Local Guide

- tex(1)

- latex(1)

- texdoc(1)

- texdoctk(1)

- "The TeXbook", di Donald E. Knuth, (Addison-Wesley)

- "LaTeX - A Document Preparation System", di Leslie Lamport, (Addison-Wesley)

- "The LaTeX Companion", di Goossens, Mittelbach, Samarin, (Addison-Wesley)

Questo è l'ambiente di impaginazione più potente. Molti elaboratori SGML lo usano come backend per l'elaborazione del testo. Lyx, fornito dal pacchetto `lyx`, e GNUTeXmacs, fornito dal pacchetto `texmacs`, offrono un bell'ambiente WYSIWYG per LaTeX; inoltre molti usano Emacs e Vim come scelta di editor per i sorgenti.

Sono disponibili molte risorse in rete.

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

- A Simple Guide to Latex/Lyx

- Word Processing Using LaTeX

Quando i documenti crescono di dimensioni, a volte TeX può generare errori. Per risolvere queto problema si deve aumentare la dimensione di pool in "`/etc/texmf/texmf.cnf`" (o in modo più corretto, modificare "`/etc/texmf/texmf.d/95NonPath`" ed eseguire update-texmf(8)).

| Nota

Il sorgente TeX di "The TeXbook" è disponibile all'indirizzo www.ctan.org tex-archive site for texbook.tex. Questo file contiene la maggior parte delle macro necessarie. Mi è stato detto che si può elaborare questo documento con tex(1) dopo aver commentato le righe da 7 a 10 ed aggiungendo "`\input manmac \proofmodefalse`". È caldamente raccomandabile comprare questo libro (e tutti gli altri libri di Donald E. Knuth) invece di usare le versioni in rete, ma il sorgente è un meraviglioso esempio di input TeX!

### 11.3.3. Fare una bella stampa di una pagina di manuale

Si può stampare una pagina di manuale in PostScript in un bel modo usando uno dei comandi seguenti.

    $ man -Tps some_manpage | lpr

### 11.3.4. Creare una pagina di manuale

Benché sia possibile scrivere una pagina di manuale (pagina man) in formato troff semplice, ci sono alcuni pacchetti di aiuto per farlo.

Tabella 11.13. Elenco di pacchetti che aiutano a creare una pagina man

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`docbook-to-man` | V:0.5, I:5.7 | 189 | SGML→paginaman | convertitore da SGML DocDook in macro roff man
`help2man` | V:0.5, I:6.4 | 542 | testo→paginaman | generatore automatico di pagine man da --help
`info2man` | V:0.02, I:0.21 | 134 | info→paginaman | convertitore da GNU info a POD o pagine man
`txt2man` | V:0.05, I:0.66 | 112 | testo→paginaman | converte testo in puro ASCII nel formato delle pagine man

## 11.4. Dati stampabili

In un sistema Debian i dati stampabili sono presentati in formato PostScript. CUPS (Common Unix Printing System) usa Ghostscript come suo programma backend per la rasterizzazione per le stampanti non-PostScript.

I dati stampabili possono anche essere prodotti nel formato PDF nei sistemi Debian recenti.

I file PDF possono essere visualizzati e i campi nei loro moduli possono essere riempiti usando strumenti GUI per visualizzazione come Evince e Okular (vedere Sezione 7.4, «Applicazioni GUI») e i browser moderni come Chromium.

I file PDF possono essere modificati usando alcuni strumenti grafici come LibreOffice, Scribus e Inkscape (vedere Sezione 11.6, «Strumenti per dati grafici»).

| Suggerimento
Si può leggere un file PDF con GIMP e convertirlo in formato PNG usando una risoluzione maggiore di 300 dpi. Ciò può essere usato come immagine di sfondo per LibreOffice, per produrre una stampa modificata come si desidera con uno sforzo minimo.

### 11.4.1. Ghostscript

Il cuore centrale della manipolazione dei dati da stampare è l'interprete PostScript (PS) Ghostscript che genera immagini raster.

Tabella 11.14. Elenco di interpreti PostScript Ghostscript

pacchetto | popcon | dimensione | descrizione
--- | --- | --- | ---
`ghostscript` | V:181, I:559 | 177 | interprete PostScript/PDF GPL Ghostscript
`ghostscript-x` | V:0, I:14 | 88 | interprete PostScript/PDF GPL Ghostscript - supporto per display X
`libpoppler162` | V:1.2, I:3.1 | 5313 | libreria di rendering per PDF risultato di un fork del visualizzatore di PDF xpdf
`libpoppler-glib8t64` | V:73, I:307 | 612 | libreria di rendering per PDF (libreria condivisa basata su GLib)
`poppler-data` | V:169, I:580 | 13086 | CMaps per la libreria di rendering per PDF (per supporto CJK: Adobe-*)

| Suggerimento
La configurazione di Ghostscript può essere visualizzata con "`gs -h`".

### 11.4.2. Unire due file PS o PDF

È possibile unire due file PostScript (PS) o PDF (Portable Document Format) usando gs(1) di 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

| Nota
Il formato PDF che è un formato ampiamente usato per dati stampabili multipiattaforma, è essenzialmente il formato PS compresso con alcune funzionalità ed estensioni aggiuntive.

| Suggerimento
Per manipolare dalla riga di comando documenti PostScript sono utili psmerge(1) e altri comandi nel pacchetto `psutils`. Anche pdftk(1), nel pacchetto `pdftk`, è utile per manipolare documenti PDF.

### 11.4.3. Utilità per dati stampabili

Quello che segue è un elenco di pacchetti con utilità per dati stampabili che hanno attirato la mia attenzione.

Tabella 11.15. Elenco di utilità per dati stampabili

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`poppler-utils` | V:156, I:471 | 804 | pdf→ps,testo,… | utilità PDF: `pdftops`, `pdfinfo`, `pdfimages`, `pdftotext`, `pdffonts`
`psutils` | V:4, I:50 | 34 | ps→ps | strumenti di conversione di documenti PostScript
`poster` | V:0.1, I:1.8 | 57 | ps→ps | crea grandi poster da pagine PostScript
`enscript` | V:1, I:11 | 2138 | testo→ps, html, rtf | converte testo ASCII in PostScript, HTML, RTF o Pretty-Print
`a2ps` | V:1.0, I:7.0 | 4109 | testo→ps | convertitore e creatore di belle stampe "Da tutto a PostScript"
`pdftk` | V:1, I:21 | 28 | pdf→pdf | strumento di conversione di documenti PDF: `pdftk`
`html2ps` | V:0.1, I:1.8 | 256 | html→ps | converte da HTML aPostScript
`gnuhtml2latex` | V:0.02, I:0.63 | 26 | html→latex | convertitore da HTML a latex
`latex2rtf` | V:0.1, I:1.6 | 495 | latex→rtf | converte documenti da LaTeX a RTF leggibili da MS Word
`ps2eps` | V:2, I:32 | 95 | ps→eps | converte da PostScript a EPS (Encapsulated PostScript)
`e2ps` | V:0.01, I:0.12 | 104 | testo→ps | convertitore da testo a PostScript con supporto per la codifica giapponese
`impose+` | V:0.1, I:1.5 | 118 | ps→ps | Utilità PostScript
`trueprint` | V:0.01, I:0.07 | 148 | testo→ps | belle stampe di molti tipi di codice sorgente (C, C++, Java, Pascal, Perl, Pike, Sh e Verilog) in PostScript. (linguaggio C)
`pdf2svg` | V:0.2, I:3.0 | 33 | pdf→svg | convertitore da PDF al formato SVG (Scalable Vector Graphics)
`pdftoipe` | V:0.01, I:0.46 | 69 | pdf→ipe | convertitore da PDF al formato XML di IPE

### 11.4.4. Stampare con CUPS

Entrambi i comandi lp(1) e lpr(1) forniti da CUPS (Common Unix Printing System) forniscono opzioni per stampe personalizzate dei dati stampabili.

Si possono stampare 3 copie fascicolate di un file usando uno dei comandi seguenti.

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

Si può personalizzare ulteriormente l'operazione di stampa usando opzioni come "`-o number-up=2`", "`-o page-set=even`", "`-o page-set=odd`", "`-o scaling=200`", "`-o natural-scaling=200`", ecc., documentate in Stampa dalla riga di comando ed opzioni relative.

## 11.5. Conversione dei dati di posta

Quelli che seguono sono pacchetti per la conversione dei dati di posta che hanno attirato la mia attenzione.

Tabella 11.16. Elenco di pacchetto che aiutano a convertire dati di posta

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`sharutils` | V:2, I:28 | 1436 | posta | shar(1), unshar(1), uuencode(1), uudecode(1)
`mpack` | V:0.8, I:8.0 | 109 | MIME | codifica e decodifica di messaggiMIME: mpack(1) e munpack(1)
`tnef` | V:0.3, I:4.0 | 103 | ms-tnef | spacchettamento di allegati MIME di tipo "application/ms-tnef" che è un formato esclusivo di Microsoft
`uudeview` | V:0.2, I:1.8 | 105 | posta | codificatore e decodificatore per i seguenti formati: uuencode, xxencode, BASE64, quoted printable e BinHex

| Suggerimento
Se il software del programma di posta può essere configurato per usarlo, anche il server IMAP4 (Internet Message Access Protocol, versione 4) può essere usato per spostare la posta da sistemi proprietari.

### 11.5.1. Nozioni di base sui dati di posta

I dati di posta (SMTP) dovrebbero essere limitati a serie di 7 bit di dati. Perciò dati binari e testi a 8 bit sono codificati in un formato a 7 bit con MIME (Multipurpose Internet Mail Extensions) e la selezione del set di caratteri (vedere Tabella 11.2, «Elenco dei valori delle codifiche e loro uso»).

Il formato standard per l'archiviazione della posta è mbox strutturato seguendo la RFC2822 (che aggiorna RFC822). Vedere mbox(5) (fornito dal pacchetto `mutt`).

Per le lingue europee, per la posta viene di solito usato "`Content-Transfer-Encoding: quoted-printable`" con il set di caratteri ISO-8859-1 dato che non ci sono molti caratteri a 8 bit. Se il testo europeo è codificato in UTF-8, è probabile venga usato "`Content-Transfer-Encoding: quoted-printable`" dato che sono per la maggior parte dati a 7 bit.

Per il giapponese, per la posta viene tradizionalmente usato "`Content-Type: text/plain; charset=ISO-2022-JP`" per mantenere il testo a 7 bit. Ma sistemi Microsoft più vecchi possono inviare dati di posta in Shift-JIS senza una dichiarazione appropriata. Se il testo giapponese è codificato in UTF-8, è probabile venga usato Base64 dato che contiene molti dati a 8 bit. La situazione delle altre lingue asiatiche è simile.

| Nota
Se i dati di posta non-Unix sono accessibili da un software di posta non-Debian che può comunicare con il server IMAP4, potrebbe essere possibile spostarli eseguendo un proprio server IMAP4.

| Nota
Se si usano altri formati di archiviazione, spostarli nel formato mbox è un buon primo passo. Un versatile programma client come mutt(1) può essere di aiuto in questo caso.

Si può suddividere il contenuto di una casella di posta nei singoli messaggi usando procmail(1) e formail(1).

Ciascun messaggio di posta può essere spachettato usando munpack(1), dal pacchetto `mpack`, (o con altri strumenti specializzati) per ottenere i contenuti codificati MIME.

## 11.6. Strumenti per dati grafici

Sebbene programmi con interfaccia utente grafica come gimp(1) siano molto potenti, strumenti a riga di comando come imagemagick(1) sono piuttosto utili per manipolare in modo automatico immagini usando script.

Il formato standard di fatto per i file immagini delle fotocamere digitali è EXIF (Exchangeable Image File Format) che è il formato per file immagine JPEG con tag aggiuntivi con metadati. Può contenere informazioni come la data, l'orario e le impostazioni della fotocamera.

I diritti sulla compressione senza perdita di dati Lempel-Ziv-Welch (LZW) sono scaduti. Le utilità GIF (Graphics Interchange Format) che usano il metodo di compressione LZW sono ora disponibili liberamente sul sistema Debian.

| Suggerimento
Qualsiasi fotocamera digitale o scanner con un supporto di archiviazione removibile funziona in Linux attraverso i lettori di archiviazione USB dato che segue le regole progettuali per i file system delle fotocamere e usa il file system FAT. Vedere Sezione 10.1.7, «Supporti di archiviazione removibili».

### 11.6.1. Strumenti per dati grafici (metapacchetto)

I seguenti metapacchetti sono un buon punto di inizio per cercare strumenti per dati grafici usando aptitude(8). Un altro punto di partenza può essere "Panoramica dei pacchetti per i manutentori degli strumenti per fotografia di Debian".

Tabella 11.17. Elenco di strumenti per dati grafici (metapacchetto)

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`education-graphics` | I:0.34 | 25 | svg, jpeg, … | metapacchetto per insegnare grafica e arti pittoriche.
`open-font-design-toolkit` | I:0.06 | 9 | ttf, ps, … | metapacchetto per creazione di tipi di caratteri open

| Suggerimento
Cercare ulteriori strumenti per le immagini usando l'espressione regolare "`~Gworks-with::image`" in aptitude(8) (vedere Sezione 2.2.6, «Opzioni per i metodi di ricerca in aptitude»).

### 11.6.2. Strumenti per dati grafici (GUI)

Quelli che seguono sono pacchetti di strumenti GUI per la conversione, la modifica e l'organizzazione di dati grafici che hanno attirato la mia attenzione.

Tabella 11.18. Elenco di strumenti per dati grafici (GUI)

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`gimp` | V:41, I:214 | 32779 | immagine(bitmap) | GNU Image Manipulation Program, programma GNU di manipolazione di immagini
`xsane` | V:8, I:129 | 1512 | immagine(bitmap) | frontend X11 basato su GTK per SANE (Scanner Access Now Easy)
`scribus` | V:1, I:12 | 32415 | ps/pdf/SVG/… | editor DTP Scribus
`libreoffice-draw` | V:91, I:414 | 11209 | immagine(vettoriale) | suite per ufficio LibreOffice - disegno
`inkscape` | V:11, I:76 | 113353 | immagine(vettoriale) | editor SVG (Scalable Vector Graphics)
`dia` | V:1, I:15 | 3846 | immagine(vettoriale) | editor di diagrammi (Gtk)
`xfig` | V:0.8, I:8.4 | 7951 | immagine(vettoriale) | strumento per la generazione interattiva di figure in X11
`gocr` | V:0.4, I:3.8 | 549 | immagine→testo | software OCR libero
`eog` | V:24, I:137 | 10535 | immagine(Exif) | visualizzatore di immagini grafiche Eye of GNOME
`gthumb` | V:3, I:12 | 5162 | immagine(Exif) | navigatore e visualizzatore di immagini (GNOME)
`geeqie` | V:3, I:11 | 3135 | immagine(Exif) | visualizzatore d'immagini che usa GTK
`shotwell` | V:14, I:243 | 6334 | immagine(Exif) | organizzatore di foto digitali (GNOME)
`gwenview` | V:39, I:115 | 6000 | immagine(Exif) | visualizzatore di immagini (KDE)
`kamera` | I:114 | 992 | immagine(Exif) | supporto per fotocamere digitali in applicazioni KDE
`digikam` | V:1.5, I:8.6 | 325 | immagine(Exif) | applicazione per la gestione delle foto digitali per KDE
`darktable` | V:4, I:11 | 35876 | immagine(Exif) | tavolo luminoso e camera oscura virtuali per fotografi
`hugin` | V:0.4, I:5.7 | 6481 | immagine(Exif) | ricucitore di foto per panorami
`librecad` | V:1, I:12 | 9164 | DXF, ... | editor di dati CAD 2D
`freecad` | V:1, I:19 | 112 | DXF, ... | editor di dati CAD 3D
`blender` | V:2, I:19 | 169320 | blend, TIFF, VRML, … | editor di contenuti 3D per animazioni, ecc.
`mm3d` | V:0.02, I:0.26 | 4123 | ms3d, obj, dxf, … | editor di modelli 3D basato su OpenGL
`fontforge` | V:0.5, I:5.8 | 4736 | ttf, ps, … | editor di tipi di carattere per caratteri PS, TrueType e OpenType
`xgridfit` | V:0.01, I:0.10 | 878 | ttf | programma per gridfitting e hinting di tipi di carattere TrueType

### 11.6.3. Strumenti per dati grafici (CLI)

Quelli che seguono sono pacchetti di strumenti CLI per la conversione, la modifica e l'organizzazione di dati grafici che hanno attirato la mia attenzione.

Tabella 11.19. Elenco di strumenti per dati grafici (CLI)

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`imagemagick` | V:7, I:275 | 81 | immagine(bitmap) | programmi di manipolazione immagini
`graphicsmagick` | V:1.0, I:8.8 | 5945 | immagine(bitmap) | programmi di manipolazione di immagini (fork di `imagemagick`)
`netpbm` | V:26, I:285 | 8435 | immagine(bitmap) | strumenti di conversione di dati grafici
`libheif-examples` | V:0.3, I:3.6 | 503 | heif→jpeg(bitmap) | convertire il formato High Efficiency Image File (HEIF) nei formati JPEG, PNG o Y4M con il comandoheif-convert(1)
`icoutils` | V:3, I:33 | 221 | png↔ico(bitmap) | converte icone e puntatori MS Windows da e verso il formato PNG (favicon.ico)
`pstoedit` | V:1, I:37 | 1075 | ps/pdf→immagine(vettoriale) | convertitore di file PostScript e PDF in grafica vettoriale modificabile (SVG)
`libwmf-bin` | V:4, I:81 | 149 | Windows/immagine(vettoriale) | strumenti di conversione di metafile windows (dati di grafica vettoriale)
`fig2sxd` | V:0.01, I:0.18 | 158 | fig→sxd(vettoriale) | converte file XFig nel formato di Draw di OpenOffice.org
`unpaper` | V:2, I:17 | 417 | immagine→immagine | strumento di post-elaborazione per pagine scansionate per OCR
`tesseract-ocr` | V:8, I:35 | 2209 | immagine→testo | software OCR libero basato sul motore OCR commerciale di HP
`tesseract-ocr-eng` | V:8, I:35 | 4032 | immagine→testo | dati per motore OCR: file di lingua tesseract-ocr per testi in inglese
`ocrad` | V:0.3, I:2.5 | 608 | immagine→testo | software OCR libero
`exif` | V:3, I:51 | 335 | immagine(Exif) | utilità a riga di comando per mostrare informazioni EXIF in file JPEG
`exiv2` | V:2, I:20 | 429 | immagine(Exif) | strumento di manipolazione di metadati EXIF/IPTC
`exiftran` | V:1, I:11 | 81 | immagine(Exif) | trasforma immagini JPEG di fotocamere digitali
`exiftags` | V:0.2, I:2.8 | 309 | immagine(Exif) | utilità per leggere i tag EXIF da un file JPEG di una fotocamera digitale
`exifprobe` | V:0.2, I:2.3 | 506 | immagine(Exif) | legge metadati da immagini digitali
`dcraw` | V:0.8, I:7.7 | 428 | immagine(Raw)→ppm | decodifica immagini raw di fotocamere digitali
`findimagedupes` | V:0.1, I:1.1 | 76 | immagine→fingerprint | trova immagini simili visivamente o duplicati
`ale` | V:0.01, I:0.16 | 850 | immagine→immagine | fonde immagini per migliorarne la fedeltà o creare mosaici
`imageindex` | V:0.1, I:1.3 | 143 | immagine(Exif)→html | genera gallerie HTML statiche da immagini
`outguess` | V:0.1, I:1.1 | 230 | jpeg,png | strumento steganografico universale
`jpegoptim` | V:0.6, I:6.2 | 59 | jpeg | ottimizza file JPEG
`optipng` | V:2, I:40 | 187 | png | ottimizza file PNG, con compressione senza perdita
`pngquant` | V:1, I:12 | 62 | png | ottimizza file PNG, con compressione senza perdita

## 11.7. Conversioni di dati vari

Ci sono molti altri programmi per convertire dati. I pacchetti seguenti, trovati usando l'espressione regolare "`~Guse::converting`" in aptitude(8) (vedere Sezione 2.2.6, «Opzioni per i metodi di ricerca in aptitude»), hanno catturato la mia attenzione.

Tabella 11.20. Elenco di strumenti di conversione di dati vari

pacchetto | popcon | dimensione | parola chiave | descrizione
--- | --- | --- | --- | ---
`alien` | V:1, I:13 | 150 | rpm/tgz→deb | convertitore di pacchetti estranei in pacchetti Debian
`freepwing` | I:0.02 | 447 | EB→EPWING | convertitore da "Electric Book" (popolare in Giappone) in un singolo formato JIS X 4081 (un sottoinsieme di EPWING V1)
`calibre` | V:7, I:26 | 69924 | tutto→EPUB | convertitore e gestione di una biblioteca per libri elettronici

Si possono estrarre i dati dal formato RPM anche nel modo seguente.

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

Capitolo 10. Gestione dei dati |  | Capitolo 12. Programmazione