LaTeX

  このページの LaTeX 関係の情報は, 基本的に私がふだん利用している環境を作った時のメモと一部のテクニックを中心に, まとめたものです(ドイツ語関係,言語学関係のものが中心です). VineLinux での動作で確認しているものが中心ですが,マクロなどは, WindowsMac でも動くはずです. なぜ私がLaTeX を使うのか に関しては,質問や誤解もあるので別立てにしました.

Vine Linux 6.0 での TeX Live 環境  [08/12/2011]

Vine Linux 5.2 の最後の方で、TeX Live 環境がオプションで導入できるようになっていたが、Vine Linux 6 からは、全面的に「teTeX から TeX Live へ移行」した。 詳細は、日本語 TeX 利用ガイド に説明がある。 以下に概略の頭の部分を引用しておく。

Vine Linux 6 が提供する TeX 環境は、 TeX Live 2009 を元にした日本語 TeX です。 日本語 TeX 環境の根幹をなす土村展之氏による ptexlive および北川弘典氏による e-pTeX による成果を取り込み、Vine Linux 独自の調整を施しています。 teTeX から TeX Live へ移行しました。

もともと全体では巨大なパッケージだが(「約 2GB ものディスク容量を消費」)、 多言語を使わないのなら、最小限のパッケージ(どれくらいだろう?)のインストールも可能だ。

上記のページにあるように、TeX Live をまるごと インストールしてしまうには、以下のようにしてしまうのが手っ取り早い(時間はかかるが)。

# apt-get install task-texlive-full
# apt-get install task-texlive-full-doc

まずは、texworks をインストールして、例題とし て使われていた「森鷗外」の入ったデモ・テキストを少し修正したものを書いてみた。

texworks + texlive (ougai.tex) texworks + texlive (ougai.pdf) ougai.pdf by Adobe Reader (9.4.2.02)

Vine Linux 6 で提供する texworks は、 version 0.4.3 で、RPMパッケージの説明書きによ れば:

TeXworks は TeX (LaTeX, ConTeXt, etc) ドキュメント制作のための総合環境です。 ユニコードベースで編集する TeX に特化したエディタに、PDF プレビュアーが統合されており、不慣れな非技術系のユーザへの 簡潔で操作しやすいインタフェースを備えています。

TeX の種類を上のバーにある窓で選択し、あとは、 TeX のソースファイルをちょこちょこと打ち込み、 Control + t とすると、右側に大きな窓が開き、 コンパイルした結果のプレヴューが表示される。で、これが、もう PDF ファイルだ(pdfpLaTeX は、 シェルスクリプトで、platex を実行後に、dvipdfmx をしているだけだが)。 ちなみに、上の例では、pdfpLaTeX を選択し、右側の窓は表示された後で、文字 を拡大し、窓を手動で小さくしたものだ。同じファイルを、 Adobe Reader (9.4.2.02) で表示させ、同じく文字を拡大し、窓を手動で小さくしたものを、その下に並べてみた。

ご覧のように、 texworks に付属する PDF プレビュアーでは、 CID で指定したフォントは表示できないようだ (evince(Document Viewer 2.32.0)でも同じ)。 でも、なぜか葛飾区だけが、ちゃんと正字になっている。異字体ではなく、 正字を採用しているのは親切なのかも(1997年におけるJISコードの改正に伴って登場した「包摂」という概念で正当化されている)。 このような文字(JISコード化した時に、簡略化した異字体を作ってしまったようなケース)は、 実はフォントセットによって形が異なるので、 このページもどのようなフォントで表示させているかによって、 表示される字体が異なる(もっとも、上記のPDFの例は、グラフィック・イメージなので、変わらないが)。

PDF プレビュアーで見た違いは、文字が埋め込みタイプではなかったことに起因する。 つまり、フォントとしては、Type 1(CID) の種類に属する Ryumin-Lightが使われるが、 エンコーディングが Identity-H となっており埋め込みではなく、 Adobe Reader (9.4.2.02) を使って表示させた時に実際に使われていたフォントは、 KozMinPr6N-Regular という Type 1(CID) フォントだった。このフォントでは、 2種類の「葛飾区 vs. 葛飾区」が表示できるのだ(脱線してしまった) 。

もう1つ、 texworksTeX Liveを使った例をあげておく。 TeX LiveVine Linux 6 で標準的にインストールすると、 XeTeX も一緒にインストールされる。 texlive-collection-xetex というパッケージに入っている。 稲垣さんの紹介文を以下に引用しておく。

XeTeX(ズィーテフ)は従来のLaTeXを拡張して, 基本多言語面(BMP = Basic Multilingual Plane) 以外の補助多言語面(SMP = Supplementary Multilingual Plane) および補助漢字面 (SIP = Supplementary Ideograph Plane) も含む Unicode 全体を扱えるようにしたものです。 また,OSで使用可能なフォントを特になにも設定することなく, 直接扱うことが可能なのも大きな特徴です。 fontspec パッケージの機能と相俟ってOpenType フォントが持つリガチャ・アクセント付加・位置異形などの情報を利用した組版(...)を行うことができます。
稲垣徹 「XeLaTeXによる多言語文書作成」In 『ドイツ語情報処理研究』21, (2011), P.49.

ということで、おっかなびっくり試してみた。 例えば、今回は、Unifraktur というフォントを試してみた。 これは、http://unifraktur.sourceforce.net/ から取得できる(SIL Open Font License, Version 1.1.) フリーでオープンなフォントだ。今回ダウンロードしたのは、 UnifrakturMaguntia.2010-11-24.zip で、解凍して出てきたファイルの内、UnifrakturMaguntia.ttf だけを、ホームディレクトリの下の.fonts というディレクトリにコピーするだけだ。昨今の Linux は、 FontConfig のおかげで、 フォントの個人ベースでの利用は実に簡単になった。

