平衡点
2010/06/04
_ xdvik-ja での日本語表示, 再びその2
前回のお話: xdvik-ja での日本語表示, 再び
id:munepi さんからの情報が正解でした. freetype が原因です.とりあえず Bug 報告しておきました.
- libfreetype6: invalid information of outline font at x86_64
- xdvik-ja: can't display some charcters at x86_64
freetype の方はともかく xdvik-ja の方には patch 当てて squeeze に放り込みたいところです.
重ね重ね id:munepi さんに感謝.
2010/06/08
_ Let's Note S9, その2
その 1 はここ
無線 LAN
id:mistf さんより, iwlwifi-6050-4.ucode のリリースを教えてもらった.
- http://intellinuxwireless.org/?n=Downloads
取得&展開後に iwlwifi-6050-4.ucode を /lib/firmware 以下に置くと内蔵無線LANが使えるようになる.
音関連
Conexant の ALSA driver が更新されていた.
- http://www.linuxant.com/alsa-driver/
ここから alsa-driver の deb を落してきて install するとヘッドフォン挿すと自動で mute するようになる.
...公開されているパッケージのつくりがちょっとアレ気((/usr/lib 以下に alsa-kernel を展開して, postinst でモジュールを build & install する. その上 purge しても生成されたモジュールは抜けない, という))だけれども, そこはそれ.
カスタムカーネルで append-version つけていたのだけれど, それは綺麗に無視された. uname -r つかってるのになんでかな?
残る問題
というわけで残るは液晶の輝度調整. xbacklight は使えていない. BACKLIGHT_CONTROL が効いていない模様. kms の所為かしら?
2010/06/11
_ PGI Compiler の install
Debian unstable の計算機に PGI のコンパイラを入れた時のメモ(( 多分 Ubuntu 10.04 とかでもそうなんじゃないかな, とか思ったり )).
マニュアル通りの install で基本的には良いのだけれども,makelocalrc で glibc のバージョンをチェックする所に修正が必要.
配布されている makelocalrc の get_glibc_version() では
if test $? -ne 0; then x=`strings $LIBC | grep 'GNU C Library' | cut -d, -f1 | awk '{print $7}'` else x=`strings $LIBC | grep 'GNU C Library' | cut -d, -f1 | awk '{print $8}'` fi
となっているのだけれど, そのままだと
% strings /lib64/libc.so.6 | grep 'GNU C Library' | cut -d, -f1 GNU C Library (Debian EGLIBC 2.11.1-3) stable release version 2.11.1
となる. なので
if test $? -ne 0; then x=`strings $LIBC | grep 'GNU C Library' | cut -d, -f1 | awk '{print $NF}'` else x=`strings $LIBC | grep 'GNU C Library' | cut -d, -f1 | awk '{print $NF}'` fi
と修正して
% sudo makelocalrc -x /opt/pgi/linux86-64/10.5
とすると良い.
ついでに環境変数の設定. .zshenv or .zshrc あたりに
if [ -d /opt/pgi/linux86-64 ]; then export PGI=/opt/pgi export PATH=${PGI}/linux86-64/2010/bin:${PATH} export MANPATH=${MANPATH}:${PGI}/linux86-64/2010/man export LM_LICENSE_FILE=${PGI}/license.dat MY_MPICH_PGI=${PGI}/linux86-64/2010/mpi/mpich/bin load_PGI_MPICH(){ export PATH=${MY_MPICH_PGI}:${PATH} } unload_PGI_MPICH(){ export PATH=${PATH#${MY_MPICH_PGI}:} } fi
とでも書いておくことにする.MY_MPICH_PGI なんかは PGI に同梱されている mpich の load/unload 用.
2010/06/21
_ Debian 次期バージョン squeeze での日本語 TeX 環境の現状
始めに
本日(2010-6-21)時点で Debian GNU/Linux(squeeze) で日本語 TeX 環境を構築するまでのお話.気になる所は幾つかあるけれども, まあだいたい普通に使えるようにはなっている.
install
導入は以下の通り
$ sudo -s # aptitude install ptex-bin texlive-latex-extra okumura-clsfiles \ ghostscript-x gs-cjk-resource \ cmap-adobe-japan1 cmap-adobe-japan2 \ xdvik-ja evince poppler-data \ otf-ipafont-gothic otf-ipafont-mincho
あとはお好みで, latex-beamer なり latexmk なり YaTeX なり AUCTeX なり...
main に ipafont が入ったので基本 kochi と sazanami は使わない方針でやってみたが, 特に問題無し.otf-ipafont-{mincho,gothic} パッケージでは ttf-japanese-{mincho,gothic} という仮想パッケージを提供しており, 一応日本語 TeX 関係はこれに依存するようになっている.kochi/sazanami を使用する場合は適宜 install すれば良い((ちなみに kochi/sazanami をまだ必要とするパッケージは幾つかある. なるべく ttf-japanese-{mincho,gothic} に Depends するようにしたいけれど XLFD とかでフォント設定している場合はいかんともしがたい気がする. java とか?)).
cmap を提供しているパッケージは poppler-data, cmap-adobe-* と xpdf 関連.同じ cmap ファイルを提供しているので, 例えば poppler-data の cmap を使うようにする, とかできないんだろうか.
導入後に
$ sudo jisftconfig add
と唱えることで /etc/texmf/vfontmap と /etc/texmf/dvipsj/config.ps に JIS フォントメトリック用の設定が追記される.この時点で, tex ソースファイルから dvi の生成は
$ platex hoge.tex
などで可能.
viewer 毎の設定
表示に使われるフォントの設定は fontconfig の情報を元に決まる.
xdvi-ja
xdvi-ja の表示フォントは fontconfig の serif, sans-serif によって決まっている.表示が変な場合には fc-match で表示に使われるフォントを調べてみると良い.
# 明朝系の表示に使用するフォント $ fc-match serif:lang=ja # ゴシック系の表示に使用するフォント $ fc-match sans-serif:lang=ja
ttf-tamil-fonts や ttf-devanagari-fonts がインストールされている場合, serif:lang=ja でこれらのフォントが返ってきてしまうので~/.fonts.conf で適当に設定しておく.
例えば以下の様に.
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- section default:serif, sans-serif, monospace:start --> <alias> <family>serif</family> <prefer> <family>IPAPMincho</family> </prefer> </alias> <alias> <family>sans-serif</family> <prefer> <family>IPAPGothic</family> </prefer> </alias> </fontconfig>
その後で
$ sudo update-vfontmap
とすることで /etc/texmf/vfontmap が更新される(この場合に表示に使用されるのは IPA 明朝/ゴシック).
もし fontconfig での serif/sans-serif と xdvi で表示に使用するフォントを変えたいなら, 20xdvik-ja.map の @serif@, @sansserif@ をコメントアウトして, フォントの実ファイルの path を書き込んでから update-vfontmap を走らせる.
この辺 defoma の頃より融通が効かなくなって, ちょっとどうしたモンだろう.
evince
デフォルトの設定では, 明朝/ゴシックすべて VL PGothic で表示される.これは fontconfig において Ryumin/Gothic-BBB が指定されていないから.
例えば表示に IPA 明朝/ゴシックを使いたい場合には, ~/.fonts.conf に
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="pattern"> <test qual="any" name="family"> <string>Ryumin</string> </test> <edit name="family" mode="prepend" binding="strong"> <string>IPAMincho</string> </edit> </match> <match target="pattern"> <test qual="any" name="family"> <string>Gothic-BBB</string> </test> <edit name="family" mode="prepend" binding="strong"> <string>IPAGothic</string> </edit> </match> </fontconfig>
なんて書いておくと良いだろう.
PDF への変換
どうするのが一番簡単かなぁ.
dvipdfmx(日本語フォントを埋め込まない場合)
cmap-adobe-{japan1,japan2} が導入されているか確認する.導入されていれば /usr/share/fonts/cmap に日本語の cmap がある.
$ sudo update-texmf -v
とすることで /etc/texmf/texmf.cnf が更新されるので
$ dvipdfmx hoge.dvi
によって日本語フォントを埋め込んでないPDF ファイルを作成することができる.ただし,
hoge.dvi -> hoge.pdf ** WARNING ** Failed to load AGL file "pdfglyphlist.txt"... ** WARNING ** Failed to load AGL file "glyphlist.txt"... [1][2][3] 46329 bytes written
といった警告が出る. 以前の dvipdfmx には pdfglyphlist.txt などが同梱されていたのだけれども現在このファイルは提供されていない. …まあ PDF への変換には困らないのでとりあえず放置プレイ.
ちなみに XeTeX 由来の xdvipdfmx の場合には上記警告も出ずに PDF を生成できる.しかしながら, 後述の「フォントの埋め込み」はうまくできていない.
dvipdfmx で日本語 font を埋め込む場合
まずは font が見つけられるか確認しておく.
埋め込むことができるフォントのパスは texmf.cnf の TTFONS で指定されており, TTFONTS の設定は /etc/texmf/texmf.d/75DviPS.cnf にある.
alternatives で提供している ttf-japanese-{mincho,gothic}.ttf として otf-ipafont-{mincho,gothic}.ttf を埋め込む場合には75DviPS.cnf の %OSFONTDIR に opentype を追記する.具体的には
OSFONTDIR = /usr/share/fonts/truetype//;/usr/share/fonts/opentype
としておく. また別のファイルを使用する場合には, そのフォントの実ファイルのパスを設定しておく.
設定をしたら
$ sudo update-texmf -v
で /etc/texmf/texmf.cnf を更新しておく.
次に埋め込みたいフォントを設定する. 日本語フォントを埋め込む場合, 例えば以下の内容を記載した map ファイル(以下では jisembed.map とする)を作成する.
# for jsarticle,jsbook rml-jis H :0:ipam.ttf gbm-jis H :0:ipag.ttf # standard platex classes rml H :0:ipam.ttf gbm H :0:ipag.ttf
これを dvi ファイルのあるディレクトリに置いて
$ dvipdfmx -f jisembed.map hoge.dvi
と埋め込むフォントの map を指定して PDF を作成する.常に埋め込みたい場合には /etc/texmf/dvipdfmx/dvipdfmx.cfg の中にこの map を読み込むよう設定しておく.例えば /etc/texmf/dvipdfmx/ に jisembed.map を置いて
$ sudo -s # echo "f jisembed.map" >> /etc/texmf/dvipdfmx/dvipdfmx.cfg
としておくと map の指定無しで常に IPA 明朝/ゴシックフォントが埋め込まれたPDF を作成することができる.
dvips -> ps2pdfwr (日本語フォントを埋め込む場合)
dvipdfmx と状況が説明の順が逆なので注意.
上記 dvipdfmx の設定が終わっていれば, 75DviPS.cnf で TTFONS が指定されているので
$ dvips -Ppdf -z hoge.dvi $ ps2pdfwr hoge.ps
で, フォントを埋め込んだ PDF が作成できる. 埋め込むフォントは /var/lib/ghostscript/fonts/cidfmap で設定されており,デフォルトでは alternatives で提供している ttf-japanese-{mincho,gothic} である.埋め込むフォントを変更したい場合には /etc/ghostscript/cidfmap.d/ 以下に50 番台の設定ファイルを置いておくと良いだろう.
dvips -> ps2pdfwr (日本語フォントを *埋め込まない* 場合)
ghostscript の NeverEmbed を使用すると, フォントを埋め込まない PDF を作成することができる. 例えば IPA明朝を埋め込まないならば
$ gs -dSAFER -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=%sstderr \ "-sOutputFile=hoge.pdf" -dSAFER \ -c '.setpdfwrite <</NeverEmbed [/IPAMincho ] >> setdistillerparams' \ -f hoge.ps
とか(長いよ!).
- 毎度このコマンドを打つのは嫌
- /IPAMincho で IPA 明朝は埋め込まれなくなったけれどもRyumin-Light 等に変わっている訳ではない
- IPAMincho-H というエントリが残っている
- 埋め込む場合と埋め込まない場合を使いわけたい
こういう場合に便利なのが中丸さんが公開されているreplacecjkfonts.pl.
このスクリプトは, 一度フォントを埋め込んだ PDF を作成したのち, フォント情報を Ryumin-Light/GothicBBB などに replace するスクリプトである.今の所, これを使うのが一番楽か. 希望があるなら ITP しますが, どうしましょうね.
まとめ
気になる所は次の三つ
- xdvik-ja の vfontmap 生成.
- 特に serif:lang=ja で日本語フォント以外が返ってくる場合の対処
- OSFONTDIR に ipafont のパス(/usr/share/fonts/opentype)を含めるのか否か
- cmap の統合?
かな. squeeze までにスッキリすれば良いのだけれど.
参考リンク
2010/06/25
_ git リポジトリで ChangeLog の更新忘れのために
no6v さんに感謝!! man をちゃんと読まないと駄目っす. はい. > 自分
コミット毎にチェンジログがあった方が嬉しい場合に, ChangeLog の更新を忘れない為に.
git の log から ChangeLog を生成するのは, git log の --pretty=format: で適当に format を指定して生成(もしかして template 使えるのかしら?)
git log --date=short --pretty=format:"%ad %an <%ae>%n%n%s%n%b "
そうすると ChangeLog っぽい出力が得られる. あとは本文先頭に \t を追加すれば良いので Makefile あたりに
git2cl: @git log --date=short --pretty=format:"%ad %an <%ae>%n%n%s%n%b" | \ sed -e 's/^\(.*\)$$/\t\1/g' | \ sed -e 's/^\t\([0-9]*-[0-9]*-[0-9]*.*\)$$/\1/g' | \ sed -e 's/^\t$$//g' \ > ChangeLog
とでもすれば, git の log からそれっぽい ChangeLog が得られる.
ただ, これだと自動でコミットできないので
git2cl: @git log --date=short --pretty=format:"%ad %an <%ae>%n%n%s%n%b" | \ sed -e 's/^\(.*\)$$/\t\1/g' | \ sed -e 's/^\t\([0-9]*-[0-9]*-[0-9]*.*\)$$/\1/g' | \ sed -e 's/^\t$$//g' \ > ChangeLog [ ! `git diff --check --exit-code ChangeLog` ] || git commit --amend -C HEAD
でもしておいて. post-commit で make git2cl するようにしておくと, commit の度にChangeLog は更新される.
release tag 毎に ChangeLog 更新する場合はどうしたら良いかな...
(追記) むしろ ChangeLog 更新は post-commit にまとめたら良いんじゃね? という天(?)の声が...そうかもしんない.
(追記その2) post-commit で呼ぶのはあんまり良くない?. どうしよ...