Bab 11. Konversi data

# Bab 11. Konversi data

Alat dan tips untuk mengonversi format data pada sistem Debian dijelaskan.

Alat berbasis standar dalam kondisi yang sangat baik tetapi dukungan untuk format data proprietari terbatas.

## 11.1. Alat konversi data teks

Paket-paket berikut untuk konversi data teks menarik perhatian saya.

Tabel 11.1. Daftar alat konversi data teks

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`libc6` | V:942, I:1000 | 5481 | set karakter | konverter pengodean teks antar lokal dengan iconv(1) (fundamental)
`recode` | V:2, I:13 | 528 | charset+eol | konverter pengodean teks antar lokal (serbaguna, lebih banyak alias dan fitur)
`konwert` | V:2, I:42 | 137 | set karakter | konverter pengodean teks antar lokal (mewah)
`nkf` | V:0.4, I:8.5 | 360 | set karakter | penerjemah set karakter untuk bahasa Jepang
`tcs` | V:0.01, I:0.14 | 518 | set karakter | penerjemah set karakter
`unaccent` | V:0.03, I:0.28 | 35 | set karakter | mengganti huruf beraksen dengan ekuivalennya yang tidak berakses
`tofrodos` | V:1, I:12 | 50 | eol | pengubah format teks antara DOS dan Unix: fromdos(1) dan todos(1)
`macutils` | V:0.04, I:0.43 | 319 | eol | pengubah format teks antara Macintosh dan Unix: frommac(1) dan tomac(1)

### 11.1.1. Mengonversi berkas teks dengan iconv

| Tip
iconv(1) disediakan sebagai bagian dari paket `libc6` dan selalu tersedia di hampir semua sistem mirip Unix untuk mengonversi pengodean karakter.

Anda dapat mengonversi pengodean berkas teks dengan iconv(1) dengan yang berikut ini.

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

Nilai pengodean tidak membedakan huruf besar kecil dan mengabaikan "`-`" dan "`_`" untuk pencocokkan. Pengodean yang didukung dapat diperiksa oleh perintah "`iconv -l`".

Tabel 11.2. Daftar nilai pengodean dan penggunaannya

nilai pengodean | pengunaan
--- | ---
ASCII | American Standard Code for Information Interchange, kode 7 bit tanpa karakter beraksen
UTF-8 | standar multibahasa saat ini untuk semua OS modern
ISO-8859-1 | standar lama untuk bahasa Eropa Barat, ASCII + karakter beraksen
ISO-8859-2 | standar lama untuk bahasa Eropa Timur, karakter beraksen ASCII +
ISO-8859-15 | standar lama untuk bahasa Eropa Barat, ISO-8859-1 dengan tanda euro
CP850 | code page 850, karakter Microsoft DOS dengan grafis untuk bahasa Eropa Barat, varian ISO-8859-1
CP932 | code page 932, varian Shift-JIS gaya Microsoft Windows untuk bahasa Jepang
CP936 | code page 936, varian GB2312, GBK, atau GB18030 gaya Microsoft Windows untuk bahasa Cina yang Disederhanakan
CP949 | code page 949, varian EUC-KR atau Unified Hangul Code gaya Microsoft Windows untuk bahasa Korea
CP950 | code page 950, varian Big5 gaya Microsoft Windows untuk bahasa Cina Tradisional
CP1251 | code page 1251, pengodean gaya Microsoft Windows untuk alfabet Cyrillic
CP1252 | code page 1252, varian ISO-8859-15 gaya Microsoft Windows untuk bahasa-bahasa Eropa Barat
KOI8-R | standar UNIX bahasa Rusia lama untuk alfabet Cyrillic
ISO-2022-JP | pengodean standar untuk surel berbahasa Jepang yang hanya menggunakan kode 7 bit
eucJP | kode 8 bit standar UNIX Jepang lama dan benar-benar berbeda dari Shift-JIS
Shift-JIS | JIS X 0208 Lampiran 1 standar untuk bahasa Jepang (lihat CP932)

| Catatan
Beberapa pengodean hanya didukung untuk konversi data dan tidak digunakan sebagai nilai lokal (Bagian 8.1, “Lokal”).

Untuk set karakter yang masuk dalam byte tunggal seperti set karakter ASCII dan ISO-8859, pengodean karakter berarti hampir sama dengan set karakter.

Untuk set karakter dengan banyak karakter seperti JIS X 0213 untuk Jepang atau Universal Character Set (UCS, Unicode, ISO-10646-1) untuk hampir semua bahasa, ada banyak skema pengodean yang sesuai dengan mereka ke dalam urutan data byte.

- EUC dan ISO/IEC 2022 (juga dikenal sebagai JIS X 0202) untuk bahasa Jepang

- UTF-8, UTF-16/UCS-2, dan UTF-32/UCS-4 untuk Unicode

Untuk ini, ada diferensiasi yang jelas antara set karakter dan pengodean karakter.

Code page digunakan sebagai sinonim untuk tabel pengodean karakter untuk beberapa vendor tertentu.

| Catatan

Harap dicatat sebagian besar sistem pengodean berbagi kode yang sama dengan ASCII untuk karakter 7 bit. Tapi ada beberapa pengecualian. Jika Anda mengonversi program C Jepang lama dan data URL dari format pengodean yang disebut santai shift-JIS ke format UTF-8, gunakan "`CP932`" sebagai nama pengodean alih-alih "`shift-JIS`" untuk mendapatkan hasil yang diharapkan: `0x5C` → "`\`" dan `0x7E` → "`~`". Jika tidak, ini diubah menjadi karakter yang salah.

| Tip
recode(1) dapat digunakan juga dan menawarkan lebih dari fungsi gabungan iconv(1), fromdos(1), todos(1), frommac(1), dan tomac(1). Untuk informasi lebih lanjut, lihat "`info recode`".

