在 LuaTeX 中,我们可以使用\CID
和通过 CID 插入字符\UTF
:luatexja-otf
\documentclass{ctexart}
\usepackage{luatexja-otf}
\setCJKmainfont{KozMinPr6N-Regular.otf}
\begin{document}
森\UTF{9DD7}外と内田百\UTF{9592}とが\UTF{9AD9}島屋に行く。
\CID{7652}飾区の\CID{13706}野家,\CID{1481}城市,葛西駅,高崎と\CID{8705}\UTF{FA11}
\end{document}
它们都是从 upTeX 继承而来的。那么如何使用 CID-key 在 XeTeX 中插入一些字符呢?
对于 Kozuka Mincho Pr6N,字形顺序与 CID 顺序 (Adobe Japan1-6) 相同。但其他字体可能不使用相同的顺序,因此\XeTeXglyph
不能(至少不能直接)在此处使用 etc。
答案1
cidmap
使用TeX Live 中的文件进行概念证明。
\documentclass{article}
\usepackage{xparse,xeCJK}
\setCJKmainfont{Hiragino Mincho ProN}
\ExplSyntaxOn
\NewDocumentCommand{\readCIDfile}{m}
{
\readcid_file:n { #1 }
}
\NewDocumentCommand{\CID}{m}
{
\use:c { CID#1 }
}
\NewDocumentCommand{\UTF}{m}
{
\symbol { \int_from_hex:n { #1 } }
}
\ior_new:N \g_readcid_file_stream
\cs_new_protected:Nn \readcid_file:n
{
\ior_open:Nn \g_readcid_file_stream { #1 }
\ior_str_map_inline:Nn \g_readcid_file_stream
{
\__readcid_line:n { ##1 }
}
}
\cs_new_protected:Nn \__readcid_line:n
{
\__readcid_line_aux:w #1 \q_stop
}
\cs_new_protected:Npn \__readcid_line_aux:w #1 ~ #2 \q_stop
{
\str_if_eq:nnF { #1 } { #2 }
{
\str_case_e:nnF { \str_range:nnn { #2 } { 1 } { 3 } }
{
{/un}{ \__readcid_def_uni:nn { #1 } { #2 } }
{/Ja}{ \__readcid_def_japan:nn { #1 } { #2 } }
{./n}{ }
}
{ \__readcid_def:nn { #1 } { #2 } }
}
}
\cs_new_protected:Nn \__readcid_def:nn
{
\str_if_in:nnTF { #1 } { . }
{
\__readcid_def:w #1 - { #2 }
}
{
\__readcid_def_do:nn { #1 } { #2 }
}
}
\cs_new_protected:Npn \__readcid_def:w #1..#2 - #3
{
\int_step_inline:nnn { #1 } { #2 }
{
\__readcid_def_do:nn { ##1 } { #3 }
}
}
\cs_new_protected:Nn \__readcid_def_do:nn
{
\cs_new:cpx {CID#1} { \UTF { #2 } }
}
\cs_new_protected:Nn \__readcid_def_uni:nn
{
\str_if_in:nnTF { #1 } { . }
{
\__readcid_def_uni_multi:w #1 - { #2 }
}
{
\__readcid_def_uni_do:nn { #1 } { #2 }
}
}
\cs_new_protected:Npn \__readcid_def_uni_multi:w #1..#2 - #3
{
\int_step_inline:nnn { #1 } { #2 }
{
\__readcid_def_uni_do:nn { ##1 } { #3 }
}
}
\cs_new_protected:Nn \__readcid_def_uni_do:nn
{
\cs_new:cpx {CID#1} { \UTF { \str_range:nnn { #2 } { 5 } { 8 } } }
}
\cs_new_protected:Nn \__readcid_def_japan:nn
{
\str_if_in:nnTF { #1 } { . }
{
\__readcid_def_japan_multi:w #1 - { #2 }
}
{
\__readcid_def_japan_do:nn { #1 } { #2 }
}
}
\cs_new_protected:Npn \__readcid_def_japan_multi:w #1..#2 - #3
{
\int_step_inline:nnn { #1 } { #2 }
{
\__readcid_def_japan_do:nn { ##1 } { #3 }
}
}
\cs_new_protected:Nn \__readcid_def_japan_do:nn
{
\cs_new:cpx {CID#1} { \CID { \__readcid_japan_strip:w #2 \q_stop } }
}
\cs_new:Npn \__readcid_japan_strip:w #1.#2.#3 \q_stop { #2 }
\ExplSyntaxOff
\readCIDfile{/usr/local/texlive/2019/texmf-dist/fonts/cid/fontforge/Adobe-Japan1-6.cidmap}
\begin{document}
森\UTF{9DD7}外と内田百\UTF{9592}とが\UTF{9AD9}島屋に行く。
森鷗外と内田百閒とが髙島屋に行く。
\CID{7652}飾区の\CID{13706}野家,\CID{1481}城市,葛西駅,高崎と\CID{8705}\UTF{FA11}
\CID{7652}飾区の