Cap. 11. Conversia datelor

# Cap. 11. Conversia datelor

Sunt descrise instrumente și sfaturi pentru conversia formatelor de date în sistemul Debian.

Instrumentele bazate pe standarde sunt în stare foarte bună, dar suportul pentru formatele de date proprietare este limitat.

## 11.1. Instrumente de conversie a datelor textuale

Următoarele pachete pentru conversia datelor în format text mi-au atras atenția.

Tabel 11.1. Lista instrumentelor de conversie a datelor textuale

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`libc6` | V:942, I:1000 | 5481 | set de caractere | convertor de codificare a textului între diferite configurații regionale prin iconv(1) (fundamental)
`recode` | V:2, I:13 | 528 | set de caractere + eol | convertor de codificare a textului între diferite configurații regionale (versatil, mai multe nume alternative(alias) și caracteristici)
`konwert` | V:2, I:42 | 137 | set de caractere | convertor de codificare a textului între diferite configurații regionale (elegant)
`nkf` | V:0.4, I:8.5 | 360 | set de caractere | traducător de seturi de caractere pentru limba japoneză
`tcs` | V:0.01, I:0.14 | 518 | set de caractere | traducător de seturi de caractere
`unaccent` | V:0.03, I:0.28 | 35 | set de caractere | înlocuiește literele accentuate cu echivalentul lor neaccentuat
`tofrodos` | V:1, I:12 | 50 | eol (final de linie) | convertor de format de text între DOS și Unix: fromdos(1) și todos(1)
`macutils` | V:0.04, I:0.43 | 319 | eol (final de linie) | convertor de format de text între Macintosh și Unix: frommac(1) și tomac(1)

### 11.1.1. Conversia unui fișier text cu iconv

| Indicație
iconv(1) este furnizat ca parte a pachetului `libc6` și este întotdeauna disponibil pe practic toate sistemele de tip Unix pentru a converti codificarea caracterelor.

Puteți converti codificările unui fișier text cu iconv(1) după cum urmează.

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

Valorile de codificare nu țin cont de diferențele între majuscule și minuscule și ignoră „`-`” și „`_`” pentru potrivire. Codificările acceptate pot fi verificate cu comanda „`iconv -l`”.

Tabel 11.2. Lista valorilor de codificare și utilizarea acestora

valoarea codificării | utilizare
--- | ---
ASCII | American Standard Code for Information Interchange (Codul american standard pentru schimbul de informații), cod de 7 biți fără caractere accentuate
UTF-8 | standardul multilingv actual pentru toate sistemele de operare moderne
ISO-8859-1 | standardul vechi pentru limbile vest-europene, ASCII + caractere accentuate
ISO-8859-2 | standardul vechi pentru limbile est-europene, ASCII + caractere accentuate
ISO-8859-15 | standardul vechi pentru limbile vest-europene, ISO-8859-1 cu simbolul euro
CP850 | pagina de coduri 850, caractere Microsoft DOS cu grafică pentru limbile vest-europene, variantă a ISO-8859-1
CP932 | pagina de coduri 932, variantă a Shift-JIS în stil Microsoft Windows pentru limba japoneză
CP936 | pagina de coduri 936,, varianta în stilul Microsoft Windows a GB2312, GBK sau GB18030 pentru chineză simplificată
CP949 | pagina de coduri 949, variantă în stil Microsoft Windows a codificării EUC-KR sau Unified Hangul Code pentru limba coreeană
CP950 | pagina de coduri 950, varianta în stilul Microsoft Windows a Big5 pentru limba chineză tradițională
CP1251 | pagina de coduri 1251, codificare în stil Microsoft Windows pentru alfabetul chirilic
CP1252 | pagina de coduri 1252, variantă în stilul Microsoft Windows a ISO-8859-15 pentru limbile vest-europene
KOI8-R | vechiul standard rus UNIX pentru alfabetul chirilic
ISO-2022-JP | codificarea standard pentru mesajele electronice în limba japoneză, care utilizează numai coduri de 7 biți
eucJP | vechiul cod standard japonez UNIX pe 8 biți, complet diferit de Shift-JIS
Shift-JIS | standardul JIS X 0208 anexa 1 pentru limba japoneză (a se vedea CP932)

| Notă
Unele codificări sunt acceptate numai pentru conversia datelor și nu sunt utilizate ca valori pentru configurația regională (Secțiune 8.1, „Configurația regională”).

Pentru seturile de caractere care se încadrează într-un singur octet, cum ar fi seturile de caractere ASCII și ISO-8859, codificarea caracterelor înseamnă aproape același lucru cu setul de caractere.

Pentru seturile de caractere cu multe caractere, cum ar fi JIS X 0213 pentru japoneză sau Universal Character Set (UCS, Unicode, ISO-10646-1) pentru practic toate limbile, există multe scheme de codificare pentru a le încadra în secvența de octeți de date.

- EUC și ISO/IEC 2022 (de asemenea cunoscut sub numele de JIS X 0202) pentru limba japoneză

- UTF-8, UTF-16/UCS-2 și UTF-32/UCS-4 pentru Unicode

Pentru acestea, există diferențe clare între setul de caractere și codificarea caracterelor.

Pagina de coduri este utilizată ca sinonim pentru tabelele de codificare a caracterelor pentru unele tabele specifice anumitor furnizori.

| Notă

