LaTeXから生成するPDFが、SlideShareで日本語が表示できるようにしてみた。

Debian勉強会資料のGitリポジトリを用いて、LaTeXからPDFを生成する場合、フォントは埋め込まれていないので、SlideShareでは日本語が表示されない。 1

で、フォントを埋め込むためにはどうすればいいかなぁとやってみた。今回はきろ字フォントをPDFに埋め込む、という例。

システム全体の設定

まず、dvipdfmxコマンドがフォントを読む込めるようにする。Squeeze/Sidでは/etc/texmf/texmf.d/75DviPS.cnfのOSFONTDIRの値がダミーの値になっているので、これを/usr/share/fontsに変更する。/etc/texmf/texmf.cnfは、このファイルにも書いてあるとおり直接編集してはならない。

$ sudo git diff
diff --git a/texmf/texmf.d/75DviPS.cnf b/texmf/texmf.d/75DviPS.cnf
index ade8f9f..f23b179 100644
--- a/texmf/texmf.d/75DviPS.cnf
+++ b/texmf/texmf.d/75DviPS.cnf
@@ -6,7 +6,7 @@ TEXPSHEADERS.gsftopk = .;$TEXMF/{dvips,fonts/{enc,type1,type42,t
ype3,truetype}}/
 % OSFONTDIR is to provide a convenient hook for allowing TeX to find
 % fonts installed on the system (outside of TeX).  An empty default
 % value would add "//" to the search paths, so we give it a dummy value.
-OSFONTDIR = /please/set/osfontdir/in/the/environment
+OSFONTDIR = /usr/share/fonts

 % PostScript Type 1 outline fonts.
 T1FONTS = .;$TEXMF/fonts/{type1,hbf}//;$OSFONTDIR//

変更後、update-texmfで/etc/texmf/texmf.cnfファイルを生成する。

$ sudo update-texmf -v
Merging information from /etc/texmf/texmf.d/ into /etc/texmf/texmf.cnf ... Replacing config file /etc/texmf/texmf.cnf with new version
done

実行すると、以下のようにファイルが更新される。

$ sudo git diff
diff --git a/texmf/texmf.cnf b/texmf/texmf.cnf
index 63c392d..406a2c0 100644
--- a/texmf/texmf.cnf
+++ b/texmf/texmf.cnf
@@ -370,7 +370,7 @@ TEXPSHEADERS.gsftopk = .;$TEXMF/{dvips,fonts/{enc,type1,type
42,type3,truetype}}/
 % OSFONTDIR is to provide a convenient hook for allowing TeX to find
 % fonts installed on the system (outside of TeX).  An empty default
 % value would add "//" to the search paths, so we give it a dummy value.
-OSFONTDIR = /please/set/osfontdir/in/the/environment
+OSFONTDIR = /usr/share/fonts

 % PostScript Type 1 outline fonts.
 T1FONTS = .;$TEXMF/fonts/{type1,hbf}//;$OSFONTDIR//
diff --git a/texmf/texmf.d/75DviPS.cnf b/texmf/texmf.d/75DviPS.cnf
index ade8f9f..f23b179 100644
--- a/texmf/texmf.d/75DviPS.cnf
+++ b/texmf/texmf.d/75DviPS.cnf
@@ -6,7 +6,7 @@ TEXPSHEADERS.gsftopk = .;$TEXMF/{dvips,fonts/{enc,type1,type42,t
ype3,truetype}}/
 % OSFONTDIR is to provide a convenient hook for allowing TeX to find
 % fonts installed on the system (outside of TeX).  An empty default
 % value would add "//" to the search paths, so we give it a dummy value.
-OSFONTDIR = /please/set/osfontdir/in/the/environment
+OSFONTDIR = /usr/share/fonts

 % PostScript Type 1 outline fonts.
 T1FONTS = .;$TEXMF/fonts/{type1,hbf}//;$OSFONTDIR//
diff --git a/texmf/texmf.d/75DviPS.cnf b/texmf/texmf.d/75DviPS.cnf
index ade8f9f..f23b179 100644
--- a/texmf/texmf.d/75DviPS.cnf
+++ b/texmf/texmf.d/75DviPS.cnf
@@ -6,7 +6,7 @@ TEXPSHEADERS.gsftopk = .;$TEXMF/{dvips,fonts/{enc,type1,type42,t
ype3,truetype}}/
 % OSFONTDIR is to provide a convenient hook for allowing TeX to find
 % fonts installed on the system (outside of TeX).  An empty default
 % value would add "//" to the search paths, so we give it a dummy value.