[jok@hogehoge temp]$ unzip UnifrakturMaguntia.2010-11-24.zip
[jok@hogehoge temp]$ cd ./UnifrakturMaguntia.2010-11-24
[jok@hogehoge UnifrakturMaguntia.2010-11-24]$ ls
FontLog.txt  UnifrakturMaguntia.eot  UnifrakturMaguntia.woff
OFL-FAQ.txt  UnifrakturMaguntia.svg  sources/
OFL.txt      UnifrakturMaguntia.ttf
[jok@hogehoge UnifrakturMaguntia.2010-11-24]$ cp UnifrakturMaguntia.ttf ~/.fonts

以下は、UnifrakturMaguntia で、ドイツ語の文章を表示させ、 Doulos SIL で、デンマーク語の文章を表示させたところ。 左側の専用エディタは、UTF-8 ベースなので、 「GNOME 文字マップ」(Gucharmap) で、 フォント名を選択して、特定の文字をコピーして貼り付けることができる。 ドイツ語のlong s も、エディタに直接貼り付けている。 通常の文字の入力は、キーボード・アプレットを使って、 キーボードをドイツ語配列、あるいはデンマーク語配列にして直接入力できるのは言うまでもない。

XeLaTeX on texworks

texworks + XeLaTeX環境は、確かに便利と言えば便利だが、 Emacs + YaTeX に慣れている者にとっては、 エディタが不満。どこかで、細かい設定ができるのかもしれないが、 コントロール・コードが Emacs-like に変えられない (Ctrl k が使えたのは嬉しかったが、 Ctrl a をしたら、「全て選択」になってしまい、あせった)。 日本語 TeX 利用ガイド には、以下のような説明がある。

Vine Linux 5 以降では、標準ロケールが utf-8 になったので、 日本語 TeX 環境もそれに合わせて、 標準の文字コードを utf-8 になっています。 過去に書いた非 utf-8 エンコーディングな TeX ソースコードがそのままコンパイルできるように、 ptexenc による文字コード自動認識を標準で有効にしています。

ということなので、普通にEmacs + YaTeX が使える。 ただし、「普通にEmacs + YaTeX が使える」 ようにするため、私の場合は、.emacs.el に書かれていた、YaTeX 1.72 の設定を以下のYaTeX 1.74TeX Live 用のものに書き換える必要があった (.emacs.el には多少手を加えているため)。 これは /usr/share/emacs-23.3/site-lisp/yatex/vine-default-yatex.el にあるVine default の一部をコピーしたもの。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; YaTeX 1.74 + TeX Live (Vine Linux 6) 用設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)

;; YaTeX-mode
;; [推奨] \C-c から \C-c \C- へ変更 [yatex:04567]
;; /usr/share/emacs-23.3/site-lisp/yatex/vine-default-yatex.el
(unless (boundp 'YaTeX-inhibit-prefix-letter)
    (setq YaTeX-inhibit-prefix-letter t))

;; YaTeX-mode
;; yatex-mode を起動させる設定
(setq auto-mode-alist 
      (append 
       '(("\\.\\(tex\\|sty\\|cls\\|fd\\|ind\\|idx\\|ltx\\|clo\\|bbl\\)$" . 
          yatex-mode)) auto-mode-alist))
(setq YaTeX-kanji-code 4               ;; 1: SJIS, 2: JIS, 3: EUC, 4: UTF-8
      YaTeX-latex-message-code 'utf-8  ;; 文字化けしないようにする
      ;; YaTeX-no-begend-shortcut t    ;; shortcut ではなく補完を利用
      YaTeX-use-AMS-LaTeX t
      YaTeX-use-LaTeX2e t
      YaTeX-use-font-lock t
      dvi2-command "pxdvi"  ;; xdvi
      tex-command "eplatex -kanji=utf8 -src-specials"
      dviprint-command-format "pdvips %s | lpr"  ;; dvips
      makeindex-command "mendex -U"
      bibtex-command "pbibtex -kanji=utf8"
      )

