文字をCID番号の文字で置き換える方法について

文字をCID番号の文字で置き換える方法について

- ニトロ ベンゼン の投稿
返信数: 2
Windows 8.1でTeXを使っています。

CID番号17~26の数字をはじめとした文字を使うために、次のようなマクロ\testを作ろうと思っています。
例えば、\test{1}{18}を実行すると、半角の1を入力した際にCID番号18の文字が表示される、というものです。
これについて自分なりにインターネットで調べて、次の結論に至りました。

\documentclass{jarticle}

\usepackage{otf}


\catcode`\@=11

\newcommand{\test}[2]{

\catcode"#1=\active

\begingroup

\lccode`\~="#1\relax

\lowercase{\gdef~}{#2}

\endgroup}

\catcode`\@=12


\begin{document}

1

\test{0031}{\CID{18}}

1

\end{document}


しかしながら、次のような問題点が発生しました。

①「\CID{18}あ」のように、後ろに通常の文字を入れると「\CID{18}」と「あ」の間に不自然な空白が生じる。
(これについては[forum:1898]と同じだと思いますが、\ajTsumesujiに頼らない方法を教えていただきたいです。

②単に1が\CID{18}に置き換わっているわけですから、\hspace{1mm}のような命令でエラーが発生する。

何か良い方法があればご教授ください。
よろしくお願いします。
ニトロ ベンゼン への返信

Re: 文字をCID番号の文字で置き換える方法について

- Z. R. の投稿
①「\CID{18}あ」のように、後ろに通常の文字を入れると「\CID{18}」と「あ」の間に不自然な空白が生じる。

「CID 17~26 の数字」(より一般的に「CID 1~95 のASCII文字」)は(仕様上)「半角幅」ではなくて「プロポーショナル幅」です。プロポーショナル幅、ということはフォントによって幅が違うわけなので、「特定のフォントを仮定しない」前提のotfパッケージはこれらのグリフを正しく扱えません。(無理やり使った場合の結果は未定義となります。)

本当に「半角幅」の数字のCIDは 247~256 です(ASCII文字は 231~325)。これならばotfパッケージで正常に取り扱えるはずです。\ajTsumesuji が内部で使っているのもこの範囲のグリフです。

\documentclass[a4paper]{jsarticle}
\usepackage{otf}
\begin{document}
平成\CID{249}\CID{256}年
\end{document}
②単に1が\CID{18}に置き換わっているわけですから、\hspace{1mm}のような命令でエラーが発生する。

一般的なインターフェースの設計としては、恐らく「半角にしたい部分をマークアップする」ことになるのでしょうけど、それは「\ajTsumesuji2 そのもの」です。

それでは間に合わないということは、実現したいのは「一般のLaTeXの命令を含んだ広い範囲に渡って、数字(など)を半角にしたい」ということでしょうか。そうなると、恐らく実現方法は「フォントレベルで置き換える」というものに限られる、と思います。つまり、「日本語フォントの半角部分のグリフ」からなる欧文のVFを作って、それを欧文フォントに指定する、ということです。

Z. R. への返信

Re: 文字をCID番号の文字で置き換える方法について

- ニトロ ベンゼン の投稿
回答ありがとうございます。
半角幅であれば問題なく出力できるのですが、英数字の幅が小さく和文と欧文のバランスが悪くなるので、全角幅を使いたいと思っております。
一方で全角幅だと文字の間にできる空白が不自然になるというわけです。
その結果、全角の大きさで文字の間が詰まったプロポーショナル文字を使うという結論に至りました。

回答を頂いてから試行錯誤して以下の状態になっております:

\documentclass[a4j]{jarticle}

\usepackage{otf}

\usepackage{pxchfon}

\setminchofont{KozMinPr6N-Regular.otf}

\begin{document}

\Large

あああ1234567890あああ


あああabcdefghijklmnopqrstuvwxyzあああ


あああABCDEFGHIJKLMNOPQRSTUVWXYZあああ


あああmmmmmmmmmmあああ

\end{document}


こうすれば問題②は解消されるのですが、プロポーショナル文字を使う以上、mのような幅が大きい文字を並べると後ろが詰まってしまいます。

そこで、プロポーショナル文字を使いつつ詰まりを解消する方法を現在考えているのですが、何か良い方法がありましたらご教授ください。


よろしくお願いします。