【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 亥 356 の投稿
返信数: 15
お世話になっております。

LuaTeXでJlreqを使った際、直観的に不自然な挙動に遭遇しました。
これが仕様通りなのか不具合なのか、仮に不具合だとして原因がLuaTeX-ja/Jlreq/JFM(jlreqv)いずれにあるのかも分かっておりませんが、ひとまず報告だけさせていただきます。

\documentclass[
lualatex,tate,onecolumn,hanging_punctuation,paper=a6,book,
fontsize=9.41pt, % ここの数字を
jafontsize=9.41pt, % 9.41、9,42、9.43とそれぞれ書きかえる
]{jlreq}

\usepackage{bxjalipsum}
\begin{document}
\jalipsum[1]{wagahai}\par
\jalipsum[2]{wagahai}
\end{document}

このようなソースで、文字のポイント数を9.41→9.42→9.43と変更すると、
1ページ目の行数が、14行→13行→14行と変動します。
一度文字を大きくすることにより13行に減った行数が、更に文字を大きくすることでまた14行に戻るのは不自然ではないかと思い、報告をさせていただきました。
一般的にみられる正常な挙動なのだとしたら申し訳ありません。

実行環境は、
・OS:Windows 10 Pro
・TeXディストリビューション:TeX Live 2018
いずれも4月6日時点の最新です。
亥 356 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- しっぽ 愛好家 の投稿
>文字のポイント数を9.41→9.42→9.43と変更すると、
そのような微妙な差で行数に影響する例は知りませんが,
似たような例はあります.

実際,TeX には「間延びした行」と「詰まりすぎた行」が
隣接するのを避けるような調整を行うためのパラメータがあります.
その調整の結果と行分割可能位置の現れ方によっては,
下記の例のように「1 文字削除したにもかかわらず行数が増える」ことが
起こり得ます.
これは,「文字サイズを減らしたにもかかわらず行数が増える」場合と
似ています.
# 一方,「文字サイズを増やしたときに行数が増えた」点については
# (文字サイズの増加量が微小でなければ普通に起こることですから)
# 気にするまでもないと思います.

\documentclass{jarticle}
\begin{document}
\parbox{21zw}{実数$\alpha = p + q\sqrt{2}$($p$,$q$は有理数)
に対して,
$N(\alpha) = p^2 - 2q^2$とおく.
また,$p - q\sqrt{2}$を$\bar{\alpha}$と書くと,
$N(\alpha) = \alpha \bar{\alpha}$である.
このとき,$\beta = p' + q'\sqrt{2}$($p'$,$q'$は有理数)に対して,
$\overline{\alpha \beta} = \bar{\alpha} \bar{\beta}$である
ことに注意すると,
$N(\alpha \beta) = (\alpha \beta) \overline{\alpha \beta}
= \alpha \bar{\alpha} \beta \bar{\beta}
= N(\alpha) N(\beta)$であることがわかる.}

\medskip

\parbox{21zw}{実数$\alpha = p + q\sqrt{2}$($p$,$q$は有理数)
に対し,%%% 上のテキストでは「に対して,」で,こちらでは「て」1 文字を削除
$N(\alpha) = p^2 - 2q^2$とおく.
また,$p - q\sqrt{2}$を$\bar{\alpha}$と書くと,
$N(\alpha) = \alpha \bar{\alpha}$である.
このとき,$\beta = p' + q'\sqrt{2}$($p'$,$q'$は有理数)に対して,
$\overline{\alpha \beta} = \bar{\alpha} \bar{\beta}$である
ことに注意すると,
$N(\alpha \beta) = (\alpha \beta) \overline{\alpha \beta}
= \alpha \bar{\alpha} \beta \bar{\beta}
= N(\alpha) N(\beta)$であることがわかる.}
\end{document}

%%% (LuaTeX の挙動の詳細は知りませんが)オリジナルの TeX でも
%%% 起こりうる例を挙げました.
しっぽ 愛好家 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- しっぽ 愛好家 の投稿
えーと,ページレイアウト・パラメータの話のようですね.
とするとすごい勘違いをしていたようです.
私の先のコメントは無視してください.
(もっとも,\widowpenalty や \brokenpenalty(だったかな)の
関係で 1 行余分に次ページに送り出されるということは
たまにありますが,今回の質問の件とは無関係でしょうね.)
しっぽ 愛好家 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 亥 356 の投稿
しっぽ 愛好家 様

