pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- ut の投稿
返信数: 8
お世話になります。

欧文の TrueType フォントを購入して、それを埋め込んだ pdf を作りました。latex -> dvipdfmx で作った pdf から Word2007 にコピー・アンド・ペーストすると、pdf の通りにコピーされるのですが、pdflatex で作った pdf からコピペをしたら、エスツェットやリガチャが化けてしまいました。

具体的には、エスツェット(germandbls)は ydieresis になり、fi と fl のリガチャはアンダーバーになりました(OpenOffice.org Writer で試してみても同様にエスツェットは ydieresis になり、fi と fl のリガチャは黒い点になりました)。

tfm ファイルを作る際に使った T1-WGL4.enc の 255 番が germandbls で、8r.enc の 255 番が ydieresis なので、エンコーディングの問題なのかな、とチラッと思ったのですけど、しかし、8r.enc は使っていない(つもり)です。

ソースでも T1 を指定してして、map ファイルの設定でも、dvipdfmx も pdf(la)tex もどちらも T1-WGL4.enc でエンコードし直しています。

dvipdfmx と pdflatex のどちらでも化けるほうが一貫性があって却ってすっきりするのですが、異なる結果になる理由が分かりません。

商品のフォントを添付するわけにはいきませんので、Windows の Times New Roman を埋め込むサンプルを添付いたします(fd ファイルや map ファイルに相当する部分はプリアンプルに入れました)。私の手許では、これでも再現しました。

tfm ファイルは次のようにして作りました:

 ttf2tfm times.ttf -q -T T1-WGL4.enc -v sample.vpl r-sample.tfm
 vptovf sample.vpl sample.vf sample.tfm

(今回の場合 vf を挟む必要はないと思いますので、r-sample.tfm と sample.vf, sample.vpl は添付していません)

TeX は、角藤先生の W32TeX の
 This is pdfTeX, Version 3.1415926-1.40.10 (Web2C 2010/dev)
で、dvipdfmx は
 dvipdfmx(20100328)
です。

dvipdfmx を使えば化けないので、とりあえずは困らないのですが、このような結果になる理由についてお教えいただけましたら幸いです。よろしくお願いします。
ut への返信

Re: pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- ut の投稿
よく分かってはいないのですが、途中経過の自己レスです。

The LaTeX Graphics Companion Supplementary material (Version February 17, 2008)
http://xml.web.cern.ch/XML/lgc2/tlgc2extra.pdf
のエンコードの比較表を見ましたら、

【Table 21.14: Font encoding table, by name. より抜粋】
 germandbls
  EC: 255
  8r: 223
  ISO Latin 1: 223
  Adobe Standard: 251
  Windows ANSI: 223
  Mac: 167
  PDF: 223

【Table 21.15: Font encoding table, by number. より抜粋】
 Decimal: 255
 Octal: 377
 Hexadecimal: ff
  EC: germandbls
  TeXBase1: ydieresis
  ISO Latin 1: ydieresis
  Standard: ---
  Windows ANSI: ydieresis
  Mac Roman: caron
  PDF: ydieresis

となっていました。素人考えですが、pdf(la)tex は、直接 PDF 出力をするようですので、EC (T1) と PDF とで、germandbls のコードが違っていることが、pdf から Word へのコピペでの文字化けの原因のように思えました。

そこで、PDF と Windows ANSI とで germandbls と ydieresis のコードが同じなので、T1-WGL4.enc ではなくて、texnansi.enc を使って tfm ファイルを作り、ソースのほうでも \usepackage[LY1]{fontenc} として、\DeclareFontFamily や map でも LY1, texnansi.enc を指定してみたり、tfm ファイルを作る際に、
 ttf2tfm times.ttf -q -t T1-WGL4.enc -p 8r.enc -v sample.vpl r-sample.tfm
として、8r.enc や vf を挟んでみたりもしたのですが、結局うまくいきませんでした…。

PDF を作るだけなら問題ないようなので、Word 等にコピペする必要がある場合には、PDF を作る際に TrueType フォントや pdflatex を使わなければいいだけなのかも知れません。

…。と書いて投稿後にもう一度確認したところ、8r.enc を使って、vf を挟んだものでは、エスツェットは化けていませんでした(!)。リガチャは表示されないママでしたけれど(dvipdfmx で作った pdf の場合は、リガチャは 2 文字に分かれてコピーされました)。
ut への返信

Re: pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- ut の投稿
しつこくてすいません、また自己レスです。

同じケースで困っている方もいらっしゃらないようですし、結局よく分からなかったので、諦めます…。以下、その後のメモです。

pdf から Word にコピペが出来た dvipdfmx による pdf の中を見てみましたら、

 9 0 obj
 <<
 /Differences [28 /fi /fl 255 /germandbls]
 /BaseEncoding /WinAnsiEncoding
 >>
 endobj

