\documentclass[luatex,fontsize=8pt,paper=b5,twoside]{jlreq}%
\usepackage{amsmath,amssymb}
\usepackage{booktabs,caption}
\usepackage{luwa-ul,KKluaverb}
\usepackage[most]{tcolorbox}
\usepackage{luatexja-ruby,lltjext}
\usepackage{KKsymbols}
% Lowercase roman numerals for the examples (real KKran if available, otherwise a fallback).
\IfFileExists{KKran.sty}{\usepackage{KKran}}{\providecommand{\Rrnum}[1]{\textit{\romannumeral #1}}}

% You can omit these font settings.
\makeatletter
\RequirePackage[no-math]{fontspec}
\RequirePackage[no-math,match,scale=1]{luatexja-fontspec}
\RequirePackage[hiragino-pro,deluxe,expert]{luatexja-preset}
\setmainfont{HiraMinPro-W3}[BoldFont=HiraMinPro-W6]
\setmainjfont{HiraMinPro-W3}[BoldFont=HiraMinPro-W6]
\newfontfamily{\sfhira@pre}{HiraKakuPro-W3}[BoldFont=HiraKakuPro-W6]
\newjfontfamily{\sfhiraj@pre}{HiraKakuPro-W3}[BoldFont=HiraKakuPro-W6]
\newfontfamily{\mchira@pre}{HiraMinPro-W3}[BoldFont=HiraMinPro-W6]
\newjfontfamily{\mchiraj@pre}{HiraMinPro-W3}[BoldFont=HiraMinPro-W6]
\newfontfamily{\gthira@pre}{HiraKakuPro-W3}[BoldFont=HiraKakuPro-W6,FontFace={eb}{\shapedefault}{HiraKakuStd-W8}]
\newjfontfamily{\gthiraj@pre}{HiraKakuPro-W3}[BoldFont=HiraKakuPro-W6,FontFace={eb}{\shapedefault}{HiraKakuStd-W8}]
\newfontfamily{\mghira@pre}{HiraMaruPro-W4}
\newjfontfamily{\mghiraj@pre}{HiraMaruPro-W4}
\renewcommand{\sffamily}{\sfhira@pre\sfhiraj@pre}
\renewcommand{\mcfamily}{\mchira@pre\mchiraj@pre}
\renewcommand{\gtfamily}{\gthira@pre\gthiraj@pre}
\renewcommand{\mgfamily}{\mghira@pre\mghiraj@pre}
\makeatother
%%%


\usepackage{hyperref} 
\hypersetup{
  luatex, pdfencoding=auto, 
  colorlinks=true,
  linkcolor=black,     
  citecolor=black,     
  urlcolor=DeepSkyBlue3,      
  pdfborder={0 0 0}, 
}

\colorlet{grayLight}{white!80!black} 

\NewTCBListing{SourceCode}{ m m !o !O{DeepSkyBlue3} }{%
  enhanced, colback=black!70, colframe=Snow4,
  toptitle=-1mm, bottomtitle=-1mm,
  righttitle=-1mm, lefttitle=-1mm,
  arc=.5mm, 
  title={\tcbox[on line, arc=.5mm, boxsep=0pt, boxrule=0pt, top=1mm, bottom=0.8mm, left=2mm, right=2.2mm, colback=gray!80, coltext=white]{\raisebox{-0.1ex}{\vphantom{羅}\vphantom{j}#1}}},fonttitle=\gtfamily\footnotesize,boxrule=0.8pt,
  breakable,before upper={\color{white}},top=-0.5mm,bottom=-0.5mm,
  after title=\IfNoValueTF{#3}{}{{\hfill\tcbox[on line, arc=.5mm, boxsep=0pt, boxrule=0pt, top=1mm, bottom=0.8mm, left=2mm, right=2.2mm, colback=white!80!black, coltext=#4]{\raisebox{-0.1ex}{\vphantom{羅}\vphantom{j}#3}}}},
  listing only,
  listing options={
    language={#2},
    basicstyle=\ttfamily,
    keywordstyle=\ttfamily\color{white},
    stringstyle=\itshape\color{white},
    commentstyle=\small\gtfamily\color{DeepSkyBlue2},
    showspaces=false,showtabs=false,
    breaklines=true,breakindent=0pt,
    showstringspaces=false,
    columns=fullflexible,
    tabsize=2,
    numbers=left,numbersep=1.5pt,
    numberstyle=\scriptsize\gtfamily\color{gray},
  }
}

\NewTColorBox{OutPut}{ m !o !O{DeepSkyBlue3} }{%
  enhanced, colframe=Snow4,
  toptitle=-1mm, bottomtitle=-1mm,
  righttitle=-1mm, lefttitle=-1mm,
  arc=.5mm, colback=white, 
  title={\tcbox[on line, arc=.5mm, boxsep=0pt, boxrule=0pt, top=1mm, bottom=0.8mm, left=2mm, right=2.2mm, colback=gray!40, coltext=DeepSkyBlue3]{\raisebox{-0.1ex}{\vphantom{羅}\vphantom{j}#1}}},fonttitle=\gtfamily\footnotesize,boxrule=0.8pt,
  breakable,top=-0.5mm,bottom=-0.5mm,
  after title=\IfNoValueTF{#2}{}{{\hfill\tcbox[on line, arc=.5mm, boxsep=0pt, boxrule=0pt, top=1mm, bottom=0.8mm, left=2mm, right=2.2mm, colback=white!80!black, coltext=#3]{\raisebox{-0.1ex}{\vphantom{羅}\vphantom{j}#2}}}}, bottom=2mm, top=2mm, 
}

\title{\texttt{KKsymbols} Package Documentation}
\author{Kosei Kawaguchi a.k.a. KKTeX}
\date{Version 2.2.1 (2026/06/21)}
\begin{document}

\begin{titlepage}
  \maketitle
\end{titlepage}
\newpage
\tableofcontents
\newpage

\section{Outline}
Japanese: このパッケージは、既存のotfフォントに頼ることなく、「任意のフォント、任意の引数で」丸数字などの特殊記号を再現する目的で作成されています。

luatexja-otfにおける\verb|\ajMaru|などは、その設計上いたしかなないデメリットとして、早見表がないと使い物にならないというものがありました。しかし、本パッケージでは、一から特殊文字を設計し直すというという取り組みを行なっているため、そのようなデメリットが解消されています。

English: This package is designed to reproduce special characters, such as circled numbers, using arbitrary fonts and parameters without relying on existing otf font sets.

A known disadvantage of commands like \verb|\ajMaru| in luatexja-otf is that they are practically unusable without a reference chart. In contrast, this package addresses this issue by re-engineering special characters from the ground up, eliminating the need for complex lookup tables.

{%
\fboxsep=0pt\fboxrule=.1pt
\makebox[10\zw][s]{ああ\kakko{あ}ああ}


\directlua{
  for i = 1, 26 do
    local char = i
    tex.print("\\fbox{\\maru{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\maru*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\maru{" .. char .. "}}")
  end
}

\directlua{
  for i = 1, 26 do
    local char = i
    tex.print("\\fbox{\\jegg{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\jegg{" .. char .. "}}")
  end
}

\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\jegg*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kuromaru*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kuromaru{" .. char .. "}}")
  end
}

\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\nmaru*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\nmaru{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\hishi*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\hishi{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kurohishi*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kurohishi{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\maruhishi*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\maruhishi{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kuromaruhishi*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kuromaruhishi{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\seihou*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\seihou{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kuroseihou*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kuroseihou{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\seimaru*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\seimaru{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kuroseimaru*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kuroseimaru{" .. char .. "}}")
  end
}


\directlua{
  for i = 1,26 do
    local char = i
    tex.print("\\fbox{\\kakko{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("a"), string.byte("z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kakko*{" .. char .. "}}")
  end
}


\directlua{
  for i = string.byte("A"), string.byte("Z") do
    local char = string.char(i)
    tex.print("\\fbox{\\kakko{" .. char .. "}}")
  end
}%
}


\section{Acknowledgements / Credit}
In developing this package, I made extensive use of the advice I received from Mr.~Yusuke~Terada.

I recommend you to refer to his article when you develop new-type symbols on \LaTeX.

\begin{quotation}
  \url{https://doratex.hatenablog.jp/entry/20211205/1638697391}
\end{quotation}

\section{Installation}
Place \texttt{KKsymbols.sty} in a directory where LaTeX can find it, e.g., your local \texttt{texmf} tree or alongside your document.

\subsection{Dependencies}
This package depends on the following packages.

\begin{itemize}
    \item \texttt{LuaLaTeX-ja}
    \item \texttt{tikz}
    \item \texttt{clac}
    \item \texttt{luacode}
    \item \texttt{kvoptions}
\end{itemize}

\subsection{Loading and Options}
Load the package: \KKverb|\usepackage[<options>]{KKsymbols}|

Currently, the following package option is provided.

\begin{description}
  \item[tsumesuji] To specify whether or not to ``shrink'' the box width occupied by ``1''. By default, \KKverb|tsumesuji=1| is specified, and the effect is activated. If you deactivate it, \KKverb|tsumesuji=0| will do.

  To clarify, this option is applied when the argument of a command subject to the \KKverb|tsumesuji| option—after expansion—is a numeric string of two or more digits and contains the digit ``1''. The differnce is present in the following example:
  \begin{SourceCode}{Input}{TeX}
    % NOT APPLIED
    \kakko{\vphantom{X}12}

    % APLIED
    \kakko{12}
  \end{SourceCode}
  \begin{OutPut}{Output}
    % NOT APPLIED
    \kakko{\vphantom{X}12}

    % APLIED
    \kakko{12}
  \end{OutPut}
\end{description}

\section{Caution}
\namiKK{Since this package internally calls \KKverb|\ltjghostbeforejachar| and \KKverb|\ltjghostafterjachar|, it can be used \textbf{only in a LuaLaTeX environment.}}

\section{Commands}
\subsection{The maru series}
This package provides \verb|\maru|, \verb|\kuromaru|, and \verb|\nmaru|. Each of them takes one mandatory argument and no optional arguments. You can pass strings of any length and in any font as arguments.

In most cases, \verb|\maru{argument}| will meet your demands. However, only when you take lowercase alphabet in these commands, you must use star-command just like \verb|\maru*{m}|\footnote{\KKverb|\jegg| is an exception of this rule. When you use \KKverb|\jegg|, you don't have to put the star option no matter the argument is lowercase or not. If you do it, the background color of the \KKverb|\jegg| changes into gray. Only in this case, the effect of the option is different.}.

\begin{SourceCode}{Input}{TeX}[Mind the star option!]
  % Normal Characters
  \maru{A}\maru{あ}\maru{QED.}

  % Lowercase Alphabetic Characters
  \maru*{a}\maru*{j}\maru*{z}
\end{SourceCode}

\begin{OutPut}{Output}
  % Normal Characters
  \maru{A}\maru{あ}\maru{QED.}

  % Lowercase Alphabetic Characters
  \maru*{a}\maru*{j}\maru*{z}
\end{OutPut}

They are used as follows.

\begin{table}[h]
\centering
\caption{maru series}
\begin{tabular}{|c|c|c|c|c|c|}
\hline
argument & \texttt{\textbackslash maru} & \texttt{\textbackslash kuromaru} & \texttt{\textbackslash nmaru} & \texttt{\textbackslash jegg} & \texttt{\textbackslash jegg*} \\
\hline
1     & \maru{1}     & \kuromaru{1}     & \nmaru{1} & \jegg{1} & \jegg*{1}  \\
97    & \maru{97}    & \kuromaru{97}    & \nmaru{97} & \jegg{97} & \jegg*{97} \\
だ    & \maru{だ}    & \kuromaru{だ}    & \nmaru{だ} & \jegg{だ} & \jegg*{だ} \\
ばばば & \maru{ばばば} & \kuromaru{ばばば} & \nmaru{ばばば} & \jegg{ばばば} & \jegg*{ばばば} \\
m & \maru*{m} & \kuromaru*{m} & \nmaru*{m} & \jegg{m} & \jegg*{m} \\
Qjg & \maru{Qjg} & \kuromaru{Qjg} & \nmaru{Qjg} & \jegg{Qjg} & \jegg*{Qjg} \\
\hline
\end{tabular}
\end{table}

They behave as if they were single kanji or hiragana characters:

\fboxsep=0pt\fboxrule=0.1pt
\begin{quotation}
  あいう\fbox{\maru{あ}}\fbox{あ}いう\maru{1}\maru{2}\maru{3}あいうえお
\end{quotation}

The spacing between \verb|\maru| and other characters is adjusted using \verb|\ltjghostbeforejachar| and \verb|\ltjghostafterjachar| so that it behaves like hiragana or kanji.

When changing the font size using commands such as \verb|\Large|, each command is scaled proportionally according to the font size change:

\begin{quotation}
  {\tiny \maru{あああ}\kuromaru{2222}\nmaru{亀}}

  {\normalsize \maru{あああ}\kuromaru{2222}\nmaru{亀}}

  {\Huge \maru{あああ}\kuromaru{2222}\nmaru{亀}}
\end{quotation}

You can also change the current font:
\begin{quotation}
  {\LARGE\maru{あいう}\kuromaru{午後}\nmaru{悟}}%

  {\gtfamily \maru{あいう}\kuromaru{午後}\nmaru{悟}}
\end{quotation}


\section{Automatic alignment (reference box)}
By default (since v2.2.0), each enclosure sizes and vertically centers its argument against the \emph{current font's reference height} (its x-height) rather than against the argument's own bounding box. This keeps short or irregular glyphs—most notably the lowercase roman numerals produced by \KKverb|\Rrnum| (from the \texttt{KKran} package)—uniform in size and position, and it makes the result consistent across fonts.

Previously you had to insert \KKverb|\vphantom| by hand to obtain a consistent reference. Now the same, aligned result is produced automatically:

\begin{SourceCode}{Input}{TeX}[No more manual vphantom]
  % Before (manual workaround)
  \maru{\vphantom{\Rrnum{6}}\Rrnum{1}}\maru{\vphantom{\Rrnum{6}}\Rrnum{8}}

  % Now (automatic, identical result)
  \maru{\Rrnum{1}}\maru{\Rrnum{8}}
\end{SourceCode}
\begin{OutPut}{Output}
  \maru{\vphantom{\Rrnum{6}}\Rrnum{1}}\maru{\vphantom{\Rrnum{6}}\Rrnum{8}}\quad
  \maru{\Rrnum{1}}\maru{\Rrnum{8}}
\end{OutPut}

Tall content (kanji, kana, uppercase letters, digits) is taller than the reference, so it is unaffected and existing documents keep their appearance.

\subsection{Overriding the reference}
\begin{description}
  \item[\KKverb|\kksref{<material>}|] Use the height and depth of \verb|<material>| as the reference instead of the automatic one. The effect is scoped like \KKverb|\RotYoko|, so enclose it in a group. This is handy for list labels:
  \begin{SourceCode}{Input}{TeX}
    {\kksref{\Rrnum{8}}%
      \maru{\Rrnum{1}}\maru{\Rrnum{4}}\maru{\Rrnum{8}}}
  \end{SourceCode}
  \item[\KKverb|\kksrefoff|] Disable the reference box and fall back to the argument's own metrics (the behavior before v2.2.0).
  \item[\KKverb|\kksrefauto|] Restore the automatic reference (the default). \KKverb|\kksrefreset| is an alias.
\end{description}


\section{Rotation}
\subsection{Commands}
This package provides \verb|\RotTate| and \verb|\RotYoko|. The differnces are as follows:

\begin{description}
  \item[In horizontal mode] You should use \verb|\RotYoko|. The default value is \verb|0|. Therefore, if you use \verb|\RotYoko| with no arguments, this is equal to \verb|\RotYoko[0]| 
  \item[In vertical mode] You should use \verb|\RotTate|. The default value is \verb|90|. Therefore, if you use \verb|\RotTate| with no arguments, this is equal to \verb|\RotTate[90]| 
\end{description}

From a technical perspective: Commands like \verb|\maru| provided by this package automatically rotate their arguments based on the ``current typesetting direction'' Specifically, the package applies a 0-degree rotation for horizontal writing (yoko-gaki) and a 90-degree rotation for vertical writing (tate-gaki).

The commands \verb|\RotYoko| and \verb|\RotTate| redefine this "automatic rotation angle" to the value specified in their arguments. Consequently, the effect is persistent unless localized (similar to how font-size commands like \verb|\small| behave). Therefore, please ensure you use appropriate scoping, such as enclosing the command within curly braces \verb|{...}|, when applying these settings.

\begin{SourceCode}{Input}{TeX}
  % In horizontal mode
  {\RotYoko[45]\kakko{あ}\kakko{い}\kakko{う}}\par
  {\RotYoko[60]\kakko{1}\kakko{2}\kakko{3}}

  % In vertical mode
  \parbox<t>{5\zw}{% <t> option requires lltjext package.
    {\RotTate[45]\kakko{あ}\kakko{い}\kakko{う}}\par
    {\RotTate[60]\kakko{1}\kakko{2}\kakko{3}}
  }
\end{SourceCode}

\begin{OutPut}{Output}
  {\RotYoko[45]\kakko{あ}\kakko{い}\kakko{う}}\par
  {\RotYoko[60]\kakko{1}\kakko{2}\kakko{3}}

  \bigskip

  \parbox<t>{5\zw}{% <t> option requires lltjext package.
    {\RotTate[45]\kakko{あ}\kakko{い}\kakko{う}}\par
    {\RotTate[60]\kakko{1}\kakko{2}\kakko{3}}
  }
\end{OutPut}

\subsection{Vertical mode}
When you want to typeset \maru{あ}, for instance, in vertical mode, you should use \verb|\RotTate| command. 

As described in the previous subsection, the effect of \verb|\RotTate| lasts, when localized, in a certain group. So when you typeset hiragana or kanji, use it like this:

\begin{SourceCode}{Input}{TeX}
  % In vertical mode
  \parbox<t>{5\zw}{%
    {\RotTate[0]\kakko{あ}\kakko{い}\kakko{う}}\par
    \kakko{1}\kakko{1}\kakko{3}
  }
\end{SourceCode}

\begin{OutPut}{Output}
  \parbox<t>{5\zw}{%
    {\RotTate[0]\kakko{あ}\kakko{い}\kakko{う}}\par
    \kakko{1}\kakko{1}\kakko{3}
  }
\end{OutPut}

\section{The seihou series}
The commands introduced below are used in exactly the same way as the maru series.
In most cases, \verb|\seihou{argument}| will meet your demands. However, only when you take lowercase alphabet in these commands, you must use star-command just like \verb|\seihou*{m}|.

\bigskip{%
\centering
\captionof{table}{seihou series}
\begin{tabular}{|c|c|c|c|c|}
\hline
argument & \texttt{\textbackslash seihou} & \texttt{\textbackslash kuroseihou} & \texttt{\textbackslash seimaru} & \texttt{\textbackslash kuroseimaru} \\
\hline
1       & \seihou{1}        & \kuroseihou{1}      & \seimaru{1}       & \kuroseimaru{1}  \\
97      & \seihou{97}       & \kuroseihou{97}     & \seimaru{97}      & \kuroseimaru{97} \\
だ      & \seihou{だ}       & \kuroseihou{だ}     & \seimaru{だ}      & \kuroseimaru{だ} \\
ばばば  & \seihou{ばばば}   & \kuroseihou{ばばば} & \seimaru{ばばば}  & \kuroseimaru{ばばば} \\
m       & \seihou*{m}       & \kuroseihou*{m}     & \seimaru*{m}      & \kuroseimaru*{m} \\
Qjg     & \seihou{Qjg}      & \kuroseihou{Qjg}    & \seimaru{Qjg}     & \kuroseimaru{Qjg} \\
\hline
\end{tabular}
}\bigskip

{%
\centering
\captionof{table}{hishi series}
\begin{tabular}{|c|c|c|c|c|}
\hline
argument & \texttt{\textbackslash hishi} & \texttt{\textbackslash kurohishi} & \texttt{\textbackslash maruhishi} & \texttt{\textbackslash kuromaruhishi} \\
\hline
1     & \hishi{1}     & \kurohishi{1}     & \maruhishi{1}     & \kuromaruhishi{1} \\
97    & \hishi{97}    & \kurohishi{97}    & \maruhishi{97}    & \kuromaruhishi{97} \\
だ    & \hishi{だ}    & \kurohishi{だ}    & \maruhishi{だ}    & \kuromaruhishi{だ} \\
ばばば & \hishi{ばばば} & \kurohishi{ばばば} & \maruhishi{ばばば} & \kuromaruhishi{ばばば} \\
m & \hishi*{m} & \kurohishi*{m} & \maruhishi*{m} & \kuromaruhishi*{m} \\
Qjg & \hishi{Qjg} & \kurohishi{Qjg} & \maruhishi{Qjg} & \kuromaruhishi{Qjg} \\
\hline
\end{tabular}
}\bigskip


\begin{SourceCode}{Input}{TeX}[Mind the star option!]
  % Normal Characters
  \seihou{A}\seihou{あ}\seihou{QED.}

  % Lowercase Alphabetic Characters
  \seihou*{a}\seihou*{j}\seihou*{z}
\end{SourceCode}

\begin{OutPut}{Output}
  % Normal Characters
  \seihou{A}\seihou{あ}\seihou{QED.}

  % Lowercase Alphabetic Characters
  \seihou*{a}\seihou*{j}\seihou*{z}
\end{OutPut}


\section{The kakko series}
The commands introduced below are used in exactly the same way as the maru series.

In most cases, \verb|\kakko{argument}| will meet your demands. However, only when you take lowercase alphabet in these commands, you must use star-command just like \verb|\kakko*{m}|\footnote{\KKverb|\zenkakuhabafixer| is an exception of this rule. It does not take a star option.}.

\bigskip{%
\centering
\captionof{table}{kakko series\maru{1}}
\begin{tabular}{|c|c|c|c|c|c|}
\hline
argument & \texttt{\textbackslash kakko} & \texttt{\textbackslash sumikakko} & \texttt{\textbackslash kakukakko} & \texttt{\textbackslash kikakko} & \texttt{\textbackslash ykakko} \\
\hline
1     & \kakko{1}     & \sumikakko{1}     & \kakukakko{1}     & \kikakko{1}     & \ykakko{1} \\
97    & \kakko{97}    & \sumikakko{97}    & \kakukakko{97}    & \kikakko{97}    & \ykakko{97} \\
だ    & \kakko{だ}    & \sumikakko{だ}    & \kakukakko{だ}    & \kikakko{だ}    & \ykakko{だ} \\
ばばば & \kakko{ばばば} & \sumikakko{ばばば} & \kakukakko{ばばば} & \kikakko{ばばば} & \ykakko{ばばば} \\
m & \kakko*{m} & \sumikakko*{m} & \kakukakko*{m} & \kikakko*{m} & \ykakko*{m} \\
Qjg & \kakko{Qjg} & \sumikakko{Qjg} & \kakukakko{Qjg} & \kikakko{Qjg} & \ykakko{Qjg} \\
\hline
\end{tabular}
}

\bigskip{%
\centering
\captionof{table}{kakko series\maru{2}}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
argument & \texttt{\textbackslash nykakko} & \texttt{\textbackslash namikakko} & \texttt{\textbackslash kagikakko} & \texttt{\textbackslash nkagikakko} & \texttt{\textbackslash ichimoji} & \texttt{\textbackslash zenkakuhabafixer}\\
\hline
1     & \nykakko{1}     & \namikakko{1}     & \kagikakko{1}     & \nkagikakko{1}     & \ichimoji{1} & \zenkakuhabafixer{1} \\
97    & \nykakko{97}    & \namikakko{97}    & \kagikakko{97}    & \nkagikakko{97}    & \ichimoji{97} & \zenkakuhabafixer{97} \\
だ    & \nykakko{だ}    & \namikakko{だ}    & \kagikakko{だ}    & \nkagikakko{だ}    & \ichimoji{だ} & \zenkakuhabafixer{だ} \\
ばばば & \nykakko{ばばば} & \namikakko{ばばば} & \kagikakko{ばばば} & \nkagikakko{ばばば} & \ichimoji{ばばば} & \zenkakuhabafixer{ばばば} \\
m & \nykakko*{m} & \namikakko*{m} & \kagikakko*{m} & \nkagikakko*{m} & \ichimoji*{m} & \zenkakuhabafixer{m} \\
Qjg & \nykakko{Qjg} & \namikakko{Qjg} & \kagikakko{Qjg} & \nkagikakko{Qjg} & \ichimoji{Qjg} & \zenkakuhabafixer{Qjg} \\
\hline
\end{tabular}
}\bigskip

\begin{SourceCode}{Input}{TeX}[Mind the star option!]
  % Normal Characters
  \kakko{A}\kakko{あ}\kakko{QED.}

  % Lowercase Alphabetic Characters
  \kakko*{a}\kakko*{j}\kakko*{z}
\end{SourceCode}

\begin{OutPut}{Output}
  % Normal Characters
  \kakko{A}\kakko{あ}\kakko{QED.}

  % Lowercase Alphabetic Characters
  \kakko*{a}\kakko*{j}\kakko*{z}
\end{OutPut}

\subsection{Additional Description: \KKverb|\ichimoji| and \KKverb|\zenkakuhabafixer|}
The major differnce of \verb|\ichimoji| and \verb|\zenkakuhabafixer| is that the former changes the vertical scale to force its totalheight to \verb|\zw|, but the latter doesn't. You can see the differnce as follows: 

\begin{description}
  \item[\KKverb|\ichimoji|] \fbox{\ichimoji{123}}
  \item[\KKverb|\zenkakuhabafixer|] \fbox{\zenkakuhabafixer{123}}
\end{description}

\section{License}

Released under the MIT License.

\section{Version History}

\begin{itemize}
  \item \textbf{v1.0.0 (2025/10/03)} --- Initial public release.
  \item \textbf{v1.0.1--1.0.4} --- Added \verb|\ichimoji|; fixed various bugs.
  \item \textbf{v1.1.0 (2025/10/28)} --- Unified all commands to \textit{zenkaku} (full-width).
  \item \textbf{v1.1.1 (2025/11/10)} --- Refined \verb|\ichimoji| scaling logic.
  \item \textbf{v2.0.0 (2025/12/23)} --- Overhauled scaling to match OTF character quality.
  \item \textbf{v2.0.1 (2026/01/08)} --- With the update to luatexja version 20260107.0, the commands provided by the KKsymbols package now behave identically to native Japanese characters. This improvement is due to the bug fixes in \verb|\ltjghostbeforejachar| and \verb|\ltjghostafterjachar|. Previously, when multiple commands from this package were used consecutively, proper glue was not inserted between them; however, this issue has been resolved in this update.
  \item \textbf{v2.0.2 (2026/01/20)} --- This update fixes a critical bug where arguments of the \verb|\kakko| command could overflow when using specific fonts (for example, Hiragino fonts with weights W4 and above). 
  \item \textbf{v2.1.0 (2026/02/16)} --- In this update, the following points are changed.
  \begin{itemize}
    \item \verb|\period| command was deleted. It have never been used since the significance of existence had been absolutely questionable. I finally decided to delete it.
    \item New package option \verb|tsumesuji| was added. 
    \item New command \verb|\zenkakuhabafixer| was added.
  \end{itemize}
  \item \textbf{v2.1.1 (2026/02/17)} --- An emergency update to fix a bug where the arguments of \KKverb|\kakko|, \KKverb|\maru| etc. caused expansion errors.
  \item \textbf{v2.1.2 (2026/02/19)} --- The effects are applied when the argument of a command subject to the \KKverb|tsumesuji| option—after expansion—is a numeric string of two or more digits and contains the digit ``1''.
  \item \textbf{v2.1.4 (2026/04/17)} --- When the arguments provided by this package contain only one-digit-number, the internal resize algorithm is nullified.
  \item \textbf{v2.2.0 (2026/06/21)} --- Automatic vertical alignment was introduced. By default, the content of each enclosure is now sized and centered against the current font's reference height (x-height) instead of the glyph's own metrics, so that short and irregular glyphs (such as the lowercase roman numerals of \KKverb|\Rrnum|) line up uniformly without writing \KKverb|\vphantom| by hand. The new commands \KKverb|\kksref|, \KKverb|\kksrefoff|, and \KKverb|\kksrefauto| (alias \KKverb|\kksrefreset|) control this behavior. Tall content (kanji, kana, uppercase, digits) is unaffected, so existing documents are unchanged.
  \item \textbf{v2.2.1 (2026/06/21)} --- Bug fix: a font-size command inside an argument (e.g. \KKverb|\maru{\Large A}|) previously caused an infinite loop, because the internal one-digit/\KKverb|tsumesuji| check expands the argument with \KKverb|\text_expand:n|, which loops on font-size commands. Such commands are now declared expand-equivalent to empty for that internal check; the visible output size is unaffected. (The hang predated v2.2.0.)
\end{itemize}

\end{document}