OSDN Git Service

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