Vă rugăm să rețineți că majoritatea sistemelor de codificare utilizează același cod ASCII pentru caracterele de 7 biți. Există însă și câteva excepții. Dacă convertiți programe C japoneze vechi și date URL din formatul de codificare numit în mod obișnuit shift-JIS în format UTF-8, utilizați „`CP932`” ca nume de codificare în loc de „`shift-JIS`” pentru a obține rezultatele dorite: `0x5C` → „`\`” și `0x7E` → „`~`”. În caz contrar, acestea sunt convertite în caractere greșite.

| Indicație
recode(1) poate fi utilizat și oferă mai multe funcționalități decât iconv(1), fromdos(1), todos(1), frommac(1) și tomac(1) combinate. Pentru mai multe informații, consultați „`info recode`”.

### 11.1.2. Verificarea fișierului pentru a fi UTF-8 cu iconv

Puteți verifica dacă un fișier text este codificat în UTF-8 cu iconv(1) după cum urmează.

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

| Indicație
Utilizați opțiunea „`--verbose`” din exemplul de mai sus pentru a găsi primul caracter non-UTF-8.

### 11.1.3. Conversia numelor de fișiere cu iconv

Iată un exemplu de script pentru a converti codificarea numelor de fișiere create în sisteme de operare mai vechi în codificarea modernă UTF-8 într-un singur director.

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

Variabila „`$ENCDN`” specifică codificarea originală utilizată pentru numele fișierelor în sistemele de operare mai vechi, ca în Tabel 11.2, „Lista valorilor de codificare și utilizarea acestora”.

Pentru cazuri mai complicate, vă rugăm să montați un sistem de fișiere (de exemplu, o partiție pe un disc) care conține astfel de nume de fișiere cu codificare adecvată, utilizând opțiunea mount(8) (a se vedea Secțiune 8.1.3, „Codificarea numelor de fișiere”) și copiați întregul conținut al acestuia într-un alt sistem de fișiere montat ca UTF-8 cu comanda „`cp -a`”.

### 11.1.4. Conversie a sfârșitului de linie (EOL)

Formatul fișierului text, în special codul de sfârșit de linie (EOL), depinde de platformă.

Tabel 11.3. Lista stilurilor EOL pentru diferite platforme

platforma | codul EOL | control | zecimal | hexazecimal
--- | --- | --- | --- | ---
Debian (unix) | LF | `^J` | 10 | 0A
MSDOS și Windows | CR-LF | `^M^J` | 13 10 | 0D 0A
Apple's Macintosh | CR | `^M` | 13 | 0D

Programele de conversie a formatului EOL, fromdos(1), todos(1), frommac(1) și tomac(1), sunt destul de utile. recode(1) este, de asemenea, util.

| Notă
Unele date din sistemul Debian, cum ar fi datele paginii wiki pentru pachetul `python-moinmoin`, utilizează codul EOL în stil MSDOS CR-LF. Prin urmare, regula de mai sus este doar o regulă generală.

| Notă
Majoritatea editorilor (de exemplu, `vim`, `emacs`, `gedit`, …) pot gestiona în mod transparent fișierele în stil MSDOS EOL.

| Indicație
Utilizarea „`sed -e «/\r$/!s/$/\r/»`” în locul todos(1) este mai potrivită atunci când doriți să unificați stilul EOL la stilul MSDOS din stilul mixt MSDOS și Unix. (de exemplu, după îmbinarea a două fișiere în stil MSDOS cu diff3(1).) Acest lucru se datorează faptului că `todos` adaugă CR la toate liniile.

### 11.1.5. Conversie a tabulatoarelor (TAB)

Există câteva programe specializate populare pentru conversia codurilor de tabulatoare.

Tabel 11.4. Lista comenzilor de conversie a tabulatoarelor (TAB) din pachetele `bsdmainutils` și `coreutils`

funcție | `bsdmainutils` | `coreutils`
--- | --- | ---
convertește tabulatorul în spații | "`col -x`" | `expand`
convertește spațiile în tabulator | "`col -h`" | `unexpand`

indent(1) din pachetul `indent` reformatează complet spațiile albe din programul C.

Programele de editare precum `vim` și `emacs` pot fi utilizate și pentru conversia tabulatoarelor (TAB). De exemplu, cu `vim`, puteți extinde TAB cu secvența de comenzi „`:set expandtab`” și „`:%retab`”. Puteți reveni la starea inițială cu secvența de comenzi „`:set noexpandtab`” și „`:%retab!`”.

### 11.1.6. Editori cu conversie automată

Editorii moderni inteligenți, precum programul `vim`, sunt destul de inteligenți și se descurcă bine cu orice sistem de codificare și orice format de fișier. Pentru o compatibilitate optimă, ar trebui să utilizați acești editori în mediul UTF-8 din consola compatibilă cu UTF-8.

Un fișier text Unix vechi din Europa de Vest, „`u-file.txt`”, stocat în codificarea latin1 (iso-8859-1), poate fi editat simplu cu `vim` după cum urmează.

    $ vim u-file.txt

Acest lucru este posibil deoarece mecanismul de detectare automată a codificării fișierului în `vim` presupune mai întâi codificarea UTF-8 și, dacă aceasta eșuează, presupune că este latin1.

Un fișier text vechi Unix în poloneză, „`pu-file.txt`”, stocat în codificarea latin2 (iso-8859-2), poate fi editat cu `vim` după cum urmează.

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

Un fișier text vechi UNIX în japoneză, „`ju-file.txt`”, stocat în codificarea eucJP, poate fi editat cu `vim` după cum urmează.

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

Un fișier text vechi MS-Windows în japoneză„`jw-file.txt`”, stocat în așa-numita codificare shift-JIS (mai precis: CP932) poate fi editat cu `vim` după cum urmează.

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

Când un fișier este deschis cu opțiunile „`++enc`” și „`++ff`”, comanda „`:w`” din linia de comandă Vim îl salvează în formatul original și suprascrie fișierul original. De asemenea, puteți specifica formatul de salvare și numele fișierului în linia de comandă Vim, de exemplu, „`:w ++enc=utf8 new.txt`”.

Consultați mbyte.txt „suport pentru text multi-octeți” în ajutorul în Internet al `vim` și Tabel 11.2, „Lista valorilor de codificare și utilizarea acestora” pentru valorile configurației regionale utilizate cu „`++enc`”.

Familia de programe `emacs` poate îndeplini funcții echivalente.

### 11.1.7. Extragerea textului simplu

Următorul cod citește o pagină web într-un fișier text. Acest lucru este foarte util atunci când copiați configurații de pe web sau aplicați instrumente text Unix de bază, cum ar fi grep(1) pe pagina web.

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

În mod similar, puteți extrage date text simplu din alte formate utilizând următoarele.

Tabel 11.5. Lista instrumentelor pentru extragerea datelor în text simplu

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | funcție
--- | --- | --- | --- | ---
`w3m` | V:10, I:134 | 2853 | html→text | convertor HTML în text cu comanda „`w3m -dump`”
`html2text` | V:3, I:68 | 298 | html→text | convertor avansat HTML în text (ISO 8859-1)
`lynx` | V:29, I:448 | 2031 | html→text | convertor HTML în text cu comanda „`lynx -dump`”
`elinks` | V:3, I:16 | 1791 | html→text | convertor HTML în text cu comanda „`elinks -dump`”
`links` | V:2, I:21 | 2321 | html→text | convertor HTML în text cu comanda „`links -dump`”
`links2` | V:0.8, I:8.6 | 5466 | html→text | convertor HTML în text cu comanda „`links2 -dump`”
`catdoc` | V:15, I:170 | 682 | MSWord→text,TeX | convertește fișierele MSWord în text simplu sau TeX
`antiword` | V:0.9, I:6.7 | 587 | MSWord→text,ps | convertește fișierele MSWord în text simplu sau ps
`unhtml` | V:0.05, I:0.49 | 40 | html→text | elimină etichetele de marcaj dintr-un fișier HTML
`odt2txt` | V:1, I:20 | 60 | odt→text | convertor din text OpenDocument în text

### 11.1.8. Evidențierea și formatarea datelor în text simplu

Puteți evidenția și formata datele în text simplu în felul următor.

Tabel 11.6. Lista instrumentelor pentru evidențierea datelor în text simplu

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`vim-runtime` | V:18, I:360 | 38849 | evidențiere | MACRO Vim pentru a converti codul sursă în HTML cu "`:source $VIMRUNTIME/syntax/html.vim`"
`cxref` | V:0.01, I:0.23 | 1191 | c→html | convertor pentru programul C în latex și HTML (limbajul C)
`src2tex` | V:0.02, I:0.16 | 1799 | evidențiere | convertește multe coduri sursă în TeX (limbajul C)
`source-highlight` | V:0.4, I:3.1 | 2131 | evidențiere | convertește multe coduri sursă în HTML, XHTML, LaTeX, Texinfo, secvențe de eludare culori ANSI și fișiere DocBook cu evidențiere (C++)
`highlight` | V:0.4, I:3.1 | 1412 | evidențiere | convertește multe coduri sursă în fișiere HTML, XHTML, RTF, LaTeX, TeX sau XSL-FO cu evidențiere (C++)
`grc` | V:0.9, I:5.9 | 208 | text→culoare | instrument generic de colorare pentru orice (Python)
`pandoc` | V:10, I:46 | 209102 | text→orice | convertor general de marcaj (Haskell)
`python3-docutils` | V:11, I:50 | 2013 | text→orice | instrument de formatare de documente de text ReStructurat în XML (Python)
`markdown` | V:0.4, I:6.1 | 56 | text→html | instrument de formatare de documente text markdown în (X)HTML (Perl)
`asciidoctor` | V:0.4, I:5.0 | 101 | text→orice | instrument de formatare de documente text AsciiDoc în XML/HTML (Ruby)
`python3-sphinx` | V:6, I:25 | 3234 | text→orice | sistem de publicare a documentelor bazat pe text ReStructurat (Python)
`hugo` | V:0.8, I:5.3 | 66736 | text→html | sistem de publicare a siturilor statice bazat pe markdown (Go)

## 11.2. Date XML

The Extensible Markup Language (XML) este un limbaj de marcare pentru documente care conțin informații structurate.

A se vedea informațiile introductive la XML.COM.

- „Ce este XML?”

- „Ce este XSLT?”

- „Ce este XSL-FO?”

- „Ce este XLink?”

### 11.2.1. Sfaturi de bază pentru XML

Textul XML arată aproximativ precum HTML. Acesta ne permite să gestionăm mai multe formate de ieșire pentru un document. Un sistem XML simplu este pachetul `docbook-xsl`, care este utilizat aici.

Fiecare fișier XML începe cu o declarație XML standard, după cum urmează.

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

Sintaxa de bază pentru un element XML este marcată după cum urmează.

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

Elementul XML cu conținut gol este marcat în următoarea formă scurtă.

    <name attribute="value" />

„`attribute="value"`” din exemplele de mai sus sunt opționale.

Secțiunea de comentarii în XML este marcată după cum urmează.

    <!-- comment -->

În afară de adăugarea de marcaje, XML necesită o conversie minoră a conținutului utilizând entități predefinite pentru următoarele caractere.

Tabel 11.7. Lista entităților predefinite pentru XML

entitate predefinită | caracterul care urmează să fie convertit în
--- | ---
`&quot;` | `"` : ghilimele duble
`&apos;` | `'` : apostrof
`&lt;` | `<` : mai mic decât
`&gt;` | `>` : mai mare decât
`&amp;` | `&` : semnul &