という部分がありました。また、PostScriptType1 の NimbusRomanNo9L-Regu を埋めた pdf だと、pdflatex で作った pdf からでも Word にコピペが出来て、その中を見ますとやはり、

 8 0 obj
 <<
 /Differences [2 /fi /fl 49 /one 223 /germandbls 228 /adieresis 235 /edieresis 246 /odieresis 252 /udieresis]
 /Type /Encoding
 >>
 endobj

という部分がありました。pdflatex で処理する際に、何らかの操作でこの部分を入れられるのかと思ったのですが、私の検索能力では、その方法は分かりませんでした…。

cmap.sty というのを使って、pdf の冒頭に cmap を入れると、Word への直接のコピペはやはりうまく行きませんでしたが、Windows のメモ帳など unicode を扱えるエディタを経由すると、コピペが出来ました。
ut への返信

Re: pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- KUROKI Yusuke の投稿
http://www.tug.org/pipermail/tex-live/2009-February/019970.html
の記事でいいと思います.
KUROKI Yusuke への返信

Re: pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- ut の投稿
kuroky + さん、応答をありがとうございます!

お示しくださったページを見て、
 \input glyphtounicode.tex
 \pdfgentounicode=1
の 2 行をソースに付け加えてみました。

すると、やはり pdf から直接 Word にコピペすることは出来ませんでしたが、メモ帳経由では、コピーできました。

\pdfgentounicode とか、\pdfglyphtounicode というのは pdfTeX のユーザーマニュアルには載っていなかったように思うのですが、私が参照した版が古かったのかも知れません。もう少し自分でも調べてみます。

いずれにしましても、貴重な情報を、本当にありがとうございました。
ut への返信

Re: pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- ut の投稿
…。せっかく情報をいただきましたのに、うまく行きませんでした orz

まず、お教えいただいたページに書かれているのと同じことが、texmf/doc/pdftex/base にある README.tounicode というドキュメントにも書かれていました(!)(タイムスタンプは 2006/07/14 です)。

そして、教えていただいたページや README.tounicode に書かれているように、
 \input glyphtounicode.tex
 \pdfgentounicode=1
の 2 行を加えて pdflatex で処理した pdf から Word にコピペをしようとすると、fi と fl のリガチャは直接コピーできますが、ウムラウト付の文字からはウムラウトが取れてしまい、エスツェットは s になってしまいます。これは、cmap.sty を使ったときと同じ状態で、メモ帳などを経由すれば、正しくコピーすることができます。

何か根本的な勘違いをしているのかも知れませんが、取り急ぎ現状につき申し上げます。
ut への返信

Re: pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- KUROKI Yusuke の投稿
件のページのおまじないを pdftex 時には追加すれば,
ff, ffi, ffl, \"u, \ss の範囲内で,(標準の)Computer Modern を使う限りにおいて,
コピーアンドペーストをしたときの振舞いはdvipdfmx と pdftex とで同じくなりました.

しかし,ut さんの場合,TrueType フォントを埋め込んだ場合に興味があられたわけで,
そこまではカバーしきれていません.すいません.識者の登場に期待します.
ut への返信

Re: pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- Z. R. の投稿
メモ帳などを経由すれば、正しくコピーすることができます

ということは、Word の「貼り付けオプション」(既定設定だと貼り付けした後にアイコンが出る)で「テキストのみ保持」を選ぶと正しい文字になるはずです。私のマシンで実行したところでは成功しました。

(Microsoft Office 2010;Windows 7 64ビット)

# 新しいPCを買って 2 か月半経って初めて Office を起動した…。

Z. R. への返信

Re: pdflatex と dvipdfmx とで、pdf から Word へのコピペ結果が異なる

- ut の投稿
おはようございます。Z. R. さん、ご回答をありがとうございます。

おっしゃるとおり、Word の「貼り付けオプション」ボタンの「テキストのみ保持」で、正しく貼り付けることができました!

手元の Word のバージョンは Word2007 で、普段は「貼り付けオプション」ボタンを表示していないのですけど、それでも、「貼り付け」→「形式を選択して貼り付け」と辿ると、「貼り付ける形式」の選択肢の中に「Unicode テキスト」もありました!

cmap.sty を使った場合と、glyphtounicode.tex を input した場合とで、いずれでも同じ結果になりました。それでも、cmap.sty は vf に対応していないと書いてありますし、対応しているエンコーディングも限られているようですので、kuroky + さんが教えてくださった方法のほうが汎用度が高いように思われます。

最初の投稿に書いた、

> dvipdfmx と pdflatex のどちらでも化けるほうが一貫性があって却ってすっきりするのですが、異なる結果になる理由が分かりません。

というのはあまりに子供っぽい言い草で、dvipdfmx と pdftex は全然別物なのでしょうから、同じ tfm ファイルと enc ファイルを使ったとしても、異なる結果になり得るというのは、ある意味当然なのかも知れません。

kuroky + さん、Z. R. さん、ご回答くださり、本当にありがとうございました。