-OSFONTDIR = /please/set/osfontdir/in/the/environment
+OSFONTDIR = /usr/share/fonts

 % PostScript Type 1 outline fonts.
 T1FONTS = .;$TEXMF/fonts/{type1,hbf}//;$OSFONTDIR//

ユーザ個別で指定する場合

ホームディレクトリ直下に、.texmf-config として、texmf.cnfを用意してやれば良いみたいだが、未検証。

PDF生成前の準備

フォントマップを用意する。きろ字フォントは、/usr/share/fonts/truetype/kiloji/ディレクトリの下に、

ls /usr/share/fonts/truetype/kiloji/
kiloji.ttf  kiloji_b.ttf  kiloji_d.ttf  kiloji_p.ttf

のように存在する。拡張子の.ttfはフォントマップには書かない。プロポーショナルフォントのkiloji_pを指定する場合は以下のようになる。

rml H kiloji_p
gbm H kiloji_p
rmlv V kiloji_p
gbmv V kiloji_p

あとは、dvipdfmxコマンドを実行するときに、このファイル(custfont.mapとでもしておこう)を-fオプションで指定すればよい。

$ dvipdfmx -f custfont.map hoge.dvi

するとフォントを埋め込んだPDFを生成できる。Debian勉強会のMakefileだと、

%.pdf: %.dvi
        umask 002 ; dvipdfmx -o $@.tmp $<

となっているところを、

%.pdf: %.dvi
        umask 002 ; dvipdfmx -f custfont.map -o $@.tmp $<

とすれば良い。

1

Debian勉強会ではGitや勉強会のWebサイトで資料配布しているので別に困らないのだけど、他の勉強会で資料を作るときは、このリポジトリをfork、カスタマイズしているのだが、他の人は大体SlideShareを使っているので、まぁちょっと不便。

LaTeXで<, >を表示する方法。

いつもverb//を使って、

\verb/<>/

としていたのだが、もっと簡単に記述する方法があったのね。

\(<>\)

これは楽だ。

追記

dancerjに

$<>$

だろjk、と 教えてもらった 。thx。

SargeからEtchにアップデート途中にトラブったのでメモ。

$ lspci
(snip)
0000:01:09.0 Ethernet controller: Marvell Technology Group Ltd. Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (rev 13)

このNICに対応するLinux 2.6.8でのカーネルモジュールは、sk98linと。

$ sudo modprobe -av sk98lin
sk98lin: Network Device Driver v6.23
(C)Copyright 1999-2004 Marvell(R).
ACPI: PCI interrupt 0000:01:09.0[A] -> GSI 20 (level, low) -> IRQ 225
eth2: Yukon Gigabit Ethernet 10/100/1000Base-T Adapter
      PrefPort:A  RlmtMode:Check Link State
eth2: network connection up using port A
    speed:           100
    autonegotiation: yes
    duplex mode:     full
    flowctrl:        symmetric
    irq moderation:  disabled
    scatter-gather:  enabled
eth2: no IPv6 routers present

オンボードのNICが最初はeth0だったのに、eth1 -> eth2とインクリメントされているのは、また別の問題だ。w

couchapp 0.7.1が動かん。

Githubにあるmaster 1 から持ってきているcouchappが、Sidだと動かないことに気づいた。

$ couchapp
Traceback (most recent call last):
  File "/usr/bin/couchapp", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 2675,
in <module>
    parse_requirements(__requires__), Environment()
  File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 552, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: restkit>=2.2.0
$ dpkg -l python-restkit
(snip)
ii  python-restkit 2.1.5-1        Restkit is an HTTP resource kit for Python

0.7.1からrestkitのバージョンは2.2.0以上でないとアカンらしい。仕方ないので、0.7.0にときに作っておいたdebパッケージをインストールして、0.7.0にダウングレードしておいた。

10/28対応。

10/28のアップデートで、python-restkitが2.2.2になったので、問題解決したなり。うーむ、debian/control見直し必要ですな。

1

git:// github.com/couchapp/couchapp. git

そして実はSargeでもNTLM認証行けちゃった。

Sargeでは環境変数http_proxyを設定してもrootでパッケージのアップデートができなかったのだが、もしやと思い、一台だけ残っているSargeのサーバに先ほどの/etc/apt/apt.confにプロキシ認証の設定をして、ディストリビューションをsargeからstableに変更してsudo

apt-get updateを実行してみたところ、ものの見事にProxyのNTLM認証行けてしまった。なんだ、こっちに設定しなくてはならなかったのか、アハハー。

とまぁそんな訳なのだが、SargeはおろかEtchのリポジトリももう既に廃止になっているので、SargeからLennyへいっきにアップグレードすることなんて怖すぎてできません…。

orz サーバもリプレースというか、新規に構築しなおす予定なので、済んだら試してみるかなぁ。