local lv = tex_nest.ptr -- must be >= 1
if not v then
v = get_dir_count()
- if abs(tex_nest[lv].mode) == ltjs.mmode and v == dir_tate then
+ if abs(tex_nest[lv-1].mode) == ltjs.mmode and v == dir_tate then
v = dir_utod
end
elseif v=='adj' then
local lv = tex_nest.ptr
if not v then
v,name = get_dir_count(), nil
- if abs(tex_nest[lv].mode) == ltjs.mmode and v == dir_tate then
+ if lv>=1 and abs(tex_nest[lv-1].mode) == ltjs.mmode and v == dir_tate then
v = dir_utod
end
elseif v=='adj' then
v,name = get_adjust_dir_count(), nil
end
+ local current_nest = tex_nest[lv]
if tex.currentgrouptype==6 then
ltjb.package_error(
'luatexja',
"You can't use `\\" .. name .. "' in an align",
- "To change direction in an align, \n"
- .. "you shold use \\hbox or \\vbox.")
+ "To change the direction in an align, \n"
+ .. "you shold use \\hbox or \\vbox.")
+ elseif current_nest.mode == ltjs.hmode or abs(current_nest.mode) == ltjs.mmode then
+ ltjb.package_error(
+ 'luatexja',
+ "Improper `\\" .. name .. "'",
+ 'You cannot change the direction in unrestricted horizontal mode \n'
+ .. 'nor math modes.')
else
- local h = (lv==0) and tex.lists.page_head or tex_nest[lv].head.next
+ local h = (lv==0) and tex.lists.page_head or current_nest.head.next
local flag,w = test_list(h,lv)
if flag==0 then
if lv==0 and not page_direction then
elseif lv==0 then
page_direction = v
else -- flag == 2: need to create dir whatsit.
- local h = tex_nest[lv].head
+ local h = current_nest.head
local hn = node.next(h)
hn = (hn and hn.id==id_local) and hn or h
local w = to_node(dir_pool[v]())
insert_after_node(h,hn,w)
- tex_nest[lv].tail = node_tail_node(w)
+ current_nest.tail = node_tail_node(w)
end
ensure_tex_attr(attr_icflag, 0)
end
local bh = getlist(b)
local box_dir, dn = get_box_dir(b, ltjs.list_dir)
-- 既に b の中身にあるwhatsit
-
+ if not dn then
+ bh = create_dir_whatsit(bh, 'make_dir_whatsit', dir_yoko)
+ dn = bh; setfield(b, 'head', bh)
+ end
if box_dir%dir_math_mod==new_dir then
if box_dir>=dir_node_auto then
-- dir_node としてカプセル化されている
local dn_h = getfield(db, 'height')
local dn_d = getfield(db, 'depth')
local db_head, db_tail
- for _,v in ipairs(dir_node_aux
- [get_box_dir(b, dir_yoko)%dir_math_mod][new_dir][getid(b)]) do
+ local t = dir_node_aux[get_box_dir(b, dir_yoko)%dir_math_mod][new_dir]
+ t = t and t[getid(b)]; if not t then return end
+ for _,v in ipairs(t) do
local cmd, arg, nn = v[1], v[2]
if cmd=='kern' then
nn = node_new(id_kern, 1)