Capítulo 11. Conversão de dados

# Capítulo 11. Conversão de dados

São descritas ferramentas e dicas para converter formatos de dados no sistema Debian.

As ferramentas baseadas em standards são muitos boas mas o suporte para formatos proprietários de dados é limitado.

## 11.1. Ferramentas de conversão de dados em texto

Os seguintes pacotes para a conversão de dados de texto saltaram-me à vista.

Tabela 11.1. Lista de ferramentas de conversão de dados em texto

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`libc6` | V:940, I:999 | 5355 | conjunto e caracteres (charset) | converter codificação de texto entre locales por iconv(1) (fundamental)
`recode` | V:2, I:13 | 528 | charset+eol | conversor de codificação de texto entre locales (versátil, com mais nomes alternativos (alias) e funcionalidades)
`konwert` | V:2, I:42 | 137 | conjunto e caracteres (charset) | conversor de codificação de texto entre locales (imaginativo)
`nkf` | V:0.4, I:8.5 | 359 | conjunto e caracteres (charset) | tradutor de conjunto de caracteres para Japonês
`tcs` | V:0.01, I:0.14 | 518 | conjunto e caracteres (charset) | tradutor de conjunto de caracteres
`unaccent` | V:0.03, I:0.30 | 35 | conjunto e caracteres (charset) | substitui letras acentuadas pelo seu equivalente não acentuado
`tofrodos` | V:1, I:13 | 50 | eol | conversor de formato de texto entre DOS e Unix: `de dos`(1) e `para dos`(1)
`macutils` | V:0.04, I:0.45 | 319 | eol | conversor de formato de texto entre Macintosh e Unix: `de mac`(1) e `para mac`(1)

### 11.1.1. Converter um ficheiro de texto com o iconv

| Dica
iconv(1) é disponibilizado como parte do pacote `libc6` e está sempre disponível em praticamente todos os sistemas tipo Unix para converter a codificação de caracteres.

Pode converter a codificação de um ficheiro de texto com o iconv(1) com o seguinte.

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

Os valores de codificação são sensíveis a maiúsculas/minúsculas e ignoram "`-`" e "`_`" para correspondência. As codificações suportadas podem ser verificadas pelo comando "`iconv -l`".

Tabela 11.2. Lista de valores de codificação e a utilização deles

valor de codificação | utilização
--- | ---
ASCII | American Standard Code for Information Interchange, código de 7 bits sem caracteres acentuados
UTF-8 | standard multilingue atual para todos os sistemas operativos modernos
ISO-8859-1 | antigo standard para linguagens da Europa ocidental, ASCII + caracteres acentuados
ISO-8859-2 | antigo standard para linguagens da Europa oriental, ASCII + caracteres acentuados
ISO-8859-15 | antigo standard para linguagens da Europa ocidental, o ISO-8859-1 com o símbolo do euro
CP850 | página de código 850, caracteres DOS da Microsoft com gráficos para linguagens da Europa ocidental, variante ISO-8859-1
CP932 | página de código 932, variante Shift-JIS do estilo Microsoft Windows para Japonês
CP936 | página de código 936, variantes GB2312, GBK ou GB18030 do estilo Microsoft Windows para Chinês Simplificado
CP949 | página de código 949, variante EUC-KR ou or Unified Hangul Code de estilo Microsoft Windows para Coreano
CP950 | página de código 950, variante Big5 de estilo Microsoft Windows para Chinês Tradicional
CP1251 | página de código 1251, codificação estilo Microsoft Windows para o alfabeto Cirílico
CP1252 | página de código 1252, variante ISO-8859-15 de estilo Microsoft Windows para linguagens de Europeu ocidental
KOI8-R | antigo standard Russo de UNIX para o alfabeto Cirílico
ISO-2022-JP | codificação standard para email Japonês que usar apenas códigos de 7 bits
eucJP | antigo standard Unix de Japonês de código de 8 bits e completamente diferente do Shift-JIS
Shift-JIS | JIS X 0208 Appendix 1 standard para Japonês (veja CP932)

| Nota
Algumas codificações são apenas suportadas para conversão de dados e não são usados como valores do regionais (Seção 8.1, “O locale”).

Para os conjuntos de caracteres que cabem num byte único como os conjuntos de caracteres ASCII e ISO-8859, a codificação de caracteres significa quase o mesmo que o conjunto de caracteres.

Para conjuntos de caracteres com muitos caracteres como o JIS X 0213 para Japonês ou Universal Character Set (UCS, Unicode, ISO-10646-1) para praticamente todas as linguagens, existem muitos esquemas de codificação para os pôr na sequência dos dados do byte.

- EUC e ISO/IEC 2022 (também conhecido como JIS X 0202) para Japonês

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

Para estes, existem diferenciações claras entre o conjunto de caracteres e a codificação de caracteres.

A página de código é usada como o sinónimo para as tabelas de codificação de caracteres para alguns específicos de marcas.

| Nota

Por favor note que a maioria dos sistemas de codificação partilham o mesmo código com o ASCII para caracteres de 7 bits. Mas há algumas exceções. Se está a converter programas C antigos Japoneses e dados de URLs a partir do casualmente chamado formato de codificação shift-JIS no formato UTF-8, use "`CP932`" como o nome de codificação em vez de "`shift-JIS`" para obter os resultados esperados: `0x5C` → "`\`" e `0x7E` → "`~`". Caso contrário, estes são convertidos para caracteres errados.

| Dica
O recode(1) também pode ser usado e oferece mais do que as funcionalidades combinadas do iconv(1), fromdos(1), todos(1), frommac(1) e tomac(1). Para mais, veja "`info recode`".

