第11章 データー変換

# 第11章 データー変換

Debian システム上のデーターフォーマット変換のツールとティップを記します。

標準に準拠したツールは非常に良い状態ですが、プロプライエタリデーターフォーマットのサポートは限定的です。

## 11.1. テキストデーター変換ツール

テキストデーター変換のための以下のパッケージが著者の目に止まりました。

表11.1 テキストデーター変換ツールのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`libc6` | V:922, I:999 | 5370 | 文字セット | `iconv`(1) によるロケール間のテキスト符号化方式変換ソフト (基本的)
`recode` | V:2, I:13 | 528 | 文字セット + 行末文字 | ロケール間のテキスト符号化方式変換ソフト (機能豊富、より多いエイリアスと機能)
`konwert` | V:1, I:43 | 137 | 文字セット | ロケール間のテキスト符号化方式変換ソフト (高級機能)
`nkf` | V:0, I:8 | 359 | 文字セット | 日本語のための文字セット翻訳ソフト
`tcs` | V:0, I:0 | 518 | 文字セット | 文字セット翻訳ソフト
`unaccent` | V:0, I:0 | 34 | 文字セット | アクセント付き文字をアクセントの無しの等価文字に置換
`tofrodos` | V:0, I:12 | 50 | 行末文字 | DOS と Unix 間のテキストフォーマット変換ソフト: `fromdos`(1) と `todos`(1)
`macutils` | V:0, I:0 | 319 | 行末文字 | Macintosh と Unix 間のテキストフォーマット変換ソフト: `frommac`(1) and `tomac`(1)

### 11.1.1. テキストファイルを iconv を使って変換

| ヒント
`iconv`(1) は`libc6` パッケージの一部として提供されていて、文字の符号化方式変換のために実質的に全てのUnix的システムで常に利用可能です。

以下のようにするとテキストファイルを `iconv`(1) を使って変換できます。

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

符号化方式 (エンコーディング) 値をマッチングする際には、大文字小文字の区別は無く、"`-`" や "`_`" を無視します。"`iconv -l`" コマンドにより、サポートされている符号化方法が確認できます。

表11.2 符号化方式値とその使い方リスト

符号化方式値 | 使い方
--- | ---
ASCII | 情報交換用米国標準コード (ASCII); アクセント文字無しの7ビットコード
UTF-8 | 全現代的 OS のための現行多言語標準
ISO-8859-1 | 西欧州言語用の旧標準、ASCII + アクセント文字
ISO-8859-2 | 東欧州言語用の旧標準、ASCII + アクセント文字
ISO-8859-15 | 西欧州言語用の旧標準、ユーロ文字付き ISO-8859-1
CP850 | コードページ 850、西欧州言語用グラフィック文字付き Microsoft DOS 文字、ISO-8859-1 の変種
CP932 | コードページ 932、日本語用 Microsoft Windows スタイル Shift-JIS の変種
CP936 | コードページ 936、簡体中国語用 Microsoft Windows スタイル GB2312 か GBK か GB18030 の変種
CP949 | コードページ 949、韓国語用 Microsoft Windows スタイル EUC-KR か統一ハングルコードの変種
CP950 | コードページ 950、繁体中国語用 Microsoft Windows スタイル Big5 の変種
CP1251 | コードページ 1251、キリル文字用 Microsoft Windows スタイル符号化方式
CP1252 | コードページ 1252、西欧州言語用 Microsoft Windows スタイル ISO-8859-15 の変種
KOI8-R | キリル文字用の旧ロシアの UNIX 標準
ISO-2022-JP | 7ビットコードのみを用いる日本語 email の標準符号化方式
eucJP | Shift-JIS とはまったく違う、旧日本の UNIX 標準8ビットコード
Shift-JIS | 日本語のための JIS X 0208 Appendix 1 標準 (CP932 を参照下さい)

| 注記
一部の符号化方式 (エンコーディング) はデーター変換のみサポートされており、ロケール値としては使われません (「ロケール」を参照下さい)。

ASCII や ISO-8859 文字セットのような1バイトに収まる文字セットに付いては、文字の符号化方式 (エンコーディング) とは文字セットとほとんど同じ事を意味します。

日本語のための JIS X 0213 や実質的に全ての言語のためのユニコード文字セット (UCS, Unicode, ISO-10646-1) のような多くの文字を含む文字セットの場合には、バイトデーター列に落とし込む多くの符号化手法があります。

- 日本語用には、EUC と ISO/IEC 2022 (別名 JIS X 0202)

- ユニコード用には、UTF-8 と UTF-16/UCS-2 と UTF-32/UCS-4

これらに関しては、文字セットと文字符号化方式の間にはっきりとした区別があります。

コードページは、一部のベンダー固有のコードページで文字符号化テーブルと同義語として使用されています。

| 注記
ほとんどの符号化システムが7ビット文字に関して ASCII と同じコードを共有している事を承知下さい。もちろん例外はありますが。もし古い日本語の C プログラムや URL のデーターをカジュアルにシフト JIS と呼ばれている符号化フォーマットから UTF-8 フォーマットに変換する際には、期待される結果を得るために "`shift-JIS`" ではなく "`CP932`" を使います: `0x5C` → "`\`" と `0x7E` → "`~`"。こうしないと、これらが間違った文字に変換されます。

| ヒント
`recode`(1) は、十分使えますし、`iconv`(1) と `fromdos`(1) と `todos`(1) と `frommac`(1) と `tomac`(1) を組み合わせ以上の機能を提供します。詳しくは "`info recode`" を参照下さい。

