Kapitel 11. Konvertering av data

# Kapitel 11. Konvertering av data

Verktyg och tips för att konvertera dataformat på Debian-systemet beskrivs.

Standardbaserade verktyg är i mycket gott skick, men stödet för proprietära dataformat är begränsat.

## 11.1. Verktyg för konvertering av textdata

Följande paket för konvertering av textdata fångade min uppmärksamhet.

Tabell 11.1. Lista över verktyg för konvertering av textdata

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`libc6` | V:940, I:999 | 5355 | charset | textkodningskonverterare mellan lokala av iconv(1) (fundamental)
`recode` | V:2, I:13 | 528 | teckenuppsättning+eol | textkodningskonverterare mellan lokala språk (mångsidig, fler alias och funktioner)
`konwert` | V:2, I:42 | 137 | charset | textkodningskonverterare mellan lokala språk (snyggt)
`nkf` | V:0.4, I:8.5 | 359 | charset | teckenuppsättningsöversättare för japanska
`tcs` | V:0.01, I:0.14 | 518 | charset | teckenuppsättningsöversättare
`unaccent` | V:0.03, I:0.30 | 35 | charset | ersätta accentuerade bokstäver med deras oaccentuerade motsvarighet
`tofrodos` | V:1, I:13 | 50 | eol | textformatkonverterare mellan DOS och Unix: fromdos(1) och todos(1)
`macutils` | V:0.04, I:0.45 | 319 | eol | textformatkonverterare mellan Macintosh och Unix: frommac(1) och tomac(1)

### 11.1.1. Konvertera en textfil med iconv

| Tips
iconv(1) tillhandahålls som en del av `libc6-paketet` och är alltid tillgängligt på praktiskt taget alla Unix-liknande system för att konvertera kodningen av tecken.

Du kan konvertera kodningar i en textfil med iconv(1) på följande sätt.

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

Kodningsvärdena är skiftlägesokänsliga och ignorerar "`-`" och "`_`" vid matchning. Kodningar som stöds kan kontrolleras med kommandot "`iconv -l`".

Tabell 11.2. Lista över kodningsvärden och deras användning

kodningsvärde | användning
--- | ---
ASCII | American Standard Code for Information Interchange, 7 bitars kod utan accentuerade tecken
UTF-8 | aktuell flerspråkig standard för alla moderna operativsystem
ISO-8859-1 | gammal standard för västeuropeiska språk, ASCII + accentuerade tecken
ISO-8859-2 | gammal standard för östeuropeiska språk, ASCII + accentuerade tecken
ISO-8859-15 | gammal standard för västeuropeiska språk, ISO-8859-1 med eurotecken
CP850 | kodsida 850, Microsoft DOS-tecken med grafik för västeuropeiska språk, ISO-8859-1-variant
CP932 | kodsida 932, Microsoft Windows-stil Shift-JIS-variant för japanska
CP936 | kodsida 936, Microsoft Windows stil GB2312, GBK eller GB18030 variant för förenklad kinesiska
CP949 | kodsida 949, Microsoft Windows-stil EUC-KR eller Unified Hangul Code-variant för koreanska
CP950 | kodsida 950, Microsoft Windows stil Big5-variant för traditionell kinesiska
CP1251 | kodsida 1251, Microsoft Windows stilkodning för det kyrilliska alfabetet
CP1252 | kodsida 1252, Microsoft Windows-stil ISO-8859-15-variant för västeuropeiska språk
KOI8-R | gammal rysk UNIX-standard för det kyrilliska alfabetet
ISO-2022-JP | standardkodning för japansk e-post som endast använder 7-bitars koder
eucJP | gammal japansk UNIX-standard 8-bitars kod och helt annorlunda än Shift-JIS
Shift-JIS | JIS X 0208 Appendix 1 standard för japanska (se CP932)

| Notera
Vissa kodningar stöds endast för datakonvertering och används inte som lokala värden (Avsnitt 8.1, ”Lokalen”).

För teckenuppsättningar som ryms i en enda byte, t.ex. ASCII- och ISO-8859-teckenuppsättningar, betyder teckenkodningen nästan samma sak som teckenuppsättningen.

För teckenuppsättningar med många tecken, t.ex. JIS X 0213 för japanska eller Universal Character Set (UCS, Unicode, ISO-10646-1 ) för praktiskt taget alla språk, finns det många kodningsscheman för att passa in dem i byte-datasekvensen.

- EUC och ISO/IEC 2022 (även känd som JIS X 0202 ) för japanska

- UTF-8, UTF-16/UCS-2 och UTF-32/UCS-4 för Unicode

För dessa finns det tydliga skillnader mellan teckenuppsättning och teckenkodning.

Kodsidan används som synonym till teckenkodningstabellerna för vissa leverantörsspecifika tabeller.

| Notera
Observera att de flesta kodningssystem delar samma kod med ASCII för 7-bitars tecken. Men det finns några undantag. Om du konverterar gamla japanska C-program och URL-data från kodningsformatet shift-JIS till UTF-8-format ska du använda "`CP932`" som kodningsnamn i stället för "`shift-JIS`" för att få förväntat resultat: `0x5C` → "`\`" och `0x7E` → "`~`". Annars konverteras dessa till fel tecken.

| Tips
recode(1) kan också användas och erbjuder mer än den kombinerade funktionaliteten hos iconv(1), fromdos(1), todos(1), frommac(1) och tomac(1). För mer information, se "`info recode`".

