OSDN Git Service

lltjext.sty: baselineshift of JAchar may be not zero
[luatex-ja/luatexja.git] / src / ltjsclasses.dtx
index b7314df..3a5c897 100644 (file)
@@ -25,7 +25,7 @@
 %
 %  Copyright 1995-1999 ASCII Corporation.
 %  Copyright 1999-2016 Haruhiko Okumura
-%  Copyright 2016 Japanese TeX Development Community
+%  Copyright 2016-2017 Japanese TeX Development Community
 %  -----------------------------------------
 %
 % \fi
@@ -57,7 +57,7 @@
 %<*driver>
 \ProvidesFile{ltjsclasses.dtx}
 %</driver>
-  [2017/02/17 ltjsclasses ]
+  [2017/03/06 ltjsclasses ]
 %<*driver>
 \IfFileExists{luatex85.sty}{\RequirePackage{luatex85}}{}
 \documentclass{ltjsarticle}
 % これは,元々奥村晴彦先生により作成され,現在は日本語\TeX 開発コミュニティにより
 % 管理されている\texttt{jsclasses.dtx}をLua\LaTeX-ja用に改変したものです。
 % 次のドキュメントクラス(スタイルファイル)を生成します。
+%
+% [2017-02-13] forum:2121の議論を機に,ltjsreportクラスを新設しました。
+% 従来のltjsbookの |report| オプションと比べると,|abstract| 環境の使い方
+% および挙動がアスキーのjreportに近づきました。
+%
 % \begin{quote}
 %   \begin{tabular}{lll}
 %     $\langle$\textsf{article}$\rangle$ & \texttt{ltjsarticle.cls}  & 論文・レポート用 \\
 %     $\langle$\textsf{book}$\rangle$    & \texttt{ltjsbook.cls}     & 書籍用 \\
+%     $\langle$\textsf{report}$\rangle$  & \texttt{ltjsreport.cls}   & レポート用 \\
 %     $\langle$\textsf{jspf}$\rangle$    & \texttt{ltjspf.cls}       & 某学会誌用 \\
-%     $\langle$\textsf{kiyou}$\rangle$   & \texttt{ltjskiyou.cls}      & 某紀要用
+%     $\langle$\textsf{kiyou}$\rangle$   & \texttt{ltjskiyou.cls}    & 某紀要用
 %   \end{tabular}
 % \end{quote}
 %
 %
 % \begin{macro}{\if@openright}
 %
-% |\chapter|ï¼\8c|\part| ã\82\92å¥\87æ\95°ページ起こしにするかどうかです。
-% æ\9b¸ç±\8dã\81§ã\81¯ç\9c\9fã\81\8cæ¨\99æº\96ã\81§す。
+% |\chapter|ï¼\8c|\part| ã\82\92å\8f³ページ起こしにするかどうかです。
+% æ¨ªçµ\84ã\81®æ\9b¸ç±\8dã\81§ã\81¯ç\9c\9fã\81\8cæ¨\99æº\96ã\81§ï¼\8cè¦\81ã\81\99ã\82\8bã\81«ç\89\87èµ·ã\81\93ã\81\97ï¼\8cå¥\87æ\95°ã\83\9aã\83¼ã\82¸èµ·ã\81\93ã\81\97ã\81«ã\81ªã\82\8aã\81¾す。
 %
 %    \begin{macrocode}
 %<book|report>\newif\if@openright
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\if@openleft}
+%
+% [2017-02-24] |\chapter|,|\part| を左ページ起こしにするかどうかです。
+%
+%    \begin{macrocode}
+%<book|report>\newif\if@openleft
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\if@mainmatter}
 %
 % 真なら本文,偽なら前付け・後付けです。
 %
 % \paragraph{右左起こし}
 %
-% 書籍では章は通常は奇数ページ起こしになりますが,
+% 書籍では章は通常は奇数ページ起こしになりますが,横組ではこれを
+% \texttt{openright} と表すことにしてあります。
 % \texttt{openany} で偶数ページからでも始まるようになります。
 %
