% arara: xelatex
\documentclass[nanum,b5paper,colorlinks]{oblivoir}

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

\usepackage{ksmisc,kslinematters}
\usepackage{ifpxltex}
\IfpxlTeX* {p,x}
{
	\usepackage[normalem]{ulem}
}

\usepackage{kotex-logo}
\usepackage{xcolor,ninecolors}
\hypersetup{linkcolor=azure5}
\usepackage{adjustbox}

\usepackage{twemojis}

\NewDocumentCommand\UPicon{}{\raisebox{.5\height}{\twemoji{up}}}
\NewDocumentCommand\NEWicon{}{\raisebox{.5\height}{\twemoji{new}}}

\begin{document}

\title{ksmisc}
\author{Nova De Hi}
\maketitle

\tableofcontents*

\section{About}

\textsf{ksmisc} 패키지에는 열 개 정도의 잡다한 패키지들이 포함되어 있다.
각각은 별개의 패키지들이나 하나의 패키지 묶음으로 제공한다. 제\ref{sec:spec}절에 속한
패키지들은 각자 별도의 설명 문서를 가지고 있으므로 \verb|texdoc|으로 
해당 패키지 문서를 읽을 수 있다.
이 문서에서는 ksmisc.sty, singlepageempty.sty, preparefont.sty에
대한 설명만을 제공한다.

\section{ksmisc.sty}

\begin{boxedverbatim}
\ks_pop_left:NN <tlvar1> <tlvar2>
\ks_pop_right:NN <tlvar1> <tlvar2>
\ks_clist_set_from_tl:NN <clistvar> <tlvar>
\ks_seq_set_from_tl:NN <seqvar> <tlvar>
\end{boxedverbatim}

\verb|\ks_pop_left:NN|과 \verb|\ks_pop_right:NN|은 \verb|<tlvar1>|의 왼쪽(오른쪽) 끝의 item을
하나 꺼내어 \verb|<tlvar2>|에 넣고 \verb|<tlvar1>|에서 삭제한다.
Expl3에는 \verb|\seq_pop_left:NN|\allowbreak 이 있지만 tl(token list)에 대해서는 \verb|\tl_head:N|와 \verb|\tl_tail:N|이 있는 대신 pop 명령이 없어서 만든 것이다. 이를 이용하여 tl을 간단한 stack처럼 활용할 수 있다.
그러나 이 명령은 \verb|\ks_seq_set_from_tl:NN|과 \verb|\ks_clist_set_from_tl:NN|을 작성하기 위한 것이기도 하다. clist와 seq의 막강한 데이터 조작 능력을 tl에 대하여 얻고자 하는 것이 이 명령의 목적이다.

다음 예를 참고하라. (\verb|\ks_for_loop:nnn| 명령은 ksforloop.sty를 요구한다. 이것은 \verb|\ksforloop|와 달리 루프 코드를 그루핑하지 않는 대신 nesting이 불가능하다.)