### 11.1.2. Kontrollerar att filen är UTF-8 med iconv

Du kan kontrollera om en textfil är kodad i UTF-8 med iconv(1) på följande sätt.

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

| Tips
Använd alternativet "`--verbose`" i exemplet ovan för att hitta det första tecknet som inte är UTF-8.

### 11.1.3. Konvertera filnamn med iconv

Här är ett exempel på ett skript för att konvertera kodning av filnamn från sådana som skapats under äldre operativsystem till moderna UTF-8 i en enda katalog.

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

Variabeln "`$ENCDN`" anger den ursprungliga kodningen som används för filnamn under äldre operativsystem som i Tabell 11.2, ”Lista över kodningsvärden och deras användning”.

För mer komplicerade fall kan du montera ett filsystem (t.ex. en partition på en hårddisk) som innehåller sådana filnamn med korrekt kodning med alternativet mount(8) (se Avsnitt 8.1.3, ”Kodning av filnamn”) och kopiera hela innehållet till ett annat filsystem som är monterat som UTF-8 med kommandot "`cp -a`".

### 11.1.4. EOL-konvertering

Textfilformatet, särskilt koden för radavslut (EOL), är beroende av plattformen.

Tabell 11.3. Lista över EOL-stilar för olika plattformar

plattform | EOL-kod | kontroll | decimal | hexadecimal
--- | --- | --- | --- | ---
Debian (unix) | LF | `^J` | 10 | 0A
MSDOS och Windows | CR-LF | `^M^J` | 13 10 | 0D 0A
Apples Macintosh | SR | `^M` | 13 | 0D

Konverteringsprogrammen för EOL-format, fromdos(1), todos(1), frommac(1) och tomac(1), är ganska praktiska. recode(1) är också användbart.

| Notera
Vissa data i Debian-systemet, t.ex. wikisidans data för paketet `python-moinmoin`, använder CR-LF i MSDOS-stil som EOL-kod. Så ovanstående regel är bara en allmän regel.

| Notera
De flesta redigeringsprogram (t.ex. `vim`, `emacs`, `gedit`, ...) kan hantera filer i MSDOS-stil EOL på ett transparent sätt.