お世話になっております。

こちらこそ、分かりにくい書き方で誤解を招いてしまい申し訳ありません。
行分割のお話、興味深く拝読させていただきました。
仰る通り本件と若干趣旨が異なるお話でしたが、とても分かりやすかったです。今後もどうかよろしくおねがいいたします。
亥 356 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 帯田 木偶太 の投稿
LuaTeX-jaというのも jlreqcls というのも jlreqv というのも
知らない(手許の環境には含まれていないもので)のですが、
古典的なクラスファイル(jarticle.cls とか)を使用し、行長を jlreq.cls に
おけるものと揃えて件のテキストを置いたうえで、\fontsize あたりで
文字サイズをいじりながら通常の(つまり Lua でない)pLaTeX で
タイプセットしてみれば、これらに固有の問題かどうか、見当がつくのでは
ないでしょうか。
帯田 木偶太 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 亥 356 の投稿
帯田 木偶太 様

お世話になっております。

申し訳ありません。本件と別の処理系で別のクラスファイルおよび別のJFMを用いて再現実験を行うのはどうかというご指摘ですが、仮にそれで本件と類似の事象が「再現」できたとして(あるいはできなかったとして)「処理系固有の事象かどうか」という見当をつけることができそうにありませんでした。

jlreqは別の処理系で動かすこともでき、上のソースの「lualatex,」の部分を削って、

> ptex2pdf -u -l -i -ot "-synctex=1 -no-guess-input-enc -kanji=utf8 -sjis-terminal" -od "-p a6" ファイル名

としてコンパイルするとupTeX/dvipdfmxの出力結果が得られます。こちらの出力では類似の結果は得られませんでした。しかし、これをもって「処理系固有の現象である」と言い切ることも自分にはできませんでした。というのも、jlreqの字送りは(u)pTeXとLuaTeXで異なる処理だとjlreqの作者様が公言されているためです。
http://abenori.blogspot.com/2018/12/jlreq.html

ですから、今回は特定のTeX処理系固有の事象であるかどうかという点については、最初から触れない形で報告をさせていただきました。ご了承ください。
亥 356 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 本田 知亮 の投稿
一応,インストールしてあるのは
tl2018のfrozenのはずですが
9.41, 9.42, 9.43でそれぞれ14, 14, 13行です.
いい機会だったので
tl2018-frozenのdockerのimageも作ってみて
やってみましたが同じでしたが,
9.4ptにすると13行になりました.

文字を小さくすると入る行が減りました.

\baselineskipと\textheightの値を追いかけてください.
文字サイズを変えると
それに応じてこの二つの値が変わります.

1ページに入る行数は,おおざっぱには
行数に関する方程式
(行数-1) x \baselineskip + 文字の大きさ = \textheight
の解の整数部分で,
(さらに\baselineskip/\textheightも文字の大きさの関数
になっているようです)
この値が,単調に増加するわけではないのだと思います
本田 知亮 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 本田 知亮 の投稿
>この値が,単調に増加するわけではないのだと思います

「行数」の値が,
文字サイズの増加に対して
広義単調減少するのではない

ということです.
とっちらかってました.
本田 知亮 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 亥 356 の投稿
本田 知亮 様

お世話になっております。

ソースから再現を試みていただき、ありがとうございます。
(9.41ptの計算結果が異なるのはすごく不思議でした。なぜ……)

やはり、一ページあたりの行数と文字の大きさは単純な増加と減少の関係ではない、というのが仕様であったのですね。
ご指摘いただき、ありがとうございます。補足もとても分かりやすかったです。
このあと、ご指摘いただいた計算式を追いかけてみることにいたします。今後もどうかよろしくおねがいいたします。
亥 356 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 奥村 晴彦 の投稿
あと、もともとの問題は基本版面の設計の問題ですよね。

