luamirageat パッケージ

luamirageat パッケージは,LuaTeX 文書中のメールアドレスに spam 対策を施すためのパッケージです.

概要

PDF を Web にアップロードするとき,もしその PDF に自分のメールアドレスが含まれていると,ボットにメールアドレスを読み取られて spam メールを大量に送られてしまう可能性があります.これに対して,従来の対策は以下の4つが考えられました:

そこで,もっとスマートな解決法は無いものか,と考えて試しに作ってみたのがこのパッケージです.LuaTeX 上の plain TeX,LaTeX のどちらでも使用できます.

ダウンロード

依存パッケージ(開発環境)

luatex v0.66.0, luaotfload v1.24

使い方

サンプルで説明します.以下,plain TeX の場合.

\input luamirageat.sty       % luaotfload.sty も一緒に読み込まれる

\font\tt={lmmono10-regular}  % lmmono10-regular.otf

\tt

example@example.org          % 普通の @

example\mirageat example.org % 読めない @

\end

これを luatex コマンドに入力すると出力の PDF が得られます.選択してコピーしてみると,上の `@' は普通にコピーできるが,下の `@' は ` at ' に化けることがわかると思います(Evince などの場合.自分の環境だと Acrobat Reader 9 ではスペース文字になる).LaTeX の場合も \usepackage{luamirageat} と変えるだけで全く同様です.

注意: Google のクローラには読めるようです.どのデータを読んでいるのかは謎です.何かわかる方は教えていただけると嬉しいです.

実装の解説

まず,制限として TrueType フォントか OpenType フォントを使う必要があります.デフォルトの Computer Modern だと失敗してしまうので,サンプルのように OpenType 版のフォントを読み込む必要があります.

luamirageat の発想は単純で,内部でスペース文字 (U+0020) に対応するグリフが @ (U+0040) であるようなフォントを作り出して,スペース文字を出力するだけです.さらに,スペース文字の tounicode に ``0020006100740020'' (UTF-16BE) を指定することで,テキストデータとしては `` at '' が埋め込まれるようにしておきます.今のところ Type 1 フォントではこの内部でフォントを作り出す操作がうまくいっていません.これが上述の制限の理由です.

なお,実装上の注意点としては,作ったフォントの fullname を必ず変えておく必要があるということが挙げられます.fullname を変えて別フォントとしておかないと,同じフォントで別の箇所に本物の @ を出力したときに @ のグリフに U+0040 が対応させられてしまうのかうまくいかなくなってしまいます.上のサンプル PDF のフォントのプロパティを見ると LMMono10-Regular が2つ表示されるのはこのためです.


後日,LuaTeX 以外でも同様のことが可能であることをZRさんに教えていただきました