| Tips
Användningen av "`sed -e '/\r$/!s/$/\r/'`" istället för todos(1) är bättre när du vill förena EOL-stilen med MSDOS-stilen från den blandade MSDOS- och Unix-stilen. (t.ex. efter att ha slagit samman 2 MSDOS-stilfiler med diff3(1) Detta beror på att `todos` lägger till CR på alla rader.

### 11.1.5. TAB-konvertering

Det finns några få populära specialiserade program för att konvertera tab-koderna.

Tabell 11.4. Lista över TAB-konverteringskommandon från paketen `bsdmainutils` och `coreutils`

funktion | `bsdmainutils` | `coreutils`
--- | --- | ---
expandera fliken till mellanslag | "`col -x`" | `expandera`
oexpanderad flik från utrymmen | "`col -h`" | `unexpand`

indent(1) från `indent-paketet` omformaterar blanksteg i C-programmet helt och hållet.

Editorprogram som `vim` och `emacs` kan också användas för TAB-konvertering. Med `vim` kan du till exempel expandera TAB med kommandosekvenserna "`:set expandtab`" och "`:%retab`". Du kan återställa detta med kommandosekvenserna "`:set noexpandtab`" och "`:%retab!`".

### 11.1.6. Redaktörer med automatisk konvertering

Intelligenta moderna editorer som `vim-programmet` är ganska smarta och klarar sig bra med alla kodningssystem och alla filformat. För bästa kompatibilitet bör du använda dessa redigeringsprogram i UTF-8-lokalen i en UTF-8-kompatibel konsol.

En gammal västeuropeisk Unix-textfil, "`u-file.txt`", som lagras i kodningen latin1 (iso-8859-1) kan redigeras enkelt med `vim` på följande sätt.

    $ vim u-file.txt

Detta är möjligt eftersom den automatiska detekteringsmekanismen för filkodningen i `vim` först antar UTF-8-kodningen och, om den misslyckas, antar att den är latin1.

En gammal polsk Unix-textfil, "`pu-file.txt`", som lagras i kodningen latin2 (iso-8859-2) kan redigeras med `vim` på följande sätt.

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

En gammal japansk unix-textfil, "`ju-file.txt`", som lagrats i eucJP-kodning kan redigeras med `vim` på följande sätt.

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

En gammal japansk MS-Windows textfil, "`jw-file.txt`", lagrad i den s.k. shift-JIS-kodningen (mer exakt: CP932) kan redigeras med `vim` på följande sätt.

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

När en fil öppnas med flaggorna "`++enc`" och "`++ff`", lagrar "`:w`" i Vims kommandorad den i originalformat och skriver över originalfilen. Du kan också ange sparformatet och filnamnet i kommandoraden i Vim, t,ex, "`:w ++enc=utf8 new.txt`".

Se mbyte.txt "multi-byte text support" i `vim` on-line help och Tabell 11.2, ”Lista över kodningsvärden och deras användning” för lokala värden som används med "`++enc`".

Programfamiljen `emacs` kan utföra motsvarande funktioner.

### 11.1.7. Extrahering av vanlig text

Följande läser in en webbsida till en textfil. Detta är mycket användbart när du kopierar konfigurationer från webben eller använder grundläggande Unix-textverktyg som grep(1) på webbsidan.

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

På samma sätt kan du extrahera vanlig textdata från andra format med hjälp av följande.

Tabell 11.5. Lista över verktyg för att extrahera data i klartext

paket | popcon | storlek | sökord | funktion
--- | --- | --- | --- | ---
`w3m` | V:11, I:137 | 2853 | html→text | HTML till text-omvandlare med kommandot "`w3m -dump`"
`html2text` | V:3, I:68 | 298 | html→text | avancerad HTML till text-omvandlare (ISO 8859-1)
`lynx` | V:28, I:449 | 2031 | html→text | HTML till text-omvandlare med kommandot "`lynx -dump`"
`elinks` | V:3, I:16 | 1789 | html→text | HTML till text-omvandlare med kommandot "`elinks -dump`"
`links` | V:2, I:21 | 2321 | html→text | HTML till text-omvandlare med kommandot "`links -dump`"
`links2` | V:1, I:10 | 5466 | html→text | HTML-till-text-omvandlare med kommandot "`links2 -dump`"
`catdoc` | V:15, I:171 | 682 | MSWord→text,TeX | konvertera MSWord-filer till vanlig text eller TeX
`antiword` | V:0.9, I:6.5 | 587 | MSWord→text,ps | konvertera MSWord-filer till vanlig text eller ps
`unhtml` | V:0.04, I:0.50 | 40 | html→text | ta bort markeringstaggarna från en HTML-fil
`odt2txt` | V:1, I:21 | 60 | odt→text | omvandlare från OpenDocument Text till text

### 11.1.8. Markera och formatera data i klartext

Du kan markera och formatera vanlig textdata på följande sätt.

Tabell 11.6. Lista över verktyg för att markera data i klartext

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`vim-runtime` | V:17, I:365 | 38706 | highlight | Vim MACRO för att konvertera källkod till HTML med "`:source $VIMRUNTIME/syntax/html.vim`"
`cxref` | V:0.03, I:0.23 | 1191 | c→html | konverterare för C-programmet till latex och HTML (C-språk)
`src2tex` | V:0.02, I:0.18 | 1799 | highlight | konvertera många källkoder till TeX (C-språk)
`source-highlight` | V:0.5, I:3.2 | 2131 | highlight | konvertera många källkoder till HTML, XHTML, LaTeX, Texinfo, ANSI färg-escape-sekvenser och DocBook-filer med markering (C++)
`highlight` | V:0.4, I:3.1 | 1411 | highlight | konvertera många källkoder till HTML-, XHTML-, RTF-, LaTeX-, TeX- eller XSL-FO-filer med markering (C++)
`grc` | V:1.0, I:6.0 | 208 | text→färg | generisk färgläggare för allt (Python)
`pandoc` | V:10, I:47 | 208068 | text→någon | allmän markup-omvandlare (Haskell)
`python3-docutils` | V:12, I:52 | 2009 | text→någon | Formatering av ReStructured Text-dokument till XML (Python)
`markdown` | V:0.5, I:5.9 | 56 | text→html | Formatering av Markdown-textdokument till (X)HTML (Perl)
`asciidoctor` | V:0.4, I:4.8 | 101 | text→någon | AsciiDoc textdokumentformaterare till XML/HTML (Ruby)
`python3-sphinx` | V:6, I:27 | 3235 | text→någon | ReStructured Text-baserat system för publicering av dokument (Python)
`hugo` | V:0.8, I:5.1 | 66608 | text→html | Markdown-baserat system för publicering av statiska webbplatser (Go)

## 11.2. XML-data

XML (Extensible Markup Language) är ett märkspråk för dokument som innehåller strukturerad information.

Se inledande information på XML.COM.

- "Vad är XML?"

- "Vad är XSLT?"

- "Vad är XSL-FO?"

- "Vad är XLink?"

### 11.2.1. Grundläggande tips för XML

XML-text ser ut ungefär som HTML. Det gör det möjligt för oss att hantera flera format för utdata för ett dokument. Ett enkelt XML-system är `docbook-xsl-paketet`, som används här.

Varje XML-fil börjar med en standard XML-deklaration enligt följande.

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

Den grundläggande syntaxen för ett XML-element märks upp enligt följande.

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

XML-element med tomt innehåll märks upp i följande korta form.

    <name attribute="value" />

`Attributet "attribute="value`"" i exemplen ovan är valfritt.

Kommentarsfältet i XML är markerat enligt följande.

    <!-- comment -->

Förutom att lägga till markeringar kräver XML en mindre konvertering av innehållet med hjälp av fördefinierade enheter för följande tecken.

Tabell 11.7. Lista över fördefinierade enheter för XML

fördefinierad enhet | tecken som ska konverteras till
--- | ---
`&quot;` | "``: offert
`&apos;` | `'`: apostrof
`&lt;` | `<`: mindre än
`&gt;` | `>`: större än
`&amp;` | `&` : ampersand

| Observera
"`<`" eller "`&`" kan inte användas i attribut eller element.

| Notera
När användardefinierade entiteter i SGML-stil, t.ex. "`&some-tag;`", används, vinner den första definitionen över de andra. Entitetsdefinitionen uttrycks i "`<!ENTITY some-tag "entitetsvärde">`".

| Notera
Så länge XML-markeringen görs konsekvent med en viss uppsättning taggnamn (antingen vissa data som innehåll eller attributvärde), är konvertering till en annan XML en trivial uppgift med hjälp av Extensible Stylesheet Language Transformations (XSLT).

### 11.2.2. XML-bearbetning

Det finns många verktyg för att bearbeta XML-filer, t.ex. Extensible Stylesheet Language (XSL).

När du har skapat en välformad XML-fil kan du konvertera den till valfritt format med hjälp av Extensible Stylesheet Language Transformations (XSLT).

XSL-FO (Extensible Stylesheet Language for Formatting Objects) är tänkt att vara en lösning för formatering. Paketet `fop` är nytt i Debians `main` arkiv på grund av dess beroende av programspråket Java. Så LaTeX-koden genereras vanligtvis från XML med hjälp av XSLT och LaTeX-systemet används för att skapa utskrivbara filer som DVI, PostScript och PDF.

Tabell 11.8. Lista över XML-verktyg

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`docbook-xml` | V:15, I:408 | 2126 | xml | XML-dokumenttypdefinition (DTD) för DocBook
`docbook-xsl` | V:14, I:145 | 14823 | xml/xslt | XSL-stilmallar för bearbetning av DocBook XML till olika utdataformat med XSLT
`xsltproc` | V:15, I:73 | 83 | xslt | XSLT kommandoradsprocessor (XML→ XML, HTML, vanlig text, etc.)
`xmlto` | V:0.5, I:8.6 | 124 | xml/xslt | XML-till-alla-konverterare med XSLT
`fop` | V:0.7, I:8.1 | 281 | xml/xsl-fo | konvertera Docbook XML-filer till PDF
`dblatex` | V:0.9, I:5.8 | 4636 | xml/xslt | konvertera Docbook-filer till DVI-, PostScript-, PDF-dokument med XSLT
`dbtoepub` | V:0.05, I:0.50 | 37 | xml/xslt | DocBook XML till .epub-omvandlare

Eftersom XML är en delmängd av Standard Generalized Markup Language (SGML) kan det bearbetas med de omfattande verktyg som finns för SGML, t.ex. Document Style Semantics and Specification Language (DSSSL).

Tabell 11.9. Lista över DSSSL-verktyg

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`openjade` | V:1, I:22 | 1066 | dsssl | ISO/IEC 10179:1996 standard DSSSL-processor (senaste)
`docbook-dsssl` | V:0.5, I:7.9 | 2594 | xml/dsssl | DSSSL-stilmallar för bearbetning av DocBook XML till olika utdataformat med DSSSL
`docbook-utils` | V:0.4, I:5.6 | 287 | xml/dsssl | verktyg för DocBook-filer inklusive konvertering till andra format (HTML, RTF, PS, man, PDF) med `docbook2*-kommandon` med DSSSL

| Tips
GNOME:s `yelp` är ibland praktiskt för att läsa DocBook XML-filer direkt eftersom den återges hyfsat på X.

### 11.2.3. Extrahering av XML-data

Du kan extrahera HTML- eller XML-data från andra format på följande sätt.

Tabell 11.10. Lista över verktyg för extrahering av XML-data

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`man2html` | V:0.1, I:1.3 | 142 | manpage→html | omvandlare från manpage till HTML (CGI-stöd)
`doclifter` | V:0.01, I:0.05 | 487 | troff→xml | omvandlare från troff till DocBook XML
`texi2html` | V:0.2, I:3.0 | 1847 | texi→html | omvandlare från Texinfo till HTML
`info2www` | V:0.9, I:1.5 | 76 | info→html | konverterare från GNU info till HTML (CGI-stöd)
`wv` | V:0.2, I:2.5 | 733 | MSWord→någon | dokumentkonverterare från Microsoft Word till HTML, LaTeX, etc.
`unrtf` | V:0.3, I:2.9 | 159 | rtf→html | dokumentkonverterare från RTF till HTML, etc
`wp2x` | V:0.01, I:0.09 | 200 | WordPerfect→något | WordPerfect 5.0- och 5.1-filer till TeX, LaTeX, troff, GML och HTML

### 11.2.4. XML-data lint

För HTML-filer som inte är XML kan du konvertera dem till XHTML, som är en instans av välformad XML. XHTML kan bearbetas av XML-verktyg.

Syntaxen i XML-filer och korrektheten i de webbadresser som finns i dem kan kontrolleras.

Tabell 11.11. Lista över XML Pretty Print-verktyg

paket | popcon | storlek | funktion | beskrivning
--- | --- | --- | --- | ---
`libxml2-utils` | V:62, I:209 | 211 | xml↔html↔xhtml | xML-verktyg för kommandoraden med xmllint(1) (syntaxkontroll, omformatering, lint, ...)
`tidy` | V:0.9, I:7.3 | 79 | xml↔html↔xhtml | HTML syntaxkontroll och omformatering
`weblint-perl` | V:0.06, I:0.91 | 32 | ludd | syntax och minimal stilkontroll för HTML
`linklint` | V:0.06, I:0.47 | 343 | länk kontroll | verktyg för kontroll av snabblänkar och underhåll av webbplatser

När korrekt XML har genererats kan du använda XSLT-teknik för att extrahera data baserat på markeringskontexten etc.

## 11.3. Inställning av typ

Unix-programmet troff, som ursprungligen utvecklades av AT&T, kan användas för enkel sättning. Det används vanligtvis för att skapa manpages.

TeX, som skapades av Donald Knuth, är ett mycket kraftfullt verktyg för typsättning och är de facto-standarden. LaTeX, som ursprungligen skrevs av Leslie Lamport, ger tillgång till TeX:s kraft på hög nivå.

Tabell 11.12. Lista över typinställningsverktyg

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`texlive` | V:1, I:28 | 55 | (La)TeX | TeX-system för sättning, förhandsgranskning och utskrift
`groff` | V:2, I:24 | 16514 | troff | GNU troff textformateringssystem

### 11.3.1. roff sättning

Traditionellt är roff det huvudsakliga textbehandlingssystemet i Unix. Se 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) och "`info groff`".

