uplatex で DeclareUnicodeCharacter を使うには

uplatex で DeclareUnicodeCharacter を使うには

- 和田 勇 の投稿
返信数: 4
いつも uplatatex + dvipdfmx でドキュメントを作っていますが、
中国語の文字が表示されない障害に出くわしあれこれ試行錯誤しています。

dvipdfmx で対象のグリフガない云々のメッセージを元にそのコードを \UTF にあたえると表示できるのがわかりました。
それで、uplatex で表示できない文字はどんなものかと思い、源ノ角フォントで表示できる文字をもとに調べました。
おおよそ 27,000 超の文字のうち 17,000超の文字がそのままでは表示できませんでした。源ノ角の情報とdvipdfmx の警告メッセージを元に sed/perl で変更するスクリプトも考えたのですが、1M 弱で 5分 もかかるので、いろいろ検討した ところこのフォーラム関連で韓国語で実施されていた DeclareUnicodeCharacter を使うのが良さそうだと思い、変換テーブルを作成してみたのですが、uplatex だと効果が現れません。文末に添付したソースの documentclass のオプションを取り除いて platex で実施すると思い通りの結果になりました。

前置きが長くなりましたが、質問です。
「uplatex で DeclareUnicodeCharacter を利用する方法はありますか?」

\documentclass[uplatex]{jsbook}
\usepackage[utf8]{inputenc}
\usepackage[multi]{otf}%
\usepackage[T1]{fontenc}%
\DeclareUnicodeCharacter{C544}{\UTFM{C544}}%아
\DeclareUnicodeCharacter{C774}{\UTFM{C774}}%이
\DeclareUnicodeCharacter{3400}{\UTFM{3400}}%㐀
\DeclareUnicodeCharacter{3401}{\UTFM{3401}}%㐁
\begin{document}
\fbox{아} (u+c544\UTFM{c544})\par
\fbox{이} (u+c774\UTFM{c774})\par
\fbox{㐀} (u+3400\UTFM{3400})\par
\fbox{㐁} (u+3401\UTFM{3401})\par
\end{document}

# 実行環境 OS X 10.10.4 / CentOS 7 / TeXLive 2014 と 2015
和田 勇 への返信

Re: uplatex で DeclareUnicodeCharacter を使うには

- 前田 一貴 の投稿
質問への答えは,upTeX で CJK 扱いされる文字を inputenc で扱いたければ
該当文字の \kcatcode を 15 にせよ,ということだと思います.
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?upTeX%2CupLaTeX#g25333bf

ただ,文字が表示されない問題というのは,UTF-8 の文字を直接書いてもハングルなどが出ないということでしょうか.
私が試した限り,pxbabel を使えば正しく出せるのではないかと思いますが,いかがでしょうか.
前田 一貴 への返信

Re: uplatex で DeclareUnicodeCharacter を使うには

- 和田 勇 の投稿
前田様へ


\kcatcode を調整して uplatex で処理をしたところ CJK 統合漢字 (ex url http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/cjku_klist.html)  4E00 から 9FCC のうち9FA0 くらいから最後の 32 文字のみフォントがないと言われますが、14,000 を超える文字も処理できるようになりました。

pxbabel の方の影響はまだ調べ切れていませんが、kcatcode でとりあえずうまくいったことを報告します。
和田 勇 への返信

Re: uplatex で DeclareUnicodeCharacter を使うには

- t tk の投稿
どういう形の処理をなさりたいのか、今一つ分かっていませんが、

にあるように、
upTeXのdefaultでは、U+C554, U+C774, U+3400, U+3401 あたりは、CJK扱いされているはずです。

今話題にされている方法(方法A)
 ( \usepackage[utf8]{inputenc}, \DeclareUnicodeCharacter, \usepackage[multi]{otf}, \UTFM{} の組合せ )
で上手くいくのであれば、
素のプレーンテキストのままにして、フォント指定を 上記\UTFM{}と同じにする方法(方法B)により、
方法Aと同じ字数が出せるように思います。

源ノ角ゴシック、Source Han Sans はいろいろ種類や機能があるそうで、よく分かっていませんが、
にあるようなフォント切り替えを行い、
各フォントを「個別言語サブセット版(Region-specific Subset OpenType/CFF)」というものに対応させるようdvipdfmx側で設定すれば、「個別言語サブセット版に入っていて、かつ、Unicodeの一つのコードポイントに対応している漢字とハングルと仮名」はすべて出せると思います。
( 蛇足ながら、異体字セレクタ(IVS)を必要とする文字や合成文字については upTeXは未対応です。 )

以上、動作確認せずに書いております。
ご参考になれば幸いです。

t tk への返信

Re: uplatex で DeclareUnicodeCharacter を使うには

- 和田 勇 の投稿
やりたいことは、「ここから中国語が始まります」とかいういわゆる『言語切り替えタグを原稿には記述しない』で CJK 混植を目指したい。今までは、原稿を一旦 perl で文字コードを見て UTF などへの変換前処理していましたが、DeclareUnicodeCharacter を使っている例を見て、こちらのほうが良さそうだと思い、調査していました。
おっしゃるように、「U+C554, U+C774, U+3400, U+3401 あたりは、CJK扱いされている」と思っていたのですが、前田さんのご指摘で、思い違いがわかりました。

「個別言語サブセット版(Region-specific Subset OpenType/CFF)」というもの、これから勉強します。

当座は DeclareUnicodeCharacter で対応をと考えています。源ノ角フォントなどの利用も検討はしています。

異体字のほうも対応できればと考えていますが、前処理するための ruby スクリプトと LaTeX マクロも用意してあるのですが、どうするか思案中です。