Acetaminophen’s diary

化学に関すること,TeXに関すること,ゆきだるまに関すること。

ptexenc のアレ?を試してみる

この記事は、サブブログの 2016-02-17 投稿記事を移転してきたものです。

あべのりさんのを実験。ここでは e-pTeX ではなく pTeX を使ってみた。

file-0.tex

\newcount\filenum
\filenum0
(\the\filenum)
\advance\filenum1

\input file-\the\filenum.tex
\bye

file-1.tex

(\the\filenum)
\advance\filenum1

\input file-\the\filenum.tex
\bye

file-50.tex

(\the\filenum)
\advance\filenum1

\bye

copyfiles.sh

#/bin/sh
for i in {2..49}
do
  cp file-1.tex file-$i.tex
done

そして ./copyfiles.sh を実行して file-1.tex を file-2.tex から file-49.tex としてコピーを作成。これで、file-0.texコンパイルすると file-1.tex から file-50.tex までが読み込まれる。期待される結果は「(0) から (50) までの数字が DVI に並ぶ」。

W32TeX [2012/11/04]

> set max_in_open=99
> ptex file-0
This is pTeX, Version 3.1415926-p3.3 (sjis) (TeX Live 2012/W32TeX)
 restricted \write18 enabled.
(./file-0.tex (./file-1.tex (./file-2.tex (./file-3.tex (./file-4.tex
(./file-5.tex (./file-6.tex (./file-7.tex (./file-8.tex (./file-9.tex
(./file-10.tex (./file-11.tex (./file-12.tex (./file-13.tex (./file-14.tex
(./file-15.tex (./file-16.tex (./file-17.tex (./file-18.tex (./file-19.tex
(./file-20.tex (./file-21.tex (./file-22.tex (./file-23.tex (./file-24.tex
(./file-25.tex (./file-26.tex
! TeX capacity exceeded, sorry [main memory size=3000000].
l.374194 ^^@^^@^^@(\the\filenum)
                                
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.

No pages of output.

27個目のファイルを読もうとして main memory size を超過。よくみると…えっ、l.374194? そんなに行はないはずなのだが…

W32TeX [2014/11/08]

> set max_in_open=99
> ptex file-0
This is pTeX, Version 3.14159265-p3.5 (sjis) (TeX Live 2014/W32TeX)
 restricted \write18 enabled.
(./file-0.tex (./file-1.tex (./file-2.tex (./file-3.tex (./file-4.tex
(./file-5.tex (./file-6.tex (./file-7.tex (./file-8.tex (./file-9.tex
(./file-10.tex (./file-11.tex (./file-12.tex (./file-13.tex (./file-14.tex
(./file-15.tex (./file-16.tex (./file-17.tex (./file-18.tex (./file-19.tex
(./file-20.tex

固まった。Ctrl + C でも止まらず、タスクマネージャで kill した。

TeX Live 2012 (Cygwin)

$ export max_in_open=99
$ ptex file-0
This is pTeX, Version 3.1415926-p3.3 (utf8.euc) (TeX Live 2012)
 restricted \write18 enabled.
(./file-0.tex (./file-1.tex (./file-2.tex (./file-3.tex (./file-4.tex
(./file-5.tex (./file-6.tex (./file-7.tex (./file-8.tex (./file-9.tex
(./file-10.tex (./file-11.tex (./file-12.tex (./file-13.tex (./file-14.tex
(./file-15.tex (./file-16.tex (./file-17.tex (./file-18.tex (./file-19.tex
(./file-20.tex (./file-21.tex (./file-22.tex (./file-23.tex (./file-24.tex
(./file-25.tex (./file-26.tex (./file-27.tex (./file-28.tex (./file-29.tex
(./file-30.tex (./file-31.tex (./file-32.tex (./file-33.tex (./file-34.tex
(./file-35.tex (./file-36.tex (./file-37.tex (./file-38.tex (./file-39.tex
(./file-40.tex (./file-41.tex (./file-42.tex (./file-43.tex (./file-44.tex
(./file-45.tex (./file-46.tex (./file-47.tex (./file-48.tex (./file-49.tex
(./file-50.tex [1] ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
Output written on file-0.dvi (1 page, 756 bytes).
Transcript written on file-0.log.

正常終了。出力も期待どおり。

TeX Live 2015 (OS X)

$ export max_in_open=99
$ ptex file-0
This is pTeX, Version 3.14159265-p3.6 (utf8.euc) (TeX Live 2015)
 restricted \write18 enabled.
(./file-0.tex (./file-1.tex (./file-2.tex (./file-3.tex (./file-4.tex
(./file-5.tex (./file-6.tex (./file-7.tex (./file-8.tex (./file-9.tex
(./file-10.tex (./file-11.tex (./file-12.tex (./file-13.tex (./file-14.tex
(./file-15.tex (./file-16.tex (./file-17.tex (./file-18.tex (./file-19.tex
(./file-20.tex (./file-21.tex (./file-22.tex (./file-23.tex (./file-24.tex
(./file-25.tex (./file-26.tex (./file-27.tex (./file-28.tex (./file-29.tex
(./file-30.tex (./file-31.tex (./file-32.tex (./file-33.tex (./file-34.tex
(./file-35.tex (./file-36.tex (./file-37.tex (./file-38.tex (./file-39.tex
(./file-40.tex (./file-41.tex (./file-42.tex (./file-43.tex (./file-44.tex
(./file-45.tex (./file-46.tex (./file-47.tex (./file-48.tex (./file-49.tex
(./file-50.tex [1] ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
Output written on file-0.dvi (1 page, 756 bytes).
Transcript written on file-0.log.

正常終了。出力も期待どおり。

あべのりさんのところで「(20)の前と最後にΛがふたつ並んでいる」というのは Computer Modern でいくと End Of Text (^C) の制御コードにあたる。MinGW でビルドしたもので起きたそうなので、ビルドしてみるか…

追記 (2016-03-01):TeX Live r39901 でとりあえず OPEN_MAX = 132 に設定する応急処置が入ったので、この問題は(見かけ上?)起こらなくなった。

TeX でゆきだるまを“もっともっと”たくさん

これは TeX & LaTeX Advent Calendar 2015 の13日目の記事です。昨日は MNukazawa さんでした。明日は kuroky_plus さんです。

TeXLaTeX Advent Calendar 2015 もちょうど折り返し地点です。今年のテーマは「今さら人に聞けない、TeXのキホン」というわけで、今日は「“TeX でゆきだるま”のキホン」です。

次のような文を書きたいとします:

私の名前は「黒☃大輔」です。

たとえば、upLaTeX を使うと次のようになるでしょう(pLaTeX の場合は☃の代わりに otf パッケージを使って \ajSnowman とするとよいでしょう):

% upLaTeX 文書
\documentclass[dvipdfmx,uplatex]{jsarticle}
\begin{document}
私の名前は「黒☃大輔」です。
\end{document}

簡単ですね…と思いきや、ここで気になることがあります。

たとえば「IPA明朝」埋め込みで PDF 化すると次のようになります:

f:id:acetaminophen:20151212235316p:plain

しかし、「小塚明朝」や「ヒラギノ明朝」の場合はそれぞれ以下のようになります:

f:id:acetaminophen:20151212235342p:plain

f:id:acetaminophen:20151212235358p:plain

これを「IPA明朝」の場合と比較すると、小塚明朝は帽子がなくなってマフラーを付けていますし、ヒラギノ明朝は雪がなくなってしまいます。これはいわば「大輔」が「太輔」や「犬輔」や「人輔」になってしまったようなもので、一大事です。JIS90 から JIS2004 に変わったときに「フォントのバージョンによって“しんにょう”の点のかずが違う!」と辻さんや渡邊さんは困惑したでしょう。それと同じかさらに深刻な問題に、黒☃さんは常に直面しているわけです*1

ゆきだるまのキホン:フォントによって違うゆきだるまたち(復習)

このような問題が起きるのは、フォントによってゆきだるまの字形が全く異なることが原因です。しかも、歴史的経緯によって事態はより複雑になっています:

  • 初期の Unicode には「ゆきだるま」は "U+2603 SNOWMAN" 一点だった。
  • Unicode 5.2 で日本の ARIB 外字が追加されたことにより "U+26C4 SNOWMAN WITHOUT SNOW" と "U+26C7 BLACK SNOWMAN" が登場。

この時点で、従来のコードポイント "U+2603 SNOWMAN" は突然暗黙に「雪あり白ゆきだるま」になってしまいました*2。結果的に、それ以前にデザインされたフォントの中には、U+2603 に「雪なしゆきだるま」のグリフを割り当てたものが一定数存在します。

これほどの「字形の多様性」があるのは Unicode の膨大な文字のなかでも☃が群を抜いており、これだけで一記事書けるほど興味深いものです。このあたりの事情について良く知らないという読者の方は、以下の記事(調査レポートと参考文献含む)をご一読ください:

しかし、情報を伝えるにあたって「フォントによってマフラーの有無が異なる」というのは不都合でしょう。また逆に、ゆきだるまが Unicode にたった3人しかいないのは不満だという意見もあるでしょう。(ちなみに私は「ゆきだるまが足りない」派で、Unicode に「追加ゆきだるま面 (Additional Snowman Plane)」くらいあってもよいと思っています☃)

この両者の不満を解消すべく、画期的なパッケージを開発しました。

 

*1:えっ、☃なんて人名に使えない? それは心の中でのツッコミにとどめてこの記事を楽しんでください☃⛄⛇

*2:最初に Unicode 1.0 が策定されたときの "U+2603 SNOWMAN" の例示グリフは、モリサワリュウミンIPA明朝とほぼ同じ)でした。そのグリフデザインを踏襲したのでしょう。

続きを読む

MOPAC で分子のアニメーションを作成して JSmol で観察する

こちらのメインブログが最近淋しいことになっていたので、サブブログで少しだけ触れた話題をもう少し深めて書いておこうと思い立った*1

久々に JavaScript と化学の話題。今回は真面目にコンピュータ化学を駆使して量子化学計算を行い、振動アニメーションを作成するところから SNS で JSmol によるインタラクティブな 3D モデルをシェアする(というかシェアできる状態にする)ところまで持っていく。

f:id:acetaminophen:20151201012411g:plain

 

*1:といっても数日前に書いてはいたのだが、なんだかすぐに公開すると面白くないかなと思って寝かせていたもの。

続きを読む

“回答を得やすい質問” と “良い報告” のコツ — ソフトウェア開発を例に

私は最近「日本語 TeX 開発コミュニティ」などのメーリングリストに参加していますので、ここでは LaTeX を例に説明しますが、これはいかなる技術系コミュニティにも当てはまることだと思います。私なりの「技術系コミュニティへの貢献・レポートのコツ」として、ここにまとめることにします。あくまで “理想論” といってしまえばそれまでですが、一部は参考になるかもしれません。

タイトルに「“回答を得やすい質問” と “良い報告” のコツ」と書きました。この2つのポイントはほぼ同じです。みなさんも、学校の授業で質問する場合にまず「自分がどこまでわかっているかを理解し、それを人に伝える」ところから始めると良い回答が得られたという経験があると思います。それと同じことで、ソフトウェアを使っていて疑問に思ったこと・期待どおりにならなかったことを他人に質問する場合にも同じような心がけが必要です。良い質問をするコツは良い報告をするコツと多くを共有していますので、ここでは私の経験をもとに “私が考える良い報告とは” を考えていきます。

LaTeX などのソフトウェアを使っていると、ときどき「これは意図した動作なのだろうか?」「ここがもしこうだったらよいのに」「こういう場合にも対応してほしい」のように思うコトがあります。そのような場合に、「これはそういうものだからしょうがない」として泣き寝入りするのも一つの手ですが、これを上流(=開発者)に報告したいと思うことがあります。

報告するメリットはいうまでもありません:

  • 新しい機能が追加される
  • 嬉しくない挙動が改善される

このようなことは、良いレポートがあって初めて成立します。「良いソフトウェアを使わせていただいているのだから、できる範囲で自分も開発に貢献する」、それが特にオープンソースのソフトウェアを利用する上でのマナーといっても過言ではないと私は考えています。

では、良いレポートとは何でしょうか? それは、「開発者に具体的に再現してもらえるように、状況を詳しく説明する」ことから始まります。まずはレポートする前になにを考えるべきか5つの観点からみていき、それに続いて実際にレポートするにあたっての注意点を述べてみます。これはあくまで私の経験にすぎませんが、だいたいの場合成功していると思います。

 

続きを読む