\documentclass[a4paper,itemph,amsmath]{xoblivoir}
\usepackage{fapapersize,indentfirst,tikz,mdframed}
\setlength{\textwidth}{16cm}
\setlength{\textheight}{22cm}
\setlength{\voffset}{0cm}
\setlength{\hoffset}{-2cm}
\pagestyle{hangul}

\newcommand\mbdamark{\tikz[overlay]\node[draw=blue,inner sep=2pt,
anchor=text, rectangle, rounded corners=.3mm] {모범답안};\phantom{모범답안}}
\newcommand\euleridentity{\(e^{i\pi}+1=0\)}

\newenvironment{mbda}{\mbdamark}{\par\medskip}
\newenvironment{beautifulequation}{Someone says}{is a beautiful equaiton.}

\begin{document}
\title{(11-12 겨울) the TeX and Geogebra Study Group - 4}
\date{}
\maketitle
\setlength{\parindent}{0em}
일\phantom{空}시 : 2012년 1월 17일 화요일, 15:00 ∼ 17:40\par
장\phantom{空}소 : 수학과 전산실(516호)\par
\hangfrom{참여자 : }김영욱 교수님, 김강수 한국TeX학회 부회장님, 대학원생 1명, 학부생 6명\par\bigskip
\setlength{\parindent}{1em}

고등학교 수학 참고서로 유명한 <수학의 정석> 책은 `필수예제', `유제'와 같은 문제들과 그에 따르는 설명들이 일정한 형식으로 나열되어 있고, 내용들이 장과 절, 소절 등의 구조에 의해 배열되어있는 대표적인 책이다. 이렇게 일정한 구조에 의해 일관되게 내용을 나열한 책을 구조적인 책이라고 하면, 구조적인 책을 읽는 사람들은 구조적이지 않은 책을 읽을 때보다 훨씬 효과적으로 내용을 받아들일 수 있을 것이다. 따라서 구조적인 글쓰기가 좋은 글을 작성하는 데에 있어서 중요한 역할을 할 수 있음을 알 수 있다. 특히 논문을 작성하거나, 단행본을 출간하는 일과 같이 `공식적인' 글쓰기를 할 때에 구조적인 글쓰기의 중요성은 말할 나위도 없을 것이다.\par\medskip
하지만 구조적인 글쓰기가 생각만큼 쉬운 것은 아니다. 무엇보다 글을 쓰는 사람이 글을 쓰기 전에 내용을 구조적으로 파악하고 있어야 하고, 그것들을 글로 표현할 수 있어야 한다. 또한 글의 내용의 큰 부분들을 적절하게 나눌 수 있어야 하고, 글을 효과적으로 편집할 수도 있어야 한다.\par\medskip
이번 네 번째 공부모임에서는 구조적인 문서를 작성하는 데 있어서 발생할 수 있는 어려움에는 무엇이 있는지 알아보고, 그러한 어려움들이 \TeX\ 의 기능들을 통해 어떻게 극복될 수 있는지 살펴보았다. 이를 통해 구조적인 글, 문서 혹은 책을 작성하는 것이 얼마나 중요하고, 또 복잡할 수 있는 작업인지 짐작해보았다.

\section{구조적인 글쓰기 - \TeX\ 의 여러 가지 기능들}

