% arara: xelatex
% arara: kotexindy
% arara: xelatex
%% kocircnum document.
%% public domain.
\documentclass[b5paper]{oblivoir}

\usepackage{fapapersize}
\usefapapersize{*,*,1in,*,1in,*}

\usepackage{xcolor}

\usepackage[tikz]{kocircnum}

\usepackage{refcount}
\usepackage{pifont} %%% for test
\usepackage{tabto} %%% for test
\TabPositions{4cm,6cm,10cm,13cm,15cm}

%%% \cnumref
\newcounter{cnumrefcnt}
\newcommand*\cnumref[1]{%
	\setcounterref{cnumrefcnt}{#1}\Cnum{cnumrefcnt}%
}

\usepackage{tabu}
%%% to fix tabu, 2020/02
\RequirePackage{etoolbox}
\makeatletter
\patchcmd
	\tabu@startpboxmeasure
	{\bgroup\begin{varwidth}}%
	{\bgroup
	 \iftabu@spread\color@begingroup\fi\begin{varwidth}}%
	{}{}
\def\@tabarray{\m@th\def\tabu@currentgrouptype{\currentgrouptype}\@ifnextchar[\@array{\@array[c]}}
%
%%% \pdfelapsedtime bug 2019-12-15
\patchcmd
	\tabu@message@etime
	{\the\pdfelapsedtime}%
	{\pdfelapsedtime}%
	{}{}
%
%
\makeatother


\makeindex

\usepackage{ifpxltex}
%\pxlRequireTeX{x,l}

\usepackage{libertineRoman}

\IfpxlTeXpxl* {p} {x,l}
{% pdftex
	\usepackage{graphicx}
	\usepackage[T1]{fontenc}
}
{% xetex or luatex
	\setmainhangulfont[BoldFont={KoPubWorldBatang Bold}]{KoPubWorldBatang Light}
}

\usepackage{etoolbox}
\patchcmd{\theindex}{\addcontentsline{toc}{chapter}}{\addcontentsline{toc}{section}}{}{} 
%\apptocmd{\hologo}{\index{Engines!#1}}{}{}

\usepackage{listings}

%%% See http://www.ktug.org/xe/index.php?document_srl=160107
\usepackage{newverbs}
\let\orighref\href
\renewcommand\href{\Collectverb{\hrefii}}
\newcommand\hrefii[2]{\orighref{#1}{#2}}

\hypersetup{colorlinks}
\usepackage{kotex-logo}

\let\OLDkoTeX=\koTeX
\protected\def\koTeX{\OLDkoTeX\index{Engines!\koTeX}}
\protected\def\xetex{\hologo{XeTeX}\index{Engines!\hologo{XeTeX}}}
\protected\def\xelatex{\hologo{XeLaTeX}\index{Engines!\hologo{XeLaTeX}}}
\protected\def\luatex{\hologo{LuaTeX}\index{Engines!\hologo{LuaTeX}}}
\protected\def\lualatex{\hologo{LuaLaTeX}\index{Engines!\hologo{LuaLaTeX}}}
\protected\def\pdftex{\hologo{pdfTeX}\index{Engines!\hologo{pdfTeX}}}
\protected\def\pdflatex{\hologo{pdfLaTeX}\index{Engines!\hologo{pdfLaTeX}}}
\protected\def\tex{\hologo{TeX}\index{Engines!\hologo{TeX}}}
\protected\def\latex{\hologo{LaTeX}\index{Engines!\hologo{LaTeX}}}

\def\cs#1{\texttt{\textbackslash #1}\index{Commands!\texttt{\textbackslash #1}}}
\def\ct#1{\texttt{#1}\index{Keys!#1}}
\def\ca#1{\texttt{#1}\index{#1}}
\def\st{\textsuperscript{*}}
\def\pkg#1{\textsf{#1}\index{Packages!#1}}
\def\op#1{\texttt{[#1]}\index{Options!#1}}

%\IfpxlTeX* {p}
%{ \let\hcrcircnum=\hzcircnum }

\begin{document}

\title{kocircnum, 원숫자}
\author{Nova De Hi, Dohyun Kim, Yi Hoze}
\date{version 1.2.1 [2020/02/06]}

\maketitle

\begin{abstract}
\hcrcircnum{1}, \hcrcircnum{2}와 같이 동그라미 친 숫자를 식자하게 한다.
이 패키지는 Dohyun Kim의 \pkg{hcrnumbers}와 Yi Hoze의 \pkg{hzmisc}에 있는 명령 \cs{wrapnum},
그리고 새로 정의된 \cs{tikzcircnum} 세 개를 합친 것이다. 간편하게 사용할 수 있는
\cs{circnum}과 카운터 수식자 \cs{Cnum} 명령을 제공한다.
\end{abstract}

\tableofcontents*

\section{소개}

%\koTeX 에는 \cs{onum}이라는 카운터 수식자가 있다. 이것을 사용하여 카운터를 식자하면
%다음과 같은 결과를 얻는다:
%\newcounter{dummy}\newcommand\testonum{\stepcounter{dummy}\onum{dummy}}
%\testonum, \testonum, \testonum, \ldots

동그라미 친 숫자를 식자하는 방법에 대해서 \href{http://faq.ktug.org/faq/%BF%F8%B1%DB%C0%DA}{KTUG의 Faq 페이지 ``원글자''}\footnote{%
	\url{http://faq.ktug.org/faq/\%BF\%F8\%B1\%DB\%C0\%DA}}%
에는 다음과 같은 방법이
소개되어 있다.
\begin{enumerate}[\quad\expandafter\circnum1]\firmlist
\item pifont, dingbat 이용법
\item Combinumerals font를 이용하는 방법
\item \label{itm:hcr} 함초롬체/GSUB\index{함초롬체 LVT}의 nalt 속성 이용법
\item \label{itm:hz} \pkg{tikz}를 이용하여 그리기
\item 그밖의 방법
\end{enumerate}
이 가운데 \pkg{pifont} 방법은 사용할 수 있는 숫자가 너무 적고 \koTeX 의 \cs{onum} 카운터 수식자 역시 15까지만 가능하다. 
``임의의 숫자''를 원숫자로 식자하는 방법이 필요해져서 위의 페이지에 제시된 여러 가지 방법이 나왔다.
이 가운데 \cnumref{itm:hcr}번 방법과 \cnumref{itm:hz}번 방법을 하나의 패키지로 합친 것이 \pkg{kocircnum}이다.

이 패키지에 포함된 코드 가운데 \cs{hcrcircnum}은 Dohyun Kim이 작성한 \pkg{hcrnumbers}\textsf{.sty}\footnote{%
	Dohyun Kim, ``함초롬의 nalt 속성을 이용해보자,'' KTUG Team Blog, 2011/06/29, 
	\url{http://www.ktug.org/xe/index.php?document_srl=44737}.
}%
를, \cs{wrapnum}은 이호재의 \pkg{hzmisc}\textsf{.sty}에 포함된 것\footnote{%
	yihoze, ``원숫자,'' KTUG Team Blog, 2014/01/02, \url{http://www.ktug.org/xe/index.php?document_srl=178885}. \pkg{hzguide} 패키지의 일부이다. \url{http://wiki.ktug.org/wiki/wiki.php/hzguide}.
}%
을 가져온 것이다.
나머지 \cs{tikzcircnum}의 정의와 패키지의 구성은 Nova De Hi가 한 것이다.
한편, \pkg{hzmisc}의 \cs{wrapnum}에 대하여, 이 패키지와는 별도로 \pkg{wrapnum}을 만들어두었는데,\footnote{%
	\url{http://www.ktug.org/xe/index.php?document_srl=183347}
}
\pkg{hzmisc}에 기원을 두고 있다는 점은 같으나 이 패키지가 옵션이나 명령 이름, 동작 방식을 대폭 수정한 반면, \pkg{wrapnum} 패키지의 \cs{wrapnum} 명령은 \pkg{hzmisc}의 것과 거의 동일하게 되어 있다.

이 패키지의 v1.2에서 \pkg{hcrnumbers}의 코드를 대폭 재구현하면서 원본 \pkg{hcrnumbers}\textsf{.sty}를 별도의 스타일로
포함해 두었다. 이 패키지만이 필요하다면 \pkg{hcrnumbers}를 사용하기 바란다.

\section{사용법}

\subsection{요구사항}
\begin{itemize}\firmlist
%\item 이 패키지는 \xelatex, \lualatex 에서 정상적으로 동작한다. \pdflatex 에서 컴파일이 거부되지는 않으나 오픈타입 속성을 사용하는 \cs{hcrcircnum}은 원래의 의도대로 동작하지 못한다. \cs{hcrcircnum}이 쓰인 곳에서 \cs{hzcircnum}이 대신 동작한다.
\item \xelatex, \lualatex\ 사용시 (패키지 디폴트인) \cs{hcrcircnum}을 쓰려면 함초롬체/GSUB 글꼴\index{함초롬체 LVT}\footnote{%
	\url{http://faq.ktug.org/faq/\%c7\%d4\%c3\%ca\%b7\%d2\%c3\%bc/GSUB}
}%
이 설치되어 있어야 한다.
\item \cs{hcrcircnum}을 위해 \xelatex, \lualatex 에서 \pkg{fontspec} 패키지를 필요로 한다.
\item 색상을 제어하기 위해서 \pkg{color} 또는 \pkg{xcolor} 패키지를 로드하여야 한다.
\end{itemize}

\subsection{패키지 사용 선언}

문서의 preamble에 다음과 같이 선언한다.
\begin{boxedverbatim}
\usepackage[<option>]{kocircnum}
\end{boxedverbatim}
옵션으로 줄 수 있는 것은 \op{hcr}, \op{hz}, \op{tikz}, \op{tikzsmall}, \op{tikzbig}이다.

앞의 세 옵션은 \cs{circnum}의 동작을 선택하는 것이다. 
이 패키지는 \cs{circnum}이라는 명령을 정의하는데, 이 명령의 의미가 옵션에 따라 달라진다.
옵션을 주지 않으면 \op{hcr}과 같다. 어떤 옵션을 주더라도 이 패키지가 정의한 모든 명령을 사용할 수 있으며 다만 \cs{circnum...}의 의미만이 달라진다.
자세한 사항은 \ref{sec:defaultcommand} 소절을 보라.

%한편, \op{tikzsmall} 옵션은 기본적으로 \op{tikz}와 같으나 기본 원숫자 모양이 조금
%다르다. 글자는 \cs{rmfamily}이고 크기가 작으며 외곽선이 black으로 만들어진다. \hologo{XeLaTeX}에서 \koTeX의 \cs{onum}과 꽤 비슷한 모양이 되도록 하였다.
\op{tikzbig}과 \op{tikzsmall}은 기본적으로 만들어지는 원의 크기에 차이가 있고 다른 것은 모두 같다.
단순히 \op{tikz}라고만 하면 \op{tikzsmall}이 된다. 이것은 v1.1의 변경사항이다.
\ref{sec:tikz} 소절에서 설명한다.

%\subsection{문서에서 사용하기}
%
%세 종류의 명령이 사용 가능하다. 각각 \cs{hcrcircnum}, \cs{hzcircnum}, \cs{tikzcircnum}이다.

\IfpxlTeXpxl*{p}{x,l}
{
	\subsection{\textbackslash hcrcircnum}
	\pxlThisTeX 에서 이 명령은 원래 그 의도대로 동작하지 않는다.
	함초롬 LVT 폰트의 고급 오픈타입 속성을 이용하기 때문이다.
	따라서 \pxlThisTeX 에서 이 패키지가 불리면 \cs{hcrcircnum}
	명령을 주더라도 사실상 \cs{hzcircnum}과 동일하게 동작한다.
}
{
	\input \jobname-hcrpart
}

\subsection{\textbackslash hzcircnum}
이호재의 \pkg{hzguide} 패키지 묶음에 들어 있는 \pkg{hzmisc}\textsf{.sty}에는 \cs{wrapnum}이라는
명령이 정의되어 있다. 이 코드를 가져와서 Nova De Hi가 수정하였다. 코드 사용에 대한 허락은 추후에 받을 계획이다.
\begin{boxedverbatim}
\hzcircnum[shape=<type>,
           color=<color>,
           bgcolor=<background color>,
           fgcolor=<foreground color>,
           sep=<dim>,raise=<dim>,Raise=<dim>,
           font=<font>,fontplus=<font>,
           base=<text>,reset]{number}
\hzcircnum*[ ... ]{number}
\end{boxedverbatim}
\cs{hzcircnum}에 주어지는 옵션 \textit{<key>}는 다음과 같은 의미이다.
\begin{description}\firmlist
\item[\ct{shape}] 숫자를 둘러쌀 모양. circle, rectangle, oval, ball 중에서 선택한다.
\item[\ct{color}, \ct{bgcolor}, \ct{fgcolor}] 색상을 지정한다. 색상은 \pkg{xcolor}의 기정의 색상이나 자신이 \cs{definecolor}한 것을 모두 쓸 수 있다. \ct{color}는 bgcolor와 fgcolor를 일괄지정하는 옵션으로서 \ct{color}\texttt{=black}으로 하면 검은 바탕에 흰 숫자, \ct{color}\texttt{=white}로 하면 흰 바탕에 검은색 숫자가 찍힌다. 이 이외의 색상을 주면 주어진 색상을 bgcolor로 하고 숫자는 white가 된다.
\item[\ct{sep}] 길이값을 준다. 둘러싸는 도형과 숫자 사이의 간격. 이 값이 커지면 둘러싸는 도형 자체가 커진다.
\item[\ct{raise}, \ct{Raise}] 원숫자의 수직 이동값을 길이값으로 지정한다. 기본값은 $-0.5$ex이다. \ct{raise} 옵션은 이미 주어진 기본값을 기준으로 이동할 길이를 정한다. 반면 기본값을 무시하고 절대 길이값을 주려면 \ct{Raise}로 지정한다.
\item[\ct{font}, \ct{fontplus}] 숫자를 식자할 폰트. 기본값은 \{\cs{sffamily}\cs{footnotesize}\}이다. \ct{fontplus}는 현재의 폰트 설정을 그대로 두고 인자로 주어진 값을 그 후에 추가한다. 폰트 패밀리는 그대로 두고 사이즈만 바꾼다든가 할 때 유용하다.
\item[\ct{base}] 주어진 텍스트의 너비를 기준으로 원숫자를 그린다.
\item[\ct{reset}] 모든 옵션 설정을 되돌린다.
\end{description}

편의를 위해 약어 옵션이 마련되어 있다. 각각 \ct{circle}, \ct{rectangle}, \ct{oval}, \ct{ball}만을 써도 \ct{shape}\texttt{=circle} 등으로 한 것과 동일하며, \ct{rectangle}은 \ct{rect}로, \ct{circle}은 \ct{circ}로 줄여쓸 수도 있다. 색상 관련 약어는 \ct{white}와 \ct{black}이 있고 의미는 \ct{color}\texttt{=white} 등으로 한 것과 동일하다.

별표붙은 명령의 사용법은 앞서 \cs{hcrcircnum}의 경우와 같다. 기본값으로 되돌리는 것이다.
별표붙은 명령을 쓰는 것과 옵션 처음에 \ct{reset}을 붙이는 것은 동일하다.

\paragraph{사용례}

이제 사용례를 보자.
아무런 옵션을 주지 않으면 다음처럼 된다.
\begin{verbatim}
\hzcircnum{5}, \hzcircnum{67}
\end{verbatim}
\hzcircnum{5}, \hzcircnum{67}

\subparagraph{shape}
shape는 약어로 옵션을 줄 수 있다.
\begin{verbatim}
\hzcircnum[shape=circle]{5}, \hzcircnum[shape=ball]{5}, 
\hzcircnum[shape=rectangle]{5},
\hzcircnum[shape=oval]{5},
\hzcircnum[circ]{7},
\hzcircnum[rect]{7}
\end{verbatim}
\hzcircnum[shape=circle]{5}, \hzcircnum[shape=ball]{5}, 
\hzcircnum[shape=rectangle]{5},
\hzcircnum[shape=oval]{5},
\hzcircnum[circ]{7},
\hzcircnum[rect]{7}

\subparagraph{sep}
rectangle이나 oval은 \ct{sep} 값을 조금 주는 편이 좋다.
\begin{verbatim}
\hzcircnum[shape=rectangle,sep=1.5pt]{5},
\hzcircnum[shape=oval,sep=1.5pt]{5}
\end{verbatim}
\hzcircnum*[shape=rectangle,sep=1.5pt]{5},
\hzcircnum[shape=oval,sep=1.5pt]{5}

\subparagraph{color}
color를 바꾸어 본다. 아래의 보기들은 일단 초기화한 후에 해당 속성만 바꾼 것이다.
초기화 명령을 별도로 보이지 않았다. white와 black은 약어를 쓸 수 있다.
\begin{verbatim}
\hzcircnum[black]{5}, \hzcircnum[color=blue]{5},
\hzcircnum[color=red]{5}, \hzcircnum[color=orange]{5},
\hzcircnum[white]{5}
\end{verbatim}
\hzcircnum[reset,black]{5}, \hzcircnum[color=blue]{5},
\hzcircnum[color=red]{5}, \hzcircnum[color=orange]{5},
\hzcircnum[white]{5}

\medskip

fgcolor와 bgcolor를 별도로 설정할 수 있다.
\begin{verbatim}
\hzcircnum[fgcolor=red,bgcolor=blue]{5}
\end{verbatim}
\hzcircnum*[fgcolor=red,bgcolor=blue]{5}

\subparagraph{font}
font를 설정할 수 있다.
\begin{verbatim}
\hzcircnum[color=blue,font={\rmfamily\itshape}]{5},
\hzcircnum{6}
\end{verbatim}
\hzcircnum*[color=blue,font={\rmfamily\itshape}]{5},
\hzcircnum{6}

\medskip

fontplus를 써서 현재의 폰트 속성에 \cs{bfseries}를 추가해본다.
\begin{verbatim}
\hzcircnum[fontplus={\bfseries}]{5},
\hzcircnum{6}
\end{verbatim}
\hzcircnum[fontplus={\bfseries}]{5},
\hzcircnum{6}

\subparagraph{raise와 sep}
raise와 sep 길이값을 테스트한다. 초기화를 위해 별표붙은 명령을 썼다.
\begin{verbatim}
a, b, c, 1, 2, 3, \hzcircnum*[raise=3pt,sep=3pt]{7},
\hzcircnum[Raise=3pt]{8}
\end{verbatim}
a, b, c, 1, 2, 3, \hzcircnum*[raise=3pt,sep=3pt]{7},
\hzcircnum[Raise=3pt]{8}

여기서 \ct{raise}와 \ct{Raise}가 다른 이유는 기본적으로 \cs{hzcircnum}이
약간 내려찍는 것을 디폴트로 하고 있기 때문이다. \ct{raise}는 이렇게 디폴트로
식자된 위치에서 주어진 값만큼 올려찍는 데 비해 \ct{Raise}는 기본값을 무시하고 
주어진 길이만큼 박스를 올려찍는다. 일반적인 목적에는 \ct{raise}만으로 충분하다.
다음 예를 보면 의미가 분명하리라 본다.
\begin{verbatim}
1, 2, 3, \hzcircnum*{4}, \hzcircnum[raise=0pt]{5},
\hzcircnum[Raise=0pt]{6}
\end{verbatim}
1, 2, 3, \hzcircnum*{4}, \hzcircnum[raise=0pt]{5}, \hzcircnum[Raise=0pt]{6}

즉, \ct{raise}\texttt{=0pt}로 하였을 때 기본적으로 식자되는 것과 위치가 동일하다는 것이다.
반면 \ct{Raise}\texttt{=0pt}는 0pt라는 숫자에도 불구하고 위치가 꽤 올라가게 된다.
사용자 입장에서 \ct{Raise}\texttt{=0pt}는 혼동스러울 수 있다.

\subparagraph{base}
base값과 font를 바꾸어서 세 자리 숫자를 식자해보자. 다음 예에서 `333'을 지정한 것은 
이 세 자리 숫자가 차지하는 간격만큼을 기준으로 원숫자를 그린다는 의미이다.(base 옵션을 font보다 나중에 주는 것이 좋다.)
\begin{verbatim}
\hzcircnum[font={\sffamily\tiny},base=333]{989}
\end{verbatim}
\hzcircnum[font={\sffamily\tiny},base=333]{989}

\paragraph{선언형 설정 명령과 리셋 명령}

\begin{boxedverbatim}
\hzcircnumsetup{ <keyval list> }
\restorehzcircnumsetup
\end{boxedverbatim}
\cs{hzcircnumsetup}은 
옵션으로 줄 인자를 미리 선언하는 형식의 명령이다. 
맨처음의 기본값으로 바꾸려면 \cs{restorehzcircnumsetup}을 선언한다.

\restorehzcircnumsetup\forcerestoretikzcircnumsetup
\subsection{\textbackslash tikzcircnum}\label{sec:tikz}
위의 \cs{hzcircnum}와 마찬가지로 \pkg{tikz}를 이용하여 원숫자를 그리도록 한 것이다.
많은 부분이 \cs{hzcircnum}과 유사하다. 원래 이것은 Nova De Hi가 \cs{hzcircnum}과 별도로 만들었던 명령에 기원을 두고 있는데 하나의 패키지로 합치면서 옵션과 동작을 일치시키려다보니 거의 유사한 명령이 만들어졌다. 그러나 \cs{hzcircnum}과 다른 방식으로 동작하는 부분이 몇 가지 있고 기본적으로 만들어지는 원숫자의 모양도 조금 다르다.
\begin{boxedverbatim}
\tikzcircnum[shape=<shape>,
             color=<color>,bgcolor=<background color>,
             fgcolor=<foreground color>,
             bdcolor=<border line color>,colorinv=<color>,
             round=<dim>,raise=<dim>,Raise=<dim>,
             sep=<dim>,sepplus=<dim>,
             font=<font>,fontplus=<font>,base=<text>,
             linewidth=<dim>,
             reset]{number}
\tikzcircnum*[ ... ]{number}
\end{boxedverbatim}
\cs{tikzcircnum}에 주어지는 옵션의 의미는 다음과 같다.
\begin{itemize}\firmlist
\item shape에서 선택할 수 있는 것은 \ct{circle}, \ct{rectangle}, \ct{ball}이다.
이 세 가지 shape에 대해서는 약식 옵션이 마련되어 있어서 \ct{shape}\texttt{=circle} 대신
\ct{circle}이라고만 해도 좋다.

\item \ct{color} 옵션의 의미가 black, white가 아닌 일반 색상일 경우
\cs{hzcircnum}과 다른 점은 배경색이 아니라 전경색을 칠하게 한다는 것이다.
만약 \cs{hzcircnum}의 \ct{color}와 같은 의미가 되게 하려면 \ct{colorinv}로
지정해야 한다. \ct{bdcolor}(또는 \ct{linecolor})는 외곽선을 그리는 색상을 지정한다.\footnote{%
	외곽선 색상은 \xelatex 에서만 정상 동작한다.
}

\item 이 명령에만 있는 \ct{round}는 \ct{rectangle}을 shape로 선택했을 때만 의미가
있는 것으로 \pkg{tikz}의 \ct{rounded corners} 값이다. 이 key가 없으면 아무런 역할도
하지 않지만 단순히 \ct{round}라고만 선언해도 기본값인 2pt를 넘겨준다. 물론 길이값을 
지정할 수 있다. \ct{round}를 선언한 \ct{rectangle}은 \cs{hzcircnum}의 \ct{oval}과 거의 같다.

\item 이 명령에만 있는 \ct{linewidth}는 외곽선의 두께를 지정한다. 기본값은 0.4pt로서 tikz의 \ca{thin}에
해당한다.

\item 그밖의 것은 \cs{hzcircnum}의 옵션과 비슷하여 더 설명할 것이 없다.
\end{itemize}

\paragraph{사용례}
아무 옵션도 주지 않으면 다음과 같다 (\op{tikzbig}).
\begin{verbatim}
\tikzcircnum{5}, \tikzcircnum{25}
\end{verbatim}
\tikzcircnum{5}, \tikzcircnum{25}

\paragraph{tikzsmall}
패키지 옵션으로 \op{tikzsmall}을 주면 \cs{tikzcircnum}(\cs{circnum})으로
찍히는 원숫자의 모양이 달라진다. 다음은 그 모양을 보인 것이다.
\begin{verbatim}
\tikzcircnum{5}, \tikzcircnum{25}, \tikzcircnum{99}
\end{verbatim}
\declaretikzcircnumsmallsetup
\tikzcircnum{5}, \tikzcircnum{25}, \tikzcircnum{99}

\forcerestoretikzcircnumsetup

\subparagraph{shape}
shape를 rectangle로. 이 속성은 이후로 이어받는다. 약어 옵션을 쓸 수 있다.
round를 지정하되 값을 정해주지 않으면
기본값인 2pt가 쓰인다.
\begin{verbatim}
\tikzcircnum[shape=rectangle]{5},
\tikzcircnum{25},
\tikzcircnum[round]{10},
\tikzcircnum[round=5pt]{15},
\tikzcircnum[ball]{8}
\end{verbatim}
\tikzcircnum[shape=rectangle]{5},
\tikzcircnum{25},
\tikzcircnum[round]{10},
\tikzcircnum[round=5pt]{15},
\tikzcircnum[ball]{8}


\subparagraph{sep}
sep을 조금 주어보자. 이미 round 값을 주었으므로 shape만 rectangle로 하고 sep값을 변화시킨다.
\begin{verbatim}
\tikzcircnum[rectangle,sep=5pt]{5},
\tikzcircnum[sep=5pt]{25}
\end{verbatim}
\tikzcircnum[rectangle,sep=5pt]{5},
\tikzcircnum[sep=5pt]{25}

\medskip

초기화하고 \ct{sep}과 \ct{sepplus}를 비교해본다. \ct{sepplus}는 현재 설정되어 있는
\ct{sep} 값에 주어진 길이값을 계속 더해가는 것이다.
\begin{verbatim}
\tikzcircnum[reset,sep=0pt]{5},
\tikzcircnum[sepplus=1pt]{6},
\tikzcircnum[sepplus=2pt]{7},
\tikzcircnum[sep=1pt]{8}
\end{verbatim}
\tikzcircnum[reset,sep=0pt]{5},
\tikzcircnum[sepplus=1pt]{6},
\tikzcircnum[sepplus=2pt]{7},
\tikzcircnum[sep=1pt]{8}

\cs{tikzcircnum}은 기본적으로 \ct{sep} 값에 약간의 여유값을 준다. \ct{sep}
길이를 0pt로 하여도 이 여유값은 작용하므로 실제 0pt를 sep으로 하려면 이 값(0.25pt)만큼을 줄여주어야 한다. 이것은 \cs{hzcircnum}과 다른 점이다.
\begin{verbatim}
\tikzcircnum[reset,sep=0pt]{9},
\tikzcircnum[sep=-0.25pt]{9}
\end{verbatim}
\tikzcircnum[reset,sep=0pt]{9},
\tikzcircnum[sep=-0.25pt]{9}


\subparagraph{color}
초기화하고 color를 바꾼다. black과 white는 약어 옵션으로 쓸 수 있다.
\begin{verbatim}
\tikzcircnum*[black]{9}
\tikzcircnum[white]{10}
\end{verbatim}
\tikzcircnum*[black]{9}
\tikzcircnum[white]{10}

\begin{verbatim}
\tikzcircnum*[color=blue]{5}
\tikzcircnum[color=green]{25}
\end{verbatim}
\tikzcircnum*[color=blue]{5}
\tikzcircnum[color=green]{25}

\medskip

\ct{colorinv}는 black, white일 때는 \ct{color}와 같다. 그러나 일반 색상이면  \cs{hzcircnum}에서의 \ct{color} 효과처럼 배경에 지정된 색상을 칠하고 전경을 흰색으로 한다.
\begin{verbatim}
\tikzcircnum*[colorinv=blue]{5}
\tikzcircnum[colorinv=green]{25}
\tikzcircnum[colorinv=white]{6}
\tikzcircnum[colorinv=black]{16}
\end{verbatim}
\tikzcircnum*[colorinv=blue]{5}
\tikzcircnum[colorinv=green]{25}
\tikzcircnum[colorinv=white]{6}
\tikzcircnum[colorinv=black]{16}

\medskip

초기화하고 배경색과 전경색을 각각 바꾸어본다.
\begin{verbatim}
\tikzcircnum*[bgcolor=black,fgcolor=green]{5}
\tikzcircnum[bgcolor=orange,fgcolor=white]{25}
\end{verbatim}
\tikzcircnum*[bgcolor=black,fgcolor=green]{5}
\tikzcircnum[bgcolor=orange,fgcolor=white]{25}

\ifXeTeX
\medskip

초기화하고 외곽선 색상을 바꾼다. 외곽선의 디폴트는 gray이다.(단, \op{tikzsmall}이면 black).
\begin{verbatim}
\tikzcircnum*[bdcolor=blue]{5},
\tikzcircnum[bdcolor=red]{25},
\tikzcircnum[reset]{6}
\end{verbatim}
\tikzcircnum*[bdcolor=blue]{5},
\tikzcircnum[bdcolor=red]{25},
\tikzcircnum[reset]{6}
\fi

\subparagraph{font}
초기화하고 font를 바꾼다.
\begin{verbatim}
\tikzcircnum*[font={\rmfamily\bfseries}]{5},
\tikzcircnum{6}
\end{verbatim}
\tikzcircnum*[font={\rmfamily\bfseries}]{5},
\tikzcircnum{6}

\medskip

fontplus로 \cs{itshape}를 추가해보자.
\begin{verbatim}
\tikzcircnum[fontplus={\itshape}]{5}
\end{verbatim}
\tikzcircnum[fontplus={\itshape}]{5}

\subparagraph{raise, Raise}
raise를 바꾼다. \ct{raise}와 \ct{Raise}의 차이는 
\cs{hzcircnum}의 경우와 같다. 초기화하지 않으므로 직전에 테스트한 폰트 속성을 이어받는다.
\begin{verbatim}
1,2,3,4,\tikzcircnum[raise=0pt]{5},
\tikzcircnum[Raise=0pt]{6},7
\end{verbatim}
1,2,3,4,\tikzcircnum[raise=0pt]{5},
\tikzcircnum[Raise=0pt]{6},7

\subparagraph{base}
\cs{hzcircnum}과 같이 \ct{base}로 크기를 재설정할 수 있다.
폰트를 바꾸면 크기 설정에 영향을 미친다. 따라서 font를 base보다 앞서 선언하는 것이 좋다.
\begin{verbatim}
\tikzcircnum[reset,base=999]{16},
\tikzcircnum[reset,font={\sffamily\large},base=000]{16},
\tikzcircnum[reset,base=999]{999}
\end{verbatim}
\tikzcircnum[reset,base=999]{16},
\tikzcircnum[reset,font={\sffamily\large},base=000]{16},
\tikzcircnum[reset,base=999]{999}

\subparagraph{linewidth}
외곽선의 두께를 조절한다.
\begin{verbatim}
\tikzcircnum[reset,linewidth=1pt]{5},
\tikzcircnum[reset,linewidth=2pt]{6},
\tikzcircnum[reset,bdcolor=blue,linewidth=1.5pt]{7}
\end{verbatim}
\tikzcircnum[reset,linewidth=1pt]{5},
\tikzcircnum[reset,linewidth=2pt]{6},
\tikzcircnum[reset,bdcolor=blue,bdwidth=1.5pt]{7}

\medskip

참고로, \ct{linewidth} 대신 \ct{bdwidth}라고 할 수 있으며, 마찬가지로
\ct{bdcolor} 대신 \ct{linecolor}라고 해도 된다.

\paragraph{선언형 옵션 명령과 리셋 명령}
\begin{boxedverbatim}
\tikzcircnumsetup{ <keyval list> }
\restoretikzcircnumsetup
\end{boxedverbatim}
\cs{tikzcircnumsetup}은 옵션값을 설정하는 명령이다. 
\cs{restoretikzcircnumsetup}을 선언하면
모든 설정값을 원래의 기본값으로 초기화한다.
\op{tikz}, \op{tikzsmall}, \op{tikzbig} 옵션을 선언한 상태라면
\cs{circnumsetup}과 \cs{restorecircnumsetup} 명령을 쓸 수 있다.
\cs{restoretikzcircnumsetup} 명령은 \ct{reset}하거나 별표 붙인 \cs{tikzcircnum}을 쓴 것과 
효과가 동일하다.

\paragraph{한 번만 적용되는 설정}
\begin{boxedverbatim}
\tikzcircnumonce[ <keyval list> ]{number}
\end{boxedverbatim}
다른 명령군에는 없고 \cs{tikz...}에만 있는 명령이다.
이것은 주어진 옵션의 설정으로 단 한 번만 식자하게 한다. 그 뒤로는 
설정이 이어지지 않고 이 명령이 주어지기 직전 설정을 따른다. 

\begin{verbatim}
\tikzcircnum[reset]{1},
\tikzcircnum[color=black]{2},
\tikzcircnumonce[rect,colorinv=red,round]{3},
\tikzcircnum{4}
\end{verbatim}
\tikzcircnum[reset]{1},
\tikzcircnum[color=black]{2},
\tikzcircnumonce[rect,colorinv=red,round]{3},
\tikzcircnum{4}

\medskip

위의 예에서 3을 식자한 뒤의 4는 그 이전 2를 식자할 때의 설정을 그대로 보존하고 있다.
이 명령은 예를 들면 장절 표제의 번호를 원숫자로 식자하고자 할 때 필요하다.
왜냐하면 절표제를 식자하면서 사용했던 설정이 본문에 계속 영향을 미쳐서는 곤란하기 때문이다.
\ref{sec:sectitle}절에서 그 사용례를 볼 수 있다.

\op{tikz}나 \op{tikzsmall} 옵션을 준 경우에는 \cs{circnumonce} 명령을 쓸 수 있고 \cs{tikzcircnumonce}와 같다.


\paragraph{디폴트 옵션의 사용자화}

\begin{boxedverbatim}
\settikzcircnumsetup{ <keyval list> }
\end{boxedverbatim}

다른 명령군에는 없고 \cs{tikz...}에만 있는 명령이다. \cs{settikzcircnumsetup}은
문서 전체에 대해서 \cs{tikzcircnum}의 디폴트 값을 일괄 변경하고자 할 때 사용한다.
즉 자신이 설정한 어떤 모양을 \cs{tikzcircnum}의 기본 모양으로 선언하는 것이다.
이 명령이 주어진 다음에는 별표붙은 명령이나 \cs{restoretikzcircnumsetup}을 주면 
원래의 기본값으로 돌아가는 것이 아니라 이 명령의 인자로 주어진 설정으로 되돌아간다.
단, 이 명령의 인자에서 지정되지 않은 key 옵션은 복원되지 않는다.
문서의 앞부분에 선언한 다음 마치 기본값처럼 사용할 수 있다. preamble과 문서 중간 어디서나 가능하다.

%다음 보기는 원래의 \op{tikzbig}에서 원숫자가 다른 것에 비하여 조금 크게 되어 있기 때문에
%크기를 줄여서 사용하기 위해 설정한 예이다.(\pageref{sec:test} 페이지 테스트 참조.)
%물론 이와 비슷한 효과를 \op{tikzsmall}을 선언하면 얻을 수 있지만 여기서는 
%테스트를 겸하여 \cs{settikzcircnumsetup}을 이용하는 예로 보이겠다.
다음 보기는 \cs{settikzcircnumsetup}을 테스트하기 위하여 조금 큰 크기의 원숫자를 만들어서
기본값처럼 사용하는 예를 보이겠다. \ct{reset}을 위하여 크기만이 아니라 다른 옵션도 미리 설정해두면 좋다.
\cs{settikzcircnumsetup}을 선언한 후에 \ct{reset}하면 새로이 선언된 설정으로
되돌아가는 것을 주의하여 보라.
\begin{verbatim}
\settikzcircnumsetup{shape=circle,color=white,sep=0.5pt,
         raise=-0.2ex,bdcolor=gray,linewidth=0.4pt,
         font={\sffamily\Large},base=00}
\tikzcircnum{2},
\tikzcircnum[ball]{3},
\tikzcircnum[reset]{4}
\end{verbatim}
\settikzcircnumsetup{shape=circle,color=white,sep=0.5pt,
         raise=-0.2ex,bdcolor=gray,linewidth=0.4pt,
         font={\sffamily\Large},base=00}
\tikzcircnum{2},
\tikzcircnum[ball]{3},
\tikzcircnum[reset]{4}

\paragraph{복원 명령}

%\begin{boxedverbatim}
%\forcerestoretikzcircnumsetup
%\end{boxedverbatim}
%
%\cs{forcerestoretikzcircnumsetup} 선언을 하면 \cs{settikzcircnumsetup}에 의해 설정된 모든 값을 버리고 
%\ct{tikzbig} 상태로 완전히 리셋한다. 원래 패키지 옵션이 무엇으로 주어져 있든 상관없다.
%
%\begin{verbatim}
%\tikzcircnum{6},
%\forcerestoretikzcircnumsetup
%\tikzcircnum{7}
%\end{verbatim}
%\tikzcircnum{6},
%\forcerestoretikzcircnumsetup
%\tikzcircnum{7}
%
%\medskip
%
%패키지 옵션으로 \op{tikzbig}, \op{tikzsmall}을 주었다면 \cs{setuptikzcircnumsetup} 명령을 사용한 후에 \cs{circnumsetup}이나 \cs{circnum*}, \cs{restorecircnumsetup}을 써도 같은 방식으로 동작한다.
%다음은 이 과정 전체를 시험해본 것이다.
%
%\begin{verbatim}
%%%% tikz default
%\settikzcircnumsetup{shape=circle,fgcolor=black,sep=-0.5pt,
%       raise=-0.1ex,bgcolor=white,bdcolor=gray,
%       font={\sffamily\fontsize{7.5}{10}\selectfont}}
%\circnum{2}
%\circnumsetup{shape=ball}\circnum{3}
%\circnum*{4}
%\circnumsetup{color=white,bgcolor=blue}\circnum{5}
%\restorecircnumsetup
%\circnum{6}
%\forcerestoretikzcircnumsetup
%\circnum{7}
%\end{verbatim}
%\settikzcircnumsetup{shape=circle,fgcolor=black,sep=-0.5pt,
%       raise=-0.1ex,bgcolor=white,bdcolor=gray,
%       font={\sffamily\fontsize{7.5}{10}\selectfont}}
%\circnum{2}
%\circnumsetup{shape=ball}\circnum{3}
%\circnum*{4}
%\circnumsetup{color=white,bgcolor=blue}\circnum{5}
%\restorecircnumsetup
%\circnum{6}
%\forcerestoretikzcircnumsetup
%\circnum{7}

\begin{boxedverbatim}
\declaretikzcircnumsmallsetup
\declaretikzcircnumbigsetup
\end{boxedverbatim}
%\cs{declaretikzcircnumsmallsetup}은 패키지 옵션으로 \op{tikzsmall}을 주었을 때,
%\cs{declaretikzcircnumbigsetup}은 패키지 옵션으로 \op{tikzbig}을 주었을 때만 사용할 수 있는 명령이다.
%이 옵션이 없으면 이 명령은 사용할 수 없다.

\cs{declaretikzcircnumsmallsetup}과 \cs{declaretikzcircnumbigsetup}은
어떤 상황에서도 \op{tikzsmall}과 \op{tikzbig}의 초기 설정으로 강제로 되돌리는 명령이다.

\op{tikzbig}이나 \op{tikzsmall} 옵션이 주어지면 \cs{tikzcircnum}은 원숫자를 크거나 작은 모양으로
식자하는데, 중간에 \cs{settikzcircnumsetup}을
이용한다든가 하여 바뀐 모양을 쓰다가 다시 
원래의 모양으로 돌아오게 하기 위한 명령이다.

다음은 이 과정 전체를 시험해본 것이다.
%의도하지 않은 효과를 피하기 위해서 \cs{declare...}를 쓴 후에
%처음 오는 명령에는 \ct{reset}해주는 것이 좋다.

\begin{verbatim}
%%% tikzsmall default
\declaretikzcircnumsmallsetup
\circnum{2}
\circnumsetup{shape=ball}\circnum{3}
\circnum*{4}
\circnumsetup{colorinv=blue}\circnum{5}
\restorecircnumsetup
\circnum{6}
\declaretikzcircnumbigsetup
\circnum{7}
\circnum[ball]{8}
\circnum[reset,colorinv=blue]{9}
\declaretikzcircnumsmallsetup
\circnum{10}
\end{verbatim}
\declaretikzcircnumsmallsetup
\circnum{2}
\circnumsetup{shape=ball}\circnum{3}
\circnum*{4}
\circnumsetup{colorinv=blue}\circnum{5}
\restorecircnumsetup
\circnum{6}
\declaretikzcircnumbigsetup
\circnum{7}
\circnum[ball]{8}
\circnum[reset,colorinv=blue]{9}
\declaretikzcircnumsmallsetup
\circnum{10}


\declaretikzcircnumsmallsetup

\subsection{기본 명령}\label{sec:defaultcommand}
이 세 종류의 원숫자 명령 가운데 사용자는 사실상 한 종류만 쓰면 된다.
그것을 \cs{circnum}으로 명명해두었다.
\begin{boxedverbatim}
\circnum[ <keyval list> ]{number}
\circnum*[ ... ]{number}
\end{boxedverbatim}
패키지 옵션이 없으면 \cs{hcrcircnum}이 \cs{circnum} 명령으로 된다.
패키지 옵션으로 \op{hz}를 선언하면 \cs{circnum}$=$\cs{hzcircnum}이 되고,
마찬가지로 \op{tikz}를 선언하면 \cs{circnum}$=$\cs{tikzcircnum}이 된다.

\begin{boxedverbatim}
\circnumsetup{ <keyval list> }
\restorecircnumsetup
\end{boxedverbatim}
각 기본 명령의 디폴트 값을 바꾸거나 복원하는 명령이다.
사용되는 옵션값들은 기본 명령이 무엇으로 정의되었느냐에 따라 다르다. 
\tref{tab:options}\를 참고하라.

\begin{table}
\centering
\caption{이 패키지가 제공하는 명령}
\begin{tabu}to\linewidth{X[.45]|X[.7]|X|X[1.3]}
\hline
   & 원숫자의 식자 & 옵션 사전 설정 & 옵션 초기화 \\ \hline
대표명령 & \cs{circnum} & \cs{circnumsetup} & \cs{restorecircnumsetup} \\ \hline
\op{hcr}\st & \cs{hcrcircnum} & \cs{hcrcircnumsetup} & \cs{restorehcrcircnumsetup} \\
\op{hz} & \cs{hzcircnum} & \cs{hzcircnumsetup} & \cs{restorehzcircnumsetup} \\
\op{tikz} & \cs{tikzcircnum} & \cs{tikzcircnumsetup} & \cs{restoretikzcircnumsetup} \\ \hline
카운터 & \multicolumn{3}{l}{\cs{Cnum}} \\ \hline
\end{tabu}
\end{table}

\begin{table}
\centering
\caption{명령군별로 사용가능한 keyval 옵션 (default=*)}\label{tab:options}
\begin{tabu}to.9\linewidth{X[.5]|X|X|X}
\hline
             & \cs{hcrcircnum} & \cs{hzcircnum} & \cs{tikzcircnum} \\ \hline
\ct{shape}   & circle\st & circle\st & circle\st \\ 
             & rectangle & rectangle & rectangle \\
             & ---   & oval    & (rectangle+round) \\
             & ---   & ball    & ball \\ \hline
\ct{color}   & <color>, white\st & <color>, white\st & <color>, white\st \\
\ct{bgcolor} & --- & <color>, white\st & <color>, white\st \\
\ct{fgcolor} & --- & <color>, black\st & <color>, black\st \\
\ct{bdcolor} & --- & ---     & <color> \\ \hline
\ct{sep}     & --- & <length>, 0.25pt\st & <length>, 0.25pt\st \\
\ct{sepplus} & --- & --- & <length> \\ \hline
\ct{raise}   & --- & <length>  & <length>  \\ 
\ct{Raise}   & --- & <length>, -0.5ex\st & <length>, -0.6ex\st \\ \hline
\ct{font}    & <font> & <font>   & <font> \\
%             &  & \footnotesize \cs{sffamily}\cs{footnotesize}\st & \footnotesize \cs{sffamily}\cs{small}\st \\
\ct{fontplus} & --- & <font>  & <font> \\ \hline
\ct{base}    & --- & <text> & <text> \\ \hline
\ct{round}   & --- & --- & <length>, 2pt\st \\ \hline
\ct{bdwidth} & --- & --- & <length>, 0.4pt\st \\ \hline
\end{tabu}
\end{table}

\section{카운터와 함께 사용하기}

\koTeX의 카운터 수식자 \cs{onum}은 인자로 주어진 카운터 변수가 1부터 15까지일 때
원숫자를 만들어준다.\footnote{\pkg{kotexdoc} 문서를 참고하라.}
다음과 같이 사용한다. 임의의 카운터를 \texttt{foo}라 하면,
\begin{verbatim}
\newcounter{foo}
\stepcounter{foo} \onum{foo}
\addtocounter{foo}{3} \onum{foo}
\setcounter{foo}{9} \onum{foo}
\end{verbatim}
\newcounter{foo}
\stepcounter{foo} \onum{foo}
\addtocounter{foo}{3} \onum{foo}
\setcounter{foo}{9} \onum{foo}

\begin{boxedverbatim}
\Cnum{ <counter> }
\end{boxedverbatim}
이런 식의 카운터 수식자로 쓸 수 있도록 \cs{Cnum} 명령을 제공한다. \cs{circnum}이 
보통 숫자를 인수로 취하는 것과 달리 이 명령은 반드시 카운터 변수가 와야 한다.
원숫자를 만드는 것은 현재의 \cs{circnum}을 이용하므로 패키지 옵션에 따라 동작이 달라질 것이다. 원숫자의 모양은 \cs{...setup} 명령을 이용하면 된다.
\begin{verbatim}
\setcounter{foo}{5} \Cnum{foo}
\addtocounter{foo}{15} \Cnum{foo}
\circnumsetup{color=red} \stepcounter{foo} \Cnum{foo}
\end{verbatim}
\setcounter{foo}{5} \Cnum{foo}
\addtocounter{foo}{15} \Cnum{foo}
\circnumsetup{color=red} \stepcounter{foo}\Cnum{foo}

\restorecircnumsetup


\section{enumerate에서 사용하기}

\subsection{\cs{Cnum} 카운터 수식자를 이용하기}

\pkg{enumerate} 패키지를 로드하였거나 \pkg{oblivoir} 문서라면 enumerate
환경에 옵션 인자를 사용할 수 있다. 이를 이용하여 원숫자를 enumerate의 글머리에 둘 수 있다.
카운터 수식자 \cs{Cnum}을 이용한다.\footnote{%
	이 방식을 쓰면 참조(ref)에 아이템 라벨이 쓰일 수 없다는 경고가 나올 수 있다.
	`숫자'를 지정하지 않았기 때문에 발생하는 일이다. \ref{sec:cnumref} 소절을 보라.
}
\begin{verbatim}
\begin{enumerate}[\Cnum{enumi}]
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}
\end{verbatim}
\begin{enumerate}[\Cnum{enumi}] \firmlist
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}

한편, \pkg{enumitem} 패키지를 이용하는 경우에는 preamble에
\begin{verbatim}
\usepackage{enumitem}
\AddEnumerateCounter{\Cnum}{\Cnum}{aa}
\end{verbatim}
라고 선언한 후에,
\begin{verbatim}
\begin{enumerate}[label={\Cnum*}]
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}
\end{verbatim}
처럼 하면 같은 결과를 얻을 수 있다. 단 \pkg{enumerate} 방식과 
\pkg{enumitem} 방식을 동시에 쓸 수는 없다.

항목 머리 원숫자의 모양을 바꾸어야 할 경우, 옵션 변경 명령을 사용한다.
다음 예시는 \cs{circnum}$=$\cs{tikzcircnum}인 경우이다.
\begin{verbatim}
\circnumsetup{sep=2pt,fgcolor=white,shape=rectangle,
              bgcolor=blue!80,round,raise=-.2pt}
\begin{enumerate}[\Cnum{enumi}]
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}
\end{verbatim}
\circnumsetup{sep=2pt,fgcolor=white,shape=rectangle,
	bgcolor=blue!80,round,raise=-.2pt}
\begin{enumerate}[\Cnum{enumi}] \firmlist
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}

\restorecircnumsetup

\subsection{다른 방법}

\pkg{oblivoir}의 \pkg{enumerate} 방식을 쓸 때,
카운터 수식자 \cs{Cnum}을 이용하지 않고 숫자에 대하여 다음처럼 하는 방법도 있다.

\begin{verbatim}
\begin{enumerate}[\expandafter\circnum1]
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}
\end{verbatim}
\begin{enumerate}[\expandafter\circnum1]\firmlist
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}

옵션을 지정하려면 다음과 같이 할 수 있다.
\begin{verbatim}
%% tikzsmall-default
\begin{enumerate}[%
    \circnumsetup{shape=circle,fgcolor=orange!10,bgcolor=blue}%
    \expandafter\circnum1]
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}
\end{verbatim}
\begin{enumerate}[\circnumsetup{shape=circle,fgcolor=orange!10,bgcolor=blue}%
	\expandafter\circnum1]
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}

\restorecircnumsetup

명령군 각각에 대하여 비슷한 방식으로 할 수 있다.
%\begin{verbatim}
%\begin{enumerate}[%
%	\tikzcircnumsetup{shape=rectangle,color=red,sep=1pt,raise=-1pt}%
%	\expandafter\tikzcircnum1]
%\item 첫번째 아이템
%\item 두번째 아이템
%\item 세번째 아이템
%\end{enumerate}
%\end{verbatim}
%\begin{enumerate}[%
%	\tikzcircnumsetup{shape=rectangle,color=red,sep=1pt,raise=-1pt}%
%	\expandafter\tikzcircnum1] \firmlist
%\item 첫번째 아이템
%\item 두번째 아이템
%\item 세번째 아이템
%\end{enumerate}
%
\begin{verbatim}
\begin{enumerate}[%
    \hzcircnumsetup{shape=oval,color=red,sep=1.5pt}%
    \expandafter\hzcircnum1]
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}
\end{verbatim}
\begin{enumerate}[%
	\hzcircnumsetup{shape=oval,color=red,sep=1.5pt}%
	\expandafter\hzcircnum1] \firmlist
\item 첫번째 아이템
\item 두번째 아이템
\item 세번째 아이템
\end{enumerate}

\subsection{아이템을 참조하기}\label{sec:cnumref}

아이템에 label을 달고 나중에 그것을 참조하려 할 때가 있다. 피참조자를 원숫자로
표현하고자할 때, 앞서 보인 \cs{Cnum}\texttt{\{enumi\}}를 쓰면 아이템에서 
카운트되지 않기 때문에 쓸 수가 없다.
그러나 \cs{circnum}\texttt{1} 방식을 쓰면 이것을 가능하게 할 수 있다.

\pkg{refcount} 패키지를 이용하여, preamble에서 다음과 같이 \cs{cnumref} 명령을 정의한다.
\begin{verbatim}
\usepackage{refcount}
\newcounter{cnumrefcnt}
\newcommand*\cnumref[1]{%
    \setcounterref{cnumrefcnt}{#1}\Cnum{cnumrefcnt}%
}
\end{verbatim}
이제 다음 코드를 보자.
\begin{verbatim}
\begin{enumerate}[\expandafter\circnum1]
\item item 1
\item \label{itm:test} item 2
\item item 3
\end{enumerate}
now, it's \cnumref{itm:test}.
\end{verbatim}
\begin{enumerate}[\expandafter\circnum1] \tightlist
\item item 1
\item \label{itm:test} item 2
\item item 3
\end{enumerate}
now, it's \cnumref{itm:test}.

당연히, \cs{cnumref} 결과는 두번째로 컴파일할 때 나타난다.

\section{섹션 타이틀에 쓰는 방법}\label{sec:sectitle}

이렇게까지 해야 하는가 생각이 든다. 결코 좋은 발상은 아니지만 굳이 해보겠다면\ldots,
\pkg{memoir}나 \pkg{oblivoir}에서는 다음과 같이 간단하게 할 수 있다.
\cs{circnumonce}는 \op{tikz} 또는 \op{tikzsmall} 패키지 옵션을 주었을 때
사용할 수 있는 명령이다.
\begin{verbatim}
\setsechook{%
  \setsecnumformat{%
    \circnumonce[colorinv=blue,font={\bfseries\Large},base={00},raise=-1pt]%
    \csname the##1\endcsname\quad}}
\section{test}
\end{verbatim}
\setsechook{%
  \setsecnumformat{%
    \circnumonce[colorinv=blue,font={\bfseries\Large},base={00},raise=-1pt]%
    \csname the##1\endcsname\quad}}

이 문서의 다음 절이 이 모양으로 나타날 것이다.

\section{기타}

이 패키지와 문서는 public domain이다.
오류 지적, 개선에 대한 토론은 \href{http://www.ktug.org}{KTUG 게시판}을 통해서 하기를 원한다.

\setsechook{\setsecnumformat{\csname the##1\endcsname\quad}}

\section{변경 사항}

\begin{description} \firmlist
\item [2014/06/16] ver1.2: \cs{hcr...}에 변경사항. \cs{hcrcircnum}의 기본 코드를 재구현.
\item [2014/06/15] ver1.1: \cs{tikz...}에 변경사항. \op{tikz}를 \op{tikzsmall}과 같은 의미로 하고 \op{tikzbig}을 새로 만듦. \ct{linewidth} 옵션 추가.
\item [2014/06/09] ver1.0: \cs{tikz...}에 변경사항. 기본명령을 \cs{circnum}과 같이 소문자로 바꿈.
\item [2014/06/08] ver0.8: \op{tikzsmall} 추가. \cs{declaretikzcircnumsmallsetup}.
\item [2014/06/07] ver0.7: \cs{tikz...}에 \cs{settikzcircnumsetup} 추가.
\item [2014/06/07] ver0.6: \cs{tikz...}에 \ct{round} 옵션과 ball 추가.
\item [2014/06/07] ver0.5: \cs{hz...} 코드 개편. 별표붙은 명령 도입.
\item [2014/06/06] ver0.4: \cs{tikzcircnum}이 두 자릿수 이상이 될 때 크기를 미세조정함.
\item [2014/06/06] ver0.3: \cs{hzcircnum}의 옵션 \textit{<key>}를 다른 명령과 일치하도록 수정.
\item [2014/06/06] ver0.2: 버그 수정.
\end{description}

\section{구현}

\begin{Spacing}{1}

\IfpxlTeX* {x,l}
{
	\setmonofont[Scale=.9]{Monaco}
}

\lstset{%
	basicstyle=\ttfamily\small,
	keywordstyle=\color{blue}\bfseries,
	numbers=left,
	numberstyle=\tiny,
	tabsize=4,
	morekeywords={tl_new,tl_set,cs_new_nopar,NewDocumentCommand,ExplSyntaxOn,
				  ExplSyntaxOff,cs_new_protected_nopar,cs_new_protected,
				  group_begin,group_end,IfBooleanTF, IfNoValueTF,
				  tl_if_empty,Nn,Npn,n,nn,nnn,nTF,cs_end,cs,s,o,m,N,
				  cs_new,DeclareDocumentCommand,def,newcommand,
				  edef,ifx,else,fi,ifnum,expandafter,let,
				  keys_define,keys_set,IfBooleanT,IfValueT,tl_set,tl_gset,
				  code,dim_new,dim_set,dim_gset,settowidth,
				  if_mode_vertical,str_case,str_case_x,tl_set_eq,tl_put_right,
				  tl_put_left,dim_set_eq,dim_sub,meta,int_compare_p, bool_if,
				  int_div_truncate,str_if_eq_x,hbox_overlap_left,tl_if_eq,int_eval},
}

\pkg{hcrnumbers}의 정의를 흉내내어 다시 구현한다. 핵심은 숫자를 분석하여 
자릿수와 색상, 모양에 따라 적절한 Annotation 번호를 얻어내는 것이다.
\pkg{hcrnumbers}에서는 예컨대 \cs{circlenumber}\texttt{ 234}와 같은 선언에서 이 숫자를
세 개의 토큰으로 보고 \verb|\XXXcirclenumber #1#2#3|으로 처리하는데
여기서는 그렇게 하지 않고 숫자를 분석해서 자릿수를 각각 얻어내는 방법을 취했다.
확실히 위의 방법에 비하여 계산이 복잡해지는 감이 있기는 하나 Expl3의 \verb|\int_div_truncate:nn|의
도움으로 코딩 자체는 매우 쉽다.

\lstinputlisting [firstline=56,lastline=214] {kocircnum.sty}

사용자 인터페이스 명령 \cs{hcrcircnum}은 shape에 주어진 value와 color에 주어진 value를 조합하여 \cs{hcrnumber}\texttt{<shapevalue>}\texttt{<colorvalue>}로 cs 이름을 합친 다음 호출한다.

\lstinputlisting [firstline=227,lastline=282] {kocircnum.sty}

\pkg{hzmisc}에 정의된 \cs{wrapnum}의 실제 구현 명령인 \cs{ovalnum},
\cs{recnum}, \cs{cirnum}, \cs{ballnum}의 코드를 가져와서 일곱 개의
인자를 받아들이는 명령으로 수정한다.

\lstinputlisting [firstline=300,lastline=333] {kocircnum.sty}

이제 \cs{hzcircnum}을 정의하여 key-val list를 처리한 후 이들 일곱 개의
인자에 해당하는 값을 얻어내어 shape의 경우에 따라 위의 명령을 호출한다.

\lstinputlisting [firstline=337,lastline=443] {kocircnum.sty}

\cs{tikzcircnum}은 \cs{hzcircnum}과 거의 같은 방식이지만 하위 명령을 
내부명령으로 하고 분기에 따른 호출 방식이 조금 다르다.

\lstinputlisting [firstline=449,lastline=656] {kocircnum.sty}

\cs{tikzcircnumonce}는 현재 설정을 저장하고 실행한 후 다시 복원하는 것이다.

\lstinputlisting [firstline=659,lastline=710] {kocircnum.sty}

나머지 부분은 옵션을 처리하기 위한 부수적인 코드들이므로 생략한다.
%하고 \cs{tikz...} 관련
%명령의 일부 구현을 보인다.
%
%\lstinputlisting [firstline=753,lastline=780] {kocircnum.sty}

\end{Spacing}

\let\wrapnum=\tikzcircnum

\section{wrapnum 패키지}

%원숫자 식자를 위하여 \pkg{kocircnum.sty}라는 것을 만들었다.\footnote{%
%	\url{http://www.ktug.org/xe/index.php?document_srl=183183}.}
%그런데 이걸 하다 보니, 이렇게 복잡하게 할 필요가 뭐가 있겠는가 싶은 생각이 들었다.

%위의 패키지와는 상관없이, 
이호재 님이 \url{http://www.ktug.org/xe/index.php?document_srl=178885}에서 이미 보여주신 \pkg{wrapnum}으로 충분하다고 생각하실 분도 분명 계실 것이기에, \pkg{wrapnum}\textsf{.sty}라는 것에 대해 여기 메모를 남겨둔다.

\pkg{kocircnum}에서 \cs{wrapnum}을 활용하기는 하였지만 거기서는 \cs{wrapnum}의 원래 모양과는 조금 다른 모양이 되어 버렸다. Myriad Pro 글꼴 부분을 없애버렸고 옵션 이름도 완전히 바뀌었기 때문에 종래 \cs{wrapnum}을 즐겨쓰시던 분들께는 아마 완전히 다른 명령이라는 생각이 들 수도 있다.

여기 올려두는 \pkg{wrapnum}\textsf{.sty}는 원래의 \pkg{hzmisc}에서 식자되는 모양과 동일하고, 옵션 명칭도 똑같이 유지했다. 본질적으로 이 패키지는 \pkg{hzmisc}의 \cs{wrapnum} 부분을 \dotemph{재구현}한 것이다. 패키지를 작성한 로직은 \pkg{kocircnum}의 것에 가깝지만.

\pkg{hzmisc} 대용으로 이것을 쓰시면 될 것이다. \pkg{kocircnum}과 \pkg{wrapnum}을 함께 사용하는 것은 그렇게 할 필요가 없다고 본다. 정상 동작하지 않을 것이다.

\subsection{사용법}

\begin{boxedverbatim}
\wrapnum[ <key val> ]{number}
\setwrapnum{ <key val> }
\end{boxedverbatim}

\begin{enumerate}[\expandafter\wrapnum1] \firmlist
\item \xetex, \luatex에서 \textsf{Myriad Pro} 글꼴을 요구한다. \pdftex이면 그냥 \cs{sffamily}
\item \cs{wrapnum} 옵션의 key-value는 다음과 같다.
\begin{description}\firmlist
\item [\ct{type}\ttfamily =<circle/rectangle/oval/ball>] 원, 사각형, 둥근 사각형, 입체감을 살린 원.
\item [\ct{background}\ttfamily =(color)]
\item [\ct{foreground}\ttfamily =(color)]
\item [\ct{color}\ttfamily = <white/black/(color)>] 이 값이 black이나 white가 아니면 배경이 color가 되고 전경은 흰색으로 된다.
\item [\ct{font}\ttfamily = (font)]
\item [\ct{base}\ttfamily = (text)] 원의 크기를 결정한다. 예를 들어 \verb|\base={999}|라고 하면 999라는 글자가 차지하는 폭을 기준으로 동그라미를 그린다.
\item [\ct{wrapspace}\ttfamily = (length)] 숫자와 원 사이의 간격.
\item [\ct{raise}\ttfamily = (length)] \pkg{hzmisc}의 \ct{raise}와 용법이 같지만 동작이 조금 다르다. 패키지가 설정한 기본값을 기준으로 raise 길이를 추가한다.
\end{description}

\item 이 패키지에서 추가된 옵션 key-value는 다음과 같다.
\begin{description} \firmlist
\item[\ct{linecolor} \ttfamily = (color)] 외곽선 색상을 별도로 지정한다.
\item[\ct{fontplus} \ttfamily = (font)] 기존의 font 정의를 그대로 두고 지정된 값을 추가한다. font family는 그대로 두고 사이즈만 바꾼다든가 할 때 쓴다.
\item[\ct{Raise} \ttfamily = (dim)] 이것은 hzmisc의 \cs{wrapnum}에서 \ct{raise}라고 한 것이다. 이 패키지의 \ct{raise}는 패키지가 설정한 기본 \ct{raise}값에서 더하거나 빼기 때문에 raisedim의 절댓값을 주려 할 때 대문자로 시작하는 \ct{Raise}를 지정한다.
\item[\ct{round} \ttfamily = (dim)] oval에서만 의미가 있다. rounded corners 값을 설정한다.
\item[\ct{reset}] 지금까지 설정된 모든 속성값을 전부 처음으로 되돌린다. 따라서 \\
\verb|wrapnum[reset,color=red]{number}|와 같이 하면 color 이외의 모든 속성값이 초기화된다. 옵션의 맨처음에 쓰는 것이 좋다.
\end{description}

\item 이 패키지에서 추가한 약식 옵션
\begin{description} \firmlist
\item[\ct{type}\ttfamily =<circ/rect>] \ct{circle}의 단축형 \ct{circ}, \ct{rectangle}의 단축형 \ct{rect}를 인식한다.
\item[\ct{circle}, \ct{rectangle}, \ct{oval}, \ct{ball}, \ct{circ}, \ct{rect}] 일종의 약어이다. \verb|type= |으로 주지 않고 이것만 선언해도 된다.
\item[\ct{white}, \ct{black}] \ct{color}\texttt{=white}, \ct{color}\texttt{=black}으로 선언하지 않아도 된다.
\end{description}

\end{enumerate}

\subsection{기타}

\begin{itemize}\firmlist
\item \cs{setwrapnum} 명령은 hzmisc와 동일하게 동작한다. 단, \cs{setwrapnum}\texttt{\{\}} 과 같이 인자를 비워서 건네주면 모든 설정값을 초기화한다.

\item font와 base를 지정할 때는 font를 base보다 먼저 옵션으로 주어야 한다.\\
\verb|[font={\tiny},base={333}]|

\item 원래의 \pkg{hzmisc}는 \pkg{memoir}에서만 동작한다. 이 \pkg{wrapnum}은 일반 클래스에서 
오류가 발생하지 않도록 해두었으나 \pkg{memoir}/\pkg{oblivoir}를 권장한다.
\end{itemize}

\section{hcrnumbers 패키지}

Dohyun Kim의 \pkg{hcrnumbers} 원본이다. 역시 \pkg{kocircnum}과 함께 사용하려 할 필요가 없을 것이고
간단히 원숫자를 식자하기 위한 목적으로 이 패키지만 사용할 수 있다.

\cs{circlenumber}, \cs{Bcirclenumber}, \cs{boxnumber}, \cs{Bboxnumber}
네 개의 명령이 제공된다.

\begin{boxedverbatim}
\circlenumber number
\Bcirclenumber number
\boxnumber number
\Bboxnumber number
\end{boxedverbatim}

숫자는 중괄호로 둘러싸지 말고 그냥 명령 뒤에 잇대어 쓴다. 
\begin{verbatim}
\circlenumber 2
\Bcirclenumber 15
\boxnumber 3
\Bboxnumber 256
\end{verbatim}

\printindex

\section*{테스트}\label{sec:test}

1부터 10까지 원숫자의 모양 비교.

\IfpxlTeX* {x}
{
{\fontspec{CombiNumeralsLtd} 1 2 3 4 5 6 7 8 9 10}\tab (Combinumerals)
}

\ding{192}
\ding{193}
\ding{194}
\ding{195}
\ding{196}
\ding{197}
\ding{198}
\ding{199}
\ding{200}
\ding{201}
\tab \pkg{pifont} \cs{ding}\texttt{\{192\}}+

\setcounter{foo}{0}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\stepcounter{foo}\onum{foo}
\tab \cs{onum}

\tikzcircnum{1}
\tikzcircnum{2}
\tikzcircnum{3}
\tikzcircnum{4}
\tikzcircnum{5}
\tikzcircnum{6}
\tikzcircnum{7}
\tikzcircnum{8}
\tikzcircnum{9}
\tikzcircnum{10}
\tab \cs{tikzcircnum (small)}

\hcrcircnum*{1} 
\hcrcircnum{2} 
\hcrcircnum{3} 
\hcrcircnum{4} 
\hcrcircnum{5} 
\hcrcircnum{6} 
\hcrcircnum{7} 
\hcrcircnum{8} 
\hcrcircnum{9} 
\hcrcircnum{10} 
\tab \cs{hcrcircnum}

\hzcircnum*{1}
\hzcircnum{2}
\hzcircnum{3}
\hzcircnum{4}
\hzcircnum{5}
\hzcircnum{6}
\hzcircnum{7}
\hzcircnum{8}
\hzcircnum{9}
\hzcircnum{10}
\tab \cs{hzcircnum}

\forcerestoretikzcircnumsetup
\tikzcircnum*{1}
\tikzcircnum{2}
\tikzcircnum{3}
\tikzcircnum{4}
\tikzcircnum{5}
\tikzcircnum{6}
\tikzcircnum{7}
\tikzcircnum{8}
\tikzcircnum{9}
\tikzcircnum{10}
\tab \cs{tikzcircnum (big)}

\declaretikzcircnumsmallsetup
%\settikzcircnumsetup{%
%    font={\rmfamily\fontsize{7.5pt}{10pt}\selectfont},
%    sep=-0.5pt,
%    raise=-0.4ex,
%    shape=circle,
%    color=black,
%    bgcolor=white,
%    bdcolor=gray
%}

\end{document}
