MOPAC で分子のアニメーションを作成して JSmol で観察する
“回答を得やすい質問” と “良い報告” のコツ — ソフトウェア開発を例に
私は最近「日本語 TeX 開発コミュニティ」などのメーリングリストに参加していますので、ここでは LaTeX を例に説明しますが、これはいかなる技術系コミュニティにも当てはまることだと思います。私なりの「技術系コミュニティへの貢献・レポートのコツ」として、ここにまとめることにします。あくまで “理想論” といってしまえばそれまでですが、一部は参考になるかもしれません。
タイトルに「“回答を得やすい質問” と “良い報告” のコツ」と書きました。この2つのポイントはほぼ同じです。みなさんも、学校の授業で質問する場合にまず「自分がどこまでわかっているかを理解し、それを人に伝える」ところから始めると良い回答が得られたという経験があると思います。それと同じことで、ソフトウェアを使っていて疑問に思ったこと・期待どおりにならなかったことを他人に質問する場合にも同じような心がけが必要です。良い質問をするコツは良い報告をするコツと多くを共有していますので、ここでは私の経験をもとに “私が考える良い報告とは” を考えていきます。
LaTeX などのソフトウェアを使っていると、ときどき「これは意図した動作なのだろうか?」「ここがもしこうだったらよいのに」「こういう場合にも対応してほしい」のように思うコトがあります。そのような場合に、「これはそういうものだからしょうがない」として泣き寝入りするのも一つの手ですが、これを上流(=開発者)に報告したいと思うことがあります。
報告するメリットはいうまでもありません:
- 新しい機能が追加される
- 嬉しくない挙動が改善される
このようなことは、良いレポートがあって初めて成立します。「良いソフトウェアを使わせていただいているのだから、できる範囲で自分も開発に貢献する」、それが特にオープンソースのソフトウェアを利用する上でのマナーといっても過言ではないと私は考えています。
では、良いレポートとは何でしょうか? それは、「開発者に具体的に再現してもらえるように、状況を詳しく説明する」ことから始まります。まずはレポートする前になにを考えるべきか5つの観点からみていき、それに続いて実際にレポートするにあたっての注意点を述べてみます。これはあくまで私の経験にすぎませんが、だいたいの場合成功していると思います。
続きを読む
LaTeX で PDF の一部だけ表示したい(3)
TeX Live 2015 時点での「PDF の BoundingBox」まとめ
第1回・第2回の更新から実に3か月が空いてしまいました… ほかの作業*1に追われておりました。この長いブランク(というより、第1回・第2回の記事を公開した直後の一週間以内)に、この PDF の BoundingBox 問題に大きな進展がありました。このことについて説明する前に、改めて TeX Live 2015 時点での BoundingBox の扱いについてまとめると以下のようになります:
- pdfLaTeX:デフォルトは CropBox である。pagebox オプションを使えば好きな Box を選択できる。これらを bb= で上書きすることはできないが、これは間違いを起こさないという点で安全で、最も理想的な状態。
- LuaLaTeX:デフォルトは CropBox である。現時点では pagebox オプションを使えず、bb= で上書きすることもできないので「常に CropBox である」。pagebox オプションさえ使えるようになれば理想的(つまり pdftex.def の改修が必要)。
- XeLaTeX:デフォルトは CropBox である。現時点では pagebox オプションを使えないが、bb= で上書きすることは可能。pagebox オプションさえ使えるようになれば理想的*2。
- dvipdfmx:「CropBox → ArtBox → TrimBox → BleedBox → MediaBox の順で明示されている最初のもの」を使う。pagebox オプションは使えないが、bb= で上書きすることは可能。これは改善の余地が相当あるといってよい。
- いずれにおいても、viewport= オプション単独指定の場合は「自動取得された正しい BoundingBox 値と、そこからの相対座標」によって期待どおりの出力が得られる。
のようになります。見てのとおり、dvipdfmx はかなり深刻です。bb= で上書きできることは諸刃の剣で、良く知っているユーザなら自分で好きな ナントカBox を指定するインタフェースになりうるのですが、そうでない場合はマチガッタ使い方の温床になります。実際、bb= をまるで viewport= かのように使った失敗例は数多く、それに ZR さんが警鐘を鳴らしてきたわけです。
続きを読むLaTeX で PDF の一部だけ表示したい(2)
実際に TeX が使う BoundingBox はどれなのか(続き)
昨日の記事で PDF における正解の BoundingBox とは何かを、ドライバ別に考えていた途中からです。XeLaTeX (+ xdvipdfmx) の場合に「XeLaTeX は CropBox を確保するのに xdvipdfmx が描画するのは後述する “dvipdfmx が選ぶのと同じ ナントカBox の内側” だけである」という奇妙な挙動が判明しました。というわけで、ここで一旦 dvipdfmx を調べてみましょう。
4. dvipdfmx の場合の BoundingBox(正常な PDF の場合)
これが非常に問題なのです。正解は「extractbb というプログラムが返すもの」です。では extractbb が返す BoundingBox とは何かというと
CropBox → ArtBox → TrimBox → BleedBox → MediaBox の順で明示されている最初のもの
です。明示されているが曲者で、そのせいでこんなヤヤコシイ選択律の順序ができてしまっています。明示されていなければその Box は読まないという点で、通常の PDF の仕様と食い違っているわけです。実際にいくつかの PDF を取り込んで pLaTeX + dvipdfmx で処理すると、上記の extractbb の規則と一致する Box が選ばれていることを確認できます。
- BB-a-04-dvipdfmx-TL2015.pdf の全ページより
LaTeX で PDF の一部だけ表示したい(1)
ただいま改訂中です。ところどころ作業に伴いリンク切れや説明不足が生じていますが、ご了承ください…(2015-08-15)
LaTeX で graphicx パッケージを使っていて
余白がある PDF ファイルの一部だけ、余白を切り取って表示したい
と思ったことはないでしょうか。例えば、Excel でグラフを作成して PDF 形式で保存するとデフォルトでは A4 サイズの PDF が生成し、もれなく余白が付いてきます。このような Excel グラフを作成して \includegraphics したいと思っても「そのままでは余白が大きくて不満」という質問は、最近も TeX Forum に寄せられています。
こうした場合は、(上記サイトでの私の回答にもありますが)pdfcrop という TeX Live や W32TeX の付属ツール*1を使って予めトリミングするのが非常に簡単です。ただし、pdfcrop は Perl がインストールされていなければなりません。TeX Live (Windows) には Perl が内蔵されていますし、Unix 系 OS ならば Perl が標準で使えるはずですが、W32TeX ユーザの方は pdfcrop がそのままでは使えません。そこで
- 私のブログを参考に Perl をインストールする
- Windows バッチファイルで似たことが可能な bcpdfcrop.bat(旧:tcpdfcrop.bat)を使う
のいずれかを試してみてください。そのうえで
$ pdfcrop graph.pdf
あるいは
$ tcpdfcrop graph.pdf
のように実行すれば、きっとうまい具合にまっさらな余白を切り取った新しい PDF (graph-crop.pdf) が出てくるでしょう。
…とまあ、これがベストプラクティスであることは間違いありません。pdfcrop(または tcpdfcrop)が出力した PDF を \includegraphics
すれば、バグがない限りどんな場合でも必ずうまくいきます。しかし、中には
pdfcrop せずに直接 LaTeX 側でなんとかならないの?
と思う方もいるでしょう。今回の記事では、その方法を考察することにします。
*1:紛らわしいことに pdfcrop には2種類あり、CTAN と SourceForge にあるものは全く別物です。ここで言っている pdfcrop は CTAN の方です。