\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}
\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}」と「あ」の間に不自然な空白が生じる。
「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を作って、それを欧文フォントに指定する、ということです。
\documentclass[a4j]{jarticle}
\usepackage{otf}
\usepackage{pxchfon}
\setminchofont{KozMinPr6N-Regular.otf}
\begin{document}
\Large
あああ1234567890あああ
あああabcdefghijklmnopqrstuvwxyzあああ
あああABCDEFGHIJKLMNOPQRSTUVWXYZあああ
あああmmmmmmmmmmあああ
\end{document}
こうすれば問題②は解消されるのですが、プロポーショナル文字を使う以上、mのような幅が大きい文字を並べると後ろが詰まってしまいます。
そこで、プロポーショナル文字を使いつつ詰まりを解消する方法を現在考えているのですが、何か良い方法がありましたらご教授ください。
よろしくお願いします。