February 24, 2007
[TeX関連] Beamer + iniptex の怪
Beamer というプレゼンテーション用文書を作成するためのスタイルファイルを使ってプレゼン資料を書いてみようと思い,Vim を使いつつ Whizzytex のようにプレビューしながら表示するためのシェルスクリプトを書くことにしました.
prosper と Powerdot スタイルに対応したスクリプトは既にありますが (これらはまだ配布していません),Beamer に対してはそのままでは使えないようです.
調べてみると,iniptex で取得したフォーマットを使ってタイプセットした結果の DVI ファイルが正しくない様子です.調べるための実験に用意した LaTeX ソースは以下の通り.ここではこのファイルを仮に test.tex とします.
\documentclass{beamer}
\begin{document}
\begin{frame}
\frametitle{hoge}
text
\begin{itemize}
\item 1
\item 2
\item 3
\begin{itemize}
\item 3-1
\item 3-2
\item 3-3
\end{itemize}
\end{itemize}
\end{frame}
\end{document}
これを platex を用いて普通にタイプセットすると DVI ファイルが生成されます.
% platex test.tex This is pTeX, Version 3.14159-p3.1.5 (euc) (Web2C 7.4.5) (./test.tex pLaTeX2e <2005/01/04>+0 (based on LaTeX2e <2001/06/01> patch level 0) (/usr/share/texmf/tex/latex/beamer/base/beamer.cls (/usr/share/texmf/tex/latex/beamer/base/beamerbasercs.sty) Document Class: beamer 2004/10/07 release version 3.00 A class for typesetting presentations (rcs-revision 1.54) (中略) LaTeX Font Warning: Font shape `OT1/cmss/m/n' in size <4> not available (Font) size <5> substituted on input line 37. [1] (./test.aux) LaTeX Font Warning: Size substitutions with differences (Font) up to 1.0pt have occurred. ) Output written on test.dvi (1 page, 9180 bytes). Transcript written on test.log. %
次に,iniptex を使ってフォーマットを行い,そこで得たフォーマットを使ってタイプセットします.ここでは,この一連の処理を「2 段階タイプセット」と呼ぶことにします.では,まず最初にフォーマットを行います.フォーマットを行うためには,元のソースからプリアンブルだけを抜き出し,最後に \dump コマンドの呼び出しを書いたソースを initex で処理するだけです.変更したソースファイルは以下の通り.実にシンプルです.ここではこのファイルを test2.tex とします.
\documentclass{beamer}
\dump
これを iniptex で処理します.以下の例では iniptex の代わりに platex -ini を使用しています.
% platex -ini '&platex' test2.tex This is pTeX, Version 3.14159-p3.1.5 (euc) (Web2C 7.4.5) (INITEX) (./test2.tex pLaTeX2e <2005/01/04>+0 (based on LaTeX2e <2001/06/01> patch level 0) (/usr/share/texmf/tex/latex/beamer/base/beamer.cls (/usr/share/texmf/tex/latex/beamer/base/beamerbasercs.sty) Document Class: beamer 2004/10/07 release version 3.00 A class for typesetting presentations (rcs-revision 1.54) (中略) Beginning to dump on file test2.fmt (format=test2 2007.2.24) 10634 strings of total length 163209 182871 memory locations dumped; current usage is 332&178411 9232 multiletter control sequences (中略) No pages of output. Transcript written on test2.log. %
フォーマットが終わったので,得られたフォーマットファイルを使って本文だけのソース(test3.tex, 中身は省略)をタイプセットします.
% platex '&test3' test3.tex This is pTeX, Version 3.14159-p3.1.5 (euc) (Web2C 7.4.5) (./test3.tex pLaTeX2e <2005/01/04>+0 (based on LaTeX2e <2001/06/01> patch level 0) No file test3.aux. (/usr/share/texmf/tex/latex/hyperref/nameref.sty) No file test3.nav. (/usr/share/texmf/tex/latex/amsfonts/umsa.fd) (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) LaTeX Font Warning: Font shape `OT1/cmss/m/n' in size <4> not available (Font) size <5> substituted on input line 32. [1] (./test3.aux) LaTeX Font Warning: Size substitutions with differences (Font) up to 1.0pt have occurred. ) Output written on test3.dvi (1 page, 4112 bytes). Transcript written on test3.log. %
続いて,得られたそれぞれの DVI ファイルを dvips(k) を使って PostScript に変換し,ESP GhostScript 7.07 でレンダリングしてみます.その結果,2 段階でタイプセットした方はレンダリングに失敗します.
% dvips test.dvi This is dvips(k) 5.92b p1.6a Copyright 2004 ASCII Corp.(www-ptex@ascii.co.jp) based on dvips(k) 5.92b Copyright 2002 Radical Eye Software (www.radicaleye.com) ' TeX output 2007.02.24:1837' -> test.ps <texc.pro><special.pro><color.pro>. [1] % gs -sDEVICE=x11 -dSAFER -dBATCH -dNOPAUSE -q test.ps ←正常に表示 % dvips test3.dvi This is dvips(k) 5.92b p1.6a Copyright 2004 ASCII Corp.(www-ptex@ascii.co.jp) based on dvips(k) 5.92b Copyright 2002 Radical Eye Software (www.radicaleye.com) ' TeX output 2007.02.24:1856' -> test3.ps <texc.pro><special.pro><color.pro>. [1] % gs -sDEVICE=x11 -dSAFER -dBATCH -dNOPAUSE -q test3.ps Error: /undefined in pgfo ←エラー Operand stack: Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1 3 %oparray_pop 1 3 %oparray_pop 1 3 %oparray_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- Dictionary stack: --dict:1050/1417(ro)(G)-- --dict:0/20(G)-- --dict:69/200(L)-- --dict:195/300(L)-- Current allocation mode is local Current file position is 17348 ESP Ghostscript 7.07.1: Unrecoverable error, exit code 1
最初にこのエラーに遭遇したときは,なんでやねん,と思わずツッコんでしまいました.2 段階タイプセットしても同じ DVI ファイルが得られると思っていたからです.
両方の PostScript ファイルを見比べると,確かに 2 段階タイプセットした方には pgfo の定義がありません.いずれの場合でも,prosper や Powerdot を用いた場合は PostScript ファイルに pgfo の定義が含まれていないので,Beamer 固有の問題と考えているわけですが,これはどうやって解決すればよいのか...
考えている解決策は次の 2 通り.
- Beamer 使用時は 2 段階タイプセットを行わない.
- 2 段階タイプセットを行った上で,pgfo およびその他の必要な定義をシェルスクリプト側で自動的に PostScript ファイルに書き加える.
上の 2 つはどちらもかなり安直ですから,今はもう少し pgfo について調べてみることにします.
February 17, 2007
[雑記] ゆるゆる
昨日,ものは試し,ということで「らき☆すた」を購入.奥付けを見るとかなり昔に出ていたようで... 本屋でラノベコーナー以外に立ち寄らないことが仇となりました.
1 冊読み終え,ゆるゆるな気分を満喫できたので... 今日,残りの 2 冊を購入.
ところで,昨日本屋に立ち寄ったついでに「でじぱら」を購入.これも古い...
こちらは AV (オーディオ・ビジュアル) に関する勉強にもってこい(?)の本です(多分).扉絵でのサービス精神が旺盛で,開封前はオビで見えなかった部分にもサービスカットがあります.
感動したのが,まれは(登場人物の 1 人.ツンデレ)のセリフ.メイド姿で値段でモノを選ぶべからず! ただし! 決めたら 1 円でも安くっ! これが買い物の基本よっ!
と力説してくれます.これから買い物するときは値切ってみようかな...
February 12, 2007
[雑記] ユーザーズマニュアル
今回はただのぼやきです.情報量は 0 です.ご注意ください.
さて,今,自分自身が大学の研究のために作ったプログラムを後で見た人が動かせるようにするべく,ユーザーズマニュアルを書いていますが,これがまた面倒です.
リファレンスマニュアルなら Doxygen が自動生成してくれますが,ユーザーズマニュアルとなると... やはり手で書くしかないわけです.
コンパイルやインストール方法などは Autotools (Autoconf/Automake/Libtool) を使ってるので,お決まりの 3 行:
% ./configure % make % make install
で済むので割と楽(実際には ./configure に渡すオプションの説明も書きます)ですが.
ソースコードからユーザーズマニュアルを自動的に生成するソフトがいつの日か出ることを期待しつつ,その日が来るまでひたすら手でマニュアルを書くことにします.
February 11, 2007
[Linux] Wine + dmix
February 10, 2007
[Linux] dmix 復旧
dmix が使えなくなっていた原因が判明し,解決しました.
どうやら,各種オーディオソフトウェアの出力先を plug:dmix と設定していたのが原因のようです.実は私,~/.asoundrc に次のように書いていました.
pcm.output { type dmix ipc_key 1024 ipc_perm 0600 (中略) }
つまり,本来は出力先を plug:output と設定していないとダメなはずなんですが,何故か今まで再生できていました.
自分の設定ミスが原因と判明したので,まずは Amarok の出力先を以下の通り変更.
続いて,~/.mplayer/config も以下の通り変更して無事解決.
ao = alsa:device=plug=output
February 9, 2007
[雑記] Choose and Select
英語で「選択する」という動詞は Choose と Select があります.両者に何らかの違いがあるかどうかを調べてみたところ,Choose and Select - Qoo Memo の文書中で徳島大学の卒研の概要が紹介されていました.
chooseは2つ以上の選択肢から何かを選ぶときに用いられるが、このときその選択肢は様々な種類のものから構成され、選び手には柔軟性が与えられる。chooseは形式的な状況とそうでない状況との両方に用いられる。仮定法で用いられることが多いこともchooseの特徴であり、これは chooseを使った構文においては、話者の選び手に対する心的態度が現れやすいことを指し、chooseが主観性を持つことを表している。次に、 selectは3つ以上の選択肢から何かを選ぶときに用いられ、形式的な状況で好まれる。また、selectはchooseよりも選び手に慎重さが求められ、選ばれたものが正しく、また適切なものであることが前提となる。
全てを覚えて使い分けることもできないので,私の場合,選択の幅に柔軟性があるかないかによって両者を使い分けるところから始めてみます.とはいっても,今のところ工学に関して英語を使うだけなので,大抵は select になりそうな気もします.
February 6, 2007
[TeX関連] コマンドあるいはマクロが定義されているかを判別する LaTeX マクロ
あるコマンドを \renewcommand しようとして,既に定義されていれば \renewcommand, 未定義なら \newcommand を使うようにしたかったので調べると,\@ifundefined マクロがありました.使用例は以下の通り.この例では,jsarticle や jsbook で定義されている \figurename, \tablename, \appendixname の内容を変更しています.\@ifundefined がアットマークを含むので,これらをプリアンブルに書く場合は \makeatletter, \makeatother で囲む必要があります.
\@ifundefined{figurename}{\newcommand{\figurename}{図}}{\renewcommand{\figurename}{図}} \@ifundefined{tablename}{\newcommand{\tablename}{表}}{\renewcommand{\tablename}{表}} \@ifundefined{appendixname}{\newcommand{\appendixname}{付録}}{\renewcommand{\appendixname}{付録}}
[TeX関連] スタイルもしくはパッケージがロードされているかを判別する LaTeX マクロ
例えば,jsarticle がロードされているかどうかを判別する \ifjsarticle を作るには,こんな感じ.
\newif\ifjsarticle \@ifclassloaded{jsarticle}{\jsarticletrue}{\jsarticlefalse}
上の例はドキュメントクラスの場合ですが,パッケージの場合にも可能で,その場合は以下の通り.
\newif\ifgraphicx \@ifpackageloaded{graphicx}{\graphicxtrue}{\graphicxfalse}
アットマークを含むコマンド(\@ifpackageloaded)を使用しているので,プリアンブルに書く場合は \makeatletter, \makeatother で囲んでください.
February 5, 2007
[Gentoo] dmix が使えなくなっていた
ALSA の dmix を今まで使用していたのですが,ある日,Amarok で再生しながら aoss+Firefox+Flash Player の音が鳴らなくなっていました.
ALSA 関連で関係のあるパッケージの変更といえば... カーネルを 2.6.18-gentoo-r4 から 2.6.19-ck2 にしたときくらいでしょうか.
試しに Amarok で再生したまま aplay を実行してみると以下のエラーメッセージが出ました.
$ aplay /usr/share/sounds/alsa/Front_Center.wav ALSA lib pcm_dmix.c:864:(snd_pcm_dmix_open) unable to open slave aplay: main:545: audio open error: デバイスもしくはリソースがビジー状態です $
pcm_dmix.c の中でエラーが発生しているということは,dmix を使おうとはしているようですが... もちろん Amarok を停止すると aplay でちゃんと音が鳴ります.
カーネルのバージョンを戻すことなく解決しようと,只今原因究明中です...
(2007 年 2 月 11 日追記) 解決しました.再生ソフトウェアのオーディオ出力先の設定ミスが原因でした.
February 4, 2007
[Gentoo] あれ? missing keyword?
いつものように Gentoo Linux のアップデート確認をしようとした時のことです.
$ sudo layman -S (中略) $ sudo emerge -puD --newuse world These are the packages that would be merged, in order: Calculating world dependencies \ !!! Ebuilds for the following packages are either all !!! masked or don't exist: x11-misc/beryl-settings x11-plugins/beryl-dbus x11-wm/beryl x11-wm/beryl-core x11-wm/aquamarine x11-misc/beryl-manager x11-plugins/beryl-plugins ... done! $
あれ? と思って詳細なエラーを出力してみると以下の通り.
$ sudo emerge =beryl-9999 Calculating dependencies !!! All ebuilds that could satisfy "=beryl-9999" have been masked. !!! One of the following masked packages is required to complete your request: - x11-wm/beryl-9999 (masked by: missing keyword) For more information, see MASKED PACKAGES section in the emerge man page or refer to the Gentoo Handbook. $
ん? キーワードは指定しているはずなのに... と思いつつ一応確認 (以下の結果は関係のあるパッケージの部分だけを抜粋しています).
$ cat /etc/portage/package.keywords =x11-wm/beryl-9999 -* =x11-wm/beryl-core-9999 -* =x11-plugins/beryl-plugins-9999 -* =x11-plugins/beryl-dbus-9999 -* =x11-misc/beryl-manager-9999 -* =x11-misc/beryl-settings-9999 -* =x11-wm/aquamarine-9999 -* $
ちゃんと指定してあります.ダメもとでキーワードを * や ~* に変えてもやはりダメ.
Google 先生に尋ねると,即刻答えが得られました.どうやら新しい portage を入れて,/etc/portage/package.keywords のキーワードを ** に書き換えてくださいとのこと.
SVN ebuilds require Portage 2.1.2-r4 or higher (currently in ~arch) and the xeffects overlay.
では早速 portage を upgrade... あれ? portage-2.1.2 はあれども portage-2.1.2-r4 がない...
ここら辺で嫌な予感がしてきたので,emerge --sync を実行.そして流れる実行ログの多さ(=emerge --sync のログの量は,この先起こるであろうアップデート地獄の凄まじさにたぶん比例)に打ちひしがれる自分.
$ sudo emerge --sync (大量のログ.中略) Number of files transferred: 16935 Total file size: 159136632 bytes Total transferred file size: 39119138 bytes (中略) sent 404067 bytes received 18849475 bytes 41992.46 bytes/sec total size is 159136632 speedup is 8.27 $
なぜだー なぜパッケージ情報の同期が行われていなかったんだー.と,日々の同期を行うために用意した crontab をチェック.
0 6 * * * root /usr/bin/layman -S > /dev/null 2>&1 30 6 * * * root /usr/sbin/eix-sync > /dev/null 2>&1
ほっ... ちゃんと eix-sync が実行されるようになってるじゃないか... と思いつつ恐いので which eix-sync を実行.
$ which eix-sync /usr/bin/eix-sync $
「場所(ディレクトリ)が変わってる!」 標準エラー出力を捨てていたため command not found エラーに気づきませんでした.なんということでしょう(加藤みどりさん風に).
気を取り直して portage-2.1.2-r5 をインストールした後,emerge -puD --newuse world を実行.途中,masked package のエラーが発生する度に /etc/portage/package.keywords を修正していきます.そして最後の修正が完了したときの実行結果は... やはり大量のアップグレード候補が出力されました.とはいっても半分(85 個中 46 個)は自分で ~x86 指定をした KDE 関連のパッケージですが.残りの 39 個は標準エラー出力を捨てた代償というわけです.
教訓: 「cron による実行のログはどこかに残して,定期的に確認しましょう.」
[雑記] キリのいい値
私の所属研究室の学生は大抵がコンピュータ屋になろうとしているわけですが,以前,その研究室仲間たちと話をしていると... 65536 (0x10000) がキリのいい数字かどうか? なんて話が出てきました.
私はこれがキリのいい数字だと思う(思ってしまう?)人間なのですが,今ふと頭の中に出てきた数値 4294967296 (0x100000000) はキリのいい数字に見えません.見慣れてないとダメ,ということかも知れません.2 の乗数は高専時代に結構見てましたし...
おそらく,私がキリがいいなと思う最大の値は 1048576 (0x100000) です.
February 3, 2007
[雑記] クリームシチュー
使わないとシチューの素だけが余って仕方ないので,今日の昼飯はクリームシチューです.
色があまり白くないのはいいとして,丼に盛っているところが実に悲しい.もっとちゃんとした皿を買わないと...