Du kan läsa eller skriva ut en bra handledning och referens om "`-me`" -makro i "`/usr/share/doc/groff/`" genom att installera `groff-paketet`.

| Tips
"`groff -Tascii -`me -" ger ut vanlig text med ANSI escape-kod. Om du vill få ut manpage-liknande utdata med många "^H" och "_", använd "`GROFF_NO_SGR=1 groff -Tascii -me`-" istället.

| Tips
Om du vill ta bort "^H" och "_" från en textfil som genererats av `groff` filtrerar du den med "`col -b -x`".

### 11.3.2. TeX/LaTeX

Programvarudistributionen TeX Live erbjuder ett komplett TeX-system. Metapaketet `texlive` innehåller ett anständigt urval av TeX Live-paketen som bör räcka för de vanligaste uppgifterna.

Det finns många referenser tillgängliga för TeX och LaTeX.

- HOWTO för teTeX: Den lokala guiden för Linux-teTeX

- tex(1)

- latex(1)

- texdoc(1)

- texdoctk(1)

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

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

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

Detta är den mest kraftfulla sättningsmiljön. Många SGML-processorer använder detta som sin backend-textprocessor. Lyx som tillhandahålls av `lyxpaketet` och GNU TeXmacs som tillhandahålls av `texmacs-paketet` erbjuder en trevlig WYSIWYG-redigeringsmiljö för LaTeX medan många använder Emacs och Vim som val för källredigeraren.