| Atenție
„`<`” sau „`&`” nu pot fi utilizate în atribute sau elemente.

| Notă
Când se utilizează entități definite de utilizator în stil SGML, de exemplu „`&anumită-etichetă;`”, prima definiție prevalează asupra celorlalte. Definiția entității este exprimată în „`<!ENTITY anumită-etichetă "valoare entitate">`”.

| Notă
Atâta timp cât marcajul XML este realizat în mod consecvent cu un anumit set de nume de etichete (fie unele date ca conținut, fie valori de atribute), conversia într-un alt XML este o sarcină trivială folosind Extensible Stylesheet Language Transformations (XSLT).

### 11.2.2. Procesarea XML

Există multe instrumente disponibile pentru procesarea fișierelor XML, cum ar fi Extensible Stylesheet Language (XSL).

Practic, odată ce ați creat un fișier XML bine structurat, îl puteți converti în orice format folosind Extensible Stylesheet Language Transformations (XSLT).

Extensible Stylesheet Language for Formatting Objects (XSL-FO) este considerat a fi soluția pentru formatare. Pachetul `fop` este nou în arhiva Debian `main` datorită dependenței sale de limbajul de programare Java. Deci, codul LaTeX este de obicei generat din XML folosind XSLT, iar sistemul LaTeX este utilizat pentru a crea fișiere imprimabile, cum ar fi DVI, PostScript și PDF.

