Capítulo 11. Conversión de datos

# Capítulo 11. Conversión de datos

Se describen herramientas y métodos para convertir formatos de datos en el sistema Debian.

Las herramientas para formatos estándar son muy buenas pero para formatos propietarios son limitadas.

## 11.1. Herramientas para la conversión de información en formato texto

Los siguientes paquetes para la conversión de información en formato texto llamaron mi atención.

Tabla 11.1. Relación de herramientas de conversión de información en formato texto

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`libc6` | V:942, I:1000 | 5481 | conjunto de caracteres | conversor de la codificación de texto entre configuraciones locales mediante iconv(1) (fundamental)
`recode` | V:2, I:13 | 528 | conjunto de caracteres+eol | conversor de codificaciones de texto entre configuraciones locales (versátil, con más funcionalidades y alias)
`konwert` | V:2, I:42 | 137 | conjunto de caracteres | conversor de codificaciones de texto entre configuraciones locales (sofisticado)
`nkf` | V:0.4, I:8.5 | 360 | conjunto de caracteres | traductor del conjunto de caracteres para el japonés
`tcs` | V:0.01, I:0.14 | 518 | conjunto de caracteres | traductor de conjunto de caracteres
`unaccent` | V:0.03, I:0.28 | 35 | conjunto de caracteres | cambia las letras acentuadas por su equivalente sin acentuar
`tofrodos` | V:1, I:12 | 50 | eol | conversor entre formatos de texto entre DOS y Unix: fromdos(1) y todos(1)
`macutils` | V:0.04, I:0.43 | 319 | eol | conversor de formatos de texto entre Macintosh y Unix: frommac(1) y tomac(1)

### 11.1.1. Convirtiendo un archivo de texto con iconv

| Sugerencia
iconv(1) es parte del paquete `libc6` y esta siempre disponible en prácticamente el cualquier sistema tipo Unix para la conversión de codificaciones de caracteres.

Puede convertir las codificaciones de los archivos de texto con iconv(1)como se muestra.

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

Los valores de codificaciones para el encaje distinguen entre mayúsculas y minúsculas y pasan por alto «`-`» y «`_`». Puede obtener una relación de las codificaciones reconocidas mediante la orden «`iconv -l`».

Tabla 11.2. Relación de valores de codificación y su uso

valor de la codificación | uso
--- | ---
ASCII | Código Estándar Americano para el Intercambio de Información, código de 7 bits sin caracteres acentuados
UTF-8 | estándar multilenguaje actual en los sistemas operativos modernos
ISO-8859-1 | estándar antiguo de las lenguas occidentales, ASCII+ caracteres acentuados
ISO-8859-2 | antiguo estándar de las lenguas occidentales, ASCII + caracteres acentuados
ISO-8859-15 | antiguo estándar de las lenguas occidentales, ISO-8859-1 con el símbolo del euro
CP850 | página de códigos 850, caracteres de Microsoft DOS con gráficos para los lenguajes de la Europa occidental, variante de ISO-8859-1
CP932 | página de código 932, variante del japonés de Shift-JIS al estilo Microsoft Windows
CP936 | página de códigos 936,GB2312, GBK o GB18030 variante para chino simplificado al estilo Microsoft Windows
CP949 | página de código 949, EUC-KR o Código Unificado Hangul par coreano al estilo Microsoft Windows
CP950 | código de página 950, Big5 variante par chino tradicional al estilo Microsoft Windows
CP1251 | código de página 1251, codificación del alfabeto cirílico al estilo Microsoft Windows
CP1252 | código de página 1252, ISO-8859-15 para las lenguas de Europa occidental al estilo Microsoft Windows
KOI8-R | antiguo estándar ruso UNIX para el alfabeto cirílico
ISO-2022-JP | estándar de codificación japones para el correo electrónico que solo utiliza códigos de 7 bit
eucJP | código de 8 bit del antiguo estándar japonés de UNIX, completamente diferente de Shift-JIS
Shift-JIS | Apéndice 1 para el japonés JIS X 0208 (consulte CP932)

| Nota
Algunas codificaciones son únicamente usadas para la conversión de información y no son usables como valores locales (Sección 8.1, “Configuración regional”).

Para los conjuntos de caracteres que caben en un único byte como ASCII y ISO-8859, la codificación de caracteres es casi lo mismo que el conjunto de caracteres.

Para los conjuntos de caracteres con muchos elementos como JIS X 0213 en el japonés o Conjunto de Caracteres Universal (UCS, Unicode, ISO-10646-1) en prácticamente cualquier lenguaje, existen muchos esquemas de codificación y encajan como secuencias de bytes de datos.

- EUC e ISO/IEC 2022 (también conocido como JIS X 0202) para el japonés

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

En este caso existe un diferenciación clara entre el conjunto de caracteres y la codificación de caracteres.

Algunos proveedores en algunos casos utilizan la página de códigos como sinónimo de la tabla de codificación de caracteres.

| Nota