Det finns många tillgängliga resurser på nätet.

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

- En enkel guide till Latex/Lyx

- Ordbehandling med hjälp av LaTeX

När dokumenten blir större kan TeX ibland orsaka fel. Du måste öka poolstorleken i "`/etc/texmf/texmf.cnf`" (eller mer lämpligt redigera "`/etc/texmf/texmf.d/95NonPath`" och köra update-texmf(8)) för att åtgärda detta.

| Notera

TeX-källan till "The TeXbook" finns tillgänglig på www.ctan.org tex-archive site for texbook.tex. Denna fil innehåller de flesta av de nödvändiga makron. Jag har hört att man kan bearbeta detta dokument med tex(1) efter att ha kommenterat raderna 7 till 10 och lagt till "`\input manmac \proofmodefalse`". Det rekommenderas starkt att köpa den här boken (och alla andra böcker av Donald E. Knuth) i stället för att använda onlineversionen, men källan är ett bra exempel på TeX-inmatning!

### 11.3.3. Skriv ut en manuell sida

Du kan skriva ut en manuell sida i PostScript på ett snyggt sätt med något av följande kommandon.

    $ man -Tps some_manpage | lpr

### 11.3.4. Skapa en manuell sida

Även om det är möjligt att skriva en manuell sida (manpage) i det vanliga troff-formatet finns det få hjälppaket för att skapa den.

Tabell 11.13. Lista över paket som hjälper till att skapa manpage

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`docbook-to-man` | V:0.6, I:5.7 | 189 | SGML→manusida | konverterare från DocBook SGML till roff man-makron
`help2man` | V:0.6, I:6.3 | 542 | text→manpage | automatisk generator av manpage från --help
`info2man` | V:0.01, I:0.19 | 134 | info→manpage | omvandlare från GNU info till POD eller man pages
`txt2man` | V:0.06, I:0.64 | 112 | text→manpage | konvertera platt ASCII-text till man page-format

## 11.4. Utskrivbara data

Utskrivbara data uttrycks i PostScript-format på Debian-systemet. CUPS (Common Unix Printing System) använder Ghostscript som backendprogram för rastrering för icke-PostScript-skrivare.

Utskrivbara data kan också uttryckas i PDF-format på det senaste Debian-systemet.

PDF-filer kan visas och dess formulärposter kan fyllas i med hjälp av GUI-visningsprogram som Evince och Okular (se Avsnitt 7.4, ”GUI-applikationer”) och moderna webbläsare som Chromium.

PDF-filer kan redigeras med hjälp av vissa grafikverktyg som LibreOffice, Scribus och Inkscape (se Avsnitt 11.6, ”Grafiska dataverktyg”).

| Tips
Du kan läsa en PDF-fil med GIMP och konvertera den till PNG-format med en upplösning på mer än 300 dpi. Detta kan användas som en bakgrundsbild för LibreOffice för att producera en önskvärd ändrad utskrift med minsta möjliga ansträngning.

### 11.4.1. Ghostscript

Kärnan i hanteringen av utskrivbara data är Ghostscript PostScript (PS) -tolken som genererar rasterbilder.

Tabell 11.14. Lista över Ghostscript PostScript-tolkar

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`ghostscript` | V:142, I:563 | 177 | GPL Ghostscript PostScript/PDF-tolk
`ghostscript-x` | V:0, I:15 | 88 | GPL Ghostscript PostScript/PDF-tolk - Stöd för X-display
`libpoppler156` | V:9, I:16 | 4989 | Bibliotek för PDF-rendering från PDF-tittaren xpdf
`libpoppler-glib8t64` | V:68, I:297 | 576 | Bibliotek för PDF-rendering (GLib-baserat delat bibliotek)
`poppler-data` | V:150, I:585 | 13086 | CMaps för PDF-renderingsbibliotek (för CJK-stöd: Adobe-*)