\subsection{Pagestyle}
페이지마다 반복되는 요소(예를들어, <수학의 정석> 상단에 표시되는 ``326 19. 정적분의 계산''처럼 `페이지'나 `장(章) 이름'과 같은 요소들)를 면주(面柱)라고 부르는데 TeX에서 이에 해당하는 것이 pagestyle이다.
\par\medskip
pagestyle에는 plain, empty, headings, hangul 등이 있다. 특히 hangul은 oblivour에서만 쓸 수 있다. 예를 들어 plain의 pagestyle을 적용하고 싶으면 \verb|\pagestyle{plain}|라고 치면 된다. 이 문서는 xoblivour클래스를 사용하고 있고 hangul로 지정되어 있다.\par

\subsection{\(\backslash\)tikz}
tikz 패키지를 이용하면 간단한 그림을 입력할 수 있다. \verb|\tikz|라는 명령을 사용한다. \par
\begin{center}
\tikz[overlay]\node[draw=blue,inner sep=2pt, anchor=text, rectangle, rounded corners=1mm] {정석연구};\phantom{정석연구}~~~~~
\tikz[overlay]\node[draw=blue,fill=blue,inner sep=2pt, anchor=text, rectangle, rounded corners=1mm] {\textcolor{white}{정석연구}};\phantom{정석연구}
\end{center}

\subsection{\(\backslash\)mdframed}
mdframed 패키지를 이용하면 간단한 글상자도 그릴 수 있다. \verb|\mdframed|라는 명령을 사용한다.\par\bigskip
\begin{mdframed}
[linewidth=2pt,linecolor=red,fontcolor=blue,leftline=false,backgroundcolor=green
,skipabove=4pt, innerbottommargin=6pt,roundcorner=1pt]
왼쪽편이 뚫려있고 윤곽선이 빨간색, 글자는 파란색인 글상자
\end{mdframed}

\subsection{새로운 명령 : \(\backslash\)newcommand}
\verb|\centering|이나 \verb|\noindent|처럼 `\(\backslash\)'이후에 특정한 낱말을 넣어 특정한 결과를 수행하게 하는 것을 명령이라고 하는 것 같다. 이미 지정되어 있는 여러 가지 명령들 외에 새로운 명령을 지정하는 방법은 다음과 같다.
\begin{center}
\verb|\newcommand{name}{definition}|
\end{center}
명령을 수행할 때에는 name을 그대로 입력하면 된다. 통상적으로 name의 맨 앞에는 \(\backslash\)가 붙는 것 같다. \verb|\newcommand|의 기본적인 인자인 name과 definition은 각각 명령의 명칭과 정의를 나타낸다. 이때 name을 묶는 중괄호들은 생략될 수 있다. 따라서 다음과 같은 명령이 가능하다.\par\medskip
\begin{center}
\mbdamark~~~~\euleridentity
\end{center}

\subsection{새로운 환경 : \(\backslash\)newenvironment}
\verb|\begin{center}, \end{center}| 혹은 \verb|\begin{theorem}, \end{theorem}|처럼 \verb|\begin{name}|과 \verb|\end| \verb|{name}|사이에 일정한 내용을 집어넣어 그 내용에 어떤 특징을 부여하는 것을 환경이라고 하는 것 같다. 이미 지정되어 있는 여러 가지 환경들 외에 새로운 환경을 지정하는 방법은 다음과 같다.
\begin{center}
\verb|\newenvironment{name}{beginning}{ending}|
\end{center}
환경을 사용할 때에는 \verb|\begin{name}|과 \verb|\end{name}|를 입력하고 그 사이에 내용을 입력하면 된다. 여기서 name은 새로 정의된 environment의 이름이고 beginning과 ending는 각각 \verb|\begin{name}|와 \verb|\end{name}|가 나타날 때에 수행할 명령이 들어간다. 따라서 다음과 같은 환경을 쓸 수 있다.\par\medskip
\begin{mbda}
\begin{enumerate}[(1)]\tightlist
\item
\(\int_0^2f(x)dx=\int_0^2x^2dx=[\frac{1}{3}x^3]_0^1
=\boldsymbol{\frac{1}{3}}\)
\end{enumerate}
\end{mbda}\par
\begin{beautifulequation}
~~`\euleridentity'~~
\end{beautifulequation}
\par\medskip
명령이나 환경의 이름을 지정할 때에는 구체적으로 정하는 것이 좋다. 예를 들어, `필수예제'를 환경으로 지정하려고 한다면 그 이름을 pilsuyeje와 같은 이름으로 정해 누가 어느 때에 보아도 무엇인지 잘 알 수 있을 만큼 구체적으로 적는 것이 좋다.

\subsection{\(\backslash\)input}
환경 내부에 있는 내용들은 별도의 파일로 저장해서 필요할 때마다 불러오는 방법이 유용하다. 이 기능은 하나의 문서를 여러 개의 파일로 데이터베이스화 함으로써, 구조적으로 문서를 작성하는데 중요한 역할을 할 수 있다. 이는 다음과 같이 쓸 수 있다.\par
\input{mbda.txt}\par
\input{beautifulequation.txt}\par

\subsection{카운터(Counter)}
\verb|\enumerate|, \verb|\section|, \verb|\subsection|, \verb|\theorem|등의 명령을 할 때에는 항상 그 명령의 위치에 따라 변하는 숫자가 존재한다. 페이지나 날짜를 바로 출력하고 싶을 때에도 일정한 규칙에 따라 나타나는 숫자들이 필요하다. 전체적으로 일관된 형식의 글을 쓰거나 책을 만듦에 있어서 이 숫자들을 잘 조정하는 것은 꽤 중요한 일이다. 다음과 같은 명령들은 이러한 숫자들을 사용자가 직접 조작할 수 있도록 해준다.\par\medskip
\verb|\enumerate|, \verb|\section|, \verb|\subsection|, \verb|\theorem|등의 명령을 쓰면 각각의 대상들에 자동적으로 숫자가 부여된다. 만약 숫자를 부여할 새로운 대상을 지정하고 싶다면 \verb|\newcounter{name}[section]|라고 입력하면 된다. name에는 숫자를 부여할 대상의 이름을 쓰고, section에는 숫자가 연동될 단위가 section인지, chapter인지, subsection인지, subsubsection인지를 정한다. 따라서 위의 명령에 section 대신 chapter를 입력하면 장(章) 단위로 숫자가 부여된다.\par\medskip
\verb|\setcounter{name}{n}|라는 명령을 쓰면, 대상에 숫자를 특정한 값으로 지정할 수 있다. 예를 들어 현재 페이지를 313페이지라고 지정하고 싶다면 \verb|\setcounter{page}{313}|라고 입력하면 된다. 입력되어 있는 숫자를 출력하고 싶으면 \verb|\the{name}|이라고 입력하면 된다. 이때의 중괄호는 생략될 수 있으므로 다음과 같이 써진다.\par\medskip
\begin{center}
\setcounter{page}{313}\thepage\par
\setcounter{chapter}{19}\thechapter-10
\end{center}
\par\medskip
한편 대상에 지정된 숫자를 1만큼 늘리고 싶을 때에는 \verb|\stepcounter{name}|, n만큼 늘리고 싶을 때에는 \verb|\addtocounter{name}{n}|이라고 쓸 수 있다. 물론 \verb|\stepcounter{name}|과 \verb|\addtocounter{name}{1}|의 서로 다른 두 명령은 동일한 결과를 가져올 것이다. 따라서 다음과 같이 나타난다.\par\medskip
\begin{center}
\thepage+1=\stepcounter{page}\thepage\par
\thepage+1=\addtocounter{page}{1}\thepage\par
\thepage+9=\addtocounter{page}{9}\thepage
\end{center}

\subsection{미니페이지(minipage)}
한 개의 페이지를 여러 단으로 나누고 싶을 때에는 minipage 환경을 사용한다. 이 때의 minipage는 아래아한글의 기능인 `다단'과는 다르다.\par
\begin{minipage}{0.4\textwidth}
첫 번째 미니페이지
\end{minipage}
\begin{minipage}{0.4\textwidth}
두 번째 미니페이지
\end{minipage}
\begin{minipage}{0.2\textwidth}
세 번째 미니페이지
\end{minipage}
\section{<수학의 정석>과 똑같이 만들어 보기}
지금까지 언급한 \TeX\ 의 기능들을 이용하면 다음과 같은 <수학의 정석>책의 일부분을 비슷하게 \TeX\ 으로 만들 수 있을 것이다.\par\medskip
\begin{center}
\includegraphics[width=10cm]{js1.jpg}
\end{center}
\newpage
%%%%%%%%%%%%%%%%%%%%% environment들을 지정한 부분이다.%%%%%%%%%%%%%%%%%%%%%
\newenvironment{psyj}{\newpage\begin{mdframed}\psyjmark
\quad{\Large\textbf{\thechapter}}\stepcounter{psyj}\textbf{-\thepsyj.}}
{\end{mdframed}\medskip}
\newenvironment{jsyg}{\jsygmark}{\par\medskip}
%\newenvironment{mbda}{\mbdamark}{\par\medskip} : 이미 지정된 환경
\newenvironment{yj}{\yjmark\quad{\Large\textbf{\thechapter}}
\stepcounter{yj}\textbf{-\theyj.}}{\par\medskip}

%%%%%%%%%%%%%%%%%%%%% counter들을 지정한 부분이다.%%%%%%%%%%%%%%%%%%%%%
%\setcounter{page}{326} : 이미 지정된 페이지번호
%\setcounter{chapter}{19} : 이미 지정된 장번호
\newcounter{psyj}[section]\setcounter{psyj}{5}
\newcounter{yj}[section] \setcounter{yj}{7}

%%%%%%%%%%%%%%%%%%%%% command들을 지정한 부분이다.%%%%%%%%%%%%%%%%%%%%%
\newcommand\psyjmark{\tikz[overlay]\node[draw=blue,inner sep=2pt,
anchor=text, rectangle, rounded corners=.3mm] {필수 예제};\phantom{필수 예제}}
\newcommand\jsygmark{\tikz[overlay]\node[draw=blue,inner sep=2pt, 
anchor=text, rectangle, rounded corners=.3mm] {정석연구};\phantom{정석연구}}
\newcommand\jsmark{\tikz[overlay]\node[draw=blue,fill=blue,inner sep=2pt, 
anchor=text, rectangle, rounded corners=.3mm] {\textcolor{white}{정석}};
\phantom{정석}}
%\newcommand\mbdamark{\tikz[overlay]\node[draw=blue,inner sep=2pt,
%anchor=text, rectangle, rounded corners=.3mm] {모범답안};\phantom{모범답안}}
%:이미 지정된 명령
\newcommand\answermark{\tikz[overlay]\node[draw=blue,inner sep=2pt, 
anchor=text, rectangle, rounded corners=.3mm] {답};\phantom{답}}
\newcommand\yjmark{\tikz[overlay]\node[draw=blue,inner sep=2pt, anchor=text, 
rectangle, rounded corners=1mm] {유~~제};\phantom{유~~제}}

\begin{psyj}
\(f(x)=\left\{\begin{array}{ll}x^{2}&(0\leq x\leq1)\\2x-x^{2}&(x\ge1)
\end{array}\right.\)일 때,\\
다음 정적분의 값을 각각 구하여라.\par
\((1)\int^{1}_{0}f(x)dx\qquad\qquad (2) \int^{2}_{0}f(x)dx\qquad\qquad
(3)\int^{3}_{0}f(x)dx\)
\end{psyj}

\begin{minipage}{0.65\textwidth}
\begin{jsyg}
\quad적분구간 안에서 함수가 다를 때에는 적분구간을 나누어서 적분한다. 곧,\par\medskip
\jsmark\quad \(\boldsymbol{f(x)=\left\{\begin{array}{ll}g(x)&(a\leq
x\leq b)\\h(x)&(c\leq x\leq d)\end{array}\right.}\) 일 때,\par
\[\boldsymbol{\int^{c}_{a}f(x)dx=\int^{b}_{a}g(x)dx+\int^{c}_{b}h(x)dx}\]
\par
이 문제의 경우 오른쪽 그림을 참조하면\par
\begin{enumerate}[(1)]\tightlist
\item 적분구간[0,1]에서 \(f(x)=x^{2}\)\par
\item 적분구간 [0,2]에서 구간 [0,1]일 때 \(f(x)=x^{2}\), 구간 [1,2]일 때 
\(f(x)=2x-x^{2}\)\par
\item 적분구간 [0,3]에서 구간 [0,1]일 때 \(f(x)=x^{2}\), 구간 [1,3]일 때 
\(f(x)=2x-x^{2}\)
\end{enumerate}
\end{jsyg}
\end{minipage}
\begin{minipage}{0.35\textwidth}
\includegraphics[width=4cm]{1.png}
\par\bigskip
\includegraphics[width=4cm]{2.png}
\end{minipage}

\begin{mbda}
\begin{enumerate}[(1)]\tightlist
\item
\(\int_0^2f(x)dx=\int_0^2x^2dx=[\frac{1}{3}x^3]_0^1
=\boldsymbol{\frac{1}{3}}\longleftarrow\)~\answermark\par
\item
\(\int^{2}_{0}f(x)dx=\int^{1}_{0}f(x)dx+\int^{2}_{1}f(x)dx
=\int^{1}_{0}x^{2}dx+\int^{2}_{1}(2x-x^{2})dx\)\\
\phantom{\(\int^{2}_{0}f(x)dx\)~}\(=\frac{1}{3}+[x^2-\frac{1}{3}x^3]_1^2
=\frac{1}{3}+\frac{2}{3}=\boldsymbol{1} \longleftarrow\)~\answermark\par
\item \(\int_0^3f(x)dx=\int_0^1f(x)dx+\int_1^3f(x)dx
=\int_0^1x^2dx+\int_1^3(2x-x^2)dx\)\\
\phantom{\(\int_0^3f(x)dx\)~}\(=\frac{1}{3}+[x^2-\frac{1}{3}x^3]_1^3
=\frac{1}{3}+(-\frac{2}{3})=\boldsymbol{-\frac{1}{3}} \longleftarrow\)~\answermark\par
\end{enumerate}
\end{mbda}

\begin{minipage}{0.7\textwidth}
\begin{yj}
\(f(x)=\left\{\begin{array}{ll}2x+1&(x\leq 1)\\x^{2}
+2&(x\geq 1)\end{array}\right.\)로 주어질 때, \(\int_{-1}^2f(x)dx\)를 구하여라.
\quad\answermark\quad\(\boldsymbol{\frac{19}{3}}\)
\end{yj}
\begin{yj}
그림은 함수 \(y=f(x)\)의 그래프이다. 이 때, \(\int_0^2x^2f(x)dx\)를 구하여라. \quad\answermark\quad\(\boldsymbol{\frac{5}{2}}\)\par
\end{yj}
\end{minipage}
\begin{minipage}{0.3\textwidth}
\includegraphics[width=4cm]{3.png}
\end{minipage}

\newpage

\section{구조적인 문서의 작성}
처음에 언급하였듯, 글을 구조적으로 쓰는 것은 중요한 일이다. 구조적인 글을 쓰는 효과적인 방법의 하나는 구조적으로 문서를 작성하는 능력을 숙달하는 것이다. 지금까지 설명한 것들을 잘 이용하면 구조적인 문서를 만드는 데 큰 도움이 될 것이다. 특히 counter나 input등이 유용한 것은 다음의 예에서 명백하게 드러난다.\par\medskip
시험을 출제하는 출제자가 (수능에서의 A형, B형 시험지와 같이) 서로 다른 순서로 배열된 몇 종류의 시험지문서를 만드는 데 보통의 워드프로세서를 사용한다고 하자. 출제자는 원본 파일의 내용을 복사해 다른 문서에 옮기는 작업을 해야 할 것이다. 이 사람은 아주 정교하게 작업해야만 온전하게 출력된 시험지들을 얻을 수 있을 것이다. 내용을 옮기는 과정에서 문제의 번호들도 자주 바꾸어야 할 것이고 내용을 옮기는 과정에서 발생하는 여백의 크기도 세밀하게 조정해야 할 것이기 때문이다. 심지어 매종류의 시험지마다 각각에 해당하는 답과 답안지도 함께 만들어야 하는 경우에는 문제가 더 복잡해진다. \par\medskip
이런 문제들은 \TeX\을 사용하면 효율적으로 해결될 수 있을 것이다. 문제의 번호들은 counter를 이용해 조정하고, 각 문제에 대한 문제파일, 답파일, 해설파일을 각각 .txt파일로 만들어 원래의 문서에 input하는 형식으로 문서를 작성하면 된다.

\section{마치며}
이번 공부모임의 일차 목적은 번역된 해석학 2판을 \TeX\ 파일로 만들어 책을 만드는 것이지만, 이와 별도로 석사(혹은 박사) 논문의 클래스파일을 하나 만들어 보려고 한다. 현재 다수의 국내 대학들의 홈페이지에는 논문을 작성하는 데 필요한 학위 논문 클래스가 등록되어 있으나, 고려대학교 홈페이지에는 아직 등록이 되어있지 않다. 이번 기회를 빌어 학생들이 논문을 만드는 데 유용하게 이용할 수 있는 클래스파일을 만들 수 있기를 바란다.\par\medskip
이번 모임의 마지막에는 최준용 학생이 만든 논문 초안에 그림 파일을 첨부하는 작업을 함께 해 보았다. 이 과정에서 오늘 배운 대부분의 내용들을 사용했다.

\section*{Detexify}
쉬는 시간 중에 Detexify라는 프로그램에 대한 소개가 있었다. 이 프로그램을 이용하면 간단히 손으로 스마트폰에 기호를 그림으로써(혹은 마우스로 드래그함으로써)그린 기호에 대한 명령식을 알 수 있다. 스마트폰(의 앱) 혹은 웹(구글에서 detexify라고 검색)에서 쉽게 Detexify라는 프로그램을 사용할 수 있다. 

\section*{과제}
\begin{enumerate}[(1)]
\item \TeX\ 파일을 
하고 싶은 것을 아무 거나 해서 결과물을 가져오는 것.
\item 고려대 학위 논문 클래스 파일(초안)을 살펴보는 것.
\end{enumerate}
\end{document}