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

名前: ZR
日時: 2007-01-27 04:53:34
IPアドレス: 59.140.98.*

>>46540 「TeX で組版された PDF の電子本で、テキスト抽出した際に 一重引用符(ASCII 60h/27h)が全角に化ける問題」について 別の観点を述べたいと思います。 現在の ASCII では符号位置 60h は grave (U+0060)、 27h は quotesingle (U+0027) です。Unicode でもこれを 受け継いでいます。しかし、一時期の米国で、60h と 27h を quoteleft (U+2018) と quoteright (U+2019) として 用いるという習慣があり、当時の一部のフォント(特に UNIX 系)では位置 60h/27h に quoteleft/quoteright のグリフ (字形)を割り当てられていました。しかし現在では Unicode との不整合の回避のため、このようなフォントは避けられて いるようです。つまり、現況では、ASCII の 60h/27h の文字 は規定でも実情でも grave/quotesingle と認識すべきです。 上述の米国の習慣を反映して、現在の標準的な TeX 環境(含 Type1 フォント)においては、LaTeX の 'verbatim' はソース での符号位置 60h/27h の文字を quoteleft/quoteright と して出力します。つまり、PDF での符号位置が 2018h/2019h となるので日本語環境では全角文字として扱われます。 しかし、ここで注意すべきなのは、quoteleft/quoteright に なっているのは PDF 中の符号位置情報だけでなくてグリフ もそうです。つまり、当該文書はテキスト情報でも見た目でも quoteleft/quoteright を含んでいると。でも、本当は ASCII で書かれたプログラム中に存在するのは符号位置でもグリフ でも grave/quotesingle のはずです。 この観点に立てば、「問題」への対処は次のようになると思わ れます。 - プログラムソース用の特殊な verbatim を用意し、そこ ではソース中の 60h/27h で grave/quotesingle が出力 されるようにする。 この方法ならば容易に実行できるのではないでしょうか。 以下では、種々の等幅フォントで grave/quotesingle を出力 させる例を示しています。 \documentclass[a4paper]{article} \usepackage[T1,OT1]{fontenc} \usepackage{textcomp} \newcommand{\OTIlq}{\symbol{18}} % cmtt では grave は 12h \newcommand{\OTIrq}{\symbol{13}} % quotesingle は 0Dh % T1 エンコーディングでは grave は 00h、quotesingle は \newcommand{\TIlq}{\symbol{0}} % TS1 の 27h にある \newcommand{\TIrq}{{\fontencoding{TS1}\selectfont\symbol{39}}} \newcommand{\Sample}[2] % サンプル(Perl コードのつもり) {\$out = #1foogrep -e #2<!#2 -f #2*.html#2 site.tar.gz#1;} %--- \begin{document} \usefont{OT1}{cmtt}{m}{n}\Sample\OTIlq\OTIrq\par % CM \usefont{T1}{lmtt}{m}{n}\Sample\TIlq\TIrq\par % LM \usefont{T1}{pcr}{m}{n}\Sample\TIlq\TIrq\par % Courier \usefont{T1}{txtt}{m}{n}\Sample\TIlq\TIrq\par % txfonts % 環境によっては Courier が失敗するかも? % pcr でなく ucr なら大丈夫 \end{document} このソースから作成した PDF では、テキストに変換しても ASCII の文字以外現れません。先の仕様の verbatim を作る のもそれほど難しくないはずです。

この書き込みへの返事:

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