\documentclass[b5paper,adjustmath,nanum]{oblivoir}

%%% paper layout setup
\usepackage{fapapersize}
\usefapapersize{*,*,1in,*,1in,*}

%%% math
\usepackage{amsmath,amssymb}

%%% plx
\usepackage{ifpxltex}

%%% setting for pdflatex
\IfpxlTeX*{p}
{
	\usepackage{graphicx}
}

%%% font settings
\usepackage{libertineRoman}
\IfpxlTeXpxl* {p}{x,l}
{
	\usepackage{newtxmath}
}
{
	\usepackage{unicode-math}
	\setmathfont{texgyretermes-math.otf}
}

%%% protrusion
\IfpxlTeXpxl* {x}{p,l}
{
	\usepackage{xetexko-hanging}
}
{
	\usepackage[factor=1600,protrusion,expansion]{microtype}
}

%%% hanja & punct
\IfpxlTeX*{x}
{
	\setmainhanjafont{NanumGothic}
}

\IfpxlTeX*{l}
{
	\hangulpunctuations=1
}

%%% dotemph, ulem
\let\emph\dotemph
\IfpxlTeXpxl* {p,x}{x,l}
{
	\usepackage[normalem]{ulem}
}
{
	\addhangulfontfeatures{Ligatures=TeX}
}

%%% ======== now start document ========
\begin{document}

\title{ifpxltex.sty, v0.0012}
\author{Nova De Hi}
\date{2014/05/25}

\maketitle

\begin{abstract}
이 패키지는 현재 실행 중인 
엔진을 검사하여 엔진별로 적절한 코드를 실행시키도록 한다.
둘 이상의 엔진에 동일한 코드를 적어야 하는 경우, 손쉽게 지정할 수 있도록 한다.
이와 더불어 텍 엔진의 로고를 자동으로 검출하여 식자하는 기능도 제공한다.
\end{abstract}

\section{설치와 사용, 목적}