### 11.1.2. Verifica ficheiro se é UTF-8 com o iconv

Pode verificar se um ficheiro de texto está codificado em UTF-8 com o iconv(1) com o seguinte.

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

| Dica
Use a opção "`--verbose`" no exemplo em cima para encontrar o primeiro caractere não-UTF-8.

### 11.1.3. Converter os nomes dos ficheiros com o iconv

Aqui está um script de exemplo para converter a codificação dos nomes de ficheiros daqueles criados sob sistemas operativos antigos para os modernos de UTF-8 num único diretório.

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

A variável "`$ENCDN`" especifica a codificação original usada para nomes de ficheiros sob SOs mais antigos em Tabela 11.2, “Lista de valores de codificação e a utilização deles”.

Para um caso mais complicado, por favor monte um sistema de ficheiros (ex. uma partição de uma unidade de disco) que contenha tais nomes de ficheiros com a codificação apropriada como opção do mount(8) (veja Seção 8.1.3, “Codificação de nomes de ficheiros”) e copie o conteúdo dele inteiro para outro sistema de ficheiros montado como UTF-8 com o comando "`cp -a`".

### 11.1.4. conversão EOL

O formato de ficheiro de texto, especificamente o código de fim de linha (EOL), é dependente da plataforma.

Tabela 11.3. Lista de estilos EOL para diferentes plataformas

plataforma | código EOL | controle | decimal | hexadecimal
--- | --- | --- | --- | ---
Debian (unix) | LF | `^J` | 10 | 0A
MSDOS e Windows | CR-LF | `^M^J` | 13 10 | 0D 0A
Macintosh da Apple | CR | `^M` | 13 | 0D

Os programas de conversão de formato EOL, fromdos(1), todos(1), frommac(1), e tomac(1), são muito úteis. O recode(1) também é útil.

| Nota
Alguns dados no sistema Debian, como os dados da página wiki para o pacote `python-moinmoin`, usam o estilo MSDOS (CR-LF) como o código de EOL. Então a regra em cima é apenas uma regra geral.

| Nota
A maioria dos editores (ex. `vim`, `emacs`, `gedit`, …) podem lidar com ficheiros em estilo EOL de MSDOS transparentemente.

| Dica
O uso de "`sed -e '/\r$/!s/$/\r/'`" em vez de todos(1) é melhor quando pretende unificar o estilo de EOL para o estilo do MSDOS a partir da mistura de estilos de MSDOS e Unix. (ex. após fundir 2 ficheiros de estilo MSDOS com o diff3(1).) Isto porque o `todos` adiciona CR a todas as linhas.

### 11.1.5. Conversão de TAB

Existem alguns programas populares especializados para converter os códigos de tab.

Tabela 11.4. Lista de comandos de conversão de TAB dos pacotes `bsdmainutils` e `coreutils`

função | `bsdmainutils` | `coreutils`
--- | --- | ---
expande tab para espaços | "`col -x`" | `expand`
contrai tab a partir de espaços | "`col -h`" | `unexpand`

indent(1) do pacote `indent` reformata completamente os espaços em branco no programa C.

Os programas editores como o `vim` e o `emacs` também podem ser usados para conversão de TAB. Por exemplo com o `vim`, pode expandir a TAB com a sequência de comandos "`:set expandtab`" e "`:%retab`". Pode reverter isto com a sequência de comandos "`:set noexpandtab`" e "`:%retab!`".

### 11.1.6. Editores com auto-conversão

Os editores modernos inteligentes como o programa `vim` são bastante inteligentes e lidam bem com quaisquer sistemas de codificação e quaisquer formatos de ficheiro. Deve usar estes editores sob o locale UTF-8 numa consola com capacidades de UTF-8 para melhor compatibilidade.

Um antigo ficheiro de texto Unix em Europeu ocidental, "`u-file.txt`", armazenado com a codificação latin1 (iso-8859-1) pode ser editado com o `vim` com o seguinte.

    $ vim u-file.txt

Isto é possível porque o mecanismo de auto detecção da codificação do ficheiro no `vim` assume primeiro a codificação UTF-8 e, se falhar, assume que é latin1.

Um antigo ficheiro de texto Unix em Polaco, "`pu-file.txt`", armazenado com a codificação latin2 (iso-8859-2) pode ser editado com o `vim` com o seguinte.

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

Um antigo ficheiro de texto unix em Japonês, "`ju-file.txt`", armazenado com a codificação eucJP pode ser editado com o `vim` com o seguinte.

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

Um antigo ficheiro de texto do MS Windows em Japonês, "`jw-file.txt`", armazenado na chamada codificação shift-JIS (mais precisamente: CP932) pode ser editado com o `vim` com o seguinte.

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

Quando um ficheiro é aberto com as opções "`++enc`" e "`++ff`", o "`:w`" na linha de comandos do Vim guarda-o no formato original e sobrescreve o ficheiro original. Também pode especificar o formato de gravação e o nome do ficheiro na linha de comandos do Vim, ex., "`:w ++enc=utf8 new.txt`".

Por favor consulte o mbyte.txt "suporte a texto multi-byte" na ajuda on-line do `vim` e Tabela 11.2, “Lista de valores de codificação e a utilização deles” para os valores de locale usados com "`++enc`".

A família de programas `emacs` pode executar as funções equivalentes.

### 11.1.7. Extracção de texto simples

O seguinte lê uma página web para um ficheiro de texto. Isto é muito útil quando se copia as configurações da Web ou se aplica ferramentas de texto básicas do Unix como o grep(1) numa página web.

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

De modo semelhante, pode extrair dados de texto simples a partir de outros formatos a usar o seguinte.

