Hatena::ブログ(Diary)

マクロツイーター このページをアンテナに追加 RSSフィード Twitter

2011-04-02

スパマーに読まれない〈@〉を書く(BXmirageat パッケージ)

luamirageat パッケージ (前田一貴さん)

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

ほう。

確か最近の PDF 仕様にはこれを直接(フォント情報を介さずに)行う機能があったはず(PDF 仕様書検索中)……あった→「Replacement Text」。

これを使えば他のエンジンでも実現できるはず、というか既に誰か作ってないかな(ファイル検索中*1)……あった→「accsupp パッケージ」。

というわけでひっそりと公開。

ドライバ依存なので、pdfTeX、XeTeX、LuaTeX 以外ではドライバ指定が必要。

\documentclass[a4paper]{article}
\usepackage[dvipdfmx]{bxmirageat} % dvipdfmx, dvips, pdftex のいずれか
\begin{document}
\begin{quote}\ttfamily
example@example.org\\             % 普通の〈@〉
example\mirageat example.org      % 読めない〈@〉
\end{quote}
\end{document}

難しいことは全部 Oberdiek さん(acc-supp の作者)がやってくれているので、bxmirageat.sty の中身は実質これだけしかない。

\RequirePackageWithOptions{accsupp}
\DeclareRobustCommand\mirageat{%
  \BeginAccSupp{method=hex,ActualText=20617420}%
  @\EndAccSupp{}}


と思ったけど、この replacement text を用いた方法だと、コピペ以外では効力がないらしい。残念…。だけど、コピペが防げるから、こんな場合にはとっても便利!!

\documentclass[a4paper]{article}
\usepackage[dvipdfmx]{accsupp}
\newcommand\Data[2]{% #2 は UTF-16BE です!
  \BeginAccSupp{method=hex,unicode,ActualText=#2}%
  #1\,{$\mu$Sv/h}\EndAccSupp{}}
\begin{document}
\begin{tabular}{ccr}\hline
計測時間 & 計測場所 & γ線 \\\hline
午前2時00分 & 西門 & \Data{88.0}{5FAE91CF}\\\hline
午前3時00分 & 西門 & \Data{87.6}{50C5304B}\\\hline
午前4時00分 & 西門 & \Data{87.7}{5C113005}\\\hline
\end{tabular}
\end{document}

*1TeX Live の .sty ファイルの中で「ActualText」が含まれているのを探しました。

kmaedakmaeda 2011/04/03 07:01 こんにちは.

PDF 自体にそういう機能がないのかな,とは思っていたのですが,やはりあるのですね.
調べるのが面倒で,自力でそれっぽいことをやっていました.
「コピペ以外では効力がない」というのは,テキストデータ自体は含まれているから読もうと思えば読めるという意味ですか?
# 実際のところ,スパマーが PDF にあるメールアドレスを読むことがあるのかどうかはよく知りません.

最後の例は私もそういう使い道を真っ先に想定していました.
あまりこの手の機能を使うのはよくない場合が多そうですね.

zrbabblerzrbabbler 2011/04/03 22:58 >テキストデータ自体は含まれているから読もうと思えば読めるという意味ですか?
私が Adobe Reader(9 です)で試した限りでは、「テキストとして保存」や「読み上げ」を行うと、元の(出力されたまま)のテキストが使われました。仕様の上ではこの場合でも置換テキストの方を使うのが正しいように思えるのですが、要するに対応が不完全なのでしょう。
ちなみに、「PDF に埋め込むフォントの ToUnicode マップを非標準のもので置き換える」という処理は、pdfTeX でも可能です(\pdffontattr プリミティブ)。確か dvipdfmx でも実現する方法があったと記憶しています。これを使えばたぶん luamirageat と同じようになると思うのですが、さすがにこのネタにそこまで時間を割けない……。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/zrbabbler/20110402/1301764429