3 \documentclass{ltjsarticle}
4 \usepackage{luatexja-fontspec,luatexja-adjust,xcolor,amsmath,amssymb}
7 \hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{%
8 \hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw%
9 \hskip\dimexpr.5\zw-.2pt\relax}\hss}}
10 \def\sb{\hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{%
11 ■\hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw%
12 \hskip\dimexpr.5\zw-.2pt\relax}\hss}}
14 \setbox\gridbox=\hbox to 20\zw{\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb}
16 \leavevmode\hbox to 2em{\tt #1\hss}\vrule
17 \textcolor{cyan!50!white}{\copy\gridbox}\hskip-20\zw\copy0\vrule\par
22 \textcolor{red!80!black}{\ltjenableadjust[priority=true, lineend=extended]
25 }\ltjdisableadjust\outbox{ON}}\par
26 \textcolor{black!90!white}{%
27 \ltjdisableadjust\setbox0=\vbox{%
29 }\outbox{OFF}}\par\medskip
32 \usepackage[textwidth=52\zw,lines=47,centering]{geometry}
35 \jfontspec[YokoFeatures={JFM=hang}]{ipam.ttf}
37 \ltjsetparameter{kanjiskip=.0\zw plus .4pt minus .5pt}
39 \twocolumn[{\tt kanjiskip: \ltjgetparameter{kanjiskip}
41 \ltjsetparameter{xkanjiskip=.25\zw plus .25\zw minus .125\zw}
42 xkanjiskip: \ltjgetparameter{xkanjiskip}}
44 このテストでは,行末の句読点・中点類の位置調整を有効にした
45 \texttt{jfm-hang.lua}を用いている.
47 \item 句点は,調整量に合わせて,ぶら下げ,全角取りの2種類から選択される.
48 \item 読点は,調整量に合わせて,ぶら下げ,二分取り,全角取りの3種類から選択される.
49 \item 中点類は,行末に四分空きを追加することのみ対応.
50 詰める際の「直前の四分空きも取る」は未実装,
52 \item \texttt{lineend=true}のときは,\TeX による行分割後に行末文字の位置調整が行われる.
55 \item[最終行以外] 無限大の伸長度を持つグルーが関わっていない
56 \item[最終行] 無限大の伸長度を持つグルーは\texttt{\textbackslash parfillskip}のみで,かつ
58 \min\{(\hbox{許される最小の行末文字と行末の間}),0\}
59 &\leq(\hbox{\texttt{\textbackslash parfillskip}のこの行における実際の長さ})\\
60 &\leq\max\{(\hbox{許される最大の行末文字と行末の間}),0\}
65 \item \texttt{lineend=extended}のときは,\TeX による行分割の時点で行末位置の文字調整を考慮
66 する.但し,段落の最後の文字については例外的に行わず,代わりに
67 上の「\texttt{lineend=true}の場合」の最終行のときと同じ補正を行う.
80 あうえおかきAI M M Dこさ\texttt{DO i=1,10}『
84 「\texttt{\textbackslash expandafter}ユーザの集い」が開催された
88 あいうえおきくけこ「」さ123456そたちつて
94 \def\pTeX{p\kern-.2em\TeX}
96 日本で\pTeX,p\LaTeX がよく使われている。
103 あいうえおかきくけ・こさしすせそたち「「あ
106 次の例では\verb+\parfillskip+を0にしている
112 \parfillskip0ptあいうえおかきくけこさしすせそたちつて・
122 あいうえおかきくけこさしすせそたちつ\vrule width .25\zw て.
125 あいうえおかきくけこさしすせそたちつ\vrule width .5\zw て.
128 あいうえおかきくけこさしすせそたちつ\vrule width .75\zw て.
131 あいうえおかきくけこさしすせそたちつ\vrule width 1\zw て.
141 あいうえおかきくけこさしすせそたちつ\vrule width .25\zw て,
144 あいうえおかきくけこさしすせそたちつ\vrule width .5\zw て,
147 あいうえおかきくけこさしすせそたちつ\vrule width .75\zw て,
150 あいうえおかきくけこさしすせそたちつ\vrule width 1\zw て,
156 以下の例では,「ぱ」と鍵括弧の間は自然長・伸び・縮み全部半角.
157 \texttt{kanjiskip}より伸びる時の優先度は高く,
160 {\ltjsetparameter{kanjiskip=0pt plus 1.5pt minus 1.5pt}
162 \parfillskip0ptあいうえおかきくけこ\<\vrule width7.5\zw\<ぱ「
165 \parfillskip0ptあいうえおかきくけこ\<\vrule width9\zw\<ぱ「
170 Wikisource日本語版「竹取物語」(一部),2016/08/11閲覧\\
171 {\catcode`\%=11\texttt{https://ja.wikisource.org/wiki/%E7%AB%B9%E5%8F%96%E7%89%A9%E8%AA%9E}}
174 \def\USTCON{\hbox{USTCON}}
175 \small\newdimen\R \R=25\zw
176 \def\sample#1{\small\hsize=\R\jfontspec[YokoFeatures={JFM=hang}]{ipam.ttf}
177 {\centering\scriptsize\textbf{\ttfamily #1}\par}\parindent1\zw%
178 \ltjsetparameter{kanjiskip=.0\zw plus .4pt minus .5pt}
179 かやうにて、御心を互に慰め給ふほどに、三年ばかりありて、春の初より、かぐや姫月のおもしろう出でたるを見て、常よりも物思ひたるさまなり。ある人の「月の顔見るは忌むこと。」ゝ制しけれども、ともすればひとまには月を見ていみじく泣き給ふ。七月のもちの月にいで居て、切に物思へるけしきなり。近く使はるゝ人々、竹取の翁に告げていはく、「かぐや姫例も月をあはれがり給ひけれども、この頃となりてはたゞ事にも侍らざンめり。いみじく思し歎くことあるべし。よく〳〵見奉らせ給へ。」といふを聞きて、かぐや姫にいふやう、「なでふ心ちすれば、かく物を思ひたるさまにて月を見給ふぞ。うましき世に。」といふ。かぐや姫、「月を見れば世の中こゝろぼそくあはれに侍り。なでふ物をか歎き侍るべき。」といふ。かぐや姫のある所に至りて見れば、なほ物思へるけしきなり。これを見て、「あが佛何事を思ひ給ふぞ。思すらんこと何事ぞ。」といへば、「思ふこともなし。物なん心細く覺ゆる。」といへば、翁、「月な見給ひそ。これを見給へば物思すけしきはあるぞ。」といへば、「いかでか月を見ずにはあらん。」とて、なほ月出づれば、いで居つゝ歎き思へり。夕暗には物思はぬ氣色なり。月の程になりぬれば、猶時々はうち歎きなきなどす。是をつかふものども、「猶物思すことあるべし。」とさゝやけど、親を始めて何事とも知らず。八月十五日ばかりの月にいで居て、かぐや姫いといたく泣き給ふ。人めも今はつゝみ給はず泣き給ふ。これを見て、親どもゝ「何事ぞ。」と問ひさわぐ。かぐや姫なく〳〵いふ、「さき〳〵も申さんと思ひしかども、『かならず心惑はし給はんものぞ。』と思ひて、今まで過し侍りつるなり。『さのみやは。』とてうち出で侍りぬるぞ。おのが身はこの國の人にもあらず、月の都の人なり。それを昔の契なりけるによりてなん、この世界にはまうで來りける。今は歸るべきになりにければ、この月の十五日に、かのもとの國より迎に人々まうでこんず。さらずまかりぬべければ、思し歎かんが悲しきことを、この春より思ひ歎き侍るなり。」といひて、いみじく泣く。翁「こはなでふことをの給ふぞ。竹の中より見つけきこえたりしかど、菜種の大さおはせしを、我丈たち並ぶまで養ひ奉りたる我子を、何人か迎へ聞えん。まさに許さんや。」といひて、「我こそ死なめ。」とて、泣きのゝしることいと堪へがたげなり。かぐや姫のいはく、「月の都の人にて父母あり。片時の間とてかの國よりまうでこしかども、かくこの國には數多の年を經ぬるになんありける。かの國の父母の事もおぼえず。こゝにはかく久しく遊び聞えてならひ奉れり。いみじからん心地もせず、悲しくのみなんある。されど己が心ならず罷りなんとする。」といひて、諸共にいみじう泣く。つかはるゝ人々も年頃ならひて、立ち別れなんことを、心ばへなどあてやかに美しかりつることを見ならひて、戀しからんことの堪へがたく、湯水も飮まれず、同じ心に歎しがりけり。この事を帝きこしめして、竹取が家に御使つかはさせ給ふ。御使に竹取いで逢ひて、泣くこと限なし。この事を歎くに、髪も白く腰も屈り目もたゞれにけり。翁今年は五十許なりけれども、「物思には片時になん老になりにける。」と見ゆ。御使仰事とて翁にいはく、「いと心苦しく物思ふなるは、誠にか。」と仰せ給ふ。
184 \ltjenableadjust[lineend=extended, priority=true]
185 \setbox40000=\vtop{\sample{lineend=extended, priority=true}}
187 \ltjenableadjust[lineend=true, priority=false, priority=true]
188 \setbox40002=\vtop{\sample{linened=true,priority=true}}
190 \ltjenableadjust[lineend=false, priority=false, priority=true]
191 \setbox40004=\vtop{\sample{lineend=false,priority=true}}
193 \ltjenableadjust[lineend=extended, priority=false]
194 \setbox40010=\vtop{\sample{lineend=extended, priority=false}}
196 \ltjenableadjust[lineend=true, priority=false, priority=false]
197 \setbox40012=\vtop{\sample{linened=true,priority=false}}
199 \ltjenableadjust[lineend=false, priority=false, priority=false]
200 \setbox40014=\vtop{\sample{lineend=false,priority=false}}
206 local t = tex.getbox(a)
208 for n in node.traverse_id(node.id('hlist'), t.head) do
209 local b = n.glue_order>0 and 0 or math.floor(100*math.pow(n.glue_set, 3)+0.5);
210 if b<=12 then x[#x+1]={2,b} % decent
211 elseif n.glue_sign==1 and b>=100 then x[#x+1]={0,b} %very loose
212 elseif n.glue_sign==1 then x[#x+1]={1,b} % loose
213 else x[#x+1]={3,b} end %tight
218 d = d + math.floor(math.pow(tex.linepenalty + x[i][2], 2)+0.5)
219 if math.abs(x[i][1]-x[i-1][1])>=1 then d = d + tex.adjdemerits end
221 tex.sprint(-2,tostring(d) )
224 \protected\def\getbadness#1{\par\medskip\textcolor{blue}{\small demerits: \directlua{gb(#1)}}}
227 \vrule\copy40010\vrule\relax\getbadness{40010}
231 \vrule\copy40012\vrule\relax\getbadness{40012}
235 \vrule\copy40014\vrule\relax\getbadness{40014}
239 \ltjenableadjust[lineend=extended, priority=true]
240 \setbox40000=\vtop{\sample{lineend=extended, priority=true}}
242 \ltjenableadjust[lineend=true, priority=false, priority=true]
243 \setbox40002=\vtop{\sample{linened=true,priority=true}}
245 \ltjenableadjust[lineend=false, priority=false, priority=true]
246 \setbox40004=\vtop{\sample{lineend=false,priority=true}}
248 \ltjenableadjust[lineend=extended, priority=false]
249 \setbox40010=\vtop{\sample{lineend=extended, priority=false}}
251 \ltjenableadjust[lineend=true, priority=false, priority=false]
252 \setbox40012=\vtop{\sample{linened=true,priority=false}}
254 \ltjenableadjust[lineend=false, priority=false, priority=false]
255 \setbox40014=\vtop{\sample{lineend=false,priority=false}}
259 \vrule\copy40010\vrule\relax\getbadness{40010}
263 \vrule\copy40012\vrule\relax\getbadness{40012}
266 \vrule\copy40014\vrule\relax\getbadness{40014}