### 11.1.2. Memeriksa berkas apakah UTF-8 dengan iconv

Anda dapat memeriksa apakah berkas teks dikodekan dalam UTF-8 dengan iconv(1) dengan yang berikut ini.

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

| Tip
Gunakan opsi "`--verbose`" dalam contoh di atas untuk menemukan karakter non-UTF-8 pertama.

### 11.1.3. Mengonversi nama berkas dengan iconv

Berikut adalah contoh skrip untuk mengonversi pengkodean nama berkas dari yang dibuat di bawah OS lama ke UTF-8 modern dalam satu direktori.

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

Variabel "`$ENCDN`" menentukan pengodean asli yang digunakan untuk nama berkas di bawah OS yang lebih tua seperti dalam Tabel 11.2, “Daftar nilai pengodean dan penggunaannya”.

Untuk kasus yang lebih rumit, silakan kait suatu sistem berkas (misalnya partisi pada disk drive) yang berisi nama berkas tersebut dengan pengodean yang tepat sebagai opsi mount(8) (lihat Bagian 8.1.3, “Pengodean nama berkas”) dan menyalin seluruh isinya ke sistem berkas lain yang dikait sebagai UTF-8 dengan perintah "`cp -a`".

### 11.1.4. Konversi EOL

Format berkas teks, khususnya kode end-of-line (EOL/akhir baris), tergantung pada platform.

Tabel 11.3. Daftar gaya EOL untuk platform yang berbeda

platform | Kode EOL | kontrol | desimal | heksadesimal
--- | --- | --- | --- | ---
Debian (unix) | LF | `^J` | 10 | 0A
MSDOS dan Windows | CR-LF | `^M^J` | 13 10 | 0D 0A
Apple Macintosh | CR | `^M` | 13 | 0D

Program konversi format EOL, fromdos(1), todos(1), frommac(1), dan tomac(1), cukup berguna. recode(1) juga berguna.

| Catatan
Sebagian data pada sistem Debian, seperti data halaman wiki untuk paket `python-moinmoin`, menggunakan CR-LF gaya MSDOS sebagai kode EOL. Jadi aturan di atas hanyalah aturan umum.

| Catatan
Sebagian besar penyunting (misalnya `vim`, `emacs`, `gedit`, …) dapat menangani berkas dalam EOL gaya MSDOS secara transparan.

| Tip
Penggunaan "`sed -e '/\r$/!s/$/\r/'`" daripada todos(1) lebih baik ketika Anda ingin menyatukan gaya EOL ke gaya MSDOS dari campuran gaya MSDOS dan Unix. (misalnya, setelah menggabungkan 2 berkas gaya MSDOS dengan diff3(1).) Ini karena `todos` menambahkan CR ke semua baris.

### 11.1.5. Konversi TAB

Ada beberapa program khusus yang populer untuk mengonversi kode-kode tab.

Tabel 11.4. Daftar perintah konversi TAB dari paket `bsdmainutils` dan `coreutils`

fungsi | `bsdmainutils` | `coreutils`
--- | --- | ---
mengekspansi tab ke spasi | "`col -x`" | `expand`
membatalkan ekspansi tab dari spasi | "`col -h`" | `unexpand`

indent(1) dari paket `indent` benar-benar memformat ulang spasi dalam program C.

Program penyunting seperti `vim` dan `emacs` dapat digunakan untuk konversi TAB juga. Misalnya dengan `vim`, Anda dapat memperluas TAB dengan urutan perintah "`:set expandtab`" dan "`:%retab`". Anda dapat mengembalikan ini dengan urutan perintah "`:set noexpandtab`" dan "`:%retab!`".

### 11.1.6. Penyunting dengan konversi otomatis

Penyunting modern cerdas seperti program `vim` cukup cerdas dan mengatasi dengan baik dengan sistem pengodean dan format berkas apa pun. Anda harus menggunakan penyunting ini di bawah lokal UTF-8 di konsol yang mampu UTF-8 untuk kompatibilitas terbaik.

Sebuah berkas teks Unix Eropa barat lama, "`u-file.txt`", disimpan dalam pengodean latin1 (iso-8859-1) dapat disunting memakai `vim` dengan yang berikut.

    $ vim u-file.txt

Hal ini dimungkinkan karena mekanisme deteksi otomatis dari pengodean berkas di `vim` mengasumsikan pengodean UTF-8 terlebih dahulu dan, jika gagal, mengasumsikannya sebagai latin1.

Berkas teks Unix Polandia lama, "`pu-file.txt`", disimpan dalam pengodean latin2 (iso-8859-2) dapat disunting memakai `vim` dengan yang berikut.

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

Berkas teks unix Jepang lama, "`ju-file.txt`", disimpan dalam pengodean eucJP dapat disunting memakai `vim` dengan yang berikut.

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

Berkas teks MS-Windows Jepang lama, "`jw-file.txt`", disimpan dalam apa yang disebut pengodean shift-JIS (lebih tepatnya: CP932) dapat disunting memakai `vim` dengan yang berikut.

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

Ketika sebuah berkas dibuka dengan opsi "`++enc`" dan "`++ff`", "`:w`" di baris perintah Vim menyimpannya dalam format asli dan menimpa berkas asli. Anda juga dapat menentukan format penyimpanan dan nama berkas di baris perintah Vim, misalnya, "`:w ++enc=utf8 new.txt`".

Silakan lihat mbyte.txt "dukungan teks multi-byte" dalam bantuan daring `vim` dan Tabel 11.2, “Daftar nilai pengodean dan penggunaannya” untuk nilai lokal yang digunakan dengan "`++enc`".

Program keluarga `emacs` dapat melakukan fungsi yang setara.

### 11.1.7. Ekstraksi teks polos

