お世話になります。
欧文の 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 を使えば化けないので、とりあえずは困らないのですが、このような結果になる理由についてお教えいただけましたら幸いです。よろしくお願いします。
よく分かってはいないのですが、途中経過の自己レスです。
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 文字に分かれてコピーされました)。
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 文字に分かれてコピーされました)。
しつこくてすいません、また自己レスです。
同じケースで困っている方もいらっしゃらないようですし、結局よく分からなかったので、諦めます…。以下、その後のメモです。
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 を扱えるエディタを経由すると、コピペが出来ました。
同じケースで困っている方もいらっしゃらないようですし、結局よく分からなかったので、諦めます…。以下、その後のメモです。
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 を扱えるエディタを経由すると、コピペが出来ました。
kuroky + さん、応答をありがとうございます!
お示しくださったページを見て、
\input glyphtounicode.tex
\pdfgentounicode=1
の 2 行をソースに付け加えてみました。
すると、やはり pdf から直接 Word にコピペすることは出来ませんでしたが、メモ帳経由では、コピーできました。
\pdfgentounicode とか、\pdfglyphtounicode というのは pdfTeX のユーザーマニュアルには載っていなかったように思うのですが、私が参照した版が古かったのかも知れません。もう少し自分でも調べてみます。
いずれにしましても、貴重な情報を、本当にありがとうございました。
お示しくださったページを見て、
\input glyphtounicode.tex
\pdfgentounicode=1
の 2 行をソースに付け加えてみました。
すると、やはり pdf から直接 Word にコピペすることは出来ませんでしたが、メモ帳経由では、コピーできました。
\pdfgentounicode とか、\pdfglyphtounicode というのは pdfTeX のユーザーマニュアルには載っていなかったように思うのですが、私が参照した版が古かったのかも知れません。もう少し自分でも調べてみます。
いずれにしましても、貴重な情報を、本当にありがとうございました。
…。せっかく情報をいただきましたのに、うまく行きませんでした 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 を使ったときと同じ状態で、メモ帳などを経由すれば、正しくコピーすることができます。
何か根本的な勘違いをしているのかも知れませんが、取り急ぎ現状につき申し上げます。
まず、お教えいただいたページに書かれているのと同じことが、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 を使ったときと同じ状態で、メモ帳などを経由すれば、正しくコピーすることができます。
何か根本的な勘違いをしているのかも知れませんが、取り急ぎ現状につき申し上げます。
おはようございます。Z. R. さん、ご回答をありがとうございます。
おっしゃるとおり、Word の「貼り付けオプション」ボタンの「テキストのみ保持」で、正しく貼り付けることができました!
手元の Word のバージョンは Word2007 で、普段は「貼り付けオプション」ボタンを表示していないのですけど、それでも、「貼り付け」→「形式を選択して貼り付け」と辿ると、「貼り付ける形式」の選択肢の中に「Unicode テキスト」もありました!
cmap.sty を使った場合と、glyphtounicode.tex を input した場合とで、いずれでも同じ結果になりました。それでも、cmap.sty は vf に対応していないと書いてありますし、対応しているエンコーディングも限られているようですので、kuroky + さんが教えてくださった方法のほうが汎用度が高いように思われます。
最初の投稿に書いた、
> dvipdfmx と pdflatex のどちらでも化けるほうが一貫性があって却ってすっきりするのですが、異なる結果になる理由が分かりません。
というのはあまりに子供っぽい言い草で、dvipdfmx と pdftex は全然別物なのでしょうから、同じ tfm ファイルと enc ファイルを使ったとしても、異なる結果になり得るというのは、ある意味当然なのかも知れません。
kuroky + さん、Z. R. さん、ご回答くださり、本当にありがとうございました。
おっしゃるとおり、Word の「貼り付けオプション」ボタンの「テキストのみ保持」で、正しく貼り付けることができました!
手元の Word のバージョンは Word2007 で、普段は「貼り付けオプション」ボタンを表示していないのですけど、それでも、「貼り付け」→「形式を選択して貼り付け」と辿ると、「貼り付ける形式」の選択肢の中に「Unicode テキスト」もありました!
cmap.sty を使った場合と、glyphtounicode.tex を input した場合とで、いずれでも同じ結果になりました。それでも、cmap.sty は vf に対応していないと書いてありますし、対応しているエンコーディングも限られているようですので、kuroky + さんが教えてくださった方法のほうが汎用度が高いように思われます。
最初の投稿に書いた、
> dvipdfmx と pdflatex のどちらでも化けるほうが一貫性があって却ってすっきりするのですが、異なる結果になる理由が分かりません。
というのはあまりに子供っぽい言い草で、dvipdfmx と pdftex は全然別物なのでしょうから、同じ tfm ファイルと enc ファイルを使ったとしても、異なる結果になり得るというのは、ある意味当然なのかも知れません。
kuroky + さん、Z. R. さん、ご回答くださり、本当にありがとうございました。