X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fpatches%2Flltjfont.sty;h=8807c354ff5cbb3e9a5c8155277b5a62d74cd5c8;hb=9547ffbbf587061b74f1804f64a057c2e24ee92c;hp=08f9b7ff0276cf3305cf52d0a1d6043b2ef9ea36;hpb=5b1b236a2d586ae8121b953fec9d3714527aa7dd;p=luatex-ja%2Fluatexja.git diff --git a/src/patches/lltjfont.sty b/src/patches/lltjfont.sty index 08f9b7f..8807c35 100644 --- a/src/patches/lltjfont.sty +++ b/src/patches/lltjfont.sty @@ -3,7 +3,33 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjfont}[2016/02/07 Patch to NFSS2 for LuaTeX-ja] +\ProvidesPackage{lltjfont}[2020-09-26 Patch to NFSS2 for LuaTeX-ja] + +%% patching \DeclareTextComposite +\def\ltj@chardef@text@cmd#1{% + \let\@ifdefinable\@@ifdefinable% + \edef\ltj@chardef@text@cmd@name{\expandafter\@gobble\string#1}% + \afterassignment\ltj@chardef@text@cmd@\ltj@tempcnta +} +\def\ltj@chardef@text@cmd@{% + \ifnum\ltj@tempcnta>"7F + \expandafter\edef\csname \ltj@chardef@text@cmd@name\endcsname{% + \noexpand\ltjalchar\the\ltj@tempcnta\space + }% + \else + \expandafter\chardef\csname \ltj@chardef@text@cmd@name\endcsname\ltj@tempcnta + \fi +} +\def\DeclareTextSymbol#1#2#3{% + \@dec@text@cmd\ltj@chardef@text@cmd#1{#2}#3\relax +} + +\let\ltj@temp@DeclareTextComposite=\DeclareTextComposite +\def\DeclareTextComposite#1#2#3#4{}% +\input{tuenc.def} +\let\DeclareTextComposite=\ltj@temp@DeclareTextComposite +\expandafter\patchcmd\csname TU\string\textasteriskcentered\endcsname{\char}{\ltjalchar}{}{} + \let\k@encoding\@empty \let\ck@encoding\@empty @@ -28,28 +54,69 @@ \ifdefined\cHT\else\newdimen\cHT\fi %\let\afont\font +\let\ystrutbox\strutbox \newbox\dstrutbox \newbox\tstrutbox \newbox\zstrutbox -\def\strut{\relax +\def\strutbox{% + \ifnum\ltjgetparameter{direction}=1 \dstrutbox % dtou + \else\ifnum\ltjgetparameter{direction}=4 \ystrutbox % yoko + \else\tstrutbox % tate and utod + \fi\fi +} +\DeclareRobustCommand\strut{\relax \ifnum\ltjgetparameter{direction}=1 % dtou \ifmmode\copy\dstrutbox\else\unhcopy\dstrutbox\fi \else\ifnum\ltjgetparameter{direction}=4 % yoko - \ifmmode\copy\strutbox\else\unhcopy\strutbox\fi + \ifmmode\copy\ystrutbox\else\unhcopy\ystrutbox\fi \else % tate and utod \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi \fi\fi } -\def\tstrut{\relax\hbox{\tate + +\DeclareRobustCommand\ystrut{\relax\hbox{\ltj@@orig@yoko + \ifmmode\copy\ystrutbox\else\unhcopy\ystrutbox\fi}} +\DeclareRobustCommand\tstrut{\relax\hbox{\ltj@@orig@tate \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi}} -\def\zstrut{\relax\hbox{\tate +\DeclareRobustCommand\dstrut{\relax\hbox{\ltj@@orig@dtou + \ifmmode\copy\dstrutbox\else\unhcopy\dstrutbox\fi}} +\DeclareRobustCommand\zstrut{\relax\hbox{\ltj@@orig@utod \ifmmode\copy\zstrutbox\else\unhcopy\zstrutbox\fi}} -{% - \def\cdp@elt#1#2#3#4{% - \directlua{luatexja.jfont.add_fenc_list('\luatexluaescapestring{#1}')}}% - \cdp@list% + + +\newluafunction\ltj@@add@fenc@@inner +\newluafunction\ltj@@add@kyenc@@inner +\newluafunction\ltj@@add@ktenc@@inner +\newluafunction\ltj@@is@kyenc@@inner +\newluafunction\ltj@@is@ktenc@@inner +\newluafunction\ltj@@is@kenc@@inner +\newluafunction\ltj@@is@ffam@@inner +\newluafunction\ltj@@add@ffam@@inner +\newluafunction\ltj@@add@kfam@@inner +\directlua{% + local lf = lua.get_functions_table() + lf[\the\ltj@@add@fenc@@inner] = luatexja.jfont.add_fenc_list + lf[\the\ltj@@add@kyenc@@inner] = luatexja.jfont.add_kyenc_list + lf[\the\ltj@@add@ktenc@@inner] = luatexja.jfont.add_ktenc_list + lf[\the\ltj@@is@kyenc@@inner] = luatexja.jfont.is_kyenc + lf[\the\ltj@@is@ktenc@@inner] = luatexja.jfont.is_ktenc + lf[\the\ltj@@is@kenc@@inner] = luatexja.jfont.is_kenc + lf[\the\ltj@@is@ffam@@inner] = luatexja.jfont.is_ffam + lf[\the\ltj@@add@ffam@@inner] = luatexja.jfont.add_ffam + lf[\the\ltj@@add@kfam@@inner] = luatexja.jfont.add_kfam } +\luadef\ltj@@add@fenc \ltj@@add@fenc@@inner +\luadef\ltj@@add@kyenc\ltj@@add@kyenc@@inner +\luadef\ltj@@add@ktenc\ltj@@add@ktenc@@inner +\luadef\ltj@@is@kyenc \ltj@@is@kyenc@@inner +\luadef\ltj@@is@ktenc \ltj@@is@ktenc@@inner +\luadef\ltj@@is@kenc \ltj@@is@kenc@@inner +\luadef\ltj@@is@ffam \ltj@@is@ffam@@inner +\luadef\ltj@@add@ffam \ltj@@add@ffam@@inner +\luadef\ltj@@add@kfam \ltj@@add@kfam@@inner + +{\def\cdp@elt#1#2#3#4{\ltj@@add@fenc{#1}}\cdp@list} \def\DeclareFontEncoding{% \begingroup @@ -64,7 +131,7 @@ {\default@family}{\default@series}% {\default@shape}}% \expandafter\let\csname#1-cmd\endcsname\@changed@cmd - \directlua{luatexja.jfont.add_fenc_list('\luatexluaescapestring{#1}')}% + \ltj@@add@fenc{#1}% \else \@font@info{Redeclaring font encoding #1}% \fi @@ -95,7 +162,7 @@ {\default@k@family}{\default@k@series}% {\default@k@shape}}% \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd - \directlua{luatexja.jfont.add_kyenc_list('\luatexluaescapestring{#1}')}% + \ltj@@add@kyenc{#1}% \else \@font@info{Redeclaring KANJI (yoko) font encoding #1}% \fi @@ -114,7 +181,7 @@ {\default@k@family}{\default@k@series}% {\default@k@shape}}% \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd - \directlua{luatexja.jfont.add_ktenc_list('\luatexluaescapestring{#1}')}% + \ltj@@add@ktenc{#1}% \else \@font@info{Redeclaring KANJI (tate) font encoding #1}% \fi @@ -152,7 +219,7 @@ \@empty \else \reserved@a \fi - \directlua{luatexja.jfont.add_ffam('\luatexluaescapestring{#2}')}% + \ltj@@add@ffam{#2}% }% } \def\DeclareKanjiFamily#1#2#3{% @@ -165,7 +232,7 @@ \@empty \else \reserved@a \fi - \directlua{luatexja.jfont.add_kfam('\luatexluaescapestring{#2}')}% + \ltj@@add@kfam{#2}% }% } \def\DeclareKanjiSubstitution#1#2#3#4{% @@ -185,10 +252,23 @@ \cdp@list \xdef\cdp@list{\the\toks@}% \endgroup - \global\@namedef{D@#1}{\def\default@family{#2}% - \def\default@series{#3}% - \def\default@shape{#4}}% + \global\@namedef{D@#1}{\def\default@k@family{#2}% + \def\default@k@series{#3}% + \def\default@k@shape{#4}}% \fi} +\let\wrong@ja@fontshape\wrong@fontshape +\let\wrong@al@fontshape\wrong@fontshape +\patchcmd\wrong@ja@fontshape{\default@shape}{\default@k@shape}{}{} +\patchcmd\wrong@ja@fontshape{\default@series}{\default@k@series}{}{} +\patchcmd\wrong@ja@fontshape{\default@family}{\default@k@family}{}{} +\def\wrong@fontshape{% + \ltj@@is@kenc{\f@encoding}\ifin@% + \wrong@ja@fontshape + \else + \wrong@al@fontshape + \fi +} +\@onlypreamble\DeclareKanjiSubstitution \def\DeclareErrorKanjiFont#1#2#3#4#5{% \xdef\error@kfontshape{% \noexpand\expandafter\noexpand\split@name\noexpand\string @@ -197,25 +277,26 @@ \gdef\default@k@family{#2}% \gdef\default@k@series{#3}% \gdef\default@k@shape{#4}% - \global\let\k@family\default@k@family - \global\let\k@series\default@k@series - \global\let\k@shape\default@k@shape - \gdef\f@size{#5}% - \gdef\f@baselineskip{#5pt}} -\@onlypreamble\DeclareKanjiSubstitution + } \@onlypreamble\DeclareErrorKanjiFont + +\newif\ifltjselectfont@force@define \def\DeclareFixedFont#1#2#3#4#5#6{% \begingroup \math@fontsfalse \every@math@size{}% \fontsize{#6}\z@ - \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#2}')}\ifin@% + \ltj@@is@kyenc{#2}\ifin@% + \ltjselectfont@force@definetrue \usekanji{#2}{#3}{#4}{#5}% \global\let#1\getjfont + \ltjselectfont@force@definefalse \else - \directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{#2}')}\ifin@% + \ltj@@is@ktenc{#2}\ifin@% + \ltjselectfont@force@definetrue \usekanji{#2}{#3}{#4}{#5}% \global\let#1\gettfont + \ltjselectfont@force@definefalse \else \useroman{#2}{#3}{#4}{#5}% \global\expandafter\let\expandafter#1\the\font @@ -267,7 +348,7 @@ \fi } \newif\if@knjcmd -\def\userelfont{\@knjcmdtrue} +\DeclareRobustCommand\userelfont{\@knjcmdtrue} \RequirePackage{everysel} @@ -275,52 +356,60 @@ \expandafter\expandafter\expandafter\let \expandafter\expandafter\csname ltj@@orig@selectfont\endcsname\csname selectfont\space\endcsname \@EverySelectfont@Init +%\let\ltj@@font@info\@font@info +%\let\ltj@@font@warning\@font@warning \def\@EverySelectfont@Init{% \expandafter\let\csname selectfont\space \endcsname \ltj@@orig@selectfont \ltj@@EverySelectfont@Init } +\def\ltj@selectfont@tate{% + \let\k@encoding\ct@encoding + \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}% + \pickup@tfont + \ifnum\ltjgetparameter{direction}=3 \font@name + \ltj@@does@alt@set{\curr@kfontshape}{% + % alt fonts の定義 + \directlua{luatexja.jfont.output_alt_font_cmd('t', '\luatexluaescapestring{\curr@kfontshape}')}% + % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする + \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}% + }% + \fi} +\def\ltj@selectfont@yoko{% + \let\k@encoding\cy@encoding + \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}% + \pickup@jfont + \unless\ifnum\ltjgetparameter{direction}=3 \font@name + \ltj@@does@alt@set{\curr@kfontshape}{% + % alt fonts の定義 + \directlua{luatexja.jfont.output_alt_font_cmd('y', '\luatexluaescapestring{\curr@kfontshape}')}% + % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする + \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}% + }% + \fi} \def\ltj@selectfont@patch{% - \directlua{luatexja.base.start_time_measure('selectfont')}% - \let\tmp@error@fontshape\error@fontshape + \ltj@@start@time@measure{selectfont}% + \let\tmp@error@fontshape\error@fontshape \let\error@fontshape\error@kfontshape - \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{\k@encoding}')}\ifin@% + \ltj@@is@kyenc{\k@encoding}\ifin@% \let\cy@encoding\k@encoding + \ensure@KanjiEncodingPair{t}% \edef\ct@encoding{\csname t@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}% + \ltj@@is@ktenc{\k@encoding}\ifin@% + \let\ct@encoding\k@encoding + \ensure@KanjiEncodingPair{y}% + \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}% \else \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha \fi \fi -% - \let\k@encoding\ct@encoding - \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}% - \pickup@tfont - \font@name - \ltj@@does@alt@set{\curr@kfontshape}% - % alt fonts の定義 - \directlua{luatexja.jfont.output_alt_font_cmd('t', '\luatexluaescapestring{\curr@kfontshape}')}% - % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする - \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}% - \fi -% - \let\k@encoding\cy@encoding - \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}% - \pickup@jfont - \font@name - \ltj@@does@alt@set{\curr@kfontshape}% - % alt fonts の定義 - \directlua{luatexja.jfont.output_alt_font_cmd('y', '\luatexluaescapestring{\curr@kfontshape}')}% - % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする - \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}% - \fi + \global\let\ltj@afont@name=\font@name + \ltj@selectfont@tate\ltj@selectfont@yoko % \edef\tmp@item{{\k@encoding}}\expandafter\def\expandafter\k@encoding\tmp@item \kenc@update + \global\let\font@name=\ltj@afont@name \let\error@fontshape\tmp@error@fontshape -% \if@knjcmd \@knjcmdfalse \expandafter\ifx \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax @@ -335,11 +424,52 @@ % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり \fi \fi - \directlua{luatexja.base.stop_time_measure('selectfont')}% + \global\let\font@name=\ltj@afont@name + \ltj@@stop@time@measure{selectfont}% } \EverySelectfont{\ltj@selectfont@patch} +\bgroup + \def\ltj@@dir@patch#1#2#3{% + \global\csletcs{ltj@@orig@#1}{#1}% + \protected\expandafter\xdef\csname #1\endcsname{% + \csname ltj@@orig@#1\endcsname + \unexpanded{\ifnum#3<\z@\let\ltj@@protect\protect\set@typeset@protect}% + \unexpanded{\global\let\ltj@afont@name=\font@name}% + \expandonce{\csname ltj@selectfont@#2\endcsname}% + \unexpanded{\global\let\font@name=\ltj@afont@name}% + \unexpanded{\let\protect\ltj@@protect\fi}% + }% + } + \ltj@@dir@patch{yoko}{yoko}{\ltj@curjfnt} + \ltj@@dir@patch{tate}{tate}{\ltj@curtfnt} + \ltj@@dir@patch{utod}{yoko}{\ltj@curjfnt} + \ltj@@dir@patch{dtou}{yoko}{\ltj@curjfnt} + \global\let\ltj@@box@dirhook@orig=\ltj@@box@dirhook + \gdef\ltj@@box@dirhook{% + \ltj@@box@dirhook@orig + \ifnum\ltjgetparameter{direction}=11 + \ifnum\ltj@curjfnt<\z@ + \let\ltj@@protect\protect\set@typeset@protect + \global\let\ltj@afont@name=\font@name + \ltj@selectfont@yoko + \global\let\font@name=\ltj@afont@name + \let\protect\ltj@@protect + \fi + \fi + } +\egroup + \def\KanjiEncodingPair#1#2{\@namedef{t@enc@#1}{#2}\@namedef{y@enc@#2}{#1}} +\def\ensure@KanjiEncodingPair#1{% + \edef\reserved@a{\csname #1@enc@\k@encoding\endcsname}% + \edef\reserved@b{\csname c#1@encoding\endcsname}% + \ifcat\relax\reserved@a + \@latex@error + {KANJI Encoding pair for `\k@encoding' undefined}% + {Use \string\KanjiEncodingPair, falling back to `\reserved@b'...}% + \expandafter\edef\reserved@a{\reserved@b}% + \fi} \def\set@fontsize#1#2#3{% \@defaultunits\@tempdimb#2pt\relax\@nnil \edef\f@size{\strip@pt\@tempdimb}% @@ -352,79 +482,55 @@ \baselineskip\f@linespread\baselineskip \normalbaselineskip\baselineskip \adjustbaseline - \setbox\strutbox\hbox{\yoko + \setbox\ystrutbox\hbox{\ltj@@orig@yoko \vrule\@width\z@ \@height.7\baselineskip \@depth.3\baselineskip}% - \setbox\dstrutbox\hbox{\dtou + \setbox\dstrutbox\hbox{\ltj@@orig@dtou \vrule\@width\z@ \@height.7\baselineskip \@depth.3\baselineskip}% - \setbox\tstrutbox\hbox{\tate + \setbox\tstrutbox\hbox{\ltj@@orig@tate \vrule\@width\z@ \@height.5\baselineskip \@depth.5\baselineskip}% - \setbox\zstrutbox\hbox{\tate + \setbox\zstrutbox\hbox{\ltj@@orig@utod \vrule\@width\z@ \@height.7\baselineskip \@depth.3\baselineskip}% - \let\size@update\relax}} - -\ifdefined\newluafunction - \newluafunction\ltj@@adjust@baseline@inner - \begingroup\catcode`\~=12 - \directlua{% - local nulltable = {} - local t = lua.get_functions_table() - local getfont, dir_tate = font.getfont, luatexja.dir_table.dir_tate - local fmt, get_attr = luatexja.jfont.font_metric_table, tex.getattribute - local setdimen, set_attr = tex.setdimen, tex.setattribute - local dir = luatexja.unary_pars.direction - t[\the\ltj@@adjust@baseline@inner] = function() - local ft = fmt[get_attr('ltj@curtfnt')] or nulltable - ft = ft and ft.char_type or nulltable - local fk = ft and ft[0] or nulltable - local ht, dp, wd = fk.height or 0, fk.depth or 0, - fk.width or ft.zw or 0 - local fm - = ((getfont(font.current()) or nulltable) - .characters or nulltable)[77] or nulltable %% 'M' - set_attr('ltj@tablshift', - 0.5*((fm.height or 0)- (fm.depth or 0) - ht+ dp)) - if dir() ~= dir_tate then - ft = fmt[get_attr('ltj@curjfnt')] or nulltable - ft = ft and ft.char_type or nulltable - fk = ft and ft[0] or nulltable - ht, dp, wd = fk.height or 0, fk.depth or 0, - fk.width or ft.zw or 0 - end - setdimen('cht', ht); setdimen('cdp', dp) - setdimen('cwd', wd); setdimen('chs', wd) - setdimen('cHT', ht+dp) + \let\size@update\relax}} + +\newluafunction\ltj@@adjust@baseline@inner +\begingroup\catcode`\~=12 +\directlua{% + local nulltable = {} + local t = lua.get_functions_table() + local getfont, dir_tate = font.getfont, luatexja.dir_table.dir_tate + local fmt, get_attr = luatexja.jfont.font_metric_table, tex.getattribute + local getcount=tex.getcount + local setdimen, set_attr = tex.setdimen, tex.setattribute + local dir = luatexja.unary_pars.direction + t[\the\ltj@@adjust@baseline@inner] = function() + local ft = fmt[get_attr('ltj@curtfnt')] or nulltable + ft = ft.char_type or nulltable + local fk = ft[0] or nulltable + local ht, dp, wd = fk.height or 0, fk.depth or 0, + fk.width or ft.zw or 0 + local fm + = ((getfont(font.current()) or nulltable) + .characters or nulltable)[77] or nulltable %% 'M' + set_attr('ltj@tablshift', + tex.round(0.5*((fm.height or 0)- (fm.depth or 0) - ht+ dp))) + if dir() ~= dir_tate then + ft = fmt[get_attr('ltj@curjfnt')] or nulltable + ft = ft.char_type or nulltable + fk = ft[0] or nulltable + ht, dp, wd = fk.height or 0, fk.depth or 0, + fk.width or ft.zw or 0 end - }\endgroup - \def\adjustbaseline{\luafunction\ltj@@adjust@baseline@inner - \cvs\normalbaselineskip} -\else - \newbox\adjust@box - \newbox\adjust@box@aux - \newdimen\adjust@dimen - \def\adjustbaseline{% - \setbox\adjust@box\hbox{% - \ltj@ykblshift\z@\ltj@tkblshift\z@ 漢}% - \cht\ht\adjust@box - \cdp\dp\adjust@box - \cwd\wd\adjust@box - \cvs\normalbaselineskip - \chs\cwd - \cHT\cht \advance\cHT\cdp - \setbox\adjust@box@aux\hbox{\tate\ltj@tkblshift\z@ 漢}% - \setbox\adjust@box\hbox{\tate\ltj@tablshift\z@ M}% - \adjust@dimen\ht\adjust@box - \advance\adjust@dimen\dp\adjust@box - \advance\adjust@dimen-\ht\adjust@box@aux - \divide\adjust@dimen\tw@ - \advance\adjust@dimen0.5\dp\adjust@box@aux - \advance\adjust@dimen-\dp\adjust@box - \ltj@tablshift=\adjust@dimen - } -\fi + setdimen('cht', ht); setdimen('cdp', dp) + setdimen('cwd', wd); setdimen('chs', wd) + setdimen('cHT', ht+dp) + end +}\endgroup +\DeclareRobustCommand\adjustbaseline{\luafunction\ltj@@adjust@baseline@inner + \cvs\normalbaselineskip} \DeclareRobustCommand\romanencoding[1]{% \expandafter\ifx\csname T@#1\endcsname\relax \@latex@error{Encoding scheme `#1' unknown}\@eha @@ -450,19 +556,17 @@ \fi } \DeclareRobustCommand\fontencoding[1]{% - \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#1}')}\ifin@% - \kanjiencoding{#1}\else\romanencoding{#1}\fi} + \ltj@@is@kyenc{#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@enc{'\luatexluaescapestring{\k@encoding}'} - \directlua{luatexja.jfont.is_kyenc(\tmp@enc)}\ifin@% + \ltj@@is@kyenc{\k@encoding}\ifin@ \let\cy@encoding\k@encoding \else - \directlua{luatexja.jfont.is_ktenc(\tmp@enc)}\ifin@% + \ltj@@is@ktenc{\k@encoding}\ifin@ \let\ct@encoding\k@encoding \else \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha @@ -496,27 +600,28 @@ \DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}} \DeclareRobustCommand\fontfamily[1]{% \@notkfamfalse\@notffamfalse - \edef\tmp@item{'\luatexluaescapestring{#1}'}% % - \directlua{luatexja.jfont.search_kfam(\tmp@item, \@ltj@use@fd)}% + \directlua{luatexja.jfont.search_kfam()}{#1}{\@ltj@use@fd}% \ifin@\edef\k@family{#1}\else\@notkfamtrue\fi % % alphabetic fonts part - \directlua{luatexja.jfont.is_ffam(\tmp@item)}% + \ltj@@is@ffam{#1}% \ifin@\edef\f@family{#1}\else % checking is_stored_ffam is not sufficient, % since LuaTeX-ja doesn't know whats fonts are defined before LuaTeX-ja is loaded. \ifcsname \f@encoding+#1\endcsname % easy case - \directlua{luatexja.jfont.add_ffam(\tmp@item)}\edef\f@family{#1}% + \ltj@@add@ffam{#1}\edef\f@family{#1}% \else \@tempswafalse - \def\cdp@elt##1{\ifcsname ##1+#1\endcsname\@tempswatrue\fi}% - \directlua{luatexja.jfont.search_ffam_declared()}% + \def\cdp@elt##1{\ifcsname ##1+#1\endcsname% + \@tempswatrue\def\cdp@elt####1\relax{}% + \fi}% + \directlua{luatexja.jfont.search_ffam_declared()}\relax% \if@tempswz - \directlua{luatexja.jfont.add_ffam(\tmp@item)}\edef\f@family{#1}% + \ltj@@add@ffam{#1}\edef\f@family{#1}% \else % now we search Nffam_list and font definition files. - \directlua{luatexja.jfont.search_ffam_fd(\tmp@item)}% + \directlua{luatexja.jfont.search_ffam_fd()}{#1}% \ifin@\edef\f@family{#1}\else\@notffamtrue\fi \fi \fi @@ -526,46 +631,370 @@ \edef\k@family{#1}\edef\f@family{#1}% \fi\fi } + +\newcount\ltj@@latex@plv \ltj@@latex@plv=-1 +\ifltj@ltfilehook@avail % 2020-10-01 + \ltj@@latex@plv=1000 +\else\ifdefined\@rmfamilyhook % 2020-02-02 + \ifx\@forced@seriestrue\@undefined % 2020-02-02 pl0--2 + \@latex@error + {Please update LaTeX2e!^^J\space\space + At least LaTeX2e 2020-02-02 patch level 3 is required} + {LaTeX2e 2020-02-02 patch level 2 (and 4) has a bug.} + \else + \ltj@@latex@plv=300 + \unless\ifx\series@maybe@drop@one@m@x\@undefined % pl5 + develop + \ltj@@latex@plv=501 + \else\unless\ifx\series@maybe@drop@one@m\@undefined % patch level 5 + \ltj@@latex@plv=500 + \fi\fi + \fi +\fi\fi + +%%%%%% +\ifnum\ltj@@latex@plv>0 +%%%% LaTeX >= 2020-02-02 +\newif\if@shape@roman@kanji + +\def\merge@kanji@series#1{% + \expandafter\expandafter\expandafter + \merge@kanji@series@ + \csname series@\k@series @#1\endcsname + {#1}% + \@nil +} + +\ifnum\ltj@@latex@plv>500 % !!! pl5 + develop + \def\set@target@series@kanji#1{% + \edef\k@series{#1}% + \series@maybe@drop@one@m\k@series\k@series + } +\else\ifnum\ltj@@latex@plv>300 % !!! pl5 + \def\set@target@series@kanji#1{% + \edef\k@series{#1}% + \expandafter\series@maybe@drop@one@m\expandafter{\k@series}\k@series + } +\else % !!! pl 3, 4 + \def\set@target@series@kanji#1{% + \edef\k@series{#1}% + \edef\k@series{\expandafter\series@drop@one@m\k@series mm\series@drop@one@m}% + } +\fi\fi + +\def\merge@kanji@series@#1#2#3\@nil{% + \def\reserved@a{#3}% + \ifx\reserved@a\@empty + \set@target@series@kanji{#2}% + \else + \begingroup\let\f@encoding\k@encoding\let\f@family\k@family + \maybe@load@fontshape\endgroup + \edef\reserved@a{\k@encoding /\k@family /#1/\k@shape}% + \ifcsname \reserved@a \endcsname + \set@target@series@kanji{#1}% + \else + \ifcsname \k@encoding /\k@family /#2/\k@shape \endcsname + \set@target@series@kanji{#2}% + {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% + \else + \set@target@series@kanji{#3}% + {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% + \fi + \fi + \fi +} +\def\merge@kanji@shape#1{% + \expandafter\expandafter\expandafter + \merge@kanji@shape@ + \csname shape@\k@shape @#1\endcsname + {#1}% + \@nil +} +\def\merge@kanji@shape@#1#2#3\@nil{% + \def\reserved@a{#3}% + \ifx\reserved@a\@empty + \if@shape@roman@kanji + \set@safe@kanji@shape{#2}{}% + \else + \edef\k@shape{#2}% + \fi + \else + \begingroup\let\f@encoding\k@encoding\let\f@family\k@family + \maybe@load@fontshape\endgroup + \edef\reserved@a{\k@encoding /\k@family /\k@series/#1}% + \ifcsname \reserved@a\endcsname + \edef\k@shape{#1}% + \else + \ifcsname \k@encoding /\k@family /\k@series/#2\endcsname + \edef\k@shape{#2}% + {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% + \else + \if@shape@roman@kanji + \set@safe@kanji@shape{#3}% + {{\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}}% + \else + \edef\k@shape{#3}% + {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% + \fi + \fi + \fi + \fi +} +\ifnum\ltj@@latex@plv=300 % !!! pl3, 4 + \DeclareRobustCommand\romanseries[1]{\merge@font@series{#1}} + \DeclareRobustCommand\kanjiseries[1]{\merge@kanji@series{#1}} + \DeclareRobustCommand\fontseries[1]{% + \merge@font@series{#1}\merge@kanji@series{#1}} + \DeclareRobustCommand\romanseriesforce[1]{\edef\f@series{#1}} + \DeclareRobustCommand\kanjiseriesforce[1]{\edef\k@series{#1}} + \DeclareRobustCommand\fontseriesforce[1]{% + \edef\f@series{#1}\edef\k@series{#1}} +\else % !!! pl 5 + \DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse\merge@font@series{#1}} + \DeclareRobustCommand\kanjiseries[1]{\@forced@seriesfalse\merge@kanji@series{#1}} + \DeclareRobustCommand\fontseries[1]{% + \@forced@seriesfalse\merge@font@series{#1}\merge@kanji@series{#1}} + \DeclareRobustCommand\romanseriesforce[1]{\@forced@seriestrue\merge@font@series{#1}} + \DeclareRobustCommand\kanjiseriesforce[1]{\@forced@seriestrue\merge@kanji@series{#1}} + \DeclareRobustCommand\fontseriesforce[1]{% + \@forced@seriestrue\merge@font@series{#1}\merge@kanji@series{#1}} +\fi +\DeclareRobustCommand\romanshape[1]{\merge@font@shape{#1}} +\DeclareRobustCommand\kanjishape[1]{\merge@kanji@shape{#1}} +\DeclareRobustCommand\fontshape[1]{% + \@shape@roman@kanjitrue + \merge@font@shape{#1}\merge@kanji@shape{#1}% + \@shape@roman@kanjifalse +} +\DeclareRobustCommand\romanshapeforce[1]{\edef\f@shape{#1}} +\DeclareRobustCommand\kanjishapeforce[1]{\edef\k@shape{#1}} +\DeclareRobustCommand\fontshapeforce[1]{\set@safe@kanji@shape{#1}{}\romanshapeforce{#1}} +\DeclareRobustCommand\usekanji[4]{% + \kanjiencoding{#1}\edef\k@family{#2}\edef\k@series{#3}\edef\k@shape{#4}% + \selectfont\ignorespaces} +\DeclareRobustCommand\useroman[4]{% + \romanencoding{#1}\edef\f@family{#2}\edef\f@series{#3}\edef\f@shape{#4}% + \selectfont\ignorespaces} +%%%% LaTeX >= 2020-02-02 END +\else +%%%% LaTeX 2019-10-01 \DeclareRobustCommand\romanseries[1]{\edef\f@series{#1}} \DeclareRobustCommand\kanjiseries[1]{\edef\k@series{#1}} \DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}} \DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}} \DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}} -\DeclareRobustCommand\fontshape[1]{\kanjishape{#1}\romanshape{#1}} -\def\usekanji#1#2#3#4{% +\DeclareRobustCommand\fontshape[1]{\set@safe@kanji@shape{#1}{}\romanshape{#1}} +\DeclareRobustCommand\usekanji[4]{% \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}% \selectfont\ignorespaces} -\def\useroman#1#2#3#4{% +\DeclareRobustCommand\useroman[4]{% \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}% \selectfont\ignorespaces} +%%%% LaTeX 2019-10-01 END +\fi +%%%% + +\def\set@safe@kanji@shape#1#2{% + \edef\reserved@b{\k@encoding /\k@family /\k@series/#1}% + \ifcsname \reserved@b\endcsname + \edef\k@shape{#1}% + #2% + \else + \@kanji@shape@nochange@info{\reserved@b}% + \fi +} +\def\@kanji@shape@nochange@info#1{% + \@font@info{Kanji font shape `#1' undefined\MessageBreak + No change}% +} + \protected\def\usefont#1#2#3#4{% - \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{#1}')}\ifin@% - \usekanji{#1}{#2}{#3}{#4}% + \ltj@@is@kenc{#1}\ifin@\usekanji{#1}{#2}{#3}{#4}% \else\useroman{#1}{#2}{#3}{#4}% \fi} + +\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0 +%%%% LaTeX >= 2020-02-02 +\let\prepare@family@series@update@kanji=\prepare@family@series@update +\patchcmd\prepare@family@series@update{\fontfamily}{\romanfamily}{}{} +\patchcmd\prepare@family@series@update@kanji{\fontfamily}{\kanjifamily}{}{} +\patchcmd\prepare@family@series@update@kanji{\update@series@target@value}{\update@series@target@value@kanji}{}{} +\patchcmd\prepare@family@series@update@kanji{\f@family}{\k@family}{}{} +\patchcmd\prepare@family@series@update@kanji{\@meta@family@list}{\@meta@family@list@kanji}{}{} +\patchcmd\prepare@family@series@update@kanji{\fontfamily}{\kanjifamily}{}{} +\patchcmd\prepare@family@series@update@kanji{\maybe@load@fontshape} + {\begingroup\let\f@encoding\k@encoding\let\f@family\k@family + \maybe@load@fontshape\endgroup}{}{} +\patchcmd\prepare@family@series@update@kanji{\f@series}{\k@series}{}{} +\patchcmd\prepare@family@series@update@kanji{\f@series}{\k@series}{}{} +\let\update@series@target@value@kanji=\update@series@target@value +\patchcmd\update@series@target@value@kanji{\f@family}{\k@family}{}{} +\patchcmd\update@series@target@value@kanji{\f@series}{\k@series}{}{} +\patchcmd\update@series@target@value@kanji{\f@series}{\k@series}{}{} +\patchcmd\update@series@target@value@kanji{\f@series}{\k@series}{}{} +\patchcmd\update@series@target@value@kanji{\f@series}{\k@series}{}{} +\def\@meta@family@list@kanji{\@elt{mc}\@elt{gt}\@elt{jtt}} + +\def\@ltj@hook@series@default#1#2#3{ + \ifltj@ltfilehook@avail % 2020-10-01 + \AddToHook{#1/defaults}{#2}% + \else\ifcsname @set#1defaultshook\endcsname %after 2020-04-07 + \expandafter\g@addto@macro\csname @set#1defaultshook\endcsname{#2}% + \else % 2020-02-02 + \expandafter\patchcmd\csname #1 \endcsname{#3}{#3#2}{}{} + \fi\fi +} +\@ltj@hook@series@default{bfseries}{ + \let\bfseries@mc\bfdef@ult + \let\bfseries@gt\bfdef@ult + \let\bfseries@jtt\bfdef@ult +}{ + \let\bfseries@rm\bfdef@ult + \let\bfseries@sf\bfdef@ult + \let\bfseries@tt\bfdef@ult +} +\@ltj@hook@series@default{mdseries}{ + \let\mdseries@mc\mddef@ult + \let\mdseries@gt\mddef@ult + \let\mdseries@jtt\mddef@ult +}{ + \let\mdseries@rm\mddef@ult + \let\mdseries@sf\mddef@ult + \let\mdseries@tt\mddef@ult +} +\let\@ltj@hook@series@default\@undefined + +\expandafter\patchcmd\csname bfseries \endcsname{% + \ifx\f@family\rmdef@ult \fontseries\bfseries@rm + \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf + \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt + \else \fontseries\bfdefault + \fi\fi\fi +}{% + \ifx\f@family\rmdef@ult \romanseries\bfseries@rm + \else\ifx\f@family\sfdef@ult \romanseries\bfseries@sf + \else\ifx\f@family\ttdef@ult \romanseries\bfseries@tt + \else \romanseries\bfdefault + \fi\fi\fi +}{}{} +\expandafter\patchcmd\csname mdseries \endcsname{% + \ifx\f@family\rmdef@ult \fontseries\mdseries@rm + \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf + \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt + \else \fontseries\mddefault + \fi\fi\fi +}{% + \ifx\f@family\rmdef@ult \romanseries\mdseries@rm + \else\ifx\f@family\sfdef@ult \romanseries\mdseries@sf + \else\ifx\f@family\ttdef@ult \romanseries\mdseries@tt + \else \romanseries\mddefault + \fi\fi\fi +}{}{} + +\def\@ltj@hook@series#1#2{ + \ifltj@ltfilehook@avail % 2020-10-01 + \AddToHook{#1}{#2}% + \else % 2020-02-02 + \expandafter\patchcmd\csname #1 \endcsname{\selectfont}{#2\selectfont}{}{} + \fi +} +\@ltj@hook@series{bfseries}{% + \ifx\k@family\mcdef@ult \kanjiseries\bfseries@mc + \else\ifx\k@family\gtdef@ult \kanjiseries\bfseries@gt + \else\ifx\k@family\jttdef@ult\kanjiseries\bfseries@jtt + \else \kanjiseries\bfdefault + \fi\fi\fi +} +\@ltj@hook@series{mdseries}{% + \ifx\k@family\mcdef@ult \kanjiseries\mdseries@mc + \else\ifx\k@family\gtdef@ult \kanjiseries\mdseries@gt + \else\ifx\k@family\jttdef@ult\kanjiseries\mdseries@jtt + \else \kanjiseries\mddefault + \fi\fi\fi +} +\let\@ltj@hook@series\@undefined + +\def\@ltj@hook@efd#1#2{ + \ifltj@ltfilehook@avail % 2020-10-01 + \AddToHook{expand@font@defaults}{#1}% + \else\ifdefined\@expandfontdefaultshook %after 2020-04-07 + \g@addto@macro\@expandfontdefaultshook{#1#2}% + \else % 2020-02-02 + \appto\expand@font@defaults{#1#2}% + \fi\fi +} +\@ltj@hook@efd{% + \edef\mcdef@ult{\mcdefault}% + \edef\gtdef@ult{\gtdefault}% + \edef\jttdef@ult{\jttdefault}% +}{\edef\kanjidef@ult{\kanjifamilydefault}} +\let\@ltj@hook@efd\@undefined + +\ifltj@ltfilehook@avail % 2020-10-01 + \appto\init@series@setup{ + \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel + \mdseries + \let\kanjiseriesdefault\k@series + \fi + } +\else + \appto\init@series@setup{% + \ifx\kanjidef@ult\mcdef@ult \mcfamily + \else\ifx\kanjidef@ult\gtdef@ult \gtfamily + \else\ifx\kanjidef@ult\jttdef@ult \jttfamily + \fi\fi\fi + } +\fi + +\def\@ltj@hook@dfh#1{ + \ifltj@ltfilehook@avail % 2020-10-01 + \AddToHook{normalfont}{#1}% + \else\ifdefined\@defaultfamilyhook + \g@addto@macro\@defaultfamilyhook{#1}% + \else % 2020-02-02 + \expandafter\patchcmd\csname normalfont \endcsname{\selectfont}{#1\selectfont}{}{} + \let\reset@font\normalfont + \fi\fi +} +\@ltj@hook@dfh{% + \kanjiencoding{\kanjiencodingdefault}% + \edef\k@family{\kanjifamilydefault}% + \edef\k@series{\kanjiseriesdefault}% + \edef\k@shape{\kanjishapedefault}% +} +\let\@ltj@hook@dfh\@undefined +%%%% LaTeX >= 2020-02-02 END +\else +%%%% LaTeX 2019-10-01 \DeclareRobustCommand\normalfont{% - \kanjiencoding{\kanjiencodingdefault}% - \kanjifamily{\kanjifamilydefault}% - \kanjiseries{\kanjiseriesdefault}% - \kanjishape{\kanjishapedefault}% - \romanencoding{\encodingdefault}% - \romanfamily{\familydefault}% - \romanseries{\seriesdefault}% - \romanshape{\shapedefault}% - \selectfont\ignorespaces} + \useroman\encodingdefault\familydefault\seriesdefault\shapedefault + \usekanji\kanjiencodingdefault\kanjifamilydefault\kanjiseriesdefault\kanjishapedefault} \let\reset@font\normalfont -\DeclareRobustCommand\mcfamily - {\not@math@alphabet\mcfamily\mathmc - \kanjifamily\mcdefault\selectfont} -\DeclareRobustCommand\gtfamily - {\not@math@alphabet\gtfamily\mathgt - \kanjifamily\gtdefault\selectfont} +%%%% LaTeX 2019-10-01 END +\fi + + + +\ifdefined\prepare@family@series@update@kanji\else +%%%% LaTeX 2019-10-01 +\def\prepare@family@series@update@kanji#1{\kanjifamily} +\fi + +\DeclareRobustCommand\mcfamily{% + \unless\ifltj@disablejfam\not@math@alphabet\mcfamily\mathmc\fi + \prepare@family@series@update@kanji{mc}\mcdefault + \selectfont} +\DeclareRobustCommand\gtfamily{% + \unless\ifltj@disablejfam\not@math@alphabet\gtfamily\mathgt\fi + \prepare@family@series@update@kanji{gt}\gtdefault + \selectfont} + + \let\romanprocess@table\process@table \def\kanjiprocess@table{% - \kanjiencoding{\kanjiencodingdefault}% - \kanjifamily{\kanjifamilydefault}% - \kanjiseries{\kanjiseriesdefault}% - \kanjishape{\kanjishapedefault}% + \kanjiencoding\kanjiencodingdefault% + \edef\k@family{\kanjifamilydefault}% + \edef\k@series{\kanjiseriesdefault}% + \edef\k@shape{\kanjishapedefault}% } \def\process@table{% \romanprocess@table @@ -573,58 +1002,104 @@ } \@onlypreamble\romanprocess@table \@onlypreamble\kanjiprocess@table -\DeclareTextCommandDefault{\textunderscore}{% - \leavevmode\kern.06em - \vbox{\hrule\@width.3em}} %%%%%% LuaTeX-ja specific -% #1 の展開結果から encoding 部分をとりだし,それが和文用かどうかの結果を \ifin@ に代入 -\def\ltj@@IsFontJapanese#1{% - \directlua{luatexja.jfont.is_kenc(string.match( - '\luatexluaescapestring{#1}', '[^/]+'))}} - +% #1/#2 の展開結果から encoding 部分 (#1) をとりだし,それが和文用かどうかの結果を \ifin@ に代入 +\def\ltj@@IsFontJapanese#1/#2\relax{\ltj@@is@kenc{#1}} \let\extract@afont\extract@font \def\pickup@jfont{% + \ifnum + \unless\ifnum\ltjgetparameter{direction}=3 1\else + \ifltjselectfont@force@define 1\else 0\fi\fi =1 % \expandafter \ifx \font@name \relax \let\extract@font\extract@jfont \define@newfont \let\extract@font\extract@afont \fi - \let\getjfont\font@name} + \let\getjfont\font@name + \else + \begingroup\escapechar\m@ne + \ifcsname ltj@@fontjfm/\expandafter\string\font@name\endcsname\else + \let\extract@font\extract@jfont@onlyjfm + \define@newfont + \let\extract@font\extract@afont + \fi + \endgroup + \csname ltj@@fontjfm/\expandafter\expandafter\expandafter\@gobble\expandafter\string\font@name\endcsname + \fi +} \def\pickup@tfont{% + \ifnum + \ifnum\ltjgetparameter{direction}=3 1\else + \ifltjselectfont@force@define 1\else 0\fi\fi =1 % \expandafter \ifx \font@name \relax \let\extract@font\extract@tfont \define@newfont \let\extract@font\extract@afont \fi - \let\gettfont\font@name} + \let\gettfont\font@name + \else + \begingroup\escapechar\m@ne + \ifcsname ltj@@fontjfm/\expandafter\string\font@name\endcsname\else + \let\extract@font\extract@tfont@onlyjfm + \define@newfont + \let\extract@font\extract@afont + \fi + \endgroup + \csname ltj@@fontjfm/\expandafter\expandafter\expandafter\@gobble\expandafter\string\font@name\endcsname + \fi +} % 異なる和文 enc/fam/ser/shape からは異なるフォント番号が振られるように % わざと「ゴミをつける」 \def\ltj@@patch@external@font#1 at{% - #1\directlua{luatexja.jfont.print_aftl_address()}\space at% + \directlua{ + local s = '\luatexluaescapestring{#1}' + local is_braced, is_quoted + if s:sub(1,1)=='{' and s:sub(-1)=='}' then is_braced=true; s=s:sub(2,-2) end + if s:sub(1,1)=='"' and s:sub(-1)=='"' then is_quoted=true; s=s:sub(2,-2) end + s=s..luatexja.jfont.print_aftl_address() + if is_braced then s='{'..s..'}' elseif is_quoted then s='"'..s..'"' end + %print(s, is_quoted, is_braced) + tex.sprint(-2, s)}% + \space at% } \def\extract@jfont{% - \get@external@font - \ltj@@does@alt@set{\f@encoding/\f@family/\f@series/\f@shape}% + \get@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 + }% + \expandafter\globaljfont\font@name\external@font\relax\font@name% ここで時間がかかる \csname \f@encoding+\f@family\endcsname \csname\curr@fontshape\endcsname} \def\extract@tfont{% - \get@external@font - \ltj@@does@alt@set{\f@encoding/\f@family/\f@series/\f@shape}% + \get@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\globaltfont\font@name\external@font\relax - \font@name%\global\zw=\zw\global\zh=\zh + }% + \expandafter\globaltfont\font@name\external@font\relax\font@name \csname \f@encoding+\f@family\endcsname \csname\curr@fontshape\endcsname} +\newluafunction\ltj@@jfont@@jfmonly@@inner +\directlua{% + local lf = lua.get_functions_table() + lf[\the\ltj@@jfont@@jfmonly@@inner] = luatexja.jfont.load_jfmonly +} +\luadef\ltj@@jfont@@jfmonly \ltj@@jfont@@jfmonly@@inner +\def\extract@jfont@onlyjfm{% + \get@external@font + \csxdef{ltj@@fontjfm/\expandafter\string\font@name}{% + \ltj@@jfont@@jfmonly{\external@font}{yoko}% +}} +\def\extract@tfont@onlyjfm{% + \get@external@font + \csxdef{ltj@@fontjfm/\expandafter\string\font@name}{% + \ltj@@jfont@@jfmonly{\external@font}{tate}% +}} + \let\ltj@@al@do@subst@correction=\do@subst@correction \def\ltj@@ja@do@subst@correction{% \xdef\subst@correction{% @@ -634,7 +1109,7 @@ \aftergroup\subst@correction } \def\do@subst@correction{% - \ltj@@IsFontJapanese{\curr@fontshape}\ifin@% + \ltj@@is@kenc{\f@encoding}\ifin@% \ltj@@ja@do@subst@correction \else \ltj@@al@do@subst@correction @@ -643,19 +1118,23 @@ \let\@@italiccorr=\/ %%%%%% Japanese font for math mode +\unless\ifltj@disablejfam % \M@ から その が和文用か調べる {\catcode`M=12% -\gdef\ltj@@mathJapaneseFonts#1M#2#3\relax{\ltj@@IsFontJapanese{#3}}} +\gdef\ltj@@mathJapaneseFonts#1M#2#3/#4\relax{\ltj@@is@kenc{#3}}} \let\ltj@@al@getanddefine@fonts=\getanddefine@fonts \def\ltj@@ja@getanddefine@fonts#1#2{% + \csletcs{if@ltj@tempif}{ifltjselectfont@force@define}% + \ltjselectfont@force@definetrue \xdef\font@name{\csname \string#2/\tf@size\endcsname}% \pickup@jfont\let\textfont@name\font@name \xdef\font@name{\csname \string#2/\sf@size\endcsname}% \pickup@jfont\let\scriptfont@name\font@name \xdef\font@name{\csname \string#2/\ssf@size\endcsname}% \pickup@jfont + \csletcs{ifltjselectfont@force@define}{if@ltj@tempif}% \edef\math@fonts{\math@fonts\ltj@setpar@global% \ltj@@set@stackfont#1,\textfont@name:{MJT}% \ltj@@set@stackfont#1,\scriptfont@name:{MJS}% @@ -664,7 +1143,7 @@ } \def\getanddefine@fonts#1#2{% - \ltj@tempcnta=#1\ltj@@IsFontJapanese{\string#2}% + \ltj@tempcnta=#1\expandafter\ltj@@IsFontJapanese\string#2/\relax% \ifin@\let\ltj@temp=\ltj@@ja@getanddefine@fonts% \else \let\ltj@temp=\ltj@@al@getanddefine@fonts\fi \ltj@temp{#1}{#2}% @@ -672,10 +1151,13 @@ \def\use@mathgroup#1#2{\relax\ifmmode \math@bgroup \expandafter\ifx\csname M@\f@encoding\endcsname#1\else - #1\fi\ltj@tempcnta=#2 \expandafter\ltj@@mathJapaneseFonts\string#1\relax% + #1\fi\ltj@tempcnta=#2 + \expandafter\ltj@@mathJapaneseFonts\string#1/\relax% \ifin@\jfam#2\relax\else\mathgroup#2\relax\fi \expandafter\math@egroup\fi}% +\fi + %%%%%% Alternate Japanese Fonts %%%% \DeclareAlternateKanjiFont % いつも global @@ -702,10 +1184,16 @@ \the\ltj@tempcnta,\the\ltj@tempcntb, '\luatexluaescapestring{\ltj@temp@afont}', '\luatexluaescapestring{\ltj@temp@bfont}')}% - } +} %%%% \ClearAlternateKanjiFont % いつも global +\newluafunction\ltj@@does@alt@set@@inner +\directlua{% + local lf = lua.get_functions_table() + lf[\the\ltj@@does@alt@set@@inner] = luatexja.jfont.does_alt_set +} +\def\ltj@@does@alt@set#1#2{\luafunction\ltj@@does@alt@set@@inner{#1}{#2}} \def\ClearAlternateKanjiFont#1#2#3#4{% \directlua{luatexja.jfont.clear_alt_font_latex('\luatexluaescapestring{#1/#2/#3/#4}')}} @@ -719,8 +1207,4 @@ \ltj@@getjfontnumber#1% \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