OSDN Git Service

stopped to use module(), which is removed in Lua 5.2. (WIP)
[luatex-ja/luatexja.git] / src / ltjclasses.dtx
index 9d8d760..e711b8c 100644 (file)
 % \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}を
+%   奇数ページに送るように変更}
+% \changes{v1.7e-ltj-15}{2017/08/31}{本ドキュメントのタイプセットで,小塚フォントが存在するときには
+%   それを用いるように変更(PDFサイズ削減のため).}
+% \changes{v1.7f}{2017/08/31}{和文書体の基準を全角空白から「漢」に変更}
+% \changes{v1.7g}{2017/09/19}{内部処理で使ったボックス0を空にした}
+% \changes{v1.7h}{2018/01/13}{和文スケール値\cs{Cjascale}を定義}
 % \fi
 %
 % \iffalse
 %<11pt&bk>\ProvidesFile{ltjtbk11.clo}
 %<12pt&bk>\ProvidesFile{ltjtbk12.clo}
 %</tate>
-  [2017/02/15 v1.7d-ltj-12
+  [2018/01/13 v1.7h-ltj-15
 %<article|report|book> Standard LuaLaTeX-ja class]
 %<10pt|11pt|12pt>  Standard LuaLaTeX-ja file (size option)]
 %<*driver>
 ]
 \documentclass{ltjltxdoc}
 \GetFileInfo{ltjclasses.dtx}
-\usepackage[ipaex,nfssonly]{luatexja-preset}
+\begingroup
+ \suppressfontnotfounderror=1
+ \global\font\testfont=file:KozMinPr6N-Regular.otf
+\endgroup
+\ifx\testfont\nullfont
+  \usepackage[ipaex,nfssonly]{luatexja-preset}
+\else
+  \usepackage[kozuka-pr6n,nfssonly]{luatexja-preset}
+\fi
 \usepackage[unicode]{hyperref}
 \title{Lua\LaTeX-ja用\texttt{jclasses}互換クラス}
 \author{Lua\TeX-jaプロジェクト}
 % |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
 %
 % \changes{v1.6-ltj-9}{2015/01/01}{サイズクラスのロード前にメトリックの変更を行わないと,
 % \cs{Cht}等の値が反映されないのでこの場所に移動させました.}