+% [2017-02-24] \texttt{openright} は横組では奇数ページ起こし,縦組では
+% 偶数ページ起こしを表します。ややこしいですが,これは\LaTeX の標準クラスが
+% 西欧の横組事情しか考慮せずに,奇数ページ起こしと右起こしを一緒にしてしまっ
+% たせいです。縦組での奇数ページ起こしと横組での偶数ページ起こしも表現したい
+% ので,ltjsclassesでは新たに \texttt{openleft} も追加しました。
+%
 %    \begin{macrocode}
-%<book|report>\DeclareOption{openright}{\@openrighttrue}
-%<book|report>\DeclareOption{openany}{\@openrightfalse}
+%<book|report>\DeclareOption{openright}{\@openrighttrue\@openleftfalse}
+%<book|report>\DeclareOption{openleft}{\@openlefttrue\@openrightfalse}
+%<book|report>\DeclareOption{openany}{\@openrightfalse\@openleftfalse}
 %    \end{macrocode}
 %
 % \paragraph{eqnarray環境と数式の位置}
 \DeclareOption{english}{\@englishtrue}
 %    \end{macrocode}
 %
-% \paragraph{ltjsreport相当}
+% \paragraph{ltjsbookをltjsreportもどきに}
 %
 % オプション \texttt{report} を新設しました。
 %
+% [2017-02-13] 従来は「ltjsreport相当」をltjsbookの \texttt{report} オプションで提供して
+% いましたが,新しくltjsreportクラスも作りました。どちらでもお好きな方を使ってください。
+%
 %    \begin{macrocode}
 %<*book>
 \newif\if@report
 %</book>
 %<*report>
 \setlength\fullwidth{0.76\paperwidth}
-\if@twocolumn \@tempdima=2zw \else \@tempdima=1zw \fi
+\if@twocolumn \@tempdima=2\zw \else \@tempdima=1\zw \fi
 \divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima
 \setlength\textwidth{\fullwidth}
 %</report>
 % \end{macro}
 % \end{macro}
 %
+% \section{改ページ(日本語\TeX{}開発コミュニティ版のみ)}\label{sec:cleardoublepage}
+%
+% \begin{macro}{\pltx@cleartorightpage}
+% \begin{macro}{\pltx@cleartoleftpage}
+% \begin{macro}{\pltx@cleartooddpage}
+% \begin{macro}{\pltx@cleartoevenpage}
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% 同じ命令を追加しました。
+% \begin{enumerate}
+%   \item|\pltx@cleartorightpage|:右ページになるまでページを繰る命令
+%   \item|\pltx@cleartoleftpage|:左ページになるまでページを繰る命令
+%   \item|\pltx@cleartooddpage|:奇数ページになるまでページを繰る命令
+%   \item|\pltx@cleartoevenpage|:偶数ページになるまでページを繰る命令
+% \end{enumerate}
+% となっています。
+%
+%    \begin{macrocode}
+%<*article|book|report>
+\def\pltx@cleartorightpage{\clearpage\if@twoside
+  \unless\ifodd\numexpr\c@page+\ltjgetparameter{direction}\relax
+    \hbox{}\thispagestyle{empty}\newpage
+    \if@twocolumn\hbox{}\newpage\fi
+  \fi\fi}
+\def\pltx@cleartoleftpage{\clearpage\if@twoside
+  \ifodd\numexpr\c@page+\ltjgetparameter{direction}\relax
+    \hbox{}\thispagestyle{empty}\newpage
+    \if@twocolumn\hbox{}\newpage\fi
+  \fi\fi}
+\def\pltx@cleartooddpage{\clearpage\if@twoside
+  \ifodd\c@page\else
+    \hbox{}\thispagestyle{empty}\newpage
+    \if@twocolumn\hbox{}\newpage\fi
+  \fi\fi}
+\def\pltx@cleartoevenpage{\clearpage\if@twoside
+  \ifodd\c@page
+    \hbox{}\thispagestyle{empty}\newpage
+    \if@twocolumn\hbox{}\newpage\fi
+  \fi\fi}
+%</article|book|report>
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cleardoublepage}
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% reportとbookクラスの場合に|\cleardoublepage|を再定義します。
+%    \begin{macrocode}
+%<*book|report>
+\if@openleft
+  \let\cleardoublepage\pltx@cleartoleftpage
+\else\if@openright
+  \let\cleardoublepage\pltx@cleartorightpage
+\fi\fi
+%</book|report>
+%    \end{macrocode}
+% \end{macro}
+%
 % \section{ページスタイル}\label{sec:pagestyle}
 %
 % ページスタイルとして,\LaTeXe (欧文版)の標準クラス
         \begingroup \@svsechd \endgroup
         \unskip
         \@tempskipa #1\relax