Tener en cuenta que la mayor parte de los sistemas de codificación comparten los mismos códigos con ASCII de 7 bits. Pero existen algunas excepciones. Si se convierten programas antiguos japoneses en C y datos URL de la codificación conocida como formato shift-JIS a formato UTF-8, usar «`CP932`» como nombre de la codificación en lugar de «`shift-JIS`» para obtener los resultados correctos: `0x5C` → «`\`» y `0x7E` → «`~`». De otro modo se convertirán a los caracteres incorrectos.

| Sugerencia
recode(1) se puede también usar y aporta mayor funcionalidad que la combinación de iconv(1), fromdos(1), todos(1), frommac(1) y tomac(1). Para más información, ver «`info recode`».

### 11.1.2. Comprobando que un archivo es UTF-8 con iconv

Puede comprobar si un archivo de texto está codificado en UTF-8 con iconv(1) como se muestra.

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

| Sugerencia
Utilizar la opción «`--verbose`» en el ejemplo anterior para determinar el primer carácter que no pertenece a UTF-8.

### 11.1.3. Convirtiendo los nombres de archivos con iconv

Aquí hay un archivo de órdenes de ejemplo de conversión de los nombres de archivos creados en un sistema operativo antiguo a otro moderno UTF-8 en un único directorio.

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

La variable «`$ENCDN`» contiene la codificación original utilizada por el nombre de archivo en el sistema operativo antiguo como en Tabla 11.2, “Relación de valores de codificación y su uso”.

Para escenarios más complicados, por favor, monte el sistema de archivos (p. ej. la partición del disco) que contiene los nombres de archivos con la codificación adecuada mediante la opción correspondiente de mount(8) (consulte Sección 8.1.3, “Codificación del nombre de archivo”) y copie el contenido completo a otro sistema de archivos montado como UTF-8 con la orden «`cp -a`».

### 11.1.4. Conversión EOL

El formato de archivo de texto, concretamente el código de final de línea (EOL) depende de la plataforma.

Tabla 11.3. Relación de estilos EOL para las diferentes plataformas

plataforma | codificación de EOL | control | decimal | hexadecimal
--- | --- | --- | --- | ---
Debian (unix) | LF | `^J` | 10 | 0A
MSDOS y Windows | CR-LF | `^M^J` | 13 10 | 0D 0A
Macintosh | CR | `^M` | 13 | 0D

,Los programas de conversión del formato EOL fromdos(1), todos(1), frommac(1) y tomac(1), son muy útiles. Recode(1) también es muy útil.

| Nota
Algunos datos del sistema Debian, como las páginas wiki del paquete `python-moinmoin` utilizan el estilo de MSDOS usando como EOL la combinación CR-LF. Así es que lo anterior es solo una regla general.

| Nota
La mayor parte de los editores (p ej.`vim`, `emacs`, `gedit`, …) gestionan de forma transparente el estilo EOL de MSDOS.

| Sugerencia
La utilización de «`sed -e '/\r$/!s/$/\r/'`» en lugar de todos(1) es mejor si quiere unificar el uso de EOL de los estilos MSDOS y Unix. (p. ej. tras mezclar dos archivos MSDOS con diff3(1).) Esto se debe a que `todos` añade CR a todas las líneas.

### 11.1.5. Conversión de tabuladores

Existen algunos programas especializados en convertir los códigos de tabulación.

Tabla 11.4. Relación de las órdenes de conversión de tabuladores de los paquetes `bsdmainutils` y `coreutils`

función | `bsdmainutils` | `coreutils`
--- | --- | ---
cambia los tabuladores a espacios | «`col -x`» | `expand`
no cambia los tabuladores por espacios | «`col -h`» | `unexpand`

indent(1) perteneciente al paquete `indent` reformatea completamente a un programa en C..

Los programas de edición como `vim` y `emacs` pueden también utilizar la conversión de tabuladores. Por ejemplo con `vim`, puede expandir los tabuladores con la secuencia de órdenes «`:set expandtab`» y «`:%retab`». Puede deshacer estos cambios con la secuencia de órdenes «`:set noexpandtab`» y «`:%retab!`».

### 11.1.6. Editores con conversión automática

Los editores modernos inteligentes como el programa `vim` son lo bastante inteligentes y trabajan bien con cualquier sistema de codificación y formato de archivo. Para mejorar la compatibilidad debería usar la configuración local UTF-8 en una consola con esta posibilidad.

Un antiguo archivo de texto Unix de Europa occidental «`u-file.txt`» almacenado con la codificación latin1 (iso-8859-1) se puede editar con `vim` como se muestra.

    $ vim u-file.txt

Esto es debido al mecanismo de autodetección de la codificación del archivo en `vim` que asume por defecto UTF-8 y si falla asume que será latin1.

Un antiguo archivo de texto polaco en Unix, «`pu-file.txt`», almacenado en la codificación latin2 (iso-8859-2) se puede editar con `vim` como se muestra.

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

Un antiguo fichero de texto Unix en japonés, «`ju-file.txt`», almacenado con la codificación eucJP se puede editar con `vim` como se muestra.

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

Un archivo de texto MS-Windows antiguo en japonés, «`jw-file.txt`», almacenado con la codificación shift-JIS (concretamente: CP932) se puede editar con `vim` como se muestra.

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

Cuando se abre un archivo con las opciones «`++enc`» y «`++ff`» , la orden de Vim «`:w`» lo almacena en su formato original sobreescribiendo el archivo original. También puede guardarlo con un formato y nombre de archivo específico con la orden de Vim correspondiente, p. ej. , «`:w ++enc=utf8 new.txt`».

Por favor para más información sobre el «soporte de texto multibyte« consulte mbyte.txt en la ayuda de `vim` y Tabla 11.2, “Relación de valores de codificación y su uso” para los valores de configuraciones de la ubicación utilizados por «`++enc`».

En los programas de la familia de `emacs` existen funcionalidades equivalentes a las anteriormente descritas.

### 11.1.7. Extracción de texto plano

Los siguiente lee un página web y la convierte en un archivo de texto. Es muy útil copiando configuraciones de la Web o para aplicarle las herramientas de texto de Unix a la página web como grep(1).

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

De igual forma, puede extraer información en texto plano desde otros formatos como se muestra.

Tabla 11.5. Relación de las herramientas para extraer información en texto plano

paquete | popularidad | tamaño | palabra clave | función
--- | --- | --- | --- | ---
`w3m` | V:10, I:134 | 2853 | html→text | conversor de HTML a texto con la orden «`w3m -dump`»
`html2text` | V:3, I:68 | 298 | html→text | conversor avanzado de HTML a texto (ISO 8859-1)
`lynx` | V:29, I:448 | 2031 | html→text | conversor de HTML a texto con la orden «`lynx -dump`»
`elinks` | V:3, I:16 | 1791 | html→text | conversor de HTML a texto con la orden «`elinks -dump`»
`links` | V:2, I:21 | 2321 | html→text | Conversor de HTML a texto con la orden «`links -dump`»
`links2` | V:0.8, I:8.6 | 5466 | html→text | conversor de HTML a texto con la orden «`links2 -dump`»
`catdoc` | V:15, I:170 | 682 | MSWord→text,TeX | convierte archivos MSWord a texto plano o TeX
`antiword` | V:0.9, I:6.7 | 587 | MSWord→text,ps | convierte archivos MSWord a texto plano o ps
`unhtml` | V:0.05, I:0.49 | 40 | html→text | borra las etiquetas de marcado de un archivo HTML
`odt2txt` | V:1, I:20 | 60 | odt→texto | conversor de Texto OpenDocument a texto

### 11.1.8. Resaltando y dándole formato a información en texto plano

Puede resaltar y dar formato a información en texto plano como se muestra.

Tabla 11.6. Relación de herramientas para resaltar información en texto plano

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`vim-runtime` | V:18, I:360 | 38849 | highlight | Vim MACRO para convertir código fuente a HTML con «`:source $VIMRUNTIME/syntax/html.vim`»
`cxref` | V:0.01, I:0.23 | 1191 | c→html | convierte un programa en lenguaje C a latext y HTML
`src2tex` | V:0.02, I:0.16 | 1799 | highlight | convierte varios códigos fuentes a TeX (lenguaje C)
`source-highlight` | V:0.4, I:3.1 | 2131 | highlight | convierte varias códigos fuente a HTML, XHTML, LaTeX, Texinfo, secuencias de escape de color ANSI y archivos DocBook con resaltado (C++)
`highlight` | V:0.4, I:3.1 | 1412 | highlight | convierte varios códigos fuente a archivos HTML, XHTML, RTF, LaTeX, TeX o XSL-FO con resaltado (C++)
`grc` | V:0.9, I:5.9 | 208 | texto→color | coloreado genérico para todo (Python)
`pandoc` | V:10, I:46 | 209102 | texto→cualquier cosa | conversor general «markup« (Haskell)
`python3-docutils` | V:11, I:50 | 2013 | texto→cualquier cosa | formateador de documentos de Texto ReStructurado a XML (Python)
`markdown` | V:0.4, I:6.1 | 56 | texto→html | Formateador de documentos de texto Markdown en (X)HTML (Perl)
`asciidoctor` | V:0.4, I:5.0 | 101 | texto→cualquier cosa | formateador de documentos de texto AsciiDoc a XML/HTML (Ruby)
`python3-sphinx` | V:6, I:25 | 3234 | texto→cualquier cosa | Sistema de publicación de documentos basado en ReStructured Text (Python)
`hugo` | V:0.8, I:5.3 | 66736 | texto→html | Sistema de publicación de sitios estáticos basado en Markdown (Go)

## 11.2. datos XML

El Lenguaje de Marcado Extensible (XML) es un lenguaje de marcado para documentos que tengan la información estructurada.

Consulte la información introductoria en XML.COM.

- «¿Qué es XML?«

- «¿Qué es XSLT?«

- «¿Qué es XSL-FO?«

- «¿Qué es XLink?«

### 11.2.1. Conceptos básicos de XML

El código XML tiene la apariencia de HTML. Nos permite obtener diferentes formatos de un documento. Un sistema sencillo de XML es el paquete `docbook-xsl`, que utilizamos aquí.

Todo archivo XML comienza con una declaración estándar XML como se muestra.

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

La sintaxis fundamental de un elemento XML se marca como se muestra.

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

Un elemento XML sin contenido se marca de forma resumida como se muestra.

    <name attribute="value" />

El «`atributo=«valor«`» de los ejemplos anteriores son opcionales.

Un comentario en XML se marca como se muestra.

    <!-- comment -->

Mientras que otros añaden marcas, XML necesita cambios menores al utilizar entidades predefinidas para los siguientes caracteres.

Tabla 11.7. Relación de entidades predefinidas para XML

entidad predefinida | carácter a ser convertido
--- | ---
`&quot;` | `«` : comillas
`&apos;` | `'` : apóstrofe
`&lt;` | `<` : menor que
`&gt;` | `>` : mayor que
`&amp;` | `&` : signo &