| Tips
"`gs -h`" kan visa konfigurationen för Ghostscript.

### 11.4.2. Slå samman två PS- eller PDF-filer

Du kan slå samman två PostScript (PS) - eller Portable Document Format (PDF) -filer med hjälp av gs(1) i 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

| Notera
PDF, som är ett allmänt använt utskriftsformat för flera plattformar, är i huvudsak det komprimerade PS-formatet med några ytterligare funktioner och tillägg.

| Tips
För kommandoraden är psmerge(1) och andra kommandon från `psutils-paketet` användbara för att manipulera PostScript-dokument. pdftk(1) från `pdftk-paketet` är också användbart för att manipulera PDF-dokument.

### 11.4.3. Verktyg för utskrivbara data

Jag fick upp ögonen för följande paket för utskriftsvänliga dataverktyg.

Tabell 11.15. Lista över utskrivbara dataprogram

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`poppler-utils` | V:106, I:474 | 756 | pdf→ps,text,… | PDF-verktyg: `pdftops`, `pdfinfo`, `pdfimages`, `pdftotext`, `pdffonts`
`psutils` | V:4, I:51 | 34 | ps→ps | Verktyg för konvertering av PostScript-dokument
`poster` | V:0.1, I:1.7 | 57 | ps→ps | skapa stora affischer av PostScript-sidor
`enscript` | V:1, I:11 | 2138 | text→ps, html, rtf | konvertera ASCII-text till PostScript, HTML, RTF eller Pretty-Print
`a2ps` | V:0.7, I:7.1 | 4109 | text→ps | "Allt till PostScript"-konverterare och pretty-printer
`pdftk` | V:1, I:22 | 28 | pdf→pdf | Verktyg för konvertering av PDF-dokument: `pdftk`
`html2ps` | V:0.1, I:1.7 | 256 | html→ps | omvandlare från HTML till PostScript
`gnuhtml2latex` | V:0.05, I:0.58 | 26 | html→latex | omvandlare från html till latex
`latex2rtf` | V:0.1, I:2.1 | 495 | latex→rtf | konvertera dokument från LaTeX till RTF som kan läsas av MS Word
`ps2eps` | V:2, I:33 | 95 | ps→eps | konvertering från PostScript till EPS (Encapsulated PostScript)
`e2ps` | V:0.01, I:0.11 | 104 | text→ps | Text till PostScript-omvandlare med stöd för japansk kodning
`impose+` | V:0.1, I:1.5 | 118 | ps→ps | PostScript-verktyg
`trueprint` | V:0.01, I:0.09 | 148 | text→ps | skriver ut många källkoder (C, C++, Java, Pascal, Perl, Pike, Sh och Verilog) till PostScript. (C-språk)
`pdf2svg` | V:0.2, I:3.0 | 33 | pdf→svg | omvandlare från PDF till skalbart vektorgrafikformat
`pdftoipe` | V:0.01, I:0.46 | 70 | pdf→ipe | konverterare från PDF till IPE:s XML-format

### 11.4.4. Skriva ut med CUPS

Kommandona lp(1) och lpr(1) som erbjuds av Common Unix Printing System (CUPS) ger möjlighet till anpassad utskrift av utskrivbara data.

Du kan skriva ut 3 kopior av en fil som är sorterad med hjälp av något av följande kommandon.

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

Du kan anpassa skrivarfunktionen ytterligare genom att använda skrivaralternativ som "`-o number-up=2`", "`-o page-set=even`", "`-o page-set=odd`", "`-o scaling=200`", "`-o natural-scaling=200`", etc., som finns dokumenterade i Command-Line Printing and Options.

## 11.5. Konvertering av postdata

Följande paket för konvertering av postdata fångade min uppmärksamhet.

Tabell 11.16. Lista över paket som hjälper till med konvertering av e-postdata

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`sharutils` | V:3, I:28 | 1436 | post | shar(1), unshar(1), uuencode(1), uudecode(1)
`mpack` | V:0.9, I:8.0 | 109 | MIME | kodning och avkodning av MIME-meddelanden: mpack(1) och munpack(1)
`tnef` | V:0.4, I:4.1 | 103 | ms-tnef | uppackning av MIME-bilagor av typen "application/ms-tnef" som endast är ett Microsoft-format
`uudeview` | V:0.2, I:1.8 | 105 | post | kodare och avkodare för följande format: uuencode, xxencode, BASE64, quotted printable, och BinHex

| Tips
IMAP4-servern ( Internet Message Access Protocol version 4) kan användas för att flytta ut e-post från proprietära e-postsystem om e-postklientprogrammet kan konfigureras så att det också använder IMAP4-servern.

### 11.5.1. Grunderna för e-postdata

Mail(SMTP) bör begränsas till serier av 7-bitarsdata. Binärdata och 8-bitars textdata kodas därför till 7-bitarsformat med hjälp av MIME (Multipurpose Internet Mail Extensions) och val av teckenuppsättning (se Tabell 11.2, ”Lista över kodningsvärden och deras användning”).

Standardlagringsformatet för e-post är mbox formaterat enligt RFC2822 (uppdaterad RFC822). Se mbox(5) (tillhandahålls av `mutt-paketet` ).

