texlive[46845] Master/texmf-dist: bxjscls (5mar18)

commits+karl at tug.org commits+karl at tug.org
Mon Mar 5 23:10:33 CET 2018


Revision: 46845
          http://tug.org/svn/texlive?view=revision&revision=46845
Author:   karl
Date:     2018-03-05 23:10:32 +0100 (Mon, 05 Mar 2018)
Log Message:
-----------
bxjscls (5mar18)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/bxjscls/LICENSE
    trunk/Master/texmf-dist/doc/latex/bxjscls/README-ja.md
    trunk/Master/texmf-dist/doc/latex/bxjscls/README.md
    trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.pdf
    trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.tex
    trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls.pdf
    trunk/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsarticle.cls
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsbook.cls
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscjkcat.sty
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscompat.sty
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-minimal.def
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-modern.def
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-pandoc.def
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-standard.def
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjspandoc.sty
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsreport.cls
    trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsslide.cls

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/LICENSE
===================================================================
--- trunk/Master/texmf-dist/doc/latex/bxjscls/LICENSE	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/doc/latex/bxjscls/LICENSE	2018-03-05 22:10:32 UTC (rev 46845)
@@ -1,21 +1,28 @@
-The MIT License
+The BSD 2-Clause License
 
-Copyright (c) 2018 Takayuki YATO (aka. "ZR")
+Copyright 1995-1999 ASCII Corporation.
+Copyright 1999-2016 Haruhiko Okumura
+Copyright 2016-2017 Japanese TeX Development Community
+Copyright 2013-2018 Takayuki YATO (aka. "ZR")
+All rights reserved.
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
 
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/README-ja.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/bxjscls/README-ja.md	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/doc/latex/bxjscls/README-ja.md	2018-03-05 22:10:32 UTC (rev 46845)
@@ -98,10 +98,19 @@
 更新履歴
 --------
 
+  * Version 1.8  〈2018/03/03〉
+      - `textwidth`、`number-of-lines` オプションを新設。
+      - `\setpagelayout+` 命令をを新設。
+      - jlreq 文書クラスとの互換用のオプション(`fontsize` 等)を追加。
+      - (u)pLaTeX 以外のエンジンでは常に `ja` オプションを明示することを
+        推奨する。
+      - 二文字フォント命令の使用の警告を少し冗長にした。
+      - バグ修正。
   * Version 1.7c 〈2018/02/04〉
       - オプション `label-section` を新設。
   * Version 1.7b 〈2018/01/28〉
       - 和文パラメタ `units` を新設。
+      - `jafont` オプションの丸括弧記法。
       - バグ修正。
   * Version 1.7a 〈2017/12/09〉
       - 〈試験的〉新元号対応の準備。`\jayear` 命令を追加。

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/README.md
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.tex	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls-manual.tex	2018-03-05 22:10:32 UTC (rev 46845)
@@ -12,8 +12,8 @@
   \renewcommand*{\XeLaTeX}{XeLaTeX}}
 \usepackage{shortvrb}
 \MakeShortVerb{\|}
-\newcommand{\PkgVersion}{v1.7c}
-\newcommand{\PkgDate}{2018/02/04}
+\newcommand{\PkgVersion}{v1.8}
+\newcommand{\PkgDate}{2018/03/03}
 \newcommand{\Pkg}[1]{\textsf{#1}}
 \newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$}
 \newcommand{\Note}{\par\noindent ※}
@@ -396,17 +396,17 @@
   「何も指定しない状態」(JSクラスと同様)である。
   すなわち実際に使われる物理フォントの選択はDVIウェアの設定に
   委ねられている。
-\item JSクラスは |\ifdraft| という公開名のスイッチ
-  \footnote{スイッチなので{\LaTeX}レベルの命令ではない。
-    標準クラスではこれに相当するものは |\if at draft| という非公開の
-    制御綴で定義されている。}%
-  を用いているが、これは\Pkg{ifdraft}パッケージと衝突する。
-    そこでBXJSクラスでは代わりに |\ifjsDraft| の名前を
-    用い、本文開始時に |\ifdraft| が未定義の場合に限り、
-    |\ifjsDraft| を |\ifdraft| にコピーする処理にしている。
-  \Note JSクラスの |\ifdraft| は2016/07/13版で廃止された。
-  従って、BXJSクラスにおいて |\ifdraft| スイッチの使用を
-  非推奨とし、将来的に廃止を予定する。
+%\item JSクラスは |\ifdraft| という公開名のスイッチ
+%  \footnote{スイッチなので{\LaTeX}レベルの命令ではない。
+%    標準クラスではこれに相当するものは |\if at draft| という非公開の
+%    制御綴で定義されている。}%
+%  を用いているが、これは\Pkg{ifdraft}パッケージと衝突する。
+%    そこでBXJSクラスでは代わりに |\ifjsDraft| の名前を
+%    用い、本文開始時に |\ifdraft| が未定義の場合に限り、
+%    |\ifjsDraft| を |\ifdraft| にコピーする処理にしている。
+%  \Note JSクラスの |\ifdraft| は2016/07/13版で廃止された。
+%  従って、BXJSクラスにおいて |\ifdraft| スイッチの使用を
+%  非推奨とし、将来的に廃止を予定する。
 \item 1.2版より、|\bf| や |\it| 等の
   {\pLaTeX}\,2.09方式のフォント選択命令の使用が
   非推奨となり、これらの命令を使うと警告が出るようになった。
@@ -445,6 +445,8 @@
 
 以下でPandocでBXJSクラスを用いる例を示す。
 
+\Note なお、以下の記述はPandoc 2.x版に従う。
+
 \begin{itemize}
 \item \Pkg{bxjsarticle}クラスを使用する一例。
   \begin{itemize}
@@ -453,9 +455,8 @@
   \item 和文フォント設定は |ipaex|
   \end{itemize}
 
-  コマンド行は次のようになる
-  \footnote{もちろん、実際には改行を含めず1行で書く。
-  なお、以下の記述はPandoc 2.x版に従う。}
+  コマンド行は次のようになる。
+  \footnote{もちろん、実際には改行を含めず1行で書く。}
   \begin{quote}
   |pandoc| \Meta{入力ファイル名}\ 
     |-o| \Meta{出力ファイル名}|.pdf|
@@ -585,10 +586,6 @@
     例えば、DVI出力のエンジンで |dvi=dvipdfmx| が指定された場合は、
     |dvipdfmx| がグローバルオプションに追加される。}%
   |autodetect-engine| と一緒に使うことが想定されている。
-\item |dvipdfmx-if-dvi|\Means
-  |dvi=dvipdfmx| と同値。
-  \Note |dvi| オプションは1.2版で新設されたもので、以前は
-  このオプションのみが存在した。
 \item |pandoc|\Means
   「Pandocモード」(\ref{sec:Pandoc-mode}節)を指定する。
   以下の設定が行われる:
@@ -609,20 +606,29 @@
   (詳細は\ref{sec:Ja-Driver}節を参照。)
   標準で提供されている和文ドライバには |minimal|、
   |standard|、|pandoc| がある。
-  既定値は、エンジンが |platex| か |uplatex| の時は |standard|、
-  それ以外は |minimal|。
-\item |jadriver=|\Meta{名前}\Means
-  「|ja=|\Meta{名前}」の(0.9版以前で使われていた)別名。
+  エンジンが |platex| か |uplatex| の時は |ja| の
+  既定値は |standard| である。
+  それ以外の場合は、一応 |minimal| とするが、
+  明示的な指定が推奨される。
 \item |jafont=|\Meta{名前}\Means
   “和文フォントプリセット指定”の名雨を設定する。
   \Note \ref{sec:Basic}節で解説した通り、standard和文ドライバでは |jafont|
   の値が利用される。
+  \par
+  プリセット指定の値が丸括弧を含む(例えば“|sourcehan(-otc)|”)場合、
+  以下のように解釈される。
+  \begin{itemize}
+  \item エンジンが{\XeLaTeX}/{\LuaLaTeX}の場合は、
+    丸括弧囲いの部分を削除した文字列(“sourcehan”)が使われる。
+  \item それ以外の場合は、
+    丸括弧だけ削除した文字列(“sourcehan-otc”)が使われる。
+  \end{itemize}
 \item |japaram={|\Meta{キー}|=|\Meta{値}|,...}|\Means
   “和文ドライバパラメタ”の値を設定する。
   詳しくは\ref{sec:Ja-Driver-Param}節を参照。
   \Note |jafont| と |japaram| の値がどのように解釈されるかは
   和文ドライバの仕様次第である。
-  minimal和文ドライバではこの2つの値は全く参照されない。
+% minimal和文ドライバではこの2つの値は全く参照されない。
 \item |base=|\Meta{長さ}\Means
   基底フォントサイズ(|\normalsize| のフォントのサイズ)を指定する。
   JSクラスの |10pt|、|11pt| 等と同じ役割で、任意の値を指定できる。
@@ -668,9 +674,19 @@
 \item |disablejfam|\Means
   |enablejfam=false| と同値。
   \Note JSクラスとの互換のため存在する。
+\item |textwidth=|\Meta{長さ}\Means
+  行長(本文領域の横幅;|\textwidth|)を指定する。
+  \begin{itemize}
+  \item \Pkg{bxjsbook}以外では、\Pkg{geometry}で |textwidth| を
+    指定したのと同値。
+  \item \Pkg{bxjsbook}では、後述の |textwidth-limit| と同様に扱われる。
+  \end{itemize}
+\item |number-of-lines=|\Meta{整数}\Means
+  1ページあたりの行数を指定する。
+  \Pkg{geometry}で |lines| を指定したのと同値。
 \end{itemize}
 
-以下に挙げるのは上級者向けのオプションである。
+\paragraph{上級者向けのオプション}\mbox{}
 
 \begin{itemize}
 \item |zw|(既定)\Means
@@ -836,6 +852,35 @@
   \end{itemize}
 \end{itemize}
 
+\paragraph{jlreq文書クラスとの互換用のオプション}\mbox{}
+
+\begin{itemize}
+\item |paper={|\Meta{横幅}|,|\Meta{縦幅}|}|\Means
+  |paper={|\Meta{横幅}|}{|\Meta{縦幅}|}| と同値(用紙サイズ設定)。
+\item |fontsize=|\Meta{長さ}\Means
+  |base=|\Meta{長さ} と同値(基底フォントサイズ)。
+\item |jafontsize=|\Meta{長さ}\Means
+  |jbase=|\Meta{長さ} と同値(和文基底フォントサイズ)。
+\item |line_length=|\Meta{長さ}\Means
+  |textwidth=|\Meta{長さ} と同値(行長指定)。
+\item |number_of_lines=|\Meta{整数}\Means
+  |number-of-lines=|\Meta{整数} と同値(行数指定)。
+\end{itemize}
+
+\paragraph{旧版との互換用のオプション}\mbox{}
+
+\begin{itemize}
+\item |dvipdfmx-if-dvi|\Means
+  |dvi=dvipdfmx| と同値。
+  \Note 1.2版より前で使われた。
+\item |magstyle=mag|/|real|/|xreal|\Means
+  それぞれ |magstyle=usemag|/|nomag|/|nomag*| と同値。
+  \Note 1.1f版より前で使われた。
+\item |jadriver=|\Meta{名前}\Means
+  |ja=|\Meta{名前} と同値(和文ドライバ指定)。
+  \Note 1.0版より前で使われた。
+\end{itemize}
+
 %-------------------
 \subsection{JSクラスのオプションで使用可能なもの}
 \label{ssec:JS-inherited-option}
@@ -934,7 +979,7 @@
   \Note これは{\pLaTeX}のカーネル命令を利用しているので
   とりあえず除外。 
 \item 和文フォントメトリック指定\Means
-  |jis|、|winjis|、|mingoth|。
+  |jis|、|mingoth|。
   \Note 異なるエンジンで汎用的に扱うのが難しい。
 \end{itemize}
 
@@ -1088,7 +1133,10 @@
 |minimal| を用いる意義がほとんどないため、
 |standard| が既定値になっている。
 
+\Note 1.8版より、(u){\pLaTeX}以外のエンジンについては、
+和文ドライバを明示指定することを推奨する。
 
+
 %===========================================================
 \section{和文ドライバパラメタ}
 \label{sec:Ja-Driver-Param}
@@ -1207,6 +1255,9 @@
   具体的には、\ref{itm:pl-parama}と\Meta{設定}の
   内容を用いて\Pkg{geometry}が再設定を行った後、
   再び\ref{itm:pl-post}の後処理が行われる。
+\item |\setpagelayout+{|\Meta{設定}|}|\Means
+  |\setpagelayout*| の変種で、「本文領域のサイズと位置」の設定のみを
+  リセットして改めてページレイアウトの設定を行う。
 \end{itemize}
 
 なお、|\geometry| 命令を直接呼び出すことも可能である。
@@ -1245,6 +1296,34 @@
   のテキストを表すマクロ。
 \end{itemize}
 
+|label-section=modern| の場合に限り、以下の命令が利用できる。
+
+\begin{itemize}
+\item |\labelsection|\Means
+  節見出し(|\section|)における節番号の表示形式を表すマクロ。
+  通常、|\thesection|(|section| カウンタの出力形式)に
+  必要な装飾(“節”や“§”など)を加えたテキストを指定する。
+  \par
+  既定値は以下に示すものと同等になっている。
+  \begin{itemize}
+  \item 文書開始時は“|\presectionname\thesection\postsectionname|”。
+  \item 付録開始時(|\appendix| 実行時)に
+    “|\appendixname\thesection|”に切り替わる。
+    \footnote{|\labelsection| を実際に再定義するわけではないので、
+    ユーザが独自の |\labelsection| を設定している場合は
+    切替は発生しなくなる。}
+  \end{itemize}
+  \Note |label-section=compat| の場合は(JSクラスと同様に)
+    付録開始時に
+    「|\presectionname| を |\appendixname| で上書きする」
+    という動作が発生するが、|label-section=compat| では
+    これは起こらない。
+\item |\labelsubsection|/|\labelsubsubsection|\Means
+  これらのマクロが定義されている場合は、各々の内容のテキストが
+  小節見出しおよび小々節見出しの表示形式として利用される。
+  未定義の場合は |\thesub(sub)section| で代用される。
+\end{itemize}
+
 %-------------------
 \subsection{和文用設定関連}
 \label{ssec:ja-settings}
@@ -1273,6 +1352,11 @@
   この命令は単純に |\hspace|\wbr|{\jsZw}| と等価である。
 \item |\jaenspace|\Means
   半角(0.5|\jsZw|)幅の水平空き。
+\item |\allowoldfontcommands|\Means
+  これ以降に実行される二文字フォント命令を警告の対象にしない。
+\item |\disallowoldfontcommands|\Means
+  これ以降に実行される二文字フォント命令を警告の対象にする。
+\Note 詳細については\ref{sec:Old-font-commands}節を参照されたい。
 \end{itemize}
 
 \subsubsection{standard和文ドライバの場合}
@@ -1298,7 +1382,9 @@
   |\trueQ| を和文スケール値で割った長さ。
   \footnote{命令名は“anti-scaled Q”の略。}%
   例えば、|\fontsize{10\ascQ}{16\trueH}|
-  で和文のサイズが10\,Qになる。
+  で和文のサイズが10\,Qになる。%
+  \footnote{1.5c版で導入された |\jafontsize| 命令を用いて %
+    |\jafontsize{10trueQ}{16trueH}| としてもよい。}
 \item |\ascpt|\Means
   1\,true\,ptを和文スケール値で割った長さ。
   例えば、|\fontsize{9\ascpt}{13truept}|
@@ -1467,18 +1553,19 @@
 %-------------------
 \subsection{警告の内容}
 
-現状では警告はとても控えめに出される。
-すなわち、文書中で |\bf| などの二文字フォント命令が呼び出された場合、
+文書中で |\bf| などの二文字フォント命令が呼び出された場合、
 コンパイルの最後に(一度だけ)以下の警告メッセージが表示される。
 
 \begin{quote}\small\begin{verbatim}