Tabela 11.5. Lista de ferramentas para extracção de dados de texto simples

pacote | popcon | tamanho | palavra chave | função
--- | --- | --- | --- | ---
`w3m` | V:11, I:137 | 2853 | html→texto | Conversor de HTML para texto com o comando "`w3m -dump`"
`html2text` | V:3, I:68 | 298 | html→texto | Conversor de HTML para texto avançado (ISO 8859-1)
`lynx` | V:28, I:449 | 2031 | html→texto | Conversor de HTML para texto com o comando "`lynx -dump`"
`elinks` | V:3, I:16 | 1789 | html→texto | Conversor de HTML para texto com o comando "`elinks -dump`"
`links` | V:2, I:21 | 2321 | html→texto | Conversor de HTML para texto com o comando "`links -dump`"
`links2` | V:1, I:10 | 5466 | html→texto | Conversor de HTML para texto com o comando "`links2 -dump`"
`catdoc` | V:15, I:171 | 682 | MSWord→texto,TeX | converte ficheiros do MSWord para texto simples ou TeX
`antiword` | V:0.9, I:6.5 | 587 | MSWord→texto,ps | converte ficheiros do MSWord para texto simples ou ps
`unhtml` | V:0.04, I:0.50 | 40 | html→texto | remove as etiquetas de marcas de um ficheiro HTML
`odt2txt` | V:1, I:21 | 60 | odt→texto | conversor de texto do OpenDocument para texto

### 11.1.8. Destacar e formatar dados de texto simples

Pode destacar e formatar dados de texto simples com o seguinte.

Tabela 11.6. Lista de ferramentas para destacar dados em texto simples

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`vim-runtime` | V:17, I:365 | 38706 | destaque | MACRO do Vim para converter código fonte em HTML com "`:source $VIMRUNTIME/syntax/html.vim`"
`cxref` | V:0.03, I:0.23 | 1191 | c→html | conversor de programa C para latex e HTML (linguagem C)
`src2tex` | V:0.02, I:0.18 | 1799 | destaque | converte muitos códigos fonte para TeX (linguagem C)
`source-highlight` | V:0.5, I:3.2 | 2131 | destaque | converte muitos códigos fonte para HTML, XHTML, LaTeX, Texinfo, sequências de escape do cores ANSI e ficheiros do DocBook com destaques (C++)
`highlight` | V:0.4, I:3.1 | 1411 | destaque | converte muitos códigos fonte para HTML, XHTML, RTF, LaTeX, TeX ou ficheiros XSL-FO com destaques (C++)
`grc` | V:1.0, I:6.0 | 208 | texto→cor | colorizador genérico para tudo (Python)
`pandoc` | V:10, I:47 | 208068 | texto→qualquer | conversor geral de markup (Haskell)
`python3-docutils` | V:12, I:52 | 2009 | texto→qualquer | Formatador de documento de Texto Re-Estruturado para XML (Python)
`markdown` | V:0.5, I:5.9 | 56 | texto→html | Formatador de documentos de texto Markdown para (X)HTML (Perl)
`asciidoctor` | V:0.4, I:4.8 | 101 | texto→qualquer | Formatador de documentos de texto AsciiDoc para XML/HTML (Ruby)
`python3-sphinx` | V:6, I:27 | 3235 | texto→qualquer | Sistema de publicação de documentos baseado em texto reestruturado (Python)
`hugo` | V:0.8, I:5.1 | 66608 | texto→html | Sistema de publicação de sites estáticos baseado em Markdown (Go)

## 11.2. Dados XML

A The Extensible Markup Language (XML) é uma linguagem de marcação para documentos que contêm informação estruturada.

Veja informação de introdução em XML.COM.

- "O que é XML?"

- "O que é XSLT?"

- "O que é XSL-FO?"

- "O que é XLink?"

### 11.2.1. Dicas básicas para XML

O texto em XML parece-se com HTML. Permite-nos gerir múltiplos formatos de saída de um documento. Um sistema XML fácil é o pacote `docbook-xsl`, o qual é usado aqui.

Cada ficheiro XML começa com a declaração XML standard como o seguinte.

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

A sintaxe básica para um elemento XML é marcado como a seguir.

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

O elemento XML com conteúdo vazio é marcado no seguinte formato curto.

    <name attribute="value" />

O "`atributo="valor"`" nos exemplos em cima é opcional.

A secção de comentários em XML está marcada como a seguir.

    <!-- comment -->

Em vez de adicionar marcações, o XML requer conversão menor ao conteúdo a usar entidades predefinidas para os seguintes caracteres.

Tabela 11.7. Lista de entidades predefinidas para XML

entidade predefinida | caractere a ser convertido em
--- | ---
`&quot;` | `"` : cotação
`&apos;` | `'` : apóstrofo
`&lt;` | `<` : menor-que
`&gt;` | `>` : maior-que
`&amp;` | `&` : ampersand

| Cuidado
"`<`" ou "`&`" não podem ser usados em atributos ou elementos.

| Nota
Quando são utilizadas entidades definidas pelo utilizador ao estilo SGML, por exemplo,"`&some-tag;`", a primeira definição ganha às outras. A definição da entidade é expressa em "`<!ENTITY some-tag "entity value">`".

| Nota
Desde que as marcações de XML sejam feitas de modo consistente com um certo conjunto de nomes de etiquetas (em vez de alguns dados como conteúdo ou valor de atributo), a conversão para outro XML é uma tarefa trivial a usar Extensible Stylesheet Language Transformations (XSLT).

### 11.2.2. Processamento de XML