Tabel 11.8. Lista instrumentelor XML

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`docbook-xml` | V:15, I:404 | 2126 | xml | definirea tipului de document XML („Document Type Definition”: DTD) pentru DocBook
`docbook-xsl` | V:14, I:145 | 14823 | xml/xslt | foi de stil XSL pentru procesarea DocBook XML în diverse formate de ieșire cu XSLT
`xsltproc` | V:15, I:72 | 83 | xslt | procesor de linie de comandă XSLT (XML→ XML, HTML, text simplu etc.)
`xmlto` | V:0.5, I:8.8 | 124 | xml/xslt | convertor XML-în-orice cu XSLT
`fop` | V:0.6, I:7.6 | 281 | xml/xsl-fo | convertește fișiere Docbook XML în PDF
`dblatex` | V:0.9, I:5.9 | 4636 | xml/xslt | convertește fișiere Docbook în documente DVI, PostScript, PDF cu XSLT
`dbtoepub` | V:0.05, I:0.58 | 37 | xml/xslt | convertor DocBook XML în .epub

Deoarece XML este un subset al Standard Generalized Markup Language (SGML), acesta poate fi procesat de instrumentele extinse disponibile pentru SGML, cum ar fi Document Style Semantics and Specification Language (DSSSL).

Tabel 11.9. Lista instrumentelor DSSSL

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`openjade` | V:1, I:22 | 1066 | dsssl | procesor DSSSL conform standardului ISO/IEC 10179:1996 (cea mai recentă versiune)
`docbook-dsssl` | V:0.5, I:8.0 | 2594 | xml/dsssl | foi de stil DSSSL pentru procesarea DocBook XML în diverse formate de ieșire cu DSSSL
`docbook-utils` | V:0.3, I:5.7 | 287 | xml/dsssl | instrumente pentru fișiere DocBook, inclusiv conversia în alte formate (HTML, RTF, PS, man, PDF) cu comenzi `docbook2*` cu DSSSL

| Indicație
`yelp`-ul GNOME este uneori util pentru a citi direct fișiere DocBook, deoarece le redă decent în X.

### 11.2.3. Extragerea datelor XML

Puteți extrage date HTML sau XML din alte formate utilizând următoarele.

Tabel 11.10. Lista instrumentelor de extragere a datelor XML

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`man2html` | V:0.1, I:1.3 | 142 | pagină de manual→html | convertor dintr-o pagină de manual în HTML (suport CGI)
`doclifter` | I:0.04 | 487 | troff→xml | convertor din troff în DocBook XML
`texi2html` | V:0.2, I:2.9 | 1847 | texi→html | convertor din Texinfo în HTML
`info2www` | V:0.9, I:1.5 | 76 | info→html | convertor din GNU info în HTML (suport CGI)
`wv` | V:0.2, I:2.5 | 733 | MSWord→orice | convertor de documente din Microsoft Word în HTML, LaTeX etc.
`unrtf` | V:0.3, I:3.0 | 159 | rtf→html | convertor de documente din RTF în HTML etc.
`wp2x` | I:0.09 | 200 | WordPerfect→orice | fișiere WordPerfect 5.0 și 5.1 în TeX, LaTeX, troff, GML și HTML

### 11.2.4. Analizarea statică (lint) a datelor XML

Fișierele HTML care nu sunt XML pot fi convertite în XHTML, care este un exemplu de XML bine format. XHTML poate fi procesat cu instrumente XML.

Sintaxa fișierelor XML și validitatea adreselor URL găsite în acestea pot fi verificate.

Tabel 11.11. Lista instrumentelor de imprimare elegantă XML

pachet | popcon(popularitate) | dimensiune | funcție | descriere
--- | --- | --- | --- | ---
`libxml2-utils` | V:60, I:210 | 211 | xml↔html↔xhtml | instrument XML pentru linia de comandă cu xmllint(1) (verificare sintactică, reformatare, analizare statică (lint), …)
`tidy` | V:0.8, I:7.5 | 79 | xml↔html↔xhtml | verificator de sintaxă HTML și instrument de reformatare
`weblint-perl` | V:0.05, I:0.96 | 32 | lint | verificator de sintaxă și de stil minimal pentru HTML
`linklint` | V:0.06, I:0.49 | 343 | verificare legături | instrument rapid de verificare a legăturilor și întreținere a siturilor web

Odată ce s-a generat un fișier XML corespunzător, puteți utiliza tehnologia XSLT pentru a extrage date pe baza contextului de marcare etc.

## 11.3. Tehnoredactarea (formatarea și pregătirea textului)

Programul Unix troff, dezvoltat inițial de AT&T, poate fi folosit pentru formatarea simplă a textului. Acesta este utilizat de obicei pentru crearea paginilor de manual.

TeX, creat de Donald Knuth, este un instrument de tehnoredactare extrem de puternic și reprezintă standardul de facto. LaTeX, scris inițial de Leslie Lamport, permite accesul la funcționalitățile avansate ale TeX-ului.

Tabel 11.12. Lista instrumentelor de tehnoredactare

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`texlive` | V:1, I:27 | 55 | (La)TeX | sistemul TeX pentru tehnoredactare, previzualizare și imprimare a textului
`lilypond` | V:0.6, I:5.7 | 16924 | (La)TeX | compozitor de partituri muzicale
`groff` | V:2, I:24 | 16514 | troff | sistemul de formatare a textului GNU troff

### 11.3.1. Tehnoredactare roff

În mod tradițional, roff este principalul sistem de procesare a textului din Unix. A se vedea 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), și "`info groff`".

Puteți citi sau imprima un tutorial și un ghid de referință util privind macrocomanda „`-me`” din directorul „`/usr/share/doc/groff/`” prin instalarea pachetului `groff`.