| Atención
«`<`» o «`&`» no se pueden utilizar en los atributos y elementos.

| Nota
Cuando se utilizan entidades definidas por el usuario, p. ej. «`&alguna_etiqueta:`», la primera definición prevalece sobre las demás. La definición de la entidad se realiza como «`<!ENTITY alguna-etiqueta «valor de la entidad«>`».

| Nota
Ya que las marcas XML se realizan de forma coherente con un cierto conjunto de etiquetas (y alguna información en su contenido y atributos), la conversión a otro XML es un procedimiento trivial utilizando Transformaciones del Lenguaje de Estilo Extensibles (XSLT, Extensible Stylesheet Language Transformations).

### 11.2.2. Procesamiento XML

Existen muchas herramientas para procesar archivos XML como el Lenguaje de Estilos Extensible (XSL, the Extensible Stylesheet Language).

Principalmente, una vez que tenga un archivo XML bien formado, puede convertirlo en cualquier otro formato utilizando el Lenguaje de Transformación de Estilos Extensible (XSLT, Extensible Stylesheet Language Transformations .

El Lenguaje de Estilo Extensible para dar Formato a Objetos (XSL-FO, Extensible Stylesheet Language for Formatting Objects) se supone que es la solución en lo referente a dar formato. El paquete `fop` es nuevo en el archivo `main` de Debian debido a su dependencia del lenguaje de programación Java. Así que el código LaTeX se genera normalmente partiendo de XML y utilizando XSLT y el sistema LaTeX se utiliza para crear los formatos de archivo imprimibles como DVI, PostScript y PDF.

Tabla 11.8. Relación de herramientas XML

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`docbook-xml` | V:15, I:404 | 2126 | xml | Documento de definición de XML (DTD) para DocBook
`docbook-xsl` | V:14, I:145 | 14823 | xml/xslt | Hojas de estilos XSL para procesar documentos XML DocBook a diferentes formatos de salida con XSLT
`xsltproc` | V:15, I:72 | 83 | xslt | procesador de línea de órdenes XSLT (XML → XML, HTML, texto plano, etc.)
`xmlto` | V:0.5, I:8.8 | 124 | xml/xslt | conversor de XML a cualquier cosa con XSLT
`fop` | V:0.6, I:7.6 | 281 | xml/xsl-fo | convierte archivos XML Docbook a PDF
`dblatex` | V:0.9, I:5.9 | 4636 | xml/xslt | convierte archivos Docbook a documentos DVI, PostScript, PDF con XSLT
`dbtoepub` | V:0.05, I:0.58 | 37 | xml/xslt | conversor DocBook XML a .epub

Ya que XML es un subconjunto del Lenguaje Estándar de Marcas Generalizado (SGML), puede ser procesado por cualquier herramienta para SGML, como Lenguaje de Especificación y Semántica de Documentos de Estilo (DSSSL, Document Style Semantics and Specification Language).

Tabla 11.9. Relación de herramientas DSSSL

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`openjade` | V:1, I:22 | 1066 | dsssl | ISO/IEC 10179:1996 procesador de estándar DSSSL (más actualizado)
`docbook-dsssl` | V:0.5, I:8.0 | 2594 | xml/dsssl | Hojas de estilo DSSSL para el procesamiento de documentos XML DocBook a diferentes formatos de salida con DSSSL
`docbook-utils` | V:0.3, I:5.7 | 287 | xml/dsssl | utilidades para archivos DocBook incluyendo la conversión a otros formatos (HTML, RTF, PS, man, PDF) con las órdenes `docbook2*` con DSSSL

| Sugerencia
Algunas veces es práctico leer directamente archivos XML DocBook con `yelp` de GNOME ya que tiene una representación de imágenes en X decente.

### 11.2.3. La extracción de información XML

Puedes extraer los datos HTML o XML de otros formatos utilizando los siguientes.

Tabla 11.10. Relación de herramientas de extracción de información XML

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`man2html` | V:0.1, I:1.3 | 142 | páginas man→html | conversor de páginas man a HTML (soporte CGI)
`doclifter` | I:0.04 | 487 | troff→xml | conversor de troff a DocBook XML
`texi2html` | V:0.2, I:2.9 | 1847 | texi→html | conversor de Texinfo a HTML
`info2www` | V:0.9, I:1.5 | 76 | info→html | conversor de GNU info a HTML (soporte CGI)
`wv` | V:0.2, I:2.5 | 733 | MSWord→cualquiera | conversor de documentos de Microsoft Word a HTML, LaTeX, etc.
`unrtf` | V:0.3, I:3.0 | 159 | rtf→html | conversor de documentos de RTF a HTML, etc
`wp2x` | I:0.09 | 200 | WordPerfect→cualquiera | archivos WordPerfect 5.0 y 5.1 a TeX, LaTeX, troff, GML y HTML

### 11.2.4. Análisis de datos XML

Para archivos HTML que no son XML, puede convertirlos a XHTML el cual es una ocurrencia de XML bien formado. XHTML puede ser procesado por las herramientas XML.

Se puede comprobar la sintaxis de los archivos XML y la bondad de las URL encontradas en ellos.

Tabla 11.11. Relación de las herramientas de impresión de calidad de XML

paquete | popularidad | tamaño | función | descripción
--- | --- | --- | --- | ---
`libxml2-utils` | V:60, I:210 | 211 | xml↔html↔xhtml | herramienta XML en línea de órdenes xmllint(1) (comprobación de sintaxis, reformateo, filtrado, …)
`tidy` | V:0.8, I:7.5 | 79 | xml↔html↔xhtml | comprobador de la sintaxis HTML y reformateador
`weblint-perl` | V:0.05, I:0.96 | 32 | lint | comprobador de estilo mínimo y sintáctico para HTML
`linklint` | V:0.06, I:0.49 | 343 | Comprobar el enlace | herramientas de mantenimiento de sitios web y comprobador de enlaces rápido

Una vez que se genera el apropiado XML, puede utilizar la tecnología XSLT para extraer información basándose el contexto de marcas, etc.

## 11.3. Configuración tipográfica

El programa Unix troff, creado por AT&T puede utilizarse para la composición tipográfica simple. Las páginas de man son generalmente creadas con él.

TeX fue creado por Donald Knuth y es una herramienta de composición tipográfica muy poderoso y el estándar de facto LaTeX fue creado por Leslie Lamport y permite un acceso a nivel alto a todas la potencia de TeX.

Tabla 11.12. Relación de las herramientas de composición tipográfica

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`texlive` | V:1, I:27 | 55 | (La)TeX | El sistema de composición tipográfica TeX, para previsualización e impresión
`lilypond` | V:0.6, I:5.7 | 16924 | (La)TeX | Compositor de música
`groff` | V:2, I:24 | 16514 | troff | sistema para dar formato al texto GNU troff

### 11.3.1. composición tipográfica roff

Tradicionalmente, roff es el sistema principal de Unix para la composición tipográfica. Consulte 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) y «`info groff`».

