texjporg / platex

pLaTeX community edition
BSD 3-Clause "New" or "Revised" License
49 stars 8 forks source link

jclasses(jarticle, tarticle 等)の追随 #28

Closed aminophen closed 7 years ago

aminophen commented 7 years ago

texconf16 のときに「jclasses も LaTeX 本家の classes の修正に追随してほしい」というご意見をいただきました。具体的にこれを調べてみたところ、ざっと見ただけでも

% \changes{v1.3y}{1998/05/05}{Two years on: Make this command not
%    react to the option \texttt{openany} as this makes the
%    verso/recto numbering wrong: see pr/2754 for discussion}
% \changes{v1.4b}{2000/05/19}{Only add empty page after part if
%    twoside and openright (pr/3155)}
% \changes{v1.4c}{2001/01/06}{Moved \cs{@mkboth} out of heading
%                             arg (pr/3285)}
% \changes{ v1.4f}{2004/02/16}{Moved setting of \cs{columnsep} and
%    \cs{columnseprule} later to avoid affecting the wrong page (pr/3616)}

などがあります。

v1.4f とかは結構わかりやすいです。

\documentclass[twocolumn]{jarticle}
\usepackage{lipsum}
%\usepackage{makeidx}\makeindex
\columnseprule10pt
\columnsep30pt
\begin{document}
\lipsum[1-7]
%\printindex
\begin{theindex}\end{theindex}
\end{document}

これで、索引とは関係ないはずの直前ページで columnsep が theindex 向けの設定に変わってしまうというバグを、2004年に LaTeX が直したということです。(なお、同じことは jsclasses では起きません:2段または3段の索引を実現すべく、設定変更前に \clearpage あるいは \onecolumn が実行されるため)

こういう部分を追随すればよいのでしょうか?

hideak-t commented 7 years ago

ありがとうございます。

えぇ、本来なら本家 LaTeX で変更になったところに追随していく必要があるところがあると思います。jclasses に限らず、本家 LaTeX のコードを上書きで書き換えているところは、本家 LaTeX のコードの変更に追随していく必要があるでしょう。

追いかけていくだけのメンテナンスで大変ですが、負担にならない程度で良いですから、よろしくお願いいたします。

aminophen commented 7 years ago

classes と jclasses の差分を取るのはそれほど難しくないので、どんどん直していくことにします。

\@mkboth の位置(TeX.SX 318699latex/3285latex/3984

% \changes{v1.4c}{2001/01/06}{Moved \cs{@mkboth} out of heading
%                             arg (pr/3285)}

これは、参考文献のヘッダが直前の節のタイトルのままになってしまうというバグです。

\documentclass[twocolumn]{jbook}
\begin{document}
 \tableofcontents
 \chapter{foo}
 \section{bar}
 foobar
 \begin{thebibliography}{255}
  \newcount\n
  \n=0\loop
    \bibitem{book\the\n} book~\the\n
  \ifnum \n<255 \advance\n 1 \repeat
 \end{thebibliography}
\end{document}

以上ふたつはわかりやすいので、fix-jclasses ブランチで作業を始めました。

aminophen commented 7 years ago

\part コマンドが \leavevmode せず、目次の順番も変になる(latex/2889

% \changes{v1.4a}{1999/01/07}{Check \texttt{@noskipsec} switch and
%      possibly force horizontal mode; see PR/2889.}

これも顕著なバグ(下のソースを処理するとわかる)ですので直します。

\documentclass{jarticle}

\setcounter{tocdepth}{99}
\setcounter{secnumdepth}{99}

\begin{document}

\tableofcontents

\part{Part}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
\paragraph{Paragraph}
\paragraph{Paragraph}                % BAD
\part{Part}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
\paragraph{Paragraph}
\paragraph{Paragraph} Text.          % OK
\part{Part}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
\paragraph{Paragraph}
\subparagraph{Subparagraph}
\subparagraph{Subparagraph}          % BAD
\part{Part}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
\paragraph{Paragraph}
\subparagraph{Subparagraph}
\subparagraph{Subparagraph} Text.    % OK
\part{Part}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
\paragraph{Paragraph}
\subparagraph{Subparagraph}
\end{document}
aminophen commented 7 years ago

jclasses.dtx の \section コマンドなどを classes.dtx に追随させました:

% \changes{v1.3c}{1995/05/25}{replace \cs{reset@font} with
%    \cs{normalfont}}

さらに、「latex.ltx カーネルから jclasses に独自コピーされたもの」というのもあるようですから、これも適宜追随させてみました。

\@dottedtocline の修正:latex/2343 に説明あり(ltsect.dtx で修正)

% \changes{v1.0z}{1996/12/20}{Added \cs{nobreak} for latex/2343}

enumerate 環境、itemize 環境の修正(ltlists.dtx で修正)

% \changes{v1.0j}{1995/07/09}{Use \cs{expandafter}}
aminophen commented 7 years ago

jclasses.dtx の classes.dtx への追随作業についてですが、ひととおり fix-jclasses ブランチで完了させました。plext.dtx も古いバグを同時に直してあります(「\parbox などを robust にする」という変更だけは、まだ追随させていない)。

なお、唯一、以下の点は、「classes に敢えて追随はしない」という方針をとりました。

% \changes{v1.3y}{1998/05/05}{Two years on: Make this command not
%    react to the option \texttt{openany} as this makes the
%    verso/recto numbering wrong: see pr/2754 for discussion}

「1996年にいったん openany オプションの挙動を変えたが、1998年にやっぱり戻した」ということなのですが、本家の議論を見る限り「バグ」と認定されてはいないようでした。jclasses はというと、「1996年には追随したが、1998年には(意図的かどうかは不明とはいえ)追随しなかった」という状態で現在に至ります。2年ならまだしも、20年たって突然 openany オプションの仕様が変わるというのはちょっとまずい気がしますから、これは「jclasses の設計がそうなっている」という主張で通すことにします。

この部分についてはドキュメント部分に上記の説明を加え、master への merge および uplatex の追随を行います。

→ 後日やっぱり直した。 https://github.com/texjporg/platex/issues/40