%</en>
%<*ja>
\usepackage[textwidth=45\zw, lines=45, footskip=6mm]{geometry}
-\usepackage{luatexja-adjust}
+\usepackage{luatexja-adjust}%\ltjdisableadjust
\advance\leftmargini-1\zw\advance\leftmarginii-1\zw
%</ja>
%<*zh>
行われているとして良い.まず,段落中の行中のグルーを
\begin{itemize}
\item 下のどれにも該当しないグルー
-\item 和欧文間空白(\Param{xkanjiskip})
\item JFMグルー(優先度別にまとめられる)
+\item 和欧文間空白(\Param{xkanjiskip})
\item 和文間空白(\Param{kanjiskip})
\end{itemize}
の$1+1+5+1=8$つに類別し,それぞれの種別ごとに許容されている伸縮度の合計を計算する.
また,行長と自然長との差の絶対値を計算し,それを\textit{total}とおく.
\subsection{行末文字の位置調整}
-まず,行末が和文文字であった場合,それを動かすことによって,\textbf{JAglue} が負担する調整量を
-少なくしようとする.
+まず,行末が文字クラス$n$の\textbf{Jachar}であった場合,
+それを動かすことによって,\textbf{JAglue} が負担する調整量を少なくしようとする.
+この行末文字の左右の移動可能量は,JFM中にある文字クラス$n$の定義の
+\texttt{end\_stretch},~\texttt{end\_shrink}フィールドに全角単位の値として記述されている.
+
+例えば,行末文字が句点「。」であり,そこで用いられているJFM中に
+\begin{verbatim}
+ [2] = {
+ chars = { '。', ... }, width = 0.5, ...,
+ end_stretch = 0.5, end_shrink = 0.5,
+ },
+\end{verbatim}
+という指定があった場合,この行末の句点は
+\begin{itemize}
+\item 通常の\TeX の行分割処理で「半角以上の詰め」が行われていた場合,
+この分の行中の\textbf{JAglue}の負担を軽減するため,
+行末の句点を半角だけ右に移動する(ぶら下げ組を行う).
+\item 通常の\TeX の行分割処理で「半角以上の空き」が行われていた場合,
+逆に行末句点を半角左に移動させる(見た目的に全角取りとなる).
+\item 以上のどちらでもない場合,行末句点の位置調整は行わない.
+\end{itemize}
+となる.
+
+行末文字を移動した場合,その分だけ\textit{total}の値を引いておく.
+
+\subsection{グルーの調整}
+\textit{total}の分だけが,行中のグルーの伸縮度に応じて負担されることになる.
+……
%</ja>
end
end
+local new_ks, new_xs
local function get_total_stretched(p)
local go, gf, gs = p.glue_order, p.glue_set, p.glue_sign
- local new_ks, new_xs
local res = {
[0] = 0,
glue_set = gf, name = (gs==1) and 'stretch' or 'shrink'
end
q = node_next(q)
end
- if new_ks then node_free(new_ks); new_ks = nil end
- if new_xs then node_free(new_xs); new_xs = nil end
return res
end
end
end
+local set_stretch_table = {}
local function set_stretch(p, after, before, ic, name)
if before > 0 then
--print (ic, before, after)
local ratio = after/before
+ for i,_ in pairs(set_stretch_table) do
+ set_stretch_table[i] = nil
+ end
for q in node.traverse_id(id_glue, p.head) do
if get_attr_icflag(q) == ic then
- local qs = q.spec
- if qs.writable and qs[name..'_order'] == 0 then
- qs[name] = qs[name]*ratio
+ local qs, do_flag = q.spec, true
+ for i=1,#set_stretch_table do
+ if set_stretch_table[i]==qs then do_flag = false end
+ end
+ if qs.writable and qs[name..'_order'] == 0 and do_flag then
+ qs[name] = qs[name]*ratio;
+ set_stretch_table[#set_stretch_table+1] = qs
end
end
end
local added_flag = aw_step1(p, res, total)
--print(total, res[0], res[KANJI_SKIP], res[FROM_JFM])
aw_step2(p, res, total, added_flag)
+ if new_ks then node_free(new_ks); new_ks = nil end
+ if new_xs then node_free(new_xs); new_xs = nil end
end
end
return head