Puede leer o imprimir un buen tutorial y referencia en "`-me`" macro en "`/usr/share/doc/groff/`" instalando el paquete `groff`.

| Sugerencia
Con «`groff -Tascii -me -`» se obtiene una salida en texto plano con códigos de escape ANSI. Si lo que quiere son páginas man con muchos «^H« y «_«, utilice en su lugar«`GROFF_NO_SGR=1 groff -Tascii -me -`».

| Sugerencia
Para eliminar los «^H« y «_« del archivo de texto que `groff` ha generado, fíltrelo con «`col -b -x`».

### 11.3.2. TeX/LaTeX

El software TeX Live contiene un sistema completo del sistema TeX. El metapaquete `texlive` aporta un selección apropiada de paquetes TeX Live que cumplirá decentemente la mayor parte de las tareas.

Hay disponibles numerosas referencias a TeX y LaTeX.

- Cómo teTeX: La Guía Local de Linux-teTeX

- tex(1)

- latex(1)

- texdoc(1)

- texdoctk(1)

- «El libro de TeX«, de Donald E. Knuth, (Addison-Wesley)

- «LaTeX - Un Sistema para Preparar un Documento«, de Leslie Lamport, (Addison-Wesley)

- «El Compendio de LaTeX», de Goossens, Mittelbach, Samarin, (Addison-Wesley)