### 11.1.2. ファイルが UTF-8 であると iconv を使い確認

以下のようにするとテキストファイルが UTF-8 でエンコードされていると `iconv`(1) を使って確認できます。

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

| ヒント
最初の非 UTF-8 文字を見つけるには上記例中で "`--verbose`" オプションを使います。

### 11.1.3. iconv を使ってファイル名変換

次に、単一ディレクトリー中の旧 OS 下で作成されたファイル名から現代的な UTF-8 のファイル名に符号化方式を変換するスクリプト例を示します。

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

"`$ENCDN`" 変数値には、旧OS下で用いられたファイル名に用いられた元となる表11.2「符号化方式値とその使い方リスト」中にあるエンコーディングを指定します。

もっと複雑な場合にはそのようなファイル名を含有するファイルシステム (ディスクドライブ上のパーティション等) を `mount`(8) オプションに適正な符号化方式 (エンコーディング) (「ファイル名の符号化方式」を参照下さい) を指定してマウントし、その全内容を他の UTF-8 でマウントされたファイルシステムに "`cp -a`" コマンドを使ってコピーします。

### 11.1.4. 行末変換

テキストファイルのフォーマット、特に行末 (EOL) コード、はプラットフォーム依存です。

表11.3 異なるプラットフォーム上での行末スタイルのリスト

プラットフォーム | 行末コード | コントロール | 10進数 | 16進数
--- | --- | --- | --- | ---
Debian (unix) | LF | `^J` | 10 | 0A
MSDOS と Windows | CR-LF | `^M^J` | 13 10 | 0D 0A
Apple の Macintosh | CR | `^M` | 13 | 0D

行末 (EOL) フォーマット変換プログラムに関して、`fromdos`(1) と `todos`(1) と `frommac`(1) と `tomac`(1) は非常に便利です。`recode`(1) もまた役に立ちます。

| 注記
`python-moinmoin` パッケージ用の wiki のデーター等の Debian システム上の一部データーは、MSDOS スタイルの CR-LF を行末コードとして用います。あくまで上記は一般則と言うだけです。

| 注記
ほとんどのエディター (例えば `vim` や `emacs` や `gedit` 等) は MSDOS スタイルの行末を透過的に取り扱えます。

| ヒント
MSDOS と Unix スタイルが混在する行末スタイルを MSDOS スタイルに統一するには、`todos`(1) を使う代わりに "`sed -e '/\r$/!s/$/\r/'`" を使う方がより好ましいです。(例えば、2つの MSDOS スタイルファイルを `diff3`(1) を使ってマージした後。) `todos` は全ての行に CR を追加するというのがこの理由です。

### 11.1.5. タブ変換

タブコードを変換するための良く使われる専用プログラムがいくつかあります。

表11.4 `bsdmainutils` と `coreutils` パッケージ中のタブ変換コマンドのリスト

機能 | `bsdmainutils` | `coreutils`
--- | --- | ---
タブからスペースに展開する | "`col -x`" | `expand`
スペースからタブに逆展開する | "`col -h`" | `unexpand`

`indent` パッケージにある `indent`(1) コマンドは C プログラム中のホワイトスペースを完全にリフォーマットします。

`vim` や `emacs` 等のエディタープログラムもまたタブ変換に使えます。例えば `vim` を使うと、"`:set expandtab`" として "`:%retab`" するコマンドシーケンスでタブ変換が出来ます。これを元に戻すのは、"`:set noexpandtab`" として "`:%retab!`" とするコマンドシーケンスです。

### 11.1.6. 自動変換付きエディター

`vim` プログラムなどのインテリジェントな現代的なエディターは大変良く出来ていていかなる符号化方式やいかなるファイルフォーマットでも機能します。これらのエディターを UTF-8 ロケール下で UTF-8 を扱えるコンソール中で使用することで最良の互換性が得られます。

latin1 (iso-8859-1) 符号化方式で保存された古い西欧州の Unix テキストファイル "`u-file.txt`" は、単純に `vim` を使って以下のようにして編集出来ます。

    $ vim u-file.txt

`vim` 中の符号化方式自動判定機構が、最初は UTF-8 符号化方式を仮定し、それが上手く行かなかった際に latin1 を仮定するから可能です。

latin2 (iso-8859-2) 符号化方式で保存された古いポーランドの Unix テキストファイル "`pu-file.txt`" は、`vim` を使って以下のようにして編集出来ます。

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

eucJP 符号化方式で保存された古い日本の Unix テキストファイル "`ju-file.txt`" は、`vim` を使って以下のようにして編集出来ます。

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

shift-JIS 符号化方式 (より正確には: CP932) で保存された古い日本の MS-Windows テキストファイル "`jw-file.txt`" は、`vim` を使って以下のようにして編集出来ます。

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

"`++enc`" や "`++ff`" オプションを使ってファイルが開かれた時は、Vim コマンドライン中の "`:w`" がオリジナルのファイルフォーマットでオリジナルのファイルを上書きします。例えば "`:w ++enc=utf8 new.txt`" 等と Vim コマンドライン中で保存フォーマットや保存ファイル名を指定することも出来ます。

`vim` オンラインヘルプ中の mbyte.txt "multi-byte text support" と、"`++enc`" に使われるロケール値に関する表11.2「符号化方式値とその使い方リスト」を参照下さい。

`emacs` ファミリーのプログラムもまた同様の機能の実行ができます。

### 11.1.7. プレーンテキスト抽出