| Indicație
„`groff -Tascii -me -`” generează o ieșire sub formă de text simplu cu cod de eludare ANSI. Dacă doriți să obțineți o ieșire similară cu pagina de manual, cu multe caractere „^H” și „_”, utilizați în schimb „`GROFF_NO_SGR=1 groff -Tascii -me -`”.

| Indicație
Pentru a elimina caracterele „^H” și „_” dintr-un fișier text generat de `groff`, filtrați-l cu comanda „`col -b -x`”.

### 11.3.2. TeX/LaTeX

Distribuția software TeX Live oferă un sistem TeX complet. Metapachetul `texlive` pune la dispoziție o selecție adecvată de pachete TeX Live, care ar trebui să fie suficientă pentru cele mai comune sarcini.

Există numeroase referințe disponibile pentru TeX și LaTeX.

- The teTeX HOWTO: The Linux-teTeX Local Guide (Rețetarul teTeX: Ghidul local pentru Linux-teTeX), în engleză

- tex(1)

- latex(1)

- texdoc(1)

- texdoctk(1)

- „The TeXbook”, de Donald E. Knuth, (Addison-Wesley)

- „LaTeX – A Document Preparation System”, de Leslie Lamport, (Addison-Wesley)

- „The LaTeX Companion”, de Goossens, Mittelbach, Samarin, (Addison-Wesley)

Acesta este cel mai performant mediu de tehnoredactare. Multe procesoare SGML îl utilizează ca procesor de text de fundal. Lyx, furnizat de pachetul `lyx`, și GNU TeXmacs, furnizat de pachetul `texmacs`, oferă un mediu de editare WYSIWYG pentru LaTeX, în timp ce mulți folosesc Emacs și Vim ca editor de sursă.

Există numeroase resurse disponibile în Internet.

- The TEX Live Guide - TEX Live 2007 („`/usr/share/doc/texlive-doc-base/english/texlive-en/live.html`”) ( din pachetul `texlive-doc-base`)

- A Simple Guide to Latex/Lyx (Un ghid simplu pentru Latex/Lyx), în engleză

- Word Processing Using LaTeX (Procesarea textelor cu ajutorul LaTeX), în engleză

Când documentele devin mai mari, uneori TeX poate genera erori. Pentru a remedia această problemă, trebuie să măriți dimensiunea memoriei tampon în fișierul „`/etc/texmf/texmf.cnf`” (sau, mai bine, să editați fișierul „`/etc/texmf/texmf.d/95NonPath`” și să rulați comanda update-texmf(8)).

| Notă

Sursa TeX a cărții „The TeXbook” este disponibilă la www.ctan.org situl arhivei TeX pentru fișierul texbook.tex. Acest fișier conține majoritatea macrocomenzilor necesare. Am auzit că puteți procesa acest document cu tex(1) după ce comentați liniile 7-10 și adăugați „`\input manmac \proofmodefalse`”. Se recomandă cu tărie să cumpărați această carte (și toate celelalte cărți ale lui Donald E. Knuth) în loc să folosiți versiunea online, dar sursa este un exemplu excelent de introducere în TeX!

### 11.3.3. Imprimarea paginii de manual într-un format atractiv

Puteți imprima o pagină de manual în format PostScript folosind una dintre următoarele comenzi.

    $ man -Tps some_manpage | lpr

### 11.3.4. Crearea unei pagini de manual

Deși este posibil să scrieți o pagină de manual (manpage) în formatul simplu troff, există puține pachete auxiliare care să vă ajute să o creați.

Tabel 11.13. Lista pachetelor utile pentru crearea paginilor de manual

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`docbook-to-man` | V:0.5, I:5.7 | 189 | SGML→pagină de manual | convertor din DocBook SGML în macrocomenzi roff man
`help2man` | V:0.5, I:6.4 | 542 | text→pagină de manual | generator automat de pagini de manual din „--help”
`info2man` | V:0.02, I:0.21 | 134 | info→pagină de manual | convertor de la GNU Info la POD sau pagini de manual
`txt2man` | V:0.05, I:0.66 | 112 | text→pagină de manual | convertește textul ASCII simplu în formatul paginilor de manual

## 11.4. Date imprimabile

Datele destinate imprimării sunt exprimate în formatul PostScript în sistemul Debian. Common Unix Printing System (CUPS) utilizează Ghostscript ca program de procesare a datelor pentru imprimantele care nu acceptă PostScript.

Datele care pot fi imprimate pot fi expresate și în formatul PDF în sistemul Debian actual.

Fișierele PDF pot fi vizualizate, iar câmpurile formularelor din acestea pot fi completate folosind instrumente de vizualizare cu interfață grafică, precum Evince și Okular (a se vedea Secțiune 7.4, „Aplicații cu interfață grafică”); precum și în navigatoarele moderne, cum ar fi Chromium.

Fișierele PDF pot fi editate folosind anumite instrumente grafice, cum ar fi LibreOffice, Scribus și Inkscape (a se vedea Secțiune 11.6, „Instrumente pentru date grafice”).

| Indicație
Puteți citi un fișier PDF cu GIMP și îl puteți converti în format PNG folosind o rezoluție mai mare de 300 dpi. Acesta poate fi folosit ca imagine de fundal pentru LibreOffice pentru a obține o imprimare modificată conform dorințelor cu efort minim.

### 11.4.1. Ghostscript

Elementul central al procesării datelor destinate imprimării este interpretul Ghostscript PostScript (PS), care generează imagini-rastru.

Tabel 11.14. Lista interpreților Ghostscript PostScript

