%%
%% This is file `scsnowman.sty', part of scsnowman package.
%% Maintained on GitHub:
%% https://github.com/aminophen/scsnowman
%%
%% Copyright (c) 2015-2023 Hironobu Yamashita
%%   Email   :  h.y.acetaminophen[a t]gmail.com
%%   GitHub  :  https://github.com/aminophen
%%   Blog    :  http://acetaminophen.hatenablog.com/
%%   Twitter :  @aminophen
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{scsnowman}[2023/02/23 v1.3c Snowman variants using TikZ]
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{sctkzsym-base}}
\ProcessOptions\relax
\RequirePackage{sctkzsym-base}[2017/08/08]
%
% make document snowman (joke)
\ifsctkzsym@document
\def\makedocumentsnowman{%
  \ifx\documentclass\@notprerr
    % Already after \begin{document}, throw an error
    \def\sctkzsym@documentsnowman{%
      \PackageError{scsnowman}{%
        Use of \noexpand\makedocumentsnowman too late!\MessageBreak
        Try using before \string\begin{document}}{%
        I'll try to stop processing, but
        this attempt can fail.\MessageBreak\@ehc}%
      % If the above error is ignored, there's no way to
      % exit successfully in all cases. So, try to continue
      % processing by ignoring all LaTeX errors.
      % TeX errors still remain; therefore, \makedocumentsnowman
      % in internal vertical mode or math mode will fail.
      \let\@latex@error\@gobbletwo\par
      \scsnowman[init,scale=14,hat,muffler,buttons,snow]%
      \scsnowman[init,scale=14,hat,muffler,buttons,arms]%
      \scsnowman[init,scale=14,body,hat,muffler,buttons,snow]%
      \end{document}}%
  \else\ifx\documentclass\@twoclasseserror
    \ifx\AtBeginDocument\@firstofone
      % In preamble, inside \AtBeginDocument; avoid infinite loop
      \def\sctkzsym@documentsnowman{%
        \centering
        \scsnowman[init,scale=14,hat,muffler,buttons,snow]%
        \scsnowman[init,scale=14,hat,muffler,buttons,arms]%
        \scsnowman[init,scale=14,body,hat,muffler,buttons,snow]%
        \end{document}}%
    \else
      % In preamble; start document
      \def\sctkzsym@documentsnowman{%
        \pagestyle{empty}%
        \begin{document}%
        \centering
        \scsnowman[init,scale=14,hat,muffler,buttons,snow]%
        \scsnowman[init,scale=14,hat,muffler,buttons,arms]%
        \scsnowman[init,scale=14,body,hat,muffler,buttons,snow]%
        \end{document}}%
    \fi
  \else
    % Before \documentclass{...}; load class and start document
    \def\sctkzsym@documentsnowman{%
      \documentclass{minimal}%
      \begin{document}%
      \centering
      \scsnowman[init,scale=18,hat,muffler,buttons,snow]%
      \scsnowman[init,scale=18,hat,muffler,buttons,arms]%
      \scsnowman[init,scale=18,body,hat,muffler,buttons,snow]%
      \end{document}}%
  \fi\fi
  \sctkzsym@documentsnowman
}
\fi
%
% change QED symbol (joke)
\ifsctkzsym@qed
  \def\sctkzsym@snowman@qedsymbol{\scsnowman[init,hat=true,muffler=red]}
  \newcommand{\makeqedsnowman}{%
    \ifx\qedsymbol\sctkzsym@snowman@qedsymbol\else
      \let\sctkzsym@saved@qedsymbol\qedsymbol
      \let\qedsymbol\sctkzsym@snowman@qedsymbol
    \fi
  }
\fi
%
% change item label (joke)
\ifsctkzsym@item
  \def\sctkzsym@snowman@labelitemi{\scsnowman[init,hat=true,muffler=red]}
  \def\sctkzsym@snowman@labelitemii{\scsnowman[init,hat=true,muffler=blue]}
  \def\sctkzsym@snowman@labelitemiii{\scsnowman[init,hat=true,muffler=green]}
  \def\sctkzsym@snowman@labelitemiv{\scsnowman[init,hat=true,muffler=yellow]}
  \newcommand{\makeitemsnowman}{%
    \ifx\labelitemi\sctkzsym@snowman@labelitemi\else
      \let\sctkzsym@saved@labelitemi\labelitemi
      \let\sctkzsym@saved@labelitemii\labelitemii
      \let\sctkzsym@saved@labelitemiii\labelitemiii
      \let\sctkzsym@saved@labelitemiv\labelitemiv
      \let\labelitemi\sctkzsym@snowman@labelitemi
      \let\labelitemii\sctkzsym@snowman@labelitemii
      \let\labelitemiii\sctkzsym@snowman@labelitemiii
      \let\labelitemiv\sctkzsym@snowman@labelitemiv
    \fi
  }
\fi
%
%------------------------------- ZR something BEGIN

% change enumerate label using \scsnowmannumeral (joke)
% (this feature is `scsnowman'-specific, so the name-space
%  is intentionally set to \scsnowman@...)

