OSDN Git Service

backport c1f148d and 27609d5.
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Thu, 23 Jan 2014 02:48:32 +0000 (11:48 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Thu, 23 Jan 2014 05:10:23 +0000 (14:10 +0900)
src/addons/luatexja-fontspec.sty
src/ltj-adjust.lua
src/ltj-jfont.lua
src/patches/lltjfont.sty

index b1a9b4a..597e533 100644 (file)
@@ -3,7 +3,7 @@
 %
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luatexja-fontspec}[2013/08/17 fontspec support of LuaTeX-ja]
+\ProvidesPackage{luatexja-fontspec}[2014/01/23 fontspec support of LuaTeX-ja]
 
 \RequirePackage{fontspec,luatexja}
 \ExplSyntaxOn
 %%%%%%%% Now we completely ignore kanjifont definition file.
 
 \DeclareRobustCommand\fontfamily[1]{%
-  \@notkfamfalse\@notffamfalse\edef\tmp@item{{#1}}%
+  \@notkfamfalse\@notffamfalse
+  \edef\tmp@item{'\luatexluaescapestring{#1}'}%
+  \edef\tmp@enc{'\luatexluaescapestring{\f@encoding}'}%
   \ifcsname \k@encoding+#1\endcsname % if \k@encoding+#1 is already defined
     \edef\k@family{#1}%
-  \else
-    \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\k@encoding+%
-    \@notkfamtrue
-  \fi
+  \else\@notkfamtrue\fi
   \ifcsname \f@encoding+#1\endcsname
     \edef\f@family{#1}%
   \else % search font definition file...
-     \ifcsname ffam@list@\f@encoding\endcsname\else
-       \expandafter\gdef\csname ffam@list@\f@encoding\endcsname{}%
-       \expandafter\gdef\csname notffam@list@\f@encoding\endcsname{}%
-     \fi
-     \edef\@templist{\@nameuse{ffam@list@\f@encoding}}%
-     \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
-     \ifin@\edef\f@family{#1}\else
-       \edef\@templist{\@nameuse{notffam@list@\f@encoding}}%
-       \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
-       \ifin@\@notffamtrue\else
-         \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\f@encoding+%
-         \message{(I search font definition file. \@@temp)}%
-         \IfFileExists{\@@temp}{\@tempswztrue}{\@tempswzfalse}%
-         \if@tempswz
-           \expandafter\xdef\csname ffam@list@\f@encoding\endcsname
-             {\@nameuse{ffam@list@\f@encoding}\fam@elt<#1>}\edef\f@family{#1}%
-         \else
-           \expandafter\xdef\csname notffam@list@\f@encoding\endcsname
-             {\@nameuse{notffam@list@\f@encoding}\fam@elt<#1>}\@notffamtrue%
-         \fi
-       \fi
-     \fi
+    \directlua{luatexja.jfont.is_ffam(\tmp@enc, \tmp@item)}%
+    \ifin@\edef\k@family{#1}\else%
+      \directlua{luatexja.jfont.is_Nffam(\tmp@enc, \tmp@item)}%
+      \ifin@\@notffamtrue\else%
+        \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\f@encoding+%
+        \message{(I search kanjifont definition file: \@@temp)}%
+        \IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
+        \if@tempswz
+          \directlua{luatexja.jfont.add_ffam_list(\tmp@enc, \tmp@item)}%
+         \edef\f@family{#1}%
+        \else
+          \directlua{luatexja.jfont.add_Nffam_list(\tmp@enc, \tmp@item)}%
+         \@notffamtrue%
+        \fi
+      \fi
+    \fi
   \fi
   \if@notkfam\if@notffam
       {\ifcsname D@\k@encoding\endcsname\@nameuse{D@\k@encoding}\fi
 \def\try@load@fontshape{%
    \expandafter
    \ifx\csname \f@encoding+\f@family\endcsname\relax
-       \edef\tmp@item{{\directlua{%
-         tex.print(luatexbase.catcodetables["latex-package"], '\f@encoding')}%
-       }}% \f@encoding の展開結果の catcode は 12 であるため,これで補正.
-       \expandafter\expandafter\expandafter
-       \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
+       \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}%
 \ifin@ % Japanese font: we don't search fd.
     \@font@warning{We don't search kanjifont definition
       \MessageBreak for \f@encoding/\f@family}%
 \else % Alphabetic font
-    \@font@info{Try loading font information for
-                   \f@encoding+\f@family}%
+    \@font@info{Try loading font information for \f@encoding+\f@family}%
     \global\expandafter\let
        \csname\f@encoding+\f@family\endcsname\@empty
      \nfss@catcodes
index 458fe98..8849ee5 100644 (file)
@@ -3,7 +3,7 @@
 --
 luatexbase.provides_module({
   name = 'luatexja.adjust',
-  date = '2013/03/14',
+  date = '2014/01/23',
   description = 'Advanced line adjustment for LuaTeX-ja',
 })
 module('luatexja.adjust', package.seeall)
index 12c24e9..8209fe2 100644 (file)
@@ -3,7 +3,7 @@
 --
 luatexbase.provides_module({
   name = 'luatexja.jfont',
-  date = '2014/01/02',
+  date = '2014/01/23',
   description = 'Loader for Japanese fonts',
 })
 module('luatexja.jfont', package.seeall)
@@ -297,6 +297,56 @@ do
 end
 
 ------------------------------------------------------------------------
+-- LATEX INTERFACE
+------------------------------------------------------------------------
+do
+   local kyenc_list, ktenc_list = {}, {}
+   function add_kyenc_list(enc) kyenc_list[enc] = 'true ' end
+   function add_ktenc_list(enc) ktenc_list[enc] = 'true ' end
+   function is_kyenc(enc)
+      tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[enc] or 'false '))
+   end
+   function is_kyenc(enc) 
+      tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[enc] or 'false '))
+   end
+   function is_kenc(enc) 
+      tex.sprint(cat_lp, '\\let\\ifin@\\if' 
+                .. (kyenc_list[enc] or ktenc_list[enc] or 'false '))
+   end
+
+   local kfam_list, Nkfam_list = {}, {}
+   function add_kfam_list(enc, fam)
+      if not kfam_list[enc] then kfam_list[enc] = {} end
+      kfam_list[enc][fam] = 'true '
+   end
+   function add_Nkfam_list(enc, fam)
+      if not Nkfam_list[enc] then Nkfam_list[enc] = {} end
+      Nkfam_list[enc][fam] = 'true '
+   end
+   function is_kfam(enc, fam)
+      tex.sprint(cat_lp, '\\let\\ifin@\\if' 
+                .. (kfam_list[enc] and kfam_list[enc][fam] or 'false ')) end
+   function is_Nkfam(enc, fam)
+      tex.sprint(cat_lp, '\\let\\ifin@\\if' 
+                .. (Nkfam_list[enc] and Nkfam_list[enc][fam] or 'false ')) end
+
+   local ffam_list, Nffam_list = {}, {}
+   function add_ffam_list(enc, fam)
+      if not ffam_list[enc] then ffam_list[enc] = {} end
+      ffam_list[enc][fam] = 'true '
+   end
+   function add_Nffam_list(enc, fam)
+      if not Nffam_list[enc] then Nffam_list[enc] = {} end
+      Nffam_list[enc][fam] = 'true '
+   end
+   function is_ffam(enc, fam)
+      tex.sprint(cat_lp, '\\let\\ifin@\\if' 
+                .. (ffam_list[enc] and ffam_list[enc][fam] or 'false ')) end
+   function is_Nffam(enc, fam)
+      tex.sprint(cat_lp, '\\let\\ifin@\\if' 
+                .. (Nffam_list[enc] and Nffam_list[enc][fam] or 'false ')) end
+end
+------------------------------------------------------------------------
 -- ALTERNATE FONTS
 ------------------------------------------------------------------------
 alt_font_table = {}
@@ -406,13 +456,17 @@ end
 -- ここから先は 新 \selectfont の内部でしか実行されない
 do
    local alt_font_base, alt_font_base_num
-
--- EXT
-   function print_aftl_address(bbase)
-      local t = alt_font_table_latex[bbase]
-      if not t then t = {}; alt_font_table_latex[bbase] = t end
-      tex.sprint(cat_lp, (tostring(t):gsub('table: ','ltjaltfont')))
+   local aftl_base
+   -- EXT
+   function does_alt_set(bbase)
+      aftl_base = alt_font_table_latex[bbase]
+      tex.sprint(cat_lp, '\\if' .. (aftl_base and 'true' or 'false'))
    end
+   -- EXT
+   function print_aftl_address()
+      tex.sprint(cat_lp, ';ltjaltfont' .. tostring(aftl_base):sub(8))
+   end
+
 -- EXT
    function output_alt_font_cmd(bbase)
       alt_font_base = bbase
index 244ae45..6c9529f 100644 (file)
@@ -3,7 +3,7 @@
 % 
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjfont}[2013/05/14 Patch to NFSS2 for LuaTeX-ja]
+\ProvidesPackage{lltjfont}[2014/01/23 Patch to NFSS2 for LuaTeX-ja]
 
 \let\k@encoding\@empty
 \let\ck@encoding\@empty
 \ifdefined\chs\else\newdimen\chs\fi
 \ifdefined\cHT\else\newdimen\cHT\fi
 %\let\afont\font
-\def\inlist@#1#2{%
-  \def\in@@##1<#1>##2##3\in@@{%
-    \ifx\in@##2\in@false\else\in@true\fi}%
-  \in@@#2<#1>\in@\in@@}
-\def\fam@elt{\noexpand\fam@elt}
-\def\enc@elt{\noexpand\enc@elt}
-\let\kenc@list\@empty
-\let\kyenc@list\@empty
-\let\ktenc@list\@empty
+
 \newbox\tstrutbox
 \newbox\zstrutbox
 \def\strut{\relax
   \expandafter\endgroup
   \DeclareYokoKanjiEncoding@}
 \def\DeclareYokoKanjiEncoding@#1#2#3{%
-  \expandafter
-  \ifx\csname T@#1\endcsname\relax
+  \expandafter\ifx\csname T@#1\endcsname\relax
     \def\cdp@elt{\noexpand\cdp@elt}%
     \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
                     {\default@k@family}{\default@k@series}%
                     {\default@k@shape}}%
     \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
-    \def\enc@elt{\noexpand\enc@elt}%
-    \xdef\kyenc@list{\kyenc@list\enc@elt<#1>}%
-    \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
+     \directlua{luatexja.jfont.add_kyenc_list('\luatexluaescapestring{#1}')}%
   \else
     \@font@info{Redeclaring KANJI (yoko) font encoding #1}%
   \fi
   \expandafter\endgroup
   \DeclareTateKanjiEncoding@}
 \def\DeclareTateKanjiEncoding@#1#2#3{%
-  \expandafter
-  \ifx\csname T@#1\endcsname\relax
+  \expandafter\ifx\csname T@#1\endcsname\relax
     \def\cdp@elt{\noexpand\cdp@elt}%
     \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
                     {\default@k@family}{\default@k@series}%
                     {\default@k@shape}}%
     \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
-    \def\enc@elt{\noexpand\enc@elt}%
-    \xdef\ktenc@list{\ktenc@list\enc@elt<#1>}%
-    \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
+    \directlua{luatexja.jfont.add_ktenc_list('\luatexluaescapestring{#1}')}%
   \else
     \@font@info{Redeclaring KANJI (tate) font encoding #1}%
   \fi
       \math@fontsfalse
       \every@math@size{}%
       \fontsize{#6}\z@
-      \edef\tmp@item{{#2}}%
-      \expandafter\expandafter\expandafter
-      \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
-      \ifin@
+      \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#2}')}\ifin@%
         \usekanji{#2}{#3}{#4}{#5}%
         \global\let#1\getjfont
       \else
-        %\expandafter\expandafter\expandafter
-        %\inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
-        %\ifin@
+        %\directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{#2}')}\ifin@%
         %  \usekanji{#2}{#3}{#4}{#5}%
         %  \let\font\tfont
         %\else
 \DeclareRobustCommand\selectfont{%
   \let\tmp@error@fontshape\error@fontshape
   \let\error@fontshape\error@kfontshape
-  \edef\tmp@item{{\k@encoding}}%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
-  \ifin@
+  \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
     \let\cy@encoding\k@encoding
     \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
   \else
-    \expandafter\expandafter\expandafter
-    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
-    \ifin@
-      \let\ct@encoding\k@encoding
-      \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
-    \else
+    %\directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
+    %  \let\ct@encoding\k@encoding
+    %  \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
+    %\else
       \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
-    \fi
+    %\fi
   \fi
-  %\let\font\tfont
-  %\let\k@encoding\ct@encoding
-  %\xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
-  %\pickup@font
-  %\font@name
   \let\k@encoding\cy@encoding
   \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
   \pickup@jfont
   \font@name
-  \expandafter\def\expandafter\k@encoding\tmp@item
+  \edef\tmp@item{{\k@encoding}}\expandafter\def\expandafter\k@encoding\tmp@item
   \kenc@update
   \let\error@fontshape\tmp@error@fontshape
   \if@knjcmd \@knjcmdfalse
        \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname
     \fi
   \fi
-  %\let\font\afont
   \xdef\font@name{\csname\curr@fontshape/\f@size\endcsname}%
   \pickup@font
   \font@name
   \ifx\f@linespread\baselinestretch \else
     \set@fontsize\baselinestretch\f@size\f@baselineskip
   \fi
-  \size@update}
+  \size@update
+% ここからは altfont 用
+  \ltj@@does@alt@set{\curr@kfontshape}%
+    % alt fonts の定義
+    \directlua{luatexja.jfont.output_alt_font_cmd('\luatexluaescapestring{\curr@kfontshape}')}%
+    % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする
+    \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}%
+  \fi
+}
 \def\KanjiEncodingPair#1#2{\@namedef{t@enc@#1}{#2}\@namedef{y@enc@#2}{#1}}
 \KanjiEncodingPair{JY3}{JT3}
 \def\set@fontsize#1#2#3{%
     \fi
 }
 \DeclareRobustCommand\fontencoding[1]{%
-  \edef\tmp@item{{#1}}%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
-  \ifin@ \kanjiencoding{#1}\else\romanencoding{#1}\fi}
+  \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#1}')}\ifin@%
+  \kanjiencoding{#1}\else\romanencoding{#1}\fi}
 \def\@@kenc@update{%
   \default@KT
   \csname T@\k@encoding\endcsname
   \csname D@\k@encoding\endcsname
   \let\kenc@update\relax
   \let\ck@encoding\k@encoding
-  \edef\tmp@item{{\k@encoding}}%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
-  \ifin@ \let\cy@encoding\k@encoding
+  \edef\tmp@enc{'\luatexluaescapestring{\k@encoding}'}
+  \directlua{luatexja.jfont.is_kyenc(\tmp@enc)}\ifin@%
+    \let\cy@encoding\k@encoding
   \else
-    \expandafter\expandafter\expandafter
-    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
-    \ifin@ \let\ct@encoding\k@encoding
-    \else
+    %\directlua{luatexja.jfont.is_ktenc(\tmp@enc)}\ifin@%
+    %  \let\ct@encoding\k@encoding
+    %\else
       \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
-    \fi
+    %\fi
   \fi
 }
 \let\kenc@update\relax
 \newif\if@tempswz
 \DeclareRobustCommand\romanfamily[1]{\edef\f@family{#1}}
 \DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}}
-% \notkfam@list@<enc>: list of non-defined kanji families under <enc>
-% \kfam@list@<enc>:    list of kanji families under <enc>, defined in a .fd file
 \DeclareRobustCommand\fontfamily[1]{%
-  \@notkfamfalse\@notffamfalse\edef\tmp@item{{#1}}%
+  \@notkfamfalse\@notffamfalse
+  \edef\tmp@item{'\luatexluaescapestring{#1}'}%
+  \edef\tmp@enc{'\luatexluaescapestring{\k@encoding}'}%
   \ifcsname \k@encoding+#1\endcsname % if \k@encoding+#1 is already defined
     \edef\k@family{#1}%
   \else % search font definition file...
-     \ifcsname kfam@list@\k@encoding\endcsname\else
-       \expandafter\gdef\csname kfam@list@\k@encoding\endcsname{}%
-       \expandafter\gdef\csname notkfam@list@\k@encoding\endcsname{}%
-     \fi
-     \edef\@templist{\@nameuse{kfam@list@\k@encoding}}%
-     \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+     \directlua{luatexja.jfont.is_kfam(\tmp@enc, \tmp@item)}%
      \ifin@\edef\k@family{#1}\else%
-       \edef\@templist{\@nameuse{notkfam@list@\k@encoding}}%
-       \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+       \directlua{luatexja.jfont.is_Nkfam(\tmp@enc, \tmp@item)}%
        \ifin@\@notkfamtrue\else%
          \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\k@encoding+%
          \message{(I search kanjifont definition file: \@@temp)}%
          \IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
          \if@tempswz
-           \expandafter\xdef\csname kfam@list@\k@encoding\endcsname
-             {\@nameuse{kfam@list@\k@encoding}\fam@elt<#1>}\edef\k@family{#1}%
+           \directlua{luatexja.jfont.add_kfam_list(\tmp@enc, \tmp@item)}%
+          \edef\k@family{#1}%
          \else
-           \expandafter\xdef\csname notkfam@list@\k@encoding\endcsname
-             {\@nameuse{notkfam@list@\k@encoding}\fam@elt<#1>}\@notkfamtrue%
+           \directlua{luatexja.jfont.add_Nkfam_list(\tmp@enc, \tmp@item)}%
+          \@notkfamtrue%
          \fi
        \fi
      \fi
   \fi
+  \edef\tmp@enc{'\luatexluaescapestring{\f@encoding}'}%
   \ifcsname \f@encoding+#1\endcsname
     \edef\f@family{#1}%
   \else % search font definition file...
-     \ifcsname ffam@list@\f@encoding\endcsname\else
-       \expandafter\gdef\csname ffam@list@\f@encoding\endcsname{}%
-       \expandafter\gdef\csname notffam@list@\f@encoding\endcsname{}%
-     \fi
-     \edef\@templist{\@nameuse{ffam@list@\f@encoding}}%
-     \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+     \directlua{luatexja.jfont.is_ffam(\tmp@enc, \tmp@item)}%
      \ifin@\edef\f@family{#1}\else
-       \edef\@templist{\@nameuse{notffam@list@\f@encoding}}%
-       \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+       \directlua{luatexja.jfont.is_Nffam(\tmp@enc, \tmp@item)}%
        \ifin@\@notffamtrue\else
          \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\f@encoding+%
          \message{(I search font definition file: \@@temp)}%
          \IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
          \if@tempswz
-           \expandafter\xdef\csname ffam@list@\f@encoding\endcsname
-             {\@nameuse{ffam@list@\f@encoding}\fam@elt<#1>}\edef\f@family{#1}%
+           \directlua{luatexja.jfont.add_ffam_list(\tmp@enc, \tmp@item)}%
+          \edef\f@family{#1}%
          \else
-           \expandafter\xdef\csname notffam@list@\f@encoding\endcsname
-             {\@nameuse{notffam@list@\f@encoding}\fam@elt<#1>}\@notffamtrue%
+           \directlua{luatexja.jfont.add_Nffam_list(\tmp@enc, \tmp@item)}%
+           \@notffamtrue%
          \fi
        \fi
      \fi
     \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
     \selectfont\ignorespaces}
 \protected\def\usefont#1#2#3#4{%
-  \edef\tmp@item{{#1}}%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
-  \ifin@ \usekanji{#1}{#2}{#3}{#4}%
+  \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{#1}')}\ifin@%
+  \usekanji{#1}{#2}{#3}{#4}%
   \else\useroman{#1}{#2}{#3}{#4}%
   \fi}
 \DeclareRobustCommand\normalfont{%
 
 % #1 の展開結果から encoding 部分をとりだし,それが和文用かどうかの結果を \ifin@ に代入
 \def\ltj@@IsFontJapanese#1{%
-  \expandafter\ltj@@IsFontJapaneseX#1//:%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}}
-\def\ltj@@IsFontJapaneseX#1/#2/:{\edef\tmp@item{{\directlua{%
-  tex.print(luatexbase.catcodetables["latex-package"], '#1')}%
-}}}
+  \directlua{luatexja.jfont.is_kenc(string.match(
+      '\luatexluaescapestring{#1}', '[^/]+'))}}
 
 
 \let\extract@afont\extract@font
 % 異なる和文 enc/fam/ser/shape からは異なるフォント番号が振られるように
 % わざと「ゴミをつける」
 \def\ltj@@patch@external@font#1 at{%
-  #1;\directlua{luatexja.jfont.print_aftl_address(%
-    '\luatexluaescapestring{\f@encoding/\f@family/\f@series/\f@shape}')}\space at%
+  #1\directlua{luatexja.jfont.print_aftl_address()}\space at%
 }
 \def\extract@jfont{%
    \get@external@font
-    \edef\external@font{\expandafter\ltj@@patch@external@font\external@font}%
+    \ltj@@does@alt@set{\f@encoding/\f@family/\f@series/\f@shape}%
+      \edef\external@font{\expandafter\ltj@@patch@external@font\external@font}%
+    \fi
     \expandafter\globaljfont\font@name\external@font\relax
     \font@name%\global\zw=\zw\global\zh=\zh
     \csname \f@encoding+\f@family\endcsname
     \aftergroup\subst@correction
 }
 \def\do@subst@correction{%
-   \ltj@@IsFontJapanese{\curr@fontshape}\ifin@
+   \ltj@@IsFontJapanese{\curr@fontshape}\ifin@%
      \ltj@@ja@do@subst@correction
    \else
      \ltj@@al@do@subst@correction
 %%%% \ClearAlternateKanjiFont<Benc><Bfam><Bser><Bshape>
 % いつも global
 \def\ClearAlternateKanjiFont#1#2#3#4{%
-   \directlua{luatexja.jfont.clear_alt_font_latex(
-      '\luatexluaescapestring{#1/#2/#3/#4}')}}
+   \directlua{luatexja.jfont.clear_alt_font_latex('\luatexluaescapestring{#1/#2/#3/#4}')}}
 
-% \selectfont 上書き
-\let\ltj@@alt@selectfont@orig=\selectfont
-\def\selectfont{%
-  \ltj@@alt@selectfont@orig
-  % alt fonts の定義
-  \directlua{luatexja.jfont.output_alt_font_cmd('\luatexluaescapestring{\curr@kfontshape}')}%
-  % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする
-  \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}%
-}
 \def\ltj@pickup@altfont@aux#1{%
   {\edef\font@name{\csname #1/\f@size\endcsname}\pickup@jfont}%
 }
   \directlua{luatexja.jfont.pickup_alt_font_b(\the\ltj@tempcntc,'\luatexluaescapestring{#2}')}%
 }
 
+\def\ltj@@does@alt@set#1{%
+  \directlua{luatexja.jfont.does_alt_set'\luatexluaescapestring{#1}'}}
+
 \endinput