pachet | popcon(popularitate) | dimensiune | descriere
--- | --- | --- | ---
`ghostscript` | V:181, I:559 | 177 | interpretul GPL Ghostscript de PostScript/PDF
`ghostscript-x` | V:0, I:14 | 88 | interpretul GPL Ghostscript de PostScript/PDF - suport pentru afișare în sistemul X
`libpoppler162` | V:1.2, I:3.1 | 5313 | bibliotecă de redare PDF derivată din vizorul de fișiere PDF xpdf
`libpoppler-glib8t64` | V:73, I:307 | 612 | bibliotecă de redare PDF (bibliotecă partajată bazată pe GLib)
`poppler-data` | V:169, I:580 | 13086 | Biblioteca CMaps pentru redarea fișierelor PDF (pentru suport CJK: Adobe-*)

| Indicație
Comanda «`gs -h`» poate afișa configurația Ghostscript.

### 11.4.2. Fuzionarea a două fișiere PS sau PDF

Puteți fuziona două fișiere PostScript (PS) sau Portable Document Format (PDF) folosind gs(1) din 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

| Notă
Fișierul PDF, care este un format de date imprimabil, utilizat pe scară largă pe mai multe platforme, este, în esență, formatul PS comprimat, cu câteva caracteristici și extensii suplimentare.

| Indicație
Pentru linia de comandă, psmerge(1) și alte comenzi din pachetul `psutils` sunt utile pentru manipularea documentelor PostScript. De asemenea, pdftk(1) din pachetul `pdftk` este util pentru manipularea documentelor PDF.

### 11.4.3. Instrumente pentru date imprimabile

Următoarele pachete pentru instrumente de date imprimabile mi-au atras atenția.

Tabel 11.15. Lista instrumentelor pentru date imprimabile

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`poppler-utils` | V:156, I:471 | 804 | pdf→ps,text,… | Ustensile PDF: `pdftops`, `pdfinfo`, `pdfimages`, `pdftotext`, `pdffonts`
`psutils` | V:4, I:50 | 34 | ps→ps | Instrumente de conversie a documentelor PostScript
`poster` | V:0.1, I:1.8 | 57 | ps→ps | creează postere mari din pagini PostScript
`enscript` | V:1, I:11 | 2138 | text→ps, html, rtf | convertește textul ASCII în PostScript, HTML, RTF sau imprimare elegantă (pretty-print)
`a2ps` | V:1.0, I:7.0 | 4109 | text→ps | convertor „orice în PostScript” și instrument de imprimare elegantă
`pdftk` | V:1, I:21 | 28 | pdf→pdf | instrument de conversie a documentelor PDF: `pdftk`
`html2ps` | V:0.1, I:1.8 | 256 | html→ps | convertor de la HTML la PostScript
`gnuhtml2latex` | V:0.02, I:0.63 | 26 | html→latex | convertor de la HTML la LaTeX
`latex2rtf` | V:0.1, I:1.6 | 495 | latex→rtf | convertește documentele din format LaTeX în format RTF, care pot fi citite în MS Word
`ps2eps` | V:2, I:32 | 95 | ps→eps | convertor de la PostScript la EPS (Encapsulated PostScript)
`e2ps` | V:0.01, I:0.12 | 104 | text→ps | convertor de text în PostScript cu suport pentru codificarea limbii japoneze
`impose+` | V:0.1, I:1.5 | 118 | ps→ps | ustensile PostScript
`trueprint` | V:0.01, I:0.07 | 148 | text→ps | imprimă elegant multe coduri sursă (C, C++, Java, Pascal, Perl, Pike, Sh și Verilog) în format PostScript. (Limbajul C)
`pdf2svg` | V:0.2, I:3.0 | 33 | pdf→svg | convertor din format PDF în format Scalable vector graphics (SVG) -- Grafică vectorială scalabilă
`pdftoipe` | V:0.01, I:0.46 | 69 | pdf→ipe | convertor din format PDF în formatul XML al IPE

### 11.4.4. Imprimarea cu CUPS

Atât comanda lp(1), cât și comanda lpr(1), oferite de Common Unix Printing System (CUPS), oferă opțiuni pentru imprimarea personalizată a datelor destinate imprimării.

Puteți imprima 3 copii ale unui fișier folosind una dintre următoarele comenzi.

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

Puteți personaliza și mai mult funcționarea imprimantei folosind opțiuni precum „`-o number-up=2`”, „`-o page-set=even`”, „`-o page-set=odd`”, „`-o scaling=200`”, „`-o natural-scaling=200`” etc., documentate în Imprimare din linia de comandă și opțiuni.

## 11.5. Conversia datelor de poștă electronică

Următoarele pachete pentru conversia datelor de poștă electronică mi-au atras atenția.

Tabel 11.16. Lista pachetelor utile pentru conversia datelor de poștă electronică

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`sharutils` | V:2, I:28 | 1436 | mail | shar(1), unshar(1), uuencode(1), uudecode(1)
`mpack` | V:0.8, I:8.0 | 109 | MIME | codarea și decodarea mesajelor MIME: mpack(1) și munpack(1)
`tnef` | V:0.3, I:4.0 | 103 | ms-tnef | despachetarea atașamentelor MIME de tip „application/ms-tnef”, care este un format specific Microsoft
`uudeview` | V:0.2, I:1.8 | 105 | mail | codificator și decodificator pentru următoarele formate: uuencode, xxencode, BASE64, quoted printable și BinHex

| Indicație
Serverul Internet Message Access Protocol versiunea 4 (IMAP4) poate fi utilizat pentru a transfera mesajele din sistemele de poștă electronică proprietare, cu condiția ca programul client de poștă electronică să poată fi configurat să utilizeze, la rândul său, un server IMAP4.

### 11.5.1. Noțiuni de bază privind datele de poștă electronică

Datele de poștă electronică (SMTP) trebuie să se limiteze la șiruri de date de 7 biți. Astfel, datele binare și datele text de 8 biți sunt codificate în format de 7 biți cu ajutorul Multipurpose Internet Mail Extensions (MIME) și selectarea setului de caractere (a se vedea Tabel 11.2, „Lista valorilor de codificare și utilizarea acestora”).

Formatul standard de stocare a mesajelor de poștă electronică este mbox, conform standardului RFC2822 (versiunea actualizată a RFC822). A se vedea mbox(5) (furnizat de pachetul `mutt`).