以下はウェッブページを読みテキストファイルに落とします。ウェッブから設定を取ってくる時や `grep`(1) 等の基本的な Unix テキストツールをウェッブページに適用するときに非常に有用です。

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

同様に、次を用いることで他のフォーマットからプレーンテキストデーターを抽出出来ます。

表11.5 プレーンテキストデーター抽出ツールのリスト

パッケージ | ポプコン | サイズ | キーワード | 機能
--- | --- | --- | --- | ---
`w3m` | V:11, I:145 | 2853 | html→text | "`w3m -dump`" コマンドを使う HTML からテキストへの変換ソフト
`html2text` | V:3, I:71 | 298 | html→text | 高度な HTML からテキストへの変換ソフト (ISO 8859-1)
`lynx` | V:29, I:457 | 1972 | html→text | "`lynx -dump`" コマンドを使う HTML からテキストへの変換ソフト
`elinks` | V:2, I:16 | 1791 | html→text | "`elinks -dump`" コマンドを使う HTML からテキストへの変換ソフト
`links` | V:2, I:21 | 2321 | html→text | "`links -dump`" コマンドを使う HTML からテキストへの変換ソフト
`links2` | V:0, I:10 | 5466 | html→text | "`links2 -dump`" コマンドを使う HTML からテキストへの変換ソフト
`catdoc` | V:17, I:176 | 682 | MSWord→text,TeX | MSWord ファイルをプレーンテキストか TeX に変換
`antiword` | V:0, I:6 | 587 | MSWord→text,ps | MSWord ファイルをプレーンテキストか ps に変換
`unhtml` | V:0, I:0 | 40 | html→text | HTML ファイルからマークアップタグを削除
`odt2txt` | V:1, I:25 | 60 | odt→text | OpenDocument テキストからテキストへの変換ソフト

### 11.1.8. プレーンテキストデーターをハイライトとフォーマット

以下のようにしてプレーンテキストデーターをハイライトとフォーマット出来ます。

表11.6 プレーンテキストデーターをハイライトするツールのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`vim-runtime` | V:16, I:365 | 38132 | ハイライト | "`:source $VIMRUNTIME/syntax/html.vim`" を使ってソースコードを HTML に変換するための Vim MACRO
`cxref` | V:0, I:0 | 1191 | c→html | C プログラムから latex か HTML への変換ソフト (C 言語)
`src2tex` | V:0, I:0 | 1799 | ハイライト | 多くのソースコードの TeX への変換ソフト (C 言語)
`source-highlight` | V:0, I:3 | 2131 | ハイライト | 多くのソースコードを HTML と XHTML と LaTeX と Texinfo と ANSI カラーエスケープシーケンスと DocBook にハイライト付きで変換 (C++)
`highlight` | V:0, I:3 | 1411 | ハイライト | 多くのソースコードを HTML と XHTML と LaTeX と Tex と AXSL-FO にハイライト付きで変換 (C++)
`grc` | V:0, I:5 | 208 | text→color | 汎用着色化ソフト (Python)
`pandoc` | V:10, I:47 | 201782 | text→any | 汎用マークアップコンバーター (Haskel)
`python3-docutils` | V:13, I:52 | 2009 | text→any | ReStructured テキスト文書の XML へのフォーマット化ソフト (Python)
`markdown` | V:0, I:6 | 56 | text→html | Markdown テキスト文書の (X)HTML へのフォーマット化ソフト (Perl)
`asciidoctor` | V:0, I:5 | 101 | text→any | AsciiDoc テキスト文書の XML/HTML へのフォーマット化ソフト (Ruby)
`python3-sphinx` | V:7, I:27 | 2996 | text→any | ReStructured テキストを使う文書出版システム (Python)
`hugo` | V:0, I:5 | 61651 | text→html | Markdown テキストを使うサイト出版システム (Go)

## 11.2. XML データー

Extensible Markup Language (XML) は構造化情報を含む文書のためのマークアップ言語です。

XML.COM にある入門情報を参照下さい。

- "What is XML?"

- "What Is XSLT?"

- "What Is XSL-FO?"

- "What Is XLink?"

### 11.2.1. XML に関する基本ヒント

XML テキストはちょっと HTML のようにも見えます。これを使うと一つの文書から複数のフォーマットのアウトプット管理できるようになります。簡単な XML システムの一つはここで使っている `docbook-xsl` パッケージです。

各 XML ファイルは以下のような標準的な XML 宣言でスタートします。

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

XML 要素の基本的シンタックスは以下のようにマークアップされます。

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

空の XML 要素は以下の短縮形を使ってマークアップされます。

    <name attribute="value" />

上記例中の "`attribute="value"`" はオプションです。

XML 中のコメントセクションは以下のようにマークアップされます。

    <!-- comment -->

マークアップを追加する以外に、XML は以下の文字に関して事前定義されたエンティティを使い内容を少し改変する必要があります。

表11.7 XML で事前定義されているエントリーのリスト

事前定義されたエンティティ | 変換先の文字
--- | ---
`&quot;` | `"` : 引用符
`&apos;` | `'` : アポストロフィ
`&lt;` | `<` : 以下
`&gt;` | `>` : 以上
`&amp;` | `&` : アンパサンド

| 注意
"`<`" と "`&`" はアトリビュートやエレメントには使えません。

| 注記
例えば "`&some-tag;`" 等の SGML スタイルのユーザー定義エンティティが使われた場合、他の定義は無効で最初の定義が有効です。エンティティ定義は "`<!ENTITY some-tag "entity value">`" と表現されます。

