Re: PDFとのラウンドトリップ

名前: anonymouse
日時: 2007-01-15 23:32:41
IPアドレス: 64.202.165.*

<a href=\"46513.html\">>>46513</a> <a href=\"46529.html\">>>46529</a> > 濁点が分離するのはMac標準のPDF閲覧ソフト「プレビュー」からコピペした > 際に必ず起こります。これはCMap等では解決不能で,Adobe Readerを使う > しか手はなさそうです。 これは<a href=\"http://homepage1.nifty.com/nomenclator/unicode/normalization.htm\">正規分解</a>でしょうか? > 今回の問題?は,プログラミングの本をTeXで作ってPDFで配布したいのだ > けれど,サンプルコードをコピペしたら全角になったりコード点が変わった > りして使い物にならなくなる,というものです。TeXが紙への印刷だけでな > くPDF制作に使われるようになると,dvipdfmx側でこういった点も考えな > いと使ってもらえないことになるかもしれません。 \\parindent=0pt \\verb|prompt(\'ほげ\');| を platex + (x)dvipdfmx で処理すると、 Contents stream のテキストブロックは /F1 %% font := cmtt10 9.963 Tf %% size := 9.963pt 0 -9.96 Td %% rmoveto [(prompt\\(\')]TJ %% show /F2 %% font := Ryumin-Light 9.586 Tf %% size := 9.586pt 44.24 0 Td %% rmoveto [<0384035b>]TJ %% show /F1 %% font := cmtt10 9.963 Tf %% size := 9.963pt 19.17 0 Td %% rmoveto [(\'\\);)]TJ %% show になります。つまり、 \' は、 TFM と(この場合は使用しないが、) enc により、 glyphID == 0x27 の文字として、 PDF に格納され、 cmtt10.pfb のその文字の コードポイントが 0x2019 になっている状況です。このコードポイントを 0x27 にするのに、 CMap を修正するのは、正しい方法だと思いますが、私の書いた 方法では cmtt10 を使う時は何時でも、このカスタマイズした CMap が使われて しまうので、何か、マクロで制御できるような、より良い方法があればいいなあと 思っています。 一方、最初の \' の後にスペースが入るのを防ぐために、 xkanjiskip=0pt を 指定してしまうと、もちろん、タイプセットの結果が変わってしまうので、 望ましくありません。これは、まだ実際に試してはいませんが、次のような tagged PDF の必要があると思います。 /F1 %% font := cmtt10 9.963 Tf %% size := 9.963pt 0 -9.96 Td %% rmoveto [(prompt\\(\')]TJ %% show /F2 %% font := Ryumin-Light 9.586 Tf %% size := 9.586pt 41.84 0 Td %% rmoveto /Span <<ActualText()>> %% () == 空文字列 BDC %% begin mark 2.40 0 Td %% \\xkanjiskip EMC %% end mark [<0384035b>]TJ %% show /F1 %% font := cmtt10 9.963 Tf %% size := 9.963pt 19.17 0 Td %% rmoveto [(\'\\);)]TJ %% show こういうコードを生成するためには、もちろん、 dvi ドライバの側で、tag を 構成するための special をサポートしなければなりませんが、 dvi ドライバの ユーザインタフェイスの設計だけでなく、必要な special をすべて、TeX マクロで 生成できるのか、 TeX コンパイラの側でも、何らかの自動生成を行わなければ ならないのではないかなど、いろいろ考えなければならないでしょう。 %% どうも、最近の XeTeX リストのやりとりを見ると、 PDF からテキストを %% 抽出するのに、 MacOS X のプレビューは tag を無視しているようです。 %% (ハイフンと改行の取り扱いの話題)

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)