본문 바로가기

ktug

처음 작성한 LaTeX 매크로

처음으로 매크로를 만들어 봤다. 잘 만든건지는 잘 모르겠다 :). 여튼 나름 만족한다.

요구 사항은 왼쪽 마진 영역에 특정 그림 또는 문자를 넣고 텍스트는 shaded환경으로 감싸는 일종의 sidebar 같은 것을 만든다.

맨 처음 한것은 \cmd{\marginpar}를 사용했다.

위험 지역을 나타내는 문자를 그림대신 선택했다. 이것을 식자하기 위해서는 manfnt.sty를 사용해야 한다.
------------------------------------------------------------------------------
\setlength{\marginparwidth}{13mm}
\marginpar{\raisebox{-15mm}{\textdbend}}
\begin{shaded}
텍스트.
\end{shaded}
------------------------------------------------------------------------------
이렇게 할 경우 textdbend를 2개 넣을때 오른쪽 정렬을 해야 한다. 즉 \cmd{\flushright}를 해주는 것이 좋다.
본문의 시작 위치와 margin 사이의 값도 정해 주는 것이 좋다.(\cmd{\marginparsep})

\cmd{\marginpar}가 shaded환경 밖에 있어 기준점이 맞지 않아 -15mm정도 내렸는데 좋은 방법은 아닌 것 같다.

2007년 AJT 1권에 수록된 조진환 교수님의 \ccnm{\LaTeX 박스 매트로 분석} 논문과 \ccnm{한글과 \TeX}문서의 상자(box) 관련글에서 \cmd{\makebox}의 사용법에서 힌트를 얻어 \cmd{marginpar} 대신 cmd{\makebox}를 사용하도록 다음과 같이 수정한다.
------------------------------------------------------------------------------
\begin{shaded}
\makebox[0mm][r]{\raisebox{-.5\totalheight}[0pt]{\textdbend}~~~~~~~~~~~~}
텍스트.
\end{shaded}
------------------------------------------------------------------------------

\cmd{makebox}의 줄이 너무 길기 때문에 새로운 매크로 명령어를 만든다.
------------------------------------------------------------------------------
\newcommand\mynotemark[1]{%
\makebox[0mm][r]{\raisebox{-.5\totalheight}[0pt]{#1}~~~~~~~~~~~~}}
------------------------------------------------------------------------------

이렇게 하면 전달인자로 \cmd{\textdbend}를 2개 넣어 주어도 된다. 즉 다음과 같은 사용도 가능하다.
------------------------------------------------------------------------------
\begin{shaded}
\mynotemark{\textdbend\textdbend}
텍스트.
\end{shaded}
------------------------------------------------------------------------------

필요하다면 매크로를 수정하여 작은 그림으로 대체도 가능하다.

여기서 한발 더 나아간다면 하나의 환경으로 만들 수도 있다.
------------------------------------------------------------------------------
\newcommand\mynotemark[1]{%
\makebox[0mm][r]{\raisebox{-.5\totalheight}[0pt]{#1}~~~~~~~~~~~~}}

\newenvironment{mynote}[1][\textdbend]%
{\begin{shaded}
\mynotemark{#1}
}%
{%
\end{shaded}%
}

\begin{mynote}[\textdbend\textdbend]
텍스트.
\end{mynote}
------------------------------------------------------------------------------

mynote환경 옆의 전달인자를 생략하면 기본값으로 textdbend를 찍어주도록 하자.