Yang berikut ini membaca halaman web ke dalam berkas teks. Ini sangat berguna saat menyalin konfigurasi dari Web atau menerapkan alat teks Unix dasar seperti grep(1) di halaman web.

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

Demikian pula, Anda dapat mengekstrak data teks polos dari format lain menggunakan yang berikut.

Tabel 11.5. Daftar alat untuk mengekstrak data teks polos

paket | popcon | ukuran | kata kunci | fungsi
--- | --- | --- | --- | ---
`w3m` | V:10, I:134 | 2853 | html→teks | Konverter HTML ke teks dengan perintah "`w3m -dump`"
`html2text` | V:3, I:68 | 298 | html→teks | konverter tingkat lanjut HTML ke teks (ISO 8859-1)
`lynx` | V:29, I:448 | 2031 | html→teks | Pengubah HTML ke teks dengan perintah "`lynx -dump`"
`elinks` | V:3, I:16 | 1791 | html→teks | Pengubah HTML ke teks dengan perintah "`elinks -dump`"
`links` | V:2, I:21 | 2321 | html→teks | Pengubah HTML ke teks dengan perintah "`links -dump`"
`links2` | V:0.8, I:8.6 | 5466 | html→teks | Pengubah HTML ke teks dengan perintah "`links2 -dump`"
`catdoc` | V:15, I:170 | 682 | MSWord→teks,TeX | mengonversi berkas MSWord menjadi teks polos atau TeX
`antiword` | V:0.9, I:6.7 | 587 | MSWord→teks,ps | mengonversi berkas MSWord menjadi teks polos atau ps
`unhtml` | V:0.05, I:0.49 | 40 | html→teks | menghapus tag markup dari berkas HTML
`odt2txt` | V:1, I:20 | 60 | odt→teks | konverter dari OpenDocument Text ke teks

### 11.1.8. Menyoroti dan memformat data teks polos

Anda dapat menyorot dan memformat data teks polos dengan berikut ini.

Tabel 11.6. Daftar alat untuk menyoroti data teks polos

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`vim-runtime` | V:18, I:360 | 38849 | penyorotan | MAKRO Vim untuk mengonversi kode sumber ke HTML dengan "`:source $VIMRUNTIME/syntax/html.vim`"
`cxref` | V:0.01, I:0.23 | 1191 | c→html | pengubah bagi program C ke latex dan HTML (bahasa C)
`src2tex` | V:0.02, I:0.16 | 1799 | penyorotan | mengonversi banyak kode sumber ke TeX (bahasa C)
`source-highlight` | V:0.4, I:3.1 | 2131 | penyorotan | mengonversi banyak kode sumber ke berkas HTML, XHTML, LaTeX, Texinfo, escape sequence warna ANSI, dan DocBook dengan penyorotan (C++)
`highlight` | V:0.4, I:3.1 | 1412 | penyorotan | mengonversi banyak kode sumber ke berkas HTML, XHTML, RTF, LaTeX, TeX, atau XSL-FO dengan penyorotan (C++)
`grc` | V:0.9, I:5.9 | 208 | teks→color | pewarna generik untuk semuanya (Python)
`pandoc` | V:10, I:46 | 209102 | teks→apa pun | pengubah markup umum (Haskell)
`python3-docutils` | V:11, I:50 | 2013 | teks→apa pun | Pemformat dokumen ReStructured Text ke XML (Python)
`markdown` | V:0.4, I:6.1 | 56 | teks→html | Pemformat dokumen teks markdown ke (X)HTML (Perl)
`asciidoctor` | V:0.4, I:5.0 | 101 | teks→apa pun | Pemformat dokumen teks AsciiDoc ke XML/HTML (Python)
`python3-sphinx` | V:6, I:25 | 3234 | teks→apa pun | Sistem publikasi dokumen berbasis ReStructured Text (Python)
`hugo` | V:0.8, I:5.3 | 66736 | teks→html | Sistem publikasi situs statis berbasis markdown (Go)

## 11.2. Data XML

Extensible Markup Language (XML) adalah bahasa markup untuk dokumen yang berisi informasi terstruktur.

Lihat informasi pengantar di XML.COM.

- "Apa itu XML?"

- "Apa itu XSLT?"

- "Apa itu XSL-FO?"

- "Apa itu XLink?"

### 11.2.1. Petunjuk dasar untuk XML

Teks XML terlihat agak mirip HTML. Ini memungkinkan kita untuk mengelola beberapa format keluaran untuk dokumen. Salah satu sistem XML yang mudah adalah paket `docbook-xsl`, yang digunakan di sini.

Setiap berkas XML dimulai dengan deklarasi XML standar sebagai berikut.

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

Sintaks dasar untuk satu elemen XML ditandai sebagai berikut.

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

Elemen XML dengan konten kosong ditandai dalam bentuk pendek berikut.

    <name attribute="value" />

"`attribute="nilai"`" dalam contoh di atas adalah opsional.

Bagian komentar dalam XML ditandai sebagai berikut.

    <!-- comment -->

Selain menambahkan markup, XML memerlukan konversi kecil ke konten menggunakan entitas terpradefinisi untuk karakter-karakter berikut.

Tabel 11.7. Daftar entitas terpradefinisi untuk XML

entitas terpradefinisi | tujuan konversi karakter
--- | ---
`&quot;` | `"` : kutip
`&apos;` | `'` : apostrof
`&lt;` | `<` : kurang dari
`&gt;` | `>:` : lebih dari
`&amp;` | `&` : ampersand

| Perhatian
"`<`" atau "`&`" tidak dapat digunakan dalam atribut atau elemen.

| Catatan
Ketika entitas tentuan pengguna gaya SGML, misalnya "`&tag-anu;`", digunakan, definisi pertama menang atas yang lain. Definisi entitas dinyatakan dalam "`<!ENTITY tag-anu "entity value">`".

