%!TEX program = SpiX
%%$ clxelatex --fresh $texname
%$ clxelatex --fresh --makeindex='makeindex' -synctex=1 $texname
%%%$ makeindex $basename
%%%$ xelatex -synctex=1 $texname
\documentclass[b5paper,11pt]{oblivoir}

\usepackage{fapapersize}
\usefapapersize{*,*,.75in,*,.75in,*}

\setobmainfont[texgyrepagella](-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]

\usepackage{kswdash}

\usepackage{fbox}
\usepackage[tcolorbox,backcolor=gray!8,framecolor=gray!80]{srcandtext}
\usepackage{kotex-logo}
\def\pdfTeX{\texorpdfstring{\hologo{pdfTeX}}{pdfTeX}}
\usepackage{figureversions}
\IfPackageLoadedTF{luatexko}{}{%
	\usepackage[normalem]{ulem}
}

\usepackage{graphicx}

\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
}

\ExplSyntaxOff

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

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

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

\begin{document}

\title{kswdash\expldash 물결표와 가운뎃점}
\author{Nova de Hi}
\date{2025/05/18\qquad ver 0.9}
\maketitle

\tableofcontents*

\section{서론}

우리 어문의 문장부호에서 물결표(\~{})는 자주 사용되는 것임에도 불구하고 이것을 식자\.조판하는 것이
아주 편하지 않았다. 이 패키지는 물결표와 가운뎃점, 줄임표 문장부호를 
간편하게 입력하고 항상 일정한 폰트로 식자하게 함으로써
언제나 동일한 출력을 얻도록 하려는 데 목적이 있다.