Este es el entorno de composición tipográfica más potente. Muchos procesadores de SGML lo utilizan como motor para el procesamiento de texto. Lyx que está en el paquete `lyx` y GNU TeXmacs que se encuentra en el paquete `texmacs` ofrecen un entorno de edición LaTeX agradable WYSIWYG mientras que muchos utilizan Emacs y Vim como su preferencia como editor.

Existen multitud de recursos disponibles en la red.

- La Guía de TEX Live - TEX Live 2007 («`/usr/share/doc/texlive-doc-base/english/texlive-en/live.html`») (del paquete `texlive-doc-base`)

- Una Guía Sencilla de Latex/Lyx

- Procesando Texto con LaTeX

Cuando los documentos se vuelven grandes, algunas veces TeX puede fallar. Debe incrementar el tamaño de los recursos compartidos en «`/etc/texmf/texmf.cnf`» (o más concretamente editar «`/etc/texmf/texmf.d/95NonPath`» y ejecutar update-texmf(8)) con el fin de solucionarlo.

| Nota

La fuente TeX de "The TeXbook" está disponible en www.ctan.org sitio tex-archivo para texbook.tex. Este archivo contiene la mayoría de las macros necesarias. He oído que puedes procesar este documento con tex(1) después de comentar las líneas 7 a 10 y añadir "`input manmac \proofmodefalse`". Se recomienda encarecidamente comprar este libro (y todos los demás libros de Donald E. Knuth) en lugar de usar la versión en línea, ¡pero la fuente es un gran ejemplo de entrada TeX!

### 11.3.3. Impresión de una página de manual

Puede imprimir una página manual en PostScript con una de las órdenes que se muestran.

    $ man -Tps some_manpage | lpr

### 11.3.4. Crear una página de man

Aunque es posible escribir una página de man en formato troff plano, existen algunos paquetes que ayudan a crearla.

Tabla 11.13. Relación de paquetes que ayudan a crear páginas man

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`docbook-to-man` | V:0.5, I:5.7 | 189 | SGML→página man | conversor de SGML DocBook en macros man roff
`help2man` | V:0.5, I:6.4 | 542 | text→página man | generador de página man automático con --help
`info2man` | V:0.02, I:0.21 | 134 | info→página man | conversor de GNU info a POD o páginas man
`txt2man` | V:0.05, I:0.66 | 112 | text→página man | conversor de texto ASCII plano a formato de página man

## 11.4. Información imprimible

En el sistema Debian la información imprimible se realizan en formato PostScript. El Sistema de Impresión Común de Unix (CUPS) utiliza Ghostscript como motor de representación para impresoras que no reconocen PostScript.

Los datos imprimibles también pueden expresarse en formato PDF en el reciente sistema Debian.

Los archivos PDF pueden visualizarse y las entradas de sus formularios pueden rellenarse utilizando herramientas de visualización GUI como Evince y Okular (ver Sección 7.4, “Aplicaciones GUI”); y navegadores modernos como Chromium.

Los archivos PDF pueden editarse con algunas herramientas gráficas como LibreOffice, Scribus y Inkscape (ver Sección 11.6, “Herramientas para información gráfica”).

| Sugerencia
Puede leer un archivo PDF con GIMP y convertirlo a formato PNG utilizando una resolución superior a 300 ppp. Esto se puede utilizar como una imagen de fondo para LibreOffice para producir una impresión alterada deseable con el mínimo esfuerzo.

### 11.4.1. Ghostscript

El núcleo de la manipulación es el intérprete de Ghostscript PostScript (PS) el cual genera imágenes de representación.

Tabla 11.14. Relación de intérpretes Ghostscript de PostScript