\TeX\,Live 2013 이후 버전에서 \href{http://wiki.ktug.org/wiki/wiki.php/KtugPrivateRepository}{KTUG 사설 저장소}\footnote{\url{http://wiki.ktug.org/wiki/wiki.php/KtugPrivateRepository}}를 등록한 후
다음 명령을 내리면 설치됩니다.
\begin{verbatim}
$ tlmgr install ifpxltex
\end{verbatim}

KTUG 사설 저장소를 이용할 수 없다면, \href{http://ftp.ktug.org/KTUG/texlive/tlnet/archive/ifpxltex.tar.xz}{\ttfamily ifpxltex.tar.xz}\footnote{\url{http://ftp.ktug.org/KTUG/texlive/tlnet/archive/ifpxltex.tar.xz}}를 다운로드하여 풀면 나오는 \texttt{ifpxltex.sty}를 적절한 곳에 둡니다.

\LaTeX\ 문서의 preamble에서 
\begin{verbatim}
\usepackage{ifpxltex}
\end{verbatim}
를 선언합니다.

\bigskip

이 패키지는 \textsf{iftex} 패키지가 제공하는 컴파일 엔진 검출 기능을 흉내내기 위해서 만들었습니다. 예를 들어 현재 실행 중인 컴파일 엔진이 \pxlThisTeX[pdfTeX]일 때만 실행할 코드가 있다면 \textsf{iftex}에서
\begin{verbatim}
\ifPDFTeX
 ... <code> ...
\fi
\end{verbatim}
형식으로 쓰던 것을 확장하여, 둘 이상의 엔진에 대해서 동일한 코드를 실행할 수 있도록 하자는 데서 출발하였습니다. 그리고 특정 엔진일 때만 문서가 컴파일되도록 하는 \textsf{iftex}의 \verb|\RequirePDFTeX| 같은 명령을 본따서 둘 이상의 엔진에 대해서 동작하도록 하는 명령을 제공합니다.
이밖에 현재 실행 중인 텍 엔진에 해당하는 로고를 식자하는 기능을 덧붙였습니다.

그러나 이 패키지는 \textsf{iftex}을 직접 이용하지 않습니다.

\section{\LaTeX\ logos}

현재 실행 중인 엔진에 따라 각각 TeX, LaTeX, (La)TeX에 해당하는
로고를 식자합니다. 
\begin{boxedverbatim}
\pxlThisTeX, \pxlThisLaTeX, \pxlThisPLaTeX
\end{boxedverbatim}
이 명령으로 식자되는 로고의 예는 다음과 같습니다: 현재 이 문서는 
\pxlThisTeX, \pxlThisLaTeX, \pxlThisPLaTeX
으로 조판되고 있습니다.

\begin{boxedverbatim}
\pxlThisTeX [ <engine> ]
\end{boxedverbatim}
이와 같이 옵션 인자를 주면 현재 실행 중인 엔진과는 관계없이 옵션으로
주어진 엔진명을 로고로 식자합니다.
\verb|\pxlThisTeX[XeLaTeX]|은 어떤 엔진으로 컴파일해도 \pxlThisTeX[XeLaTeX]으로 식자됩니다.

\section{\texttt{\textbackslash IfpxlTeX} 명령}

\begin{boxedverbatim}
\IfpxlTeX { [p,x,l] } { <true> } { <false> }
\IfpxlTeX* [T/F] { [p,x,l] } { <code> } 
\end{boxedverbatim}

\begin{itemize}\tightlist
\item 첫번째 인자는 \texttt{p}, \texttt{x}, \texttt{l} 가운데 하나 이상을 지정합니다. 둘 이상을 지정할 때는 쉼표로 각 문자를 구분합니다. 각각 \pxlThisTeX[pdfTeX], \pxlThisTeX[XeTeX], \pxlThisTeX[LuaTeX]이 true인가를 검사합니다. 두번째 인자는 이 검사의 결과가 참일 때 실행할 코드, 세번째 인자는 거짓일 때 실행할 코드입니다.
예를 들어 
\begin{verbatim}
\IfpxlTeX {p,x} { A } { B }
\end{verbatim}
는 현재 실행 중인 엔진이 \pxlThisTeX[pdfTeX]이거나 \pxlThisTeX[XeTeX]이면
A를 실행하고 그렇지 않으면 B를 실행하라는 의미입니다.

\item 별표 붙은 명령은 참일 때 실행할 코드만 지정하는 데 사용합니다. 예를 들어
\begin{verbatim}
\IfpxlTeX* {p} { A }
\end{verbatim}
는 현재 실행 중인 엔진이 \pxlThisTeX[pdfTeX]이면 A를 실행하라는 의미입니다.
이것은 \verb|\IfpxlTeX* [T] {p} { A }|와 같은 의미입니다.
반면, 별표 붙은 명령에서 옵션 인자로 F를 지정하면 이 조건이 거짓일 때 실행할 코드를 제공하는 것입니다. 예를 들어
\begin{verbatim}
\IfpxlTeX* [F] {p} { A }
\end{verbatim}
라 하면 \pxlThisTeX[pdfTeX]이 실행되고 있지 \circemph{않다면} A를 실행하라는 의미입니다.
\end{itemize}


\section{\texttt{\textbackslash IfpxlTeXpxl} 명령}

\begin{boxedverbatim}
\IfpxlTeXpxl
   { pdftex... }
   { xetex...  }
   { luatex... }
\IfpxlTeXpxl* { [p,x,l] } { [p,x,l] }
   { expansion of condition #1 }
   { expansion of condition #2 }
\end{boxedverbatim}

\begin{itemize}
\item 별표가 붙지 않은 \verb|\IfpxlTeXpxl| 명령은 세 개의 인자를 취하여 순서대로 \pxlThisTeX[pdfTeX], \pxlThisTeX[XeTeX], \pxlThisTeX[LuaTeX]의 경우에 실행할 코드를 지정합니다. 
\begin{verbatim}
\IfpxlTeXpxl {A}{B}{C}
\end{verbatim}
는 \pxlThisTeX[pdfTeX]에서는 A가, \pxlThisTeX[XeTeX]에서는 B가, \pxlThisTeX[LuaTeX]에서는 C가 실행됩니다.

\item 별표 붙은 명령은 4개의 인자를 취하여 첫번째 인자의 조건에서 세번째 인자의 코드를,
두번째 인자의 조건에서 네번째 인자의 코드를 각각 실행합니다. 즉, 
\begin{verbatim}
\IfpxlTeXpxl* {p}{x,l} { A } { B }
\end{verbatim}
명령은 \pxlThisTeX[pdfTeX]이면 A를,
\pxlThisTeX[XeTeX]이나 \pxlThisTeX[LuaTeX]이면 B를 실행하라는 것입니다.
따라서 
\begin{verbatim}
\IfpxlTeX* {p} {A}
\IfpxlTeX* {x,l} {B}
\end{verbatim}
와 같은 코드를
\begin{verbatim}
\IfpxlTeXpxl* {p}{x,l} {A} {B}
\end{verbatim}
로 줄여써도 동일한 의미입니다.
\end{itemize}

\section{\texttt{\textbackslash pxlRequireTeX} 명령}

\begin{boxedverbatim}
\pxlRequireTeX { [p,x,l] }
\end{boxedverbatim}

작성한 문서가 특정한 엔진으로만 컴파일되게 해야 할 때가 있습니다.
예를 들어 \verb|\pxlRequireTeX { x,l }| 명령은 \pxlThisTeX [XeTeX]이나
\pxlThisTeX [LuaTeX]으로만 컴파일되고 \pxlThisTeX [pdfTeX]에서는 에러가 발생합니다. \textsf{iftex} 패키지의 \verb|\RequirePDFTeX|, \verb|\RequireXeTeX| 등의 명령과 유사하지만
둘 이상의 엔진을 지정할 수 있다는 것이 다릅니다.

\section{기타}

\begin{itemize}
\item 이 패키지는 로고를 찍기 위해 \textsf{hologo} 패키지를 이용합니다.
\item \verb|\makeatletter|와 \verb|\makeatother|를 써야 하는 경우 \verb|\IfpxlTeX| 블럭 밖에서 쓰도록 합니다.
\end{itemize}

\section{예제}

\begin{boxedverbatim}
%%% logo of running engine
\pxlThisTeX, \pxlThisLaTeX, \pxlThisPLaTeX

%%% logo of XeLaTeX
\pxlThisTeX[XeLaTeX]

%%% graphics & fonts
\IfpxlTeXpxl
{ \usepackage{graphicx} }
{ \setmainhangulfont [ interhchar=-.04em ] {HCR Batang LVT} }
{ \setmainhangulfont [ InterHangul=-.04em ] {HCR Batang LVT} }

%%% unicode-math
\IfpxlTeX*{l,x}
{
	\usepackage{unicode-math}
	\setmathfont{texgyretermes-math.otf}
}

%%% hanja
\IfpxlTeX*{x}
{
	\setmainhanjafont{NanumGothic}
}

%%% ulem
\IfpxlTeX*{p,x}
{
	\usepackage[normalem]{ulem}
}

%%% protrusion
\IfpxlTeXpxl* {x}{p,l}
{
	\usepackage{xetexko-hanging}
}
{
	\usepackage[factor=1000,protrusion,expansion]{microtype}
}

%%% requiretex
\pxlRequireTeX {l}

\end{boxedverbatim}


%\section{소스}
%
%\boxedverbatiminput{ifpxltex.sty}

\section{변경 사항}

\begin{description}\tightlist
\item [2014/05/25, v0.0012] \verb|\pxlRequireTeX| 명령 도입.
\item [2014/05/24, v0.0010] \verb|\IfpxlTeXpxl*| 명령 도입, 코드 정비
\item [2014/05/23, v0.0009] etextools 의존성 제거
\item [2014/05/20, v0.0008] iftex 의존성 제거
\end{description}


\end{document}