În cazul limbilor europene, pentru mesaje se utilizează de obicei „`Content-Transfer-Encoding: quoted-printable`” cu setul de caractere ISO-8859-1, deoarece nu există prea multe caractere pe 8 biți. Dacă textul european este codificat în UTF-8, este probabil să se utilizeze „`Content-Transfer-Encoding: quoted-printable`”, deoarece este vorba în mare parte de date pe 7 biți.

În cazul limbii japoneze, se folosește de obicei „`Content-Type: text/plain; charset=ISO-2022-JP`” pentru mesaje, pentru a păstra textul în format pe 7 biți. Totuși, sistemele Microsoft mai vechi pot trimite date de poștă electronică în format Shift-JIS fără o declarare corespunzătoare. Dacă textul japonez este codificat în UTF-8, este probabil să se utilizeze Base64, deoarece conține multe date de 8 biți. Situația altor limbi asiatice este similară.

| Notă
Dacă datele dvs. de poștă electronică non-Unix sunt accesibile printr-un program client non-Debian capabil să comunice cu un server IMAP4, este posibil să le puteți transfera rulând propriul server IMAP4.

| Notă
Dacă utilizați alte formate de stocare a mesajelor, un prim pas util este să le convertiți în format mbox. Un program client versatil, precum mutt(1), vă poate fi de ajutor în acest sens.

Puteți împărți conținutul căsuței poștale în fiecare mesaj folosind procmail(1) și formail(1).

Fiecare mesaj de poștă electronică poate fi despachetat folosind comanda munpack(1) din pachetul `mpack` (sau alte instrumente specializate) pentru a obține conținutul codificat MIME.

## 11.6. Instrumente pentru date grafice

Deși programele cu interfață grafică, precum gimp(1), sunt foarte puternice, instrumentele de linie de comandă, precum imagemagick(1), sunt destul de utile pentru automatizarea manipulării imaginilor prin intermediul scripturilor.

Formatul de fișier imagine utilizat de facto de aparatele foto digitale este Exchangeable Image File Format (EXIF), care este formatul de fișier imagine JPEG cu etichete de metadate suplimentare. Acesta poate stoca informații precum data, ora și configurările aparatului foto.

Patentul Lempel-Ziv-Welch (LZW) pentru compresia fără pierderi a datelor a expirat. Instrumentele Graphics Interchange Format (GIF) care utilizează metoda de compresie LZW sunt acum disponibile fără restricții în sistemul Debian.

| Indicație
Orice aparat foto digital sau scaner cu suport de stocare detașabil funcționează cu Linux prin intermediul cititoarelor de stocare USB, deoarece respectă Regula de proiectare pentru sistemul de fișiere al aparatului foto și utilizează sistemul de fișiere FAT. A se vedea Secțiune 10.1.7, „Dispozitive de stocare amovibile (detașabile)”.

### 11.6.1. Instrumente pentru date grafice (metapachet)

Următoarele metapachete constituie un bun punct de plecare pentru căutarea instrumentelor de gestionare a datelor grafice folosind aptitude(8). „Prezentarea pachetelor pentru responsabilii de întreținere ai Debian PhotoTools” poate fi un alt punct de plecare.

Tabel 11.17. Lista instrumentelor pentru date grafice (metapachet)

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`education-graphics` | I:0.34 | 25 | svg, jpeg, … | metapachet pentru predarea graficii și a artelor plastice.
`open-font-design-toolkit` | I:0.06 | 9 | ttf, ps, … | metapachet pentru proiectarea fonturilor deschise

| Indicație
Căutați mai multe instrumente pentru imagini folosind expresia regulată „`~Gworks-with::image`” în aptitude(8) (a se vedea Secțiune 2.2.6, „Opțiuni pentru metoda de căutare cu aptitude”).

### 11.6.2. Instrumente pentru date grafice (cu interfață grafică)

Următoarele pachete de instrumente cu interfață grafică pentru conversia, editarea și organizarea datelor grafice mi-au atras atenția.

Tabel 11.18. Lista instrumentelor pentru date grafice (cu interfață grafică)

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`gimp` | V:41, I:214 | 32779 | imagine (bitmap) | GNU Image Manipulation Program -- Program GNU de manipulare a imaginilor
`xsane` | V:8, I:129 | 1512 | imagine (bitmap) | interfață X11 bazată pe GTK pentru SANE (Scanner Access Now Easy)
`scribus` | V:1, I:12 | 32415 | ps/pdf/SVG/… | editorul DTP Scribus
`libreoffice-draw` | V:91, I:414 | 11209 | imagine (vectorială) | suita de birou LibreOffice - desen
`inkscape` | V:11, I:76 | 113353 | imagine (vectorială) | editor SVG (Scalable Vector Graphics)
`dia` | V:1, I:15 | 3846 | imagine (vectorială) | editor de diagrame (Gtk)
`xfig` | V:0.8, I:8.4 | 7951 | imagine (vectorială) | instrument pentru generarea interactivă de figuri în mediul X11
`gocr` | V:0.4, I:3.8 | 549 | image→text | program liber de recunoaștere optică a caracterelor
`eog` | V:24, I:137 | 10535 | imagine (Exif) | programul de vizualizare a imaginilor Eye of GNOME
`gthumb` | V:3, I:12 | 5162 | imagine (Exif) | vizor de imagini și navigator (GNOME)
`geeqie` | V:3, I:11 | 3135 | imagine (Exif) | vizor de imagini care utilizează GTK
`shotwell` | V:14, I:243 | 6334 | imagine (Exif) | organizator de fotografii digitale (GNOME)
`gwenview` | V:39, I:115 | 6000 | imagine (Exif) | vizor de imagini (KDE)
`kamera` | I:114 | 992 | imagine (Exif) | suport pentru camere digitale în aplicațiile KDE
`digikam` | V:1.5, I:8.6 | 325 | imagine (Exif) | aplicație de gestionare a fotografiilor digitale pentru KDE
`darktable` | V:4, I:11 | 35876 | imagine (Exif) | masă de lumină și cameră obscură virtuală pentru fotografi
`hugin` | V:0.4, I:5.7 | 6481 | imagine (Exif) | program de asamblare a fotografiilor panoramice
`librecad` | V:1, I:12 | 9164 | DXF, ... | editor de date CAD 2D
`freecad` | V:1, I:19 | 112 | DXF, ... | editor de date CAD 3D
`blender` | V:2, I:19 | 169320 | blend, TIFF, VRML, … | editor de conținut 3D pentru animație etc.
`mm3d` | V:0.02, I:0.26 | 4123 | ms3d, obj, dxf, … | editor de modele 3D bazat pe OpenGL
`fontforge` | V:0.5, I:5.8 | 4736 | ttf, ps, … | editor de fonturi pentru fonturi PS, TrueType și OpenType
`xgridfit` | V:0.01, I:0.10 | 878 | ttf | program pentru adaptarea la grilă și ajustarea contururilor fonturilor TrueType