För europeiska språk används vanligtvis "`Content-Transfer-Encoding: quoted-printable`" med teckenuppsättningen ISO-8859-1 för e-post eftersom det inte finns så många 8-bitars tecken. Om europeisk text är kodad i UTF-8 kommer sannolikt "`Content-Transfer-Encoding: quoted-printable`" att användas eftersom det mestadels är 7-bitarsdata.

För japanska används traditionellt "`Content-Type: text/plain; charset=ISO-2022-JP`" för e-post för att hålla texten i 7 bitar. Men äldre Microsoft-system kan skicka e-postdata i Shift-JIS utan korrekt deklaration. Om japansk text kodas i UTF-8 kommer Base64 sannolikt att användas eftersom den innehåller många 8-bitarsdata. Situationen för andra asiatiska språk är liknande.

| Notera
Om dina e-postdata som inte är Unix är tillgängliga för en klientprogramvara som inte är Debian och som kan prata med IMAP4-servern, kan du kanske flytta ut dem genom att köra din egen IMAP4-server.

| Notera
Om du använder andra lagringsformat för e-post är det ett bra första steg att flytta dem till mbox-format. Ett mångsidigt klientprogram som mutt(1) kan vara praktiskt för detta.

Du kan dela upp innehållet i brevlådan till varje meddelande med procmail(1) och formail(1).

Varje e-postmeddelande kan packas upp med munpack(1) från `mpack-paketet` (eller andra specialiserade verktyg) för att få fram det MIME-kodade innehållet.

## 11.6. Grafiska dataverktyg

Även om GUI-program som gimp(1) är mycket kraftfulla, är kommandoradsverktyg som imagemagick(1) ganska användbara för att automatisera bildmanipulering via skript.

De facto bildfilformat för digitalkameror är EXIF ( Exchangeable Image File Format ), som är JPEG-bildfilformatet med ytterligare metadatataggar. Det kan innehålla information som datum, tid och kamerainställningar.

Patentet för den förlustfria datakomprimeringen Lempel-Ziv-Welch (LZW) har löpt ut. GIF-verktyg (Graphics Interchange Format) som använder LZW-komprimeringsmetoden är nu fritt tillgängliga på Debian-systemet.

| Tips
Alla digitalkameror eller skannrar med flyttbara inspelningsmedia fungerar med Linux via USB-lagringsläsare eftersom de följer designregeln för kamerafilsystem och använder FAT-filsystem. Se Avsnitt 10.1.7, ”Flyttbar lagringsenhet”.

### 11.6.1. Grafiska dataverktyg (metapaket)

Följande metapaket är bra utgångspunkter för att söka efter grafiska dataverktyg med aptitude(8). "Packages overview for Debian PhotoTools Maintainers" kan vara en annan startpunkt.

Tabell 11.17. Lista över verktyg för grafikdata (metapaket)

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`education-graphics` | I:0.35 | 25 | svg, jpeg, … | metapaket för undervisning i grafik och bildkonst.
`open-font-design-toolkit` | I:0.04 | 9 | ttf, ps, … | metapaket för öppen typsnittsdesign

| Tips
Sök efter fler bildverktyg med hjälp av regex "`~Gworks-with::image`" i aptitude(8) (se Avsnitt 2.2.6, ”Sök metodalternativ med aptitude”).

### 11.6.2. Grafiska dataverktyg (GUI)

Följande paket för datakonvertering, redigering och organisationsverktyg för GUI-grafik fångade min uppmärksamhet.

Tabell 11.18. Lista över verktyg för grafikdata (GUI)

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`gimp` | V:44, I:216 | 32791 | bild(bitmap) | GNU-program för bildmanipulering
`xsane` | V:9, I:129 | 1512 | bild(bitmap) | GTK-baserad X11-frontend för SANE (Scanner Access Now Easy)
`scribus` | V:1, I:13 | 32423 | ps/pdf/SVG/… | Scribus DTP-editor
`libreoffice-draw` | V:82, I:418 | 10995 | bild(vektor) | LibreOffice kontorspaket - ritning
`inkscape` | V:12, I:78 | 112538 | bild(vektor) | SVG-redigerare (skalbar vektorgrafik)
`dia` | V:1, I:17 | 3802 | bild(vektor) | diagramredigerare (Gtk)
`xfig` | V:0.6, I:8.9 | 7951 | bild(vektor) | Möjlighet till interaktiv generering av siffror enligt X11
`gocr` | V:0.5, I:3.9 | 549 | bild→text | gratis OCR-programvara
`eog` | V:26, I:143 | 10524 | bild(Exif) | Ögon av GNOME grafikvisare program
`gthumb` | V:3, I:12 | 5162 | bild(Exif) | bildvisare och webbläsare (GNOME)
`geeqie` | V:3, I:11 | 2903 | bild(Exif) | bildvisare med GTK
`shotwell` | V:14, I:246 | 6334 | bild(Exif) | digital fotoorganisator (GNOME)
`gwenview` | V:40, I:115 | 6000 | bild(Exif) | bildvisare (KDE)
`kamera` | I:114 | 992 | bild(Exif) | stöd för digitalkamera för KDE-applikationer
`digikam` | V:1.5, I:8.3 | 324 | bild(Exif) | program för hantering av digitala foton för KDE
`darktable` | V:4, I:11 | 35876 | bild(Exif) | virtuellt ljusbord och mörkrum för fotografer
`hugin` | V:0.5, I:5.6 | 6476 | bild(Exif) | panorama foto stitcher
`librecad` | V:1, I:14 | 9164 | DXF, ... | 2D CAD-dataredigerare
`freecad` | V:1, I:21 | 112 | DXF, ... | 3D CAD-dataredigerare
`blender` | V:2, I:20 | 92911 | blend, TIFF, VRML, … | 3D-innehållsredigerare för animering etc
`mm3d` | V:0.02, I:0.21 | 4123 | ms3d, obj, dxf, … | OpenGL-baserad 3D-modellredigerare
`fontforge` | V:0.6, I:5.6 | 4054 | ttf, ps, … | fontredigerare för PS-, TrueType- och OpenType-teckensnitt
`xgridfit` | V:0.01, I:0.08 | 878 | ttf | program för gridfitting och hintning av TrueType-teckensnitt

