+\usepackage{luatexja-fontspec,luatexja-otf, luacode, booktabs,array,xcolor}
+\usepackage[scale=0.80]{geometry}
+\usepackage{listings}
+\setsansjfont{KozGoPr6N-Regular}
+
+% \IVS[?] 用
+\begin{luacode}
+ local fallback_color = 'red' -- IVS がないときは,この色で既定文字を出力
+ local list_color = 'blue!50!black' -- リスト表示の色
+
+ local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
+ local ubyte = unicode.utf8.byte
+ local uchar = unicode.utf8.char
+ local sort = table.sort
+ function list_ivs(s)
+ local c = ubyte(s)
+ local pt = luatexja.otf.font_ivs_table[tex.attribute[attr_curjfnt]][c]
+ if pt then
+ local t = {}
+ for i,_ in pairs(pt) do t[1+#t]=i end
+ sort(t); tex.sprint('\\textcolor{' .. list_color .. '}{')
+ for _,i in ipairs(t) do
+ if i<0xF0 then -- only IVS
+ tex.sprint('\\oalign{' .. s .. uchar(i+0xE0100)
+ .. '\\crcr\\hss\\tiny' .. tostring(i) .. '\\hss\\crcr}')
+ end
+ end
+ tex.sprint('}')
+ else
+ tex.sprint('\\textcolor{' .. fallback_color .. '}{' .. s .. '}')
+ end
+ end
+\end{luacode}
+
+\makeatletter
+
+%%%%% \IVS[<selector number>]{<character>}
+%%%%% or \IVS<selector number>{<character>}
+%%%%% (<selector number>: 0--239, or `?')
+\def\ltj@ivs@out#1#2{#2\char\numexpr "E0100+#1\relax} % IVS"
+\def\ltj@ivs@list?#1{\directlua{list_ivs('#1')}}
+\def\ltj@ivs@grab@num{\expandafter\expandafter\expandafter\ltj@ivs@out\ltj@grab@num}
+\def\ltj@ivs@nobracket{\@ifnextchar?{\ltj@ivs@list}{\ltj@ivs@grab@num}}
+\def\ltj@ivs@bracket[#1]{\ltj@ivs@nobracket#1}
+\def\IVS{\@ifnextchar[{\ltj@ivs@bracket}{\ltj@ivs@nobracket}}
+
+\let\MJI=\IVS