paquete | popularidad | tamaño | descripción
--- | --- | --- | ---
`ghostscript` | V:181, I:559 | 177 | El intérprete GPL Ghostscript de PostScript/PDF
`ghostscript-x` | V:0, I:14 | 88 | Intérprete Ghostscript de PostScript/PDF GPL - soporte para entornos X
`libpoppler162` | V:1.2, I:3.1 | 5313 | biblioteca de representación de PDF bifurcado del visor PDF xpdf
`libpoppler-glib8t64` | V:73, I:307 | 612 | biblioteca de representación PDF (biblioteca compartida basada en Glib)
`poppler-data` | V:169, I:580 | 13086 | biblioteca de representación CMaps para PDF (con soporte CJK: Adobe-*)

| Sugerencia
«`gs -h`» puede mostrar la configuración de Ghostscript.

### 11.4.2. Mezcla de dos archivos PS o PDF

Puede mezclar dos archivos PostScript (PS) o Formato de Documentos Portable (PDF, Portable Document Format ) utilizando la orden gs(1) de Ghostscript.

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

| Nota
El formato PDF, el cual se usa de forma habitual como un formato de impresión multiplatafoma, es en su esencia un formato PS comprimido con algunas funcionalidades y extensiones adicionales.

| Sugerencia
Para la manipulación de documentos PostScript desde la línea de órdenes existen órdenes como psmerge(1) y otras que pertenecen al paquete `psutils` package. pdftk(1) del paquete `pdftk` se utiliza para la manipulación de documentos PDF.

### 11.4.3. Utilidades de impresión

Los siguientes paquetes contienen utilidades para la impresión que considero importantes.

Tabla 11.15. Relación de utilidades para la impresión

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`poppler-utils` | V:156, I:471 | 804 | pdf→ps,texto,… | Utilidades PDF : `pdftops`, `pdfinfo`, `pdfimages`, `pdftotext`, `pdffonts`
`psutils` | V:4, I:50 | 34 | ps→ps | herramientas de conversión de documentos PostScript
`poster` | V:0.1, I:1.8 | 57 | ps→ps | crea póster grandes de páginas PostScript
`enscript` | V:1, I:11 | 2138 | texto→ps, html, rtf | convierte texto ASCII a PostScript, HTML, RTF o una impresión bonita
`a2ps` | V:1.0, I:7.0 | 4109 | texto→ps | conversor de «cualquier formato a PostScript« e impresión bonita
`pdftk` | V:1, I:21 | 28 | pdf→pdf | herramienta de conversión de documentos PDF: `pdftk`
`html2ps` | V:0.1, I:1.8 | 256 | html→ps | conversor de HTML a PostScript
`gnuhtml2latex` | V:0.02, I:0.63 | 26 | html→latex | conversor de html a latex
`latex2rtf` | V:0.1, I:1.6 | 495 | latex→rtf | conversor de documentos LaTeX a RTF la cual puede ser leído por MS Word
`ps2eps` | V:2, I:32 | 95 | ps→eps | conversor de PostScript a EPS (PostScript encapsulado)
`e2ps` | V:0.01, I:0.12 | 104 | texto→ps | conversor de texto a PostScript con soporte a la codificación japonés
`impose+` | V:0.1, I:1.5 | 118 | ps→ps | utilidades PostScript
`trueprint` | V:0.01, I:0.07 | 148 | texto→ps | imprime bien muchos códigos fuente (C, C++, Java, Pascal, Perl, Pike, Sh y Verilog) a PostScript (lenguaje C)
`pdf2svg` | V:0.2, I:3.0 | 33 | pdf→svg | conversor de PDF al formato gráficos de vector escalable (Scalable vector graphics)
`pdftoipe` | V:0.01, I:0.46 | 69 | pdf→ipe | conversor de PDF a formato XML IPE

### 11.4.4. Imprimiendo con CUPS

Tanto las órdenes de lp(1) y lpr(1) existen en Sistema de Impresión Común de Unix (CUPS) que proporciona opciones personalizadas para la impresión.

Puede imprimir tres copias del archivo correspondiente utilizando las siguientes órdenes.

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

Puede personalizar las impresiones mediante opciones como «`-o number-up=2`», «`-o page-set=even`», «`-o page-set=odd`», «`-o scaling=200`», «`-o natural-scaling=200`», etc., según consta en Impresión con línea de órdenes y sus opciones.

## 11.5. La conversión de los datos de correo

Considero importantes los siguientes paquetes de conversión de datos de correo.

Tabla 11.16. Relación de paquetes que ayudan a la conversión de datos de correo

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`sharutils` | V:2, I:28 | 1436 | mail | shar(1), unshar(1), uuencode(1), uudecode(1)
`mpack` | V:0.8, I:8.0 | 109 | MIME | codifica y decodifica los mensajes MIME: mpack(1) y munpack(1)
`tnef` | V:0.3, I:4.0 | 103 | ms-tnef | desempaca los archivos adjuntos MIME del tipo «application/ms-tnef« que es un formato propio de Microsoft
`uudeview` | V:0.2, I:1.8 | 105 | mail | codifica y decodifica los siguientes formatos: uuencode, xxencode, BASE64, quoted printable y BinHex

| Sugerencia
Se puede utilizar un servidor del Protocolo de Acceso a Mensajes de Internet versión 4 (IMAP4) para obtener los correos de un sistema de correo propietario siempre que el cliente permita configurar el servidor de correo IMAP4.

### 11.5.1. Fundamentos de información de correo

La información de correo (SMTP) deben utilizar 7 bits. Así los datos binarios y los de texto de 8 bits se codifican en formato de 7 bits con Multipurpose Internet Mail Extensions (MIME) y la selección del juego de caracteres (ver Tabla 11.2, “Relación de valores de codificación y su uso”).

El formato de almacenamiento estándar de correo es mbox según RFC2822 (actualizado por el RFC822). Consulte mbox(5) (es proporcionado por el paquete `mutt`).