% unique token
\def\scsnowman@end{\scsnowman@end@}

\let\scsnowman@eight\relax

%% \scsnowman@scan@option\CScontinue{<prologue>}
\def\scsnowman@scan@option#1#2{%
  \scsnowman@scan@option@a#2[]\scsnowman@end#1%
}
\def\scsnowman@scan@option@a#1[#2]#3\scsnowman@end#4{%
  #4{#2}%
}

\def\enumsnowman#1#{%
  \scsnowman@scan@option\scsnowman@enumsnowman{#1}%
}
\def\scsnowman@enumsnowman#1#2{%
  \scsnowmanNumeral{#1}{\@nameuse{c@#2}}%
}

% For use with \pagenumbering.
\def\@enumsnowman{%
  \scsnowmanNumeral{}%
}

\def\scsnowmannumeral#1#{%
  \scsnowman@scan@option\scsnowmanNumeral{#1}%
}

% \scsnowmanNumeral{<option>}{<number>}
% change 8 to snowman in counters (joke)
% (this feature is `scsnowman'-specific, so the name-space
%  is intentionally set to \scsnowman@...)

% internal entry point
\newcommand*\scsnowmanNumeral[2]{%
  \expandafter\scsnowman@@numeral\number#2\relax\scsnowman@end{#1}%
}
\def\scsnowman@@numeral#1\relax#2\scsnowman@end#3{%
  \scsnowman@numeral{#3}{#1}%
}
\DeclareRobustCommand*\scsnowman@numeral[2]{%
  \begingroup
    \def\scsnowman@eight{\scsnowman[#1]}%
    \scsnowman@numeral@a#28\scsnowman@end
  \endgroup
}
\def\scsnowman@numeral@a#18#2\scsnowman@end{%
  \ifx\scsnowman@end#2\scsnowman@end
    #1%
  \else
    #1\scsnowman@eight
    \scsnowman@numeral@a#2\scsnowman@end
  \fi
}

\providecommand*\pdfstringdefPreHook{}
\g@addto@macro\pdfstringdefPreHook{%
  \let\scsnowman@eight\scsnowman@hy@eight
  \let\scsnowman@numeral\scsnowman@hy@numeral
}
\def\scsnowman@hy@numeral#1#2{% #1 is ignored
  \scsnowman@numeral@a#28\scsnowman@end
}

\DeclareTextCommand{\scsnowman@hy@eight}{PU}{\9046\003}% U+2603
\DeclareTextCommand{\scsnowman@hy@eight}{PD1}{8}%fallback

% upTeX since v0.10 has both \kchardef and \ucs.
% N.B. TL2023 uses e-upTeX (euc/sjis) as a default engine of pLaTeX.
% N.B. luatexja has \ucs, but neither \kchardef nor \kansujichar.
\ifx\kchardef\@undefined \else
  \ifnum\jis"2121="3000 %upTeX
  \begingroup
    \kansujichar8="2603
    \xdef\scsnowman@hy@eight{\kansuji8}
  \endgroup
  \fi
\fi

%------------------------------- ZR something END
%
% key initialization
\newcommand\sctkzsym@snowman@initkeys{%
  \def\sctkzsym@snowman@init{false}%
  \def\sctkzsym@snowman@scale{1}%
  \def\sctkzsym@snowman@shape{normal}%
  \def\sctkzsym@snowman@body{false}%
  \def\sctkzsym@snowman@eyes{true}%  default on
  \def\sctkzsym@snowman@nose{false}%
  \def\sctkzsym@snowman@mouthshape{smile}%
  \def\sctkzsym@snowman@mouth{true}% default on
  \def\sctkzsym@snowman@sweat{false}%
  \def\sctkzsym@snowman@hat{false}%
  \def\sctkzsym@snowman@arms{false}%
  \def\sctkzsym@snowman@muffler{false}%
  \def\sctkzsym@snowman@buttons{false}%
  \def\sctkzsym@snowman@snow{false}%
  \def\sctkzsym@snowman@note{false}%
  \def\sctkzsym@snowman@adjustbaseline{false}%
  \def\sctkzsym@snowman@mikan{false}%
  \def\sctkzsym@snowman@leaf{false}%
  \def\sctkzsym@snowman@broom{false}%
}
\newcommand{\sctkzsym@snowman@defaultkeys}{%
  \sctkzsym@snowman@initkeys
}
\sctkzsym@snowman@defaultkeys
%
% key definitions
\sctkzsym@define@key@withbool{snowman}{init}
\sctkzsym@define@key@wodefault{snowman}{scale}
\sctkzsym@define@key@wodefault{snowman}{shape}
\sctkzsym@define@key@withbool{snowman}{body}
\sctkzsym@define@key@withbool{snowman}{eyes}
\sctkzsym@define@key@withbool{snowman}{nose}
\sctkzsym@define@key@withword{snowman}{mouthshape}{smile,frown,tight}
\sctkzsym@define@key@withbool{snowman}{mouth}
\sctkzsym@define@key@withbool{snowman}{sweat}
\sctkzsym@define@key@withbool{snowman}{hat}
\sctkzsym@define@key@withbool{snowman}{arms}
\sctkzsym@define@key@withbool{snowman}{muffler}
\sctkzsym@define@key@withbool{snowman}{buttons}
\sctkzsym@define@key@withbool{snowman}{snow}
\sctkzsym@define@key@withbool{snowman}{note}
\sctkzsym@define@key@withbool{snowman}{adjustbaseline}
\sctkzsym@define@key@withbool{snowman}{mikan}
\sctkzsym@define@key@withbool{snowman}{leaf}
\sctkzsym@define@key@withbool{snowman}{broom}
%
% definition of \scsnowman[...]
\DeclareRobustCommand\scsnowman[1][]{%
  % key initialization using default
  \sctkzsym@snowman@defaultkeys
  % read <key>=<value>
  \setkeys{sctkzsym@snowman}{#1}%
  % check init; if init=true, initialize and read keys again
  \sctkzsym@hndl@key@onlybool{snowman}{init}%
  \ifsctkzsym@snowman@init
    \sctkzsym@snowman@initkeys
    \setkeys{sctkzsym@snowman}{#1,init=false}%
  \fi
  %
  % check body; determine whether "black snowman" or "white snowman"
  \sctkzsym@hndl@key@withbool{snowman}{body}%
  \ifsctkzsym@snowman@body
    % "black snowman"; black snow; white eyes/mouth/stroke
    \def\sctkzsym@snowman@bodystroke{\sctkzsym@snowman@body}%
    \def\sctkzsym@snowman@bodyfill{\sctkzsym@snowman@body}%
    \def\sctkzsym@snowman@bodypath{\path[draw=\sctkzsym@snowman@bodystroke,fill=\sctkzsym@snowman@bodyfill]}%
    \def\sctkzsym@snowman@snowstroke{\sctkzsym@snowman@snow}%
    \def\sctkzsym@snowman@snowfill{\sctkzsym@snowman@snow}%
    \def\sctkzsym@snowman@snowpath{\path[draw=\sctkzsym@snowman@snowstroke,fill=\sctkzsym@snowman@snowfill]}%
    \def\sctkzsym@snowman@eyefill{\sctkzsym@defaultanticolor}%
    \def\sctkzsym@snowman@nosestroke{\sctkzsym@defaultanticolor}%
    \def\sctkzsym@snowman@nosefill{\sctkzsym@snowman@nose}%
    \def\sctkzsym@snowman@mouthstroke{\sctkzsym@defaultanticolor}%
    \def\sctkzsym@snowman@sweatstroke{\sctkzsym@defaultanticolor}%
    \def\sctkzsym@snowman@sweatfill{\sctkzsym@snowman@sweat}%
    \def\sctkzsym@snowman@mufflerstroke{\sctkzsym@defaultanticolor}%
    \def\sctkzsym@snowman@mufflerfill{\sctkzsym@snowman@muffler}%
    \def\sctkzsym@snowman@buttonstroke{\sctkzsym@defaultanticolor}%
    \def\sctkzsym@snowman@buttonfill{\sctkzsym@snowman@buttons}%
  \else
    % "white snowman"; white snow; black eyes/mouth/stroke; bodystroke should be there
    \def\sctkzsym@snowman@bodystroke{\sctkzsym@defaultcolor}%
    \def\sctkzsym@snowman@bodyfill{}%
    \def\sctkzsym@snowman@bodypath{\path[draw=\sctkzsym@snowman@bodystroke]}%
    \def\sctkzsym@snowman@snowstroke{\sctkzsym@snowman@snow}%
    \def\sctkzsym@snowman@snowfill{}%
    \def\sctkzsym@snowman@snowpath{\path[draw=\sctkzsym@snowman@snowstroke]}%
    \def\sctkzsym@snowman@eyefill{\sctkzsym@defaultcolor}%
    \def\sctkzsym@snowman@nosestroke{\sctkzsym@snowman@nose}%
    \def\sctkzsym@snowman@nosefill{\sctkzsym@snowman@nose}%
    \def\sctkzsym@snowman@mouthstroke{\sctkzsym@defaultcolor}%
    \def\sctkzsym@snowman@sweatstroke{\sctkzsym@snowman@sweat}%
    \def\sctkzsym@snowman@sweatfill{\sctkzsym@defaultanticolor}%
    \def\sctkzsym@snowman@mufflerstroke{\sctkzsym@snowman@muffler}%
    \def\sctkzsym@snowman@mufflerfill{\sctkzsym@snowman@muffler}%
    \def\sctkzsym@snowman@buttonstroke{\sctkzsym@snowman@buttons}%
    \def\sctkzsym@snowman@buttonfill{\sctkzsym@snowman@buttons}%
  \fi
  % check eyes (only fill)
  % [TODO] eyes=<color> unsupported; falling back to default-(anti)color)
  \sctkzsym@hndl@key@withbool{snowman}{eyes}%
  \def\sctkzsym@snowman@eyepath
    {\path[fill=\sctkzsym@snowman@eyefill]}%
  % check nose
  \sctkzsym@hndl@key@withbool{snowman}{nose}%
  \def\sctkzsym@snowman@nosepath
    {\path[draw=\sctkzsym@snowman@nosestroke,fill=\sctkzsym@snowman@nosefill]}%
  % check mouth (only stroke)
  % [TODO] mouth=<color> unsupported; falling back to default-(anti)color)
  \sctkzsym@hndl@key@withword{snowman}{mouthshape}%
  \sctkzsym@hndl@key@withbool{snowman}{mouth}%
  \def\sctkzsym@snowman@mouthpath
    {\path[draw=\sctkzsym@snowman@mouthstroke]}%
  % check sweat
  \sctkzsym@hndl@key@withbool{snowman}{sweat}%
  \def\sctkzsym@snowman@sweatpath
    {\path[draw=\sctkzsym@snowman@sweatstroke,fill=\sctkzsym@snowman@sweatfill]}%
  % check hat
  \sctkzsym@hndl@key@withbool{snowman}{hat}%
  \def\sctkzsym@snowman@hatstroke{\sctkzsym@snowman@hat}%
  \def\sctkzsym@snowman@hatfill{\sctkzsym@snowman@hat}%
  \def\sctkzsym@snowman@hatpath
    {\path[draw=\sctkzsym@snowman@hatstroke,fill=\sctkzsym@snowman@hatfill]}%
  % check arms
  \sctkzsym@hndl@key@withbool{snowman}{arms}%
  \def\sctkzsym@snowman@armsstroke{\sctkzsym@snowman@arms}%
  \def\sctkzsym@snowman@armsfill{\sctkzsym@snowman@arms}%
  \def\sctkzsym@snowman@armspath
    {\path[draw=\sctkzsym@snowman@armsstroke,fill=\sctkzsym@snowman@armsfill]}%
  % check muffler
  \sctkzsym@hndl@key@withbool{snowman}{muffler}%
  \def\sctkzsym@snowman@mufflerpath
    {\path[draw=\sctkzsym@snowman@mufflerstroke,fill=\sctkzsym@snowman@mufflerfill]}%
  % check buttons
  \sctkzsym@hndl@key@withbool{snowman}{buttons}%
  \def\sctkzsym@snowman@buttonpath
    {\path[draw=\sctkzsym@snowman@buttonstroke,fill=\sctkzsym@snowman@buttonfill]}%
  % check snow
  \sctkzsym@hndl@key@withbool{snowman}{snow}%
  % check note (only fill)
  \sctkzsym@hndl@key@withbool{snowman}{note}%
  \def\sctkzsym@snowman@notefill{\sctkzsym@snowman@note}%
  \def\sctkzsym@snowman@notepath{\path[fill=\sctkzsym@snowman@notefill]}%
  % check mikan/leaf
  \sctkzsym@hndl@key@withbool{snowman}{mikan}%
  \sctkzsym@hndl@key@withbool{snowman}{leaf}%
  \def\sctkzsym@snowman@mikanstroke{\sctkzsym@snowman@mikan}%
  \def\sctkzsym@snowman@mikanfill{\sctkzsym@snowman@mikan}%
  \def\sctkzsym@snowman@mikanpath
    {\path[draw=\sctkzsym@snowman@mikanstroke,fill=\sctkzsym@snowman@mikanfill]}%
  \def\sctkzsym@snowman@leafstroke{\sctkzsym@snowman@leaf}%
  \def\sctkzsym@snowman@leaffill{\sctkzsym@snowman@leaf}%
  \def\sctkzsym@snowman@leafpath
    {\path[draw=\sctkzsym@snowman@leafstroke,fill=\sctkzsym@snowman@leaffill]}%
  % check broom (only stroke)
  \sctkzsym@hndl@key@withbool{snowman}{broom}%
  \def\sctkzsym@snowman@broomstroke{\sctkzsym@snowman@broom}%
  \def\sctkzsym@snowman@broompath{\path[draw=\sctkzsym@snowman@broomstroke]}%
  %
  % check adjustbaseline
  \sctkzsym@hndl@key@onlybool{snowman}{adjustbaseline}%
  %
  % drawing snowman
  \set@sctkzsym@coord@scl{\sctkzsym@snowman@scale}%
  \ifdim\sctkzsym@coord@scl<\z@\set@sctkzsym@coord@scl{-\sctkzsym@snowman@scale}\fi%
  %
  %%%%% input from def file
  %
  \expandafter\ifx\csname sctkzsym@snowman@shape@\sctkzsym@snowman@shape\endcsname\relax
    \PackageError{scsnowman}{%
      Unsupported value `\sctkzsym@snowman@shape' for shape}\@ehc
  \else
    \csname sctkzsym@snowman@shape@\sctkzsym@snowman@shape\endcsname
  \fi
  %
  %%%%%
  %
  % key initialization using default
  \sctkzsym@snowman@defaultkeys
}
%
% definition of \scsnowmandefault{...}
\newcommand{\scsnowmandefault}[1]{%
  \renewcommand{\sctkzsym@snowman@defaultkeys}{%
    % key initialization
    \sctkzsym@snowman@initkeys
    % read <key>=<value> (init=true is silently ignored)
    \setkeys{sctkzsym@snowman}{#1,init=false}%
  }%
  \sctkzsym@snowman@defaultkeys
}
%
% definition of \usescsnowmanlibrary{...}
\newcommand{\usescsnowmanlibrary}[1]{%
  \edef\@tempa{\zap@space#1 \@empty}%
  \@for\@tempa:=\@tempa\do{%
    \chardef\sctkzsym@catcode=\catcode`\@\relax
    \makeatletter\input{scsnowman-\@tempa.def}%
    \catcode`\@=\sctkzsym@catcode\relax}%
}
\@onlypreamble\usescsnowmanlibrary
%
% load shape definitions
\usescsnowmanlibrary{normal}% default
%
\endinput
%%
%% End of file `scsnowman.sty'.
