jlreqでの窓見出し(1行)の表示について

jlreqでの窓見出し(1行)の表示について

- M. I. の投稿
返信数: 9
初めまして。
TeX Live 2022をexeでWindows 10 22H2にインストールし使用しています。

下記文書をTeXworksのLuaLaTeXでコンパイルするとOverfullのメッセージが出て、窓見出しのある行の表示が崩れます。
\documentclass[book]{jlreq}
\NewCutinHeading{mado}{2}{}
\begin{document}
\chapter{あ}
\mado{吾輩は}
どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。
\end{document}

メッセージは下記のとおりです。
Overfull \hbox (10.0pt too wide) in paragraph at lines 5--5
|[]|
[]
Overfull \hbox (20.0pt too wide) in paragraph at lines 6--7
|\JY3/mc/m/n/10 ど
[]
Overfull \hbox (20.0pt too wide) in paragraph at lines 6--7
|\JY3/mc/m/n/10 こ
[]
[1
{c:/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./test7.aux))

手元の環境では下記のような動作を確認済みです。
(窓見出し自体の設定値はデフォルトのままですので、7字以上で2行にわたって表示されます。)
・窓見出しのテキストが1~6字では前述のとおり表示が崩れる。
・窓見出しのテキストが7字以上では正常と思われる表示になる。

原因をご教示いただけますと幸いです。
よろしくお願いいたします。
M. I. への返信

Re: jlreqでの窓見出し(1行)の表示について

- 和田 勇 の投稿
使ったことがないので、色々試行錯誤した結果です。

窓見出しの文字列を「\mado{吾輩はどこで生}」まで伸ばすと警告メッセージ
は表示されなくなります。

どうしてもと「\mado{吾輩は}」と短いものでしたら、

    \NewCutinHeading{mado}{2}{onelinemax=1\zw}
ないし \NewCutinHeading{mado}{2}{onelinemax=2\zw}
と 3\zw 未満であれば警告メッセージは表示されません。

以上はマニュアル(*1) 「 7.4 窓見出し」を参考にしました。

(*1) https://tug.ctan.org/macros/jptex/latex/jlreq/jlreq-ja.pdf
  あるいはコマンドプロンプト等で texdoc  jlreq-ja 
和田 勇 への返信

Re: jlreqでの窓見出し(1行)の表示について

- M. I. の投稿
ご確認いただきありがとうございます。

仰るとおり、現在のjlreqの設計では見出しの文字列が2行以上であればOverfullの警告が出ないようです。

jlreqのonelinemaxの既定値は恐らくJIS X 4051に同様の規定があることによるものだと思いますが、
窓見出しの用例としては1行もあり得るので、既定値のまま実現するにはどうすればよいか悩んでいました。

暫定的な対応なのかも知れませんが、ut様にご教示いただいた方法が一つの解決策となりそうです。
M. I. への返信

Re: jlreqでの窓見出し(1行)の表示について

- 和田 勇 の投稿
その判断で良いとおもいます。

質問の最後の方をよく読まずに調べてしまったので
不適切な回答であったことをお詫びいたします。
M. I. への返信

Re: jlreqでの窓見出し(1行)の表示について

- ut の投稿
# 私の手元のシステムは W32TeX [2020/07/19] と古くて、あと、
# expl3 もよく分かってないので、見当はずれかも知れませんが…。

私の手元の jlreq は [2020/05/01 jlreq] なのですが、[2022/11/28 jlreq]
と比べてみますと、「窓見出し」の設定について:

    \ifnum\jlreq@CutinHeading@linecount=1\relax
      \setbox\jlreq@resultbox=\vbox{\parindent=0pt\rightskip=0pt\leftskip=0pt\hbox{#1#6}}%
      \def\jlreq@CutinHeading@linecount{2}%
    \else

となっていた部分が:

    \int_compare:nTF { \l__jlreq_cutinheading_linecount_tl = 1 }{
      \vbox_set:Nn \l_jlreq_tmpb_box {\parindent=0pt\rightskip=0pt\leftskip=0pt\hbox_unpack_drop:N \l_jlreq_tmpa_box}
      \tl_set:Nn \l__jlreq_cutinheading_linecount_tl {2}
    }{

へと変更されています。

それで、\hbox_unpack_drop:N を \box_use_drop:N に(プリアン
ブルで)書き替えてみましたら、うまくいくように見えます。
(\hbox_unpack_drop:N だと、\vbox の幅が \linewidth になって
しまうのでしょうか)
ut への返信

Re: jlreqでの窓見出し(1行)の表示について

- M. I. の投稿
ご教示いただきありがとうございます。
この方法で想定どおりの結果が得られました。

私もexpl3は不勉強で、具体的な挙動がつかめずにいました。
jlreqのドキュメントにある改変履歴には直接窓見出しに関わりそうなものはありませんでしたが、
何らかの意図で変更されたということなのでしょうかね……。
M. I. への返信

Re: jlreqでの窓見出し(1行)の表示について

- ut の投稿
つい、癖で、「\vbox の幅が \linewidth になってしまうのでしょうか」
と語尾を濁した言い方をしてしまいましたが、「挙動」は多分、単純化
すると、以下のような感じなのではないかと思われます:

\documentclass{jarticle}

\newbox\windowbox
\setbox\windowbox=\hbox{吾輩は}
\parindent=0pt

\begin{document}

吾輩は\hfill 犬

\medskip

\leavevmode\vbox{\unhcopy\windowbox}猿

\medskip

\leavevmode\vbox{\box\windowbox}雉

\end{document}


# 余談ですが、クヌース先生御自身も The TeXbook で "admittedly peculiar"
# とおっしゃっていた "\un..." というプリミティブの名前を、expl3 では
# "unpack" と言い替えているのが、すごく分かり易くて感心してしまいました。
ut への返信

Re: jlreqでの窓見出し(1行)の表示について

- M. I. の投稿
このような違いがあるのですね。
分かりやすい例を教えていただきありがとうございます。
ut への返信

Re: jlreqでの窓見出し(1行)の表示について

- 阿部 紀行 の投稿
遅くなりました.こちらのミスでutさんの仰るとおりかと思います.直しておきます.