Existem muitas ferramentas disponíveis para processar ficheiros XML como o Extensible Stylesheet Language (XSL).

Basicamente, após criar um ficheiro XML bem formado, pode convertê-lo para qualquer formato a usar o Extensible Stylesheet Language Transformations (XSLT).

A Extensible Stylesheet Language for Formatting Objects (XSL-FO) é suposto ser a solução para a formatação. O pacote `fop` é novo no arquivo `main` de Debian devido à sua dependência da linguagem de programação Java. Por isso o código LaTeX é normalmente gerado a partir de XML a utilizar XSLT e o sistema LaTeX é utilizado para criar ficheiros imprimíveis tais como DVI, PostScript e PDF.

Tabela 11.8. Lista de ferramentas XML

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`docbook-xml` | V:15, I:408 | 2126 | xml | definição de tipo de documento XML (DTD) para DocBook
`docbook-xsl` | V:14, I:145 | 14823 | xml/xslt | folhas de estilo XSL para processar XML do DocBook para vários formatos de saída com XSLT
`xsltproc` | V:15, I:73 | 83 | xslt | processador de linha de comandos XSLT (XML→ XML, HTML, texto simples, etc.)
`xmlto` | V:0.5, I:8.6 | 124 | xml/xslt | conversor de XML-para-qualquer com XSLT
`fop` | V:0.7, I:8.1 | 281 | xml/xsl-fo | converter ficheiros Docbook XML para PDF
`dblatex` | V:0.9, I:5.8 | 4636 | xml/xslt | converte ficheiros do Docbook para documentos DVI, PostScript, PDF com o XSLT
`dbtoepub` | V:0.05, I:0.50 | 37 | xml/xslt | conversor de XML DocBook para .epub

Como o XML é um sub-conjunto da Standard Generalized Markup Language (SGML), pode ser processado pelas ferramentas extensivas disponíveis para SGML, como o Document Style Semantics and Specification Language (DSSSL).

Tabela 11.9. Lista de ferramentas DSSSL

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`openjade` | V:1, I:22 | 1066 | dsssl | ISO/IEC 10179:1996 processador DSSSL standard (mais recente)
`docbook-dsssl` | V:0.5, I:7.9 | 2594 | xml/dsssl | folhas de estilo DSSSL para processar XML do DocBook para vários formatos de saída com DSSSL
`docbook-utils` | V:0.4, I:5.6 | 287 | xml/dsssl | utilitários para ficheiros do DocBook incluindo a conversão para outros formatos (HTML, RTF, PS, man, PDF) com comandos `docbook2*` com DSSSL

| Dica
O `yelp` do GNOME é útil, às vezes, para ler arquivos XML do DocBook diretamente pois ele renderiza diretamente no X.

### 11.2.3. A extracção de dados de XML

Pode extrair dados de HTML ou XML a partir de outros formatos a usar os seguintes.

Tabela 11.10. Lista de ferramentas de extracção de dados de XML

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`man2html` | V:0.1, I:1.3 | 142 | manpage→html | conversor de manual (manpage) para HTML (suporte a CGI)
`doclifter` | V:0.01, I:0.05 | 487 | troff→xml | conversor de troff para DocBook XML
`texi2html` | V:0.2, I:3.0 | 1847 | texi→html | conversor de Texinfo para HTML
`info2www` | V:0.9, I:1.5 | 76 | info→html | conversor de info do GNU para HTML (suporte a CGI)
`wv` | V:0.2, I:2.5 | 733 | MSWord→qualquer | conversor de documentos Microsoft Word para HTML, LaTeX, etc.
`unrtf` | V:0.3, I:2.9 | 159 | rtf→html | conversor de documentos de RTF para HTML, etc
`wp2x` | V:0.01, I:0.09 | 200 | WordPerfect→qualquer | Ficheiros do WordPerfect 5.0 e 5.1 para TeX, LaTeX, troff, GML e HTML

### 11.2.4. O lint de dados XML

Para ficheiros HTML não-XML, pode convertê-los para XHTML o que é uma instância de XML bem formado. O XHTML pode ser processado por ferramentas de XML.

É possível verificar a sintaxe dos ficheiros XML e a qualidade dos URLs neles contidos.

Tabela 11.11. Lista de ferramentas de impressão bonita de XML

pacote | popcon | tamanho | função | descrição
--- | --- | --- | --- | ---
`libxml2-utils` | V:62, I:209 | 211 | xml↔html↔xhtml | ferramenta de XML de linha de comandos com xmllint(1) (verificação de sintaxe, reformatação, lint, …)
`tidy` | V:0.9, I:7.3 | 79 | xml↔html↔xhtml | Verificador e reformatador de sintaxe HTML
`weblint-perl` | V:0.06, I:0.91 | 32 | lint | Verificado de sintaxe e estilo mínimo para HTML
`linklint` | V:0.06, I:0.47 | 343 | verificação da ligação | verificador de ligações rápido e ferramenta de manutenção de sites web

Após o XML apropriado ser gerado, pode usar a tecnologia XSLT para extrair dados baseados no contexto de marcações e etc.

## 11.3. Formatação de texto

O programa troff do Unix desenvolvido originalmente pela AT&T pode ser usado para formatação de texto simples. É geralmente usado para criar as páginas de manual (manpages).

O TeX criado por Donald Knuth é uma ferramenta de formatação de texto muito poderosa e é o standard de facto. O LaTeX originalmente escrito por Leslie Lamport permite um acesso de alto nível ao poder do TeX.

Tabela 11.12. Lista de ferramentas de formatação de texto

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`texlive` | V:1, I:28 | 55 | (La)TeX | sistema TeX para formatação de texto, pre-visualização e impressão
`groff` | V:2, I:24 | 16514 | troff | O sistema de formato de texto troff do GNU

