texjporg / jsclasses

Classes tailored for use with Japanese.
BSD 2-Clause "Simplified" License
60 stars 14 forks source link

jsclasses.dtx: Fix along with the latest latex.ltx 2016/03/31+3 #44

Closed aminophen closed 7 years ago

aminophen commented 7 years ago

1995年の latex.ltx と最新の latex.ltx の差分を取って、「LaTeX で修正されたのに jsclasses では修正されていないバグ」を探索した結果、以下を見つけました。

「段落の頭へのグルー挿入禁止」のなかの \@doendpe

2015年に修正されている。ltlists.dtx より:

% \changes{v1.0t}{2015/05/10}{Explicitly reset \cs{clubpenalty} before
%  clearing \cs{everypar}; see also pr/0462 and pr/4065}

テストケースは以下(latex/4065):

\documentclass{jsarticle}
%\documentclass{article} % カーネルでは2015年に修正済み
\begin{document}

\showthe\clubpenalty

\paragraph{Paragraph title}

Blah, blah.

\showthe\clubpenalty

\begin{enumerate}
\item Blech.
\end{enumerate}

And this paragraph gets wrong \verb|\clubpenalty|...

\showthe\clubpenalty

\end{document}

「参考文献」のなかのコメントアウト部分の \@citex

jsclasses の「とりあえずコメントアウトしておきましたので,必要に応じて生かしてください。」に書かれているコードが1997年より古いコードになっている。ltbibl.dtx より:

% \changes{v1.1m}{1997/04/24}{\cs{@empty} to avoid primitive
%    error on empty cite keys. latex/2432}
% \changes{v1.1n}{2002/12/13}{Added \cs{leavevmode} in case citation
%    is at start of paragraph (pr/3486)}
% \changes{v1.1q}{2004/02/15}{Changed to use a hook with default
%     value \cs{hbox}}

参考:latex/2432latex/3486

「amsmath との衝突回避」

\ProvidesFile は jsclasses が修正しなくとも、既に本家が2004年にで修正済み。よって jsclasses では外しておくのが無難。ltclass.dtx より:

% \changes{v1.1g}{2004/01/28}{Use kernel version of
%                             \cs{@ifnextchar} (pr/3501)}

(そもそも latex.ltx の差分が7000行を超えていたのですが、見落とさないように注意深く見たつもりです)

aminophen commented 7 years ago

classes のバグフィックスのうち、jsclasses でも同じ現象が起きるものを調べてみたところ、ひとつだけありました。ただ、影響が大きい可能性があるのでまだコミットしていません。

このトピックで、「openany オプションを使っているのに、Part のあとに空ページが入るのは変だ」という話が出て、 \if@openright ... \fi が追加されています。

% \changes{v1.4b}{2000/05/19}{Only add empty page after part if
%    twoside and openright (pr/3155)}

再現ソースです。このままコンパイルすると現在の挙動ですが、コメントアウトしてある二行を有効にすると、新挙動になり、ページ数が2ページ減ります。

% latex/3155
\documentclass[openany]{jsbook}

\makeatletter
\def\@endpart{\vfil\newpage
  \if@twoside
%   \if@openright
    \null
    \thispagestyle{empty}%
    \newpage
%   \fi
  \fi
  \if@restonecol
    \twocolumn
  \fi}
\makeatother

\begin{document}
\part{A}
\chapter{I}
\part{B}
Look at the page numbers.
\end{document}

ページ数が変化するので大きな変更ともいえますが、変更自体は極めて素直なものだと思います。どちらの挙動がよいのでしょうか。

hideak-t commented 7 years ago

ありがとうございます。

このプロジェクトの本来の目的が本家の挙動に合わせるということにあるので、他の方からの異論がなければ、本家の挙動に合わせていただいた方が良いと思いますが、いかがでしょう。

okumuralab commented 7 years ago

見落としていました,すみません。

うーん,これはまずいものが見つかってしまったですね。本家は7年目(2000年)にしてバグに気づいて直し,こちらはさらに16年も温存されて,もしかして直すと重版時にびっくりされる編集者がおられる可能性が本家版より多いかもしれないということですね。ただ明らかにバグなので,今からでも直したい気もします。迷いますね。どなたか良い理屈をお考えください。

ただ,jsclassesの目的は「本家の挙動に合わせるということに」ないので,その点はご配慮いただかなくてもよいと思います。

hideak-t commented 7 years ago

ありがとうございます。

おっと、jsclasses の方の話でしたね。jclasses の方と勘違いしていました。失礼いたしました。

jsclasses の方は必ずしも本家に合わせる必要はないので、わたしの意見は取り下げます。

aminophen commented 7 years ago

pLaTeX の jclasses のほうは、本家に追随する方針ですが、唯一「ここだけは追随しない」という判断を私が下しています(参考)→後日やっぱり直した ( https://github.com/texjporg/platex/issues/40 )。この論理は以下のとおりです:

これと同じ論理を適用すると、jsclasses の場合は… どうなるのでしょうね。

「現在は余分な空ページが入っている状態です。これを手動で止めるのは面倒臭いので、変更してバグを直しておきます」ともいえますし、「変えたら挙動が変わって困るだろうから、無難に現状維持」ともいえます。どちらつかずな発言ですみません

aminophen commented 7 years ago

openany の話は forum に提起することにして、いったんその他の変更を merge します。

http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=2088