\begin{verbatim}
\ExplSyntaxOn
\NewDocumentCommand \test { m }
{
    \tl_set:Nn \l_tst { #1 }
    \ks_for_loop:nnn {}{\tl_count:N \l_tst }
    {
        \ks_pop_right:NN \l_tst \l_tmp
        \fbox{\l_tmp}
    }
}
\ExplSyntaxOff
\test{가나다라마바사아{자차}카타파하}
\end{verbatim}
\ExplSyntaxOn
\NewDocumentCommand \test { m }
{
	\tl_set:Nn \l_tst { #1 }
	\ks_for_loop:nnn {}{\tl_count:N \l_tst }
	{
		\ks_pop_right:NN \l_tst \l_tmp
		\fbox{\l_tmp}
	}
}
\ExplSyntaxOff
\test{가나다라마바사아{자차}카타파하}

\bigskip

\verb|\ks_clist_set_from_tl:NN|은 이름 그대로 token list의 각 item을 comma separated list로 만든다. \verb|\ks_seq_set_from_tl:NN|도 마찬가지로 tl의 item을 sequence로 만든다. \verb|<clistvar>|와 \verb|<seqvar>|는 전역적(global)으로 정의된다.

\begin{verbatim}
\ExplSyntaxOn
\NewDocumentCommand \testa { m }
{
    \tl_set:Nn \l_tst { #1 }
    \ks_clist_set_from_tl:NN \g_tst_cl \l_tst
    \clist_use:Nnnn \g_tst_cl {\과~} {\과~} {,~그리고~}
}
\ExplSyntaxOff
\testa{123456789{10}}
\end{verbatim}
\ExplSyntaxOn
\NewDocumentCommand \testa {m}
{
	\tl_set:Nn \l_tst {#1}
	\ks_clist_set_from_tl:NN \g_tst_cl \l_tst
	\clist_use:Nnnn \g_tst_cl {\과~} {\과~}{,~그리고~}
}
\ExplSyntaxOff
\testa{123456789{10}}

\section{singlepageempty}

이 패키지가 하는 일은 만약 문서가 단 한 페이지로만 되어 있다면 그 페이지의 pagestyle을
empty로 만들어주는 것이다. 같은 일을 하는 onepagem 패키지가 oblivoir/memoir에서
더 잘 돌도록 하였다.
\href{http://www.ktug.org/xe/index.php?mid=KTUG_open_board&document_srl=257830}{KTUG 게시판}의 해당 글을 참고하라. 

\section{별도의 문서를 제공하는 패키지}\label{sec:spec}

\subsection{nvverttab}

한 페이지를 수직으로 나누어서 vertical tab처럼 사용할 수 있게 하였다.
별도의 문서를 참고하라. 

\begin{verbatim}
$ texdoc nvverttab
\end{verbatim}


\subsection{ksjosaref.sty}

\koTeX 을 사용하지 아니하는 상황에서 간이 자동조사가 동작하는 \verb|\ref|-류 명령을 정의한다.

\begin{verbatim}
$ texdoc ksjosaref-doc.pdf
\end{verbatim}

\subsection{kstextsks.sty}

KS X 1001에 정의된 기호문자를 입력할 수 있는 매크로와 한글 수학책에 가끔 쓰이는 닮음 기호를 정의한다.

\begin{verbatim}
$ texdoc kstextks-doc.pdf
\end{verbatim}

\subsection{kslinematters.sty}

space, line을 respect하게 하는 명령과 line command를 정의하게 하는 기능을 제공한다.

\begin{verbatim}
$ texdoc kslinematters
\end{verbatim}

\subsection{dayoftheweek}

날짜를 계산하고 주어진 날짜의 요일을 알아낸다.

\begin{verbatim}
$ texdoc dayoftheweek
\end{verbatim}

\subsection{srcandtext}

소스와 문서를 동시에 제작하기 위한 패키지이다.

\begin{verbatim}
$ texdoc srcandtext
\end{verbatim}

\subsection{kskorsymb}

인용부호 \verb|"|를 매크로처럼 사용하여 한글 문장부호의 입력을 간단하게 하려는 목적으로
제작한 패키지이다.

\begin{verbatim}
$ texdoc kskorsymb
\end{verbatim}

\subsection{kswdash\NEWicon}

물결표와 가운뎃점, 줄임표를 식자하는 간편 매크로를 제공한다. 

\begin{verbatim}
$ texdoc kswdash
\end{verbatim}

\subsection{kopunctcompat}

`애플민트초콜릿'의 \texttt{amckorean} 패키지에 포함되어 있는 \texttt{kopunct.sty}의
문장부호 명령과 \texttt{oblivoir} 문장부호 명령의 호환.
% 이 패키지를 로드하면 양쪽에
%정의되어 있는 명령을 어떤 것이든 쓸 수 있게 해준다.
\texttt{kopunct} 1.1 업데이트로 \texttt{oblivoir}-compatible
명령을 제공하기 때문에, 이제 불필요하다.

\begin{verbatim}
$ texdoc kopunctcompat
\end{verbatim}

%\subsection{printnthpar}
%
%외부 파일을 \verb|\par|를 기준으로 잘라서 $n$번째 문단만 프린트하게 한다.
%
%\begin{verbatim}
%$ texdoc printnthpar
%\end{verbatim}

\section{별도의 패키지로 있다가 옮겨온 것들}

\subsection{ifpxltex}

\begin{verbatim}
$ texdoc ifpxltex
\end{verbatim}

\subsection{ksforloop}

\begin{verbatim}
$ texdoc ksforloop
\end{verbatim}

\section{preparefont.sty}

\begin{boxedverbatim}
\preparefontfile{Font_File_Name}{url}[local_saved_file_name]
\end{boxedverbatim}

\verb|--shell-escape|을 주어야 한다. 먼저 \verb|Font_File_Name|으로 폰트를 체크하고 만약 없으면 \verb|<url>|로부터 다운로드받는다. zip이거나 직접 폰트 파일 자체를 가리키는 url이어야 한다.
폰트의 존재 유무를 체크하기 위하여 \verb|luaotfload-tool|을 부르므로 이것이 실행가능해야 한다.

Windows에서는 KTUG 사설 저장소의 ktugbin 패키지 설치를 요구한다.
Mac이나 linux에서는 \verb|curl|과 \verb|unzip|이 필요하다.

%첨부된 testpreparefont.tex와 게시물 ``preparefont.sty''\footnote{\url{http://doeun.blogspot.kr/2014/07/preparefontsty-dropbox.html}.}을 참고하라.

\end{document}