| 注記
XML のマークアップがタグ名の何らかの組み合わせで (あるデーターを内容としてであれアトリビュート値としてであれ) 整合性を持ってされている限り、他の XML の変換は拡張可能スタイルシート言語変換 (XSLT) を使うととっても簡単な作業です。

### 11.2.2. XML 処理

拡張可能スタイルシート言語 (XSL) のような XML ファイルを処理に利用可能なツールは沢山あります。

基本的に、良くできた XML ファイルを一度作ると、いかなるフォーマットへも拡張可能なスタイルシート言語変換 (XSLT) を使って変換できます。

フォーマットオブジェクト用拡張可能スタイルシート言語 (XSL-FO) がフォーマットのための答えとなるはずです。`fop` パッケージは Java プログラム言語 に依存するため Debian の `main` アーカイブでは新規です。このため、 LaTeX コードが XML から XSLT を使って通常作成され、DVI や PostScript や PDF 等のプリンタブルなファイルが LaTeX システムを使って作成されます。

表11.8 XML ツールのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`docbook-xml` | I:424 | 2126 | xml | DocBook 用 XML ドキュメントタイプ定義 (DTD)
`docbook-xsl` | V:16, I:151 | 14823 | xml/xslt | DocBook XML を XSLT を使って各種アウトプットへ処理する XSL スタイルシート
`xsltproc` | V:16, I:75 | 83 | xslt | XSLT コマンドラインプロセスソフト (XML→ XML, HTML, plain text, 他)
`xmlto` | V:0, I:9 | 124 | xml/xslt | XSLT を用いて XML から全てへの変換ソフト
`fop` | V:0, I:8 | 281 | xml/xsl-fo | Docbook XML ファイルを PDF に変換
`dblatex` | V:1, I:6 | 4636 | xml/xslt | XSLT を使って Docbook ファイルを DVI, PostScript, PDF 文書へ変換
`dbtoepub` | V:0, I:0 | 37 | xml/xslt | DocBook XML から .epub へのコンバーター

XML は標準一般化マークアップ言語 (SGML) のサブセットなので、ドキュメントスタイル構文規程言語 (DSSSL) 等の SGML 用として利用可能な広範なツールで処理できます。

表11.9 DSSLツールのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`openjade` | V:1, I:22 | 1066 | dsssl | ISO/IEC 10179: 1996 標準 DSSSL プロセッサ (最新版)
`docbook-dsssl` | V:0, I:8 | 2594 | xml/dsssl | DocBook XML を各種出力フォーマットに DSSSL を使って処理するための DSSSL スタイルシート
`docbook-utils` | V:0, I:6 | 287 | xml/dsssl | `docbook2*` コマンドで DSSSL を使って DocBook ファイルを他のフォーマットに (HTML, RTF, PS, man, PDF) 変換するなどのユーティリティー

| ヒント
GNOME の `yelp` は DocBook XML ファイルを X 上に体裁良く表示するので時々便利です。

### 11.2.3. XML データー抽出

他のフォーマットから以下を使うと HTML とか XML のデーターを抽出出来ます。

表11.10 テキストデーター変換ツールのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`man2html` | V:0, I:1 | 142 | manpage→html | manpage から HTML への変換ソフト (CGI サポート)
`doclifter` | V:0, I:0 | 473 | troff→xml | troff から DocBook XML への変換ソフト
`texi2html` | V:0, I:3 | 1847 | texi→html | Texinfo から HTML への変換ソフト
`info2www` | V:1, I:1 | 74 | info→html | GNU info から HTML への変換ソフト (CGI サポート)
`wv` | V:0, I:2 | 733 | MSWord→any | Microsoft Word から HTML や LaTeX 等への文書変換ソフト
`unrtf` | V:0, I:3 | 159 | rtf→html | RTF から HTML 等への文書変換ソフト
`wp2x` | I:0 | 200 | WordPerfect→any | WordPerfect 5.0 と 5.1 ファイルから TeX と LaTeX と troff と GML と HTML への変換ソフト

### 11.2.4. XML データーの静的解析

非 XML の HTML ファイルの場合は、これらを整合性ある XML である XHTML に変換できます。XHTML は XML ツールで処理できます。

XML ファイルのシンタックスやファイル中で見かける URL の適正性が確認されるかもしれません。

表11.11 XML整形印刷ツールのリスト

パッケージ | ポプコン | サイズ | 機能 | 説明
--- | --- | --- | --- | ---
`libxml2-utils` | V:64, I:216 | 205 | xml↔html↔xhtml | `xmllint`(1) (シンタクスチェック、リフォーマット、静的解析、他) を含むコマンドライン XML ツール
`tidy` | V:0, I:7 | 79 | xml↔html↔xhtml | HTML シンタックスチェックソフトとリフォーマットソフト
`weblint-perl` | V:0, I:0 | 32 | 静的解析(lint) | HTML 用のシンタックス最小限の文体チェックソフト
`linklint` | V:0, I:0 | 343 | リンクチェック | 高速リンクチェックソフトとウェッブサイトメンテツール

一度適正な XML が生成されれば、XSLT 技術を使ってマークアップコンテキスト等に基づいてデーターを抽出出来ます。

## 11.3. タイプセッティング

Unix のtroff プログラムは最初 AT&T で開発されました。それはマンページを作成するのに通常使われます。

Donald Knuth 氏によって作成された TeX は非常に強力な組版ツールでデファクト標準です。最初 Leslie Lamport 氏によって書かれた LaTeX は TeX の力への高レベルアクセスを可能にします。