### 11.6.3. Grafiska dataverktyg (CLI)

Följande paket för CLI-verktyg för konvertering, redigering och organisering av grafikdata fångade min uppmärksamhet.

Tabell 11.19. Lista över verktyg för grafikdata (CLI)

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`imagemagick` | V:9, I:278 | 79 | bild(bitmap) | bildbehandlingsprogram
`graphicsmagick` | V:1.0, I:8.6 | 5816 | bild(bitmap) | bildmanipuleringsprogram (gaffel av `imagemagick`)
`netpbm` | V:27, I:288 | 8435 | bild(bitmap) | verktyg för grafisk konvertering
`libheif-examples` | V:0.3, I:3.5 | 438 | heif→jpeg(bitmap) | konvertera HEIF (High Efficiency Image File Format) till JPEG-, PNG- eller Y4M-format med kommandot heif-convert(1)
`icoutils` | V:3, I:34 | 221 | png↔ico(bitmapp) | konvertera MS Windows-ikoner och markörer till och från PNG-format(favicon.ico)
`pstoedit` | V:2, I:39 | 1075 | ps/pdf→bild(vektor) | Konvertera PostScript- och PDF-filer till redigerbar vektorgrafik (SVG)
`libwmf-bin` | V:5, I:83 | 149 | Fönster/bild(vektor) | Verktyg för konvertering av Windows-metafiler (vektorgrafikdata)
`fig2sxd` | V:0.03, I:0.18 | 158 | fig→sxd(vektor) | konvertera XFig-filer till OpenOffice.org Draw -format
`unpaper` | V:2, I:16 | 417 | bild→bild | verktyg för efterbehandling av skannade sidor för OCR
`tesseract-ocr` | V:8, I:33 | 2209 | bild→text | gratis OCR-programvara baserad på HP:s kommersiella OCR-motor
`tesseract-ocr-eng` | V:8, I:33 | 4032 | bild→text | OCR-motordata: tesseract-ocr-språkfiler för engelsk text
`ocrad` | V:0.3, I:2.4 | 608 | bild→text | gratis OCR-programvara
`exif` | V:3, I:51 | 335 | bild(Exif) | kommandoradsverktyg för att visa EXIF-information i JPEG-filer
`exiv2` | V:2, I:19 | 429 | bild(Exif) | Verktyg för hantering av EXIF/IPTC-metadata
`exiftran` | V:1, I:11 | 81 | bild(Exif) | omvandla digitalkamerans jpeg-bilder
`exiftags` | V:0.3, I:2.7 | 309 | bild(Exif) | verktyg för att läsa Exif-taggar från en JPEG-fil från en digitalkamera
`exifprobe` | V:0.2, I:2.1 | 506 | bild(Exif) | läsa metadata från digitala bilder
`dcraw` | V:0.8, I:7.3 | 428 | bild(Raw)→ppm | avkoda råa digitalkamerabilder
`findimagedupes` | V:0.1, I:1.1 | 75 | bild→fingeravtryck | hitta visuellt liknande eller duplicerade bilder
`ale` | V:0.02, I:0.16 | 850 | bild→bild | sammanfoga bilder för att öka återgivningen eller skapa mosaiker
`imageindex` | V:0.2, I:1.2 | 143 | bild(Exif)→html | generera statiska HTML-gallerier från bilder
`outguess` | V:0.11, I:0.99 | 230 | jpeg,png | universellt steganografiskt verktyg
`jpegoptim` | V:0.6, I:6.0 | 59 | jpeg | optimera JPEG-filer
`optipng` | V:2, I:40 | 187 | png | optimera PNG-filer, förlustfri komprimering
`pngquant` | V:1, I:10 | 62 | png | optimera PNG-filer, förlustfri komprimering

## 11.7. Diverse datakonvertering

Det finns många andra program för konvertering av data. Följande paket fångade mina ögon med hjälp av regex "`~Guse::converting`" i aptitude(8) (se Avsnitt 2.2.6, ”Sök metodalternativ med aptitude”).

Tabell 11.20. Lista över diverse verktyg för datakonvertering

paket | popcon | storlek | sökord | beskrivning
--- | --- | --- | --- | ---
`alien` | V:1, I:13 | 150 | rpm/tgz→deb | konverterare för det utländska paketet till Debian-paketet
`freepwing` | V:0.00, I:0.02 | 447 | EB→EPWING | omvandlare från "Electric Book" (populärt i Japan) till ett enda JIS X 4081-format (en delmängd av EPWING V1)
`calibre` | V:7, I:24 | 65193 | alla→EPUB | e-bokskonverterare och bibliotekshantering

Du kan också extrahera data från RPM-format med följande.

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

Kapitel 10. Datahantering |  | Kapitel 12. Programmering