%%
%% jpneduenumerate.sty
%% for making handouts of Japanese high school mathematics
%%
%% Copyright (C) 2022 Yukoh KUSAKABE (screen-name)
%%   https://www.metaphysica.info/
%%   https://twitter.com/metaphysicainfo
%%
%% This package released under
%% [the MIT license](https://ctan.org/license/mit).
%%
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{jpneduenumerate}[2022/07/15 v1.2]
%
%% [lua]
\newif\if@jpnedu@enumerate@lua
\@jpnedu@enumerate@luafalse
\DeclareOption{lua}{\@jpnedu@enumerate@luatrue}%
%
%% [casebracket]
\newif\if@jpnedu@enumerate@casebracket
\@jpnedu@enumerate@casebracketfalse
\DeclareOption{casebracket}{\@jpnedu@enumerate@casebrackettrue}%
%
%% [stepbracket]
\newif\if@jpnedu@enumerate@stepbracket
\@jpnedu@enumerate@stepbracketfalse
\DeclareOption{stepbracket}{\@jpnedu@enumerate@stepbrackettrue}%
%
\ExecuteOptions{}
\ProcessOptions\relax
%
%% replace defaluts
% for \setlist
\RequirePackage{enumitem}
%
% for \getrefnumber
\RequirePackage{refcount}
%
%%%%%%%%%%%%%%%%%%%%%%%%
% with [lua] %%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%
\if@jpnedu@enumerate@lua
%%%%%%%%%%%%%%%%%%%%%%%%
%
% for \ajroman \ajRoman
\RequirePackage{luatexja-otf}
%
% If you do not use pLaTeX, LaTeX cannot use '\zw'.
% In that case, please write \usepackage{bxjacalcux}.
\setlist{nosep,leftmargin=2\zw,itemindent=1\zw,labelsep=1.15\zw,listparindent=1\zw}
\setlist[itemize,1]{label=\textbf{\textperiodcentered}}
\renewcommand{\labelenumi}{(\arabic{enumi})}
\renewcommand{\labelenumii}{(\alph{enumii})}
%%
%
% Asterisked envionments don't have parindent.
%
%% \begin{itemize*}
\newenvironment{itemize*}%
{\begin{itemize}[nosep,leftmargin=3\zw,itemindent=0\zw,labelsep=1.15\zw]}%
{\end{itemize}}
%
%% \begin{enumerate*}
\newenvironment{enumerate*}%
{\begin{enumerate}[nosep,leftmargin=3\zw,itemindent=0\zw,labelsep=1.15\zw]}%
{\end{enumerate}}
%
%% \begin{romanenumerate} 
%% \begin{romanenumerate*}
\newenvironment{romanenumerate}%
{\begin{enumerate}[nosep,leftmargin=2\zw,itemindent=1\zw,labelsep=1.15\zw,listparindent=1\zw]%
\renewcommand{\labelenumi}{(\ajLabel\ajroman{enumi})}%
\renewcommand{\labelenumii}{(\alph{enumii})}%
}%
{\end{enumerate}}
\newenvironment{romanenumerate*}%
{\begin{enumerate}[nosep,leftmargin=3\zw,itemindent=0\zw,labelsep=1.15\zw]%
\renewcommand{\labelenumi}{(\ajLabel\ajroman{enumi})}%
\renewcommand{\labelenumii}{(\alph{enumii})}%
}%
{\end{enumerate}}
%
%% \begin{Romanenumerate}
%% \begin{Romanenumerate*}
\newenvironment{Romanenumerate}%
{\begin{enumerate}[nosep,leftmargin=2\zw,itemindent=1\zw,labelsep=1.15\zw,listparindent=1\zw]%
\renewcommand{\labelenumi}{(\ajLabel\ajRoman{enumi})}%
\renewcommand{\labelenumii}{(\alph{enumii})}%
}%
{\end{enumerate}}
\newenvironment{Romanenumerate*}%
{\begin{enumerate}[nosep,leftmargin=3\zw,itemindent=0\zw,labelsep=1.15\zw]%
\renewcommand{\labelenumi}{(\ajLabel\ajRoman{enumi})}%
\renewcommand{\labelenumii}{(\alph{enumii})}%
}%
{\end{enumerate}}
%
%% \begin{bracketenumerate} 
%% \begin{bracketenumerate*}
\newenvironment{bracketenumerate}%
{\begin{enumerate}[nosep,leftmargin=2\zw,itemindent=1\zw,labelsep=1.15\zw,listparindent=1\zw]%
\renewcommand{\labelenumi}{[\arabic{enumi}]}%
\renewcommand{\labelenumii}{[\alph{enumii}]}%
}%
{\end{enumerate}}
\newenvironment{bracketenumerate*}%
{\begin{enumerate}[nosep,leftmargin=3\zw,itemindent=0\zw,labelsep=1.15\zw]%
\renewcommand{\labelenumi}{[\arabic{enumi}]}%
\renewcommand{\labelenumii}{[\alph{enumii}]}%
}%
{\end{enumerate}}
%
%% \@jpneduenumerate@z@w@space
\chardef\@jpneduenumerate@z@w@space=\jis"2121\relax
%
%% \@jpneduenumerate@makenumber
% Non-stared macros are heading ones.
% Stared macros are non-heading ones.
\newcommand{\@jpneduenumerate@makenumber}[2]{%
\expandafter\newcommand\csname #1\endcsname%
{\@ifstar{\csname @jpneduenumerate#1@star\endcsname}{\csname @jpneduenumerate#1@nostar\endcsname}}%
\expandafter\newcommand\csname @jpneduenumerate#1@star\endcsname[1]%
{#2}%
\expandafter\newcommand\csname @jpneduenumerate#1@nostar\endcsname[1]%
{\noindent#2\hspace{0.5\zw}}}
%
%%%%%%%%%%%%%%%%%%%%%%%%
% without [lua] %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%
\else
%%%%%%%%%%%%%%%%%%%%%%%%
%
% for \ajroman \ajRoman
\RequirePackage{otf}
%
% If you do not use pLaTeX, LaTeX cannot use 'zw'.
% In that case, please write \usepackage{bxjacalcux}.
\setlist{nosep,leftmargin=2zw,itemindent=1zw,labelsep=1.15zw,listparindent=1zw}
\setlist[itemize,1]{label=\textbf{\textperiodcentered}}
\renewcommand{\labelenumi}{(\arabic{enumi})}
\renewcommand{\labelenumii}{(\alph{enumii})}
%%
%
% Asterisked envionments don't have parindent.
%
%% \begin{itemize*}
\newenvironment{itemize*}%
{\begin{itemize}[nosep,leftmargin=3zw,itemindent=0zw,labelsep=1.15zw]}%
{\end{itemize}}
%
%% \begin{enumerate*}
\newenvironment{enumerate*}%
{\begin{enumerate}[nosep,leftmargin=3zw,itemindent=0zw,labelsep=1.15zw]}%
{\end{enumerate}}
%
%% \begin{romanenumerate} 
%% \begin{romanenumerate*}
\newenvironment{romanenumerate}%
{\begin{enumerate}[nosep,leftmargin=2zw,itemindent=1zw,labelsep=1.15zw,listparindent=1zw]%
\renewcommand{\labelenumi}{(\ajLabel\ajroman{enumi})}%
\renewcommand{\labelenumii}{(\alph{enumii})}%
}%
{\end{enumerate}}
\newenvironment{romanenumerate*}%
{\begin{enumerate}[nosep,leftmargin=3zw,itemindent=0zw,labelsep=1.15zw]%
\renewcommand{\labelenumi}{(\ajLabel\ajroman{enumi})}%
\renewcommand{\labelenumii}{(\alph{enumii})}%
}%
{\end{enumerate}}
%
%% \begin{Romanenumerate}
%% \begin{Romanenumerate*}
\newenvironment{Romanenumerate}%
{\begin{enumerate}[nosep,leftmargin=2zw,itemindent=1zw,labelsep=1.15zw,listparindent=1zw]%
\renewcommand{\labelenumi}{(\ajLabel\ajRoman{enumi})}%
\renewcommand{\labelenumii}{(\alph{enumii})}%
}%
{\end{enumerate}}
\newenvironment{Romanenumerate*}%
{\begin{enumerate}[nosep,leftmargin=3zw,itemindent=0zw,labelsep=1.15zw]%
\renewcommand{\labelenumi}{(\ajLabel\ajRoman{enumi})}%
\renewcommand{\labelenumii}{(\alph{enumii})}%
}%
{\end{enumerate}}
%
%% \begin{bracketenumerate} 
%% \begin{bracketenumerate*}
\newenvironment{bracketenumerate}%
{\begin{enumerate}[nosep,leftmargin=2zw,itemindent=1zw,labelsep=1.15zw,listparindent=1zw]%
\renewcommand{\labelenumi}{[\arabic{enumi}]}%
\renewcommand{\labelenumii}{[\alph{enumii}]}%
}%
{\end{enumerate}}
\newenvironment{bracketenumerate*}%
{\begin{enumerate}[nosep,leftmargin=3zw,itemindent=0zw,labelsep=1.15zw]%
\renewcommand{\labelenumi}{[\arabic{enumi}]}%
\renewcommand{\labelenumii}{[\alph{enumii}]}%
}%
{\end{enumerate}}
%
%% \@jpneduenumerate@makenumber
% Non-stared macros are heading ones.
% Stared macros are non-heading ones.
\newcommand{\@jpneduenumerate@makenumber}[2]{%
\expandafter\newcommand\csname #1\endcsname%
{\@ifstar{\csname @jpneduenumerate#1@star\endcsname}{\csname @jpneduenumerate#1@nostar\endcsname}}%
\expandafter\newcommand\csname @jpneduenumerate#1@star\endcsname[1]%
{#2}%
\expandafter\newcommand\csname @jpneduenumerate#1@nostar\endcsname[1]%
{\noindent#2\hspace{0.5zw}}}
%
%%%%%%%%%%%%%%%%%%%%%%%%
% common %%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%
\fi
%%%%%%%%%%%%%%%%%%%%%%%%
%
%% \begin{caseenumerate}
%% \begin{caseenumerate*}
%% \begin{stepenumerate}
%% \begin{stepenumerate*}
\if@jpnedu@enumerate@casebracket
\newenvironment{caseenumerate}%
{\begin{bracketenumerate}}%
{\end{bracketenumerate}}
\newenvironment{caseenumerate*}%
{\begin{bracketenumerate*}}%
{\end{bracketenumerate*}}
\else
\newenvironment{caseenumerate}%
{\begin{romanenumerate}}%
{\end{romanenumerate}}
\newenvironment{caseenumerate*}%
{\begin{romanenumerate*}}%
{\end{romanenumerate*}}
\fi
\if@jpnedu@enumerate@stepbracket
\newenvironment{stepenumerate}%
{\begin{bracketenumerate}}%
{\end{bracketenumerate}}
\newenvironment{stepenumerate*}%
{\begin{bracketenumerate*}}%
{\end{bracketenumerate*}}
\else
\newenvironment{stepenumerate}%
{\begin{Romanenumerate}}%
{\end{Romanenumerate}}
\newenvironment{stepenumerate*}%
{\begin{Romanenumerate*}}%
{\end{Romanenumerate*}}
\fi
%
%% \@jpneduenumerate@z@w@space
\chardef\@jpneduenumerate@z@w@space=\jis"2121\relax
%
%% Refs
% \ref{<\labelenumii of romanenumerate and Romanenumerate>} doesn't work.
\@jpneduenumerate@makenumber{parenref}{(\ref{#1})}
\@jpneduenumerate@makenumber{romanref}{\ajroman{\getrefnumber{#1}}}
\@jpneduenumerate@makenumber{parenromanref}{(\ajroman{\getrefnumber{#1}})}
\@jpneduenumerate@makenumber{Romanref}{\ajRoman{\getrefnumber{#1}}}
\@jpneduenumerate@makenumber{parenRomanref}{(\ajRoman{\getrefnumber{#1}})}
\@jpneduenumerate@makenumber{bracketref}{[\ref{#1}]}
%
%%* ENUMERATE GENERATOR
%% \@jpneduenumeratetext@makenumber
\newcommand{\@jpneduenumeratetext@makenumber}[2]{%
% make the counter
\newcounter{jpneduenumeratetext#1counter}%
\setcounter{jpneduenumeratetext#1counter}{0}%
%* print only counter number
\@jpneduenumerate@makenumber{#1number}{#2}%
% step
\expandafter\newcommand\csname #1numberauto\endcsname%
{\refstepcounter{jpneduenumeratetext#1counter}\csname thejpneduenumeratetext#1counter\endcsname}%
% keep
\expandafter\newcommand\csname #1numberkeep\endcsname%
{\csname thejpneduenumeratetext#1counter\endcsname}%
% reset
\expandafter\newcommand\csname #1numberreset\endcsname%
{\setcounter{jpneduenumeratetext#1counter}{0}}%
%*
%* print counter
% Non-asterisked macros are heading.
% Asterisked macros are not heading.
% step
\expandafter\newcommand\csname #1auto\endcsname%
{\@ifstar{\csname @ghostheadingdefault#1auto@star\endcsname}{\csname @ghostheadingdefault#1auto@nostar\endcsname}}%
\expandafter\newcommand\csname @ghostheadingdefault#1auto@star\endcsname%
{\csname @jpneduenumerate#1number@star\endcsname{\csname #1numberauto\endcsname}}%
\expandafter\newcommand\csname @ghostheadingdefault#1auto@nostar\endcsname%
{\csname @jpneduenumerate#1number@nostar\endcsname{\csname #1numberauto\endcsname}}%
% keep
\expandafter\newcommand\csname #1keep\endcsname%
{\@ifstar{\csname @ghostheadingdefault#1keep@star\endcsname}{\csname @ghostheadingdefault#1keep@nostar\endcsname}}%
\expandafter\newcommand\csname @ghostheadingdefault#1keep@star\endcsname%
{\csname @jpneduenumerate#1number@star\endcsname{\csname #1numberkeep\endcsname}}%
\expandafter\newcommand\csname @ghostheadingdefault#1keep@nostar\endcsname%
{\csname #1number\endcsname{\csname #1numberkeep\endcsname}}%
% reset (same as numberreset)
\expandafter\newcommand\csname #1reset\endcsname%
{\setcounter{jpneduenumeratetext#1counter}{0}}%
%*
}
%%
%%*
%
%%%%%%%%%%%%%%%%%%%%%%%%
% with [lua] %%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%
\if@jpnedu@enumerate@lua
%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Numbers
\@jpneduenumeratetext@makenumber{square}{\mbox{\setlength{\fboxsep}{3pt}\@jpneduenumerate@z@w@space\kern-1\zw\framebox[1.5em]{\vphantom{\raisebox{2pt}{1}\raisebox{-2pt}{1}}#1}\kern-1\zw\@jpneduenumerate@z@w@space}}
\@jpneduenumeratetext@makenumber{question}{\mbox{\setlength{\fboxsep}{3pt}\@jpneduenumerate@z@w@space\kern-1\zw\framebox[1.5em]{\vphantom{\raisebox{2pt}{1}\raisebox{-2pt}{1}}#1}\kern-1\zw\@jpneduenumerate@z@w@space}}
% NG: \mbox{(#1)}
%%
%
%% Refs
\@jpneduenumerate@makenumber{squareref}{{\setlength{\fboxsep}{3pt}\@jpneduenumerate@z@w@space\kern-1\zw\framebox[1.5em]{\vphantom{\raisebox{2pt}{1}\raisebox{-2pt}{1}}\ref{#1}}\kern-1\zw\@jpneduenumerate@z@w@space}}
\@jpneduenumerate@makenumber{questionref}{{\setlength{\fboxsep}{3pt}\@jpneduenumerate@z@w@space\kern-1\zw\framebox[1.5em]{\vphantom{\raisebox{2pt}{1}\raisebox{-2pt}{1}}\ref{#1}}\kern-1\zw\@jpneduenumerate@z@w@space}}
% \@jpneduenumerate@makenumber{questionref}{\mbox{\@jpneduenumerate@z@w@space\kern-1\zw\framebox[1.3em]{\ref{#1}}\kern-1\zw\@jpneduenumerate@z@w@space}}
%
%%%%%%%%%%%%%%%%%%%%%%%%
% without [lua] %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%
\else
%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Numbers
\@jpneduenumeratetext@makenumber{square}{\mbox{\setlength{\fboxsep}{3pt}\@jpneduenumerate@z@w@space\kern-1zw\framebox[1.5em]{\vphantom{\raisebox{2pt}{1}\raisebox{-2pt}{1}}#1}\kern-1zw\@jpneduenumerate@z@w@space}}
\@jpneduenumeratetext@makenumber{question}{\mbox{\setlength{\fboxsep}{3pt}\@jpneduenumerate@z@w@space\kern-1zw\framebox[1.5em]{\vphantom{\raisebox{2pt}{1}\raisebox{-2pt}{1}}#1}\kern-1zw\@jpneduenumerate@z@w@space}}
% NG: \mbox{(#1)}
%%
%
%% Refs
\@jpneduenumerate@makenumber{squareref}{{\setlength{\fboxsep}{3pt}\@jpneduenumerate@z@w@space\kern-1zw\framebox[1.5em]{\vphantom{\raisebox{2pt}{1}\raisebox{-2pt}{1}}\ref{#1}}\kern-1zw\@jpneduenumerate@z@w@space}}
\@jpneduenumerate@makenumber{questionref}{{\setlength{\fboxsep}{3pt}\@jpneduenumerate@z@w@space\kern-1zw\framebox[1.5em]{\vphantom{\raisebox{2pt}{1}\raisebox{-2pt}{1}}\ref{#1}}\kern-1zw\@jpneduenumerate@z@w@space}}
% \@jpneduenumerate@makenumber{questionref}{\mbox{\@jpneduenumerate@z@w@space\kern-1zw\framebox[1.3em]{\ref{#1}}\kern-1zw\@jpneduenumerate@z@w@space}}
%
%%%%%%%%%%%%%%%%%%%%%%%%
% common %%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%
\fi
%%%%%%%%%%%%%%%%%%%%%%%%
%
\@jpneduenumeratetext@makenumber{subquestion}{\:(#1)}
\@jpneduenumeratetext@makenumber{enumerate}{\:(#1)}
\@jpneduenumerate@makenumber{subquestionref}{\:\mbox{(\ref{#1})}}
\@jpneduenumerate@makenumber{enumerateref}{\:\mbox{(\ref{#1})}}
%
\if@jpnedu@enumerate@casebracket
\@jpneduenumeratetext@makenumber{case}{\:[#1]}
\@jpneduenumerate@makenumber{caseref}{\:\mbox{[\ref{#1}]}}
\else
\@jpneduenumeratetext@makenumber{case}{\mbox{(\ajroman{#1})}}
\@jpneduenumerate@makenumber{caseref}{\refused{#1}\mbox{(\ajroman{\getrefnumber{#1}})}}
%
%%* AVOID ERROR of COUNTER
%% case
\renewcommand{\caseauto}{\@ifstar{\@jpneduenumeratetext@avoid@caseauto@star}{\@jpneduenumeratetext@avoid@caseauto@nostar}}
\newcommand{\@jpneduenumeratetext@avoid@caseauto@star}{%
\refstepcounter{jpneduenumeratetextcasecounter}%
\@jpneduenumeratecasenumber@star{\value{jpneduenumeratetextcasecounter}}%
}
\newcommand{\@jpneduenumeratetext@avoid@caseauto@nostar}{%
\refstepcounter{jpneduenumeratetextcasecounter}%
\casenumber{\value{jpneduenumeratetextcasecounter}}%
}
\renewcommand{\casekeep}{\@ifstar{\@jpneduenumeratetext@avoid@casekeep@star}{\@jpneduenumeratetext@avoid@casekeep@nostar}}
\newcommand{\@jpneduenumeratetext@avoid@casekeep@star}{%
\@jpneduenumeratecasenumber@star{\value{jpneduenumeratetextcasecounter}}%
}
\newcommand{\@jpneduenumeratetext@avoid@casekeep@nostar}{%
\casenumber{\value{jpneduenumeratetextcasecounter}}%
}
%
\fi
\if@jpnedu@enumerate@stepbracket
\@jpneduenumeratetext@makenumber{step}{\:[#1]}
\@jpneduenumerate@makenumber{stepref}{\:\mbox{[\ref{#1}]}}
\else
\@jpneduenumeratetext@makenumber{step}{\mbox{(\ajRoman{#1})}}
\@jpneduenumerate@makenumber{stepref}{\refused{#1}\mbox{(\ajRoman{\getrefnumber{#1}})}}
%
%%* AVOID ERROR of COUNTER
%% step
\renewcommand{\stepauto}{\@ifstar{\@jpneduenumeratetext@avoid@stepauto@star}{\@jpneduenumeratetext@avoid@stepauto@nostar}}
\newcommand{\@jpneduenumeratetext@avoid@stepauto@star}{%
\refstepcounter{jpneduenumeratetextstepcounter}%
\@jpneduenumeratestepnumber@star{\value{jpneduenumeratetextstepcounter}}%
}
\newcommand{\@jpneduenumeratetext@avoid@stepauto@nostar}{%
\refstepcounter{jpneduenumeratetextstepcounter}%
\stepnumber{\value{jpneduenumeratetextstepcounter}}%
}
\renewcommand{\stepkeep}{\@ifstar{\@jpneduenumeratetext@avoid@stepkeep@star}{\@jpneduenumeratetext@avoid@stepkeep@nostar}}
\newcommand{\@jpneduenumeratetext@avoid@stepkeep@star}{%
\@jpneduenumeratestepnumber@star{\value{jpneduenumeratetextstepcounter}}%
}
\newcommand{\@jpneduenumeratetext@avoid@stepkeep@nostar}{%
\stepnumber{\value{jpneduenumeratetextstepcounter}}%
}
\fi
%
%%*
%
%% \equationreset
\DeclareRobustCommand{\equationreset}{\setcounter{equation}{0}}
%
%% \question
\providecommand{\question}{\@ifstar{\@jpneduenum@question@star}{\@jpneduenum@question@nostar}}
\DeclareRobustCommand{\@jpneduenum@question@star}{\questionauto*}
\DeclareRobustCommand{\@jpneduenum@question@nostar}{%
\setcounter{equation}{0}%
\setcounter{jpneduenumeratetextsubquestioncounter}{0}%
\setcounter{jpneduenumeratetextenumeratecounter}{0}%
\setcounter{jpneduenumeratetextcasecounter}{0}%
\setcounter{jpneduenumeratetextstepcounter}{0}%
\questionauto}
%
%% \subquestion
\providecommand{\subquestion}{\@ifstar{\@jpneduenum@subquestion@star}{\@jpneduenum@subquestion@nostar}}
\DeclareRobustCommand{\@jpneduenum@subquestion@star}{\subquestionauto*}
\DeclareRobustCommand{\@jpneduenum@subquestion@nostar}{%
\setcounter{jpneduenumeratetextcasecounter}{0}%
\setcounter{jpneduenumeratetextstepcounter}{0}%
\subquestionauto}
%
%% \case
\providecommand{\case}{\@ifstar{\@jpneduenum@case@star}{\@jpneduenum@case@nostar}}
\DeclareRobustCommand{\@jpneduenum@case@star}{\caseauto*}
\DeclareRobustCommand{\@jpneduenum@case@nostar}{\caseauto}
%
%% \step
\providecommand{\step}{\@ifstar{\@jpneduenum@step@star}{\@jpneduenum@step@nostar}}
\DeclareRobustCommand{\@jpneduenum@step@star}{\stepauto*}
\DeclareRobustCommand{\@jpneduenum@step@nostar}{\stepauto}
%
%% EOF