-Class bxjsarticle Warning: Some old font commands were used in text
-(bxjsarticle)              (see the log output for detail).
+Class bxjsarticle Warning: Some old font commands were used in text:
+(bxjsarticle)                \bf \it
+(bxjsarticle)              You should note, that since 1994 LaTeX2e provides a
+(bxjsarticle)              new font selection scheme called NFSS2 with several
+(bxjsarticle)              new, combinable font commands. The class provides
+(bxjsarticle)              the old font commands only for compatibility.
 \end{verbatim}
 \end{quote}
 
-少し詳細な注意メッセージが、ログファイルのみに書き出される。
-
 なお、この警告は、パッケージの機能の実装として用いられたものも含めて
 全ての二文字フォント命令の呼出が対象になる。
 ただし例外として、thebibliography環境の内部で呼び出されたものだけは
@@ -1515,8 +1602,8 @@
 %-------------------
 \subsection{将来的な二文字フォント命令の扱い}
 
-\Note 以下の記述は現在存在する和文ドライバを使用する場合に
-ついてのものである。
+\jemph{現在の版で存在する}和文ドライバを使用する場合には、
+将来的に以下の方針が維持される。
 
 \begin{itemize}
 \item 二文字フォント命令に対する警告の様式は、

Modified: trunk/Master/texmf-dist/doc/latex/bxjscls/bxjscls.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/source/latex/bxjscls/bxjscls.dtx	2018-03-05 22:10:32 UTC (rev 46845)
@@ -20,24 +20,12 @@
 %  provided by the original authors.)
 %---------------------------------------
 %
-%  pLaTeX2ε新ドキュメントクラス
+%  pLaTeX2ε新ドキュメントクラス(日本語 TeX 開発コミュニティ版)
+%  原作者:奥村晴彦 <okumura at okumuralab.org>
 %
-%  これは LaTeX3 Project の classes.dtx と株式会社アスキーの jclasses.dtx
-%  に基づいて,もともと奥村晴彦 <okumura at okumuralab.org> により
-%  作成されたものです。
-%  現在は日本語\TeX 開発コミュニティにより管理されています。
+%---------------------------------------
 %
-%  [2002-12-19] いろいろなものに収録していただく際にライセンスを明確にする
-%  必要が生じてきました。アスキーのものが最近はmodified BSDライセンスになっ
-%  ていますので,私のものもそれに準じてmodified BSDとすることにします。
-%
-%  [2016-07-11] abenoriさんによる\texttt{nomag}オプションをマージしました。
-%  なお,ソースコードの管理はGitHubで行うことにしました。
-%
-%  [2016-07-13] 日本語\TeX 開発コミュニティによる管理に移行しました。
-%
-%---------------------------------------
-%  Copyright 1993 1994 1995 1996 1997 1998 1999
+%  Copyright 1993-2016
 %  The LaTeX3 Project and any individual authors listed elsewhere
 %  in this file.
 %
@@ -45,7 +33,7 @@
 %  Copyright 1999-2016 Haruhiko Okumura
 %  Copyright 2016-2017 Japanese TeX Development Community
 %
-%  Copyright 2013-2017 Takayuki YATO (aka. "ZR")
+%  Copyright 2013-2018 Takayuki YATO (aka. "ZR")
 %
 % \fi
 % \CheckSum{0}
@@ -68,7 +56,8 @@
 %<*driver>
 \ProvidesFile{bxjscls.dtx}
 %</driver>
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
+% [2018/02/04 v1.7c BXJS document classes]
 % [2018/01/28 v1.7b BXJS document classes]
 % [2017/12/09 v1.7a BXJS document classes]
 % [2017/10/21 v1.7 BXJS document classes]
@@ -196,13 +185,20 @@
 %
 % これは\LaTeX3 Projectの \texttt{classes.dtx} と
 % 株式会社アスキーの \texttt{jclasses.dtx} に基づいて
-% 奥村が改変したものです。
-% 権利については両者のものに従います。
-% 奥村は何の権利も主張しません。
+% もともと奥村晴彦により作成されたものです。
+% 現在は日本語\TeX 開発コミュニティによりGitHubで管理されています。
+% \begin{quote}
+% |https://github.com/texjporg/jsclasses|
+% \end{quote}
 %
+% [2002-12-19] いろいろなものに収録していただく際にライセンスを明確にする
+% 必要が生じてきました。アスキーのものが最近はmodified BSDライセンスになっ
+% ていますので,私のものもそれに準じてmodified BSDとすることにします。
+%
+% [2016-07-13] 日本語\TeX 開発コミュニティによる管理に移行しました。
+%
 % [2009-02-22] 田中琢爾氏によるup\LaTeX 対応パッチを取り込みました。
 %
-% \iffalse
 % ここでは次のドキュメントクラス(スタイルファイル)を作ります。
 %
 % [2017-02-13] forum:2121の議論を機に,jsreportクラスを新設しました。
@@ -219,6 +215,8 @@
 %   \end{tabular}
 % \end{quote}
 %
+% \iffalse
+%
 % \LaTeXe あるいは\pLaTeXe 標準のドキュメントクラスとの違いを説明してお
 % きます。
 %
@@ -468,6 +466,81 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\bxjs at ifplus}
+% |\@ifstar| の |+| 版。
+%    \begin{macrocode}
+\def\bxjs at ifplus#1{\@ifnextchar+{\@firstoftwo{#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs at gset@tempcnta}
+% |calc| の整数式を用いて |\@tempcnta| の値を設定する。
+%    \begin{macrocode}
+\let\c at bxjs@tempcnta\@tempcnta
+\def\bxjs at gset@tempcnta{\setcounter{bxjs at tempcnta}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsSetQHLength}
+% |\jsSetQHLength\CS{|\Meta{長さ式}|}|\Means
+% |\setlength| の変種で、通常の |calc| の長さ式の代わりに、
+% 「|Q|/|H|/|trueQ|/|trueH|/|zw|/|zh| の単位付きの実数」
+% が記述できる(この場合は式は使えない)。
+%    \begin{macrocode}
+\def\jsSetQHLength#1#2{%
+  \begingroup
+    \bxjs at parse@qh{#2}%
+    \ifx\bxjs at tmpb\relax
+      \setlength\@tempdima{#2}%
+      \xdef\bxjs at g@tmpa{\the\@tempdima}%
+    \else \global\let\bxjs at g@tmpa\bxjs at tmpb
+    \fi
+  \endgroup
+  #1=\bxjs at g@tmpa\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs at parse@qh}
+% |#1| が |Q|/|H|/|trueQ|/|trueH|/|zw|/|zh| で終わる場合、
+% 単位用の寸法値マクロ |\bxjs at unit@XXX| が定義済なら、
+% |\bxjs at tmpb| に |#1| に等しい寸法の表現を返し、
+% そうでないならエラーを出す。
+% それ以外では、|\bxjs at tmpb| は |\relax| になる。
+% \Note {(u)\pLaTeX}の場合はこれらの和文単位はエンジンでサポートされる。
+% しかし和文フォントの設定が完了するまでは |zw|/|zh| の値は正しくない。
+%    \begin{macrocode}
+\if j\jsEngine \def\bxjs at parse@qh at all{zw,zh}
+\else \def\bxjs at parse@qh at all{trueQ,trueH,Q,H,zw,zh}
+\fi
+\def\bxjs at parse@qh#1{%
+  \let\bxjs at tmpb\relax
+  \@for\bxjs at tmpa:=\bxjs at parse@qh at all\do{%
+    \ifx\bxjs at tmpb\relax
+      \edef\bxjs at next{{\bxjs at tmpa}{#1}}%
+      \expandafter\bxjs at parse@qh at a\csname bxjs at unit@\bxjs at tmpa\expandafter
+          \endcsname\bxjs at next
+    \fi}}
+\def\bxjs at parse@qh at a#1#2#3{%
+  \def\bxjs at next##1#2\@nil##2\@nnil{\bxjs at parse@qh at b{##1}{##2}#1}%
+  \bxjs at next#3\@nil#2\@nil\@nnil}
+\def\bxjs at parse@qh at b#1#2#3{%
+  \ifx\@nnil#2\@nnil\else
+    \ifx#3\relax
+      \ClassError\bxjs at clsname
+       {You cannot use '\bxjs at tmpa' here}{\@ehc}%
+      \def\bxjs at tmpb{0pt}%
+    \else
+      \@tempdimb#3\relax \@tempdimb#1\@tempdimb
+      \edef\bxjs at tmpb{\the\@tempdimb}%
+    \fi
+  \fi}
+%    \end{macrocode}
+% 今の段階では |Q|/|H| だけが使用可能。
+%    \begin{macrocode}
+  \def\bxjs at unit@Q{0.25mm}\let\bxjs at unit@H\bxjs at unit@Q
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\jsAtEndOfClass}
 % このクラスの読込終了時に対するフック。
 % (補助パッケージ中で用いられる。)
@@ -709,7 +782,14 @@
 % 基底フォントサイズを実際に変更する。
 %    \begin{macrocode}
 \def\bxjs at setbasefontsize#1{%
-  \bxjs at setbasefontlength\@tempdima{#1}%
+%    \end{macrocode}
+% Q単位の長さ指定をサポートするため |\jsSetQHLength| を使う。
+% \Note クラスオプションのトークン列の中に展開可能なトークンが
+% ある場合、{\LaTeX}はクラスファイルの読込の前にそれを展開しようとする。
+% このため、この位置で |\jQ| をサポートすることは
+% 原理的に不可能である。
+%    \begin{macrocode}
+  \jsSetQHLength\@tempdima{#1}%
   \edef\bxjs at param@basefontsize{\the\@tempdima}%
   \ifdim\@tempdima=10pt         \long\def\@ptsize{0}%
   \else\ifdim\@tempdima=10.95pt \long\def\@ptsize{1}%
@@ -717,44 +797,6 @@
   \else \long\edef\@ptsize{\jsUnusualPtSize}\fi\fi\fi}
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\bxjs at setbasefontlength}
-% |base|、|jbase| で指定される長さ(式)のための
-% 特別な |\setlength|。
-% 与えられた式が“\Meta{実数}|Q|”の形の場合、Q単位の長さを
-% 代入する(この場合“式”は使えない)。
-% \Note クラスオプションのトークン列の中に展開可能なトークンが
-% ある場合、{\LaTeX}はファイルの読込の前にそれを展開しようとする。
-% このため、この位置で |\jQ| をサポートすることは
-% 原理的に不可能である。
-%    \begin{macrocode}
-\def\bxjs at setbasefontlength#1#2{%
-%    \end{macrocode}
-% ここで |true| の長さが使われるのは不合理なので、
-% 式が“|true|”を含む場合には警告を出す。
-%    \begin{macrocode}
-  \bxjs at setbasefontlength@a#2true\@nnil
-%    \end{macrocode}
-% 式の末尾が“|Q|”である時は特別に扱い、
-% それ以外は |\setlength| に移譲する。
-%    \begin{macrocode}
-  \ifx j\jsEngine \setlength#1{#2}%
-  \else
-    \bxjs at setbasefontlength@b#2\@nil Q\@nil\@nnil
-    \ifx\bxjs at tmpa\relax \setlength#1{#2}%
-    \else \@tempdimc0.25mm #1=\bxjs at tmpa\@tempdimc
-    \fi
-  \fi}
-\def\bxjs at setbasefontlength@b#1Q\@nil#2\@nnil{%
-  \ifx\@nnil#2\@nnil \let\bxjs at tmpa\relax
-  \else \def\bxjs at tmpa{#1}%
-  \fi}
-\def\bxjs at setbasefontlength@a#1true#2\@nnil{%
-  \ifx\@nnil#2\@nnil\else
-    \ClassWarningNoLine\bxjs at clsname
-    {You should not use 'true' lengths here}%
-  \fi}
-%    \end{macrocode}
-% \end{macro}
 %
 % |\ifjsc at mag| は「|\mag| を使うか」を表すスイッチ。
 %
@@ -1511,13 +1553,6 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\ifbxjs at scaleset}
-% 和文スケール値が指定されたか。
-%    \begin{macrocode}
-\newif\ifbxjs at scaleset
-%    \end{macrocode}
-% \end{macro}
-%
 % \begin{macro}{\jsScale}
 % 〔実数値マクロ〕
 % 和文スケール値。
@@ -1526,38 +1561,52 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\bxjs at base@opt}
+% |base| オプションの値(そのもの)。
+%    \begin{macrocode}
+%\let\bxjs at base@opt\@undefined
+%    \end{macrocode}
+% \end{macro}
+%
 % |base| オプションの処理。
 %    \begin{macrocode}