### 11.6.3. Instrumente pentru date grafice (cu interfață de linie de comandă)

Următoarele pachete de instrumente cu interfață de linie de comandă pentru conversia, editarea și organizarea datelor grafice mi-au atras atenția.

Tabel 11.19. Lista instrumentelor pentru date grafice (cu interfață de linie de comandă)

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`imagemagick` | V:7, I:275 | 81 | imagine (bitmap) | programe de manipulare a imaginilor
`graphicsmagick` | V:1.0, I:8.8 | 5945 | imagine (bitmap) | programe de manipulare a imaginilor (o variantă a `imagemagick`)
`netpbm` | V:26, I:285 | 8435 | imagine (bitmap) | instrumente de conversie grafică
`libheif-examples` | V:0.3, I:3.6 | 503 | heif→jpeg(bitmap) | convertește High Efficiency Image File Format (HEIF) în formatele JPEG, PNG sau Y4M cu comanda heif-convert(1)
`icoutils` | V:3, I:33 | 221 | png↔ico(bitmap) | convertește pictogramele și cursorii MS Windows în și din formatul PNG (favicon.ico)
`pstoedit` | V:1, I:37 | 1075 | ps/pdf→imagine (vectorială) | convertor de fișiere PostScript și PDF în grafică vectorială editabilă (SVG)
`libwmf-bin` | V:4, I:81 | 149 | Windows/imagine (vectorială) | instrumente de conversie a meta-fișierelor Windows (date grafice vectoriale)
`fig2sxd` | V:0.01, I:0.18 | 158 | fig→sxd(vectorial) | convertește fișierele XFig în formatul OpenOffice.org Draw
`unpaper` | V:2, I:17 | 417 | imagine→imagine | instrument de post-procesare a paginilor scanate pentru OCR
`tesseract-ocr` | V:8, I:35 | 2209 | image→text | software OCR liber bazat pe motorul OCR comercial al HP
`tesseract-ocr-eng` | V:8, I:35 | 4032 | image→text | motor de date OCR: fișiere de limbă tesseract-ocr pentru text în limba engleză
`ocrad` | V:0.3, I:2.5 | 608 | image→text | program liber de recunoaștere optică a caracterelor
`exif` | V:3, I:51 | 335 | imagine (Exif) | instrument de linie de comandă pentru afișarea informațiilor EXIF din fișierele JPEG
`exiv2` | V:2, I:20 | 429 | imagine (Exif) | instrument de manipulare a metadatelor EXIF/IPTC
`exiftran` | V:1, I:11 | 81 | imagine (Exif) | transformă imaginile JPEG realizate cu aparatul foto digital
`exiftags` | V:0.2, I:2.8 | 309 | imagine (Exif) | instrument pentru citirea etichetelor Exif dintr-un fișier JPEG provenit de la un aparat foto digital
`exifprobe` | V:0.2, I:2.3 | 506 | imagine (Exif) | citește metadatele din imaginile digitale
`dcraw` | V:0.8, I:7.7 | 428 | imagine(Raw)→ppm | decodifică imaginile brute ale aparatului foto digital
`findimagedupes` | V:0.1, I:1.1 | 76 | image→amprentă digitală(fingerprint) | găsește imagini similare din punct de vedere vizual sau duplicate
`ale` | V:0.01, I:0.16 | 850 | imagine→imagine | fuzionează imagini pentru a îmbunătăți calitatea sau pentru a crea mozaicuri
`imageindex` | V:0.1, I:1.3 | 143 | imagine (Exif)→html | generează galerii HTML statice din imagini
`outguess` | V:0.1, I:1.1 | 230 | jpeg,png | instrument Stenografic universal
`jpegoptim` | V:0.6, I:6.2 | 59 | jpeg | optimizează fișierele JPEG
`optipng` | V:2, I:40 | 187 | png | optimizează fișierele PNG, compresie fără pierderi
`pngquant` | V:1, I:12 | 62 | png | optimizează fișierele PNG, compresie cu pierderi

## 11.7. Conversii diverse de date

Există multe alte programe pentru conversia datelor. Următoarele pachete mi-au atras atenția folosind expresia regulată „`~Guse::converting`” în aptitude(8) (a se vedea Secțiune 2.2.6, „Opțiuni pentru metoda de căutare cu aptitude”).

Tabel 11.20. Lista instrumentelor diverse de conversie a datelor

pachet | popcon(popularitate) | dimensiune | cuvânt-cheie | descriere
--- | --- | --- | --- | ---
`alien` | V:1, I:13 | 150 | rpm/tgz→deb | convertor pentru transformarea pachetelor externe în pachete Debian
`freepwing` | I:0.02 | 447 | EB→EPWING | convertor de la formatul „Electric Book” (popular în Japonia) la un singur format JIS X 4081 (un subset al formatului EPWING V1)
`calibre` | V:7, I:26 | 69924 | orice→EPUB | convertor de cărți electronice și gestionarea bibliotecii

De asemenea, puteți extrage date din fișiere în format RPM folosind următoarea comandă.

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

Cap. 10. Gestionarea datelor |  | Cap. 12. Programare