-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
グループ境界をはさむ時の欧文文字の禁則ペナルティ #85
Comments
眠いので明日考えますが,欧文文字からなる単語では禁則ペナルティが入らないことと関係がありそうです. \setbox0=\vbox{.\showlists}% => 禁則ペナルティなし
\setbox0=\vbox{(\showlists}% => 禁則ペナルティなし
\setbox0=\vbox{(.\showlists}% => 禁則ペナルティなし
\setbox0=\vbox{.\showlists}% => "." の後に禁則ペナルティ
|
h-kitagawa/kinsoku_around_word ブランチで次のようにしました.
個人的には「欧文文字に対する pre/postbreakpenalty は,前後の和文文字との間の行分割のしやすさを決めるもの」という認識です. |
そうですね。 pre/postbreakpenalty はあくまで和文組版 or 和欧文混植で使うものであって,欧文組版だけの場所では入らなくていいと思います。 作っていただいた ptex-base.ch の変更点の周囲を見て,もしやと思って試してみると,「ベースライン補正がある場合」にグループ境界で postbreakpenalty が入らないようです。 \ybaselineshift3pt
\message{欧→和}
\setbox0=\vbox{(漢\showlists}% "(" の後に禁則ペナルティ
\setbox0=\vbox{({漢}\showlists}% 禁則ペナルティが入らない(!)
\setbox0=\vbox{{(}漢\showlists}% 禁則ペナルティが入らない(!)
\setbox0=\vbox{{(}{漢}\showlists}% 禁則ペナルティが入らない(!)
\setbox0=\vbox{({}漢\showlists}% 禁則ペナルティが入らない(!)
\end |
7873040 で postbreakpenalty についても修正. 合字 (ligature_node) まわりの禁則ペナルティについて,現状では pre/post で不統一です.例えば fi 合字を考えると
合字の postbreakpenalty は構成要素の最後の文字 ( |
確かに。(\lastnodechar と似たような話ですね。) 一応,いままでの「postbreakpenalty が合字のグリフから決まる」という挙動を利用していた例がないか探してみます。(u)p(la)tex 標準の (u)kinsoku.tex には無さそうに見えますが…。 私が知る範囲では,upzhkinsoku.sty に OT1 / OT4 のリガチャを意図した \postbreakpenalty"5C=10000\relax % “ があります。実際に OT1 では \postbreakpenalty`\`=10000 が設定済みなので大丈夫と思われます。 以下,現行の挙動を表すテストケースを作ってみているところ…。 \tracingonline1
\showboxdepth10000
\showboxbreadth10000
% すべての欧文文字の禁則テーブルを空にする
\count200=0
\loop\ifnum\count200<256\relax
\prebreakpenalty\count200=0\relax
\advance\count200 by1\relax
\repeat
\prebreakpenalty`\'="27 % 39
\prebreakpenalty`\"="22 % 34
\postbreakpenalty`\`="60 % 96
\postbreakpenalty"5C="5C % 92
\setbox0=\vbox{pre: あ'\showlists} % => 39
\setbox0=\vbox{pre: あ''\showlists} % => 39 (first element of ligature)
\setbox0=\vbox{pre: あ"\showlists} % => 34
\setbox0=\vbox{post: `あ\showlists} % => 96
\setbox0=\vbox{post: ``あ\showlists}% => 92 (ligature)
\postbreakpenalty`\'="27 % 39
\postbreakpenalty`\"="22 % 34
\prebreakpenalty`\`="60 % 96
\prebreakpenalty"5C="5C % 92
\setbox0=\vbox{post: 'あ\showlists} % => 39
\setbox0=\vbox{post: ''あ\showlists} % => 34 (ligature)
\setbox0=\vbox{post: "あ\showlists} % => 34
\setbox0=\vbox{pre: あ`\showlists} % => 96
\setbox0=\vbox{pre: あ``\showlists}% => 96 (first element of ligature)
\end |
2c83eb0 のようにすると挿入順序を displace → postbreakpenalty の順に統一できました。(prebreakpenalty での合算処理を考えるとこの方が楽そうなので)
他には無さそうです。(見落としていなければ良いのですが) |
なんだか構成要素の文字から値を定める方針では良くない気がしてきました(xkanjiskip の挿入についても同様). 例えば,T1 エンコーディングで \documentclass{article}
\usepackage[utf8]{inputenc} % LaTeX 既定
\usepackage[T1]{fontenc}
\tracingonline1 \showboxbreadth10000 \showboxdepth10000
\prebreakpenalty`\^^T=2560
\prebreakpenalty`\>=128
\setbox0=\hbox{あ>> い\char`\^^T う»}\showbox0
\begin{document}
\end{document} このとき,構成要素の文字から値を定める方針では,和文文字とその直後の「»」の間の禁則ペナルティが不統一になります(し,結果だけを見ても不自然です).
|
個人的には統一されればどちらでも。prebreakpenalty を合字から決定することが可能なら,その方向で統一するのはいいですね。 |
なかなか悩みどころ.ショートコミュニケーションのネタになる? これで良いのかはわかりませんが, 19d4f3c で禁則ペナルティ・ xkanjiskip の挿入を(構成要素でなく)合字自身のグリフから決定するようにしました.まだデバッグ用に 7/30 18:25 追記:ベースライン補正が 0 でない場合や前の和文文字の postbreakpenalty が 0 の場合はうまくいきません,引き続き悩みます. 合字 (ligature_node) まわりの禁則ペナルティなどについて,2 つの方針を並列していじっていくことにします.
|
やっぱり迷っています。e-pTeX Wiki の \lastnodechar には
とあります。\xkanjiskip の挿入可否 (\inhibitxspcode) と禁則ペナルティはいずれも kinsoku.tex で定義されていますが,たぶん現行挙動はこの中で \postbreakpenalty だけが合字それ自体から決まり,\inhibitxspcode と \prebreakpenalty は構成要素から決まっています。この不統一のほうが,
よりも不自然な気もする…。 |
おそらくは \prebreakpenalty, \postbreakpenalty, \xkanjiskip (, \lastnodechar) を「合字それ自体」「構成要素」のどちらかに一斉に揃えることになるのだと思います.
|
グループ境界をはさむ時,欧文文字に設定されている \prebreakpenalty が入らないようです。
調べてみると,2008年にも言及がありました。
これは仕様なのか,今からでも修正できるでしょうか。
The text was updated successfully, but these errors were encountered: