Ticket #28162

ltjsclasses で,括弧で始まる \item が全角二分下がりになる

Date d'ouverture: 2012-04-24 15:36 Dernière mise à jour: 2012-08-22 23:44

Rapporteur:
Propriétaire:
Type:
État:
Atteints
Composant:
(Aucun)
Jalon:
(Aucun)
Priorité:
5 - moyen
Sévérité:
5 - moyen
Résolution:
Fixed
Fichier:
Aucun

Détails

次のソースを処理させると,platex と LuaTeX-ja で結果が異なります:

\ifdefined\kanjiskip
\documentclass[papersize]{jsarticle}
\else
\documentclass[]{ltjsarticle}
%\usepackage{lua-visual-debug}
\fi
\begin{document}
「

あ

・
\begin{itemize}
\item  「あ
\end{itemize}
\end{document}

LuaTeX-ja の実行結果で最初の 「 が全角下がりになるのは,メトリックに(\parindent 付き)段落の始めや,hbox境界には空白が入らないように指定しているからで,「仕様通り」です. しかし安直に全ての場合で空白挿入を抑止したため,3 行目の中黒の位置が 1/4 全角だけズレてしまっています.メトリックを直す必要がありそうです.

一方,\item 後の 「 は,platex だと全角下がりですが,LuaTeX-ja では全角二分下がりになっています.これは \item で始まる段落が先頭にラベル用の \hbox がおかれてしまうため,上に書いた指定が正しく働かないことによるものです.


ここから解決策の提案

もちろん jsclasses にあった \@@inhibitglue を復活させれば解決しますが,jsclasses の \@@inhibitglue:

\def\@@inhibitglue{%
  \ifx\@let@token「
    \inhibitglue
  \else
    (中略)
  \fi}
ではいちいち if 文で判定しており,4 種類の場合しか対応できていません.代わりに,「実際の段落始め」を意味する whatsit を作成するという方法はどうでしょうか?

Ticket History (3/6 Histories)

2012-04-24 15:36 Updated by: h7k
  • New Ticket "ltjsclasses で,括弧で始まる \item が全角二分下がりになる" created
2012-04-24 17:24 Updated by: h7k
Commentaire

とりあえず commit 95df0b7 で,whatsit 利用の方法で直したつもりです.

しかし,解析中に

あああ

\inhibitglue\paragraph{hoge}
という入力で,一行余計な空白ができるというバグを見つけました.この「余計な一行」は,\inhibitglue 由来の whatsit node によるもののようですが,なんとかならないかと悩んでいます.

2012-04-24 22:41 Updated by: zrbabbler
Commentaire

一行余計な空白ができるというバグ

これって

\inhibitglue \par (あ)い
\inhibitglue が〈(〉に「付いている」ことにならないということですね? これは妥当のような気がしますが。

確かに、「\paragraph{(あ)い} でその場の出力では〈(〉に \inhibitglue を効かせたい」 というパターンを救済する必要はあるのでしょうけど。

2012-04-24 23:13 Updated by: h7k
Commentaire

\inhibitglue \par (あ)い

で \inhibitglue が〈(〉に「付いている」ことにならないということですね?

いえ,そういうわけではない……です. マニュアルの 6.2 節に書きましたが,今の仕様では

  • \inhibitglue 実行時が垂直モードなら,それは次の段落の始めに効力をもつ(\everypar をいじっているのはそのため)
  • \inhibitglue 実行時が段落中なら,その段落内でしか \inhibitglue は効果を持たない

としています.なので,このコードは \inhibitglue 実行時の状況で結果が変わります.

……書いていて自分でも思ったのですが,混乱を招きそうなので「段落境界は一切またがない」と統一したほうが自然ですね.これに従って

\protected\def\inhibitglue{\relax%
  \ifhmode\ltj@@ihb\fi}
のように書き換えたら,2つ上の書き込みで問題にしている

一行余計な空白ができる

という症状もなくなりました.

2012-05-03 09:49 Updated by: h7k
  • Résolution Update from Aucun to Fixed
  • Propriétaire Update from (Aucun) to h7k
2012-08-22 23:44 Updated by: h7k
  • État Update from Ouvert to Atteints
  • Ticket Close date is changed to 2012-08-22 23:44
Commentaire

解決されているので,完了とします.

Attachment File List

No attachments

Modifier

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Connexion