| Catatan
Selama markup XML dilakukan secara konsisten dengan set tertentu dari nama tag (baik beberapa data sebagai konten atau nilai atribut), konversi ke XML lain adalah tugas sepele menggunakan Extensible Stylesheet Language Transformations (XSLT).

### 11.2.2. Pemrosesan XML

Ada banyak alat yang tersedia untuk memproses berkas XML seperti Extensible Stylesheet Language (XSL).

Pada dasarnya, setelah Anda membuat berkas XML yang terbentuk dengan baik, Anda dapat mengonversinya ke format apa pun menggunakan Extensible Stylesheet Language Transformations (XSLT).

Extensible Stylesheet Language for Formatting Objects (XSL-FO) seharusnya menjadi solusi untuk pemformatan. Paket `fop` baru di arsip `main` Debian karena ketergantungannya pada bahasa pemrograman Java. Jadi kode LaTeX biasanya dihasilkan dari XML menggunakan XSLT dan sistem LaTeX digunakan untuk membuat berkas yang dapat dicetak seperti DVI, PostScript, dan PDF.

Tabel 11.8. Daftar alat XML

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`docbook-xml` | V:15, I:404 | 2126 | xml | Definisi tipe dokumen XML (DTD) untuk DocBook
`docbook-xsl` | V:14, I:145 | 14823 | xml/xslt | Stylesheet XSL untuk memroses DocBook XML ke berbagai format keluaran dengan XSLT
`xsltproc` | V:15, I:72 | 83 | xslt | Prosesor baris perintah XSLT (XML→ XML, HTML, teks polos, dll.)
`xmlto` | V:0.5, I:8.8 | 124 | xml/xslt | Konverter XML-ke-apa-pun dengan XSLT
`fop` | V:0.6, I:7.6 | 281 | xml/xsl-fo | mengonversi berkas XML Docbook ke PDF
`dblatex` | V:0.9, I:5.9 | 4636 | xml/xslt | mengonversi berkas Docbook ke dokumen DVI, PostScript, PDF dengan XSLT
`dbtoepub` | V:0.05, I:0.58 | 37 | xml/xslt | konverter DocBook XML ke .epub

Karena XML adalah bagian dari Standard Generalized Markup Language (SGML), itu dapat diproses oleh alat yang banyak tersedia untuk SGML, seperti Document Style Semantics and Specification Language (DSSSL).

Tabel 11.9. Daftar alat DSSSL

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`openjade` | V:1, I:22 | 1066 | dsssl | ISO /IEC 10179:1996 standar prosesor DSSSL (terbaru)
`docbook-dsssl` | V:0.5, I:8.0 | 2594 | xml/dsssl | Stylesheet DSSSL untuk memroses DocBook XML ke berbagai format keluaran dengan DSSSL
`docbook-utils` | V:0.3, I:5.7 | 287 | xml/dsssl | utilitas untuk berkas DocBook termasuk konversi ke format lain (HTML, RTF, PS, man, PDF) dengan perintah `docbook2*` dengan DSSSL

| Tip
GNOME `yelp` kadang-kadang berguna untuk membaca berkas XML Docbook secara langsung karena itu merender secara layak pada X.

### 11.2.3. Ekstraksi data XML

Anda dapat mengekstrak data HTML atau XML dari format lain menggunakan berikut.

Tabel 11.10. Daftar alat ekstraksi data XML

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`man2html` | V:0.1, I:1.3 | 142 | manpage→html | konverter dari manpage ke HTML (dukungan CGI)
`doclifter` | I:0.04 | 487 | troff→xml | konverter dari troff ke DocBook XML
`texi2html` | V:0.2, I:2.9 | 1847 | texi→html | konverter dari Texinfo ke HTML
`info2www` | V:0.9, I:1.5 | 76 | info→html | konverter dari info GNU ke HTML (dukungan CGI)
`wv` | V:0.2, I:2.5 | 733 | MSWord→apapun | konverter dokumen dari Microsoft Word ke HTML, LaTeX, dll.
`unrtf` | V:0.3, I:3.0 | 159 | rtf→html | konverter dokumen dari RTF ke HTML, dll
`wp2x` | I:0.09 | 200 | WordPerfect→apapun | berkas WordPerfect 5.0 dan 5.1 ke TeX, LaTeX, troff, GML, dan HTML

### 11.2.4. Lint data XML

Untuk berkas HTML non-XML, Anda dapat mengonversinya ke XHTML yang merupakan contoh XML yang terbentuk dengan baik. XHTML dapat diproses dengan alat XML.

Sintaks berkas XML dan kebaikan URL yang ditemukan di dalamnya dapat diperiksa.

Tabel 11.11. Daftar alat cetak cantik XML

paket | popcon | ukuran | fungsi | deskripsi
--- | --- | --- | --- | ---
`libxml2-utils` | V:60, I:210 | 211 | xml↔html↔xhtml | alat XML baris perintah dengan xmllint(1) (pemeriksaan sintaks, memformat ulang, lint, …)
`tidy` | V:0.8, I:7.5 | 79 | xml↔html↔xhtml | Pemeriksa sintaks dan pemformat ulang HTML
`weblint-perl` | V:0.05, I:0.96 | 32 | lint | sintaks dan pemeriksa gaya minimal untuk HTML
`linklint` | V:0.06, I:0.49 | 343 | pemeriksaan tautan | alat pemeriksa tautan cepat dan pemeliharaan situs web

Setelah XML yang tepat dihasilkan, Anda dapat menggunakan teknologi XSLT untuk mengekstrak data berdasarkan konteks mark-up dll.

## 11.3. Tata cetak

Program troff Unix yang awalnya dikembangkan oleh AT&T dapat digunakan untuk tata cetak sederhana. Ini biasanya digunakan untuk membuat manpage.

