X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=test%2Ftest17-priority.tex;h=ce457b8511a9454ca120172764cdc9bd4db2d425;hb=62f3f5ea15ca7a093fb852ea7f04d8e13daa6531;hp=063e636bc4f8421ff94410356f87738a11e720f9;hpb=6eb03a9acfcdc7570fff60cb9aa3713a69a16340;p=luatex-ja%2Fluatexja.git diff --git a/test/test17-priority.tex b/test/test17-priority.tex index 063e636..ce457b8 100644 --- a/test/test17-priority.tex +++ b/test/test17-priority.tex @@ -1,7 +1,7 @@ %#!lualatex \documentclass{ltjsarticle} -\usepackage{luatexja-fontspec,luatexja-adjust, luacode,xcolor} +\usepackage{luatexja-fontspec,luatexja-adjust,xcolor,amsmath,amssymb} \def\sq{% \hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{% @@ -17,37 +17,55 @@ \textcolor{cyan!50!white}{\copy\gridbox}\hskip-20\zw\copy0\vrule\par } - +\ltjdisableadjust \long\def\testbox#1{% - \textcolor{red!80!black}{\ltjenableadjust\setbox0=\vbox{\hsize=20\zw\parfillskip0pt#1}\outbox{ON}}\par + \textcolor{red!80!black}{\ltjenableadjust[priority=true, lineend=extended] + \setbox0=\vbox{% + \hsize=20\zw#1% + }\ltjdisableadjust\outbox{ON}}\par \textcolor{black!90!white}{% - \ltjdisableadjust\setbox0=\vbox{\hsize=20\zw\parfillskip0pt#1}\outbox{OFF}}\par\medskip + \ltjdisableadjust\setbox0=\vbox{% + \hsize=20\zw#1% + }\outbox{OFF}}\par\medskip } +\usepackage[textwidth=52\zw,lines=47,centering]{geometry} \parindent0pt \begin{document} -\jfontspec[JFM=hang]{ipam.ttf} +\jfontspec[YokoFeatures={JFM=hang}]{ipam.ttf} + +\ltjsetparameter{kanjiskip=.0\zw plus .4pt minus .5pt} -\ltjsetparameter{kanjiskip=.0\zw plus .4pt minus .4pt} -{\tt kanjiskip: \ltjgetparameter{kanjiskip} +\twocolumn[{\tt kanjiskip: \ltjgetparameter{kanjiskip} \ltjsetparameter{xkanjiskip=.25\zw plus .25\zw minus .125\zw} xkanjiskip: \ltjgetparameter{xkanjiskip}} このテストでは,行末の句読点・中点類の位置調整を有効にした \texttt{jfm-hang.lua}を用いている. -\begin{itemize} -\item 句読点は,調整量に合わせて,ぶら下げ,二分取り,全角取りの3種類から選択される. +{\begin{itemize} +\item 句点は,調整量に合わせて,ぶら下げ,全角取りの2種類から選択される. +\item 読点は,調整量に合わせて,ぶら下げ,二分取り,全角取りの3種類から選択される. \item 中点類は,行末に四分空きを追加することのみ対応. 詰める際の「直前の四分空きも取る」は未実装, -\item 行末文字の位置調整は,glueによる調整の負担量が少なくなるように行われる. -なお,この位置調整で調整の方向が変わることはない. -例えば,「三分伸ばす」調整が必要な,句点で終わる行があった場合,句点を全 - 角取りにするとglueの負担合計は「六分詰める」となり,調整量の絶対値 - は減るが,方向が「伸ばす」から「詰める」こととなる.よってこのよう - な場合,句点は二分取りのままである. -\end{itemize} +\item \texttt{lineend=true}のときは,\TeX による行分割後に行末文字の位置調整が行われる. +行われる条件は, +\begin{description} +\item[最終行以外] 無限大の伸長度を持つグルーが関わっていない +\item[最終行] 無限大の伸長度を持つグルーは\texttt{\textbackslash parfillskip}のみで,かつ +\begin{align*} + \min\{(\hbox{許される最小の行末文字と行末の間}),0\} + &\leq(\hbox{\texttt{\textbackslash parfillskip}のこの行における実際の長さ})\\ + &\leq\max\{(\hbox{許される最大の行末文字と行末の間}),0\} +\end{align*} +となっている +\end{description} + +\item \texttt{lineend=extended}のときは,\TeX による行分割の時点で行末位置の文字調整を考慮 + する.但し,段落の最後の文字については例外的に行わず,代わりに +上の「\texttt{lineend=true}の場合」の最終行のときと同じ補正を行う. +\end{itemize}}] \testbox{% ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ @@ -59,7 +77,7 @@ xkanjiskip: \ltjgetparameter{xkanjiskip}} } \testbox{% -あいうえおかきA M M Dこさ\texttt{DO i=1,10}『 +あうえおかきAI M M Dこさ\texttt{DO i=1,10}『 } \testbox{% @@ -70,35 +88,202 @@ xkanjiskip: \ltjgetparameter{xkanjiskip}} あいうえおきくけこ「」さ123456そたちつて } +\typeout{あいうえお} + + \def\pTeX{p\kern-.2em\TeX} \testbox{% 日本で\pTeX,p\LaTeX がよく使われている。 } 中点類の空き詰めは括弧類より優先 +\typeout{中点類の空き詰め} \testbox{% あいうえおかきくけ・こさしすせそたち「「あ } -句読点類・中点類の後ろ空き +次の例では\verb+\parfillskip+を0にしている \testbox{% -日本では\pTeX,p\LaTeX が使われている。 +あいうえおかきくけこさしすせそたちつて・ +} +\testbox{% +\parfillskip0ptあいうえおかきくけこさしすせそたちつて・ } + +行末の句点 +\typeout{行末の句点} + \testbox{% あいうえおかきくけこさしすせそたちつて. } \testbox{% +あいうえおかきくけこさしすせそたちつ\vrule width .25\zw て. +} +\testbox{% あいうえおかきくけこさしすせそたちつ\vrule width .5\zw て. } \testbox{% +あいうえおかきくけこさしすせそたちつ\vrule width .75\zw て. +} +\testbox{% あいうえおかきくけこさしすせそたちつ\vrule width 1\zw て. } + +行末の読点 +\typeout{行末の読点} + \testbox{% -あいうえおかきくけこさしすせそたちつて・ +あいうえおかきくけこさしすせそたちつて, +} +\testbox{% +あいうえおかきくけこさしすせそたちつ\vrule width .25\zw て, +} +\testbox{% +あいうえおかきくけこさしすせそたちつ\vrule width .5\zw て, +} +\testbox{% +あいうえおかきくけこさしすせそたちつ\vrule width .75\zw て, } +\testbox{% +あいうえおかきくけこさしすせそたちつ\vrule width 1\zw て, +} + + +伸び縮みで異なる優先度. + +以下の例では,「ぱ」と鍵括弧の間は自然長・伸び・縮み全部半角. +\texttt{kanjiskip}より伸びる時の優先度は高く, +縮むときの優先度は低い. + +{\ltjsetparameter{kanjiskip=0pt plus 1.5pt minus 1.5pt} +\testbox{% + \parfillskip0ptあいうえおかきくけこ\<\vrule width7.5\zw\<ぱ「 +} +\testbox{% + \parfillskip0ptあいうえおかきくけこ\<\vrule width9\zw\<ぱ「 +} +} + +\newpage +xkanjiskip手動挿入. + +\texttt{\string\insertxkanjiskip}で挿入されたグルーは\\ +\texttt{\string\hskip\string\ltjgetparameter\{xkanjiskip\}}\insertxkanjiskip によるグルー% +(下段)とは違い, +優先度付き行長調整でも通常のxkanjiskipと同等の挙動をする. + +{\ltjsetparameter{xkanjiskip=10pt plus 50pt minus 50pt,kanjiskip=0pt plus 5pt minus 5pt}% +\testbox{% + \vrule width2.5\zw ◆◆◆◆◆◆◆◆\insertxkanjiskip a\null ◆◆◆◆◆◆◆a% +} +\testbox{% + \vrule width2.5\zw ◆◆◆◆◆◆◆◆\hskip\ltjgetparameter{xkanjiskip}a\null ◆◆◆◆◆◆◆a% +} +} + +\bigskip + +次ページ以降の出典: + Wikisource日本語版「竹取物語」(一部),2016/08/11閲覧\\ +{\catcode`\%=11\texttt{https://ja.wikisource.org/wiki/%E7%AB%B9%E5%8F%96%E7%89%A9%E8%AA%9E}} + +\twocolumn +\def\USTCON{\hbox{USTCON}} +\small\newdimen\R \R=25\zw +\def\sample#1{\small\hsize=\R\jfontspec[YokoFeatures={JFM=hang}]{ipam.ttf} +{\centering\scriptsize\textbf{\ttfamily #1}\par}\parindent1\zw% +\ltjsetparameter{kanjiskip=.0\zw plus .4pt minus .5pt} +かやうにて、御心を互に慰め給ふほどに、三年ばかりありて、春の初より、かぐや姫月のおもしろう出でたるを見て、常よりも物思ひたるさまなり。ある人の「月の顔見るは忌むこと。」ゝ制しけれども、ともすればひとまには月を見ていみじく泣き給ふ。七月のもちの月にいで居て、切に物思へるけしきなり。近く使はるゝ人々、竹取の翁に告げていはく、「かぐや姫例も月をあはれがり給ひけれども、この頃となりてはたゞ事にも侍らざンめり。いみじく思し歎くことあるべし。よく〳〵見奉らせ給へ。」といふを聞きて、かぐや姫にいふやう、「なでふ心ちすれば、かく物を思ひたるさまにて月を見給ふぞ。うましき世に。」といふ。かぐや姫、「月を見れば世の中こゝろぼそくあはれに侍り。なでふ物をか歎き侍るべき。」といふ。かぐや姫のある所に至りて見れば、なほ物思へるけしきなり。これを見て、「あが佛何事を思ひ給ふぞ。思すらんこと何事ぞ。」といへば、「思ふこともなし。物なん心細く覺ゆる。」といへば、翁、「月な見給ひそ。これを見給へば物思すけしきはあるぞ。」といへば、「いかでか月を見ずにはあらん。」とて、なほ月出づれば、いで居つゝ歎き思へり。夕暗には物思はぬ氣色なり。月の程になりぬれば、猶時々はうち歎きなきなどす。是をつかふものども、「猶物思すことあるべし。」とさゝやけど、親を始めて何事とも知らず。八月十五日ばかりの月にいで居て、かぐや姫いといたく泣き給ふ。人めも今はつゝみ給はず泣き給ふ。これを見て、親どもゝ「何事ぞ。」と問ひさわぐ。かぐや姫なく〳〵いふ、「さき〳〵も申さんと思ひしかども、『かならず心惑はし給はんものぞ。』と思ひて、今まで過し侍りつるなり。『さのみやは。』とてうち出で侍りぬるぞ。おのが身はこの國の人にもあらず、月の都の人なり。それを昔の契なりけるによりてなん、この世界にはまうで來りける。今は歸るべきになりにければ、この月の十五日に、かのもとの國より迎に人々まうでこんず。さらずまかりぬべければ、思し歎かんが悲しきことを、この春より思ひ歎き侍るなり。」といひて、いみじく泣く。翁「こはなでふことをの給ふぞ。竹の中より見つけきこえたりしかど、菜種の大さおはせしを、我丈たち並ぶまで養ひ奉りたる我子を、何人か迎へ聞えん。まさに許さんや。」といひて、「我こそ死なめ。」とて、泣きのゝしることいと堪へがたげなり。かぐや姫のいはく、「月の都の人にて父母あり。片時の間とてかの國よりまうでこしかども、かくこの國には數多の年を經ぬるになんありける。かの國の父母の事もおぼえず。こゝにはかく久しく遊び聞えてならひ奉れり。いみじからん心地もせず、悲しくのみなんある。されど己が心ならず罷りなんとする。」といひて、諸共にいみじう泣く。つかはるゝ人々も年頃ならひて、立ち別れなんことを、心ばへなどあてやかに美しかりつることを見ならひて、戀しからんことの堪へがたく、湯水も飮まれず、同じ心に歎しがりけり。この事を帝きこしめして、竹取が家に御使つかはさせ給ふ。御使に竹取いで逢ひて、泣くこと限なし。この事を歎くに、髪も白く腰も屈り目もたゞれにけり。翁今年は五十許なりけれども、「物思には片時になん老になりにける。」と見ゆ。御使仰事とて翁にいはく、「いと心苦しく物思ふなるは、誠にか。」と仰せ給ふ。 + +} + + +\ltjenableadjust[lineend=extended, priority=true] +\setbox40000=\vtop{\sample{lineend=extended, priority=true}} +\ltjdisableadjust +\ltjenableadjust[lineend=true, priority=false, priority=true] +\setbox40002=\vtop{\sample{linened=true,priority=true}} +\ltjdisableadjust +\ltjenableadjust[lineend=false, priority=false, priority=true] +\setbox40004=\vtop{\sample{lineend=false,priority=true}} +\ltjdisableadjust +\ltjenableadjust[lineend=extended, priority=false] +\setbox40010=\vtop{\sample{lineend=extended, priority=false}} +\ltjdisableadjust +\ltjenableadjust[lineend=true, priority=false, priority=false] +\setbox40012=\vtop{\sample{linened=true,priority=false}} +\ltjdisableadjust +\ltjenableadjust[lineend=false, priority=false, priority=false] +\setbox40014=\vtop{\sample{lineend=false,priority=false}} +\ltjdisableadjust + +{\catcode`\#=12 +\directlua{% + function gb(a) + local t = tex.getbox(a) + local x = {} + for n in node.traverse_id(node.id('hlist'), t.head) do + local b = n.glue_order>0 and 0 or math.floor(100*n.glue_set^3+0.5); + if b<=12 then x[#x+1]={2,b} % decent + elseif n.glue_sign==1 and b>=100 then x[#x+1]={0,b} %very loose + elseif n.glue_sign==1 then x[#x+1]={1,b} % loose + else x[#x+1]={3,b} end %tight + end + x[0]={2, 0} + local d = 0 + for i=1,#x do + d = d + math.floor((tex.linepenalty + x[i][2])^2+0.5) + if math.abs(x[i][1]-x[i-1][1])>=1 then d = d + tex.adjdemerits end + end + tex.sprint(-2,tostring(d) ) + end +}} +\protected\def\getbadness#1{\par\medskip\textcolor{blue}{\small demerits: \directlua{gb(#1)}}} + +\noindent +\vrule\copy40010\vrule\relax\getbadness{40010} + +\medskip +\noindent +\vrule\copy40012\vrule\relax\getbadness{40012} \newpage +\noindent +\vrule\copy40014\vrule\relax\getbadness{40014} + +\R28\zw +\ltjenableadjust[lineend=extended, priority=true] +\setbox40000=\vtop{\sample{lineend=extended, priority=true}} +\ltjdisableadjust +\ltjenableadjust[lineend=true, priority=false, priority=true] +\setbox40002=\vtop{\sample{linened=true,priority=true}} +\ltjdisableadjust +\ltjenableadjust[lineend=false, priority=false, priority=true] +\setbox40004=\vtop{\sample{lineend=false,priority=true}} +\ltjdisableadjust +\ltjenableadjust[lineend=extended, priority=false] +\setbox40010=\vtop{\sample{lineend=extended, priority=false}} +\ltjdisableadjust +\ltjenableadjust[lineend=true, priority=false, priority=false] +\setbox40012=\vtop{\sample{linened=true,priority=false}} +\ltjdisableadjust +\ltjenableadjust[lineend=false, priority=false, priority=false] +\setbox40014=\vtop{\sample{lineend=false,priority=false}} +\ltjdisableadjust + +\noindent +\vrule\copy40010\vrule\relax\getbadness{40010} + +\newpage +\noindent +\vrule\copy40012\vrule\relax\getbadness{40012} +\newpage +\noindent +\vrule\copy40014\vrule\relax\getbadness{40014} + + + -\end{document} \ No newline at end of file +\end{document}