% Original: jclasses.dtx
%
% Copyright 1995-2001 ASCII Corporation.
+% Copyright (c) 2010 ASCII MEDIA WORKS
+% Copyright (c) 2016-2017 Japanese TeX Development Community
%
% This file is part of the pLaTeX2e system.
% -----------------------------------------
% (aminophenさん,ありがとうございます).}
% \changes{v1.7c}{2016/12/18}{奇妙なarticleガードとコードを削除して
% ドキュメントを追加}
+% \changes{v1.7d}{2017/02/15}{\cs{if@openleft}スイッチ追加}
+% \changes{v1.7d}{2017/02/15}{openleftオプション追加}
+% \changes{v1.7d}{2017/02/15}{\cs{cleardoublepage}の代用となる命令群を追加}
+% \changes{v1.7d}{2017/02/15}{bookクラスでtitlepageを必ず奇数ページ
+% に送るように変更}
+% \changes{v1.7d}{2017/02/15}{titlepageのページ番号を奇数ならば1に、
+% 偶数ならば0にリセットするように変更}
+% \changes{v1.7d}{2017/02/15}{縦組クラスの所属表示の番号を直立にした}
+% \changes{v1.7d-ltj-13}{2017/02/19}{縦組時クラスで|ftnright|パッケージを使うと
+% 脚注番号が上書きされ横に寝てしまう問題を修正(aminophenさん,ありがとうございます).}
+% \changes{v1.7d-ltj-14}{2017/02/20}{openleftオプションの処理で\cs{iftdir}, \cs{ifydir}を
+% 誤って使っている問題を修正(aminophenさん,ありがとうございます).}
+% \changes{v1.7e}{2017/03/05}{トンボに表示するジョブ情報の書式を変更}
+% \changes{v1.7e}{2017/03/05}{\cs{frontmatter}と\cs{mainmatter}を
+% 奇数ページに送るように変更}
% \fi
%
% \iffalse
%<11pt&bk>\ProvidesFile{ltjtbk11.clo}
%<12pt&bk>\ProvidesFile{ltjtbk12.clo}
%</tate>
- [2017/01/17 v1.7c-ltj-12
+ [2017/03/06 v1.7e-ltj-14
%<article|report|book> Standard LuaLaTeX-ja class]
%<10pt|11pt|12pt> Standard LuaLaTeX-ja file (size option)]
%<*driver>
% \end{macro}
%
% \begin{macro}{\if@openright}
-% chapterレベルを奇数ページからはじめるかどうかのスイッチです。
+% chapterレベルを右ページからはじめるかどうかのスイッチです。
+% 横組では奇数ページ、縦組では偶数ページから始まることになります。
% reportクラスのデフォルトは、``no''です。
% bookクラスのデフォルトは、``yes''です。
% \begin{macrocode}
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\if@openleft}
+% chapterレベルを左ページからはじめるかどうかのスイッチです。
+% 日本語\TeX{}開発コミュニティ版で新たに追加されました。
+% 横組では偶数ページ、縦組では奇数ページから始まることになります。
+% reportクラスとbookクラスの両方で、デフォルトは``no''です。
+% \changes{v1.7d}{2017/02/15}{\cs{if@openleft}スイッチ追加}
+% \begin{macrocode}
+%<!article>\newif\if@openleft
+% \end{macrocode}
+% \end{macro}
+%
% \changes{v1.0c}{1995/12/25}{Macro \cs{if@openbib} removed}
%
% \begin{macro}{\if@mainmatter}
% |tombow|オプションが指定されると、用紙サイズに合わせてトンボを出力します。
% このとき、トンボの脇にPDFを作成した日付が出力されます。
% 作成日付の出力を抑制するには、|tombow|ではなく、|tombo|と指定をします。
+%
+% ジョブ情報の書式は元々|filename : 2017/3/5(13:3)|のような書式でしたが、
+% jsclassesにあわせて桁数固定の|filename (2017-03-05 13:03)|に直しました。
% \changes{v1.0g}{1996/09/03}{Add to \cs{@bannertoken}.}
% \changes{v1.1a}{1997/01/23}{日付出力オプション}
+% \changes{v1.7e}{2017/03/05}{トンボに表示するジョブ情報の書式を変更}
% \begin{macrocode}
\DeclareOption{tombow}{%
\tombowtrue \tombowdatetrue
\setlength{\@tombowwidth}{.1\p@}%
\@bannertoken{%
- \jobname\space:\space\number\year/\number\month/\number\day
- (\number\hour:\number\minute)}
+ \jobname\space(\number\year-\two@digits\month-\two@digits\day
+ \space\two@digits\hour:\two@digits\minute)}%
\maketombowbox}
\DeclareOption{tombo}{%
\tombowtrue \tombowdatefalse
% \subsection{右左起こしオプション}
% chapterを右ページあるいは左ページから
% はじめるかどうかを指定するオプションです。
+% |openleft|オプションは日本語\TeX{}開発コミュニティによって追加されました。
+% \changes{v1.7d}{2017/02/15}{openleftオプション追加}
% \begin{macrocode}
%<!article>\if@compatibility
%<book>\@openrighttrue
%<!article>\else
-%<!article>\DeclareOption{openright}{\@openrighttrue}
-%<!article>\DeclareOption{openany}{\@openrightfalse}
+%<!article>\DeclareOption{openright}{\@openrighttrue\@openleftfalse}
+%<!article>\DeclareOption{openleft}{\@openlefttrue\@openrightfalse}
+%<!article>\DeclareOption{openany}{\@openrightfalse\@openleftfalse}
%<!article>\fi
% \end{macrocode}
%
% \end{macro}
%
%
+% \section{改ページ(日本語\TeX{}開発コミュニティ版のみ)}\label{sec:cleardoublepage}
+%
+% \begin{macro}{\pltx@cleartorightpage}
+% \begin{macro}{\pltx@cleartoleftpage}
+% \begin{macro}{\pltx@cleartooddpage}
+% \begin{macro}{\pltx@cleartoevenpage}
+% |\cleardoublepage|命令は、\LaTeX{}カーネルでは「奇数ページになるまでページを
+% 繰る命令」として定義されています。しかしp\LaTeX{}カーネルでは、アスキーの方針
+% により「横組では奇数ページになるまで、縦組では偶数ページになるまでページを
+% 繰る命令」に再定義されています。すなわち、p\LaTeX{}では縦組でも横組でも
+% 右ページになるまでページを繰ることになります。
+%
+% p\LaTeX{}標準クラスのbookは、横組も縦組も|openright|がデフォルトになっていて、
+% これは従来p\LaTeX{}カーネルで定義された|\cleardoublepage|を利用していました。
+% しかし、縦組で奇数ページ始まりの文書を作りたい場合もあるでしょうから、
+% コミュニティ版クラスでは以下の(非ユーザ向け)命令を追加します。
+% \begin{enumerate}
+% \item|\pltx@cleartorightpage|:右ページになるまでページを繰る命令
+% \item|\pltx@cleartoleftpage|:左ページになるまでページを繰る命令
+% \item|\pltx@cleartooddpage|:奇数ページになるまでページを繰る命令
+% \item|\pltx@cleartoevenpage|:偶数ページになるまでページを繰る命令
+% \end{enumerate}
+% \changes{v1.7d}{2017/02/15}{\cs{cleardoublepage}の代用となる命令群を追加}
+% \changes{v1.7d-ltj-14}{2017/02/20}{\cs{iftdir}, \cs{ifydir}を使わないように修正}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% |\pltx@cleartooddpage|は\LaTeX{}の|\cleardoublepage|に似ていますが、
+% 上の2つに合わせるため|\thispagestyle{empty}|を追加してあります。
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cleardoublepage}
+% そしてreportとbookクラスの場合は、ユーザ向け命令である|\cleardoublepage|を、
+% |openright|オプションが指定されている場合は|\pltx@cleartorightpage|に、
+% |openleft|オプションが指定されている場合は|\pltx@cleartoleftpage|に、
+% それぞれ|\let|します。|openany|の場合はp\LaTeX{}カーネルの定義のままです。
+% \begin{macrocode}
+%<*!article>
+\if@openleft
+ \let\cleardoublepage\pltx@cleartoleftpage
+\else\if@openright
+ \let\cleardoublepage\pltx@cleartorightpage
+\fi\fi
+%</!article>
+% \end{macrocode}
+% \end{macro}
+%
+%
%
% \section{ページスタイル}\label{sec:pagestyle}
% つぎの6種類のページスタイルを使用できます。
% 右起こしページ用のページパラメータでは誤った結果になります。
% 二段組スタイルでも一段組のページが作られます。
%
+% \noindent\emph{日本語\TeX{}開発コミュニティによる変更}:
+% 上にあるのはアスキー版の説明です。改めてアスキー版の挙動を整理すると、
+% 以下のようになります。
+% \begin{enumerate}
+% \item アスキー版では、タイトルページの番号を必ず1にリセットしていましたが、
+% これは正しくありません。これは、タイトルページが奇数ページ目か偶数ページ目
+% かにかかわらず、レイアウトだけ奇数ページ用が適用されてしまうからです。
+% さらに、タイトルの次のページも偶数のページ番号を持ってしまうため、両面印刷
+% で奇数ページと偶数ページが交互に出なくなるという問題もあります。
+% \item アスキー版bookクラスは、タイトルページを必ず|\cleardoublepage|で始めて
+% いました。p\LaTeX{}カーネルでの|\cleardoublepage|の定義から、縦組の既定では
+% タイトルが偶数ページ目に出ることになります。これ自体が正しくないと断定する
+% ことはできませんが、タイトルのページ番号を1にリセットすることと合わさって、
+% 偶数ページに送ったタイトルに奇数ページ用レイアウトが適用されてしまうという
+% 結果は正しくありません。
+% \end{enumerate}
+% そこで、コミュニティ版ではタイトルのレイアウトが必ず奇数ページ用になるという
+% 挙動を支持し、bookクラスではタイトルページを奇数ページ目に送ることにしました。
+% これでタイトルページが表紙らしく見えるようになります。また、reportクラスの
+% ようなタイトルが成り行きに従って出る場合には
+% \begin{itemize}
+% \item 奇数ページ目に出る場合、ページ番号を1(奇数)にリセット
+% \item 偶数ページ目に出る場合、ページ番号を0(偶数)にリセット
+% \end{itemize}
+% としました。
+%
+% 一つめの例を考えます。
+%\begin{verbatim}
+% \documentclass{tbook}
+% \title{タイトル}\author{著者}
+% \begin{document}
+% \maketitle
+% \chapter{チャプター}
+% \end{document}
+%\end{verbatim}
+% アスキー版tbookクラスでの結果は
+%\begin{verbatim}
+% 1ページ目:空白(ページ番号1は非表示)
+% 2ページ目:タイトル(奇数レイアウト、ページ番号1は非表示)
+% 3ページ目:チャプター(偶数レイアウト、ページ番号2)
+%\end{verbatim}
+% ですが、仮に最初の空白ページさえなければ
+%\begin{verbatim}
+% 1ページ目:タイトルすなわち表紙(奇数レイアウト、ページ番号1は非表示)
+% 2ページ目:チャプター(偶数レイアウト、ページ番号2)
+%\end{verbatim}
+% とみなせるため、コミュニティ版では空白ページを発生させないようにしました。
+%
+% 二つめの例を考えます。
+%\begin{verbatim}
+% \documentclass{tbook}
+% \title{タイトル}\author{著者}
+% \begin{document}
+% テスト文章
+% \maketitle
+% \chapter{チャプター}
+% \end{document}
+%\end{verbatim}
+% アスキー版tbookクラスでの結果は
+%\begin{verbatim}
+% 1ページ目:テスト文章(奇数レイアウト、ページ番号1)
+% 2ページ目:タイトル(奇数レイアウト、ページ番号1は非表示)
+% 3ページ目:チャプター(偶数レイアウト、ページ番号2)
+%\end{verbatim}
+% ですが、これでは奇数と偶数のページ番号が交互になっていないので正しく
+% ありません。そこで、コミュニティ版では
+%\begin{verbatim}
+% 1ページ目:テスト文章(奇数レイアウト、ページ番号1)
+% 2ページ目:空白ページ(ページ番号2は非表示)
+% 3ページ目:タイトル(奇数レイアウト、ページ番号1は非表示)
+% 4ページ目:チャプター(偶数レイアウト、ページ番号2)
+%\end{verbatim}
+% と直しました。
+%
+% なお、p\LaTeX~2.09互換モードはアスキー版のまま、すなわち「ページ番号をゼロに
+% 設定」としてあります。これは、横組の右起こしの挙動としては誤りですが、縦組の
+% 右起こしの挙動としては一応正しくなっているといえます。
+%
% 最初に互換モードの定義を作ります。
% \begin{macrocode}
\if@compatibility
% \end{macrocode}
%
% そして、\LaTeX{}ネイティブのための定義です。
+% \changes{v1.7d}{2017/02/15}{bookクラスでtitlepageを必ず奇数ページ
+% に送るように変更}
+% \changes{v1.7d}{2017/02/15}{titlepageのページ番号を奇数ならば1に、
+% 偶数ならば0にリセットするように変更}
% \begin{macrocode}
\else
\newenvironment{titlepage}
{%
-%<book> \cleardoublepage
+%<book> \pltx@cleartooddpage %% 2017/02/15
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse\newpage
\fi
\thispagestyle{empty}%
- \setcounter{page}\@ne
+ \ifodd\c@page\setcounter{page}\@ne\else\setcounter{page}\z@\fi %% 2017/02/15
}%
{\if@restonecol\twocolumn \else \newpage \fi
% \end{macrocode}
% 縦組のときは、|\thanks|コマンドを|\p@thanks|に|\let|します。
% このコマンドは|\footnotetext|を使わず、直接、文字を|\@thanks|に格納
% していきます。
+%
+% 著者名の脇に表示される合印は直立した数字、注釈側は横に寝た数字となっていまし
+% たが、不自然なので|\hbox{\yoko ...}|を追加し、両方とも直立するようにしました。
+% \changes{v1.7d}{2017/02/15}{縦組クラスの所属表示の番号を直立にした}
% \begin{macrocode}
\def\p@thanks#1{\footnotemark
\protected@xdef\@thanks{\@thanks
- \protect{\noindent$\m@th^\thefootnote$~#1\protect\par}}}
+ \protect{\noindent\hbox{\yoko$\m@th^\thefootnote$}#1\protect\par}}}
% \end{macrocode}
% \end{macro}
%
%
% \subsection{章見出し}
%
-% subsubsection{マークコマンド}
+% \subsubsection{マークコマンド}
%
% \begin{macro}{\chaptermark}
% \begin{macro}{\sectionmark}
% これらの命令を|openany|オプションに応じて切り替え、二回目はそれを
% 元に戻しています。アスキーによるjclasses.dtxは、1997/01/15に
% 一回目の修正に追随しましたが、二回目の修正には追随していません。
-% コミュニティ版では、アスキーによる仕様を維持することとし、
-% |openany|オプションの場合は|\cleardoublepage|ではなく|\clearpage|が
-% 発行されます。もし|\cleardoublepage|が起きてほしい場合には、
-% 明示的に挿入してください。(参考:latex/2754)
+% コミュニティ版では、一旦はアスキーによる仕様を維持しようと考え
+% ました(2016/11/22)が、以下の理由により二回目の修正にも追随する
+% ことにしました(2017/03/05)。
+%
+% アスキー版での|\frontmatter|と|\mainmatter|の改ページ挙動は
+%\begin{quote}
+% |openright|なら|\cleardoublepage|、|openany|なら|\clearpage|を実行
+%\end{quote}
+% というものでした。しかし、|\frontmatter|及び|\mainmatter|はノンブルを
+% 1にリセットしますから、改ページの結果が偶数ページ目になる場合
+% \footnote{縦tbookのデフォルト(openright)が該当するほか、横jbookと
+% 縦tbookのopenanyのときには成り行き次第で該当する可能性があります。}に
+% ノンブルが偶奇逆転してしまいました。このままでは|openany|の場合に両面
+% 印刷がうまくいかないため、新しいコミュニティ版では
+%\begin{quote}
+% 必ず|\pltx@cleartooddpage|を実行
+%\end{quote}
+% としました。これは両面印刷(twoside)の場合は奇数ページに送り、
+% 片面印刷(oneside)の場合は単に改ページとなります。(参考:latex/2754)
% \changes{v1.7b}{2016/11/22}{補足ドキュメントを追加}
+% \changes{v1.7e}{2017/03/05}{\cs{frontmatter}と\cs{mainmatter}を
+% 奇数ページに送るように変更}
% \begin{macrocode}
%<*book>
\newcommand{\frontmatter}{%
- \if@openright \cleardoublepage \else \clearpage \fi
+ \pltx@cleartooddpage
\@mainmatterfalse\pagenumbering{roman}}
\newcommand{\mainmatter}{%
- \if@openright \cleardoublepage \else \clearpage \fi
+ \pltx@cleartooddpage
\@mainmattertrue\pagenumbering{arabic}}
\newcommand{\backmatter}{%
- \if@openright \cleardoublepage \else \clearpage \fi
+ \if@openleft \cleardoublepage \else
+ \if@openright \cleardoublepage \else \clearpage \fi \fi
\@mainmatterfalse}
%</book>
% \end{macrocode}
% \begin{macrocode}
%<*report|book>
\newcommand{\part}{%
- \if@openright \cleardoublepage \else \clearpage \fi
+ \if@openleft \cleardoublepage \else
+ \if@openright \cleardoublepage \else \clearpage \fi \fi
\thispagestyle{empty}%
\if@twocolumn\onecolumn\@tempswatrue\else\@tempswafalse\fi
\null\vfil
%<*report|book>
\def\@endpart{\vfil\newpage
\if@twoside
- \if@openright %% added (2016/12/18)
+ \if@openleft %% \if@openleft added (2017/02/15)
+ \null\thispagestyle{empty}\newpage
+ \else\if@openright %% \if@openright added (2016/12/18)
\null\thispagestyle{empty}\newpage
- \fi %% added (2016/12/18)
+ \fi\fi %% added (2016/12/18, 2017/02/15)
\fi
% \end{macrocode}
% 二段組文書のとき、スイッチを二段組モードに戻す必要があります。
% なお、縦組の場合でも右ページからはじまるように、
% フォーマットファイルで|\clerdoublepage|が定義されています。
%
+% \emph{日本語\TeX{}開発コミュニティによる補足}:コミュニティ版の実装では、
+% |openright|と|openleft|の場合に|\cleardoublepage|をクラスファイルの中で
+% 再々定義しています。\ref{sec:cleardoublepage}を参照してください。
+%
% 章見出しが出力されるページのスタイルは、\pstyle{jpl@in}になります。
% \pstyle{jpl@in}は、\pstyle{headnomble}か\pstyle{footnomble}のいずれかです。
% 詳細は、第\ref{sec:pagestyle}節を参照してください。
% \begin{macrocode}
%<*report|book>
\newcommand{\chapter}{%
- \if@openright\cleardoublepage\else\clearpage\fi
+ \if@openleft \cleardoublepage \else
+ \if@openright \cleardoublepage \else \clearpage \fi \fi
\thispagestyle{jpl@in}%
\global\@topnum\z@
\@afterindenttrue
% このマクロは、章見出しに番号を付けないときに呼び出されます。
%
% \emph{日本語\TeX{}開発コミュニティによる補足}:やはり二段組でチャプター
- タイトルより高い位置に右カラムの始点が来るという挙動を維持してあります。
+% タイトルより高い位置に右カラムの始点が来るという挙動を維持してあります。
% \changes{v1.7c}{2016/12/18}{奇妙なarticleガードとコードを削除して
% ドキュメントを追加}
% \begin{macrocode}
% \end{macro}
% \end{macro}
%
+% |stfloats|パッケージがシステムにインストールされている場合は、このパッケージを使って
+% p\LaTeX の標準時と同じようにボトムフロートの下に脚注が組まれるようにします。
% \changes{v1.0d}{1996/02/29}{articleとreportのデフォルトを
% \pstyle{plain}に修正}
% \changes{v1.4}{2002/04/09}{縦組スタイルで\cs{flushbottom}しないようにした}
+% \changes{v1.7d-ltj-13}{2017/02/19}{p\LaTeX とLua\TeX-jaの|\@makecol|が違うことを
+% 考慮していなかった}
% \begin{macrocode}
%<book>\pagestyle{headings}
%<!book>\pagestyle{plain}
\pagenumbering{arabic}
\raggedbottom
+\fnfixbottomtrue % 2017-02-19
+\IfFileExists{stfloats.sty}{\RequirePackage{stfloats}\fnbelowfloat}{}
\if@twocolumn
\twocolumn
\sloppy
%</article|report|book>
% \end{macrocode}
%
+% \section{各種パッケージへの対応}
+% もともと縦組での利用を想定されていないいくつかのパッケージについて、
+% 補正するためのコードを記述しておきます。
+% この節のコードは|filehook|パッケージ(Lua\TeX-ja読み込み時に自動でロードされます)
+% の機能を用いています。
+%
+% \subsection{\texttt{ftnright}パッケージ}
+% 脚注番号の書式が|ftnright|パッケージによって勝手に書き換えられるので、
+% パッケージ読み込み前に予め退避しておき、読み込み後に復帰させます。
+% \changes{v1.7d}{2017/02/19}{コード追加}
+% \begin{macrocode}
+%<*article|report|book>
+\AtBeginOfPackageFile*{ftnright}{\let\ltjt@orig@@makefntext=\@makefntext}
+\AtEndOfPackageFile*{ftnright}{\let\@makefntext=\ltjt@orig@@makefntext}
+%</article|report|book>
+% \end{macrocode}
%
%
% \Finale