TeX yang dibuat oleh Donald Knuth adalah alat tata cetak yang sangat kuat dan merupakan standar de facto. LaTeX awalnya ditulis oleh Leslie Lamport memungkinkan akses tingkat tinggi ke kekuatan TeX.

Tabel 11.12. Daftar alat tata cetak

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`texlive` | V:1, I:27 | 55 | (La)TeX | Sistem TeX untuk tata cetak, pratinjau, dan pencetakan
`lilypond` | V:0.6, I:5.7 | 16924 | (La)TeX | penata cetak musik
`groff` | V:2, I:24 | 16514 | troff | Sistem pemformatan teks GNU troff

### 11.3.1. typesetting roff

Secara tradisional, roff adalah sistem pemrosesan teks Unix utama. Lihat 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), dan "`info groff`".

Anda dapat membaca atau mencetak tutorial dan referensi yang bagus tentang "`-me`" makro di "`/usr/share/doc/groff/`" dengan memasang paket `groff`.

| Tip
"`groff -Tascii -me -`" menghasilkan keluaran teks polos dengan kode escape ANSI. Jika Anda ingin mendapatkan keluaran mirip manpage dengan banyak "^H" dan "_", gunakan "`GROFF_NO_SGR=1 groff -Tascii -me -`" sebagai gantinya.

| Tip
Untuk menghapus "^H" dan "_" dari berkas teks yang dihasilkan oleh `groff`, filter dengan "`col -b -x`".

### 11.3.2. TeX/LaTeX

Distribusi perangkat lunak TeX Live menawarkan sistem TeX yang lengkap. Metapackage `texlive` menyediakan pilihan yang layak dari paket TeX Live yang seharusnya cukup untuk tugas yang paling umum.

Ada banyak referensi yang tersedia untuk TeX dan LaTeX.

- The teTeX HOWTO: The Linux-teTeX Local Guide

- tex(1)

- latex(1)

- texdoc(1)

- texdoctk(1)

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

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

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

Ini adalah lingkungan tata cetak yang paling kuat. Banyak prosesor SGML menggunakan ini sebagai prosesor teks back end mereka. Lyx yang disediakan oleh paket `lyx` dan GNU TeXmacs yang disediakan oleh paket `texmacs` menawarkan lingkungan penyuntingan WYSIWYG yang bagus untuk LaTeX sementara banyak yang menggunakan Emacs dan Vim sebagai pilihan untuk penyunting sumber.

Ada banyak sumber daya daring yang tersedia.

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

- Panduan Sederhana untuk Lateks/Lyx

- Pengolah Kata Menggunakan LaTeX

Ketika dokumen menjadi lebih besar, terkadang TeX dapat menyebabkan kesalahan. Anda harus meningkatkan ukuran pool di "`/etc/texmf/texmf.cnf`" (atau lebih tepat menyunting "`/etc/texmf/texmf.d/95NonPath`" dan menjalankan update-texmf(8)) untuk memperbaiki ini.

| Catatan

Sumber TeX "The TeXbook" tersedia di situs arsip text www.ctan.org bagi texbook.tex. Berkas ini berisi sebagian besar makro yang diperlukan. Saya mendengar bahwa Anda dapat memroses dokumen ini dengan tex(1) setelah mengomentari baris 7 hingga 10 dan menambahkan "`\input manmac \proofmodefalse`". Sangat disarankan untuk membeli buku ini (dan semua buku lain dari Donald E. Knuth) daripada menggunakan versi daring tetapi sumbernya adalah contoh yang bagus dari masukan TeX!

### 11.3.3. Mencetak cantik halaman manual

Anda dapat mencetak halaman manual dalam PostScript dengan baik dengan salah satu perintah berikut.

    $ man -Tps some_manpage | lpr

### 11.3.4. Membuat halaman manual

Meskipun menulis halaman manual (manpage) dalam format troff polos adalah mungkin, ada beberapa paket pembantu untuk membuatnya.

Tabel 11.13. Daftar paket untuk membantu membuat manpage

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`docbook-to-man` | V:0.5, I:5.7 | 189 | SGML→manpage | konverter dari DocBook SGML ke makro man roff
`help2man` | V:0.5, I:6.4 | 542 | text→manpage | generator manpage otomatis dari --help
`info2man` | V:0.02, I:0.21 | 134 | info→manpage | konverter dari info GNU ke halaman POD atau man
`txt2man` | V:0.05, I:0.66 | 112 | text→manpage | mengonversi teks ASCII datar ke format halaman man

## 11.4. Data yang dapat dicetak

Data yang dapat dicetak dinyatakan dalam format PostScript pada sistem Debian. Common Unix Printing System (CUPS) menggunakan Ghostscript sebagai program backend peraster untuk pencetak non-PostScript.

Data yang dapat dicetak juga dapat dinyatakan dalam format PDF pada sistem Debian terbaru.

Berkas PDF dapat ditampilkan dan entri formulirnya dapat diisi menggunakan alat penampil GUI seperti Evince dan Okular (lihat Bagian 7.4, “Aplikasi GUI”); dan peramban modern seperti Chromium.

Berkas PDF dapat disunting menggunakan beberapa alat bantu grafis seperti LibreOffice, Scribus, dan Inkscape (lihat Bagian 11.6, “Alat data grafis”).

| Tip
Anda dapat membaca berkas PDF dengan GIMP dan mengonversinya ke dalam format PNG dengan resolusi lebih tinggi dari 300 dpi. Ini dapat digunakan sebagai gambar latar bagi LibreOffice untuk menghasilkan pengubahan cetakan yang diinginkan dengan upaya minimum.

### 11.4.1. Ghostscript

Inti dari manipulasi data yang dapat dicetak adalah interpreter PostScript (PS) Ghostscript yang menghasilkan gambar raster.

