PDFの注釈機能で遊ぶ
この記事はTeX & LaTeX Advent Calendar 2017の9日目の記事です. 8日目はmunepiさんでした.10日目はaminophenさんです.
はじめに
PDFには,注釈という文書に様々な情報を付加するための機能がある.今回は,PDFTeXから注釈機能を叩くことにより,その面白さの一端を見てみようと思う.
注釈とは
概要
PDFの注釈とは,
- メモや音,動画といった要素をページに付与する,もしくは
- インタラクティブな要素を提供する
機能である.具体的には,次のような要素をPDF文書に付与することができる.
型 | 機能 |
---|---|
Text | 付箋のように表示されるテキストを付与する |
Line | 直線を引く |
Link | ハイパーリンク機能を提供する |
Stamp | ゴム印を押したような効果を与える |
FileAttachment | ファイルを添付する |
Sound | 音声ファイルを付与し,再生機能を与える |
これらの注釈の中には,ページが開かれた際やマウスオーバーした際などのイベントに対して,独自のアクションを設定できるものもある.
PDFTeXによる注釈の利用
TeXでPDFの注釈を使用するには,PDFの注釈オブジェクトを生成し書き込む必要がある.また,注釈を含むページにも細工をする必要がある*1.
この文面だけ見ると面倒なように見えるが,PDFTeXにはこれらを簡単に扱うためのプリミティブ\pdfannot
が既に準備されている.\pdfannot
は次のように用いる.
\pdfannot <<サイズ指定やオブジェクト番号に関する記述>> {<<注釈オブジェクトの記述>>}
これだけではイメージは沸かないと思われるので,ファイル添付注釈を例に,具体的な使用法を示す.まず,次のコードを考える.
\documentclass{article} \begin{document} The source code of this PDF document is attached on this page. %% read a file to pdf object \immediate \pdfobj stream file {\jobname.tex}% %% add file attachment annotation \pdfannot width 1em height 1.7ex depth 0.3ex { /Subtype /FileAttachment /FS << /EF << /F \the\pdflastobj\space 0 R >> /F (\jobname.tex) /Type /Filespec >> }% Oops, this text is wrapped.... \end{document}
これは,このソースコード自身を結果のPDFに添付するサンプルになっている.私の手元のAdobe Acrobat Reader DC(Windows)では次のような表示を得ることができた.
「Oops, ...」の上にピンのアイコンがあるのがわかるだろう.これをダブルクリックすると,上のコードを開くことができる.
では,\pdfannot
を実際にどう使っているか見ていこう.
まず,\pdfannot
と{
の間にアイコンの大きさ指定がある.この大きさ指定が実際に意味を持つかどうかはViewer依存だが,書いておいたほうが無難である.なお,結果を見ればわかる通り,大きさを指定しても組版には影響を与えない.
{
と}
の間には注釈オブジェクトの内容をPDFの文法で記載する.今回はファイル添付注釈なので,/Subtype
を/FileAttachment
にし,/FS
でファイルの詳細を与えている.ファイルそのものは\pdfannot
の前に\pdfobj
を使ってPDFファイル自体に取り込んでいる.
TeX芸での利用例
これだけではあまり面白くない.もう少しTeX芸っぽいことをしよう.上の例では,ファイルを外部から読み込んだが,これをソースに直接記述しよう.また,テキストファイルだと面白くないので,バイナリファイルにしよう.
結果がこれだ.
なお,ChomeのPDF ViewerやGithubのViewerでは注釈の表示がされないようなので,手元にダウンロードしてみてほしい(音量注意).
まとめ
PDFの機能,もっと活用すればいいと思うよ*2.