-        \hskip -\@tempskipa\@inhibitglue
+        \hskip -\@tempskipa\ltjfakeparbegin
       \else
         \clubpenalty \@clubpenalty
         \everypar{}%
 %    \begin{macrocode}
 %<*book>
 \newcommand\frontmatter{%
-  \if@openright
-    \cleardoublepage
-  \else
-    \clearpage
-  \fi
+  \pltx@cleartooddpage
   \@mainmatterfalse
   \pagenumbering{roman}}
 %    \end{macrocode}
 %
 % ページ番号を算用数字にし,章番号を付けるようにします。
 %
+% [2017-03-05] |\frontmatter| と |\mainmatter| の2つの命令は,
+% 改丁または改ページした後で |\pagenumbering{...}| でノンブルを1に
+% リセットします。長い間 |\frontmatter| は \texttt{openany} のときに
+% 単なる改ページとしていましたが,これではノンブルをリセットする際に
+% 偶奇逆転が起こる場合がありました。\texttt{openany} かどうかに依らず
+% 奇数ページまで繰るように修正することで,問題を解消しました。
+% 実は,\LaTeX の標準クラスでは1998年に修正されていた問題です
+% (コミュニティ版\pLaTeX の標準クラス2017/03/05も参照)。
+%
 %    \begin{macrocode}
 \newcommand\mainmatter{%
-% \if@openright
-    \cleardoublepage
-% \else
-%   \clearpage
-% \fi
+  \pltx@cleartooddpage
   \@mainmattertrue
   \pagenumbering{arabic}}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
 \newcommand\backmatter{%
-  \if@openright
+  \if@openleft
+       \cleardoublepage
+  \else\if@openright
     \cleardoublepage
   \else
     \clearpage
-  \fi
+  \fi\fi
   \@mainmatterfalse}
 %</book>
 %    \end{macrocode}
 %    \begin{macrocode}
 %<*book|report>
 \newcommand\part{%
-  \if@openright
+  \if@openleft
+       \cleardoublepage
+  \else\if@openright
     \cleardoublepage
   \else
     \clearpage
-  \fi
+  \fi\fi
   \thispagestyle{empty}% 欧文用標準スタイルでは plain
   \if@twocolumn
     \onecolumn
 %<*book|report>
 \def\@endpart{\vfil\newpage
   \if@twoside
-   \if@openright %% added (2016/12/13)
-    \null
-    \thispagestyle{empty}%
-    \newpage
-   \fi %% added (2016/12/13)
+   \if@openleft %% added (2017/02/24)
+    \null\thispagestyle{empty}\newpage
+   \else\if@openright %% added (2016/12/13)
+    \null\thispagestyle{empty}\newpage
+   \fi\fi %% added (2016/12/13, 2017/02/24)
   \fi
   \if@restonecol
     \twocolumn
 %    \begin{macrocode}
 %<*book|report>
 \newcommand{\chapter}{%
-  \if@openright\cleardoublepage\else\clearpage\fi
+  \if@openleft\cleardoublepage\else
+  \if@openright\cleardoublepage\else\clearpage\fi\fi
   \plainifnotempty % 元: \thispagestyle{plain}
   \global\@topnum\z@
   \if@english \@afterindentfalse \else \@afterindenttrue \fi
 %
 % タイトルを独立のページに出力するのに使われます。
 %
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% bookクラスでタイトルを必ず奇数ページに送るようにしました。といっても,
+% 横組クラスしかありませんでしたので,従来の挙動は何も変わっていません。
+% また,book以外の場合のページ番号のリセットもコミュニティ版\pLaTeX の
+% 標準クラス2017/02/15に合わせましたが,こちらも片面印刷あるいは
+% 独立のタイトルページを作らないクラスばかりでしたので,従来の挙動は
+% 何も変わらずに済みました。
+%
 %    \begin{macrocode}
 \newenvironment{titlepage}{%
-%<book>    \cleardoublepage
+%<book>    \pltx@cleartooddpage %% 2017-02-24
     \if@twocolumn
       \@restonecoltrue\onecolumn
     \else
       \@restonecolfalse\newpage
     \fi
     \thispagestyle{empty}%
-    \setcounter{page}\@ne
+    \ifodd\c@page\setcounter{page}\@ne\else\setcounter{page}\z@\fi
   }%
   {\if@restonecol\twocolumn \else \newpage \fi
     \if@twoside\else
 % する機能がありますが,|\item| 直後ではラベル用のボックスが段落先頭になる
 % ため,うまく働きませんでした。形を変えて復活させます。
 %
+% [2017-04-03 LTJ] 従来クラフファイルで定義していた |\@inhibitglue| は,
+% Lua\TeX-jaのコアに |\ltjfakeparbegin| として正式に追加されたのでリネームします.
+%
 % |\item| 命令の直後です。
 %
 %    \begin{macrocode}
-\protected\def\@inhibitglue{\directlua{luatexja.jfmglue.create_beginpar_node()}}
+\let\@inhibitglue=\ltjfakeparbegin
 \def\@item[#1]{%
   \if@noparitem
     \@donoparitem
     \else
       \clubpenalty \@clubpenalty
       \everypar{}%
-    \fi\@inhibitglue}%
+    \fi\ltjfakeparbegin}%
   \if@noitemarg
     \@noitemargfalse
     \if@nmbrlist
 %
 % [2016-12-05 LTJ] 本家[2016-11-29],lltjcore.styでの変更に追従させます.
 %
+% [2017-02-18 LTJ] lltjcore.sty側で戻したのを忘れていました.
 %    \begin{macrocode}
 \def\@gnewline #1{%
   \ifvmode
     \@nolnerr
   \else
-%<article|book>    \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \hskip\z@
-%<jspf|kiyou>    \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
-    \inhibitglue \ignorespaces
+    \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
+    \inhibitglue\ignorespaces
   \fi}
 %    \end{macrocode}
 %
 % \paragraph{ページ設定}
 %
 % ページ設定の初期化です。
+% |stfloats|パッケージがシステムにインストールされている場合は、このパッケージを使って
+% \pLaTeX の標準時と同じようにボトムフロートの下に脚注が組まれるようにします。
 %
+% [2017-02-19] \pLaTeX とLua\TeX-jaの|\@makecol|が違うことを
+%   考慮していませんでした。
 %    \begin{macrocode}
 %<article>\if@slide \pagestyle{empty} \else \pagestyle{plain} \fi
 %<book>\if@report \pagestyle{plain} \else \pagestyle{headings} \fi
 %<report|kiyou>\pagestyle{plain}
 %<jspf>\pagestyle{headings}
 \pagenumbering{arabic}
+\fnfixbottomtrue % 2017-02-19
+\IfFileExists{stfloats.sty}{\RequirePackage{stfloats}\fnbelowfloat}{}
 \if@twocolumn
   \twocolumn
   \sloppy