Tabel 11.14. Daftar penerjemah PostScript Ghostscript

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`ghostscript` | V:181, I:559 | 177 | Interpreter GPL Ghostscript PostScript/PDF
`ghostscript-x` | V:0, I:14 | 88 | Interpreter GPL Ghostscript PostScript/PDF - Dukungan tampilan X
`libpoppler162` | V:1.2, I:3.1 | 5313 | Pustaka perenderan PDF yang di-fork dari penampil PDF xpdf
`libpoppler-glib8t64` | V:73, I:307 | 612 | Pustaka perenderan PDF (pustaka bersama berbasis GLib)
`poppler-data` | V:169, I:580 | 13086 | CMaps untuk pustaka perenderan PDF (untuk dukungan CJK: Adobe-*)

| Tip
"`gs -h`" dapat menampilkan konfigurasi Ghostscript.

### 11.4.2. Menggabungkan dua berkas PS atau PDF

Anda dapat menggabungkan dua berkas PostScript (PS) atau Portable Document Format (PDF) menggunakan gs(1) dari 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

| Catatan
PDF, yang merupakan format data cetak lintas platform yang banyak digunakan, pada dasarnya adalah format PS terkompresi dengan beberapa fitur dan ekstensi tambahan.

| Tip
Untuk baris perintah, psmerge(1) dan perintah lainnya dari paket `psutils` berguna untuk memanipulasi dokumen PostScript. pdftk(1) dari paket `pdftk` berguna untuk memanipulasi dokumen PDF juga.

### 11.4.3. Utilitas data yang dapat dicetak

Paket berikut untuk utilitas data yang dapat dicetak menarik perhatian saya.

Tabel 11.15. Daftar utilitas data yang dapat dicetak

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`poppler-utils` | V:156, I:471 | 804 | pdf→ps,teks,… | Utilitas PDF: `pdftops`, `pdfinfo`, `pdfimages`, `pdftotext`, `pdffonts`
`psutils` | V:4, I:50 | 34 | ps→ps | Alat konversi dokumen PostScript
`poster` | V:0.1, I:1.8 | 57 | ps→ps | membuat poster besar dari halaman PostScript
`enscript` | V:1, I:11 | 2138 | text→ps, html, rtf | mengonversi teks ASCII ke PostScript, HTML, RTF, atau Pretty-Print
`a2ps` | V:1.0, I:7.0 | 4109 | text→ps | Konverter 'Apa pun ke PostScript' dan cetak cantik
`pdftk` | V:1, I:21 | 28 | pdf→pdf | Alat konversi dokumen PDF: `pdftk`
`html2ps` | V:0.1, I:1.8 | 256 | html→ps | konverter dari HTML ke PostScript
`gnuhtml2latex` | V:0.02, I:0.63 | 26 | html→latex | konverter dari html ke latex
`latex2rtf` | V:0.1, I:1.6 | 495 | latex→rtf | mengonversi dokumen dari LaTeX ke RTF yang dapat dibaca oleh MS Word
`ps2eps` | V:2, I:32 | 95 | ps→eps | konverter dari PostScript ke EPS (Encapsulated PostScript)
`e2ps` | V:0.01, I:0.12 | 104 | text→ps | Konverter Teks ke PostScript dengan dukungan pengodean Jepang
`impose+` | V:0.1, I:1.5 | 118 | ps→ps | Utilitas PostScript
`trueprint` | V:0.01, I:0.07 | 148 | text→ps | cetak cantik banyak kode sumber (C, C ++, Java, Pascal, Perl, Pike, Sh, dan Verilog) ke PostScript. (Bahasa C)
`pdf2svg` | V:0.2, I:3.0 | 33 | pdf→svg | konverter dari PDF ke format Scalable vector graphics
`pdftoipe` | V:0.01, I:0.46 | 69 | pdf→ipe | konverter dari PDF ke format XML IPE

### 11.4.4. Mencetak dengan CUPS

Perintah lp(1) dan lpr(1) yang ditawarkan oleh Common Unix Printing System (CUPS) menyediakan opsi untuk pencetakan data yang dapat dicetak secara disesuaikan.

Anda dapat mencetak 3 salinan berkas yang dikolasi menggunakan salah satu perintah berikut.

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

Anda dapat lebih jauh menyesuaikan operasi pencetak dengan menggunakan opsi pencetak seperti "`-o number-up=2`", "`-o page-set=even`", "`-o page-set=odd`","`-o scaling=200`","`-o natural-scaling=200`",dll., yang didokumentasikan di Command-Line Printing and Options.

## 11.5. Konversi data surat

Paket berikut untuk konversi data surel menarik perhatian saya.

Tabel 11.16. Daftar paket untuk membantu konversi data surel

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`sharutils` | V:2, I:28 | 1436 | mail | shar(1), unshar(1), uuencode(1), uudecode(1)
`mpack` | V:0.8, I:8.0 | 109 | MIME | enkode dan dekode pesan MIME: mpack(1) dan munpack(1)
`tnef` | V:0.3, I:4.0 | 103 | ms-tnef | membongkar lampiran MIME bertipe "application/ms-tnef" yang merupakan format hanya Microsoft
`uudeview` | V:0.2, I:1.8 | 105 | mail | enkoder dan dekoder untuk format berikut: uuencode, xxencode, BASE64, quoted printable, dan BinHex

| Tip
Internet Message Access Protocol versi 4 (IMAP4) dapat digunakan untuk memindahkan surel keluar dari sistem surat proprietari jika perangkat lunak klien surel dapat dikonfigurasi untuk menggunakan server IMAP4 juga.

### 11.5.1. Dasar-dasar data surel

Data surat (SMTP) harus dibatasi pada serangkaian data 7 bit. Jadi data biner dan data teks 8 bit dikodekan ke dalam format 7 bit dengan Multipurpose Internet Mail Extensions (MIME) dan pemilihan charset (lihat Tabel 11.2, “Daftar nilai pengodean dan penggunaannya”).

