OSDN Git Service

unicode library -> utf
[luatex-ja/luatexja.git] / test / test17-priority.tex
1 %#!lualatex
2
3 \documentclass{ltjsarticle}
4 \usepackage{luatexja-fontspec,luatexja-adjust,xcolor,amsmath,amssymb}
5
6 \def\sq{%
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}}
13 \newbox\gridbox
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}
15 \def\outbox#1{%
16   \leavevmode\hbox to 2em{\tt #1\hss}\vrule
17   \textcolor{cyan!50!white}{\copy\gridbox}\hskip-20\zw\copy0\vrule\par
18 }
19
20 \ltjdisableadjust
21 \long\def\testbox#1{%
22   \textcolor{red!80!black}{\ltjenableadjust[priority=true, lineend=extended]
23     \setbox0=\vbox{%
24       \hsize=20\zw#1%
25         }\ltjdisableadjust\outbox{ON}}\par
26   \textcolor{black!90!white}{%
27     \ltjdisableadjust\setbox0=\vbox{%
28           \hsize=20\zw#1%
29     }\outbox{OFF}}\par\medskip
30 }
31
32 \usepackage[textwidth=52\zw,lines=47,centering]{geometry}
33 \parindent0pt
34 \begin{document}
35 \jfontspec[YokoFeatures={JFM=hang}]{ipam.ttf}
36
37 \ltjsetparameter{kanjiskip=.0\zw plus .4pt minus .5pt}
38
39 \twocolumn[{\tt kanjiskip: \ltjgetparameter{kanjiskip}
40
41 \ltjsetparameter{xkanjiskip=.25\zw plus .25\zw minus .125\zw}
42 xkanjiskip: \ltjgetparameter{xkanjiskip}}
43
44 このテストでは,行末の句読点・中点類の位置調整を有効にした
45 \texttt{jfm-hang.lua}を用いている.
46 {\begin{itemize}
47 \item 句点は,調整量に合わせて,ぶら下げ,全角取りの2種類から選択される.
48 \item 読点は,調整量に合わせて,ぶら下げ,二分取り,全角取りの3種類から選択される.
49 \item 中点類は,行末に四分空きを追加することのみ対応.
50 詰める際の「直前の四分空きも取る」は未実装,
51
52 \item \texttt{lineend=true}のときは,\TeX による行分割後に行末文字の位置調整が行われる.
53 行われる条件は,
54 \begin{description}
55 \item[最終行以外] 無限大の伸長度を持つグルーが関わっていない
56 \item[最終行] 無限大の伸長度を持つグルーは\texttt{\textbackslash parfillskip}のみで,かつ
57 \begin{align*}
58  \min\{(\hbox{許される最小の行末文字と行末の間}),0\}
59   &\leq(\hbox{\texttt{\textbackslash parfillskip}のこの行における実際の長さ})\\
60   &\leq\max\{(\hbox{許される最大の行末文字と行末の間}),0\}
61 \end{align*}
62 となっている
63 \end{description}
64
65 \item \texttt{lineend=extended}のときは,\TeX による行分割の時点で行末位置の文字調整を考慮
66       する.但し,段落の最後の文字については例外的に行わず,代わりに
67 上の「\texttt{lineend=true}の場合」の最終行のときと同じ補正を行う.
68 \end{itemize}}]
69
70 \testbox{%
71 ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
72 %あいうえおかきくけこさしすせそたちつてと
73 }
74
75 \testbox{%
76 あいうえおかきくけこ「「さしすせそたちつて
77 }
78
79 \testbox{%
80 あうえおかきAI M M Dこさ\texttt{DO i=1,10}『
81 }
82
83 \testbox{%
84 「\texttt{\textbackslash expandafter}ユーザの集い」が開催された
85 }
86
87 \testbox{%
88 あいうえおきくけこ「」さ123456そたちつて
89 }
90
91 \typeout{あいうえお}
92
93
94 \def\pTeX{p\kern-.2em\TeX}
95 \testbox{%
96 日本で\pTeX,p\LaTeX がよく使われている。
97 }
98
99 中点類の空き詰めは括弧類より優先
100 \typeout{中点類の空き詰め}
101
102 \testbox{%
103 あいうえおかきくけ・こさしすせそたち「「あ
104 }
105
106 次の例では\verb+\parfillskip+を0にしている
107
108 \testbox{%
109 あいうえおかきくけこさしすせそたちつて・
110 }
111 \testbox{%
112 \parfillskip0ptあいうえおかきくけこさしすせそたちつて・
113 }
114
115 行末の句点
116 \typeout{行末の句点}
117
118 \testbox{%
119 あいうえおかきくけこさしすせそたちつて.
120 }
121 \testbox{%
122 あいうえおかきくけこさしすせそたちつ\vrule width .25\zw て.
123 }
124 \testbox{%
125 あいうえおかきくけこさしすせそたちつ\vrule width .5\zw て.
126 }
127 \testbox{%
128 あいうえおかきくけこさしすせそたちつ\vrule width .75\zw て.
129 }
130 \testbox{%
131 あいうえおかきくけこさしすせそたちつ\vrule width 1\zw て.
132 }
133
134 行末の読点
135 \typeout{行末の読点}
136
137 \testbox{%
138 あいうえおかきくけこさしすせそたちつて,
139 }
140 \testbox{%
141 あいうえおかきくけこさしすせそたちつ\vrule width .25\zw て,
142 }
143 \testbox{%
144 あいうえおかきくけこさしすせそたちつ\vrule width .5\zw て,
145 }
146 \testbox{%
147 あいうえおかきくけこさしすせそたちつ\vrule width .75\zw て,
148 }
149 \testbox{%
150 あいうえおかきくけこさしすせそたちつ\vrule width 1\zw て,
151 }
152
153
154 伸び縮みで異なる優先度.
155
156 以下の例では,「ぱ」と鍵括弧の間は自然長・伸び・縮み全部半角.
157 \texttt{kanjiskip}より伸びる時の優先度は高く,
158 縮むときの優先度は低い.
159
160 {\ltjsetparameter{kanjiskip=0pt plus 1.5pt minus 1.5pt}
161 \testbox{%
162   \parfillskip0ptあいうえおかきくけこ\<\vrule width7.5\zw\<ぱ「
163 }
164 \testbox{%
165   \parfillskip0ptあいうえおかきくけこ\<\vrule width9\zw\<ぱ「
166 }
167 }
168
169 \newpage
170 xkanjiskip手動挿入.
171
172 \texttt{\string\insertxkanjiskip}で挿入されたグルーは\\
173 \texttt{\string\hskip\string\ltjgetparameter\{xkanjiskip\}}\insertxkanjiskip によるグルー%
174 (下段)とは違い,
175 優先度付き行長調整でも通常のxkanjiskipと同等の挙動をする.
176
177 {\ltjsetparameter{xkanjiskip=10pt plus 50pt minus 50pt,kanjiskip=0pt plus 5pt minus 5pt}%
178 \testbox{%
179   \vrule width2.5\zw ◆◆◆◆◆◆◆◆\insertxkanjiskip a\null ◆◆◆◆◆◆◆a%
180 }
181 \testbox{%
182   \vrule width2.5\zw ◆◆◆◆◆◆◆◆\hskip\ltjgetparameter{xkanjiskip}a\null ◆◆◆◆◆◆◆a%
183 }
184 }
185
186 \bigskip
187
188 次ページ以降の出典:
189   Wikisource日本語版「竹取物語」(一部),2016/08/11閲覧\\
190 {\catcode`\%=11\texttt{https://ja.wikisource.org/wiki/%E7%AB%B9%E5%8F%96%E7%89%A9%E8%AA%9E}}
191
192 \twocolumn
193 \def\USTCON{\hbox{USTCON}}
194 \small\newdimen\R \R=25\zw
195 \def\sample#1{\small\hsize=\R\jfontspec[YokoFeatures={JFM=hang}]{ipam.ttf}
196 {\centering\scriptsize\textbf{\ttfamily #1}\par}\parindent1\zw%
197 \ltjsetparameter{kanjiskip=.0\zw plus .4pt minus .5pt}
198 かやうにて、御心を互に慰め給ふほどに、三年ばかりありて、春の初より、かぐや姫月のおもしろう出でたるを見て、常よりも物思ひたるさまなり。ある人の「月の顔見るは忌むこと。」ゝ制しけれども、ともすればひとまには月を見ていみじく泣き給ふ。七月のもちの月にいで居て、切に物思へるけしきなり。近く使はるゝ人々、竹取の翁に告げていはく、「かぐや姫例も月をあはれがり給ひけれども、この頃となりてはたゞ事にも侍らざンめり。いみじく思し歎くことあるべし。よく〳〵見奉らせ給へ。」といふを聞きて、かぐや姫にいふやう、「なでふ心ちすれば、かく物を思ひたるさまにて月を見給ふぞ。うましき世に。」といふ。かぐや姫、「月を見れば世の中こゝろぼそくあはれに侍り。なでふ物をか歎き侍るべき。」といふ。かぐや姫のある所に至りて見れば、なほ物思へるけしきなり。これを見て、「あが佛何事を思ひ給ふぞ。思すらんこと何事ぞ。」といへば、「思ふこともなし。物なん心細く覺ゆる。」といへば、翁、「月な見給ひそ。これを見給へば物思すけしきはあるぞ。」といへば、「いかでか月を見ずにはあらん。」とて、なほ月出づれば、いで居つゝ歎き思へり。夕暗には物思はぬ氣色なり。月の程になりぬれば、猶時々はうち歎きなきなどす。是をつかふものども、「猶物思すことあるべし。」とさゝやけど、親を始めて何事とも知らず。八月十五日ばかりの月にいで居て、かぐや姫いといたく泣き給ふ。人めも今はつゝみ給はず泣き給ふ。これを見て、親どもゝ「何事ぞ。」と問ひさわぐ。かぐや姫なく〳〵いふ、「さき〳〵も申さんと思ひしかども、『かならず心惑はし給はんものぞ。』と思ひて、今まで過し侍りつるなり。『さのみやは。』とてうち出で侍りぬるぞ。おのが身はこの國の人にもあらず、月の都の人なり。それを昔の契なりけるによりてなん、この世界にはまうで來りける。今は歸るべきになりにければ、この月の十五日に、かのもとの國より迎に人々まうでこんず。さらずまかりぬべければ、思し歎かんが悲しきことを、この春より思ひ歎き侍るなり。」といひて、いみじく泣く。翁「こはなでふことをの給ふぞ。竹の中より見つけきこえたりしかど、菜種の大さおはせしを、我丈たち並ぶまで養ひ奉りたる我子を、何人か迎へ聞えん。まさに許さんや。」といひて、「我こそ死なめ。」とて、泣きのゝしることいと堪へがたげなり。かぐや姫のいはく、「月の都の人にて父母あり。片時の間とてかの國よりまうでこしかども、かくこの國には數多の年を經ぬるになんありける。かの國の父母の事もおぼえず。こゝにはかく久しく遊び聞えてならひ奉れり。いみじからん心地もせず、悲しくのみなんある。されど己が心ならず罷りなんとする。」といひて、諸共にいみじう泣く。つかはるゝ人々も年頃ならひて、立ち別れなんことを、心ばへなどあてやかに美しかりつることを見ならひて、戀しからんことの堪へがたく、湯水も飮まれず、同じ心に歎しがりけり。この事を帝きこしめして、竹取が家に御使つかはさせ給ふ。御使に竹取いで逢ひて、泣くこと限なし。この事を歎くに、髪も白く腰も屈り目もたゞれにけり。翁今年は五十許なりけれども、「物思には片時になん老になりにける。」と見ゆ。御使仰事とて翁にいはく、「いと心苦しく物思ふなるは、誠にか。」と仰せ給ふ。
199
200 }
201
202
203 \ltjenableadjust[lineend=extended, priority=true]
204 \setbox40000=\vtop{\sample{lineend=extended, priority=true}}
205 \ltjdisableadjust
206 \ltjenableadjust[lineend=true, priority=false, priority=true]
207 \setbox40002=\vtop{\sample{linened=true,priority=true}}
208 \ltjdisableadjust
209 \ltjenableadjust[lineend=false, priority=false, priority=true]
210 \setbox40004=\vtop{\sample{lineend=false,priority=true}}
211 \ltjdisableadjust
212 \ltjenableadjust[lineend=extended, priority=false]
213 \setbox40010=\vtop{\sample{lineend=extended, priority=false}}
214 \ltjdisableadjust
215 \ltjenableadjust[lineend=true, priority=false, priority=false]
216 \setbox40012=\vtop{\sample{linened=true,priority=false}}
217 \ltjdisableadjust
218 \ltjenableadjust[lineend=false, priority=false, priority=false]
219 \setbox40014=\vtop{\sample{lineend=false,priority=false}}
220 \ltjdisableadjust
221
222 {\catcode`\#=12
223 \directlua{%
224   function gb(a)
225      local t = tex.getbox(a)
226      local x = {}
227      for n in node.traverse_id(node.id('hlist'), t.head) do
228         local b = n.glue_order>0 and 0 or math.floor(100*n.glue_set^3+0.5);
229         if b<=12 then x[#x+1]={2,b}    % decent
230         elseif n.glue_sign==1 and b>=100 then x[#x+1]={0,b} %very loose
231         elseif n.glue_sign==1 then x[#x+1]={1,b} % loose
232         else   x[#x+1]={3,b} end %tight
233      end
234      x[0]={2, 0}
235      local d = 0
236      for i=1,#x do
237        d = d + math.floor((tex.linepenalty + x[i][2])^2+0.5)
238        if math.abs(x[i][1]-x[i-1][1])>=1 then d = d + tex.adjdemerits end
239      end
240      tex.sprint(-2,tostring(d) )
241   end
242 }}
243 \protected\def\getbadness#1{\par\medskip\textcolor{blue}{\small demerits: \directlua{gb(#1)}}}
244
245 \noindent
246 \vrule\copy40010\vrule\relax\getbadness{40010}
247
248 \medskip
249 \noindent
250 \vrule\copy40012\vrule\relax\getbadness{40012}
251
252 \newpage
253 \noindent
254 \vrule\copy40014\vrule\relax\getbadness{40014}
255
256 \R28\zw
257 \ltjenableadjust[lineend=extended, priority=true]
258 \setbox40000=\vtop{\sample{lineend=extended, priority=true}}
259 \ltjdisableadjust
260 \ltjenableadjust[lineend=true, priority=false, priority=true]
261 \setbox40002=\vtop{\sample{linened=true,priority=true}}
262 \ltjdisableadjust
263 \ltjenableadjust[lineend=false, priority=false, priority=true]
264 \setbox40004=\vtop{\sample{lineend=false,priority=true}}
265 \ltjdisableadjust
266 \ltjenableadjust[lineend=extended, priority=false]
267 \setbox40010=\vtop{\sample{lineend=extended, priority=false}}
268 \ltjdisableadjust
269 \ltjenableadjust[lineend=true, priority=false, priority=false]
270 \setbox40012=\vtop{\sample{linened=true,priority=false}}
271 \ltjdisableadjust
272 \ltjenableadjust[lineend=false, priority=false, priority=false]
273 \setbox40014=\vtop{\sample{lineend=false,priority=false}}
274 \ltjdisableadjust
275
276 \noindent
277 \vrule\copy40010\vrule\relax\getbadness{40010}
278
279 \newpage
280 \noindent
281 \vrule\copy40012\vrule\relax\getbadness{40012}
282 \newpage
283 \noindent
284 \vrule\copy40014\vrule\relax\getbadness{40014}
285
286
287
288
289 \end{document}