### 11.3.1. formatação de texto roff

Tradicionalmente, o roff é o sistema de processamento de texto principal do Unix. Veja 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`".

Você pode ler ou imprimir um bom tutorial e referência sobre a macro "`-me`" em "`/usr/share/doc/groff/`" ao instalar o pacote `groff`.

| Dica
"`groff -Tascii -me -`" produz resultados em texto simples com código de escape ANSI. Se deseja obter resultados tipo manpage com muitos "^H" e "_", então use "`GROFF_NO_SGR=1 groff -Tascii -me -`".

| Dica
Para remover "^H" e "_" de um ficheiro de texto gerado pelo `groff`, filtre-o com "`col -b -x`".

### 11.3.2. TeX/LaTeX

A distribuição de software TeX Live oferece um sistema TeX completo. O meta-pacote `texlive` disponibiliza uma seleção decente dos pacotes TeX Live que deverão ser suficientes para as tarefas mais comuns.

Existem muitas referências disponíveis para TeX e LaTeX.

- O HOWTO do The teTeX: O Guia Local de Linux-teTeX

- tex(1)

- latex(1)

- texdoc(1)

- texdoctk(1)

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

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

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

Este é o ambiente de formatação de texto mais poderoso. Muitos processadores SGML usam isto como processador de texto em backend. O Lyx disponibilizado pelo pacote `lyx` e o GNU TeXmacs disponibilizado pelo pacote `texmacs` oferecem um bom ambiente de edição OQVEOQT para o LaTeX enquanto muitos usam o Emacs e o Vim como a sua escolha para editor de código fonte.

Existem muitos recursos online disponíveis.

- O Guia TEX Live - TEX Live 2007 ("`/usr/share/doc/texlive-doc-base/english/texlive-en/live.html`") (pacote `texlive-doc-base` package)

- Um Guia Simples para o Latex/Lyx

- Processamento de Texto a Usar o LaTeX

Quando os documentos ficam maiores, por vezes o TeX pode causar erros. tem de aumentar o tamanho do pool em "`/etc/texmf/texmf.cnf`" (ou mais apropriadamente editar o "`/etc/texmf/texmf.d/95NonPath`" e correr update-texmf(8)) para corrigir isto.

| Nota

A fonte TeX de "The TeXbook" está disponível em www.ctan.org site de arquivo-tex para texbook.tex. Este ficheiro contém a maior parte das macros necessárias. Ouvi dizer que pode processar este documento com o tex(1) depois de comentar as linhas 7 a 10 e adicionar "`\input manmac \proofmodefalse`". Recomenda-se fortemente a compra deste livro (e de todos os outros livros de Donald E. Knuth) em vez de usar a versão online, mas a fonte é um ótimo exemplo de entrada TeX!

### 11.3.3. Impressão bonita de um manual

Consegue uma impressão bonita dum manual em PostScript com um dos seguintes comandos.

    $ man -Tps some_manpage | lpr

### 11.3.4. Criar um manual

Apesar de escrever um manual (manpage) no formato troff simples ser possível, existem alguns programas que ajudam a criá-lo.

Tabela 11.13. Lista de pacotes para ajudar a criar o manual (manpage)

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`docbook-to-man` | V:0.6, I:5.7 | 189 | SGML→manpage | conversor de DocBook SGML para macros roff man
`help2man` | V:0.6, I:6.3 | 542 | texto→manpage | geração automática de manual a partir do --help
`info2man` | V:0.01, I:0.19 | 134 | info→manpage | conversor de info do GNU para POD ou páginas man
`txt2man` | V:0.06, I:0.64 | 112 | texto→manpage | converte texto ASCII simples para o formato de página man

## 11.4. Dados imprimíveis

Os dados imprimíveis são expressos no formato PostScript no sistema Debian. O Common Unix Printing System (CUPS) usa o Ghostscript como o programa backend de rasterização dele para as impressoras não-PostScript.

Os dados imprimíveis também podem ser expressos no formato PDF no recente sistema Debian.

Os ficheiros PDF podem ser visualizados e as suas entradas de formulário podem ser preenchidas utilizando ferramentas de visualização GUI como o Evince e o Okular (ver Seção 7.4, “Aplicações GUI”); e navegadores modernos como o Chromium.

Os ficheiros PDF podem ser editados utilizando algumas ferramentas gráficas como o LibreOffice, o Scribus e o Inkscape (ver Seção 11.6, “Ferramentas de dados gráficos”).

| Dica
É possível ler um ficheiro PDF com o GIMP e convertê-lo para o formato PNG com uma resolução superior a 300 dpi. Esta pode ser utilizada como imagem de fundo para o LibreOffice para produzir uma impressão alterada desejável com o mínimo de esforço.

### 11.4.1. Ghostscript

O núcleo da manipulação de dados imprimíveis é o interpretador PostScript (PS) Ghostscript o qual gera imagem em rasterização.

Tabela 11.14. Lista de interpretadores PostScript Ghostscript

pacote | popcon | tamanho | descrição
--- | --- | --- | ---
`ghostscript` | V:142, I:563 | 177 | O interpretador de PostScript/PDF Ghostscript GPL
`ghostscript-x` | V:0, I:15 | 88 | Interpretador de PostScript/PDF Ghostscript GPL - suporte a ecrã X
`libpoppler156` | V:9, I:16 | 4989 | Biblioteca de renderização de PDF que é um fork do visualizador de PDF xpdf
`libpoppler-glib8t64` | V:68, I:297 | 576 | Biblioteca de renderização de PDF (biblioteca de partilha baseada em GLib)
`poppler-data` | V:150, I:585 | 13086 | CMaps para suporte à biblioteca de renderização de PDF (para CJK: Adobe-*)

| Dica
"`gs -h`" pode mostrar a configuração do Ghostscript.

### 11.4.2. Juntar dois ficheiros PS ou PDF

Pode unir dois ficheiros PostScript (PS) ou Portable Document Format (PDF) a usar o gs(1) do 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
O PDF, que é um formato de dados imprimíveis amplamente usado em várias plataformas, é essencialmente o formato PS comprimido com algumas funcionalidades e extensões adicionais.

| Dica
Para a linha de comandos, o psmerge(1) e outros comandos do pacote `psutils` são úteis para manipular documentos em PostScript. O pdftk(1) do pacote `pdftk` também é útil para manipular documentos em PDF.

### 11.4.3. Utilitários de dados imprimíveis

Os seguintes pacotes para utilitários de dados imprimíveis chamaram a minha atenção.

Tabela 11.15. Lista de utilitários de dados imprimíveis

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`poppler-utils` | V:106, I:474 | 756 | pdf→ps,text,… | Utilitários de PDF: `pdftops`, `pdfinfo`, `pdfimages`, `pdftotext`, `pdffonts`
`psutils` | V:4, I:51 | 34 | ps→ps | Ferramentas de conversão de documentos PostScript
`poster` | V:0.1, I:1.7 | 57 | ps→ps | criar grandes posters de páginas PostScript
`enscript` | V:1, I:11 | 2138 | text→ps, html, rtf | converter texto ASCII para PostScript, HTML, RTF ou Pretty-Print
`a2ps` | V:0.7, I:7.1 | 4109 | text→ps | Conversor de 'Qualquer coisa para PostScript' e pretty-printer
`pdftk` | V:1, I:22 | 28 | pdf→pdf | Ferramenta de conversão de documentos PDF: `pdftk`
`html2ps` | V:0.1, I:1.7 | 256 | html→ps | conversor de HTML para PostScript
`gnuhtml2latex` | V:0.05, I:0.58 | 26 | html→latex | conversor de html para latex
`latex2rtf` | V:0.1, I:2.1 | 495 | latex→rtf | conversor de documentos LaTeX para RTF que podem ser lidos pelo MS Word
`ps2eps` | V:2, I:33 | 95 | ps→eps | conversor de PostScript para EPS (PostScript Encapsulado)
`e2ps` | V:0.01, I:0.11 | 104 | text→ps | Conversor de texto para PostScript com suporte a codificação Japonesa
`impose+` | V:0.1, I:1.5 | 118 | ps→ps | Utilitários do PostScript
`trueprint` | V:0.01, I:0.09 | 148 | text→ps | impressão bonita de muitos códigos fonte (C, C++, Java, Pascal, Perl, Pike, Sh e Verilog) para PostScript. (linguagem C)
`pdf2svg` | V:0.2, I:3.0 | 33 | pdf→svg | conversor de PDF para formato Gráficos vectoriais escaláveis
`pdftoipe` | V:0.01, I:0.46 | 70 | pdf→ipe | conversor de PDF para formato XML de IPE

### 11.4.4. Imprimir com o CUPS

Ambos comandos lp(1) e lpr(1) oferecidos pelo Common Unix Printing System (CUPS) disponibilizam opções para impressão personalizada dos dados a imprimir.

Pode imprimir 3 cópias coligidas de um ficheiro a usar um dos seguintes comandos.

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

Pode personalizar ainda mais as operações da impressora ao usar opções da impressão como "`-o number-up=2`", "`-o page-set=even`", "`-o page-set=odd`", "`-o scaling=200`", "`-o natural-scaling=200`", etc., documentadas em Impressão em Linha de Comandos e Opções.

## 11.5. A conversão de dados de mail

Os seguintes pacotes para conversão de dados de mail chamaram a minha atenção.

Tabela 11.16. Lista de pacotes para ajudar na conversão de dados de mail

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`sharutils` | V:3, I:28 | 1436 | mail | shar(1), unshar(1), uuencode(1), uudecode(1)
`mpack` | V:0.9, I:8.0 | 109 | MIME | codificação e descodificação de mensagens MIME: mpack(1) e munpack(1)
`tnef` | V:0.4, I:4.1 | 103 | ms-tnef | descompactar anexos MIME do tipo "application/ms-tnef" o qual é um formato apenas da Microsoft
`uudeview` | V:0.2, I:1.8 | 105 | mail | codificador e descodificador dos seguintes formatos: uuencode, xxencode, BASE64, quoted printable e BinHex

| Dica
O servidor IMAP4 ( Internet Message Access Protocol versão 4) pode ser utilizado para transferir correio eletrónico de sistemas de correio proprietários se o software cliente de correio puder ser configurado para utilizar também o servidor IMAP4.

### 11.5.1. Noções básicas de dados de mail

Os dados do correio eletrónico (SMTP) devem limitar-se a séries de dados de 7 bits. Assim, os dados binários e os dados de texto de 8 bits são codificados em formato de 7 bits com as Extensões de Correio da Internet para Fins Múltiplos (MIME) e a seleção do conjunto de caracteres (ver Tabela 11.2, “Lista de valores de codificação e a utilização deles”).

O formato de armazenamento de mail standard é mbox de acordo com RFC2822 (RFC822 atualizado). Veja mbox(5) (disponibilizado pelo pacote `mutt`).

Para as linguagens Europeias, "`Content-Transfer-Encoding: quoted-printable`" com o junto de caracteres ISO-8859-1 é geralmente usado para mail porque não existem muitos caracteres de 8 bits. Se o texto Europeu estiver codificado em UTF-8, é provável que seja usado o "`Content-Transfer-Encoding: quoted-printable`" pois é maioritariamente dados de 7 bits.

Para Japonês, tradicionalmente usa-se "`Content-Type: text/plain; charset=ISO-2022-JP`" para o mail para manter o texto em 7 bits. Mas os sistemas mais antigos da Microsoft podem enviar dados de mail em Shift-JIS sem a declaração apropriada. Se o testo Japonês for codificado em UTF-8, é provável que se use Base64 pois contém muitos dados de 8 bits. A situação de outras linguagens Asiáticas é semelhante.

| Nota
Se os seus dados de correio não-Unix são acessíveis por um software cliente não-Debian que pode falar com o servidor IMAP4, pode ser capaz de os mover executando o seu próprio servidor IMAP4.

| Nota
Se usa outros formatos de armazenamento de mail, movê-los para o formato mbox é um bom primeiro passo. Um programa cliente versátil como o mutt(1) pode dar jeito para isto.

Pode dividir os conteúdos da mailbox para cada mensagem a usar o procmail(1) e o formail(1).

Cada mensagem de mail pode ser desempacotada a usar o munpack(1) do pacote `mpack` (ou outras ferramentas especializadas) para obter os conteúdos codificados em MIME.

## 11.6. Ferramentas de dados gráficos

Apesar dos programas com GUI como o gimp(1) serem muito poderosos, as ferramentas de linha de comandos como o imagemagick(1) são bastante úteis para automatizar a manipulação de imagens via scripts.

O formato de facto de ficheiros de imagem das câmaras digitais é o Exchangeable Image File Format (EXIF) o qual é o formato de ficheiros de imagem JPEG com etiquetas de meta-dados adicionais. Pode conter informações como a data, hora e definições da camera.

A patente de compressão de dados sem perdas de Lempel-Ziv-Welch (LZW) expirou. Os utilitários de Graphics Interchange Format (GIF) que usam o método de compressão LZW estão agora livremente disponíveis no sistema Debian.

| Dica
Qualquer câmara digital ou scanner com meio de gravação amovível funciona em Linux através de leitores de armazenamento USB desde que sigam as Regras de Desenho para Sistemas de Ficheiros de Câmaras e usem o sistema de ficheiros FAT. Veja Seção 10.1.7, “Aparelho de armazenamento amovível”.

### 11.6.1. Ferramentas de dados gráficos (meta-pacote)

Os seguintes meta-pacotes são bons pontos de partida para procurar ferramentas de dados gráficos usando o aptitude(8). "Vista geral de pacotes para Maintainers Debian de Ferramentas de Fotografia" pode ser outro ponto de partida.

Tabela 11.17. Lista de ferramentas de dados gráficos (meta-pacote)

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`education-graphics` | I:0.35 | 25 | svg, jpeg, … | meta-pacote para o ensino do grafismo e da arte pictórica.
`open-font-design-toolkit` | I:0.04 | 9 | ttf, ps, … | meta pacote para desenho de font aberta

| Dica
Procure mais ferramentas de imagem com a expressão regular "`~Gworks-with::image`" no aptitude(8) (veja Seção 2.2.6, “Opções do método de pesquisa com o aptitude”).

### 11.6.2. Ferramentas gráficas de dados (GUI)

Os seguintes pacotes para as ferramentas de conversão, edição e organização de dados gráficos GUI chamaram a minha atenção.

Tabela 11.18. Lista de ferramentas de dados gráficos (GUI)

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`gimp` | V:44, I:216 | 32791 | imagem(bitmap) | GNU Image Manipulation Program
`xsane` | V:9, I:129 | 1512 | imagem(bitmap) | Frontend X11 baseado em GTK para o SANE (Scanner Access Now Easy)
`scribus` | V:1, I:13 | 32423 | ps/pdf/SVG/… | editor de DTP do Scribus
`libreoffice-draw` | V:82, I:418 | 10995 | imagem(vector) | suite de escritório do LibreOffice - desenho
`inkscape` | V:12, I:78 | 112538 | imagem(vector) | editor de SVG (Scalable Vector Graphics)
`dia` | V:1, I:17 | 3802 | imagem(vector) | editor de diagramas (Gtk)
`xfig` | V:0.6, I:8.9 | 7951 | imagem(vector) | Habilidade para Geração interactiva de figuras sob X11
`gocr` | V:0.5, I:3.9 | 549 | imagem→texto | software de OCR livre
`eog` | V:26, I:143 | 10524 | imagem(Exif) | Programa de visualização de gráficos Olho do GNOME
`gthumb` | V:3, I:12 | 5162 | imagem(Exif) | visualizador e navegador de imagens (GNOME)
`geeqie` | V:3, I:11 | 2903 | imagem(Exif) | Visualizador de imagens que usa GTK
`shotwell` | V:14, I:246 | 6334 | imagem(Exif) | organizador de fotos digitais (GNOME)
`gwenview` | V:40, I:115 | 6000 | imagem(Exif) | visualizador de imagens (KDE)
`kamera` | I:114 | 992 | imagem(Exif) | Suporte para cameras digitais para aplicações do KDE
`digikam` | V:1.5, I:8.3 | 324 | imagem(Exif) | aplicação de gestão de fotos digitais para KDE
`darktable` | V:4, I:11 | 35876 | imagem(Exif) | mesa de luz virtual e câmara escura para fotógrafos
`hugin` | V:0.5, I:5.6 | 6476 | imagem(Exif) | fotomontagem de fotografias panorâmicas
`librecad` | V:1, I:14 | 9164 | DXF, ... | Editor de dados CAD 2D
`freecad` | V:1, I:21 | 112 | DXF, ... | Editor de dados CAD 3D
`blender` | V:2, I:20 | 92911 | blend, TIFF, VRML, … | editor de conteúdos 3D para animação e etc
`mm3d` | V:0.02, I:0.21 | 4123 | ms3d, obj, dxf, … | editor de modelos 3D baseado em OpenGL
`fontforge` | V:0.6, I:5.6 | 4054 | ttf, ps, … | editor de tipo de letra para fonts PS, TrueType e OpenType
`xgridfit` | V:0.01, I:0.08 | 878 | ttf | programa para ajustes e alinhamento em grelha de tipos de letra TrueType

### 11.6.3. Ferramentas de dados gráficos (CLI)

Os seguintes pacotes para as ferramentas de conversão, edição e organização de dados gráficos CLI chamaram a minha atenção.

Tabela 11.19. Lista de ferramentas de dados gráficos (CLI)

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`imagemagick` | V:9, I:278 | 79 | imagem(bitmap) | programas de manipulação de imagens
`graphicsmagick` | V:1.0, I:8.6 | 5816 | imagem(bitmap) | programas de manipulação de imagens (fork do `imagemagick`)
`netpbm` | V:27, I:288 | 8435 | imagem(bitmap) | ferramentas de conversão de gráficos
`libheif-examples` | V:0.3, I:3.5 | 438 | heif→jpeg(bitmap) | converter o formato de ficheiro de imagem de alta eficiência (HEIF) para os formatos JPEG, PNG ou Y4M com o comando heif-convert(1)
`icoutils` | V:3, I:34 | 221 | png↔ico(bitmap) | converte ícones e cursores do MS Windows de e para formatos PNG (favicon.ico)
`pstoedit` | V:2, I:39 | 1075 | ps/pdf→imagem(vector) | conversor de ficheiro PostScript e PDF para gráficos vectoriais editáveis (SVG)
`libwmf-bin` | V:5, I:83 | 149 | Windows/imagem(vector) | ferramentas de conversão de meta-ficheiros do Windows (dados de gráficos vectoriais)
`fig2sxd` | V:0.03, I:0.18 | 158 | fig→sxd(vector) | converte ficheiros XFig ao formato do OpenOffice.org Draw
`unpaper` | V:2, I:16 | 417 | imagem→imagem | ferramenta de pós-processamento para páginas digitalizadas em scanner para OCR
`tesseract-ocr` | V:8, I:33 | 2209 | imagem→texto | software livre de OCR baseado no motor de OCR comercial da HP
`tesseract-ocr-eng` | V:8, I:33 | 4032 | imagem→texto | Dados de motor OCR: ficheiros de linguagem tesseract-ocr para texto Inglês
`ocrad` | V:0.3, I:2.4 | 608 | imagem→texto | software de OCR livre
`exif` | V:3, I:51 | 335 | imagem(Exif) | utilitário de linha de comandos para mostrar informação EXIF nos ficheiros JPEG
`exiv2` | V:2, I:19 | 429 | imagem(Exif) | ferramenta de manipulação de meta-dados EXIF/IPTC
`exiftran` | V:1, I:11 | 81 | imagem(Exif) | transformar imagens jpeg de câmaras digitais
`exiftags` | V:0.3, I:2.7 | 309 | imagem(Exif) | utilitário para ler etiquetas Exif de ficheiros JPEG de câmaras digitais
`exifprobe` | V:0.2, I:2.1 | 506 | imagem(Exif) | ler meta-dados de imagens digitais
`dcraw` | V:0.8, I:7.3 | 428 | imagem(Raw)→ppm | descodifica imagens cruas de câmaras digitais
`findimagedupes` | V:0.1, I:1.1 | 75 | image→fingerprint | encontra imagens visualmente semelhantes ou duplicadas
`ale` | V:0.02, I:0.16 | 850 | imagem→imagem | junta imagens para aumentar a fidelidade ou criar mosaicos
`imageindex` | V:0.2, I:1.2 | 143 | imagem(Exif)→html | gera galerias HTML estáticas a partir de imagens
`outguess` | V:0.11, I:0.99 | 230 | jpeg,png | ferramenta de Esteganografia universal
`jpegoptim` | V:0.6, I:6.0 | 59 | jpeg | otimize ficheiros JPEG
`optipng` | V:2, I:40 | 187 | png | otimize ficheiros PNG, compressão sem perdas
`pngquant` | V:1, I:10 | 62 | png | otimize ficheiros PNG, compressão com perdas

## 11.7. Conversão de dados variados

Existem muitos outros programas para converter dados. Os pacotes seguintes chamaram a minha atenção a usar a expressão regular "`~Guse::converting`" no aptitude(8) (veja Seção 2.2.6, “Opções do método de pesquisa com o aptitude”).

Tabela 11.20. Lista de ferramentas de conversão de dados variados

pacote | popcon | tamanho | palavra chave | descrição
--- | --- | --- | --- | ---
`alien` | V:1, I:13 | 150 | rpm/tgz→deb | conversor para pacotes alienígenas num pacote Debian
`freepwing` | V:0.00, I:0.02 | 447 | EB→EPWING | conversor de "Electric Book" (popular no Japão) para um formato JIS X 4081 único (um subconjunto de EPWING V1)
`calibre` | V:7, I:24 | 65193 | qualquer→EPUB | conversor de e-books e gestor de biblioteca

Também pode extrair dados do formato RPM com o seguinte.

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

Capítulo 10. Gestão de dados |  | Capítulo 12. Programação