行の長さを全角フォントサイズの整数倍にすることと、(全角フォントサイズ+行送り)の整数倍+全角フォントサイズを縦組版面の幅にすること。
奥村 晴彦 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 亥 356 の投稿
本田 知亮 様

失礼しました。
9.41ptの計算結果ではなく、9.41pt*以外*の計算結果が異なっていましたね。
寝ぼけていたようです。申し訳ありません。


奥村 晴彦 様

お世話になっております。
仰る通り、今回のような場合、版面設計が妥当かどうかという点も気にする必要があるかもしれません。
本田 知亮 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 和田 勇 の投稿
解析作業に余分な情報をいれてしまいそうですが

>\baselineskipと\textheightの値を追いかけてください

気になって追いかけていたのですが添付する表のような結果になっており、何故微増するのかわからず断念していました。


>9.41, 9.42, 9.43でそれぞれ14, 14, 13行
>9.4ptにすると13行

MacOSだと2018もpre2019 どちらも
9.40(14) 9.41(14) 9.42(13) 9.43(14) でした。

それと、9.37 から 9.49 まで試しにやったところこのほかにも 14 13 ばらばらになります。添付の表は baselineskip textwidth の値を含めtypeout したものをまとめたものです。

以上情報まで。

和田 勇 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 本田 知亮 の投稿
奥村先生の仰るように
版面設計の話,
何を土台にどういう風に
何を計算するのかというあたりだとは
思います.

一応,私のところは
Win10のtl2018(おそらくfrozen)

alpine-glibc 3.17ベースの
linuxmusl-x64のtl2018-frozenです

数字の差異が気になりますけど
luatexってこういう数字の計算を
どうやっているのかとか知らないですし
そもそもjlreqの実装も読んでないので,
どうしてなんでしょうね.

#jlreqの縦書きっていい感じですね
本田 知亮 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 亥 356 の投稿
和田 勇 様、本田 知亮 様

調査していただきありがとうございます。
わたしのほうでも、計算してみるとおかしな結果が出ており、ちょっと混乱しております。
現状、以下のように三つの観点が上がっており、このトピックで全部を取り扱うのは無理があると思っております(おりました)

① 版面設計が妥当かどうかという点
② ①に問題がないとしても、なお、おかしい(と思われる)計算結果を出力する点
③ 環境によって、異なる計算結果を出力する点(②と関連?)

今回、阿部様が②の問題についてJlreqの修正による解決を図ってくださったので、①③についてはまた(まとまったら)別の機会にトピックをたてさせていただきます。

今後もどうかよろしくおねがいいたします。
#Jlreqの縦書き大好き
亥 356 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 阿部 紀行 の投稿
以下はTeX Live 2018 frozen + jlreq 2018-04-01で試しています.

結論から言うと,意図しない動きでした.以下のソースでjlreqにバグがあることがわかります.
\documentclass[lualatex,tate,onecolumn,hanging_punctuation,paper=a6,book,fontsize=9.42pt,
number_of_lines=14 % 14行指定なのに13行になる
]{jlreq}
\usepackage{bxjalipsum}
\begin{document}
\jalipsum[1]{wagahai}\par
\jalipsum[2]{wagahai}
\end{document}

おそらく,14行にするように設定したつもりの\textheightが(計算誤差で?)わずかに14行には足らず,13行になってしまったのではないかと思います.提示されているソースでも,内部で一度14行にすると決定されています.

\addtolength{\textheight}{0.001pt}などとしてちょっとだけ増やすと行数が増えることが確認できるかと思います.本体にも入れておこうと思います.
阿部 紀行 への返信

Re: 【LuaTeX/Jlreq/縦書き】直観的に不自然な行数の変動

- 亥 356 の投稿
阿部 紀行 様

お世話になっております。
調査と修正、ありがとうございます。

Jlreqを修正してくださるとのことですので、この問題については解決したものと思います。
コメントをいただいたみなさま、ありがとうございました。
今後もどうかよろしくおねがいいたします。

#なお私のほうでも、やはり計算誤差と思われる謎の挙動を確認しているものの、
#(実際おかしな計算結果が出ているのに)どこで計算誤差が生じているのかが
#いまだによくわかっていません……