;;; emacsclient サーバを起動
(add-hook 'yatex-mode-hook 
          '(lambda () (server-start)))

これで、UTF-8 でのEmacs + YaTeX の環境も平和に使えそうだ(Emacsは、23.3.1)。なお、上記「推奨」設定では、 (setq YaTeX-inhibit-prefix-letter t) となっているので、これまでのようにコンパイルする時に、 Ctrl+c t j ではなく、 Ctrl+c Ctrl+t j になっている。 (setq YaTeX-inhibit-prefix-letter nil) にすれば、これまでと同じキー・バインディングにもどせる。

コマンドラインでのことを少し書いておくと、 platex で起動するのは、 pTeXk, Version 3.1415926-p3.1.11 (utf8.euc) (Web2C 2009)eplatex で起動するのは、 e-pTeXk, Version 3.1415926-p3.1.11-100420 (utf8.euc) (Web2C 2009) となっている。 なお、おてがるに hogehoge.texhogehoge.pdf に変換するには、 $ pdfplatex hogehoge のように .tex を取ってやればよい。 なお、e-pTeX に関しては、 e-pTeX Wiki - SourceForge.JP を参照。

XeTeX に関しては、 The XeTeX typesetting system 、および、 奥村さんのページ XeTeX - TeX Wiki を参照。XeTeX は、 簡単に多言語を使える側面がある一方で、どうも挙動がよく分からないところがあり、 私にとっては、まだ未知の世界だ。


ウムラウトと pdf と LaTeX の関係 (2)  [08/17/2010]

奥村晴彦著『[改訂第5版]LaTeX2e美文書作成入門』 (技術評論社,2010年8月5日,ISBN978-4-7741-4319-4,C3055,DVD-ROM付,本体3180円+税) が発売になっていました。俗に『美文書』と仲間内では呼ばれていたこの本、TeX 関連の本として、1997年に初版が出て以来、実に13年、[改訂第5版]というのは金字塔です。 ただ版を重ねるというのではなく、その都度、焦点が変わり、最新版ではついに付録ソフトもDVDに収録されるようになった、 というのは隔世の感があります。

で、第12章「欧文フォント」に関する部分を読んでいたら、12.4 「ファイルのエンコーディング」 の章があり、inputenc 関連の説明に次のような一節がありました。

例えば é という文字(U+00E9) は,UTF-8 では,2バイト C3 A9 で表されます。 Unicode 対応で保存できるテキストエディタなら, これをそのまま é と書くことができるほか,16進表記で ˆˆc3ˆˆa9 と書くこともできます。もちろん昔からのTeXの書きかた ¥'{e} も使えます。 どのような書き方をしても,最終的には T1 エンコーディングで e9 という番号に相当する é が選ばれます。[...]
奥村晴彦著『[改訂第5版]LaTeX2e美文書作成入門』(2010: 190)

pLaTeX inputenc[utf8] utf8-demo-3.tex

そう、今さらですが、ようするに OT1 エンコーディングは、7ビットで、扱える文字が 128通りという制限があったため、 アクセント記号付きの文字は、合成するという方法が使われていた、と言えます。 それに対して、 T1 エンコーディングは、8ビット。 T1 エンコーディングに入りきらなかった記号が、 TS1 エンコーディングに入ってるんですね。TS1 のフォントを使うためには、 textcomp パッケージを使うそうです。ようやくこれで関係が分かりました。

話をタイトル「ウムラウトと pdf と LaTeX の関係」に戻せば、 8ビットのエンコーディングを使えば、ウムラウト付きの1文字を取り扱える。しかも、その際に、ウムラウト付きの文字を直接入力しなくても、 内部では、1文字として扱ってくれる。そうすると、次のように入力して、dvipdfmxPDF 化してもよいことが分かります(左の例が LaTeX のソースファイル)。

これをdvipdfmx(dvipdfmx-20090522) でPDF 化したものが、下の右で、 Adobe Reader 9(Version 9.3.3 06/16/2010) で閲覧しているところ。


utf8-demo-3.pdf through Adobe Reader 9 utf8-demo-3.txt through gEdit

Adobe Reader 9(Version 9.3.3 06/16/2010) で開いた後、 [ファイル(F)]→ [テキストとして保存(V)]を選ぶと、 OT1 エンコーディングの時は、 このように ウムラウトが分離してしまったが、 今回は、T1 エンコーディングの結果、無事にウムラウト付きの文字も分解されずに右のように保存された。 いちいちウムラウト付きの文字を入力しなくて済むのは、私にとってはありがたい。

方法 (4): utf-8 対応の pLaTeXT1 エンコーディングを指定し、 inputenc パッケージを使って原稿を書き、 dvipdfmxPDF に変換した原稿を提出する。
(Adobe Reader で[テキストとして保存(V)]をすれば、ウムラウト付きの文字も正確にテキストファイルになるので、その後のことは心配しない。)


ウムラウトと pdf と LaTeX の関係  [02/16,17/2010]

ドイツ語まじりの日本語の論文を、いつものようにLaTeX で書いて、pdf 化して提出した。そうしたら、ウムラウトの付いた文字がばらばらで原稿として使えない、と言われてしまった。 つまり、ü の替わりに、¨u となってしまうのだ。 Linux + LaTeX + Emacs が基本の人間としては、そんなことを言われても当惑してしまう。 なんとかならないかと実験する内に、気がついたら「PDFファイルの直書き」までしてしまった、というのが今回のお話。

事の顛末としては、今回は、幸いにして有能な方がテキストファイルとして保存したものを Word に吸い上げて、 文字置換をして再提出してくれたので、知らない内に片付いてしまった。感謝多謝 > Mr.E.

今回のお話の前提となる環境は、Vine Linux 5.0 で、 エディタは GNUE Emacs (23.1.1)、TeX のフロントエンドは yatex (1.73)pLaTeX と呼ぶのは、 pTeX, Version 3.141592-p3.1.10 (utf8.euc) (Web2C 7.5.4) のこと。

結論から言うと、 LaTeX(/on Linux) ユーザが、 Word あるいは、PDF で文書の提出を求められている時に、 ウムラウトなどのドイツ文字の変換をしないで済ますには、これしかない(訂正:方法 (4)もある(2010/8/16))。

方法 (1): utf-8 対応の pLaTeXinputenc パッケージを使って原稿を書き、 detexutf-8 のテキストファイルにしたものを dvipdfm(x)PDF に変換した原稿と共に提出する。

文字の置換をするなら、さまざまな可能性がある。例えば、
方法 (2): pLaTeX で原稿を書き、 dvipdfmxPDF にした原稿を提出。その際、 PDF 原稿から(Adobe Reader (acroread) なら「テキストファイルとして保存」を使って)テキストファイルを取り出し、 該当の文字を「合字」(ligature)ではなく、本来の単一の文字に置換してから、その編集したテキストファイルを共に提出する。
方法 (3): Word 原稿しか受けつけない、というような場合には、Openoffce.org writer にテキストファイルを吸い込むことになる。(Microsoft Wordを使わない、という前提です。) (もっとも、Openoffce.org writer を使うなら、始めから、Openoffce.org writer で書けばよい、 という話もあることは承知している。)

今回は、方法 (1)の実例を見てから、実は、方法 (2)は、テキストを破壊することがあるという実例を見る。 そして、その後で、PDF ファイルの直接編集の可能性を紹介する。

I. 方法 (1): inputenc と detex を使う
II. 方法 (2): dvipdfmx と Adobe Reader(9.3) を使う
III. PDF の直接編集
III-1. 準備
III-2. dvipdfmx の出力を読む
III-3. pdfLaTeX の出力を加工
III-4. dvips, ps2pdf の出力を加工
III-5. PDF ファイルの直書き

I. 方法 (1): inputenc と detex を使う

ドイツ語だけで文書を書く場合には、 inputenc パッケージを使ってドイツ語文字を直接入力する原稿を書けるのは、 はるか昔に紹介した。プリアンブルに \usepackage[latin1]{inputenc} と書いておけば、直接ドイツ語文字で入力できる。この場合は、Latin-1 なので、 ISO-8895-1 ということになる。

pLaTeX inputenc[utf8] test4utf8.dvi

Vine Linux 5.0 の場合は、inputenc.sty (Alan Jeffrey, Frank Mittelbach) v1.0d (2004/02/05) となっており、付属する文書には明記されていないが、その他のエンコーディングとして、utf-8 も使うことができる。その場合は、\usepackage[utf8]{inputenc} とプリアンブルに書くことになる(上記の画像を参照)。 こうすると Emacs でドイツ語文字と日本語文字を直接入力して、 pLaTeX にかけることができる。 (もちろん、utf-8 を使う pLaTeX をインストールしていることが前提。)

Emacs におけるドイツ語文字の入力は、メニューからも可能で、 「オプション」→「言語」→「言語環境の設定」で、例えば、「ヨーロッパ系言語」→「ラテン系言語(1)」(latin-1)を選択し、 「オプション」→「言語」→「インプットメソッドを選択」で、ディフォルトの latin-1-prefix を選択する。
Bücher と入力したい時は、まず、B" と入力すると、下に "[ "AEIOUaeiosuy] と出るが、ここでは、 U-Umlaut の小文字を入力したいので、u と続けて入力。 すると、B"□ は、B□ となるが、 続けてc を入力すると画面には、 Büc□ のように現れる (以前のEmacs の版では、ちゃんと一文字入力後にウムラウト文字も出たのだが...)。

とにかく、左のようなファイル(ここでは、test4utf8.tex)を作り、 pLaTeX (pTeX, Version 3.141592-p3.1.10)でコンパイルすると、xdvi で、 右のような出力が得られる。

もちろん、このままだとちゃんとしたハイフネーションをしてくれないので、 プリアンブルに、\usepackage{ngerman} としておく方がいいかもしれない。 ウムラウト文字を入力するために、\"a とか、"a (babel式) とやっていたことを考えると、pLaTeX 上でウムラウト文字直接入力できるというのは、隔世の感すらある。

そして、「TeXコマンドを取り除くプログラム」detex (v. 2.8) の出番だ。 Vine Linux では、昔からパッケージになっているので # apt-get install detex でインストールできる。
$ detex test4utf8.tex >test4utf8.txt
とすると、以下のような utf-8 のテキストファイルが作られる。 ($ file test4utf8.txt すると test4utf8.txt: UTF-8 Unicode text と返ってくる。)





utf-8 を使った入力と 





まずは、テスト。


Das Mädchen ist hübsch.

LaTeX2ε が出力されないのはこれがLaTeX2ε の中で定義された特殊文字なので当然だが、 テキストはちゃんと再現されている。ということで、空行を削除すれば、使いものになりそうだ。

II. 方法 (2): dvipdfmx と Adobe Reader(9.3) を使う

dvipdfmx(20090522)を使って、PDF に変換($ dvipdfmx test4utf8.dvi)した後、 Adobe Reader (9.3) で読み、「テキストとして保存」を選択すると、以下のようなテキストファイルになってしまう。 確かに、これじゃあ使い物にならない! (dvipdfm で変換したものでも、結果は同じ。)

utf-8を使った入力と 
LATEX 
2"

平成 
22年 
2月 
14日

まずは、テスト。 


Das 
M¨ubsch.

adchen 
ist 
h¨

1

III. PDF の直接編集

最初は、上で示した test4utf8.pdf を読んでみるところから始まった。 PDF ファイルは、テキストファイルの部分と、バイナリーの両方の部分を含む。 ひょっとして、 PDF ファイルの適当な文字列を置き換えるだけで、問題が解決できるかな、 と思ったのがきっかけだった。

III-1 準備

まずは、準備として、pdftkghex2 をインストールしておく。 pdftk は、「PDF 操作ツールキット」で、 Vine Linux 5.0 では、pdftk 1.41が提供されているので、# apt-get install pdftk でインストールできる。 ghex2 は、「GNOME用バイナリ・ファイル・エディタ」で、 # apt-get install ghex で、ghex 2.24.0 がインストールされる。 コマンドは、ghex2 なので注意。
また、今回は、PDF-1.4 のファイルの直書きをする関係上、 PDF Reference, Third Edition: Adobe Portable Document Format 1.4. Adobe Systems Incorporated. を入手しておく。エンコーディングの方法、コード表などを参照する。 概観をつかむ上で役立ったのは、手書きPDF入門(提供: 横浜工文社, 制作: 荒井文吉)

III-2 dvipdfmx の出力を読む

まずは、 dvipdfmx の出力を読んでみた。
pdftk test4utf8.pdf output test4utf8.uncompressed.pdf uncompress として、Das Mädchen ist hübsch. の部分がどのようにエンコードされているのかを見た。 以下のストリームが該当の箇所。

Td[(Das)-250(M)]TJ 32.87 .06 Td[(\250)]TJ -.66 -.06 Td[(adchen)-249(ist)-250(h)]TJ ↵
58.11 .06 Td[(\250)]TJ -1 -.06 Td[(ubsch.)]TJ

\250 は、8進数で、diereisis と呼ばれるウムラウト記号(¨)に対応する。 2箇所にあるところからも推測できるように、その後に続く文字の上に重ね書きされているのが分かる。 (PDF Reference. Appendix D, P.552 参照。)

III-3 pdfLaTeX の出力を加工

上で例に使った test4utf8.pdf は、 文字数が多くてかなり複雑なので、もっと単純なファイルを作成してみた。
内容は、Hello Bücher (「こんにちは、本さん達」)と表示させる以下のような LaTeX のソースファイル。これを、コンパイルして、PDF にして、 合字を単体の文字に変換することをめざした。このファイル名は、hello_buecher.tex とする。

\documentclass[12pt]{article}
\usepackage{times}
\usepackage[utf8]{inputenc}
\begin{document}

Hello Bücher

\end{document}

今回は、 (1) LaTeX のソースファイルからpdfLaTeX を使い直接 PDF 出力を得て、 (2) pdftk で圧縮を解除したファイルを作る。 (3) Emacs で開くと DocView が立ち上がり、PDF の内容を表示してくれる。 編集するには、C-c C-c でOK。
注1: 日本語の入っていないテキストなら、 pdfLaTeX で直接 PDF 化することができる。
注2: dvipdfmx 経由だと、 DocViewPDF ファイルを開いた時にエンコーディングが正しく働かないようで、ウムラウトが文字化けする。 dvipdfmdiereisis のフォントを埋め込んだ PDF にすれば、文字化けしない。
注3: pdftk.vim のプラグインを導入した vim でも作業できるようだが、試していない。

$ pdflatex hello_buecher.tex % (1)
$ pdftk hello_buecher.pdf output hello_buecher.uncompressed.pdf uncompress % (2)
$ emacs hello_buecher.uncompressed.pdf & % (3)

preview of the hello_buecher.uncompressed.pdf by docview in Emacs

C-c C-c で、 DocView のプレビューが消えて、編集モードになる。 作業は、 PDF ファイルを編集して、その buffer を例えば、 hello_buecher.uncompressed.edited.pdf のようにして保存し、 pdftk で、クロスレファレンスを再計算させて修復するという流れになる。

なんだ、楽勝だ、と思ったのもつかの間。よく見ると、オブジェクトの塊で、フォントは「埋め込みサブセット」 になっている。結論からいうと、手作業でウムラウト文字(ここでは、ü) のフォントデータを埋め込むなんてできない、ということが判明(それなりのフォント情報を得るツールが必要)。

具体的に試した手順をメモしておくが、この例はうまくいかなかった記録(念のため)。 うまくいった例は、III-4. dvips, ps2pdf の出力を加工 を参照。
5番目のオブジェクト 5 0 obj 以下の stream BT ... ET endstream に挟まれたデータ(1) をデータ(2)のように書き換える。<FC> は、16進数を書き込む時の形式で、WinAnsiEncoding では ü の文字コードが、FC

データ(1): (Before)
/F17 11.9552 Tf 128.4133 704.1363 Td[(Hello)-250(B)]TJ ↵  
38.5251 0.0598 Td[(\250)]TJ -0.9983 -0.0598 ↵
Td[(ucher)]TJ 136.1969 -564.3835 Td[(1)]TJ
データ(2): (After)
/F17 11.9552 Tf 128.4133 704.1363 Td[(Hello)-250 ↵
(B<FC>cher)]TJ 136.1969 -564.3835 Td[(1)]TJ 

次に、一旦、buffer を別名で(例えば、 hello_buecher.uncompressed.edited.pdf)書き出し、ghex2 で、 stream の後ろの改行(0A)の次の文字から、 endstream の直前の改行(0A)の前の文字までを数えて、 >> /Length ... << の間に書き込む。 (手書きPDF入門、文字の描画 参照。) 今回は、148 を 98 に変更。(DocView (Emacs) で変更。)

6 0 obj の中に、使用している文字セットを指定している部分がある。 具体的には、/CharSet (/one/B/H/c/e/h/l/o/r/u/dieresis) の部分。 ü(U-Umlaut) は、udiereisis と呼ばれているので、udiereisis を削除して、 udiereisis を加える。つまり、 /CharSet (/one/B/H/c/e/h/l/o/r/udieresis) とする。

2 0 obj の中に、使用する文字の先頭と末尾の文字を10進数で書き込んである部分がある。 ここでは、/LastChar 168 が、Umlaut の10進数(diereisis)。 udiereisis の10進数は、252 なので、/LastChar 252 とする。

最後に、ファイル末尾のクロスレファレンス(xref)の値の修正を pdftk にやってもらう。 オブジェクトの位置を ghex2 で表示させて、目視してカウントしてもよい(笑)。
具体的には、$ pdftk hello_buecher.uncompressed.edited.pdf output hello_buecher.uncompressed.fixed.pdf のようにする。 これで、無事に Hello Bücher と表示されればいいのだが、 現実には、Hello Bcher と表示されてしまう。理由は、U-Umlaut のフォントが埋め込まれていないから。 埋め込みフォントは、/FontFile 9 0 R なので、 9 0 obj にあるのだが、バイナリーで埋め込まれているフォント情報だけを見ても、 何の解決にもならない。ああ、悲し!

editing hello_buecher.uncompressed.pdf by ghex2

III-4 dvips, ps2pdf の出力を加工

LaTeX の出力から PDF 出力を得るもう1つの方法には、 ps を経由するものがある。これが、結果としてはうまくいってしまった。 PDF ファイルの編集方法は、基本的に上に示したものと同じだ。

(1) LaTeX のソースファイルからLaTeX を使い dvi 出力を得て、
$ latex hello_buecher-2.tex
(2) dvipsps (Postscript) ファイルに変換する。
$ dvips hello_buecher-2.dvi >hello_buecher-2.ps
(3) ps2pdfPDF ファイルに変換する。
$ ps2pdf hello_buecher-2.ps >hello_buecher-2.pdf
(4) pdftk で圧縮を解除したファイルを作る。
$ pdftk hello_buecher-2.pdf output hello_buecher-2.uncompressed.pdf uncompress
(5) Emacs で開いて(DocView)で、PDF を編集。
$ emacs hello_buecher-2.uncompressed.pdf &

今回は、7 0 obj に テキストの stream があった。 BT ... ET の中身は以下の通り。

Before:
/R8 11.9552 Tf
1 0 0 1 128.4 704.14 Tm
[(H)-0.700452(e)2.3505(l)-3.04993(l)-3.05095(o)-242.768(B)-75.7816(\250)413.313 ↵
(u)-1.87468(c)2.3505(h)-1.87468(e)2.34948(r)1.76236]TJ
173.76 -564.36 Td
[(1)-1.87468]TJ

今度は、テキストの内容が一文字づつ( ) の中に入っているのが分かる。 そこで、<FC> と16進数で U-Umlaut 小文字の文字コードを書き込んだ。

After:
/R8 11.9552 Tf
1 0 0 1 128.4 704.14 Tm
[(H)-0.700452(e)2.3505(l)-3.04993(l)-3.05095(o)-242.768(B)-75.7816<FC>  ↵
-1.87468(c)2.3505(h)-1.87468(e)2.34948(r)1.76236]TJ
173.76 -564.36 Td
[(1)-1.87468]TJ

そして、10 0 obj にある、次の行 /Differences [168 /dieresis] は、ウムラウト記号なので、その部分を、U-Umlaut (udieresis) に書き換える。

After:
/Differences [252 /udieresis]

これで、Emacs 上で、ファイルをセーブしてから、C-c C-c で、 Hello Bücher と出力される。ただし、B の後のスペースが広すぎるので、 (B)-75.7816 の後の数値を、例えば、(B)-45.7816 位にすると、少しは見栄えがよくなる。

最後に、編集したファイルは、例えば、hello_buecher-2.uncompressed.edited.pdf のようにして保存し、
$ pdftk hello_buecher-2.uncompressed.edited.pdf output hello_buecher-2.uncompressed.fixed.pdf
をして、ファイルのクロスレファレンスを修復しておく。ちなみに、stream の長さは、 わざわざghex2 で見て数えなくても、pdftk が自動的に修正してくれる。 このファイルは、埋め込みフォントを持っていないが、gs (Ghostscript) の文字にマッピングしているので、 DocView でプレビューできる。

III-5 PDF ファイルの直書き

PDF Reference 1.4. P.760-762. に載ってたサンプル G.2 を修正して、 mypdf-1.4.fixed.pdf を作成した。これは、なぜか DocView (Emacs) 上では見えない(埋め込みフォントを使っていないから?)。 Adobe Reader (acroread) あるいは、 evince で読むことができる(表示位置は結構下の方です)。 ソースを見れば、一目瞭然。 U-Umlaut なんか、ghex2 で直に FC と書き込んでしまった。 Emacs で開くとstream の中身は、 (Hello B\374cher) と表示される。mypdf-1.4.fixed.pdf は、819 bytes ですね。 エンコーディングによっては、バイナリーデータに見える文字が 5 バイト入っているので (pdftkを通すと、コメントとして4バイト挿入される謎の文字列と U-Umlaut が 1 バイト)、 そのままでは、開けないタコなエディタもあるかもしれない。また、拡張子しか見ないワープロとか...。 そんな時は、ファイル名末尾の拡張子を txt に変えれば、 中身は見れるはずです(例えば、mypdf-1.4.fixed.pdf.txt は、 unix 系の OS なら、EOLLF(0x0A) なのでちゃんと改行入りで見えるが、Windows 系なら、 EOLCR LF(0x0D 0x0A) のため、 CR(0x0D) が入っていないこのテキストは、長ーい 1行となって表示される可能性が高い)。 (firefox 3.5.7 (on Vine Linux 5.0) を通して見たら、テキストファイルのウムラウトもちゃんと見えていました。)

思わぬ事態となり、結局、PDF ファイル構造のお勉強をしてしまいました。単純な文字列なら書き換えも十分可能なことが確認できました。 日本語などは、16進数の塊なので、コード表とにらめっこになります。 感想としては、PDF ファイルはオブジェクトの塊で、面白くありません。 しかも、10進数を使ったり、16進数を使ったり、8進数も出てきたり、なんじゃこりゃ、という感じ。 それでも、今では、本当に PDF ファイルの恩恵にあずかっていますから、文句は言えません。


latex-beamer を使ってみる  [08/08/2008]

プレゼンテーション・ソフトというとPowerPoint があまりにも有名だ。unix 使いの人たちの中にも、 PowerPoint だけは使うという人たちもいるくらいだ。 Microsoft 製品から離れるための選択肢はいくつかあるが、 OpenOffice.orgImpress を使うか、latex-beamer を使うという手がある。 後者の場合、LaTeX で文書を作成し、pdf 化して、発表は、例えば、Adobe Reader (acroread) で行なうという流れになる。 今回は、latex-beamer を使ってみたので、 そのインストールと雑感をメモしておく。

VineLinux 4.2 では、 /usr/share/texmf-dist/tex/latex/beamer 以下に、latex-beamer がインストールされている。
$ rpm -qif beamer.cls
してみると、tetex-3.0-0vl11.4.i386.rpm に入っていることが分かる。 http://sourceforge.net/projects/latex-beamer/ によれば、latex-beamer を動かすには、 pgf, beamer, xcolor が必要だが、 VineLinux 4.2 には、tetex-3.0-0vl11.4.i386.rpm に以下の版がインストールされている。

beamer 2004-10-11 v.3.01
pgf 2004-10-20 v.0.85
xcolor 2004-07-04 v2.00

最新版(2008/7/31)の tarball を調べてみると、

beamer 2007-03-11 v.3.07
pgf 2005-11-16 v.1.01
xcolor 2004-07-04 v.2.00

であることが分かり、beamerpgf の版が古いことが分かった。 それでも支障がなければ、VineLinux 4.2 の提供するlatex-beamer を使ってもよいのだが、 dvipdfmx が使えずに、 dvipsps2pdfpdf 変換すると、 ANK と日本語フォントのベースラインが大きくずれてしまい、みっともない。 これは、上記の最新のbeamerpgf を導入して、dvipdfmx にかけることで解決することが分かった(多分、pgfdvipdfmに対応したからだろう)。
ベースラインがずれている出力例(LaTeX のソースは、beamer-zure.tex

latex-beamer ずれ版

ベースラインがずれていない出力例(LaTeX のソースは、beamer-zurenai.tex

latex-beamer ずれない版

インストール
xcolor の版は最新なので、 beamerpgf をインストールする。
apt でのパッケージ管理を壊さずにインストールするために、 今回は、/usr/share/texmf/tex/latex/ 以下に、 latex-beamer というディレクトリを作り、 http://sourceforge.net/projects/latex-beamer/ からダウンロードした latex-beamer-3.07.tar.gz を解凍して展開した。

    $ tar zxvf latex-beamer-3.07.tar.gz
    # cp -r latex-beamer-3.07/* /usr/share/texmf/tex/latex/latex-beamer

一部初歩的間違いを発見、修正(2008/1/6)

同様に、/usr/share/texmf/tex/latex/ 以下に、 pgf というディレクトリを作り、 http://sourceforge.net/projects/pgf/ からダウンロードした pgf-1.01.tar.gz を解凍して展開した。

    $ tar zxvf pgf-1.01.tar.gz
    # cp -r pgf-1.01/* /usr/share/texmf/tex/latex/pgf

一部初歩的間違いを発見、修正(2008/1/6)

上記のbeamer-zurenai.tex のオープニングは、 beamer-zurenai-opening.png を参照。

感想

1. マニュアル
latex-beamer には、beameruserguide.pdf がマニュアルとして提供されている(英語)ので参照するとよい。

2. テーマの選択
プレゼンテーションの全体のテーマの変更は、 \usetheme{テーマ名}をプリアンブルに書くことで行なう。 何も選択しないと、当然、default が使われるが、指定できるテーマ名は、なぜか圧倒的に地名が使われている (しかも、ドイツの都市名が多い)。学術発表を意識してか、 どのテーマを選んでも、けばけばしくなく(逆にいうとあまりかわりばえしないので)、 好感が持てる。 参考までに、テーマ名を以下に挙げておく。

AnnArbor, Boadilla, Frankfurt, Luebeck, PaloAlto, Warsaw, Antibes, CambridgeUS, Goettingen, Madrid, Pittsburgh, boxes, Bergen, Copenhagen, Hannover, Malmoe, Rochester, Berkeley, Darmstadt, Ilmenau, Marburg, Singapore, Berlin, Dresden, JuanLesPins, Montpellier, Szeged

私は、最初、\usetheme{Hannover} を使ってみたのだが、最終的に今回(オープンキャンパスの模擬授業で)は \usetheme{Darmstadt} を使った。

3. マルチメディアサポート
実は、音声ファイルを貼り付けたプレゼンテーションを目指したのだが、 pdflatex でしか \usepackage{multimedia} で音声ファイルが使えないようで、残念だ。 multimedia.sty が使えると、 \movie{}とか、 \animate{} などが使えるようだ。\sound{} も、 残念ながらpdflatex でないと動かないらしい。
4. hyperref は自動的に読み込まれる
今回は、beamer class (3.07) のマニュアルをきちんと読む余裕がなかったので、音声の再生は、 beamer class を指定した時に自動的に読み込まれる hyperref の機能を使って指定し、 mplayerplugin を組み込んだ Firefox にとばすことにした。具体的には、

    (1) \url{file:///home/hoge/arbeit.wav}
    (2) \href{file:///home/hoge/arbeit.wav}{アルバイト vs. Arbeit} 

(1) を試してうまくいったので、そのままプレゼンしてしまったが、(2) の方が、ファイルの絶対パスを見せなくてすむので、スマート。 ただし、この方法だと、Acrobat Reader でプレゼンテーションしている時に、音声ファイルをクリックすると、 Firefox が、 「セキュリティ警告」のウインドウを開いてくれ、「許可(A)」をクリックしないと先に進めない。 また、最初の音声ファイルを開いた時は、 Firefoxmplayerplugin の画面に飛んでしまう(2回目以降は、背後で隠れたままなので、 プレゼンテーションが中断することはない)。

4. 簡単
LaTeX に慣れている人には、 簡単にプレゼンテーション資料が作れる。 一行ごとに止めるには、\pause と書くだけ。 特に華やかな装飾をしないのなら、普通に LaTeX のソースファイルを書いて、プリアンブルに \documentclass[11pt,dvipdfm]{beamer} とか書いておくだけで、およその部分はできてしまう。 PowerPoint とか、 Impress などのように、重い環境を開いて編集、 プレビューを繰り返すという時間の使い方をしないですむのは、 個人的にはうれしい。(どうしても、オブジェクトをはめ込むというスタイルだと、 編集中にどんどん重くなっていく(反応が遅くなり、時間がかかるようになる)のはいやなものだ。
ちなみに、今回のLaTeX ソースファイルは、 13,446 バイト。生成された pdf ファイルは、2,153,140 バイトだった。 グラフィックファイルを埋め込んでいるため、巨大になっている。

5. 注意
・「しおり」を使う時は、漢字コードが EUC の Linux 環境なら、 \AtBeginDvi{\special{pdf:tounicode EUC-UCS2}} をプリアンブルに書くのを忘れずに。
\tableofcontents 等を使う際には、 忘れずに2回コンパイルすること。
・プリントアウトする際は、128mm * 96mm サイズになっているので、 psnup などを使って、A4に拡大してやる必要がある。


Ubuntu 7.10 の LaTeX 環境でドイツ語処理  [12/02/2007]

0. 前書き
VineLinux を4.1にアップしてから、 特に何事もなく使いつづけていたのだが、 ひょんなこと からドイツ語機として利用しているThinkPad T60 に、Ubuntu 7.10 のドイツ語環境(こんな感じ)を作った。 ディスクトップ機では、Ubuntu 7.10の日本語環境を作ってあったので、 いろいろと比較してみた。今回は、Ubuntu 7.10 で、babel を利用したドイツ語ハイフネーションの話。

TeXのインストール自体は、 JapaneseLocalizedDerivative/LaTeXForJapanese を参考にSynaptic あるいは、 apt-get を使って必要と思われるパッケージを選択してインストールする。 ただし、現時点では、まだメタパッケージ latex-env-ja は完成していない模様。

babel package 自体は、 texlive-latex-baseに入っている。 apt-cache search babel をやってみれば分かる。 注意したいのは、アスキーが開発している日本語版LaTeXは、 teTeXを土台にしているが、 Ubuntu(Gutsy以降) では、 teTeX がすでに開発を終了(2006年5月)しているため、 TeX Live へ移行しているという点。 結論としては、texlive-lang-german パッケージをインストールすれば LaTeXで 普通に、 babel でのハイフネーションや ngerman.sty などが使える状態になる。 参考までに texlive-lang-german パッケージに入っているもの (Synaptic の情報)をメモしておく。

... 詳細はこちら


aspellでLaTeXのドイツ語文書をスペリングチェック(VineLinux 3.1) [07/19/2005]

対象となる aspell は, RPM パッケージ aspell-0.50.3-0vl8.i386.rpm をインストールしたものです. aspell の使い方や注意事項は, すでにこちらで説明しています. ここでは, LaTeX のドイツ語の文書を,スペリングチェックすることが目標です. 結論から言うと, emacs 21.3.1 からも, gnome-console からも, ISO-8859-1LaTeX のテキストのスペリングチェックが可能です. ... 詳細はこちら


german.sty と ngerman.sty (in VineLinux3.1) のハイフネーションを検証(分綴調査 その4)... [07/17/2005]

VineLinux3.1tetex-2.0.2-0vl14.i386.rpm には, /usr/share/texmf/tex/generic/german 以下に, german.styngerman.sty が入っています. 前者が,旧正書法用のスタイルファイル,後者が新正書法用のスタイルファイルで, CTAN で(2005年7月)確認したところ,それぞれ最新のものです. どちらも,v2.5e 1998-07-08) 今回は,本当に2つのスタイルファイルでハイフネーションが違うのかどうか, 検証してみました.... 詳細はこちら


platex (in VineLinux3.1) でハイフネーション(分綴)をするには(3)  [07/14/2005]

Babel を使って VineLinux3.1 でのドイツ語のハイフネーションが可能なことは 前回のレポートで紹介しました. 今回は,pLaTeX (ASCII pTeX) と german.sty, ngerman.sty を使った検証 をします....中略... テキストは,以前に Gutenberg(-DE) Projekt からダウンロードしておいたTheodor StormDer Schimmelreiter (白馬の騎士)を用います. このファイルは, utf-8 で保存され, gedit の情報では, 38424 語,238,480 bytes です.... 詳細はこちら


Babel(VineLinux3.1) を使ってハイフネーション(分綴)をするには(2)  [06/25/2005]

pLaTeX(ASCII pTeX)編です. … 結論から言うと,Vine3.1 では, 日本語を通すASCII pTeX がインストールされますが, その環境で Babel を使ったハイフネーション(分綴)ができます.そのための設定を説明します. 詳細はこちら


babel(Vine3.1/Linux) を使ってハイフネーション(分綴)をするには(1) [6/24,6/25/2005]

VineLinux3.1 では,tetex のインストールをすれば, 基本的にそのままで TeX/LaTeX が使用可能な状況になっています. しかし,先日の inputenc.sty を使ったときのログが気になっていました. そこで,まず,tetex の環境回りを調べてから, babel でドイツ語のハイフネーションを設定するまでの顛末 をまとめました. 詳細はこちら


emacsとxdviの相互参照  [06/18/2005]

Vine3.0/3.1 からは, platex-src-specials をつけて起動するように, .emacs.el に記入するだけで, emacs から xdvi の該当箇所にジャンプでき, また,逆に xdvi からソースの該当行へジャンプできるようになっている. これは使ってみると実に便利.

まず, xdvik-search がインストールされているかどうかを確認する (rpm -qi xdvik-search). もし,ないなら,
# apt-get install xdvik-search
してインストール.

たとえば,YaTeXを使っているなら, .emacs.el の YaTeX の設定部分を以下のように変える.

    ----------変更前-------------------
      (setq dvi2-command "xdvi"
        tex-command "platex"
    ----------変更後-------------------
      (setq dvi2-command "xdvi"
        tex-command "platex -src-specials"
    ----------------------------------
    

emacs から xdvi の該当箇所へジャンプするのは, C-c C-j (あるいは, M-x xdvi-jump-to-line), 逆に, xdvi の該当箇所から emacs のソースへ行くには, Ctrl + マウスのシングルクリック.すると, emacs のソースファイルの該当行へジャンプしてくれる. これだけで,随分自由になった感じがする(開発者の方々に感謝).

Linux Conference 2005 での土村展之さんの発表論文には, ptetex 開発の話と共に, teTeX-3.0 に含まれる xdvik-22.84.9 では, 文字列検索やペーストバッファへの転送ができるとの説明がある. うーん,ここまでできるとは.やはり, teTeX-3.0/ptetex に移行すべきか?


TeXで音声記号を利用する [05/30/2005]

tipa-1.3(TeX用音声記号パッケージ)のインストール(tipa-1.2のインストールを改訂)
福井玲さん@東京大学の作成した,TeX で使える音声記号が, tipa-1.3 というパッケージになっています. 最初は,beta0.624 あたりから公開され, 現在ではほぼ完璧な状態となり,CTAN に置いてありますので, LaTeX を使って音声記号を書く場合には,多いに利用したいものです.今回は, Vine3.1CRWindows XP へのインストールの様子をまとめました. 詳細はこちら


Web上のデータをそのまま LaTeXで利用する(Latin-1の若干特殊な文字を含む場合) [05/29,05/30/2005]

inputenc.sty を使って Web のドイツ語ページをそのままLaTeX のソースにファイルにすることができます.

GNOME-2.4 になったVine 3.1 では,gedit が2.4.1 となり, FirefoxMozilla でドイツ語のページを閲覧していて,欲しい情報にめぐり会った時, マウスで領域指定して,gedit でマウスの中ボダンをクリックして paste するだけで, きちんとドイツ語の文章を受け取れるようになった(操作としては,2つ のアクションなので,drag & drop とほぼ同等).

gedit の方の default の文字コードが UTF-8 となったことで 日本語を含む多言語のページをほぼ問題なく扱えるようになったことが大きい (もちろん,ISO-8859-1 なども文字コードとして指定できる). 同様に,emacspaste して,LaTeX の文書にしてしまうことができることもある(微妙). 詳細はこちら