-\define at key{bxjs}{base}{\bxjs at setbasefontsize{#1}}
+\define at key{bxjs}{base}{%
+  \edef\bxjs at base@opt{#1}%
+  \bxjs at setbasefontsize{#1}}
+\define at key{bxjs}{fontsize}{\setkeys{bxjs}{base=#1}}
 %    \end{macrocode}
 %
+% \begin{macro}{\bxjs at jbase@opt}
+% |jbase| オプションの値。
+%    \begin{macrocode}
+%\let\bxjs at jbase@opt\@undefined
+%    \end{macrocode}
+% \end{macro}
+%
 % |jbase| オプションの処理。
-% ここでは |\jsScale| の値を使用する。
-% |scale| の処理との順序依存を消すため、
-% |jbase| の処理の実行を遅延させている。
 %     \begin{macrocode}
-\@onlypreamble\bxjs at do@opt at jbase
-\let\bxjs at do@opt at jbase\relax
-\define at key{bxjs}{jbase}{\bxjs at setjbasefontsize{#1}}
-\def\bxjs at setjbasefontsize#1{%
-  \def\bxjs at do@opt at jbase{%
-    \bxjs at setbasefontlength\@tempdima{#1}%
-    \bxjs at invscale\@tempdima\jsScale
-    \bxjs at setbasefontsize{\@tempdima}}}
+\define at key{bxjs}{jbase}{\edef\bxjs at jbase@opt{#1}}
+\define at key{bxjs}{jafontsize}{\setkeys{bxjs}{jbase=#1}}
 %    \end{macrocode}
 %
+% \begin{macro}{\bxjs at scale@opt}
+% |scale| オプションの値。
+%    \begin{macrocode}
+%\let\bxjs at jbase@opt\@undefined
+%    \end{macrocode}
+% \end{macro}
+%
 % |scale| オプションの処理。
 %    \begin{macrocode}
 \define at key{bxjs}{scale}{%
-  \bxjs at scalesettrue
-  \edef\jsScale{#1}}
+  \edef\bxjs at scale@opt{#1}%
+  \let\jsScale\bxjs at scale@opt}
+\define at key{bxjs}{jsfontscale}{\setkeys{bxjs}{scale=#1}}
 %    \end{macrocode}
 %
 % |noscale| オプションの処理。
 %    \begin{macrocode}
-\DeclareOption{noscale}{%
-  \bxjs at scalesettrue
-  \def\jsScale{1}}
+\DeclareOption{noscale}{\setkeys{bxjs}{scale=1}}
 %    \end{macrocode}
 %
 % \begin{macro}{\bxjs at param@mag}
@@ -1773,6 +1822,24 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\bxjs at textwidth@opt}
+% |textwidth| の指定値。
+%    \begin{macrocode}
+%\let\bxjs at textwidth@opt\@undefined
+\define at key{bxjs}{textwidth}{\edef\bxjs at textwidth@opt{#1}}
+\define at key{bxjs}{line_length}{\setkeys{bxjs}{textwidth=#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bxjs at number@of at lines@opt}
+% |number-of-lines| の指定値。
+%    \begin{macrocode}
+%\let\bxjs at number@of at lines@opt\@undefined
+\define at key{bxjs}{number-of-lines}{\edef\bxjs at number@of at lines@opt{#1}}
+\define at key{bxjs}{number_of_lines}{\setkeys{bxjs}{number-of-lines=#1}}
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\bxjs at paragraph@mark}
 % |paragraph-mark| の指定値。
 % パラグラフのマーク。
@@ -1905,7 +1972,7 @@
 %    \end{macrocode}
 %
 % \paragraph{グローバルオプションの整理 \ZRX}
-%
+% \mbox{}
 % \begin{ZRnote}
 %
 % グローバルオプションのトークン列に |{ }| が含まれていると、
@@ -2152,10 +2219,37 @@
 \fi
 %    \end{macrocode}
 %
-% オプション処理時に遅延させていた |jbase| の処理をここで実行する。
+% |base|、|jbase|、|scale| の値を用いて和文スケール値を解決する。
+% \Note |\bxjs at param@basefontsize| と |\jsScale| へのオプション値の反映は
+% 既に実施されていることに注意。
+% |jbase| 非指定の場合はこのままでよい。
 %    \begin{macrocode}
-\bxjs at do@opt at jbase
+\ifx\bxjs at jbase@opt\@undefined\else
+  \ifx\bxjs at base@opt\@undefined
 %    \end{macrocode}
+% |jbase| 指定済で |base| 未指定の場合は、|\jsScale| の値を採用して
+% 和文基底サイズを決定する。
+%    \begin{macrocode}
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \bxjs at invscale\@tempdima\jsScale
+    \bxjs at setbasefontsize{\@tempdima}%
+  \else
+%    \end{macrocode}
+% |jbase| と |base| がともに指定済の場合は、それらの値から
+% 和文スケール値を決定する。
+%    \begin{macrocode}
+    \ifx\bxjs at scale@opt\@undefined\else
+      \ClassWarningNoLine\bxjs at clsname
+       {Redundant 'scale' option is ignored}%
+    \fi
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \@tempdimb=\bxjs at param@basefontsize\relax
+    \edef\jsScale{\strip at pt\@tempdimb}%
+    \bxjs at invscale\@tempdima\jsScale
+    \edef\jsScale{\strip at pt\@tempdima}%
+  \fi
+\fi
+%    \end{macrocode}
 %
 % \begin{macro}{\Cjascale}
 % 和文クラス共通仕様(※ただしZR氏提唱)における、
@@ -2298,8 +2392,7 @@
   \edef\bxjs at param@mag{\the\@tempcnta}
 \else
 % mag値が直接指定された場合
-  \let\c at bxjs@cnta\@tempcnta
-  \setcounter{bxjs at cnta}{\bxjs at param@mag}
+  \bxjs at gset@tempcnta{\bxjs at param@mag}
   \ifnum\@tempcnta<\z@ \@tempcnta=\z@ \fi
 % 有効なmag値の範囲は1--32768
   \edef\bxjs at param@mag{\the\@tempcnta}
@@ -3064,6 +3157,12 @@
 \setlength{\topskip}{10\p@?}
 %    \end{macrocode}
 %
+% |\jsSetQHLength| のための和文単位の定義。
+%    \begin{macrocode}
+\def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
+\def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
+%    \end{macrocode}
+%
 % |\bxjs at param@paper| が長さ指定(|{W}{H}|)の場合、
 % |geometry| の形式(|papersize={W,H}|)に変換する。
 %    \begin{macrocode}
@@ -3071,9 +3170,11 @@
 \def\bxjs at read@b{%
   \ifx\bxjs at tmpa\bgroup \expandafter\bxjs at read@c
   \else \expandafter\bxjs at read@d \fi}
-\def\bxjs at read@c#1#2#3\@nil{\def\bxjs at param@paper{papersize={#1,#2}}}
-\def\bxjs at read@d#1\@nil{}
-\expandafter\bxjs at read@a\bxjs at param@paper\@nil
+\def\bxjs at read@c#1#2#3\@nil{\edef\bxjs at param@paper{papersize={#1,#2}}}
+\def\bxjs at read@d#1\@nil{\bxjs at read@e#1,,\@nil}
+\def\bxjs at read@e#1,#2,#3\@nil{%
+  \ifx\@nil#3\@nil\else \edef\bxjs at param@paper{papersize={#1,#2}}\fi}
+\expandafter\bxjs at read@a\bxjs at param@paper\@empty\@empty\@nil
 %    \end{macrocode}
 %
 % \begin{macro}{\bxjs at layout@paper}
@@ -3091,25 +3192,28 @@
 % 文書クラス毎に異なる。
 %    \begin{macrocode}
 %<*article|report>
-\def\bxjs at layout{%
+\def\bxjs at layout@base{%
   headheight=\topskip,footskip=0.03367\paperheight,%
   headsep=\footskip-\topskip,includeheadfoot,%
+}
+\edef\bxjs at layout{\bxjs at layout@base
   hscale=0.76,hmarginratio=1:1,%
   vscale=0.83,vmarginratio=1:1,%
 }
 %</article|report>
 %<*book>
+\def\bxjs at layout@base{%
+  headheight=\topskip,headsep=6\jsc at mmm,nofoot,includeheadfoot,%
+}
 \ifbxjs at layout@buggyhmargin     %---
 % アレ
-\def\bxjs at layout{%
-  headheight=\topskip,headsep=6\jsc at mmm,nofoot,includeheadfoot,%
+\edef\bxjs at layout{\bxjs at layout@base
   hmargin=36\jsc at mmm,hmarginratio=1:1,%
   vscale=0.83,vmarginratio=1:1,%
 }
 \else                           %---
 % 非アレ
-\def\bxjs at layout{%
-  headheight=\topskip,headsep=6\jsc at mmm,nofoot,includeheadfoot,%
+\edef\bxjs at layout{\bxjs at layout@base
   hmargin=18\jsc at mmm,%
   vscale=0.83,vmarginratio=1:1,%
 }
@@ -3116,8 +3220,10 @@
 \fi                             %---
 %</book>
 %<*slide>
-\def\bxjs at layout{%
+\def\bxjs at layout@base{%
   noheadfoot,%
+}
+\edef\bxjs at layout{\bxjs at layout@base
   hscale=0.9,hmarginratio=1:1,%
   vscale=0.944,vmarginratio=1:1,%
 }
@@ -3125,6 +3231,20 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% |textwidth| オプションの設定を反映する。
+%    \begin{macrocode}
+%<*!book>
+\ifx\bxjs at textwidth@opt\@undefined\else
+  \jsSetQHLength\@tempdima{\bxjs at textwidth@opt}
+  \edef\bxjs at layout{\bxjs at layout width=\the\@tempdima,}
+\fi
+%</!book>
+\ifx\bxjs at number@of at lines@opt\@undefined\else
+  \bxjs at gset@tempcnta{\bxjs at number@of at lines@opt}
+  \edef\bxjs at layout{\bxjs at layout lines=\the\@tempcnta,}
+\fi
+%    \end{macrocode}
+%
 % \begin{macro}{\fullwidth}
 % 〔寸法レジスタ〕
 % ヘッダ・フッタ領域の横幅。
@@ -3140,8 +3260,7 @@
 %<*book>
 \newcommand\jsTextWidthLimit{40}
 \ifx\bxjs at textwidth@limit\@undefined\else
-  \let\c at bxjs@cnta\@tempcnta
-  \setcounter{bxjs at cnta}{\bxjs at textwidth@limit}
+  \bxjs at gset@tempcnta{\bxjs at textwidth@limit}
   \long\edef\jsTextWidthLimit{\the\@tempcnta}
 \fi
 %</book>
@@ -3160,6 +3279,7 @@
   \ifbxjs at whole@zw at lines
     \@tempdimb=\textwidth
     \if at twocolumn \@tempdima=2\Cwd \else \@tempdima=1\Cwd \fi
+    \advance\textwidth.005pt\relax
     \divide\textwidth\@tempdima \multiply\textwidth\@tempdima
     \advance\@tempdimb-\textwidth
     \advance\oddsidemargin 0.5\@tempdimb
@@ -3167,8 +3287,12 @@
   \fi
   \fullwidth=\textwidth
 %<*book>
-  \ifdim\textwidth>\jsTextWidthLimit\Cwd
-    \textwidth=\jsTextWidthLimit\Cwd
+  \@tempdima=\jsTextWidthLimit\Cwd
+  \ifx\bxjs at textwidth@opt\@undefined\else
+    \jsSetQHLength\@tempdima{\bxjs at textwidth@opt}
+  \fi
+  \ifdim\textwidth>\@tempdima
+    \textwidth=\@tempdima
     \addtolength\evensidemargin{\fullwidth-\textwidth}
   \fi
 %</book>
@@ -3175,6 +3299,7 @@
 % textheight 調整
   \@tempdimb=\textheight
   \advance\textheight-\topskip
+  \advance\textheight.005pt\relax
   \divide\textheight\baselineskip \multiply\textheight\baselineskip
   \advance\textheight\topskip
   \advance\@tempdimb-\textheight
@@ -3223,11 +3348,10 @@
 % ようにする自動調整を行うが、これをどうするかは未検討。
 % 今のところ、単純に回避(無効化)している。
 %    \begin{macrocode}
-\@onlypreamble\bxjs at revert
-\let\bxjs at revert\@empty
-\edef\bxjs at tmpa{\the\ht\strutbox}
-\ht\strutbox=10\p@?
-\g at addto@macro\bxjs at revert{\ht\strutbox=\bxjs at tmpa\relax}
+\def\bxjs at geometry@guard at on{%
+  \edef\bxjs at gg@tmp{\the\ht\strutbox}\ht\strutbox=10\jsc at mpt}
+\def\bxjs at geometry@guard at off{%
+  \ht\strutbox=\bxjs at gg@tmp\relax}
 %    \end{macrocode}
 %
 % |geometry| のドライバオプション指定。
@@ -3253,11 +3377,13 @@
 % \Note |geometry| のbegin-documentフックにおいて、Lua{\TeX}の
 % 旧版互換を有効にする。
 %    \begin{macrocode}
-\edef\bxjs at nxt{%
-  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}}
 \AtBeginDocument{\bxjs at pre@geometry at hook}
 \AtBeginDocument{\ImposeOldLuaTeXBehavior}
-\bxjs at nxt \bxjs at revert
+\bxjs at geometry@guard at on
+\edef\bxjs at next{%
+  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}%
+}\bxjs at next
+\bxjs at geometry@guard at off
 \AtBeginDocument{\RevokeOldLuaTeXBehavior}
 %    \end{macrocode}
 %
@@ -3307,14 +3433,23 @@
 % \end{itemize}
 % どちらも設定の後で後処理 |\bxjs at postproc@layout| を実行する。
 %    \begin{macrocode}
-\def\setpagelayout{\@ifstar
-  {\bxjs at reset@layout}{\bxjs at modify@layout}}
-\def\bxjs at modify@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
-\def\bxjs at reset@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{reset,\bxjs at layout@paper,#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at setpagelayout@a\tw@}{%else
+    \@ifstar{\bxjs at setpagelayout@a\@ne}{\bxjs at setpagelayout@a\z@}}}
+\def\bxjs at setpagelayout@a#1#2{%
+  \ifcase#1% modify
+    \def\bxjs at next{\ifjsc at mag truedimen,\fi #2}%
+  \or% reset(*)
+    \def\bxjs at next{reset,\bxjs at layout@paper,#2}%
+  \or% semireset(+)
+    \def\bxjs at next{reset,\bxjs at layout@paper,\bxjs at layout@base,#2}%
+  \fi
+  \bxjs at geometry@guard at on
+  \edef\bxjs at next{%
+    \noexpand\geometry{\bxjs at next}%
+  }\bxjs at next
+  \bxjs at geometry@guard at off
+  \bxjs at postproc@layout}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -3347,8 +3482,9 @@
 % |\setpagelayout| はとりあえず無効にしておく。
 %    \begin{macrocode}
 \let\bxjs at geometry@driver\relax
-\def\setpagelayout{\@ifstar
-  {\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at pagelayout@a}{%else
+    \@ifstar{\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}}
 \def\bxjs at pagelayout@a#1{%
   \ClassError\bxjs at clsname
    {Command '\string\setpagelayout' is not supported,\MessageBreak
@@ -3371,7 +3507,9 @@
 % \Note diffが崩壊するのを避けるためオリジナルのコードを無効化した状態で
 % 挿入しておく。
 % \end{ZRnote}
+%    \begin{macrocode}
 %<*jsclasses>
+%    \end{macrocode}
 %
 % \paragraph{縦方向のスペース}
 %
@@ -3744,7 +3882,9 @@
 %    \end{macrocode}
 % \end{macro}
 %
+%    \begin{macrocode}
 %</jsclasses>
+%    \end{macrocode}
 %
 % \paragraph{脚注}
 %
@@ -6387,7 +6527,6 @@
 % \end{macro}
 % \end{macro}
 %
-% \Note 1.x版ではWarningではなくInfoに留めておく。
 %    \begin{macrocode}
 \let\bxjs at oldfontcmd@list\@empty
 \def\bxjs at oldfontcmd#1{%
@@ -6410,9 +6549,6 @@
   \bxjs at oldfontcmd@list
   \ifx\@tempa\@empty\else
     \ClassWarningNoLine\bxjs at clsname
-     {Some old font commands were used in text\MessageBreak
-      (see the log file for detail)}%
-    \ClassInfo\bxjs at clsname
      {Some old font commands were used in text:\MessageBreak
       \space\@tempa\MessageBreak
       You should note, that since 1994 LaTeX2e provides a\MessageBreak
@@ -6419,9 +6555,7 @@
       new font selection scheme called NFSS2 with several\MessageBreak
       new, combinable font commands. The
       class provides\MessageBreak
-      the old font commands
-      only for compatibility%
-      \@gobble}%
+      the old font commands only for compatibility}
   \fi}
 %    \end{macrocode}
 % 単純に |\AtEndDocument| のフックの中で |\bxjs at warnoldfontcmd@final| を
@@ -8075,14 +8209,14 @@
 %
 % |\jsLetHeadChar| を和文文字トークンに対応させる。
 %    \begin{macrocode}
-\def\bxjs at let@hchar at chr@pp#1{%
-  \expandafter\bxjs at let@hchar at chr@pp at a\meaning#1\relax#1}
-\def\bxjs at let@hchar at chr@pp at a#1#2\relax#3{%
-%\message{(#1)}%
-  \bxjs at cond\if#1t\fi{%
-    \bxjs at let@hchar at chr@ue#3%
+\def\bxjs at let@hchar at chr@pp#1#2{%
+  \expandafter\bxjs at let@hchar at chr@pp at a\meaning#2\relax#1#2}
+\def\bxjs at let@hchar at chr@pp at a#1#2\relax#3#4{%
+%\message{(\meaning#3:\meaning#4)}%
+  \bxjs at cond\if#1k\fi{%
+    \bxjs at let@hchar at out\def{{#4}}%
   }{%else
-    \bxjs at let@hchar at out\def{{#3}}%
+    \bxjs at let@hchar at chr@ue#3#4%
   }}
 \let\bxjs at let@hchar at chr\bxjs at let@hchar at chr@pp
 %    \end{macrocode}
@@ -8228,6 +8362,13 @@
 \selectfont
 %    \end{macrocode}
 %
+% |\bxjs at parse@qh| の処理は不要になるので無効化する。
+%    \begin{macrocode}
+\def\bxjs at parse@qh#1{\let\bxjs at tmpb\relax}
+\let\bxjs at parse@qh at a\@undefined
+\let\bxjs at parse@qh at b\@undefined
+%    \end{macrocode}
+%
 % \paragraph{パラメタの設定}
 %
 %    \begin{macrocode}
@@ -8709,8 +8850,8 @@
 \fi
 %    \end{macrocode}
 %
-% |units| パラメタが有効の場合は、|bxcalc| パッケージを読みこんで、
-% |\usepTeXunits| 命令を実行する。
+% |units| パラメタが有効の場合は、|bxcalc| パッケージの |\usepTeXunits| 命令
+% を実行して和文用単位を有効化する。
 %    \begin{macrocode}
 \ifbxjs at jp@units
   \IfFileExists{bxcalc.sty}{%
@@ -8719,6 +8860,7 @@
       \PackageWarningNoLine\bxjs at clsname
        {Cannot support pTeX units (zw etc.), since\MessageBreak
         the package 'bxcalc' is too old}%
+      \bxjs at jp@unitsfalse
     \else \usepTeXunits
     \fi
   }{%else
@@ -8725,10 +8867,21 @@
     \PackageWarningNoLine\bxjs at clsname
      {Cannot support pTeX units (zw etc.), since\MessageBreak
       the package 'bxcalc' is unavailable}%
+    \bxjs at jp@unitsfalse
   }
 \fi
 %    \end{macrocode}
 %
+% |bxcalc| で和文用単位をサポートした場合は、|\bxjs at parse@qh| の処理は不要に
+% なるので無効化する。
+%    \begin{macrocode}
+\ifbxjs at jp@units
+\def\bxjs at parse@qh#1{\let\bxjs at tmpb\relax}
+\let\bxjs at parse@qh at a\@undefined
+\let\bxjs at parse@qh at b\@undefined
+\fi
+%    \end{macrocode}
+%
 % \begin{macro}{\bxjs at let@lenexpr}
 % |\bxjs at let@lenexpr\CS{|\Meta{長さ式}|}|\Means
 % 長さ式に |bxcalc| の展開を適用した結果のトークン列を |\CS| に代入する。
@@ -8801,57 +8954,6 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\jsSetQHLength}
-% |\jsSetQHLength\CS{|\Meta{長さ式}|}|\Means
-% |\setlength| の変種で、通常の |calc| の長さ式の代わりに、
-% \Meta{実数}|Q|・\Meta{実数}|H|・\Meta{実数}|trueQ|・\Meta{実数}|trueH|
-% が記述できる。
-%    \begin{macrocode}
-\def\jsSetQHLength#1#2{%
-  \begingroup
-    \bxjs at parse@qh{#2}%
-    \ifx\bxjs at tmpb\relax \setlength\@tempdima{#2}%
-    \else \@tempdima\bxjs at tmpb\relax
-    \fi
-    \xdef\bxjs at g@tmpa{\the\@tempdima}%
-  \endgroup
-  #1=\bxjs at g@tmpa\relax}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\bxjs at parse@qh}
-% |jsSetQHLength| の下請け。
-% |#1| が |Q|/|H|/|trueQ|/|trueH| で終わる場合、
-% |\bxjs at tmpb| にそれに等しい寸法の表現を返す。
-% それ以外では、|\bxjs at tmpb| は |\relax| になる。
-%    \begin{macrocode}
-\if j\jsEngine
-%    \end{macrocode}
-% {(u)\pLaTeX}ではこの処理は不要なので無効化する。
-%    \begin{macrocode}
-\def\bxjs at parse@qh#1{%
-  \let\bxjs at tmpb\relax}
-\else\ifbxjs at jp@units
-\def\bxjs at parse@qh#1{%
-  \let\bxjs at tmpb\relax}
-\else
-\def\bxjs at parse@qh#1{%
-  \def\bxjs at tmpa{#1}\let\bxjs at tmpb\relax
-  \bxjs at parse@qh at a{trueQ}\trueQ
-  \bxjs at parse@qh at a{trueH}\trueH
-  \bxjs at parse@qh at a{Q}\jQ
-  \bxjs at parse@qh at a{H}\jH}
-\def\bxjs at parse@qh at a#1#2{%
-  \ifx\bxjs at tmpb\relax
-    \def\bxjs at next##1#1\@nil##2\@nnil{\bxjs at parse@qh at b{##1}{##2}}%
-    \expandafter\bxjs at next\bxjs at tmpa\@nil#1\@nil\@nnil{#2}%
-  \fi}
-\def\bxjs at parse@qh at b#1#2#3{%
-  \ifx\@nnil#2\@nnil\else \def\bxjs at tmpb{#1#3}\fi}
-\fi\fi
-%    \end{macrocode}
-% \end{macro}
-%
 % \begin{macro}{\jafontsize}
 % |\jafontsize{|\Meta{フォントサイズ}|}{|\Meta{行送り}|}|\Means
 % 和文フォント規準で、すなわち、1\,zwが\Meta{フォントサイズ}に
@@ -9302,6 +9404,7 @@
 %
 % インストールされている |otf| パッケージが |scale| オプションに
 % 対応している場合は |scale=(\jsScaleの値)| を事前に |otf| に渡す。
+% \Note |scale| 対応は1.7b6版 [2013/11/17] から。
 % \Note otf.sty の中に「|\RequirePackage{keyval}|」の行が存在する
 % かにより判定している。
 % (もっといい方法はないのか……。)

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsarticle.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsarticle.cls	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsarticle.cls	2018-03-05 22:10:32 UTC (rev 46845)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{bxjsarticle}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjs at clsname{bxjsarticle}
 \newif\ifjsc at needsp@tch
@@ -94,6 +94,45 @@
   \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
 \def\bxjs at catopt#1#2{%
   #1\if\relax#1\relax\else\if\relax#2\relax\else,\fi\fi#2}
+\def\bxjs at ifplus#1{\@ifnextchar+{\@firstoftwo{#1}}}
+\let\c at bxjs@tempcnta\@tempcnta
+\def\bxjs at gset@tempcnta{\setcounter{bxjs at tempcnta}}
+\def\jsSetQHLength#1#2{%
+  \begingroup
+    \bxjs at parse@qh{#2}%
+    \ifx\bxjs at tmpb\relax
+      \setlength\@tempdima{#2}%
+      \xdef\bxjs at g@tmpa{\the\@tempdima}%
+    \else \global\let\bxjs at g@tmpa\bxjs at tmpb
+    \fi
+  \endgroup
+  #1=\bxjs at g@tmpa\relax}
+\if j\jsEngine \def\bxjs at parse@qh at all{zw,zh}
+\else \def\bxjs at parse@qh at all{trueQ,trueH,Q,H,zw,zh}
+\fi
+\def\bxjs at parse@qh#1{%
+  \let\bxjs at tmpb\relax
+  \@for\bxjs at tmpa:=\bxjs at parse@qh at all\do{%
+    \ifx\bxjs at tmpb\relax
+      \edef\bxjs at next{{\bxjs at tmpa}{#1}}%
+      \expandafter\bxjs at parse@qh at a\csname bxjs at unit@\bxjs at tmpa\expandafter
+          \endcsname\bxjs at next
+    \fi}}
+\def\bxjs at parse@qh at a#1#2#3{%
+  \def\bxjs at next##1#2\@nil##2\@nnil{\bxjs at parse@qh at b{##1}{##2}#1}%
+  \bxjs at next#3\@nil#2\@nil\@nnil}
+\def\bxjs at parse@qh at b#1#2#3{%
+  \ifx\@nnil#2\@nnil\else
+    \ifx#3\relax
+      \ClassError\bxjs at clsname
+       {You cannot use '\bxjs at tmpa' here}{\@ehc}%
+      \def\bxjs at tmpb{0pt}%
+    \else
+      \@tempdimb#3\relax \@tempdimb#1\@tempdimb
+      \edef\bxjs at tmpb{\the\@tempdimb}%
+    \fi
+  \fi}
+  \def\bxjs at unit@Q{0.25mm}\let\bxjs at unit@H\bxjs at unit@Q
 \def\jsAtEndOfClass{%
   \expandafter\g at addto@macro\csname\bxjs at clsname.cls-h@@k\endcsname}
 \@onlypreamble\bxjs at restore@jltrcc
@@ -150,30 +189,12 @@
 \def\bxjs at param@basefontsize{10pt}
 \def\jsUnusualPtSize{-20}
 \def\bxjs at setbasefontsize#1{%
-  \bxjs at setbasefontlength\@tempdima{#1}%
+  \jsSetQHLength\@tempdima{#1}%
   \edef\bxjs at param@basefontsize{\the\@tempdima}%
   \ifdim\@tempdima=10pt         \long\def\@ptsize{0}%
   \else\ifdim\@tempdima=10.95pt \long\def\@ptsize{1}%
   \else\ifdim\@tempdima=12pt    \long\def\@ptsize{2}%
   \else \long\edef\@ptsize{\jsUnusualPtSize}\fi\fi\fi}
-\def\bxjs at setbasefontlength#1#2{%
-  \bxjs at setbasefontlength@a#2true\@nnil
-  \ifx j\jsEngine \setlength#1{#2}%
-  \else
-    \bxjs at setbasefontlength@b#2\@nil Q\@nil\@nnil
-    \ifx\bxjs at tmpa\relax \setlength#1{#2}%
-    \else \@tempdimc0.25mm #1=\bxjs at tmpa\@tempdimc
-    \fi
-  \fi}
-\def\bxjs at setbasefontlength@b#1Q\@nil#2\@nnil{%
-  \ifx\@nnil#2\@nnil \let\bxjs at tmpa\relax
-  \else \def\bxjs at tmpa{#1}%
-  \fi}
-\def\bxjs at setbasefontlength@a#1true#2\@nnil{%
-  \ifx\@nnil#2\@nnil\else
-    \ClassWarningNoLine\bxjs at clsname
-    {You should not use 'true' lengths here}%
-  \fi}
 \newif\ifjsc at mag
 \newif\ifjsc at mag@xreal
 \DeclareOption{8pt}{\bxjs at setbasefontsize{8pt}}
@@ -442,23 +463,18 @@
 \def\bxjs at error@keyval#1#2{%
   \ClassError\bxjs at clsname
    {Invalid value '#2' for option #1}\@ehc}
-\newif\ifbxjs at scaleset
 \def\jsScale{0.924715}
-\define at key{bxjs}{base}{\bxjs at setbasefontsize{#1}}
-\@onlypreamble\bxjs at do@opt at jbase
-\let\bxjs at do@opt at jbase\relax
-\define at key{bxjs}{jbase}{\bxjs at setjbasefontsize{#1}}
-\def\bxjs at setjbasefontsize#1{%
-  \def\bxjs at do@opt at jbase{%
-    \bxjs at setbasefontlength\@tempdima{#1}%
-    \bxjs at invscale\@tempdima\jsScale
-    \bxjs at setbasefontsize{\@tempdima}}}
+\define at key{bxjs}{base}{%
+  \edef\bxjs at base@opt{#1}%
+  \bxjs at setbasefontsize{#1}}
+\define at key{bxjs}{fontsize}{\setkeys{bxjs}{base=#1}}
+\define at key{bxjs}{jbase}{\edef\bxjs at jbase@opt{#1}}
+\define at key{bxjs}{jafontsize}{\setkeys{bxjs}{jbase=#1}}
 \define at key{bxjs}{scale}{%
-  \bxjs at scalesettrue
-  \edef\jsScale{#1}}
-\DeclareOption{noscale}{%
-  \bxjs at scalesettrue
-  \def\jsScale{1}}
+  \edef\bxjs at scale@opt{#1}%
+  \let\jsScale\bxjs at scale@opt}
+\define at key{bxjs}{jsfontscale}{\setkeys{bxjs}{scale=#1}}
+\DeclareOption{noscale}{\setkeys{bxjs}{scale=1}}
 \let\bxjs at param@mag\relax
 \define at key{bxjs}{mag}{\edef\bxjs at param@mag{#1}}
 \define at key{bxjs}{paper}{\edef\bxjs at param@paper{#1}}
@@ -535,6 +551,10 @@
   \bxjs at set@keyval{layout}{#1}{}}
 \define at key{bxjs}{textwidth-limit}{%
   \edef\bxjs at textwidth@limit{#1}}
+\define at key{bxjs}{textwidth}{\edef\bxjs at textwidth@opt{#1}}
+\define at key{bxjs}{line_length}{\setkeys{bxjs}{textwidth=#1}}
+\define at key{bxjs}{number-of-lines}{\edef\bxjs at number@of at lines@opt{#1}}
+\define at key{bxjs}{number_of_lines}{\setkeys{bxjs}{number-of-lines=#1}}
 \define at key{bxjs}{paragraph-mark}{%
   \edef\bxjs at paragraph@mark{#1}}
 \newif\ifbxjs at whole@zw at lines \bxjs at whole@zw at linestrue
@@ -723,7 +743,23 @@
       The default value 'nomag*' is used instead.\MessageBreak \@ehc}
   \fi
 \fi
-\bxjs at do@opt at jbase
+\ifx\bxjs at jbase@opt\@undefined\else
+  \ifx\bxjs at base@opt\@undefined
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \bxjs at invscale\@tempdima\jsScale
+    \bxjs at setbasefontsize{\@tempdima}%
+  \else
+    \ifx\bxjs at scale@opt\@undefined\else
+      \ClassWarningNoLine\bxjs at clsname
+       {Redundant 'scale' option is ignored}%
+    \fi
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \@tempdimb=\bxjs at param@basefontsize\relax
+    \edef\jsScale{\strip at pt\@tempdimb}%
+    \bxjs at invscale\@tempdima\jsScale
+    \edef\jsScale{\strip at pt\@tempdima}%
+  \fi
+\fi
 \let\Cjascale\jsScale
 \if \if p\jsEngine T\else\if n\jsEngine T\else F\fi\fi T
   \@tempcnta="80 \loop \ifnum\@tempcnta<"100
@@ -760,8 +796,7 @@
   \divide\@tempdima16384\relax \@tempcnta\@tempdima\relax
   \edef\bxjs at param@mag{\the\@tempcnta}
 \else
-  \let\c at bxjs@cnta\@tempcnta
-  \setcounter{bxjs at cnta}{\bxjs at param@mag}
+  \bxjs at gset@tempcnta{\bxjs at param@mag}
   \ifnum\@tempcnta<\z@ \@tempcnta=\z@ \fi
   \edef\bxjs at param@mag{\the\@tempcnta}
   \advance\@tempcnta100000
@@ -983,23 +1018,37 @@
 \mag=\bxjs at param@mag
 \fi
 \setlength{\topskip}{10\p@?}
+\def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
+\def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
 \def\bxjs at read@a{\futurelet\bxjs at tmpa\bxjs at read@b}
 \def\bxjs at read@b{%
   \ifx\bxjs at tmpa\bgroup \expandafter\bxjs at read@c
   \else \expandafter\bxjs at read@d \fi}
-\def\bxjs at read@c#1#2#3\@nil{\def\bxjs at param@paper{papersize={#1,#2}}}
-\def\bxjs at read@d#1\@nil{}
-\expandafter\bxjs at read@a\bxjs at param@paper\@nil
+\def\bxjs at read@c#1#2#3\@nil{\edef\bxjs at param@paper{papersize={#1,#2}}}
+\def\bxjs at read@d#1\@nil{\bxjs at read@e#1,,\@nil}
+\def\bxjs at read@e#1,#2,#3\@nil{%
+  \ifx\@nil#3\@nil\else \edef\bxjs at param@paper{papersize={#1,#2}}\fi}
+\expandafter\bxjs at read@a\bxjs at param@paper\@empty\@empty\@nil
 \edef\bxjs at layout@paper{%
   \ifjsc at mag truedimen,\fi
   \if at landscape landscape,\fi
   \bxjs at param@paper}
-\def\bxjs at layout{%
+\def\bxjs at layout@base{%
   headheight=\topskip,footskip=0.03367\paperheight,%
   headsep=\footskip-\topskip,includeheadfoot,%
+}
+\edef\bxjs at layout{\bxjs at layout@base
   hscale=0.76,hmarginratio=1:1,%
   vscale=0.83,vmarginratio=1:1,%
 }
+\ifx\bxjs at textwidth@opt\@undefined\else
+  \jsSetQHLength\@tempdima{\bxjs at textwidth@opt}
+  \edef\bxjs at layout{\bxjs at layout width=\the\@tempdima,}
+\fi
+\ifx\bxjs at number@of at lines@opt\@undefined\else
+  \bxjs at gset@tempcnta{\bxjs at number@of at lines@opt}
+  \edef\bxjs at layout{\bxjs at layout lines=\the\@tempcnta,}
+\fi
 \newdimen\fullwidth
 \def\bxjs at postproc@layout{%
   \ifx\bxjs at geometry@driver\relax\else
@@ -1008,6 +1057,7 @@
   \ifbxjs at whole@zw at lines
     \@tempdimb=\textwidth
     \if at twocolumn \@tempdima=2\Cwd \else \@tempdima=1\Cwd \fi
+    \advance\textwidth.005pt\relax
     \divide\textwidth\@tempdima \multiply\textwidth\@tempdima
     \advance\@tempdimb-\textwidth
     \advance\oddsidemargin 0.5\@tempdimb
@@ -1016,6 +1066,7 @@
   \fullwidth=\textwidth
   \@tempdimb=\textheight
   \advance\textheight-\topskip
+  \advance\textheight.005pt\relax
   \divide\textheight\baselineskip \multiply\textheight\baselineskip
   \advance\textheight\topskip
   \advance\@tempdimb-\textheight
@@ -1037,11 +1088,10 @@
 \edef\jsGeometryOptions{%
   \bxjs at layout@paper,\bxjs at layout}
 \ifx\bxjs at geometry\bxjs at geometry@class
-\@onlypreamble\bxjs at revert
-\let\bxjs at revert\@empty
-\edef\bxjs at tmpa{\the\ht\strutbox}
-\ht\strutbox=10\p@?
-\g at addto@macro\bxjs at revert{\ht\strutbox=\bxjs at tmpa\relax}
+\def\bxjs at geometry@guard at on{%
+  \edef\bxjs at gg@tmp{\the\ht\strutbox}\ht\strutbox=10\jsc at mpt}
+\def\bxjs at geometry@guard at off{%
+  \ht\strutbox=\bxjs at gg@tmp\relax}
 \ifbxjs at papersize
   \ifx\bxjs at driver@given\bxjs at driver@@dvipdfmx
     \PassOptionsToPackage{dvipdfm}{geometry}
@@ -1052,11 +1102,13 @@
 \else
   \PassOptionsToPackage{driver=none}{geometry}
 \fi
-\edef\bxjs at nxt{%
-  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}}
 \AtBeginDocument{\bxjs at pre@geometry at hook}
 \AtBeginDocument{\ImposeOldLuaTeXBehavior}
-\bxjs at nxt \bxjs at revert
+\bxjs at geometry@guard at on
+\edef\bxjs at next{%
+  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}%
+}\bxjs at next
+\bxjs at geometry@guard at off
 \AtBeginDocument{\RevokeOldLuaTeXBehavior}
 \let\bxjs at geometry@driver\Gm at driver
 \bxjs at postproc@layout
@@ -1079,14 +1131,23 @@
       \fi
     \fi
   }{}}
-\def\setpagelayout{\@ifstar
-  {\bxjs at reset@layout}{\bxjs at modify@layout}}
-\def\bxjs at modify@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
-\def\bxjs at reset@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{reset,\bxjs at layout@paper,#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at setpagelayout@a\tw@}{%else
+    \@ifstar{\bxjs at setpagelayout@a\@ne}{\bxjs at setpagelayout@a\z@}}}
+\def\bxjs at setpagelayout@a#1#2{%
+  \ifcase#1% modify
+    \def\bxjs at next{\ifjsc at mag truedimen,\fi #2}%
+  \or% reset(*)
+    \def\bxjs at next{reset,\bxjs at layout@paper,#2}%
+  \or% semireset(+)
+    \def\bxjs at next{reset,\bxjs at layout@paper,\bxjs at layout@base,#2}%
+  \fi
+  \bxjs at geometry@guard at on
+  \edef\bxjs at next{%
+    \noexpand\geometry{\bxjs at next}%
+  }\bxjs at next
+  \bxjs at geometry@guard at off
+  \bxjs at postproc@layout}
 \else\ifx\bxjs at geometry\bxjs at geometry@user
 \AtBeginDocument{\bxjs at check@page at layout}
 \@onlypreamble\bxjs at check@page at layout
@@ -1100,8 +1161,9 @@
   \setlength{\textwidth}{6.5in}%
   \setlength{\textheight}{8in}}
 \let\bxjs at geometry@driver\relax
-\def\setpagelayout{\@ifstar
-  {\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at pagelayout@a}{%else
+    \@ifstar{\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}}
 \def\bxjs at pagelayout@a#1{%
   \ClassError\bxjs at clsname
    {Command '\string\setpagelayout' is not supported,\MessageBreak
@@ -1831,9 +1893,6 @@
   \bxjs at oldfontcmd@list
   \ifx\@tempa\@empty\else
     \ClassWarningNoLine\bxjs at clsname
-     {Some old font commands were used in text\MessageBreak
-      (see the log file for detail)}%
-    \ClassInfo\bxjs at clsname
      {Some old font commands were used in text:\MessageBreak
       \space\@tempa\MessageBreak
       You should note, that since 1994 LaTeX2e provides a\MessageBreak
@@ -1840,9 +1899,7 @@
       new font selection scheme called NFSS2 with several\MessageBreak
       new, combinable font commands. The
       class provides\MessageBreak
-      the old font commands
-      only for compatibility%
-      \@gobble}%
+      the old font commands only for compatibility}
   \fi}
 \def\bxjs at warnoldfontcmd@kick at final{%
   \g at addto@macro\clearpage{\bxjs at warnoldfontcmd@final}}

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsbook.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsbook.cls	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsbook.cls	2018-03-05 22:10:32 UTC (rev 46845)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{bxjsbook}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjs at clsname{bxjsbook}
 \newif\ifjsc at needsp@tch
@@ -94,6 +94,45 @@
   \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
 \def\bxjs at catopt#1#2{%
   #1\if\relax#1\relax\else\if\relax#2\relax\else,\fi\fi#2}
+\def\bxjs at ifplus#1{\@ifnextchar+{\@firstoftwo{#1}}}
+\let\c at bxjs@tempcnta\@tempcnta
+\def\bxjs at gset@tempcnta{\setcounter{bxjs at tempcnta}}
+\def\jsSetQHLength#1#2{%
+  \begingroup
+    \bxjs at parse@qh{#2}%
+    \ifx\bxjs at tmpb\relax
+      \setlength\@tempdima{#2}%
+      \xdef\bxjs at g@tmpa{\the\@tempdima}%
+    \else \global\let\bxjs at g@tmpa\bxjs at tmpb
+    \fi
+  \endgroup
+  #1=\bxjs at g@tmpa\relax}
+\if j\jsEngine \def\bxjs at parse@qh at all{zw,zh}
+\else \def\bxjs at parse@qh at all{trueQ,trueH,Q,H,zw,zh}
+\fi
+\def\bxjs at parse@qh#1{%
+  \let\bxjs at tmpb\relax
+  \@for\bxjs at tmpa:=\bxjs at parse@qh at all\do{%
+    \ifx\bxjs at tmpb\relax
+      \edef\bxjs at next{{\bxjs at tmpa}{#1}}%
+      \expandafter\bxjs at parse@qh at a\csname bxjs at unit@\bxjs at tmpa\expandafter
+          \endcsname\bxjs at next
+    \fi}}
+\def\bxjs at parse@qh at a#1#2#3{%
+  \def\bxjs at next##1#2\@nil##2\@nnil{\bxjs at parse@qh at b{##1}{##2}#1}%
+  \bxjs at next#3\@nil#2\@nil\@nnil}
+\def\bxjs at parse@qh at b#1#2#3{%
+  \ifx\@nnil#2\@nnil\else
+    \ifx#3\relax
+      \ClassError\bxjs at clsname
+       {You cannot use '\bxjs at tmpa' here}{\@ehc}%
+      \def\bxjs at tmpb{0pt}%
+    \else
+      \@tempdimb#3\relax \@tempdimb#1\@tempdimb
+      \edef\bxjs at tmpb{\the\@tempdimb}%
+    \fi
+  \fi}
+  \def\bxjs at unit@Q{0.25mm}\let\bxjs at unit@H\bxjs at unit@Q
 \def\jsAtEndOfClass{%
   \expandafter\g at addto@macro\csname\bxjs at clsname.cls-h@@k\endcsname}
 \@onlypreamble\bxjs at restore@jltrcc
@@ -153,30 +192,12 @@
 \def\bxjs at param@basefontsize{10pt}
 \def\jsUnusualPtSize{-20}
 \def\bxjs at setbasefontsize#1{%
-  \bxjs at setbasefontlength\@tempdima{#1}%
+  \jsSetQHLength\@tempdima{#1}%
   \edef\bxjs at param@basefontsize{\the\@tempdima}%
   \ifdim\@tempdima=10pt         \long\def\@ptsize{0}%
   \else\ifdim\@tempdima=10.95pt \long\def\@ptsize{1}%
   \else\ifdim\@tempdima=12pt    \long\def\@ptsize{2}%
   \else \long\edef\@ptsize{\jsUnusualPtSize}\fi\fi\fi}
-\def\bxjs at setbasefontlength#1#2{%
-  \bxjs at setbasefontlength@a#2true\@nnil
-  \ifx j\jsEngine \setlength#1{#2}%
-  \else
-    \bxjs at setbasefontlength@b#2\@nil Q\@nil\@nnil
-    \ifx\bxjs at tmpa\relax \setlength#1{#2}%
-    \else \@tempdimc0.25mm #1=\bxjs at tmpa\@tempdimc
-    \fi
-  \fi}
-\def\bxjs at setbasefontlength@b#1Q\@nil#2\@nnil{%
-  \ifx\@nnil#2\@nnil \let\bxjs at tmpa\relax
-  \else \def\bxjs at tmpa{#1}%
-  \fi}
-\def\bxjs at setbasefontlength@a#1true#2\@nnil{%
-  \ifx\@nnil#2\@nnil\else
-    \ClassWarningNoLine\bxjs at clsname
-    {You should not use 'true' lengths here}%
-  \fi}
 \newif\ifjsc at mag
 \newif\ifjsc at mag@xreal
 \DeclareOption{8pt}{\bxjs at setbasefontsize{8pt}}
@@ -448,23 +469,18 @@
 \def\bxjs at error@keyval#1#2{%
   \ClassError\bxjs at clsname
    {Invalid value '#2' for option #1}\@ehc}
-\newif\ifbxjs at scaleset
 \def\jsScale{0.924715}
-\define at key{bxjs}{base}{\bxjs at setbasefontsize{#1}}
-\@onlypreamble\bxjs at do@opt at jbase
-\let\bxjs at do@opt at jbase\relax
-\define at key{bxjs}{jbase}{\bxjs at setjbasefontsize{#1}}
-\def\bxjs at setjbasefontsize#1{%
-  \def\bxjs at do@opt at jbase{%
-    \bxjs at setbasefontlength\@tempdima{#1}%
-    \bxjs at invscale\@tempdima\jsScale
-    \bxjs at setbasefontsize{\@tempdima}}}
+\define at key{bxjs}{base}{%
+  \edef\bxjs at base@opt{#1}%
+  \bxjs at setbasefontsize{#1}}
+\define at key{bxjs}{fontsize}{\setkeys{bxjs}{base=#1}}
+\define at key{bxjs}{jbase}{\edef\bxjs at jbase@opt{#1}}
+\define at key{bxjs}{jafontsize}{\setkeys{bxjs}{jbase=#1}}
 \define at key{bxjs}{scale}{%
-  \bxjs at scalesettrue
-  \edef\jsScale{#1}}
-\DeclareOption{noscale}{%
-  \bxjs at scalesettrue
-  \def\jsScale{1}}
+  \edef\bxjs at scale@opt{#1}%
+  \let\jsScale\bxjs at scale@opt}
+\define at key{bxjs}{jsfontscale}{\setkeys{bxjs}{scale=#1}}
+\DeclareOption{noscale}{\setkeys{bxjs}{scale=1}}
 \let\bxjs at param@mag\relax
 \define at key{bxjs}{mag}{\edef\bxjs at param@mag{#1}}
 \define at key{bxjs}{paper}{\edef\bxjs at param@paper{#1}}
@@ -544,6 +560,10 @@
   \bxjs at set@keyval{layout}{#1}{}}
 \define at key{bxjs}{textwidth-limit}{%
   \edef\bxjs at textwidth@limit{#1}}
+\define at key{bxjs}{textwidth}{\edef\bxjs at textwidth@opt{#1}}
+\define at key{bxjs}{line_length}{\setkeys{bxjs}{textwidth=#1}}
+\define at key{bxjs}{number-of-lines}{\edef\bxjs at number@of at lines@opt{#1}}
+\define at key{bxjs}{number_of_lines}{\setkeys{bxjs}{number-of-lines=#1}}
 \define at key{bxjs}{paragraph-mark}{%
   \edef\bxjs at paragraph@mark{#1}}
 \newif\ifbxjs at whole@zw at lines \bxjs at whole@zw at linestrue
@@ -732,7 +752,23 @@
       The default value 'nomag*' is used instead.\MessageBreak \@ehc}
   \fi
 \fi
-\bxjs at do@opt at jbase
+\ifx\bxjs at jbase@opt\@undefined\else
+  \ifx\bxjs at base@opt\@undefined
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \bxjs at invscale\@tempdima\jsScale
+    \bxjs at setbasefontsize{\@tempdima}%
+  \else
+    \ifx\bxjs at scale@opt\@undefined\else
+      \ClassWarningNoLine\bxjs at clsname
+       {Redundant 'scale' option is ignored}%
+    \fi
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \@tempdimb=\bxjs at param@basefontsize\relax
+    \edef\jsScale{\strip at pt\@tempdimb}%
+    \bxjs at invscale\@tempdima\jsScale
+    \edef\jsScale{\strip at pt\@tempdima}%
+  \fi
+\fi
 \let\Cjascale\jsScale
 \if \if p\jsEngine T\else\if n\jsEngine T\else F\fi\fi T
   \@tempcnta="80 \loop \ifnum\@tempcnta<"100
@@ -769,8 +805,7 @@
   \divide\@tempdima16384\relax \@tempcnta\@tempdima\relax
   \edef\bxjs at param@mag{\the\@tempcnta}
 \else
-  \let\c at bxjs@cnta\@tempcnta
-  \setcounter{bxjs at cnta}{\bxjs at param@mag}
+  \bxjs at gset@tempcnta{\bxjs at param@mag}
   \ifnum\@tempcnta<\z@ \@tempcnta=\z@ \fi
   \edef\bxjs at param@mag{\the\@tempcnta}
   \advance\@tempcnta100000
@@ -992,35 +1027,43 @@
 \mag=\bxjs at param@mag
 \fi
 \setlength{\topskip}{10\p@?}
+\def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
+\def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
 \def\bxjs at read@a{\futurelet\bxjs at tmpa\bxjs at read@b}
 \def\bxjs at read@b{%
   \ifx\bxjs at tmpa\bgroup \expandafter\bxjs at read@c
   \else \expandafter\bxjs at read@d \fi}
-\def\bxjs at read@c#1#2#3\@nil{\def\bxjs at param@paper{papersize={#1,#2}}}
-\def\bxjs at read@d#1\@nil{}
-\expandafter\bxjs at read@a\bxjs at param@paper\@nil
+\def\bxjs at read@c#1#2#3\@nil{\edef\bxjs at param@paper{papersize={#1,#2}}}
+\def\bxjs at read@d#1\@nil{\bxjs at read@e#1,,\@nil}
+\def\bxjs at read@e#1,#2,#3\@nil{%
+  \ifx\@nil#3\@nil\else \edef\bxjs at param@paper{papersize={#1,#2}}\fi}
+\expandafter\bxjs at read@a\bxjs at param@paper\@empty\@empty\@nil
 \edef\bxjs at layout@paper{%
   \ifjsc at mag truedimen,\fi
   \if at landscape landscape,\fi
   \bxjs at param@paper}
+\def\bxjs at layout@base{%
+  headheight=\topskip,headsep=6\jsc at mmm,nofoot,includeheadfoot,%
+}
 \ifbxjs at layout@buggyhmargin     %---
-\def\bxjs at layout{%
-  headheight=\topskip,headsep=6\jsc at mmm,nofoot,includeheadfoot,%
+\edef\bxjs at layout{\bxjs at layout@base
   hmargin=36\jsc at mmm,hmarginratio=1:1,%
   vscale=0.83,vmarginratio=1:1,%
 }
 \else                           %---
-\def\bxjs at layout{%
-  headheight=\topskip,headsep=6\jsc at mmm,nofoot,includeheadfoot,%
+\edef\bxjs at layout{\bxjs at layout@base
   hmargin=18\jsc at mmm,%
   vscale=0.83,vmarginratio=1:1,%
 }
 \fi                             %---
+\ifx\bxjs at number@of at lines@opt\@undefined\else
+  \bxjs at gset@tempcnta{\bxjs at number@of at lines@opt}
+  \edef\bxjs at layout{\bxjs at layout lines=\the\@tempcnta,}
+\fi
 \newdimen\fullwidth
 \newcommand\jsTextWidthLimit{40}
 \ifx\bxjs at textwidth@limit\@undefined\else
-  \let\c at bxjs@cnta\@tempcnta
-  \setcounter{bxjs at cnta}{\bxjs at textwidth@limit}
+  \bxjs at gset@tempcnta{\bxjs at textwidth@limit}
   \long\edef\jsTextWidthLimit{\the\@tempcnta}
 \fi
 \def\bxjs at postproc@layout{%
@@ -1030,6 +1073,7 @@
   \ifbxjs at whole@zw at lines
     \@tempdimb=\textwidth
     \if at twocolumn \@tempdima=2\Cwd \else \@tempdima=1\Cwd \fi
+    \advance\textwidth.005pt\relax
     \divide\textwidth\@tempdima \multiply\textwidth\@tempdima
     \advance\@tempdimb-\textwidth
     \advance\oddsidemargin 0.5\@tempdimb
@@ -1036,12 +1080,17 @@
     \advance\evensidemargin 0.5\@tempdimb
   \fi
   \fullwidth=\textwidth
-  \ifdim\textwidth>\jsTextWidthLimit\Cwd
-    \textwidth=\jsTextWidthLimit\Cwd
+  \@tempdima=\jsTextWidthLimit\Cwd
+  \ifx\bxjs at textwidth@opt\@undefined\else
+    \jsSetQHLength\@tempdima{\bxjs at textwidth@opt}
+  \fi
+  \ifdim\textwidth>\@tempdima
+    \textwidth=\@tempdima
     \addtolength\evensidemargin{\fullwidth-\textwidth}
   \fi
   \@tempdimb=\textheight
   \advance\textheight-\topskip
+  \advance\textheight.005pt\relax
   \divide\textheight\baselineskip \multiply\textheight\baselineskip
   \advance\textheight\topskip
   \advance\@tempdimb-\textheight
@@ -1063,11 +1112,10 @@
 \edef\jsGeometryOptions{%
   \bxjs at layout@paper,\bxjs at layout}
 \ifx\bxjs at geometry\bxjs at geometry@class
-\@onlypreamble\bxjs at revert
-\let\bxjs at revert\@empty
-\edef\bxjs at tmpa{\the\ht\strutbox}
-\ht\strutbox=10\p@?
-\g at addto@macro\bxjs at revert{\ht\strutbox=\bxjs at tmpa\relax}
+\def\bxjs at geometry@guard at on{%
+  \edef\bxjs at gg@tmp{\the\ht\strutbox}\ht\strutbox=10\jsc at mpt}
+\def\bxjs at geometry@guard at off{%
+  \ht\strutbox=\bxjs at gg@tmp\relax}
 \ifbxjs at papersize
   \ifx\bxjs at driver@given\bxjs at driver@@dvipdfmx
     \PassOptionsToPackage{dvipdfm}{geometry}
@@ -1078,11 +1126,13 @@
 \else
   \PassOptionsToPackage{driver=none}{geometry}
 \fi
-\edef\bxjs at nxt{%
-  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}}
 \AtBeginDocument{\bxjs at pre@geometry at hook}
 \AtBeginDocument{\ImposeOldLuaTeXBehavior}
-\bxjs at nxt \bxjs at revert
+\bxjs at geometry@guard at on
+\edef\bxjs at next{%
+  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}%
+}\bxjs at next
+\bxjs at geometry@guard at off
 \AtBeginDocument{\RevokeOldLuaTeXBehavior}
 \let\bxjs at geometry@driver\Gm at driver
 \bxjs at postproc@layout
@@ -1105,14 +1155,23 @@
       \fi
     \fi
   }{}}
-\def\setpagelayout{\@ifstar
-  {\bxjs at reset@layout}{\bxjs at modify@layout}}
-\def\bxjs at modify@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
-\def\bxjs at reset@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{reset,\bxjs at layout@paper,#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at setpagelayout@a\tw@}{%else
+    \@ifstar{\bxjs at setpagelayout@a\@ne}{\bxjs at setpagelayout@a\z@}}}
+\def\bxjs at setpagelayout@a#1#2{%
+  \ifcase#1% modify
+    \def\bxjs at next{\ifjsc at mag truedimen,\fi #2}%
+  \or% reset(*)
+    \def\bxjs at next{reset,\bxjs at layout@paper,#2}%
+  \or% semireset(+)
+    \def\bxjs at next{reset,\bxjs at layout@paper,\bxjs at layout@base,#2}%
+  \fi
+  \bxjs at geometry@guard at on
+  \edef\bxjs at next{%
+    \noexpand\geometry{\bxjs at next}%
+  }\bxjs at next
+  \bxjs at geometry@guard at off
+  \bxjs at postproc@layout}
 \else\ifx\bxjs at geometry\bxjs at geometry@user
 \AtBeginDocument{\bxjs at check@page at layout}
 \@onlypreamble\bxjs at check@page at layout
@@ -1126,8 +1185,9 @@
   \setlength{\textwidth}{6.5in}%
   \setlength{\textheight}{8in}}
 \let\bxjs at geometry@driver\relax
-\def\setpagelayout{\@ifstar
-  {\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at pagelayout@a}{%else
+    \@ifstar{\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}}
 \def\bxjs at pagelayout@a#1{%
   \ClassError\bxjs at clsname
    {Command '\string\setpagelayout' is not supported,\MessageBreak
@@ -1907,9 +1967,6 @@
   \bxjs at oldfontcmd@list
   \ifx\@tempa\@empty\else
     \ClassWarningNoLine\bxjs at clsname
-     {Some old font commands were used in text\MessageBreak
-      (see the log file for detail)}%
-    \ClassInfo\bxjs at clsname
      {Some old font commands were used in text:\MessageBreak
       \space\@tempa\MessageBreak
       You should note, that since 1994 LaTeX2e provides a\MessageBreak
@@ -1916,9 +1973,7 @@
       new font selection scheme called NFSS2 with several\MessageBreak
       new, combinable font commands. The
       class provides\MessageBreak
-      the old font commands
-      only for compatibility%
-      \@gobble}%
+      the old font commands only for compatibility}
   \fi}
 \def\bxjs at warnoldfontcmd@kick at final{%
   \g at addto@macro\clearpage{\bxjs at warnoldfontcmd@final}}

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscjkcat.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscjkcat.sty	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscjkcat.sty	2018-03-05 22:10:32 UTC (rev 46845)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesPackage{bxjscjkcat}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 \def\bxjx at pkgname{bxjscjkcat}
 \newcount\bxjx at cnta
 \let\bxjx at engine=n

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscompat.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscompat.sty	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjscompat.sty	2018-03-05 22:10:32 UTC (rev 46845)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesPackage{bxjscompat}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 \def\bxac at pkgname{bxjscompat}
 \let\bxac at engine=n
 \def\bxac at do#1#2{%

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-minimal.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-minimal.def	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-minimal.def	2018-03-05 22:10:32 UTC (rev 46845)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesFile{bxjsja-minimal.def}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 %% このファイルは日本語文字を含みます
 \def\DeclareJaTextFontCommand#1#2{%
   \DeclareRobustCommand#1[1]{%
@@ -111,13 +111,13 @@
 \def\bxjs at let@hchar at chr@ue at d#1#2#3#4{%
   \bxjs at let@hchar at out\def{{#1#2#3#4}}}
 \ifx j\jsEngine
-\def\bxjs at let@hchar at chr@pp#1{%
-  \expandafter\bxjs at let@hchar at chr@pp at a\meaning#1\relax#1}
-\def\bxjs at let@hchar at chr@pp at a#1#2\relax#3{%
-  \bxjs at cond\if#1t\fi{%
-    \bxjs at let@hchar at chr@ue#3%
+\def\bxjs at let@hchar at chr@pp#1#2{%
+  \expandafter\bxjs at let@hchar at chr@pp at a\meaning#2\relax#1#2}
+\def\bxjs at let@hchar at chr@pp at a#1#2\relax#3#4{%
+  \bxjs at cond\if#1k\fi{%
+    \bxjs at let@hchar at out\def{{#4}}%
   }{%else
-    \bxjs at let@hchar at out\def{{#3}}%
+    \bxjs at let@hchar at chr@ue#3#4%
   }}
 \let\bxjs at let@hchar at chr\bxjs at let@hchar at chr@pp
 \edef\jsc at JYn{\ifjsWithupTeX JY2\else JY1\fi}
@@ -195,6 +195,9 @@
 \bxjs at if@sf at default{%
   \renewcommand\kanjifamilydefault{\gtdefault}}
 \selectfont
+\def\bxjs at parse@qh#1{\let\bxjs at tmpb\relax}
+\let\bxjs at parse@qh at a\@undefined
+\let\bxjs at parse@qh at b\@undefined
 \prebreakpenalty\jis"2147=10000
 \postbreakpenalty\jis"2148=10000
 \prebreakpenalty\jis"2149=10000

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-modern.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-modern.def	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-modern.def	2018-03-05 22:10:32 UTC (rev 46845)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesFile{bxjsja-modern.def}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 \input{bxjsja-standard.def}
 \ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi=\z@
 \def\encodingdefault{T1}%

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-pandoc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-pandoc.def	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-pandoc.def	2018-03-05 22:10:32 UTC (rev 46845)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesFile{bxjsja-pandoc.def}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 \input{bxjsja-standard.def}
 \RequirePackage{bxjspandoc}
 \@onlypreamble\bxjs at set@dupload at proc

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-standard.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-standard.def	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsja-standard.def	2018-03-05 22:10:32 UTC (rev 46845)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesFile{bxjsja-standard.def}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 %% このファイルは日本語文字を含みます
 \input{bxjsja-minimal.def}
 \bxjs at simplejasetupfalse
@@ -54,6 +54,7 @@
       \PackageWarningNoLine\bxjs at clsname
        {Cannot support pTeX units (zw etc.), since\MessageBreak
         the package 'bxcalc' is too old}%
+      \bxjs at jp@unitsfalse
     \else \usepTeXunits
     \fi
   }{%else
@@ -60,9 +61,15 @@
     \PackageWarningNoLine\bxjs at clsname
      {Cannot support pTeX units (zw etc.), since\MessageBreak
       the package 'bxcalc' is unavailable}%
+    \bxjs at jp@unitsfalse
   }
 \fi
 \ifbxjs at jp@units
+\def\bxjs at parse@qh#1{\let\bxjs at tmpb\relax}
+\let\bxjs at parse@qh at a\@undefined
+\let\bxjs at parse@qh at b\@undefined
+\fi
+\ifbxjs at jp@units
   \def\bxjs at let@lenexpr#1#2{%
     \edef#1{#2}%
     \expandafter\CUXParseExpr\expandafter#1\expandafter{#1}}
@@ -90,36 +97,6 @@
   \@tempdima\bxjs at truept \bxjs at invscale\@tempdima\jsScale
   \protected\edef\ascpt{\dimexpr\the\@tempdima\relax}
 \fi
-\def\jsSetQHLength#1#2{%
-  \begingroup
-    \bxjs at parse@qh{#2}%
-    \ifx\bxjs at tmpb\relax \setlength\@tempdima{#2}%
-    \else \@tempdima\bxjs at tmpb\relax
-    \fi
-    \xdef\bxjs at g@tmpa{\the\@tempdima}%
-  \endgroup
-  #1=\bxjs at g@tmpa\relax}
-\if j\jsEngine
-\def\bxjs at parse@qh#1{%
-  \let\bxjs at tmpb\relax}
-\else\ifbxjs at jp@units
-\def\bxjs at parse@qh#1{%
-  \let\bxjs at tmpb\relax}
-\else
-\def\bxjs at parse@qh#1{%
-  \def\bxjs at tmpa{#1}\let\bxjs at tmpb\relax
-  \bxjs at parse@qh at a{trueQ}\trueQ
-  \bxjs at parse@qh at a{trueH}\trueH
-  \bxjs at parse@qh at a{Q}\jQ
-  \bxjs at parse@qh at a{H}\jH}
-\def\bxjs at parse@qh at a#1#2{%
-  \ifx\bxjs at tmpb\relax
-    \def\bxjs at next##1#1\@nil##2\@nnil{\bxjs at parse@qh at b{##1}{##2}}%
-    \expandafter\bxjs at next\bxjs at tmpa\@nil#1\@nil\@nnil{#2}%
-  \fi}
-\def\bxjs at parse@qh at b#1#2#3{%
-  \ifx\@nnil#2\@nnil\else \def\bxjs at tmpb{#1#3}\fi}
-\fi\fi
 \def\jafontsize#1#2{%
   \begingroup
     \bxjs at jafontsize@a{#1}%

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjspandoc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjspandoc.sty	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjspandoc.sty	2018-03-05 22:10:32 UTC (rev 46845)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 \ProvidesPackage{bxjspandoc}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjsp at pkgname{bxjscjkcat}
 \let\bxjsp at engine=n

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsreport.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsreport.cls	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsreport.cls	2018-03-05 22:10:32 UTC (rev 46845)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{bxjsreport}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjs at clsname{bxjsreport}
 \newif\ifjsc at needsp@tch
@@ -94,6 +94,45 @@
   \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
 \def\bxjs at catopt#1#2{%
   #1\if\relax#1\relax\else\if\relax#2\relax\else,\fi\fi#2}
+\def\bxjs at ifplus#1{\@ifnextchar+{\@firstoftwo{#1}}}
+\let\c at bxjs@tempcnta\@tempcnta
+\def\bxjs at gset@tempcnta{\setcounter{bxjs at tempcnta}}
+\def\jsSetQHLength#1#2{%
+  \begingroup
+    \bxjs at parse@qh{#2}%
+    \ifx\bxjs at tmpb\relax
+      \setlength\@tempdima{#2}%
+      \xdef\bxjs at g@tmpa{\the\@tempdima}%
+    \else \global\let\bxjs at g@tmpa\bxjs at tmpb
+    \fi
+  \endgroup
+  #1=\bxjs at g@tmpa\relax}
+\if j\jsEngine \def\bxjs at parse@qh at all{zw,zh}
+\else \def\bxjs at parse@qh at all{trueQ,trueH,Q,H,zw,zh}
+\fi
+\def\bxjs at parse@qh#1{%
+  \let\bxjs at tmpb\relax
+  \@for\bxjs at tmpa:=\bxjs at parse@qh at all\do{%
+    \ifx\bxjs at tmpb\relax
+      \edef\bxjs at next{{\bxjs at tmpa}{#1}}%
+      \expandafter\bxjs at parse@qh at a\csname bxjs at unit@\bxjs at tmpa\expandafter
+          \endcsname\bxjs at next
+    \fi}}
+\def\bxjs at parse@qh at a#1#2#3{%
+  \def\bxjs at next##1#2\@nil##2\@nnil{\bxjs at parse@qh at b{##1}{##2}#1}%
+  \bxjs at next#3\@nil#2\@nil\@nnil}
+\def\bxjs at parse@qh at b#1#2#3{%
+  \ifx\@nnil#2\@nnil\else
+    \ifx#3\relax
+      \ClassError\bxjs at clsname
+       {You cannot use '\bxjs at tmpa' here}{\@ehc}%
+      \def\bxjs at tmpb{0pt}%
+    \else
+      \@tempdimb#3\relax \@tempdimb#1\@tempdimb
+      \edef\bxjs at tmpb{\the\@tempdimb}%
+    \fi
+  \fi}
+  \def\bxjs at unit@Q{0.25mm}\let\bxjs at unit@H\bxjs at unit@Q
 \def\jsAtEndOfClass{%
   \expandafter\g at addto@macro\csname\bxjs at clsname.cls-h@@k\endcsname}
 \@onlypreamble\bxjs at restore@jltrcc
@@ -153,30 +192,12 @@
 \def\bxjs at param@basefontsize{10pt}
 \def\jsUnusualPtSize{-20}
 \def\bxjs at setbasefontsize#1{%
-  \bxjs at setbasefontlength\@tempdima{#1}%
+  \jsSetQHLength\@tempdima{#1}%
   \edef\bxjs at param@basefontsize{\the\@tempdima}%
   \ifdim\@tempdima=10pt         \long\def\@ptsize{0}%
   \else\ifdim\@tempdima=10.95pt \long\def\@ptsize{1}%
   \else\ifdim\@tempdima=12pt    \long\def\@ptsize{2}%
   \else \long\edef\@ptsize{\jsUnusualPtSize}\fi\fi\fi}
-\def\bxjs at setbasefontlength#1#2{%
-  \bxjs at setbasefontlength@a#2true\@nnil
-  \ifx j\jsEngine \setlength#1{#2}%
-  \else
-    \bxjs at setbasefontlength@b#2\@nil Q\@nil\@nnil
-    \ifx\bxjs at tmpa\relax \setlength#1{#2}%
-    \else \@tempdimc0.25mm #1=\bxjs at tmpa\@tempdimc
-    \fi
-  \fi}
-\def\bxjs at setbasefontlength@b#1Q\@nil#2\@nnil{%
-  \ifx\@nnil#2\@nnil \let\bxjs at tmpa\relax
-  \else \def\bxjs at tmpa{#1}%
-  \fi}
-\def\bxjs at setbasefontlength@a#1true#2\@nnil{%
-  \ifx\@nnil#2\@nnil\else
-    \ClassWarningNoLine\bxjs at clsname
-    {You should not use 'true' lengths here}%
-  \fi}
 \newif\ifjsc at mag
 \newif\ifjsc at mag@xreal
 \DeclareOption{8pt}{\bxjs at setbasefontsize{8pt}}
@@ -448,23 +469,18 @@
 \def\bxjs at error@keyval#1#2{%
   \ClassError\bxjs at clsname
    {Invalid value '#2' for option #1}\@ehc}
-\newif\ifbxjs at scaleset
 \def\jsScale{0.924715}
-\define at key{bxjs}{base}{\bxjs at setbasefontsize{#1}}
-\@onlypreamble\bxjs at do@opt at jbase
-\let\bxjs at do@opt at jbase\relax
-\define at key{bxjs}{jbase}{\bxjs at setjbasefontsize{#1}}
-\def\bxjs at setjbasefontsize#1{%
-  \def\bxjs at do@opt at jbase{%
-    \bxjs at setbasefontlength\@tempdima{#1}%
-    \bxjs at invscale\@tempdima\jsScale
-    \bxjs at setbasefontsize{\@tempdima}}}
+\define at key{bxjs}{base}{%
+  \edef\bxjs at base@opt{#1}%
+  \bxjs at setbasefontsize{#1}}
+\define at key{bxjs}{fontsize}{\setkeys{bxjs}{base=#1}}
+\define at key{bxjs}{jbase}{\edef\bxjs at jbase@opt{#1}}
+\define at key{bxjs}{jafontsize}{\setkeys{bxjs}{jbase=#1}}
 \define at key{bxjs}{scale}{%
-  \bxjs at scalesettrue
-  \edef\jsScale{#1}}
-\DeclareOption{noscale}{%
-  \bxjs at scalesettrue
-  \def\jsScale{1}}
+  \edef\bxjs at scale@opt{#1}%
+  \let\jsScale\bxjs at scale@opt}
+\define at key{bxjs}{jsfontscale}{\setkeys{bxjs}{scale=#1}}
+\DeclareOption{noscale}{\setkeys{bxjs}{scale=1}}
 \let\bxjs at param@mag\relax
 \define at key{bxjs}{mag}{\edef\bxjs at param@mag{#1}}
 \define at key{bxjs}{paper}{\edef\bxjs at param@paper{#1}}
@@ -543,6 +559,10 @@
   \bxjs at set@keyval{layout}{#1}{}}
 \define at key{bxjs}{textwidth-limit}{%
   \edef\bxjs at textwidth@limit{#1}}
+\define at key{bxjs}{textwidth}{\edef\bxjs at textwidth@opt{#1}}
+\define at key{bxjs}{line_length}{\setkeys{bxjs}{textwidth=#1}}
+\define at key{bxjs}{number-of-lines}{\edef\bxjs at number@of at lines@opt{#1}}
+\define at key{bxjs}{number_of_lines}{\setkeys{bxjs}{number-of-lines=#1}}
 \define at key{bxjs}{paragraph-mark}{%
   \edef\bxjs at paragraph@mark{#1}}
 \newif\ifbxjs at whole@zw at lines \bxjs at whole@zw at linestrue
@@ -731,7 +751,23 @@
       The default value 'nomag*' is used instead.\MessageBreak \@ehc}
   \fi
 \fi
-\bxjs at do@opt at jbase
+\ifx\bxjs at jbase@opt\@undefined\else
+  \ifx\bxjs at base@opt\@undefined
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \bxjs at invscale\@tempdima\jsScale
+    \bxjs at setbasefontsize{\@tempdima}%
+  \else
+    \ifx\bxjs at scale@opt\@undefined\else
+      \ClassWarningNoLine\bxjs at clsname
+       {Redundant 'scale' option is ignored}%
+    \fi
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \@tempdimb=\bxjs at param@basefontsize\relax
+    \edef\jsScale{\strip at pt\@tempdimb}%
+    \bxjs at invscale\@tempdima\jsScale
+    \edef\jsScale{\strip at pt\@tempdima}%
+  \fi
+\fi
 \let\Cjascale\jsScale
 \if \if p\jsEngine T\else\if n\jsEngine T\else F\fi\fi T
   \@tempcnta="80 \loop \ifnum\@tempcnta<"100
@@ -768,8 +804,7 @@
   \divide\@tempdima16384\relax \@tempcnta\@tempdima\relax
   \edef\bxjs at param@mag{\the\@tempcnta}
 \else
-  \let\c at bxjs@cnta\@tempcnta
-  \setcounter{bxjs at cnta}{\bxjs at param@mag}
+  \bxjs at gset@tempcnta{\bxjs at param@mag}
   \ifnum\@tempcnta<\z@ \@tempcnta=\z@ \fi
   \edef\bxjs at param@mag{\the\@tempcnta}
   \advance\@tempcnta100000
@@ -991,23 +1026,37 @@
 \mag=\bxjs at param@mag
 \fi
 \setlength{\topskip}{10\p@?}
+\def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
+\def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
 \def\bxjs at read@a{\futurelet\bxjs at tmpa\bxjs at read@b}
 \def\bxjs at read@b{%
   \ifx\bxjs at tmpa\bgroup \expandafter\bxjs at read@c
   \else \expandafter\bxjs at read@d \fi}
-\def\bxjs at read@c#1#2#3\@nil{\def\bxjs at param@paper{papersize={#1,#2}}}
-\def\bxjs at read@d#1\@nil{}
-\expandafter\bxjs at read@a\bxjs at param@paper\@nil
+\def\bxjs at read@c#1#2#3\@nil{\edef\bxjs at param@paper{papersize={#1,#2}}}
+\def\bxjs at read@d#1\@nil{\bxjs at read@e#1,,\@nil}
+\def\bxjs at read@e#1,#2,#3\@nil{%
+  \ifx\@nil#3\@nil\else \edef\bxjs at param@paper{papersize={#1,#2}}\fi}
+\expandafter\bxjs at read@a\bxjs at param@paper\@empty\@empty\@nil
 \edef\bxjs at layout@paper{%
   \ifjsc at mag truedimen,\fi
   \if at landscape landscape,\fi
   \bxjs at param@paper}
-\def\bxjs at layout{%
+\def\bxjs at layout@base{%
   headheight=\topskip,footskip=0.03367\paperheight,%
   headsep=\footskip-\topskip,includeheadfoot,%
+}
+\edef\bxjs at layout{\bxjs at layout@base
   hscale=0.76,hmarginratio=1:1,%
   vscale=0.83,vmarginratio=1:1,%
 }
+\ifx\bxjs at textwidth@opt\@undefined\else
+  \jsSetQHLength\@tempdima{\bxjs at textwidth@opt}
+  \edef\bxjs at layout{\bxjs at layout width=\the\@tempdima,}
+\fi
+\ifx\bxjs at number@of at lines@opt\@undefined\else
+  \bxjs at gset@tempcnta{\bxjs at number@of at lines@opt}
+  \edef\bxjs at layout{\bxjs at layout lines=\the\@tempcnta,}
+\fi
 \newdimen\fullwidth
 \def\bxjs at postproc@layout{%
   \ifx\bxjs at geometry@driver\relax\else
@@ -1016,6 +1065,7 @@
   \ifbxjs at whole@zw at lines
     \@tempdimb=\textwidth
     \if at twocolumn \@tempdima=2\Cwd \else \@tempdima=1\Cwd \fi
+    \advance\textwidth.005pt\relax
     \divide\textwidth\@tempdima \multiply\textwidth\@tempdima
     \advance\@tempdimb-\textwidth
     \advance\oddsidemargin 0.5\@tempdimb
@@ -1024,6 +1074,7 @@
   \fullwidth=\textwidth
   \@tempdimb=\textheight
   \advance\textheight-\topskip
+  \advance\textheight.005pt\relax
   \divide\textheight\baselineskip \multiply\textheight\baselineskip
   \advance\textheight\topskip
   \advance\@tempdimb-\textheight
@@ -1045,11 +1096,10 @@
 \edef\jsGeometryOptions{%
   \bxjs at layout@paper,\bxjs at layout}
 \ifx\bxjs at geometry\bxjs at geometry@class
-\@onlypreamble\bxjs at revert
-\let\bxjs at revert\@empty
-\edef\bxjs at tmpa{\the\ht\strutbox}
-\ht\strutbox=10\p@?
-\g at addto@macro\bxjs at revert{\ht\strutbox=\bxjs at tmpa\relax}
+\def\bxjs at geometry@guard at on{%
+  \edef\bxjs at gg@tmp{\the\ht\strutbox}\ht\strutbox=10\jsc at mpt}
+\def\bxjs at geometry@guard at off{%
+  \ht\strutbox=\bxjs at gg@tmp\relax}
 \ifbxjs at papersize
   \ifx\bxjs at driver@given\bxjs at driver@@dvipdfmx
     \PassOptionsToPackage{dvipdfm}{geometry}
@@ -1060,11 +1110,13 @@
 \else
   \PassOptionsToPackage{driver=none}{geometry}
 \fi
-\edef\bxjs at nxt{%
-  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}}
 \AtBeginDocument{\bxjs at pre@geometry at hook}
 \AtBeginDocument{\ImposeOldLuaTeXBehavior}
-\bxjs at nxt \bxjs at revert
+\bxjs at geometry@guard at on
+\edef\bxjs at next{%
+  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}%
+}\bxjs at next
+\bxjs at geometry@guard at off
 \AtBeginDocument{\RevokeOldLuaTeXBehavior}
 \let\bxjs at geometry@driver\Gm at driver
 \bxjs at postproc@layout
@@ -1087,14 +1139,23 @@
       \fi
     \fi
   }{}}
-\def\setpagelayout{\@ifstar
-  {\bxjs at reset@layout}{\bxjs at modify@layout}}
-\def\bxjs at modify@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
-\def\bxjs at reset@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{reset,\bxjs at layout@paper,#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at setpagelayout@a\tw@}{%else
+    \@ifstar{\bxjs at setpagelayout@a\@ne}{\bxjs at setpagelayout@a\z@}}}
+\def\bxjs at setpagelayout@a#1#2{%
+  \ifcase#1% modify
+    \def\bxjs at next{\ifjsc at mag truedimen,\fi #2}%
+  \or% reset(*)
+    \def\bxjs at next{reset,\bxjs at layout@paper,#2}%
+  \or% semireset(+)
+    \def\bxjs at next{reset,\bxjs at layout@paper,\bxjs at layout@base,#2}%
+  \fi
+  \bxjs at geometry@guard at on
+  \edef\bxjs at next{%
+    \noexpand\geometry{\bxjs at next}%
+  }\bxjs at next
+  \bxjs at geometry@guard at off
+  \bxjs at postproc@layout}
 \else\ifx\bxjs at geometry\bxjs at geometry@user
 \AtBeginDocument{\bxjs at check@page at layout}
 \@onlypreamble\bxjs at check@page at layout
@@ -1108,8 +1169,9 @@
   \setlength{\textwidth}{6.5in}%
   \setlength{\textheight}{8in}}
 \let\bxjs at geometry@driver\relax
-\def\setpagelayout{\@ifstar
-  {\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at pagelayout@a}{%else
+    \@ifstar{\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}}
 \def\bxjs at pagelayout@a#1{%
   \ClassError\bxjs at clsname
    {Command '\string\setpagelayout' is not supported,\MessageBreak
@@ -1937,9 +1999,6 @@
   \bxjs at oldfontcmd@list
   \ifx\@tempa\@empty\else
     \ClassWarningNoLine\bxjs at clsname
-     {Some old font commands were used in text\MessageBreak
-      (see the log file for detail)}%
-    \ClassInfo\bxjs at clsname
      {Some old font commands were used in text:\MessageBreak
       \space\@tempa\MessageBreak
       You should note, that since 1994 LaTeX2e provides a\MessageBreak
@@ -1946,9 +2005,7 @@
       new font selection scheme called NFSS2 with several\MessageBreak
       new, combinable font commands. The
       class provides\MessageBreak
-      the old font commands
-      only for compatibility%
-      \@gobble}%
+      the old font commands only for compatibility}
   \fi}
 \def\bxjs at warnoldfontcmd@kick at final{%
   \g at addto@macro\clearpage{\bxjs at warnoldfontcmd@final}}

Modified: trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsslide.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsslide.cls	2018-03-05 22:09:59 UTC (rev 46844)
+++ trunk/Master/texmf-dist/tex/latex/bxjscls/bxjsslide.cls	2018-03-05 22:10:32 UTC (rev 46845)
@@ -22,7 +22,7 @@
 %% in the same archive or directory.)
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{bxjsslide}
-  [2018/02/04 v1.7c BXJS document classes]
+  [2018/03/03 v1.8  BXJS document classes]
 %% このファイルは日本語文字を含みます.
 \def\bxjs at clsname{bxjsslide}
 \newif\ifjsc at needsp@tch
@@ -94,6 +94,45 @@
   \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
 \def\bxjs at catopt#1#2{%
   #1\if\relax#1\relax\else\if\relax#2\relax\else,\fi\fi#2}
+\def\bxjs at ifplus#1{\@ifnextchar+{\@firstoftwo{#1}}}
+\let\c at bxjs@tempcnta\@tempcnta
+\def\bxjs at gset@tempcnta{\setcounter{bxjs at tempcnta}}
+\def\jsSetQHLength#1#2{%
+  \begingroup
+    \bxjs at parse@qh{#2}%
+    \ifx\bxjs at tmpb\relax
+      \setlength\@tempdima{#2}%
+      \xdef\bxjs at g@tmpa{\the\@tempdima}%
+    \else \global\let\bxjs at g@tmpa\bxjs at tmpb
+    \fi
+  \endgroup
+  #1=\bxjs at g@tmpa\relax}
+\if j\jsEngine \def\bxjs at parse@qh at all{zw,zh}
+\else \def\bxjs at parse@qh at all{trueQ,trueH,Q,H,zw,zh}
+\fi
+\def\bxjs at parse@qh#1{%
+  \let\bxjs at tmpb\relax
+  \@for\bxjs at tmpa:=\bxjs at parse@qh at all\do{%
+    \ifx\bxjs at tmpb\relax
+      \edef\bxjs at next{{\bxjs at tmpa}{#1}}%
+      \expandafter\bxjs at parse@qh at a\csname bxjs at unit@\bxjs at tmpa\expandafter
+          \endcsname\bxjs at next
+    \fi}}
+\def\bxjs at parse@qh at a#1#2#3{%
+  \def\bxjs at next##1#2\@nil##2\@nnil{\bxjs at parse@qh at b{##1}{##2}#1}%
+  \bxjs at next#3\@nil#2\@nil\@nnil}
+\def\bxjs at parse@qh at b#1#2#3{%
+  \ifx\@nnil#2\@nnil\else
+    \ifx#3\relax
+      \ClassError\bxjs at clsname
+       {You cannot use '\bxjs at tmpa' here}{\@ehc}%
+      \def\bxjs at tmpb{0pt}%
+    \else
+      \@tempdimb#3\relax \@tempdimb#1\@tempdimb
+      \edef\bxjs at tmpb{\the\@tempdimb}%
+    \fi
+  \fi}
+  \def\bxjs at unit@Q{0.25mm}\let\bxjs at unit@H\bxjs at unit@Q
 \def\jsAtEndOfClass{%
   \expandafter\g at addto@macro\csname\bxjs at clsname.cls-h@@k\endcsname}
 \@onlypreamble\bxjs at restore@jltrcc
@@ -150,30 +189,12 @@
 \def\bxjs at param@basefontsize{10pt}
 \def\jsUnusualPtSize{-20}
 \def\bxjs at setbasefontsize#1{%
-  \bxjs at setbasefontlength\@tempdima{#1}%
+  \jsSetQHLength\@tempdima{#1}%
   \edef\bxjs at param@basefontsize{\the\@tempdima}%
   \ifdim\@tempdima=10pt         \long\def\@ptsize{0}%
   \else\ifdim\@tempdima=10.95pt \long\def\@ptsize{1}%
   \else\ifdim\@tempdima=12pt    \long\def\@ptsize{2}%
   \else \long\edef\@ptsize{\jsUnusualPtSize}\fi\fi\fi}
-\def\bxjs at setbasefontlength#1#2{%
-  \bxjs at setbasefontlength@a#2true\@nnil
-  \ifx j\jsEngine \setlength#1{#2}%
-  \else
-    \bxjs at setbasefontlength@b#2\@nil Q\@nil\@nnil
-    \ifx\bxjs at tmpa\relax \setlength#1{#2}%
-    \else \@tempdimc0.25mm #1=\bxjs at tmpa\@tempdimc
-    \fi
-  \fi}
-\def\bxjs at setbasefontlength@b#1Q\@nil#2\@nnil{%
-  \ifx\@nnil#2\@nnil \let\bxjs at tmpa\relax
-  \else \def\bxjs at tmpa{#1}%
-  \fi}
-\def\bxjs at setbasefontlength@a#1true#2\@nnil{%
-  \ifx\@nnil#2\@nnil\else
-    \ClassWarningNoLine\bxjs at clsname
-    {You should not use 'true' lengths here}%
-  \fi}
 \newif\ifjsc at mag
 \newif\ifjsc at mag@xreal
 \DeclareOption{8pt}{\bxjs at setbasefontsize{8pt}}
@@ -442,23 +463,18 @@
 \def\bxjs at error@keyval#1#2{%
   \ClassError\bxjs at clsname
    {Invalid value '#2' for option #1}\@ehc}
-\newif\ifbxjs at scaleset
 \def\jsScale{0.924715}
-\define at key{bxjs}{base}{\bxjs at setbasefontsize{#1}}
-\@onlypreamble\bxjs at do@opt at jbase
-\let\bxjs at do@opt at jbase\relax
-\define at key{bxjs}{jbase}{\bxjs at setjbasefontsize{#1}}
-\def\bxjs at setjbasefontsize#1{%
-  \def\bxjs at do@opt at jbase{%
-    \bxjs at setbasefontlength\@tempdima{#1}%
-    \bxjs at invscale\@tempdima\jsScale
-    \bxjs at setbasefontsize{\@tempdima}}}
+\define at key{bxjs}{base}{%
+  \edef\bxjs at base@opt{#1}%
+  \bxjs at setbasefontsize{#1}}
+\define at key{bxjs}{fontsize}{\setkeys{bxjs}{base=#1}}
+\define at key{bxjs}{jbase}{\edef\bxjs at jbase@opt{#1}}
+\define at key{bxjs}{jafontsize}{\setkeys{bxjs}{jbase=#1}}
 \define at key{bxjs}{scale}{%
-  \bxjs at scalesettrue
-  \edef\jsScale{#1}}
-\DeclareOption{noscale}{%
-  \bxjs at scalesettrue
-  \def\jsScale{1}}
+  \edef\bxjs at scale@opt{#1}%
+  \let\jsScale\bxjs at scale@opt}
+\define at key{bxjs}{jsfontscale}{\setkeys{bxjs}{scale=#1}}
+\DeclareOption{noscale}{\setkeys{bxjs}{scale=1}}
 \let\bxjs at param@mag\relax
 \define at key{bxjs}{mag}{\edef\bxjs at param@mag{#1}}
 \define at key{bxjs}{paper}{\edef\bxjs at param@paper{#1}}
@@ -535,6 +551,10 @@
   \bxjs at set@keyval{layout}{#1}{}}
 \define at key{bxjs}{textwidth-limit}{%
   \edef\bxjs at textwidth@limit{#1}}
+\define at key{bxjs}{textwidth}{\edef\bxjs at textwidth@opt{#1}}
+\define at key{bxjs}{line_length}{\setkeys{bxjs}{textwidth=#1}}
+\define at key{bxjs}{number-of-lines}{\edef\bxjs at number@of at lines@opt{#1}}
+\define at key{bxjs}{number_of_lines}{\setkeys{bxjs}{number-of-lines=#1}}
 \define at key{bxjs}{paragraph-mark}{%
   \edef\bxjs at paragraph@mark{#1}}
 \newif\ifbxjs at whole@zw at lines \bxjs at whole@zw at linestrue
@@ -723,7 +743,23 @@
       The default value 'nomag*' is used instead.\MessageBreak \@ehc}
   \fi
 \fi
-\bxjs at do@opt at jbase
+\ifx\bxjs at jbase@opt\@undefined\else
+  \ifx\bxjs at base@opt\@undefined
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \bxjs at invscale\@tempdima\jsScale
+    \bxjs at setbasefontsize{\@tempdima}%
+  \else
+    \ifx\bxjs at scale@opt\@undefined\else
+      \ClassWarningNoLine\bxjs at clsname
+       {Redundant 'scale' option is ignored}%
+    \fi
+    \jsSetQHLength\@tempdima{\bxjs at jbase@opt}%
+    \@tempdimb=\bxjs at param@basefontsize\relax
+    \edef\jsScale{\strip at pt\@tempdimb}%
+    \bxjs at invscale\@tempdima\jsScale
+    \edef\jsScale{\strip at pt\@tempdima}%
+  \fi
+\fi
 \let\Cjascale\jsScale
 \if \if p\jsEngine T\else\if n\jsEngine T\else F\fi\fi T
   \@tempcnta="80 \loop \ifnum\@tempcnta<"100
@@ -759,8 +795,7 @@
   \divide\@tempdima16384\relax \@tempcnta\@tempdima\relax
   \edef\bxjs at param@mag{\the\@tempcnta}
 \else
-  \let\c at bxjs@cnta\@tempcnta
-  \setcounter{bxjs at cnta}{\bxjs at param@mag}
+  \bxjs at gset@tempcnta{\bxjs at param@mag}
   \ifnum\@tempcnta<\z@ \@tempcnta=\z@ \fi
   \edef\bxjs at param@mag{\the\@tempcnta}
   \advance\@tempcnta100000
@@ -982,22 +1017,36 @@
 \mag=\bxjs at param@mag
 \fi
 \setlength{\topskip}{10\p@?}
+\def\bxjs at unit@trueQ{0.25truemm}\let\bxjs at unit@trueH\bxjs at unit@trueQ
+\def\bxjs at unit@zw{\jsZw}\let\bxjs at unit@zh\bxjs at unit@zw
 \def\bxjs at read@a{\futurelet\bxjs at tmpa\bxjs at read@b}
 \def\bxjs at read@b{%
   \ifx\bxjs at tmpa\bgroup \expandafter\bxjs at read@c
   \else \expandafter\bxjs at read@d \fi}
-\def\bxjs at read@c#1#2#3\@nil{\def\bxjs at param@paper{papersize={#1,#2}}}
-\def\bxjs at read@d#1\@nil{}
-\expandafter\bxjs at read@a\bxjs at param@paper\@nil
+\def\bxjs at read@c#1#2#3\@nil{\edef\bxjs at param@paper{papersize={#1,#2}}}
+\def\bxjs at read@d#1\@nil{\bxjs at read@e#1,,\@nil}
+\def\bxjs at read@e#1,#2,#3\@nil{%
+  \ifx\@nil#3\@nil\else \edef\bxjs at param@paper{papersize={#1,#2}}\fi}
+\expandafter\bxjs at read@a\bxjs at param@paper\@empty\@empty\@nil
 \edef\bxjs at layout@paper{%
   \ifjsc at mag truedimen,\fi
   \if at landscape landscape,\fi
   \bxjs at param@paper}
-\def\bxjs at layout{%
+\def\bxjs at layout@base{%
   noheadfoot,%
+}
+\edef\bxjs at layout{\bxjs at layout@base
   hscale=0.9,hmarginratio=1:1,%
   vscale=0.944,vmarginratio=1:1,%
 }
+\ifx\bxjs at textwidth@opt\@undefined\else
+  \jsSetQHLength\@tempdima{\bxjs at textwidth@opt}
+  \edef\bxjs at layout{\bxjs at layout width=\the\@tempdima,}
+\fi
+\ifx\bxjs at number@of at lines@opt\@undefined\else
+  \bxjs at gset@tempcnta{\bxjs at number@of at lines@opt}
+  \edef\bxjs at layout{\bxjs at layout lines=\the\@tempcnta,}
+\fi
 \newdimen\fullwidth
 \def\bxjs at postproc@layout{%
   \ifx\bxjs at geometry@driver\relax\else
@@ -1006,6 +1055,7 @@
   \ifbxjs at whole@zw at lines
     \@tempdimb=\textwidth
     \if at twocolumn \@tempdima=2\Cwd \else \@tempdima=1\Cwd \fi
+    \advance\textwidth.005pt\relax
     \divide\textwidth\@tempdima \multiply\textwidth\@tempdima
     \advance\@tempdimb-\textwidth
     \advance\oddsidemargin 0.5\@tempdimb
@@ -1014,6 +1064,7 @@
   \fullwidth=\textwidth
   \@tempdimb=\textheight
   \advance\textheight-\topskip
+  \advance\textheight.005pt\relax
   \divide\textheight\baselineskip \multiply\textheight\baselineskip
   \advance\textheight\topskip
   \advance\@tempdimb-\textheight
@@ -1035,11 +1086,10 @@
 \edef\jsGeometryOptions{%
   \bxjs at layout@paper,\bxjs at layout}
 \ifx\bxjs at geometry\bxjs at geometry@class
-\@onlypreamble\bxjs at revert
-\let\bxjs at revert\@empty
-\edef\bxjs at tmpa{\the\ht\strutbox}
-\ht\strutbox=10\p@?
-\g at addto@macro\bxjs at revert{\ht\strutbox=\bxjs at tmpa\relax}
+\def\bxjs at geometry@guard at on{%
+  \edef\bxjs at gg@tmp{\the\ht\strutbox}\ht\strutbox=10\jsc at mpt}
+\def\bxjs at geometry@guard at off{%
+  \ht\strutbox=\bxjs at gg@tmp\relax}
 \ifbxjs at papersize
   \ifx\bxjs at driver@given\bxjs at driver@@dvipdfmx
     \PassOptionsToPackage{dvipdfm}{geometry}
@@ -1050,11 +1100,13 @@
 \else
   \PassOptionsToPackage{driver=none}{geometry}
 \fi
-\edef\bxjs at nxt{%
-  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}}
 \AtBeginDocument{\bxjs at pre@geometry at hook}
 \AtBeginDocument{\ImposeOldLuaTeXBehavior}
-\bxjs at nxt \bxjs at revert
+\bxjs at geometry@guard at on
+\edef\bxjs at next{%
+  \noexpand\RequirePackage[\bxjs at layout@paper,\bxjs at layout]{geometry}%
+}\bxjs at next
+\bxjs at geometry@guard at off
 \AtBeginDocument{\RevokeOldLuaTeXBehavior}
 \let\bxjs at geometry@driver\Gm at driver
 \bxjs at postproc@layout
@@ -1077,14 +1129,23 @@
       \fi
     \fi
   }{}}
-\def\setpagelayout{\@ifstar
-  {\bxjs at reset@layout}{\bxjs at modify@layout}}
-\def\bxjs at modify@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
-\def\bxjs at reset@layout#1{%
-  \edef\bxjs at nxt{\noexpand\geometry{reset,\bxjs at layout@paper,#1,truedimen}}%
-  \bxjs at nxt\bxjs at postproc@layout}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at setpagelayout@a\tw@}{%else
+    \@ifstar{\bxjs at setpagelayout@a\@ne}{\bxjs at setpagelayout@a\z@}}}
+\def\bxjs at setpagelayout@a#1#2{%
+  \ifcase#1% modify
+    \def\bxjs at next{\ifjsc at mag truedimen,\fi #2}%
+  \or% reset(*)
+    \def\bxjs at next{reset,\bxjs at layout@paper,#2}%
+  \or% semireset(+)
+    \def\bxjs at next{reset,\bxjs at layout@paper,\bxjs at layout@base,#2}%
+  \fi
+  \bxjs at geometry@guard at on
+  \edef\bxjs at next{%
+    \noexpand\geometry{\bxjs at next}%
+  }\bxjs at next
+  \bxjs at geometry@guard at off
+  \bxjs at postproc@layout}
 \else\ifx\bxjs at geometry\bxjs at geometry@user
 \AtBeginDocument{\bxjs at check@page at layout}
 \@onlypreamble\bxjs at check@page at layout
@@ -1098,8 +1159,9 @@
   \setlength{\textwidth}{6.5in}%
   \setlength{\textheight}{8in}}
 \let\bxjs at geometry@driver\relax
-\def\setpagelayout{\@ifstar
-  {\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}
+\def\setpagelayout{%
+  \bxjs at ifplus{\bxjs at pagelayout@a}{%else
+    \@ifstar{\bxjs at pagelayout@a}{\bxjs at pagelayout@a}}}
 \def\bxjs at pagelayout@a#1{%
   \ClassError\bxjs at clsname
    {Command '\string\setpagelayout' is not supported,\MessageBreak
@@ -1829,9 +1891,6 @@
   \bxjs at oldfontcmd@list
   \ifx\@tempa\@empty\else
     \ClassWarningNoLine\bxjs at clsname
-     {Some old font commands were used in text\MessageBreak
-      (see the log file for detail)}%
-    \ClassInfo\bxjs at clsname
      {Some old font commands were used in text:\MessageBreak
       \space\@tempa\MessageBreak
       You should note, that since 1994 LaTeX2e provides a\MessageBreak
@@ -1838,9 +1897,7 @@
       new font selection scheme called NFSS2 with several\MessageBreak
       new, combinable font commands. The
       class provides\MessageBreak
-      the old font commands
-      only for compatibility%
-      \@gobble}%
+      the old font commands only for compatibility}
   \fi}
 \def\bxjs at warnoldfontcmd@kick at final{%
   \g at addto@macro\clearpage{\bxjs at warnoldfontcmd@final}}



More information about the tex-live-commits mailing list