이 작은 패키지를 작성하게 된 것은 progress 님의 문제 제기와 토론\footnote{%
   \url{https://nonametex.imweb.me/?bmode=view&idx=161109224}}%
에서 비롯되었다.
그 이전에 필자는 물결표와 관련된 \pkg{kskorsymb}나 \pkg{kstextks} 같은 몇 가지
해결책을 제시해온 바 있으나 이들은 문장부호의 하나로 물결표 입\.출력을 처리하는 것이었다.
이 패키지의 의도는 다른 복잡한 것 없이 오직 물결표(와 가운뎃점)만을 다루고자 하는 것이다.

물결표의 간편 입력은 강우현(애플민트초콜릿)의 \pkg{kopunct} 패키지가 구현한 아이디어에서
힌트를 얻었다.

\section{사용법}

\begin{exampleonly}
\usepackage{kswdash}
\end{exampleonly}

\noindent \koTeX 과 함께 쓸 것을 권장한다.
%레거시 엔진은 지원하지 않는다.

\paragraph{패키지 옵션: 물결표 폰트 선택}
패키지 옵션으로 물결표의 폰트를 미리 설정할 수 있다. 
\sto{[wdash=]}로 다음 네 가지 선택사항 중 하나를 선택한다.
\begin{verbatim}
   [wdash=noto]
   [wdash=hcr]
   [wdash=baekmuk]
   [wdash=un]
   [wdash=currentfont]
\end{verbatim}
각각 Noto Serif CJK KR, 함초롬 바탕 LVT, 백묵 바탕, 은바탕 폰트를
가리킨다. 
\texttt{currentfont}를 지시하면 특정 폰트가 아니라 현재 활성화된 폰트로 바로 찍게 한다.
옵션이 주어지지 않으면 은 바탕(\texttt{[wdash=un]})을 디폴트로 한다.
이 옵션은 오직 물결표에만 적용된다. \ref{sec:codefont}절에서 상세히 다룬다.

\paragraph{패키지 옵션: 줄표와 물결표}
다른 옵션으로 \sto{[ddashtowave]}가 있다. 이것은 \cmd{\--} 입력을 긴 줄표가 아니라
물결표로 식자하게 한다. 이 옵션이 주어지지 않으면 \cmd{\--}는 \cmd{\textemdash}와 같다.

% 패키지 옵션으로 \sto{[cdot=\{dot (or) ast\}]} 한 가지가 있는데 \pageref{page:cdotdot}페이지에서
% 설명하는 가운뎃점 명령 \verb|\.|를 활성화할 것인지를 결정한다. 기본값은 이를 활성화하지 않는 것이고
% \sto{[cdot=ast]}와 동일하다.

\paragraph{요약}
핵심은 물결표를 \cmd{\~}로, 가운뎃점을 \cmd{\.}, 줄임표를 \cmd{\..} \cmd{\...}로
입력하는 것이다.\verbfootnote{0.5 이전 버전에서 실험하던 \verb|\*|로 가운뎃점을
입력하는 방식은 0.6 이후 폐기되었다.}

\begin{exampleside}
10\~20, 4\.19, \...
\end{exampleside}

\section{물결표}

\subsection{기본 명령}

\showcmd{\~}
틸데 또는 물결표를 식자하는 간편 입력 명령이다. 
만약 이 명령의 직후 문자가 한글 문자 또는 숫자이거나
빈 인자(\verb+{}+)이면 물결표를 출력한다.
그 이외에는 \LaTeX{} 틸데 명령과 동일하게 작동한다.

\begin{examplebelow}
가\~마, abc\~{}z, 2000\~2025 \\
\~abc, \~n, \~., \~{}.
\end{examplebelow}

물결표 간편 입력은 그 뒤에 오는 스페이스를 무시한다. 즉
\verb*|\~ a|는 \verb|\~a|와 동일하다. 
물결표를 단독으로 찍으려면 반드시 빈 인자를 주어야 한다.

\showcmd{\--}
\ref{sec:longdash}절에서 설명할 \cmd{\--} 명령은 긴 줄표로 온붙임표(\cmd{\textemdash})를
식자한다. 만약 패키지 옵션으로 \sto{[ddashtowave]}가 주어진다면 \cmd{\--}는 긴 줄표가
아니라 물결표를 찍는다.
이 선택사항을 둔 이유는 예컨대 페이지 범위를 나타내는 입력 \verb|pp.~10--20|에서 백슬래시 하나만을
추가하여 en-dash를 물결표로 바꾸거나, 이렇게 입력된 물결표의 백슬래시를 제거하여
붙임표로 바꾸는 것이 때로 유용할 수 있다고 판단해서이다.

\beginScope
\ExplSyntaxOn
	\cs_set_eq:NN \_kswdash_dbldash_cmd: \kor_tilde_wavedash
\ExplSyntaxOff
\begin{exampleonly}
1996\--2025, pp.~10\--20
\end{exampleonly}
1996\--2025, pp.~10\--20
\endScope


\subsection{물결표의 코드와 폰트}\label{sec:codefont}

앞서 소개한 토론에 의하면 ``물결표'' 또는 그 비슷한 문자에 대하여 \tref{tab:wavedashes}\를
제시하고 있다. 

\begin{table}[htp]
\centering
\caption{여러 폰트의 물결표}\label{tab:wavedashes}
\includegraphics{wavedashes}
\end{table}

\ucp{007E}는 아스키 틸데 문자, \ucp{223C}는 수학 기호 영역의 틸데 연산자(Tilde Operator), 
\ucp{301C}는 CJK 문장 부호 영역의 물결표(Wave Dash), \ucp{FF5E}는 KS 기호로서 전각 및 반각 형식 영역의
전각 틸데(Full-Width Tilde)라는 이름을 가지고 있다. 현실적으로 \ucp{223C}를 우리 글 ``물결표''로
대용해서 써야 했던 사정에 대해 앞서 소개한 토론에서 다루어졌다.

우리는 이 가운데 특정한 모양을 가진 물결표 하나를 일관되게 사용하려 한다. 그러기 위해서
물결표를 식자하는 폰트를 고정시켜서 항상 이 폰트의 특정 문자 코드로만 찍히도록 하는 것이다.
패키지 옵션으로 물결표 폰트를 \{\texttt{noto}, \texttt{hcr}, \texttt{baekmuk}, \texttt{un}\} 중에서 고를 수 있다.
기본값은 은 바탕의 \ucp{223C}이다.


\showcmd{\KSWdashFont}
물결표를 식자하는 폰트를 재지정할 수 있다. 

\koTeX{} 없는 문서(\pkg{babel}이나 \pkg{polyglossia})라면 \cmd{\fontspec} 명령을,
그렇지 않다면
\ucp{223C}와 \ucp{FF5E}에 대해서는
\cmd{\hangulfontspec}, \ucp{301C}에 대해서는 \cmd{\hanjafontspec}를 주어서
다음 예와 같이 \cmd{\KSWdashFont} 매크로를 재정의(\cmd{\renewcommand})한다.

\begin{examplebelow}
\renewcommand*{\KSWdashFont}{%
    \hangulfontspec{Noto Serif CJK KR}}
\~{}
\end{examplebelow}

\noindent 위의 명령의 결과가 ``tofu(두부)''로 나타나면 정상이다. Noto Serif CJK KR에는 \ucp{223C}
문자가 저런 모양으로 나타난다. (폰트 이름은 \uline{\textsf{no to}}fu인데\....)


\showcmd{\KSWdashCode}
\ucp{007E}, \ucp{223C}, \ucp{301C}, \ucp{FF5E} 네 가지 틸데(물결표) 문자 코드 중 어떤 것을
선택할지 정의할 수 있다. 유니코드 코드 포인트에 해당하는 16진수 숫자를 적어준다.
% 이때, \ucp{301C}는 \koTeX\ (\pkg{xetexko})의 폰트 선택 명령으로는 \cmd{\hanjafontspec}으로
% 지정한다. 다른 둘은 \cmd{\hangulfontspec}이며, \ucp{007E}는 라틴 문자이므로 \cmd{\fontspec}하여야
% 한다.

\begin{examplebelow}
\renewcommand*{\KSWdashFont}{%
    \hangulfontspec{Noto Serif CJK KR}}
\renewcommand*{\KSWdashCode}{FF5E}
\~{}
\renewcommand*{\KSWdashCode}{007E}
\~{}
\end{examplebelow}

\showcmd{\kswdashcurrentfont}
이 패키지의 의도가 물결표를 특정 폰트로 식자하는 것이기는 하지만 때에 따라
``현재 폰트''로 찍어야 할 경우가 없다고 할 수 없다.
다음 예시는 ``특정 폰트''로 인쇄하는 기능을 억제하는 것이다.
패키지 옵션 \sto{[wdash=currentfont]}로 문서 전체에 대하여 이를 적용할 수 있다.

\begin{examplebelow}
\hangulfontspec{Noto Sans CJK KR}
물결표\~{}
\renewcommand*{\KSWdashFont}{\kswdashcurrentfont}
물결표\~{}
\end{examplebelow}


\subsection{사이드 효과와 보충 명령}

이렇게 함으로써, \verb|\~{}|로써 \texttt{\textasciitilde}를 
적는 것이 조금 어려워지기는 한다. 이것을 ``사이드 효과''라고 하자.

틸데 문자는 (1) 다음에 오는 알파벳 한 글자와 결합하거나 (2) url 주소의
일부로 쓰이는 것인데, 우리가 변경한 결과를 (1)의 목적에 쓰는 데는 아무
문제가 없다. (2)의 경우도 \verb|\url| 명령이나 \verb|\path|로 표현할 때는
문제가 되지 않는다. 다음 상황은 특별한 경우이다.

\begin{examplebelow}
\href{https://any.com/~user}{\sffamily https://any.com/\~{}user}
\end{examplebelow}

\noindent 이럴 때는 부득이 \cmd{\textasciitilde}를 쓰는 것이 좋겠다.

\begin{examplebelow}
\href{https://any.com/~user}{\sffamily https://any.com/\textasciitilde{}user}
\end{examplebelow}

\showcmd{\tildeorgcmd}
\LaTeX 의 원래 \cmd{\~} 명령을 이 이름으로 보존해두었다. 
``사이드 효과''를 피하기 위해서 또는 다른 특별한 목적으로 변경된 \cmd{\~}를
쓰지 않으려 할 때 이 매크로를 활용할 수 있다.
한글 위에 틸데를 붙이는 일은 없을 것이고 숫자 위에 틸데를 굳이 붙여야 할 때는
(\verb|\~2|를 쓸 수 없으므로) 이 명령을 이용하면 된다.

\begin{exampleside}
\tildeorgcmd{}, \tildeorgcmd{O}, \txfigures \tildeorgcmd{2}
\end{exampleside}

\subsection{\pkg{kopunct}와 비교}

\pkg{kopunct} v1.1의 틸데 문자 관련 내용을 요약하면 다음과 같다.
\begin{enumerate}[\quad(1)] \oblivoirlist
\item 틸데 명령 \cmd{\~}는 그 뒤에 빈 인자(\verb|{}|)가 오면 물결표로, 그 이외에는 tilde로
동작한다.
\item 틸데 문자를 단독으로 찍어야 할 때는 \cmd{\textasciitilde}를 쓴다.
\item 레거시 텍 엔진에서 물결표는 Computer Modern Roman의 틸데 문자를 1.5배 확대하고 높이를 조절하여 식자한다.
이 때 배율(scale)과 높이(height, raise)를 사용자화할 수 있다.
\item 유니코드 텍 엔진에서는 현재 폰트의 \ucp{007E}를 바로 찍는다.\footnote{
    패키지 저자가 이 점을 명확히 하였다. \url{https://nonametex.imweb.me/?bmode=view&idx=160592359}}
\end{enumerate}

우리는 레거시 텍을 지원하지 않기로 하고 유니코드 문자를 직접 인쇄한다.
\cmd{\~} 뒤에 숫자나 한글이 오면 물결표가 되도록 하는 정도의 수정을 가했다. 
문자의 폭, 배율, 높이를 조절하는 기능은 따로 마련하지 않았는데 우리가 출력하는 글자는 폰트에 따라 달라질
것이므로 그런 것이 필요하다면 \cmd{\raisebox} 등을 이용하는 편이 낫겠다고 판단하였기 때문이다.

\pkg{kopunct} 설명서의 \cnm{예시}를 같은 방식으로 입력하여 보았다.

\begin{examplebelow}
제1\~{}2장 $\rightarrow$ 제1\~2장 \\
Espa\~nol \\
틸데 악센트(\textasciitilde) $\rightarrow$ \tildeorgcmd{}
\end{examplebelow}

\subsection{[보론] 물결표는 언제 사용하는가?}

유니코드 텍 엔진이 등장하기 전 \pkg{HLaTeX}을 쓰던 때 물결표를 
\verb|$\sim$|으로 식자하는 관행이 있었다. 이 부호는 닮음을 나타내는
수학 기호이지만 생긴 모양이 물결표와 비슷하였던 것이다.
그러나 $\sim$은 물결표라기에는 모양이 적절치 않고 다른 문제도 있어서
지금은 권하지 않게 되었다.

우리 글에서 물결표는 ``기간, 거리, 범위''를 나타내는 데 쓰는 부호로서 서양 글의 en-dash(\textendash)에
상당한다. 2014년 개정 전에는 ``\textsf{\~{}사회, 국제\~{}}''와 같이 ``어떤 말의 앞이나 뒤에 들어갈 말 대신'' 쓴다는 규정이 있었으나
삭제되었다. (그런 식의 용법을 금지하는 것은 아니다.)

서양 글에서 기간, 범위를 나타내기 위해 물결표를 쓰는 것은 허용되지 않지만 
우리 글에서 물결표를 쓸 곳에 en-dash를 쓰는 것은 허용된다. 어문 규정에는 ```붙임표'를 쓸 수 있다''고 하고
있는데 여기서 말하는 `붙임표'는 틀림없이 en-dash일 것이다.
\begin{quote}
9월 15일\~9월 25일 \\
김정희(1786\~1856) \\
서울\~천안 정도는 출퇴근이 가능하다.\\
이번 시험의 범위는 3\~78쪽입니다.
\end{quote}
\bnm{한글 맞춤법} \snm{부록: 문장 부호} 17의 ``붙임''에 의하여 다음도 가능하다.
\begin{quote}
9월 15일--9월 25일 \\
김정희(1786--1856) \\
서울--천안 정도는 출퇴근이 가능하다.\\
이번 시험의 범위는 3--78쪽입니다.
\end{quote}

\section{가운뎃점과 줄임표}

가운뎃점은 \ucp{00B7}, 줄임표는 \ucp{2026} 문자를 인쇄한다.

이 패키지는 물결표 외에 가운뎃점(\.{})과 줄임표(\.., \...)의 간편 입력을 제공한다.

입력뿐 아니라 이 매크로를 통하여 고정된 폭의 가운뎃점과 일정한 모양의 줄임표를 
얻는 것이 목표인데,
가운뎃점은 폰트에 따라 문자폭이 달라서\footnote{%
    활판 인쇄에서 가운뎃점은 ``전각'' 문자로 취급되었다. 오늘날 폰트 설계자들은
    한글 폰트에서도 \ucp{00B7}을 전각(EM)으로 디자인하는 경우가 거의 없다.
    컴퓨터 조판 시대에 이 문자의 ``전각''을 고집할 이유는 없으나 너무 폭이 좁으면
    곤란하다고 생각한다.}
이를 보정할 필요가 있었고
줄임표는 (특히 Noto Serif CJK KR 폰트에서)
위치가 부적절하였기에 적절한 폰트로 고정시켜 찍기 위한 것이다.

%    패키지 개발 초기에는 마침표가 아니라 \verb|\*| 별표를 이용하여 가운뎃점과 
%    줄임표를 입력하도록 하였으나 0.6버전부터 마침표를 이용하는 명령\cmd{\.}만을 
%    정의하였다. 별표 사용은 그 나름대로 장점이 있었지만 아무래도 키보드 상의 위치가
%    불편하다는 것이 단점처럼 느껴졌던 것이다.
    간편 입력 매크로로 \cmd{\.}를 선택한 이유는 흔히 글을 쓸 때 줄임표를
    여러 개의 마침표로 표현하곤 하는 습관도 영향을 미쳤다.


\subsection{간편 입력 명령}

\showcmd{\..,\...}
% \LaTeX 에서 \verb|\.|는 (특정 언어의) 문자 액센트 명령인데 우리는 이것을 무시하고
% 가운뎃점 명령으로 쓰도록 변경하였다. 
 세 점 줄임표는 \cmd{\..}, 여섯 점 줄임표는
 \cmd{\...}이다.
%(별표를 채택한 이유는 \verb|\.|, \verb|\,|나
% \verb|\;| 등이 이미 중요한 커맨드였기 때문이다.)

\begin{examplebelow}
세 점 줄임표 \.. \quad 여섯 점 줄임표 \...
\end{examplebelow}

\refstepcounter{dummy}\label{page:cdotdot}
\showcmd{\.,\cdotbydotorgcmd}
\cmd{\.}로 가운뎃점을 식자할 수 있다. \pkg{kskorsymb} 패키지의
가운뎃점이 \verb|".|인 것과 비교해볼 수 있겠다. 표준 \LaTeX 에서
이 명령이 문자 액센트 매크로로 쓰이기 때문에 원래의 기능을 최대한
유지하는 데 주의를 기울였다.
즉, \cmd{\.} 다음에 오는 문자가 한글이나 숫자여야 가운뎃점이
된다. 그 이외의 경우에는 \LaTeX{} 기본 명령대로 알파벳 위에 점을 찍는 명령이다.
따라서 가운뎃점을 단독으로 표현하려면 그 뒤에 빈 인자를 주는 것이 좋다.

\begin{examplebelow}
시장에서 사과\.복숭아, 고추\.마늘\.파, 조기\.고등어를 샀다.\\
\.{} 3\.1절, \.{a} \.{x} \.n 
\.5 \txfigures \cdotbydotorgcmd{5}
\end{examplebelow}

만약\---그런 일을 상상하기 어렵지만\---숫자 위에 점을 찍어야 하는
희한한 경우라면(수학식 내에서 $\dot{5}$(\verb|$\dot{5}$|)와 같이 하는 것을 가리키는 것이
아니고 텍스트 상태의 상황. 원래 \cmd{\.}는 숫자를 인자로 취하도록 만들어진 명령이 아닌데
굳이 이렇게 하려 하는 경우를 예로 든 것이다.),
위 예시의 마지막 보기와 같이 \cmd{\cdotbydotorgcmd} 매크로를
활용하여야 한다.

\paragraph{스페이스}
가운뎃점의 간편 입력 매크로는 그 뒤에 오는 스페이스를 무시한다.
즉 \verb*|\. a|\allowbreak 와 \verb|\.a|는 동일한 명령이다. 그러므로 가운뎃점 
뒤에 아무런 문자도 오지 않고 입력이 종료되는 경우(환경이 끝나는 경우 등)에는 오류가 발생할 
수 있다. 가운뎃점을 단독으로 찍으려면 빈 인자를 주어야 한다. 

반면 줄임표 매크로는 그 뒤에 오는 스페이스가 유지된다. 즉 
\verb*|\.. .|와 \verb|\...|\allowbreak 는 서로 다른 명령이다. 만약 세 점 줄임표 뒤에
마침표를 찍으려면 \verb|\..{}.|와 같이 해야 할 것이다. 여섯 점 줄임표 뒤의
마침표는 \verb|\....|도 괜찮다.

가운뎃점 매크로와 줄임표 매크로가 이어지는 토큰에 대하여 다르게 반응하는 
이유는 \cmd{\.}가 원래 다른 목적의 매크로였고 그 기능을 상황에 따라 유지하려 하였기 때문이다.

\begin{examplebelow}
\.{} \. a \.a \\
\.. . \..{}. \.. a \\
\.... \...{}.
\end{examplebelow}


% \verb|\.| 다음에 아무런 문자 없이 개행이 이루어지는 경우에는
% 오류를 보일 수 있다.

\subsection{폰트와 문자폭}

\showcmd{\KSWdashCdotFont,\KSWdashEllipsisFont}
\cmd{\KSWdashCdotFont}는 가운뎃점을 식자하는 폰트이다.

\cmd{\KSWdashEllipsisFont}는 
세 점 및 여섯 점 줄임표를 식자하는 데 사용하는 폰트이다. 

기본값은 둘 모두 함초롬 바탕 LVT이다.
\cmd{\fontspec}류 
명령을 이용하여 \cmd{\renewcommand}할 수 있다.

\begin{examplebelow}
\.{} \.. \... (변경전)
\renewcommand*{\KSWdashCdotFont}%
    {\hangulfontspec{NanumMyeongjo}}
\renewcommand*{\KSWdashEllipsisFont}%
    {\hangulfontspec{UnDotum}}
\.{} \.. \... (변경후)
\end{examplebelow}

앞서 소개한 \cmd{\kswdashcurrentfont}로 현재 식자 중인 폰트를
지정할 수 있다.

\begin{examplebelow}
\.{} \.. \... (변경전)
\renewcommand*{\KSWdashCdotFont}{\kswdashcurrentfont}
\renewcommand*{\KSWdashEllipsisFont}{\kswdashcurrentfont}
\.{} \.. \... (변경후)
\end{examplebelow}


\showcmd{\setcdotboxwidth}
가운뎃점을 찍는 박스의 폭을 설정해준다. 인자는 길이값이 온다. 디폴트는 0.67em.

\begin{examplebelow}
가\.나;
\setcdotboxwidth{.5em}
다\.라;
\setcdotboxwidth{1em}
마\.바
\end{examplebelow}

만약 이 명령의 인자로 \texttt{natural}을 선언하면 문자 박스의 폭을 강제하는
기능을 억제한다. 즉 폰트 자체의 width가 적용된다. 이 선언은 전역적이므로
이전 값으로 되돌리려면 \cmd{\setcdotboxwidth}를 다시 실행해야 한다.

\begin{examplebelow}
가\.나;
\setcdotboxwidth{natural}
다\.라;
\end{examplebelow}

\setcdotboxwidth{.67em} %%% restore default

줄임표는 박스 폭을 수정하지 않는다.

\subsection{보충 명령}

\showcmd{\kswdash\_cdot,\kswdash\_cdots,\kswdash\_Cdots}
내부적으로 \cmd{\.} 등의 간편 입력 명령은 위의 세 명령의 이명(alias)이다.
가운뎃점을 지원하는 문장부호 패키지 \pkg{kopunct}에는 \cmd{\cdot}, \cmd{\cdots}, \cmd{\Cdots}가
정의되어 있고 (math mode 아닌) text 맥락에서 가운뎃점과 줄임표로 동작한다.
또 \pkg{oblivoir}는 \cmd{\cntrdot}, \cmd{\cntrdots}, \cmd{\obellipsis} 명령이
제공된다. 이들 각각은 문자 폭이나 폰트 등에 아무런 변경을 가하지 않는 점이 우리가
정의하는 것과 다르다.

이 패키지는 \cmd{\cdot}, \cmd{\cdots}, \cmd{\Cdots}, \cmd{\cntrdot} 등
이미 정의된 명령을 수정하지 않는다. 다음 예시에서 \cmd{\cntrdot}과
\cmd{\obellipsis}가 현재 기본 한글 폰트(Noto Serif CJK KR)로 식자되는 것을 볼 수 있다.

\begin{examplebelow}
가\cntrdot 나, 마\obellipsis.\\
가\.나, 마\....
\end{examplebelow}


그런데
굳이 이 패키지의 가운뎃점이나 줄임표 정의가 필요하고(박스 폭 등의 이유로)
간편 입력이 아닌 매크로(\cmd{\cdot}등)로 입력되어 있다면
다음 예는 이 명령을 복사하여 활용하는 예이다. 

\cmd{\kswdash\_cdot}과 \cmd{\kswdash\_cdots}는
수학 모드에서 \cmd{\cdot}, \cmd{\cdots}\allowbreak 로 동작하게 정의되어 있다.

이때 \cmd{\ExplSyntaxOn}, \cmd{\ExplSyntaxOff}에 주의하라.

\beginScope
\let\orgcdot\cdot
\def\cdot{\ifmmode\orgcdot\else\symbol{"00B7}\fi}
\begin{examplebelow}
수학식에서는 $a\cdot b$와 같이, 문장에서는 가\cdot 나와 같이 나타난다.\\
\ExplSyntaxOn
\let\cdot\kswdash_cdot
\ExplSyntaxOff
수학식에서는 $a\cdot b$와 같이, 문장에서는 가\cdot 나와 같이 나타난다.
\end{examplebelow}
\endScope

\section{긴 줄표}\label{sec:longdash}

\showcmd{\--,\---}
대개 \cmd{\textendash}(\textendash)는 \verb|--|로, \cmd{\textemdash}(\textemdash)는 \verb|---|로 입력한다.
클래스 \pkg{oblivoir}는 \cmd{\expldash}라는 명령을 정의하고 있고 em-dash보다 더 긴
explanatory long dash를 식자해준다\expldash. 이것을 간편하게 입력하는 방법을
제공한다. \verb+\--+ \-- \verb|\---| \---. \verb|\--|는 \cmd{\textemdash}(즉 \verb|---|)와
같고 \verb|\---|는 \cmd{\expldash}와 같다.

단, 앞서 설명한 대로 패키지 옵션으로 \sto{[ddashtowave]}가 선언되어 있으면 \cmd{\--}는
\cmd{\textemdash} 대신 물결표(\~{})로 동작한다.

\cmd{\-} 하이픈 명령은 그대로 유지된다.

\showcmd{\expldash}
만약 \cmd{\expldash}가 정의되어 있지 않은 경우에는 \cmd{\textemdash}를 
이용한다. 그러므로 이 패키지를 로드하면 굳이 간편 입력이 아니라도 \cmd{\expldash}라는
명령을 쓸 수 있지만 출력되는 모양은 \pkg{oblivoir}와 달리 \cmd{\textemdash}인데
앞뒤로 약간의 간격을 준 모양{\;\textemdash\;}이다.

\begin{exampleonly}
설명줄이란\---{}국어 문장 부호 규정에 있는\---{}`줄표'를
설명적 긴 줄표로 쓰는 것을 말한다. 
\end{exampleonly}
설명줄이란\---{}국어 문장 부호 규정에 있는\---{}`줄표'를
설명적 긴 줄표로 쓰는 것을 말한다. 

설명줄은 관용적인 것이다. \snm{문장 부호} 어문 규정에는 줄표를 제목 아래의 부제를
적는 데 사용하는 것만 정하고 있다.

\subsection{알려진 문제점과 잠정적 해법}

긴 줄표 명령 \cmd{\---}는 본문 평문단이 아닌 환경의 텍스트\---이동하는 인자, 각주, framed text 등\---에서 정상 동작하지 않는다. 원래 이것은 \cmd{\expldash}를 직접 적으면 해결되는 문제이기는 하나,
이 패키지는 각주에 대해서\footnote{주석\---각주, 미주, 방주} 필요한 조치를 취해두었다.

\showcmd{\edsh}
이 명령은 \cmd{\-}의 이명(alias)이다. 이 명령 뒤에는 하이픈대시가
하나 또는 둘 붙는다. 각각 \cmd{\--}와 \cmd{\---}에 해당한다. \cmd{\edsh-} \edsh-, 
\cmd{\edsh--} \edsh--.

\begin{examplebelow}
\--, \edsh-; \---, \edsh--.\\
갇힌 문단에서는 \cmd{\edsh}(\edsh--)를 쓴다.
\end{examplebelow}

\sto{[ddashtowave]} 옵션을 준 경우에도 마찬가지다. (다음 보기는 \pkg{tcolorbox} 안에
들어가기 때문에 \cmd{\-} 명령이 인식되지 않은 예이다.) \cmd{\-}를 \cmd{\edsh}로 적은 예이다.

\beginScope
\ExplSyntaxOn
	\cs_set_eq:NN \_kswdash_dbldash_cmd: \kor_tilde_wavedash
\ExplSyntaxOff
\begin{examplebelow}
1996\--2025, 
pp.~10\--20 (×)

1996\edsh-2025, 
pp.~10\edsh-20
\end{examplebelow}
\endScope

%\paragraph{환경(environment) 수정하기}
\showcmd{\dashmeaningedsh}

어떤 평문단 아닌 환경\---예를 들면 \env{framed}, \env{minipage}, \env{tcolorbox}\---에서
이러한 문제가 발견되면 해당 환경을 시작하는 때에 이 명령을 두는 것이 좋다.

\begin{examplebelow}
\begin{framed}
\dashmeaningedsh
\--, \---
\end{framed}
\end{examplebelow}

\noindent \cmd{\dashmeaningedsh}는 
\verb|\let\-\edsh|와 동일하다. 문서에서 새로운 환경을 정의할 때에도 \emph{begin} 정의 부분에 이것을 두는 것이 좋다.

\pkg{etoolbox}가 제공하는 \cmd{\apptocmd}를 이용하여 환경을 패치할 수 있다.
다음 코드가 의미하는 것은 \env{framed} 환경의 \emph{begin} 부분 정의가 끝나는 곳,
즉 환경 내부 텍스트가 시작하는 위치에 \cmd{\dashmeaningedsh}를 삽입한다.
이 방법의 장점은 preamble에 적어두면 문서 내의 모든 \env{framed} 환경에서 유효하다는 것이다.

\begin{examplebelow}
\apptocmd{\framed}{\dashmeaningedsh}{}{}
\begin{framed}
가나다라\---마바사아
\end{framed}
\end{examplebelow}

그러나 대체로 이럴 경우에는 그냥 \cmd{\expldash}하는 것이 좋을 것이다.
왜냐하면 이 패키지의 \cmd{\--}, \cmd{\---}는 그저 입력의 편의를 돕는 매크로일 뿐이고
대체불가능한 명령이 아니기 때문이다.

\section{\pdfTeX{} 지원}

제한적이지만 \pdfTeX 에서 \pkg{kotex-utf}를 지원한다. 컴파일 엔진이 \pdfTeX 이면
다음 명령들은 의미가 없다.
\begin{verbatim}
	\KSWdashFont, \KSWdashCdotFont, \KSWdashEllipsisFont,
	\kswdashcurrentfont, \KSWdashCode, \setcdotboxwidth 
\end{verbatim}
패키지 옵션은 아무 것도 줄 수 없다. 그러나 \cmd{\.}, \cmd{\..}, \cmd{\...},
\cmd{\--}, \cmd{\---}, \cmd{\~} 들은 이 패키지의 의도대로 동작한다.
폰트는 항상 현재 폰트이며 물결표는 \ucp{223C}이다.

\section{변경이력}

\noindent 2025/04/11. ver 0.2. 설명문서 작성.

\noindent 2025/04/11. ver 0.3. `긴 줄표' 추가, \verb|\..| 추가.

\noindent 2025/04/11. ver 0.4. \verb|\kswdashcurrentfont|, \texttt{[cdot=]}.

\noindent 2025/04/12. ver 0.6. \verb|\*| 입력 방법 폐기.

\noindent 2025/04/12. ver 0.6.3. 기본값을 은 바탕으로 변경. 

\noindent 2025/04/14. ver 0.7 \verb|wdash=|, \verb|ddashtowave| 옵션.

\noindent 2025/04/26. ver 0.8. pdftex 지원.

\noindent 2025/05/18. ver 0.9. \verb|\edsh|

\printindex

\end{document}