En las lenguas europeas normalmente se utiliza en el correo la «`Content-Transfer-Encoding: quoted-printable`» con el juego de caracteres ISO-8859-1 ya que no existen muchos de los caracteres de 8 bits. SI el texto europeo esta codificado en UTF-8, «`Content-Transfer-Encoding: quoted-printable`» se usa como la mayor parte de la información en 7 bits.

En japonés el tradicional «`Content-Type: text/plain; charset=ISO-2022-JP`» es normalmente utilizado en el correo ya que mantiene el texto en 7 bits. Pero los antiguos sistemas Microsoft puede enviar información en Shift-JIS sin la declaración correspondiente. Si el texto japonés esta codificado en UTF-8 Base64 es como utilizar información de 8 bits. Lo que ocurre en otros lenguajes asiáticos es parecido.

| Nota
Si su información de correo no Unix se accede desde un cliente que no es de Debian, con soporte de IMAP4, puede moverlo desplegando su propio servidor IMAP4.

| Nota
Si utiliza otros formatos de almacenamiento de correo, moverlos al formato mbox es un buen comienzo. Un cliente versátil como mutt(1) puede ser útil para ello.

Puede partir el contenido del buzón de correo en mensajes utilizando procmail(1) y formail(1).

Cada mensaje de correo se puede desempaquetar utilizando munpack(1) del paquete `mpack` (u otra herramienta especializada) para obtener el contenido codificado con MIME.

## 11.6. Herramientas para información gráfica

Aunque existen programas GUI muy potentes como gimp(1), las herramientas en línea de órdenes como imagemagick(1) son muy útiles para automatizar la manipulación de imágenes por medio de archivos de órdenes.

El formato de facto de los archivos de imágenes en cámaras digitales es Formato de Archivo de Imagen Intercambiable (EXIF, Exchangeable Image File Format) que se corresponde con el formato de archivo de imágenes JPEGcon etiquetas de metainformación adicionales. Puede contener información como la fecha, la hora y la configuración de la cámara.

La patente de compresión de datos sin pérdida Lempel-Ziv-Welch (LZW) ha expirado. Las utilidades del Formato de Intercambio de Gráficos (GIF, Graphics Interchange Format), que utiliza el método de compresión LZW, están ahora disponibles libremente en el sistema Debian.

| Sugerencia
Cualquier cámara digital o escáner con un medio de grabación extraible interactua con Linux a través de lectores de almacenamiento USB ya que cumple con el las reglas del Sistema de archivos para Cámaras y utiliza el sistema de archivos FAT. Consulte Sección 10.1.7, “Dispositivos de almacenamiento extraíbles”.

### 11.6.1. Herramientas gráficas de datos (meta paquete)

Los siguientes meta paquetes son buenos puntos de partida para buscar herramientas de datos gráficos utilizando aptitude(8). "Resumen de paquetes para los mantenedores de Debian PhotoTools" puede ser otro punto de partida.

Tabla 11.17. Lista de herramientas de datos gráficos (meta paquete)

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`education-graphics` | I:0.34 | 25 | svg, jpeg, … | meta paquete para la enseñanza de gráficos y arte pictórico.
`open-font-design-toolkit` | I:0.06 | 9 | ttf, ps, … | metapaquete para el diseño de tipos de letra abiertos

| Sugerencia
Busque más herramientas de imágenes utilizando aptitude(8) con la expresión regular «`~Gworks-with::image`» (consulte Sección 2.2.6, “Opciones del método de búsqueda con aptitude”).

### 11.6.2. Herramientas de datos gráficos (GUI)

Me llamaron la atención los siguientes paquetes para las herramientas de organización, edición y conversión de datos gráficos GUI.

Tabla 11.18. Lista de herramientas de datos gráficos (GUI)

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`gimp` | V:41, I:214 | 32779 | imagen (bitmap) | GNU GIMP Programa de Manipulación de Imágenes
`xsane` | V:8, I:129 | 1512 | imagen (bitmap) | Interfaz GTKbasado en X11 para SANE (Acceso inmediato y fácil a escáner)
`scribus` | V:1, I:12 | 32415 | ps/pdf/SVG/… | Scribus editor de documentos
`libreoffice-draw` | V:91, I:414 | 11209 | imagen (vector) | LibreOffice office suite - dibujo
`inkscape` | V:11, I:76 | 113353 | imagen (vector) | editor SVG (Scalable Vector Graphics)
`dia` | V:1, I:15 | 3846 | imagen (vector) | editor de diagramas (Gtk)
`xfig` | V:0.8, I:8.4 | 7951 | imagen (vector) | facilidad para la creación interactiva de figuras en X11
`gocr` | V:0.4, I:3.8 | 549 | imagen→texto | software libre OCR
`eog` | V:24, I:137 | 10535 | imagen(Exif) | programa visor de gráficos «Eye of GNOME«
`gthumb` | V:3, I:12 | 5162 | imagen(Exif) | visor y navegador de imágenes (GNOME)
`geeqie` | V:3, I:11 | 3135 | imagen(Exif) | visor de imágenes utilizando GTK
`shotwell` | V:14, I:243 | 6334 | imagen(Exif) | organizador de fotos digital (GNOME)
`gwenview` | V:39, I:115 | 6000 | imagen(Exif) | visor de imágenes (KDE)
`kamera` | I:114 | 992 | imagen(Exif) | aplicaciones KDE para soporte de cámaras digitales
`digikam` | V:1.5, I:8.6 | 325 | imagen(Exif) | aplicación para la gestión de fotos digitales para KDE
`darktable` | V:4, I:11 | 35876 | imagen(Exif) | mesa de luz y cuarto oscuro virtuales para fotógrafos
`hugin` | V:0.4, I:5.7 | 6481 | imagen(Exif) | agrupador de fotografías panorámicas
`librecad` | V:1, I:12 | 9164 | DXF, ... | Editor de datos CAD en 2D
`freecad` | V:1, I:19 | 112 | DXF, ... | Editor de datos CAD en 3D
`blender` | V:2, I:19 | 169320 | blend, TIFF, VRML, … | editor de animaciones 3D etc
`mm3d` | V:0.02, I:0.26 | 4123 | ms3d, obj, dxf, … | editor OpenGL de modelado 3D
`fontforge` | V:0.5, I:5.8 | 4736 | ttf, ps, … | editor de tipos de letra PS, TrueType y OpenType
`xgridfit` | V:0.01, I:0.10 | 878 | ttf | programas para la ajuste e interpolación (gridfitting y hinting) de tipos de letra TrueType

