local id_hlist = node.id('hlist')
local id_glue = node.id('glue')
local id_glue_spec = node.id('glue_spec')
+local id_whatsit = node.id('whatsit')
local has_attr = node.has_attribute
local set_attr = node.set_attribute
local attr_icflag = luatexbase.attributes['ltj@icflag']
-- その前の node が本来の末尾文字となる
x = node.prev(node.prev(x))
end
-
local xi, xc = x.id
if xi == id_glyph and has_attr(x, attr_curjfnt) == x.font then
-- 和文文字
elseif xi == id_hlist and get_attr_icflag(x) == PACKED then
-- packed JAchar
xc = x.head
+ while xc.id == id_whatsit do xc = node.next(xc) end
else
return false-- それ以外は対象外.
end
- local xk = ltjf_font_metric_table --
- [xc.font].char_type[has_attr(xc, attr_jchar_class) or 0]
- ['end_' .. res.name] or 0
- --print(res.name, total, xk, unicode.utf8.char(xc.char))
+ local xk = ltjf_font_metric_table[xc.font]
+ xk = xk.char_type[has_attr(xc, attr_jchar_class) or 0]
+ xk = xk['end_' .. res.name] or 0
if xk>0 and total>=xk then
--print("ADDED")
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((tostring(t):gsub('table: 0x','ltjaltfont')))
+ end
+-- EXT
function output_alt_font_cmd(bbase)
alt_font_base = bbase
alt_font_base_num = tex.getattribute(attr_curjfnt)
\fi
\let\getjfont\font@name}
+% 異なる和文 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%
+}
\def\extract@jfont{%
\get@external@font
+ \edef\external@font{\expandafter\ltj@@patch@external@font\external@font}%
\expandafter\globaljfont\font@name\external@font\relax
\font@name%\global\zw=\zw\global\zh=\zh
\csname \f@encoding+\f@family\endcsname
\section{例1}
-%\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis}{} (A)
-%\DeclareFontShape{JY3}{gtX}{an}{n}{<-> ssub*gtX/m/n}{} (B)
-\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;foo}{}% (C)
-
+\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis}{}
\DeclareFontShape{JY3}{mcX}{bx}{kana}{<-> s*[0.962216] KozMinPr6N-Regular:jfm=ujis}{}
\DeclareAlternateKanjiFont{JY3}{gtX}{an}{n}{JY3}{mcX}{bx}{kana}{"3000-"30FF}
-% (A), (B) では失敗する.例えばサイズが 10 pt のとき,
-% (A), (B) で定義した JY3/gtX/an/n/10 は JY3/gtX/m/n/10 と
-% (LuaTeX 内部で使われる)フォント番号が全く同じなので,区別できない.
-% そのため,JY3/gtX/an/n に対して行った「仮名は JY3/mcX/bx/kana で」という指定は
-% JY3/gtX/m/n に対しても有効になってしまう.
-
-% 意図したとおりに動作させるためには,(C) のように適当なゴミをくっつけて,
-% 「見た目は全く同じだが,フォント番号は異なる」状況にしないといけない.
-%%% なんとか解決できないだろうか?
-
{\Large\gt
漢字をゴシック体,仮名を明朝を使って
{\kanjiseries{an}\selectfont このように文章を組む}
}
\paragraph{fwid feature}
-\DeclareFontShape{JY3}{gtX}{af}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;foo;+fwid}{}
+\DeclareFontShape{JY3}{gtX}{af}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;+fwid}{}
% fwid weature 使用
{\kanjifamily{gtX}\kanjiseries{af}\selectfont
\DeclareKanjiFamily{JY3}{edm}{}
\DeclareFontShape{JY3}{edm}{m}{n}{<-> s*[0.962216]
- KozMinPr6N-Regular:jfm=ujis;foo}{} % foo をつけている理由は JY3/gtX/an/n と一緒
+ KozMinPr6N-Regular:jfm=ujis}{}
\DeclareFontShape{JY3}{edm}{m}{blue}{<-> s*[0.962216]
KozGoPr6N-Medium:jfm=ujis;color=0000FF}{}
\DeclareFontShape{JY3}{edm}{m}{green}{<-> s*[0.962216]