-% 
+%
 %    \begin{macrocode}
 %<*article|report|book>
 \directlua{luatexbase.add_to_callback('luatexja.load_jfm',
 % \begin{macro}{\Cvs}
 % \begin{macro}{\Chs}
 % 基準となる長さの設定をします。これらのパラメータは\file{lltjfont.sty}で定義
-% されています。
+% されています。基準とする文字を「全角空白」(EUCコード\texttt{0xA1A1})から
+% 「漢」(JISコード\texttt{0x3441})へ変更しました。
+% \changes{v1.7f}{2017/08/31}{和文書体の基準を全角空白から「漢」に変更}
+% \changes{v1.7g}{2017/09/19}{内部処理で使ったボックス0を空にした}
 %    \begin{macrocode}
-\setbox0\hbox{\char"3000}% 全角スペース
+\setbox0\hbox{漢}
 \setlength\Cht{\ht0}
 \setlength\Cdp{\dp0}
 \setlength\Cwd{\wd0}
 \setlength\Cvs{\baselineskip}
 \setlength\Chs{\wd0}
+\setbox0=\box\voidb@x
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 % \end{macro}
 % \end{macro}
 %
-%
+% \begin{macro}{\Cjascale}
+% 和文スケール値($1\,\mathrm{zw} \div \hbox{要求サイズ}$)を
+% 表す実数値マクロ|\Cjascale|を定義します。
+% ^^A p\LaTeXe{}の標準クラスでは、フォーマット作成時に読み込まれた
+% ^^A フォント定義ファイル(\file{jy1mc.fd} / \file{jy1gt.fd} /
+% ^^A \file{jt1mc.fd} / \file{jt1gt.fd})での和文スケール値がそのまま
+% ^^A 有効ですので、これは1です。
+% この\texttt{jclasses}互換クラスでは、Lua\TeX-ja読み込み時の和文スケール値がそのまま
+% 使用され、その値は0.962216です。
+% \changes{v1.7h}{2018/01/13}{和文スケール値\cs{Cjascale}を定義}
+%    \begin{macrocode}
+%<*article|report|book>
+\def\Cjascale{0.962216}
+%</article|report|book>
+%    \end{macrocode}
+% \end{macro}
 %
 % \section{レイアウト}
 %
 %   \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
-  \ifodd\c@page
-    \iftdir
-      \hbox{}\thispagestyle{empty}\newpage
-      \if@twocolumn\hbox{}\newpage\fi
-    \fi
-  \else
-    \ifydir
-      \hbox{}\thispagestyle{empty}\newpage
-      \if@twocolumn\hbox{}\newpage\fi
-    \fi
+  \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\c@page
-    \ifydir
-      \hbox{}\thispagestyle{empty}\newpage
-      \if@twocolumn\hbox{}\newpage\fi
-    \fi
-  \else
-    \iftdir
-      \hbox{}\thispagestyle{empty}\newpage
-      \if@twocolumn\hbox{}\newpage\fi
-    \fi
+  \ifodd\numexpr\c@page+\ltjgetparameter{direction}\relax
+    \hbox{}\thispagestyle{empty}\newpage
+    \if@twocolumn\hbox{}\newpage\fi
   \fi\fi}
 %    \end{macrocode}
 %
 %
 % \pstyle{jpl@in}スタイルは、クラスファイル内部で使用するものです。
 % \LaTeX{}では、bookクラスを\pstyle{headings}としています。
-% しかし、\cs{tableofcontnts}コマンドの内部では\pstyle{plain}として
+% しかし、\cs{tableofcontents}コマンドの内部では\pstyle{plain}として
 % 設定されるため、一つの文書でのページ番号の位置が上下に出力される
 % ことになります。
 %
 %    \end{macrocode}
 %
 % そして、\LaTeX{}ネイティブのための定義です。
-+% \changes{v1.7d}{2017/02/15}{bookクラスでtitlepageを必ず奇数ページ
+% \changes{v1.7d}{2017/02/15}{bookクラスでtitlepageを必ず奇数ページ
 %   に送るように変更}
 % \changes{v1.7d}{2017/02/15}{titlepageのページ番号を奇数ならば1に、
 %   偶数ならば0にリセットするように変更}
 %\newcommand*{\sectionmark}[1]{}
 %\newcommand*{\subsectionmark}[1]{}
 %\newcommand*{\subsubsectionmark}[1]{}
-%\newcommand*{\paragraph}[1]{}
-%\newcommand*{\subparagraph}[1]{}
+%\newcommand*{\paragraphmark}[1]{}
+%\newcommand*{\subparagraphmark}[1]{}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 % |\alph{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
 % $1=$~a, $2=$~b のようにして出力します。
 %
-% |\Roman{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
+% |\Alph{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
 % $1=$~A, $2=$~B のようにして出力します。
 %
-% |\kansuji{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
+% |\Kanji{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
 % 漢数字で出力します。
 %
 % |\rensuji{|\meta{obj}|}|は、\meta{obj}を横に並べて出力します。
 % これらの命令を|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@openleft \cleardoublepage \else
-  \if@openright \cleardoublepage \else \clearpage \fi \fi
+  \pltx@cleartooddpage
   \@mainmatterfalse\pagenumbering{roman}}
 \newcommand{\mainmatter}{%
-  \if@openleft \cleardoublepage \else
-  \if@openright \cleardoublepage \else \clearpage \fi \fi
+  \pltx@cleartooddpage
   \@mainmattertrue\pagenumbering{arabic}}
 \newcommand{\backmatter}{%
   \if@openleft \cleardoublepage \else
 % このマクロは、章見出しに番号を付けないときに呼び出されます。
 %
 % \emph{日本語\TeX{}開発コミュニティによる補足}:やはり二段組でチャプター
- タイトルより高い位置に右カラムの始点が来るという挙動を維持してあります。
+% タイトルより高い位置に右カラムの始点が来るという挙動を維持してあります。
 % \changes{v1.7c}{2016/12/18}{奇妙なarticleガードとコードを削除して
 %    ドキュメントを追加}
 %    \begin{macrocode}
 % |\@tempdima|にしていますが、この変数はいろいろな箇所で使われますので、
 % 期待した値が入らない場合があります。
 %
-% たとえば、|lltjfont.sty|での|\selectfont|は、和欧文のベースラインを調整する
-% ために|\@tempdima|変数を用いています。そのため、|\l@...|マクロの中で
-% フォントを切替えると、|\numberline|マクロのボックス
-% の幅が、ベースラインを調整するときに計算した値になってしまいます。
+% ^^A たとえば、|lltjfont.sty|での|\selectfont|は、和欧文のベースラインを調整する
+% ^^A ために|\@tempdima|変数を用いています。そのため、|\l@...|マクロの中で
+% ^^A フォントを切替えると、|\numberline|マクロのボックス
+% ^^A の幅が、ベースラインを調整するときに計算した値になってしまいます。
+% ^^A →修正(texjporg):最近の|\adjustbaseline|では|\adjust@dimen|が使われて
+% ^^A いるため、記述をコメントアウトしました。
 %
 % フォント選択コマンドの後、あるいは|\numberline|マクロの中でフォントを
 % 切替えてもよいのですが、一時変数を意識したくないので、
 % \end{macro}
 %
 % \begin{macro}{\addcontentsline}
-% ページ番号を|\rensuji|で囲むように変更します。
-% 横組のときにも`|\rensuji|'コマンドが出力されますが、
-% このコマンドによる影響はありません。
+% 縦組の場合にページ番号を|\rensuji|で囲むように変更します。
+% ^^A 横組のときにも`|\rensuji|'コマンドが出力されますが、
+% ^^A このコマンドによる影響はありません。
 %
 % このマクロは\file{ltsect.dtx}で定義されています。
 %    \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