### 11.6.3. Herramientas de datos gráficos (CLI)

Me llamaron la atención los siguientes paquetes para las herramientas de conversión, edición y organización de datos gráficos CLI.

Tabla 11.19. Lista de herramientas de datos gráficos (CLI)

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`imagemagick` | V:7, I:275 | 81 | imagen (bitmap) | programa de manipulación de imágenes
`graphicsmagick` | V:1.0, I:8.8 | 5945 | imagen (bitmap) | programas de manipulación de imágenes (bifurcaciones de `imagemagick`)
`netpbm` | V:26, I:285 | 8435 | imagen (bitmap) | herramienta de conversión de gráficos
`libheif-examples` | V:0.3, I:3.6 | 503 | heif→jpeg(bitmap) | convertir Formato de archivo de imagen de alta eficiencia (HEIF) a formatos JPEG, PNG o Y4M con el comando heif-convert(1)
`icoutils` | V:3, I:33 | 221 | png↔ico(bitmap) | convierte iconos y cursores MS Windows a y desde formatos PNG (favicon.ico)
`pstoedit` | V:1, I:37 | 1075 | ps/pdf→image(vector) | conversor de archivos PostScript y PDF a SVG
`libwmf-bin` | V:4, I:81 | 149 | Windows/imágen(vector) | herramientas de conversión de archivos con formato metafile de Windows (formato de gráficos vectoriales)
`fig2sxd` | V:0.01, I:0.18 | 158 | fig→sxd(vector) | convierte archivos XFig a formato Draw de OpenOffice.org
`unpaper` | V:2, I:17 | 417 | imagen→imagen | herramienta para el procesado posterior de páginas escaneadas para OCR
`tesseract-ocr` | V:8, I:35 | 2209 | imagen→texto | software libre OCR basado en el motor OCR comercial de HP
`tesseract-ocr-eng` | V:8, I:35 | 4032 | imagen→texto | motor de información OCR: archivo en inglés tesseact-ocr para textos ingleses
`ocrad` | V:0.3, I:2.5 | 608 | imagen→texto | software libre OCR
`exif` | V:3, I:51 | 335 | imagen(Exif) | utilidad de línea de órdenes para mostrar información EXIF de archivos JPEG
`exiv2` | V:2, I:20 | 429 | imagen(Exif) | herramienta de manipulación de metainformación EXIF/IPTC
`exiftran` | V:1, I:11 | 81 | imagen(Exif) | transforma imágenes de cámaras digitales jpeg
`exiftags` | V:0.2, I:2.8 | 309 | imagen(Exif) | utilidad para leer etiquetas Exif de archivos JPEG de cámaras digitales
`exifprobe` | V:0.2, I:2.3 | 506 | imagen(Exif) | lee metainformación de imágenes digitales
`dcraw` | V:0.8, I:7.7 | 428 | imagen (crudo)→ppm | decodifica imágenes en crudo de cámaras digitales
`findimagedupes` | V:0.1, I:1.1 | 76 | imagen→huella | busca imágenes duplicadas o parecidas visualmente
`ale` | V:0.01, I:0.16 | 850 | imagen→imagen | fusiona imágenes para aumentar su integridad o crea mosaicos
`imageindex` | V:0.1, I:1.3 | 143 | imagen(Exif)→html | genera galerías HTML estáticos partiendo un grupo de imágenes
`outguess` | V:0.1, I:1.1 | 230 | jpeg,png | herramienta universal esteanográfica
`jpegoptim` | V:0.6, I:6.2 | 59 | jpeg | optimizar los archivos JPEG
`optipng` | V:2, I:40 | 187 | png | optimizar archivos PNG, compresión sin pérdidas
`pngquant` | V:1, I:12 | 62 | png | optimizar los archivos PNG, compresión con pérdida

## 11.7. Conversiones de información variadas

Existen otros programas para la conversión entre datos. Los siguientes paquetes llamaron mi atención al usar aptitude(8) con la expresión regular «`~Guse::converting`» (consulte Sección 2.2.6, “Opciones del método de búsqueda con aptitude”).

Tabla 11.20. Relación de herramientas varias para la conversión de información

paquete | popularidad | tamaño | palabra clave | descripción
--- | --- | --- | --- | ---
`alien` | V:1, I:13 | 150 | rpm/tgz→deb | conversor entre paquetes externos en paquetes Debian
`freepwing` | I:0.02 | 447 | EB→EPWING | conversor de «Libro Electrónico« (común en Japón) a uno único con formato JIS X 4081 (un subconjunto de EPWING V1)
`calibre` | V:7, I:26 | 69924 | cualquiera→EPUB | gestión de bibliotecas y conversor de libros electrónicos

Puede extraer la información de formato RPM como se muestra.

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

Capítulo 10. Gestión de información |  | Capítulo 12. Programación