%! HV cluttex -e xelatex
%$ xelatex -synctex=1 -8bit $texname
%$ komkindex -k -s kotex $basename
%$ xelatex -synctex=1 -8bit $texname
% arara: xelatex: { synctex: yes } until !found('log','Rerun to get')
\documentclass[a4paper,colorlinks]{oblivoir}

\usepackage[dbl4x6]{fapapersize}

\ifLuaOrXeTeX
\setobmainfont[LibertinusSerif-](Regular.otf)(Bold.otf)(Italic.otf)
\setobsansfont[QTOptimum](.otf)(-Bold.otf)(-Italic.otf)
\setmonofont{jetbrainsmono}[Scale=.91]
\setkomainfont(Noto Serif CJK KR)[Scale=MatchUppercase,WordSpace={1.1,1,.5}]
\setkosansfont(Noto Sans CJK KR)[Scale=MatchUppercase]
\setkomonofont(D2Coding)[Scale=.9][](Noto Sans CJK KR)[Scale=.88]
\fi

\usepackage[parentype=moreparens]{kskorsymb}
\usepackage{kswdash}
\usepackage{ksvqt}
\usepackage{ksforloop}

\usepackage{fbox}
\usepackage[private,tcolorbox,backcolor=gray!8,framecolor=gray!80]{srcandtext}
\usepackage{kotex-logo}
\def\pdfTeX{\texorpdfstring{\hologo{pdfTeX}}{pdfTeX}\index{pdfTeX@pdf\TeX}}
\tcbset{minted style=bw,minted language=latex}


\usepackage{figureversions}
\IfPackageLoadedTF{luatexko}{}{%
	\usepackage[normalem]{ulem}
}

\usepackage{graphicx}
\usepackage[export]{adjustbox}

\ExplSyntaxOn