表11.12 タイプ設定ツールのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`texlive` | I:29 | 57 | (La)TeX | 組版、校正、印刷のための TeX システム
`groff` | V:1, I:25 | 20577 | troff | GNU troff テキストフォーマティングシステム

### 11.3.1. roff タイプセッティング

伝統的には、roff が主な Unix テキスト処理システムです。`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) と "`info groff`" を参照下さい。

`groff` パッケージをインストールすると "`/usr/share/doc/groff/`" 中に "`-me`"マクロに関する良い入門書や参考書が読めます。

| ヒント
"`groff -Tascii -me -`" はANSI エスケープコードを含むプレーンテキストを生成します。もしマンページのような多くの "^H" や "_" を含む出力が欲しい場合には、この代わりに "`GROFF_NO_SGR=1 groff -Tascii -me -`" を使います。

| ヒント
`groff` が生成した "^H" や "_" をテキストから削除するには、それを "`col -b -x`" でフィルターします。

### 11.3.2. TeX/LaTeX

TeX Live ソフトウェアーディストリビューションは完全な TeX システムを提供します。`texlive` メタパッケージは、ほとんどの一般的タスクに十分な TeX Live パッケージのまともな選択を提供します。

TeX と LaTeX に関する多くの参考書が利用可能です。

- The teTeX HOWTO: The Linux-teTeX Local Guide

- `tex`(1)

- `latex`(1)

- `texdoc`(1)

- `texdoctk`(1)

- "The TeXbook"、Donald E. Knuth 著 (Addison-Wesley)

- "LaTeX - A Document Preparation System"、Leslie Lamport 著 (Addison-Wesley)

- "The LaTeX Companion"、Goossens と Mittelbach と Samarin 著 (Addison-Wesley)

これはもっとも強力な組版環境です。多くの SGML 処理ソフトはこれをバックエンドのテキスト処理ソフトとしています。多くの人が Emacs や Vim をソースのエディターとして使う一方、`lyx` パッケージが提供する Lyx と `texmacs` パッケージが提供する GNU TeXmacs は洒落た LaTeX のWYSIWYG 編集環境を提供します。

多くのオンラインリソースが利用可能です。

- TEX Live ガイド - TEX Live 2007 ("`/usr/share/doc/texlive-doc-base/english/texlive-en/live.html`") (`texlive-doc-base` パッケージ)

- A Simple Guide to Latex/Lyx

- Word Processing Using LaTeX

文書が大きくなると、TeX はエラーを発生する事があります。この問題の解決には (正しくは "`/etc/texmf/texmf.d/95NonPath`" を編集し `update-texmf`(8) を実行することで) "`/etc/texmf/texmf.cnf`" 中のプールの数を増やし修正しなければいけません。

| 注記
"The TeXbook" の TeX ソースは www.ctan.org tex-archive site for texbook.tex にあります。このファイルには必要なマクロのほとんど全てが含まれます。この文書は7から10行をコメントして "`\input manmac \proofmodefalse`" を追加すると `tex`(1) で処理できると聞いた事があります。オンラインバージョンを使うのではなくこの本 (さらに Donald E. Knuth 氏による全ての本) を購入される事を強く勧めます。しかし、そのソースは TeX の入力の非常に良い例です！

### 11.3.3. マニュアルページを綺麗に印刷

以下のコマンドでマンページを PostScript で上手く印刷できます。

    $ man -Tps some_manpage | lpr

### 11.3.4. マニュアルページの作成

プレーンな troff フォーマットでマンページ (マニュアル ページ) を書く事は可能ですが、それを作成するヘルパーパッケージがあります。

表11.13 マンページ作成を補助するパッケージのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`docbook-to-man` | V:0, I:6 | 189 | SGML→manpage | DocBook SGML から roff man マクロへの変換ソフト
`help2man` | V:0, I:6 | 542 | text→manpage | --help からの自動マンページ生成ソフト
`info2man` | V:0, I:0 | 134 | info→manpage | GNU info から POD かマンページへの変換ソフト
`txt2man` | V:0, I:0 | 112 | text→manpage | ベタの ASCII テキストからマンページ形式へ変換

## 11.4. 印刷可能データー

Debian システム上では印刷可能なデーターは PostScript フォーマットで表現されます。共通 Unix 印刷システム (CUPS) は非 PostScript プリンタ用のラスタ化のバックエンドプログラムとして Ghostscript を使用します。

最近のDebian システム上では印刷可能なデータは PDF フォーマットででも表現されます。

Evince や Okular (「GUI アプリケーション」参照)のような GUI ビューワーツールや; Chromium のような現代的なブラウザーを使うと、PDF ファイルの内容表示をしたりその入力欄を埋めたりできます。

LibreOffice や Scribus や Inkscape (「画像データーツール」参照)のようなグラフィックツールを使うと、PDF ファイルの内容を編集できます。

| ヒント
PDF ファイルは、GIMP を用いると、解像度 300 dpi 以上を使い PNG フォーマットに変換し読み込めます。これを、LibreOffice のバックグラウンド画像に用いれば最小限の努力で望ましい変更済み印刷が作れます。

### 11.4.1. Ghostscript

印刷データー処理の核心はラスタ画像を生成する Ghostscript という PostScript (PS) インタープリタです。

表11.14 Ghostscript PostScript インタープリタのリスト

パッケージ | ポプコン | サイズ | 説明
--- | --- | --- | ---
`ghostscript` | V:156, I:579 | 183 | GPL 版 Ghostscript PostScript/PDF インタープリタ
`ghostscript-x` | I:17 | 88 | GPL 版 Ghostscript PostScript/PDF インタープリタ - X ディスプレーサポート
`libpoppler147` | V:109, I:278 | 4891 | xpdf PDF ビューワー派生PDF レンダリングライブラリー
`libpoppler-glib8t64` | V:63, I:273 | 550 | PDF レンダリングライブラリー (GLib 準拠共有ライブラリー)
`poppler-data` | V:171, I:600 | 13086 | PDF レンダリングライブラリー用 CMaps (CJK サポート: Adobe-*)

| ヒント
"`gs -h`" とすると Ghostscript の設定が表示されます。

### 11.4.2. 2つの PS や PDF ファイルをマージ

2つの PostScript (PS) や Portable Document Format (PDF) ファイルは Ghostscript の`gs`(1) をつかってマージできます。

    $ 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

| 注記
PDF は、クロスプラットフォームの印刷可能フォーマットとして広範に使われていて、本質的にいくつかの追加機能と拡張がされている、圧縮 PS フォーマットです。

| ヒント
コマンドラインの場合、`psutils` パッケージ中の `psmerge`(1) 等のコマンドは PostScript 文書を操作するのに便利です。`pdftk` パッケージの `pdftk`(1) も PDF 文書を操作するのに便利です。

### 11.4.3. 印刷可能データーユーティリティー

印刷可能なデーターに用いる以下のパッケージが著者の目に止まりました。

表11.15 プリントできるデーターのユーティリティーのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`poppler-utils` | V:135, I:489 | 760 | pdf→ps,text,… | PDF ユーティリティー: `pdftops`, `pdfinfo`, `pdfimages`, `pdftotext`, `pdffonts`
`psutils` | V:3, I:53 | 34 | ps→ps | PostScript 文書変換ツール
`poster` | V:0, I:1 | 58 | ps→ps | PostScript ページから大きなポスターを作る
`enscript` | V:0, I:11 | 2138 | text→ps, html, rtf | ASCII テキストから PostScript か HTML か RTF か Pretty-Print への変換
`a2ps` | V:0, I:7 | 4083 | text→ps | 全てを PostScript に変換するソフトと綺麗印刷ソフト
`pdftk` | I:25 | 28 | pdf→pdf | PDF 文書変換ツール: `pdftk`
`html2ps` | V:0, I:1 | 256 | html→ps | HTML から PostScript への変換ソフト
`gnuhtml2latex` | V:0, I:0 | 26 | html→latex | html から latex への変換ソフト
`latex2rtf` | V:0, I:2 | 495 | latex→rtf | LaTeX から MS Word で読める RTF へと文書変換
`ps2eps` | V:1, I:34 | 95 | ps→eps | PostScript から EPS (カプセル化済み PostScript) への変換ソフト
`e2ps` | V:0, I:0 | 104 | text→ps | 日本語符号化サポート付きの Text から PostScript への変換ソフト
`impose+` | V:0, I:1 | 118 | ps→ps | PostScript ユーティリティー
`trueprint` | V:0, I:0 | 148 | text→ps | 多くのソースコード (C, C++, Java, Pascal, Perl, Pike, Sh, Verilog) の PostScript への綺麗印刷 (C 言語)
`pdf2svg` | V:0, I:3 | 33 | pdf→svg | PDF からスケール可のベクトルグラフィクス (SVG) フォーマットへの変換ソフト
`pdftoipe` | V:0, I:0 | 74 | pdf→ipe | PDF から IPE の XML フォーマットへの変換ソフト

### 11.4.4. CUPS を使って印刷

Common Unix Printing System (CUPS) が提供する、`lp`(1) と `lpr`(1) コマンドの両方が印刷可能なデーターの印刷をカスタム化するオプションを提供します。

以下のコマンドの内のひとつを使い一つのファイルに対し３部の印刷をページ順に揃えてできます。

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

さらに、コマンドライン印刷とオプションに書かれているように "`-o number-up=2`" や "`-o page-set=even`", "`-o page-set=odd`" や "`-o scaling=200`" や "`-o natural-scaling=200`" 等の印刷オプションを使ってカスタム化できます。

## 11.5. メールデーター変換

テキストデーター変換のための以下のパッケージが著者の目に止まりました。

表11.16 メールデーター変換を補助するパッケージのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`sharutils` | V:2, I:30 | 1436 | メール | `shar`(1) と `unshar`(1) と `uuencode`(1) と `uudecode`(1)
`mpack` | V:0, I:8 | 109 | MIME | MIME メッセージの符号化と逆符号化のソフト: `mpack`(1) と `munpack`(1)
`tnef` | V:0, I:4 | 103 | ms-tnef | Microsoft のみのフォーマットの "application/ms-tnef" タイプの MIME アタッチメントを開梱
`uudeview` | V:0, I:1 | 105 | メール | 以下のフォーマットのエンコーダーとデコーダー: uuencode, xxencode, BASE64, quoted printable, BinHex

| ヒント
インターネットメッセージアクセスプロトコル バージョン4 (IMAP4) サーバーは、プロプライエタリメールシステムのクライアントソフトが IMAP4 サーバーも使えるように設定できる場合、プロプライエタリメールシステムからメールを取り出すのに利用できるかもしれません。

### 11.5.1. メールデーターの基本

メイル (SMTP) データーは7ビットデーター列に限定されるべきです。だからバイナリーデーターや8ビットテキストデーターはMultipurpose Internet Mail Extensions (MIME) を用いたり文字セット (表11.2「符号化方式値とその使い方リスト」を参照下さい) を選択して7ビットのフォーマットに エンコードされます。

標準のメールストレージフォーマットは RFC2822 (RFC822 の更新版) により定義される mbox フォーマットです。`mbox`(5) (`mutt` パッケージが提供) を参照下さい。

欧州言語の場合、ほとんど8ビット文字が無いので ISO-8859-1 文字セットとともに "`Content-Transfer-Encoding: quoted-printable`" がメールに通常使われます。欧州のテキストが UTF-8 符号化された場合、ほとんどが7ビット文字なので "`Content-Transfer-Encoding: quoted-printable`" が大体使われます。

日本語には、テキストを7ビットにしておくために伝統的に "`Content-Type: text/plain; charset=ISO-2022-JP`" がメールに通常使われます。しかし、古い Microsoft システムは適正な宣言無しに Shift-JIS でメールデーターを送るかもしれません。日本語のテキストが UTF-8 で符号化される場合、多くの8ビットデーターを含むので Base64 が大体使われます。他のアジアの言語でも状況は同様です。

| 注記
もし IMAP4 サーバーと話せる非 Debian クライアントからあなたの非 Unix メールデーターがアクセス出きるなら、あなた自身の IMAP4 サーバーを実行することでメールデーターを引き出せるかもしれません。

| 注記
もし他のメールストレージフォーマットを使っている場合、mbox フォーマットに移動するのが良い第一歩です。`mutt`(1) のような汎用クライアントプログラムはこれに非常に便利です。

メールボックスの内容は `procmail`(1) と `formail`(1) を使って各メッセージに分割できます。

各メールメッセージは `mpack` パッケージにある `munpack`(1) (または他の専用ツール) を使って開梱して MIME 符号化された内容を取り出せます。

## 11.6. 画像データーツール

`gimp`(1) のような GUI プログラムは非常に強力ですが、`imagemagick`(1) 等のコマンドラインツールはスクリプトでイメージ操作を自動化するのに非常に便利です。

デジタルカメラのファイルフォーマットのデファクト標準は、追加のメタデーター付きの JPEG 画像ファイルフォーマットである交換可能な画像ファイルフォーマット (EXIF) です。EXIF は日付や時間やカメラ設定等の情報を保持できます。

Lempel-Ziv-Welch (LZW) ロス無しデーター圧縮特許の期限は切れました。LZW データー圧縮を使う画像交換フォーマット (GIF) ユーティリティーは Debian システム上で自由に利用可能となりました。

| ヒント
リムーバブル記録メディア付きのどのデジタルカメラやスキャナーも、カメラファイルシステム用デザインルール に準拠し FAT ファイルシステムを使っているので USB ストレージ読取り機を経由すれば Linux で必ず機能します。「リムーバブルストレージデバイス」を参照下さい。

### 11.6.1. 画像データーツール (メタパッケージ)

以下のメタパッケージは `aptitude`(8) を使って画像データーツールを探す良いスタート地点です。"Packages overview for Debian PhotoTools Maintainers" も別のスタート地点です。

表11.17 画像データーツールのリスト (メタパッケージ)

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`education-graphics` | I:0 | 31 | svg, jpeg, … | 画像や絵画芸術教育用のメタパッケージ
`open-font-design-toolkit` | I:0 | 9 | ttf, ps, … | オープンフォントデザイン用のメタパッケージ

| ヒント
`aptitude`(8) の正規表現 "`~Gworks-with::image`" (「aptitude を使った探索方法」を参照下さい) を使ってさらなる画像ツールを探します。

### 11.6.2. 画像データーツール (GUI)

以下の GUI の画像データー変換、編集、整理用パッケージが著者の目に止まりました。

表11.18 画像データーツール (GUI) のリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`gimp` | V:35, I:229 | 31748 | 画像 (bitmap) | GNU イメージ操作プログラム
`xsane` | V:10, I:135 | 1512 | 画像 (bitmap) | GTK に基づく SANE (Scanner Access Now Easy) 用の X11 フロントエンド
`scribus` | V:1, I:13 | 32052 | ps/pdf/SVG/… | Scribus DTP エディター
`libreoffice-draw` | V:98, I:437 | 11003 | 画像 (vector) | LibreOffice office スイート - ドロー
`inkscape` | V:13, I:85 | 113183 | 画像 (vector) | SVG (スケーラブルベクトルグラフィクス) エディター
`dia` | V:1, I:18 | 3812 | 画像 (vector) | ダイアグラムエディター (Gtk)
`xfig` | V:0, I:9 | 7951 | 画像 (vector) | X11 下でインテラクティブ生成するソフト
`gocr` | V:0, I:4 | 549 | 画像→テキスト | フリー OCR ソフト
`eog` | V:32, I:166 | 10310 | 画像(Exif) | 画像ビューアープログラム Eye of GNOME
`gthumb` | V:3, I:12 | 5162 | 画像(Exif) | 画像ビューアー兼ブラウザー (GNOME)
`geeqie` | V:3, I:11 | 2982 | 画像(Exif) | GTK を用いた画像ビューアー
`shotwell` | V:15, I:258 | 6334 | 画像(Exif) | デジタル写真オーガナイザー (GNOME)
`gwenview` | V:41, I:119 | 6001 | 画像(Exif) | 画像ビューア (KDE)
`kamera` | I:118 | 982 | 画像(Exif) | KDE アプリケーション用デジタルカメラサポート
`digikam` | V:1, I:9 | 302 | 画像(Exif) | デジタル写真管理アプリケーション
`darktable` | V:3, I:12 | 35895 | 画像(Exif) | 写真家のための仮想ライトボックスと暗室
`hugin` | V:0, I:6 | 6489 | 画像(Exif) | パノラマ写真合成機
`librecad` | V:1, I:14 | 9100 | DXF, ... | 2D CAD データーエディター
`freecad` | V:0, I:20 | 110 | DXF, ... | 3D CAD データーエディター
`blender` | V:2, I:23 | 92911 | blend, TIFF, VRML, … | アニメーション等用の 3D コンテントエディター
`mm3d` | V:0, I:0 | 4123 | ms3d, obj, dxf, … | OpenGL 準拠の 3D モデルエディター
`fontforge` | V:0, I:5 | 4058 | ttf, ps, … | PS と TrueType と OpenType のフォント用フォントエディター
`xgridfit` | V:0, I:0 | 878 | ttf | TrueType フォントをグリッドフィッティングとヒンティング用のプログラム

### 11.6.3. 画像データーツール (CLI)

以下の CLI の画像データー変換、編集、整理用パッケージが著者の目に止まりました。

表11.19 画像データーツールのリスト (CLI)

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`imagemagick` | I:290 | 77 | 画像 (bitmap) | 画像操作プログラム
`graphicsmagick` | V:1, I:9 | 5816 | 画像 (bitmap) | 画像操作プログラム (`imagemagick` のフォーク)
`netpbm` | V:28, I:300 | 8435 | 画像 (bitmap) | 画像変換ツール
`libheif-examples` | V:0, I:3 | 439 | heif→jpeg(bitmap) | High Efficiency Image File Format (HEIF) を JPEG や PNG や Y4M フォーマットに `heif-convert`(1) コマンドで変換
`icoutils` | V:4, I:35 | 221 | png↔ico(bitmap) | MS Windows のアイコンやカーソールと PNG フォーマット間の変換 (favicon.ico)
`pstoedit` | V:1, I:40 | 1076 | ps/pdf→画像(vector) | PostScript と PDF ファイルから編集可能なベクトルグラフィクスへの変換ソフト (SVG)
`libwmf-bin` | V:5, I:90 | 151 | Windows/画像(vector) | Windows メタファイル (ベクトル画像データー) 変換ツール
`fig2sxd` | V:0, I:0 | 151 | fig→sxd(vector) | XFig ファイルを OpenOffice.org Draw フォーマットに変換
`unpaper` | V:2, I:16 | 417 | 画像→画像 | OCR 用のスキャンしたページの後処理ツール
`tesseract-ocr` | V:7, I:32 | 2243 | 画像→テキスト | HP の商用 OCR エンジンの基づくフリーの OCR ソフトウェアー
`tesseract-ocr-eng` | V:7, I:33 | 4032 | 画像→テキスト | OCR エンジンデーター: tesseract-ocr の英文用言語ファイル
`ocrad` | V:0, I:2 | 604 | 画像→テキスト | フリー OCR ソフト
`exif` | V:3, I:53 | 335 | 画像(Exif) | JPEG ファイル中の EXIF 情報を表示するコマンドラインユーティリティー
`exiv2` | V:1, I:21 | 432 | 画像(Exif) | EXIF/IPTC メタデーター操作ツール
`exiftran` | V:0, I:12 | 81 | 画像(Exif) | デジタルカメラの jpeg 画像を変換
`exiftags` | V:0, I:3 | 309 | 画像(Exif) | デジタルカメラの JPEG ファイルから Exif タグを読むユーティリティー
`exifprobe` | V:0, I:2 | 502 | 画像(Exif) | デジタル写真からメタデーターを読み出す
`dcraw` | V:1, I:8 | 428 | 画像(Raw)→ppm | 生のデジタルカメラ画像のデコード
`findimagedupes` | V:0, I:1 | 76 | 画像→fingerprint | 視覚的な類似画像と重複画像の検出
`ale` | V:0, I:0 | 818 | 画像→画像 | 忠実度を上げたりモザイクを作成するための画像のマージ
`imageindex` | V:0, I:1 | 143 | 画像(Exif)→html | イメージから静的な HTML ギャラリーを生成
`outguess` | V:0, I:1 | 230 | jpeg,png | 普遍的 Steganographic ツール
`jpegoptim` | V:0, I:6 | 59 | jpeg | JPEG ファイルの最適化
`optipng` | V:2, I:42 | 187 | png | PNG ファイルのロスレス最適化
`pngquant` | V:1, I:10 | 62 | png | PNG ファイルのロッシー最適化

## 11.7. その他のデーター変換

多くのデーター変換プログラムがあります。`aptitude`(8) で"`~Guse::converting`" という正規表現 (「aptitude を使った探索方法」を参照下さい) を使い以下のプログラムが私の目に止まりました。

表11.20 その他のデーター変換ツールのリスト

パッケージ | ポプコン | サイズ | キーワード | 説明
--- | --- | --- | --- | ---
`alien` | V:1, I:13 | 150 | rpm/tgz→deb | 外来のパッケージの Debian パッケージへの変換ソフト
`freepwing` | V:0, I:0 | 447 | EB→EPWING | "Electric Book" (日本で人気) から単一の JIS X 4081 フォーマット (EPWING V1 のサブセット) への変換ソフト
`calibre` | V:8, I:26 | 65584 | any→EPUB | e-book コンバーターとライブラリーの管理

RPM フォーマットからのデーター抽出もまた以下のようにするとできます。

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

第10章 データー管理 |  | 第12章 プログラミング