Format penyimpanan surat standar diformat mbox sesuai dengan RFC2822 (memperbarui RFC822). Lihat mbox(5) (disediakan oleh paket `mutt`).

Untuk bahasa Eropa, "`Content-Transfer-Encoding: quoted-printable`" dengan charset ISO-8859-1 biasanya digunakan untuk surat karena tidak ada banyak karakter 8 bit. Jika teks Eropa dikodekan dalam UTF-8, "`Content-Transfer-Encoding: quoted-printable`" kemungkinan akan digunakan karena sebagian besar data 7 bit.

Untuk bahasa Jepang, secara tradisional "`Content-Type: text/plain; charset=ISO-2022-JP`" biasanya digunakan untuk surat untuk menyimpan teks dalam 7 bit. Tetapi sistem Microsoft yang lebih lama dapat mengirim data surel dalam Shift-JIS tanpa deklarasi yang tepat. Jika teks Jepang dikodekan dalam UTF-8, Base64 kemungkinan akan digunakan karena berisi banyak data 8 bit. Situasi bahasa Asia lainnya serupa.

| Catatan
Jika data surel non-Unix Anda dapat diakses oleh perangkat lunak klien non-Debian yang dapat berbicara dengan server IMAP4, Anda mungkin dapat memindahkannya dengan menjalankan server IMAP4 Anda sendiri.

| Catatan
Jika Anda menggunakan format penyimpanan surel lainnya, memindahkannya ke format mbox adalah langkah pertama yang baik. Program klien serbaguna seperti mutt(1) mungkin berguna untuk ini.

Anda dapat memecah konten kotak surat ke setiap pesan menggunakan procmail(1) dan formail(1).

Setiap pesan surat dapat dibongkar menggunakan munpack(1) dari paket `mpack` (atau alat khusus lainnya) untuk mendapatkan konten yang dikodekan MIME.

## 11.6. Alat data grafis

Meskipun program GUI seperti gimp(1) sangat kuat, alat baris perintah seperti imagemagick(1) cukup berguna untuk mengotomatisasi manipulasi gambar melalui skrip.

Format berkas gambar de facto dari kamera digital adalah Exchangeable Image File Format (EXIF) yang merupakan format berkas gambar JPEG dengan tag metadata tambahan. Ini dapat menyimpan informasi seperti pengaturan tanggal, waktu, dan kamera.

Paten kompresi data lossless Lempel-Ziv-Welch (LZW) telah kedaluwarsa. Utilitas Graphics Interchange Format (GIF) yang menggunakan metode kompresi LZW sekarang tersedia secara bebas pada sistem Debian.

| Tip
Setiap kamera digital atau pemindai dengan media rekam lepasan bekerja dengan Linux melalui pembaca penyimpanan USB karena mengikuti Aturan Desain untuk Sistem Berkas Kamera dan menggunakan sistem berkas FAT. Lihat Bagian 10.1.7, “Perangkat penyimpanan lepasan”.

### 11.6.1. Alat data grafis (paket-meta)

Paket meta berikut ini adalah titik awal yang baik untuk mencari alat data grafis menggunakan aptitude(8). "Ikhtisar paket untuk Pemelihara Alat Foto Debian" dapat menjadi titik awal lainnya.

Tabel 11.17. Daftar alat data grafis (paket-meta)

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`education-graphics` | I:0.34 | 25 | svg, jpeg, … | paket meta untuk mengajar seni grafis dan seni gambar.
`open-font-design-toolkit` | I:0.06 | 9 | ttf, ps, … | metapackage untuk desain fonta terbuka

| Tip
Cari lebih banyak alat gambar menggunakan regex "`~Gworks-with::image`" dalam aptitude(8) (lihat Bagian 2.2.6, “Opsi metode pencarian dengan aptitude”).

### 11.6.2. Alat data grafis (GUI)

Paket berikut untuk konversi data grafis, penyuntingan, dan alat organisasi GUI menarik perhatian saya.

Tabel 11.18. Daftar alat data grafis (GUI)

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`gimp` | V:41, I:214 | 32779 | gambar(bitmap) | GNU Image Manipulation Program
`xsane` | V:8, I:129 | 1512 | gambar(bitmap) | Frontend X11 berbasis GTK untuk SANE (Scanner Access Now Easy)
`scribus` | V:1, I:12 | 32415 | ps/pdf/SVG/… | Penyunting DTP Scribus
`libreoffice-draw` | V:91, I:414 | 11209 | gambar(vector) | Keluarga perkantoran LibreOffice - menggambar
`inkscape` | V:11, I:76 | 113353 | gambar(vector) | Penyunting SVG (Scalable Vector Graphics)
`dia` | V:1, I:15 | 3846 | gambar(vector) | penyunting diagram (Gtk)
`xfig` | V:0.8, I:8.4 | 7951 | gambar(vector) | Fasilitas untuk Pembangkitan Interaktif figur di bawah X11
`gocr` | V:0.4, I:3.8 | 549 | gambar→teks | perangkat lunak OCR bebas
`eog` | V:24, I:137 | 10535 | gambar(Exif) | Program penampil grafis Eye of GNOME
`gthumb` | V:3, I:12 | 5162 | gambar(Exif) | penampil dan peramban citra (GNOME)
`geeqie` | V:3, I:11 | 3135 | gambar(Exif) | penampil citra menggunakan GTK
`shotwell` | V:14, I:243 | 6334 | gambar(Exif) | pengorganisasi foto digital (GNOME)
`gwenview` | V:39, I:115 | 6000 | gambar(Exif) | penampil citra (KDE)
`kamera` | I:114 | 992 | gambar(Exif) | dukungan kamera digital untuk aplikasi KDE
`digikam` | V:1.5, I:8.6 | 325 | gambar(Exif) | aplikasi manajemen foto digital untuk KDE
`darktable` | V:4, I:11 | 35876 | gambar(Exif) | kamar gelap dan meja cahaya virtual untuk para fotografer
`hugin` | V:0.4, I:5.7 | 6481 | gambar(Exif) | penjahit foto panorama
`librecad` | V:1, I:12 | 9164 | DXF, ... | Penyunting data CAD 2D
`freecad` | V:1, I:19 | 112 | DXF, ... | Penyunting data CAD 3D
`blender` | V:2, I:19 | 169320 | blend, TIFF, VRML, … | Penyunting konten 3D untuk animasi dll
`mm3d` | V:0.02, I:0.26 | 4123 | ms3d, obj, dxf, … | Penyunting model 3D berbasis OpenGL
`fontforge` | V:0.5, I:5.8 | 4736 | ttf, ps, … | penyunting fonta untuk fonta PS, TrueType, dan OpenType
`xgridfit` | V:0.01, I:0.10 | 878 | ttf | program untuk gridfitting dan hinting fonta TrueType