\NewDocumentCommand \showcmd { m }
{
	\par\vspace{\medskipamount}
	\clist_set:Nn \l_tmpa_clist { #1 }
	\dim_zero:N \l_tmpb_dim
	\clist_map_inline:Nn \l_tmpa_clist
	{
		\settowidth{\l_tmpa_dim}{\ttfamily\tl_to_str:n { ##1 } }
		\dim_compare:nT { \l_tmpa_dim > \l_tmpb_dim }
		{
			\dim_set_eq:NN \l_tmpb_dim \l_tmpa_dim
		}
	}
	\dim_add:Nn \l_tmpb_dim {6pt}
	
	\noindent\hspace*{-2em}
	\fparbox[bt,boxrule=1.5pt,linewidth=\l_tmpb_dim]{
		\setstretch{1}
		\int_zero:N \l_tmpa_int
		\clist_map_inline:Nn \l_tmpa_clist
		{
			\int_incr:N \l_tmpa_int
			\cmd{##1}
			\int_compare:nF { \l_tmpa_int == \clist_count:N \l_tmpa_clist }
			{ \newline }
		}
	}
	\nopagebreak\par
	\vspace{\smallskipamount}
	\noindent
	\ignorespaces
}

\makeindex

\ExplSyntaxOff

\makeatletter 
\renewcommand{\cmd}[1]{\cmdprint{#1}%
  \index{\expandafter\@gobble\string#1@\string\cmdprint{\string#1}}\allowbreak}
\patchcmd{\theindex}{\@makeschapterhead{\indexname}}{\section*{\indexname}}{}{}
\patchcmd{\theindex}{\addcontentsline{toc}{chapter}{\indexname}}{ \addcontentsline{toc}{section}{\texorpdfstring{\string\kern1.8em\indexname}{\indexname}}}{}{}
\makeatother 

\AddToHook{env/examplebelow/begin}{\makerqother}
\AddToHook{env/exampleside/begin}{\makerqother}

\makeindex 
\renewcommand*\indexname {명령어 색인}

\def\pkg#1{\textsf{#1}\index{Packages!#1@\textsf{#1}}}
\let\file\path
\def\ucp#1{\texttt{[U+#1]}\index{Unicode Characters!#1@\texttt{[U+#1]}}}
\newcommand*\env[1]{{\sffamily\itshape #1}}
\let\beginScope\begingroup
\let\endScope\endgroup
\def\sto#1{\texttt{#1}\index{Options!#1@\texttt{#1}}}
\let\opt\sto
\apptocmd\koTeX{\index{Packages!ko.TeX@\textsf{ko.TeX}}}{}{}
\newcounter{dummy}

\usepackage{kswonnum}

\begin{document}

\title{원숫자}
\author{Nova de Hi}

\maketitle

\tableofcontents*

\section{목적}

\cmdprint{\kswonnum}이라는 한 개의 명령을 제공하며, 인자로 주어진 숫자를
원숫자로 식자한다.
\href{https://nonametex.imweb.me/?bmode=view&idx=142253888&t=board}{\<!원숫자론>}이라는 글에서
설명했던 것 가운데 숫자 인자를 원숫자로 식자하는 기능만을 별도로 제작한 것이다.

원숫자를 식자하는 패키지 \pkg{kocircnum}이 있지만 너무 복잡한 사용법이 문제가 되어서,
좀더 간단히 사용할 방법이 없을까 찾아본 것이다.


\section{의존성}

이 패키지를 활용하기 위해 필요로 하는 패키지는 다음과 같다.
\begin{itemize}\oblivoirlist
\item \pkg{pifont}
\item \pkg{utfsym}
\item \pkg{kocircnum} (KPR)
\item \pkg{kotex}
\end{itemize}
다음 폰트가 설치되어 있지 않으면 해당 폰트를 활용하는 기능을 사용할 수 없다.
\begin{itemize}\oblivoirlist
\item \file{HANBatang-LVT.ttf} (KPR \pkg{hcr-lvt})
\item \file{CombiNumeralsLtd.otf}
\end{itemize}

\section{사용법}

패키지 옵션 또는 명령어 옵션으로 원숫자를 인쇄하는 방법을 선택할 수 있다. 
패키지 옵션으로 할 때는 문서 전체에 적용된다.

\begin{exampleonly}
\usepackage[type=<option>]{kswonnum}
\end{exampleonly}

또는 문서 중에서

\begin{exampleonly}
\kswonnum[type=<option>]{<number>}
\end{exampleonly}


\opt{type} 위치에 올 수 있는 옵션은 다음과 같다. 디폴트는 \opt{ksx}이다. (p)는 \hologo{pdfTeX},
(xl)은 \hologo{XeTeX}과 \hologo{LuaTeX}에서 동작한다는 의미이다.
\begin{enumerate}[\hspace*{\parindent}(1)] \oblivoirlist
\item \opt{ksx}: \koTeX 의 \cmd{\@onum}. (pxl)
\item \opt{kocirc}: \pkg{kocircnum}의 \cmd{\tikzcircnum}. (pxl)
\item \opt{piR}: \pkg{pifont}의 로만 원숫자. (pxl)
\item \opt{piS}: \pkg{pifont}의 산세리프 원숫자. (pxl)
\item \opt{utfsymR}: \pkg{utfsym}의 로만 원숫자. (pxl)
\item \opt{utfsymS}: \pkg{utfsym}의 산세리프 원숫자. (pxl)
\item \opt{go}: \pkg{go}의 숫자. (pxl)
\item \opt{unicode}: Unicode Code point. (xl)
\item \opt{hcr}: 함초롬 바탕의 원숫자. (xl)
\item \opt{combi}: \file{Combinumerals Ltd} 폰트. (xl)
\end{enumerate}

\section{원숫자 식자 명령}

\showcmd{\kswonnum,\kswonnum*}

별표를 붙이면 검정 바탕에 흰 글씨로 식자한다. 단, 기본값인 \opt{ksx}는 검정 바탕 흰 글씨를 지원하지 않으므로 변화가 없다.

옵션 인자를 줄 수 있으며 다음 세 가지 key에 값을 부여한다.
\begin{enumerate}[\hspace*{\parindent}(1)]\oblivoirlist
\item \opt{[scale]}: 글자 크기를 지정한다. 디폴트는 $1$.
\item \opt{[raise]}: 베이스라인에 대하여 글자 박스를 끌어올리는 값이다. 길이값을 준다. 디폴트는 0pt.
\item \opt{[type]}: 원숫자 식자 방식을 지정한다. 패키지 옵션과 같다. \dotemph{이 옵션의 선택은 전역적이며 이후 명령에 영향을 미친다}.
\end{enumerate}

\setrighthandwidth{.8cm}
\begin{exampleside}
\kswonnum{1} \kswonnum{2} \\
\kswonnum[type=kocirc]{3} 
\kswonnum{4} \\ %% kocirc
\kswonnum*[type=kocirc]{5} 
\kswonnum*[type=kocirc]{6}
\end{exampleside}

\setrighthandwidth{2cm}
\begin{exampleside}
abcd...\kswonnum[raise=2ex,type=piR]{3}...ABCD
\end{exampleside}

\setrighthandwidth{2cm}
\begin{exampleside}
abcd...\kswonnum[scale=1.5,type=piR]{3}...ABC
\end{exampleside}


\section{원숫자 식자 방법}

\showcmd{\selectkswontype}
한 개의 인자를 취하여 \cmdprint{\kswonnum}으로 식자할 원숫자의 scale, raise, type을
선택한다. 효과는 이후 지속된다. 인자로 올 수 있는 것은 명령의 옵션 인자와 동일하다.

\subsection{\opt{ksx} 원숫자}

\koTeX\ 패키지의 \cmd{\@onum} 명령으로 원숫자를 만든다. 15까지 가능하다.
인자가 16 이상이면 Counter too large 에러가 발생한다.
반전 문자, 즉 검정 바탕에 흰 문자는 지원하지 않는다.

\begin{examplebelow}
\ksforloop{}{15}{\kswonnum{\ksfori}\ }
\end{examplebelow}

\subsection{\opt{kocirc} 원숫자}

\pkg{kocircnum} 패키지의 \cmd{\tikzcircnum}을 간편하게 이용하도록 한 것이다.
이 패키지와 명령이 제공하는 대단히 복잡한 설정 방식에 대하여는 해당 패키지 문서를 참고하라.
기본적으로 99까지의 숫자를 "(안정적으로) 지원한다.

\begin{examplebelow}
\ksforloop{}{25}{\kswonnum[type=kocirc]{\ksfori}\ }\\
\ksforloop{}{25}{\kswonnum*[type=kocirc]{\ksfori}\ }
\end{examplebelow}

\subsection{\opt{piR}, \opt{piS} 원숫자}

딩뱃 패키지 \pkg{pifont}의 원숫자를 사용한다. 10까지의 원숫자를 지원한다.
옵션 선택지에서 |R|은 Roman, |S|는 San Serif를 의미한다.

\begin{examplebelow}
\ksforloop{}{10}{\kswonnum[type=piR]{\ksfori}\ }\\
\ksforloop{}{10}{\kswonnum*[type=piR]{\ksfori}\ }
\end{examplebelow}

\begin{examplebelow}
\ksforloop{}{10}{\kswonnum[type=piS]{\ksfori}\ }\\
\ksforloop{}{10}{\kswonnum*[type=piS]{\ksfori}\ }
\end{examplebelow}

이 딩뱃 기호들은 크기가 조금 작은 편이므로 살짝 키우고 끌어내리는 편이 보기에 좋다.

\begin{examplebelow}
abcd...\ksforloop{}{10}{\kswonnum[type=piS,scale=1.2,raise=-.1ex]{\ksfori}\ } 가나다라
\end{examplebelow}

\subsection{\opt{utfsym}, \opt{utfsymR}, \opt{utfsymS} 원숫자}

유니코드 딩뱃 코드를 지원하는 \pkg{utfsym}을 이용한다. 10까지 식자 가능.
이 선택지에는 |R|과 |S|가 있기는 하지만 실제로 |S|를 지시하면 반전 문자"(즉 별표가 붙을 때)에서만 Sans Serif로 찍힌다. 그 이유는 유니코드 BMP의 딩뱃 부호가 그렇게 되어 있기 때문이다. |utfsym|은
|utfsymR|과 같다.

\begin{examplebelow}
\ksforloop{}{10}{\kswonnum[type=utfsym]{\ksfori}\ }\\
\ksforloop{}{10}{\kswonnum*[type=utfsym]{\ksfori}\ }
\end{examplebelow}

\begin{examplebelow}
\ksforloop{}{10}{\kswonnum[type=utfsymS]{\ksfori}\ }\\
\ksforloop{}{10}{\kswonnum*[type=utfsymS]{\ksfori}\ }
\end{examplebelow}

이 역시 크기와 끌어올림 길이를 조금 조절하는 편이 보기 좋다.

\begin{examplebelow}
abcd...\ksforloop{}{10}{\kswonnum*[type=utfsymS,scale=1.3,raise=-.4ex]{\ksfori}\ } 가나다라
\end{examplebelow}

\subsection{\opt{unicode} 코드 포인트}

현재 라틴 폰트의 유니코드 코드 포인트를 지시하여 원숫자를 식자하는 것인데, \cmdprint{\fontspec}을 이용하여야 하므로 \hologo{XeTeX}, \hologo{LuaTeX} 엔진에서만 가능하고 \hologo{pdfTeX}을 지원하지 않는다.

기본적으로 20까지의 숫자가 사용가능하며, 흰 바탕 숫자는 50까지 가능하다. 당연한 일이지만
폰트가 이 글자들을 가지고 있지 않으면 식자되지 않는다.

\begin{examplebelow}
\ksforloop{}{50}{\kswonnum[type=unicode]{\ksfori}\ }\\
\ksforloop{}{20}{\kswonnum*[type=unicode]{\ksfori}\ }
\end{examplebelow}

\subsection{\opt{hcr} 원숫자}

함초롬 바탕 폰트의 원숫자를 직접 이용하는 것이다. \hologo{pdfTeX}을 지원하지 않는다.
두 자리 숫자를 잘 처리한다.
함초롬 돋움을 사용하려 하거나 여러 변형을 가하고자 한다면 \pkg{kocircnum} 패키지를 보라.

\begin{examplebelow}
\ksforloop{}{55}{\kswonnum[type=hcr]{\ksfori}\ }\\
\ksforloop{}{55}{\kswonnum*[type=hcr]{\ksfori}\ }
\end{examplebelow}


\subsection{\opt{go} 원숫자}

바둑 조판 패키지 \pkg{go}에서 착수를 나타내기 위하여 사용하는 것을 일부 빌려와서 원숫자처럼
식자한다. 약 200까지의 숫자를 지원한다. 다만 이 패키지가 이용하는 폰트는 type 3이다.

\begin{examplebelow}
\ksforloop{}{30}{\kswonnum[type=go]{\ksfori}\ }\\
\ksforloop{}{30}{\kswonnum*[type=go]{\ksfori}\ }
\end{examplebelow}

\subsection{\opt{combi}, CombiNumerals Ltd 폰트}

FontSite Inc.가 제작한 \file{CombiNumerals Ltd} 폰트는 "(비교적) 자유롭게 활용할 수 있는 원숫자 폰트이다.
폰트를 직접 활용하는 것이므로 \hologo{pdfTeX}에서는 쓸 수 없다.
별도로 다운로드 하여 시스템에 설치하여야 이 옵션을 쓸 수 있다. 99까지 두 자리 숫자를 지원한다.

\begin{examplebelow}
\ksforloop{}{30}{\kswonnum[type=combi]{\ksfori}\ }\\
\ksforloop{}{30}{\kswonnum*[type=combi]{\ksfori}\ }
\end{examplebelow}

필요하다면 크기를 적절하게 조절할 수 있다.

\begin{examplebelow}
\ksforloop{}{30}{\kswonnum[scale=1.2,type=combi]{\ksfori}\ }
\end{examplebelow}

\section{카운터}

\showcmd{\ksWonNum,\ksWonNum*}

인자로 카운터 변수가 온다. 원숫자의 type이나 scale 등을 선택해야 한다면 \cmdprint{\selectkswontype} 명령을 이용하도록 하자. 별표가 붙으면 반전 문자이다.

\begin{examplebelow}
\newcounter{test}
\selectkswontype{type=unicode}
\stepcounter{test}\ksWonNum{test}
\stepcounter{test}\ksWonNum{test}
\stepcounter{test}\ksWonNum*{test}
\end{examplebelow}

선택된 type에 따라 사용할 수 있는 수의 범위가 달라진다. 수의 범위에 제한이 없는 경우에는
20까지의 카운터가 유효하다.

\end{document}
