%
% Package ``endnotesj.sty'' for endnotes in Japanese articles,
% written by Hirokazu OGAWA and Hironobu YAMASHITA
%
% This package is part of the endnotesj bundle.
% https://github.com/aminophen/endnotesj
%
% Authors:
%  * Hirokazu OGAWA (Kumamoto Gakuen University)
%      Mail: herogw at kumagaku.ac.jp
%       Web: http://www2.kumagaku.ac.jp/teacher/herogw/index.html
%  * Hironobu YAMASHITA
%      Mail: h.y.acetaminophen at gmail.com
%      Github: @aminophen
%
% This work is based on ``endnotes.sty'' (15 January 2003)
% written by John Lavagnino.
%
% ****************************************
% *           ENDNOTE MACROS             *
% ****************************************
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{endnotesj}
  [2018/05/13 v3.0 endnotesj (H. Ogawa and H. Yamashita)]
%
%% Requirements: engine & format
%
%  This package supports pTeX/upTeX and LuaTeX-ja only;
%  otherwise, throw an error
%  When the error is ignored, fall back to endnotes.sty and exit
%  (--> unsupported feature, of course)
\ifx\pfmtname\@undefined
  \expandafter\ifx\csname ver@luatexja.sty\endcsname\relax
    \PackageError{endnotesj}{%
      Unsupported engine detected!\MessageBreak
      Please use pLaTeX, upLaTeX or LuaTeX-ja instead}{%
      I will load `endnotes.sty' instead, but
      the result will be undesired.}
    \RequirePackage{endnotes}
  \expandafter\expandafter\expandafter\endinput\expandafter\fi
\fi
%
%  Ensure compatibility in units between pTeX/upTeX and LuaTeX-ja
%   * \endnj@zw = width of the current full-width Japanese font
%                 (zen-kaku width)
%   * \endnj@zh = height of the current full-width Japanese font
%                 (zen-kaku height)
\ifx\directlua\@undefined
  % pTeX/upTeX should have `zw' and `zh'
  \def\endnj@zw{zw}
  \def\endnj@zh{zh}
\else
  % LuaTeX-ja should have `\zw` and `\zh'
  \def\endnj@zw{\zw}
  \def\endnj@zh{\zh}
\fi
%
%% Ensure that endnotes.sty is NOT loaded after this package
%
\@ifpackageloaded{endnotes}{}{%
  \IfFileExists{endnotes.sty}{%
    \expandafter\def\csname ver@endnotes.sty\endcsname{}}{}}
%
%% Initialize \notesname
%
\def\notesname{} % should be empty by default (endnotesj.sty original)
%
%% Package options (endnotesj original)
%%  * Note that the order of declarations is also important, especially
%%    for options which compete with each other (e.g. tate/yoko)
%%    cf. ltclass.dtx
%%      "In the case of \ProcessOptions, they are processed in the
%%       order that they were declared in the class or package."
%
%  Directions - force yoko (horizontal) or tate (vertical)?
\newif\if@endnj@tate \@endnj@tatefalse
\newif\if@endnj@yoko \@endnj@yokofalse
\newif\if@endnj@autotateyoko \@endnj@autotateyokofalse
\DeclareOption{tate}{\@endnj@autotateyokofalse\@endnj@tatetrue\@endnj@yokofalse}
\DeclareOption{yoko}{\@endnj@autotateyokofalse\@endnj@yokotrue\@endnj@tatefalse}
%
%  Use conditional definitions for switching marks depending on
%  vertical/horizontal Japanese writing direction
\DeclareOption{auto-tateyoko}{\@endnj@autotateyokotrue\@endnj@tatefalse\@endnj@yokofalse}
%
%  Brackets - single or twin?
\newif\if@endnj@single \@endnj@singlefalse
\DeclareOption{twin}{\@endnj@singlefalse} % => default
\DeclareOption{single}{\@endnj@singletrue}
%
%  Use utf/otf package?
\newif\if@endnj@utf \@endnj@utffalse
\DeclareOption{utf}{\@endnj@utftrue}
\DeclareOption{otf}{\@endnj@utftrue}
%
%  `ver3' mode - Use improved styles of \@makeenmark (endnote marks) and
%                \enoteformat (the endnote format)
\def\endnj@vermode{3}
\DeclareOption{ver3}{\def\endnj@vermode{3}} % => future default
%
%  `ver2' mode - For backward compatibility: use styles of \@makeenmark
%                and \enoteformat which are inherited from previous
%                versions of endnotesj.sty
\DeclareOption{ver2}{\typeout{*** endnotesj version 2 compatibility mode ***}%
                     \def\endnj@vermode{2}}
%
%  Other options are unknown, however endnotesj.sty accepts only one
%  unknown option, which is then regarded as \notesname (= endnote section title)
%  If more than one unknown options are requested, the last one is chosen;
%  the others are simply ignored, so throw an error (for fear of misspelling)
\def\endnj@temp@ptions{}
\DeclareOption*{\ifx\endnj@temp@ptions\@empty
                  \edef\endnj@temp@ptions{\CurrentOption}%
                \else
                  \edef\endnj@temp@ptions{\endnj@temp@ptions,\CurrentOption}%
                \fi
                \edef\notesname{\CurrentOption}}
\ExecuteOptions{auto-tateyoko,twin,ver3}
\ProcessOptions
%
%% Option handlings
%
%  Throw an error for more than one unknown options
%  Also, show info about what will be used as `\notesname'
\@for\reserved@a:=\endnj@temp@ptions\do{%
  \ifx\reserved@a\notesname
    \typeout{*** Package endnotesj will use `\notesname' as \string\notesname. ***}%
  \else
    \ifx\reserved@a\@empty\else
      \PackageError{endnotesj}{%
        Unknown option `\reserved@a' ignored!\MessageBreak
        It seems that more than one unknown options\MessageBreak
        were requested, and `\notesname' was taken as\MessageBreak
        \string\notesname. Perhaps you misspelled some options}{%
        The options `\endnj@temp@ptions' were not declared in package endnotesj.\MessageBreak
        Package endnotesj accepts ONLY ONE unknown option (the last one;\MessageBreak
        in this case `\notesname'), which is regarded as \string\notesname.\MessageBreak
        The others will be simply ignored.}
    \fi
  \fi}
%
%  If `single' is specified, `tate' should be false
\if@endnj@single
  \if@endnj@tate
    \PackageWarning{endnotesj}{%
      Option `single' cannot be used with `tate'.\MessageBreak
      Please use `auto-tateyoko' or `yoko'.\MessageBreak
      Entering `auto-tateyoko' mode}
    \@endnj@autotateyokotrue\@endnj@tatefalse\@endnj@yokofalse
  \fi
\fi
%
%  If `otf'/`utf' options are specified, load either of otf.sty/utf.sty
\if@endnj@utf
\ifx\directlua\@undefined
  \@ifpackageloaded{utf}{}{\@ifpackageloaded{otf}{}{%
    \IfFileExists{otf.sty}{\RequirePackage{otf}}{%
    \IfFileExists{utf.sty}{\RequirePackage{utf}}{%
    \PackageError{endnotesj}{Neither otf.sty nor utf.sty found}\@ehc
    \@endnj@utffalse}% fall back
  }}}
\else
  \@ifpackageloaded{luatexja-otf}{}{%
    \IfFileExists{luatexja-otf.sty}{\RequirePackage{luatexja-otf}}{%
    \PackageError{endnotesj}{luatexja-otf.sty not found}\@ehc
    \@endnj@utffalse}% fall back
  }
\fi
\fi
%
%% Misc helpers
%
%  fallback from #1 to #2 (tate-single -> tate-twin)
%  once #1 is executed, throw a warning and replace its definition with
%  the definition of #2, and execute it
\def\endnj@tate@single@unavailable#1#2{%
  \def#1{%
    \PackageWarning{endnotesj}{%
      `single' style is unavailable in `tate' direction.\MessageBreak
      I'll use `twin' style instead.}%
    \global\let#1#2%
    #1}%
}
%
%
%%%%% Import from endnotes.sty
%
\@definecounter{endnote}
\def\theendnote{\arabic{endnote}}
%
%%%%% End
%
%
%% Customized endnote marks inside the main text for Japanese documents
%
% [1] `tate' & `twin'
%   Common style for vertical writing with twin full-width round brackets
%   like "Journal of Japanese history" (Nihonshi kenkyu)
%
% *** ver 2 ***
\def\endnj@ii@tate@makeenmark{%
    \kern -1.2\endnj@zw%
    \raisebox{.8\endnj@zh}{\tiny \char\jis"214A\relax\hspace{0.2\endnj@zw}%
      \hbox{\yoko\@theenmark}%
      \hspace{0.2\endnj@zw}\char\jis"214B\relax
    }%
}
% *** ver 3 ***
\def\endnj@iii@tate@makeenmark{%
  \hb@xt@\z@{%
    \kern -1.2\endnj@zw\hss
    \raisebox{.8\endnj@zh}{\tiny \char\jis"214A\relax\hspace{0.1\endnj@zw}%
      \hbox{\yoko\@theenmark}%
      \hspace{0.1\endnj@zw}\char\jis"214B\relax
    }%
  }%
}
%
% [1'] `tate' & `twin' & `utf'
%   More beautiful output using "tsume-suji" requires otf/utf package
%
% *** ver 2 ***
\def\endnj@ii@tate@utf@makeenmark{%
    \kern -1.2\endnj@zw%
    \raisebox{.8\endnj@zh}{\tiny \char\jis"214A\relax
      \hbox{\yoko\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
      \char\jis"214B\relax
    }%
}
% *** ver 3 ***
\def\endnj@iii@tate@utf@makeenmark{%
  \hb@xt@\z@{%
    \kern -1.2\endnj@zw\hss
    \raisebox{.8\endnj@zh}{\tiny \char\jis"214A\relax
      \hbox{\yoko\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
      \char\jis"214B\relax
    }%
  }%
}
%
% [2] `yoko' & `twin'
%   Common style for horizontal writing with twin round brackets
%
% *** ver 2 ***
\def\endnj@ii@yoko@makeenmark{%
  \raisebox{.5\endnj@zh}{\tiny (\hspace{0.2\endnj@zw}%
    \hbox{\@theenmark}%
    )%
  }%
}
% *** ver 3 *** (using twin full-width round brackets)
\def\endnj@iii@yoko@makeenmark{%
  \raisebox{.5\endnj@zh}{\tiny \char\jis"214A\relax\hspace{0.1\endnj@zw}%
    \hbox{\@theenmark}%
    \hspace{0.1\endnj@zw}\char\jis"214B\relax
  }%
}
%
% [2'] `yoko' & `twin' & `utf'
%   More beautiful output using "tsume-suji" requires otf/utf package
%
% *** ver 2 ***
\def\endnj@ii@yoko@utf@makeenmark{%
  \raisebox{.5\endnj@zh}{\tiny \char\jis"214A\relax
    \hbox{\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
    \char\jis"214B\relax
  }%
}
% *** ver 3 ***
\let\endnj@iii@yoko@utf@makeenmark\endnj@ii@yoko@utf@makeenmark
%
% [3] `yoko' & `single'
%   Style for horizontal writing with single round bracket
%   like "Journal of historical studies" (Rekishigaku kenkyu)
%
% *** ver 2 ***
\def\endnj@ii@yoko@single@makeenmark{%
  \raisebox{.5\endnj@zh}{\tiny
    \hbox{\@theenmark}%
    )%
  }%
}
% *** ver 3 ***
\let\endnj@iii@yoko@single@makeenmark\endnj@ii@yoko@single@makeenmark
%
% [3'] `yoko' & `single' & `utf'
%   More beautiful output using "tsume-suji" requires otf/utf package
%
% *** ver 2 ***
\def\endnj@ii@yoko@single@utf@makeenmark{%
  \raisebox{.5\endnj@zh}{\tiny
    \hbox{\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
    \char\jis"214B\relax
  }%
}
% *** ver 3 ***
\let\endnj@iii@yoko@single@utf@makeenmark\endnj@ii@yoko@single@utf@makeenmark
%
% [4] `tate' & `single' (& `utf')
%   Not available! - fallback definitions
%
\endnj@tate@single@unavailable\endnj@ii@tate@single@makeenmark\endnj@ii@tate@makeenmark
\endnj@tate@single@unavailable\endnj@iii@tate@single@makeenmark\endnj@iii@tate@makeenmark
\endnj@tate@single@unavailable\endnj@ii@tate@single@utf@makeenmark\endnj@ii@tate@utf@makeenmark
\endnj@tate@single@unavailable\endnj@iii@tate@single@utf@makeenmark\endnj@iii@tate@utf@makeenmark
%
%  Current names of the commands for `tate' and `yoko'
%
\expandafter\def\expandafter\endnj@tate@makeenmark\expandafter{%
  \csname endnj@%
    \romannumeral\endnj@vermode @%
    tate@%
    \if@endnj@single single@\fi%
    \if@endnj@utf utf@\fi%
    makeenmark\endcsname}
\expandafter\def\expandafter\endnj@yoko@makeenmark\expandafter{%
  \csname endnj@%
    \romannumeral\endnj@vermode @%
    yoko@%
    \if@endnj@single single@\fi%
    \if@endnj@utf utf@\fi%
    makeenmark\endcsname}
%
%  Now, redefine \@makeenmark using above definitions
%
\if@endnj@tate
  \let\@makeenmark\endnj@tate@makeenmark
\fi
\if@endnj@yoko
  \let\@makeenmark\endnj@tate@makeenmark
\fi
%
%% End
%
%
%%%%% Import from endnotes.sty
%
\def\makeenmark{\@makeenmark} % Added in endnotes.sty (JL 12 January 2003)
\def\theenmark{\@theenmark} % Added in endnotes.sty (JL 12 January 2003)
%
\newdimen\endnotesep
%
\def\endnote{\@ifnextchar[\@xendnote{\stepcounter{endnote}%
     \protected@xdef\@theenmark{\theendnote}%
     \@endnotemark\@endnotetext}}
%
\def\@xendnote[#1]{%
   \begingroup
     \c@endnote=#1\relax
     \unrestored@protected@xdef\@theenmark{\theendnote}%
   \endgroup
   \@endnotemark\@endnotetext}
%
\let\@doanenote=0
\let\@endanenote=0
%
\newwrite\@enotes
\newif\if@enotesopen \global\@enotesopenfalse
%
\def\@openenotes{\immediate\openout\@enotes=\jobname.ent\relax
      \global\@enotesopentrue}
%
\long\def\@endnotetext#1{%
     \if@enotesopen \else \@openenotes \fi
     \immediate\write\@enotes{\@doanenote{\@theenmark}}%
     \begingroup
        \def\next{#1}%
        \newlinechar='40
        \immediate\write\@enotes{\meaning\next}%
     \endgroup
     \immediate\write\@enotes{\@endanenote}}
%
\long\def\addtoendnotes#1{%
     \if@enotesopen \else \@openenotes \fi
     \begingroup
        \newlinechar='40
        \let\protect\string
        \immediate\write\@enotes{#1}%
     \endgroup}
%
\def\endnotemark{%
   \@ifnextchar[\@xendnotemark
     {\stepcounter{endnote}%
      \protected@xdef\@theenmark{\theendnote}%
      \@endnotemark}}
%
\def\@xendnotemark[#1]{%
   \begingroup
      \c@endnote #1\relax
      \unrestored@protected@xdef\@theenmark{\theendnote}%
   \endgroup
   \@endnotemark}
%
\def\@endnotemark{%
  \leavevmode
  \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
  \makeenmark
  \ifhmode\spacefactor\@x@sf\fi
  \relax}
%
\def\endnotetext{%
     \@ifnextchar [\@xendnotenext
       {\protected@xdef\@theenmark{\theendnote}%
    \@endnotetext}}
%
\def\@xendnotenext[#1]{%
  \begingroup
     \c@endnote=#1\relax
     \unrestored@protected@xdef\@theenmark{\theendnote}%
  \endgroup
  \@endnotetext}
%
\def\enoteheading{\section*{\notesname
  \@mkboth{\MakeUppercase{\notesname}}{\MakeUppercase{\notesname}}}%
  \mbox{}\par\vskip-\baselineskip}
%
%%%%% End
%
%
%% Settings of endnote formatting at the end of Japanese documents
%% (The numbering styles and indentation are considered.)
%
% [1] `tate' & `twin'
%   Common style for vertical writing with twin full-width round brackets
%   like "Journal of Japanese history" (Nihonshi kenkyu)
%
% *** ver 2 ***
\def\endnj@ii@tate@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{\raisebox{.07\endnj@zh}{(}\hspace{0.2\endnj@zw}%
    \hbox{\yoko\@theenmark}%
    \hspace{0.2\endnj@zw}\raisebox{.07\endnj@zh}{)}%
  }#1%
}
% *** ver 3 ***
\def\endnj@iii@tate@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{\mbox{}\char\jis"214A\relax\hspace{0.1\endnj@zw}%
    \hbox{\yoko\@theenmark}%
    \hspace{0.1\endnj@zw}\char\jis"214B\relax\mbox{}%
  }#1%
}
%
% [1'] `tate' & `twin' & `utf'
%   More beautiful output using "tsume-suji" requires otf/utf package
%
% *** ver 2 ***
\def\endnj@ii@tate@utf@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{\UTF{FE35}%
    \hbox{\yoko\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
    \UTF{FE36}%
  }#1%
}
% *** ver 3 ***
\def\endnj@iii@tate@utf@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{\mbox{}\char\jis"214A\relax
    \hbox{\yoko\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
    \char\jis"214B\relax\mbox{}%
  }#1%
}
%
% [2] `yoko' & `twin'
%   Common style for horizontal writing with twin round brackets
%
% *** ver 2 ***
\def\endnj@ii@yoko@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{(\hspace{0.2\endnj@zw}%
    \hbox{\@theenmark}%
    \hspace{0.2\endnj@zw})%
  }#1%
}
% *** ver 3 *** (using twin full-width round brackets)
\def\endnj@iii@yoko@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{\mbox{}\char\jis"214A\relax\hspace{0.1\endnj@zw}%
    \hbox{\@theenmark}%
    \hspace{0.1\endnj@zw}\char\jis"214B\relax\mbox{}%
  }#1%
}
%
% [2'] `yoko' & `twin' & `utf'
%   More beautiful output using "tsume-suji" requires otf/utf package
%
% *** ver 2 ***
\def\endnj@ii@yoko@utf@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{\char\jis"214A\relax%
    \hbox{\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
    \char\jis"214B\relax
  }#1%
}
% *** ver 3 ***
\def\endnj@iii@yoko@utf@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{\mbox{}\char\jis"214A\relax%
    \hbox{\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
    \char\jis"214B\relax\mbox{}%
  }#1%
}
%
% [3] `yoko' & `single'
%   Style for horizontal writing with single round bracket
%   like "Journal of historical studies" (Rekishigaku kenkyu)
%
% *** ver 2 ***
\def\endnj@ii@yoko@single@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{%
    \hbox{\@theenmark}%
    )%
  }#1%
}
% *** ver 3 ***
\let\endnj@iii@yoko@single@enoteformat\endnj@ii@yoko@single@enoteformat
%
% [3'] `yoko' & `single' & `utf'
%   More beautiful output using "tsume-suji" requires otf/utf package
%
% *** ver 2 ***
\def\endnj@ii@yoko@single@utf@enoteformat#1{%
  \parindent 1em\noindent
  \@hangfrom{%
    \hbox{\expandafter\ajTumesuji\expandafter*\expandafter{\number\@theenmark}}%
    \char\jis"214B\relax
  }#1%
}
% *** ver 3 ***
\let\endnj@iii@yoko@single@utf@enoteformat\endnj@ii@yoko@single@utf@enoteformat
%
% [4] `tate' & `single' (& `utf')
%   Not available! - fallback definitions
%
\endnj@tate@single@unavailable\endnj@ii@tate@single@enoteformat\endnj@ii@tate@enoteformat
\endnj@tate@single@unavailable\endnj@iii@tate@single@enoteformat\endnj@iii@tate@enoteformat
\endnj@tate@single@unavailable\endnj@ii@tate@single@utf@enoteformat\endnj@ii@tate@utf@enoteformat
\endnj@tate@single@unavailable\endnj@iii@tate@single@utf@enoteformat\endnj@iii@tate@utf@enoteformat
%
%  Current names of the commands for `tate' and `yoko'
%
\expandafter\def\expandafter\endnj@tate@enoteformat\expandafter{%
  \csname endnj@%
    \romannumeral\endnj@vermode @%
    tate@%
    \if@endnj@single single@\fi%
    \if@endnj@utf utf@\fi%
    enoteformat\endcsname}
\expandafter\def\expandafter\endnj@yoko@enoteformat\expandafter{%
  \csname endnj@%
    \romannumeral\endnj@vermode @%
    yoko@%
    \if@endnj@single single@\fi%
    \if@endnj@utf utf@\fi%
    enoteformat\endcsname}
%
%  Now, redefine \enoteformat using above definitions
%
\if@endnj@tate
  \let\enoteformat\endnj@tate@enoteformat
\fi
\if@endnj@yoko
  \let\enoteformat\endnj@yoko@enoteformat
\fi
%
%% End
%
%
\def\enotesize{\small} % endnotesj.sty original
%
%%%%% Import from endnotes.sty
%
\def\theendnotes{\immediate\closeout\@enotes \global\@enotesopenfalse
  \begingroup
    \makeatletter
    %
    % The machinery with \@ResetGT and > here ensures that
    % \@doanenote works properly even if > is an active character
    % at the point where \theendnotes is invoked. > needs to have
    % catcode 12 when the arguments of \@doanenote are scanned, so
    % that the > in the string "macro:->" is matched.  The actual
    % footnote text is not an argument to \@doanenote, but just
    % follows it in the .ent file; so \@ResetGT can reset the
    % category code for > that should be used when processing
    % that text.  That resetting takes place within a
    % \begingroup-\endgroup block set up by \@doanenote and
    % \@endanenote, so the catcode for > is back to 12 for the
    % next note.
    %
    \edef\@tempa{`\string >}%
    \ifnum\catcode\@tempa=12%
      \let\@ResetGT\relax
    \else
      \edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
      \@makeother\>%
    \fi
    \def\@doanenote##1##2>{\def\@theenmark{##1}\par\begingroup
        \@ResetGT
        \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}%
        \enoteformat}
    \def\@endanenote{\par\endgroup}%
    \enoteheading
    \enotesize
    \input{\jobname.ent}%
  \endgroup}
%
%%%%% End
%
%
%% Definitions for auto-tateyoko option
%
\ifx\directlua\@undefined
  \catcode`\L=14\relax
  \catcode`\P=9\relax
\else
  \catcode`\L=9\relax
  \catcode`\P=14\relax
\fi
\if@endnj@autotateyoko
  \def\@makeenmark{%
P   \iftdir
L   \ifnum\numexpr
L     \ltjgetparameter{direction}-(\ltjgetparameter{direction}/8)*8=3\relax
      \endnj@tate@makeenmark
    \else
      \endnj@yoko@makeenmark
    \fi}
  \def\enoteformat{%
P   \iftdir
L   \ifnum\numexpr
L     \ltjgetparameter{direction}-(\ltjgetparameter{direction}/8)*8=3\relax
      \endnj@tate@enoteformat
    \else
      \endnj@yoko@enoteformat
    \fi}
\fi
\catcode`\L=11\relax
\catcode`\P=11\relax
%
%
% ****************************************
% * Lines per page & Characters per line *
% ****************************************
%
%  Changes in v3.0:
%    * \linesparpage: the number of interline skip is fewer
%      than the number of lines
%    * \linesparpage: subtract \topskip from \textheight
%    * \kcharparline: add \relax at the end of definition
%
\def\linesparpage#1{%
  \@tempcnta=#1\relax
  \advance\@tempcnta by \m@ne
  \baselineskip=\textheight
  \advance\baselineskip by -\topskip
  \divide\baselineskip by \@tempcnta\relax}
\def\kcharparline#1{%
  \xkanjiskip 0mm plus 0.2mm minus 0.2mm
  \settowidth{\textwidth}{\char\jis"2422}%
  \multiply\textwidth by #1\relax}
%
\endinput