### 11.6.3. Alat data grafis (CLI)

Paket berikut untuk konversi data grafis, penyuntingan, dan alat organisasi CLI menarik perhatian saya.

Tabel 11.19. Daftar alat data grafis (CLI)

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`imagemagick` | V:7, I:275 | 81 | gambar(bitmap) | program manipulasi gambar
`graphicsmagick` | V:1.0, I:8.8 | 5945 | gambar(bitmap) | program manipulasi citra (fork dari `imagemagick`)
`netpbm` | V:26, I:285 | 8435 | gambar(bitmap) | alat konversi grafis
`libheif-examples` | V:0.3, I:3.6 | 503 | heif→jpeg(bitmap) | mengonversi High Efficiency Image File Format (HEIF) ke format JPEG, PNG, atau Y4M dengan perintah heif-convert(1)
`icoutils` | V:3, I:33 | 221 | png↔ico(bitmap) | mengonversi ikon dan kursor MS Windows ke dan dari format PNG (favicon.ico)
`pstoedit` | V:1, I:37 | 1075 | ps/pdf→gambar(vector) | Konverter berkas PostScript dan PDF ke grafis vektor yang dapat disunting (SVG)
`libwmf-bin` | V:4, I:81 | 149 | Windows/gambar(vector) | Alat konversi metafile Windows (data grafik vektor)
`fig2sxd` | V:0.01, I:0.18 | 158 | fig→sxd(vektor) | mengonversi berkas XFig ke format OpenOffice.org Draw
`unpaper` | V:2, I:17 | 417 | gambar→gambar | alat pasca-pemrosesan bagi halaman yang dipindai untuk OCR
`tesseract-ocr` | V:8, I:35 | 2209 | gambar→teks | perangkat lunak OCR bebas berdasarkan mesin OCR komersial HP
`tesseract-ocr-eng` | V:8, I:35 | 4032 | gambar→teks | Data mesin OCR: berkas bahasa tesseract-ocr untuk teks bahasa Inggris
`ocrad` | V:0.3, I:2.5 | 608 | gambar→teks | perangkat lunak OCR bebas
`exif` | V:3, I:51 | 335 | gambar(Exif) | utilitas baris perintah untuk menampilkan informasi EXIF dalam berkas JPEG
`exiv2` | V:2, I:20 | 429 | gambar(Exif) | alat manipulasi metadata EXIF/IPTC
`exiftran` | V:1, I:11 | 81 | gambar(Exif) | mentransformasi citra jpeg kamera digital
`exiftags` | V:0.2, I:2.8 | 309 | gambar(Exif) | utilitas untuk membaca tag Exif dari berkas JPEG kamera digital
`exifprobe` | V:0.2, I:2.3 | 506 | gambar(Exif) | membaca metadata dari gambar digital
`dcraw` | V:0.8, I:7.7 | 428 | gambar(Raw)→ppm | dekode gambar kamera digital mentah
`findimagedupes` | V:0.1, I:1.1 | 76 | citra→sidik jari | menemukan gambar yang serupa secara visual atau duplikat
`ale` | V:0.01, I:0.16 | 850 | gambar→gambar | menggabung gambar untuk meningkatkan mutu atau membuat mosaik
`imageindex` | V:0.1, I:1.3 | 143 | gambar(Exif)→html | menghasilkan galeri HTML statis dari gambar
`outguess` | V:0.1, I:1.1 | 230 | jpeg,png | alat Steganografi universal
`jpegoptim` | V:0.6, I:6.2 | 59 | jpeg | mengoptimalkan berkas JPEG
`optipng` | V:2, I:40 | 187 | png | mengoptimalkan berkas PNG, kompresi lossless
`pngquant` | V:1, I:12 | 62 | png | mengoptimalkan berkas PNG, kompresi lossy

## 11.7. Konversi data lain-lain

Ada banyak program lain untuk mengonversi data. Paket-paket berikut menarik perhatian saya menggunakan regex "`~Guse::converting`" dalam aptitude(8) (lihat Bagian 2.2.6, “Opsi metode pencarian dengan aptitude”).

Tabel 11.20. Daftar alat konversi data lain-lain

paket | popcon | ukuran | kata kunci | deskripsi
--- | --- | --- | --- | ---
`alien` | V:1, I:13 | 150 | rpm/tgz→deb | konverter untuk paket asing ke dalam paket Debian
`freepwing` | I:0.02 | 447 | EB→EPWING | konverter dari "Electric Book" (populer di Jepang) ke format JIS X 4081 tunggal (subset dari EPWING V1)
`calibre` | V:7, I:26 | 69924 | any→EPUB | konverter e-book dan manajemen perpustakaan

Anda juga dapat mengekstrak data dari format RPM dengan yang berikut.

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

Bab 10. Manajemen data |  | Bab 12. Pemrograman