KTUGFaq

KTUG FAQ

"LaTeX으로 조판한다 : 간단 악보 그리기 (5)"에 댓글 더하기

로그인:
비밀번호:
가입
He who has imagination without learning has wings but no feet.
FrontPage › Karnes/악보그리기
May 08, 2006
LaTeX으로 조판한다 : 간단 악보 그리기 (5)
Submitted by Karnes @ 05-08 [01:31 am]
원래 이 글은 장난삼아 올린 글이었는데, ischo님과 작은나무 님 등이 *열광적인* 반응을 보여주시는 바람에 여기까지 오게 되었습니다.

a.mtx를 성공적으로 컴파일하여 악보를 출력하는 데 성공했다면, 이제 제대로 된 조판에 도전합니다. 앞서 말한 것처럼 mtx는 MusiXTeX 출력을 얻기 위한 front-end이고, 얻어진 MusiXTeX 출력은 (당연히 그대로 쓸 수도 있지만) LaTeX 문서에 삽입하는 것이 가능합니다.
  1. LaTeX 클래스는 memoir를 사용하는 것으로 하겠습니다. synapse 님의 요청 때문이기도 하고 memoir의 놀라운 조판 능력을 악보 조판에도 활용할 수 있기 때문입니다.
  2. 지금까지 진행된 과정을 보면, mtx 매크로를 이용한 악보의 입력 -> pmx를 이용한 midi 출력과 tex 변환 -> MusiXTeX을 이용한 fine tuning의 순으로 진행되는 것을 아셨을 것입니다. MusiXTeX에 능숙하다면 fine tuning이 얼마든지 가능해서 가히 상상력의 한계까지 악보를 조판할 수 있겠지마는, 그렇게까지 오묘한 경지는 나중에 들어가보도록 하고 여기서는 간단히 조판 결과를 이용하는 것만을 설명하려 합니다.

.tex 파일의 확인과 복사
  • a.mtx를 prepmx -> pmxab 순으로 컴파일 하면 a.pmx와 a.tex이 생겨납니다. 이 가운데 우리가 이용할 것은 a.tex인데, a.mtx를 나중에 수정하여야 할 것이 틀림없으므로 a.tex을 ai.tex으로 하나 복사하도록 하겠습니다.
  • 우리가 만들려는 main 문서에 해당하는 tex 파일을 하나 만듭니다. 이것은 afinal.tex이라고 부르도록 하지요.

afinal.tex의 작성
\documentclass[oldfontcommands,a4paper]{oblivoir}
\usepackage{etex}
\ifpdf
  \input glyphtounicode\gentopdfunicode=1
\fi
  • 여기까지는 일반적인 설정과 같습니다. oblivoir의 옵션은 원하는 대로 사용하시면 됩니다.
  • [oldfontcommands] 옵션은 반드시 주어야 합니다.
  • \usepackage{etex}도 있는 것이 안전합니다.
\settrimmedsize{\stockheight}{\stockwidth}{*}
\setlrmarginsandblock{15mm}{*}{1.0}
\setulmarginsandblock{20mm}{*}{1.0}
\checkandfixthelayout
  • 페이지 레이아웃 설정입니다. MemoirClass에 익숙하시다면 이 방법이 좋을 것으로 봅니다. 주의 geometry 패키지는 쓰지 않습니다.
\usepackage{musixtex}
\input pmx
\def\mtxversion{0.60}
\def\mtxdate{<16 March 2005>}
\input mtx
\input musixmad
  • 드디어 musixtex을 불렀습니다. 위의 설정은 그냥 고정시켜놓고 그대로 옮겨쓰시면 됩니다. 순서를 바꾸지 않도록 주의하십시오.
\let\MYstartmuflex\startmuflex
\let\MYendmuflex\endmuflex
\let\startmuflex\relax
\let\endmuflex\relax
\AtBeginDocument{\MYstartmuflex}
\AtEndDocument{\MYendmuflex}
  • 이 솔루션은 예전에 제가 고안한 것으로 pmx가 만든 tex 소스를 삽입하기 위한 전처리라고 생각하시면 됩니다. 역시 고민하지 말고 그냥 그대로 가져다 쓰면 되겠습니다.
  • 이 코드가 하는 일은 한 문서에 두 개 이상의 악보를 넣기 위해서 필요한 것입니다.
\begin{document}
\pagestyle{empty}

\centerline{\Large 봄이 오면}
\rightline{김동환 작시}
\rightline{김동진 작곡}

\vskip\onelineskip

\begin{music}
\input ai
\end{music}

\end{document}
  • 문서가 시작되고 노래 제목과 작사자 작곡자를 표시한 다음 music 환경 안에 ai.tex 파일을 불러들입니다. 여기서는 이것이 전부입니다.

ai.tex의 수정
  • 사실은 이 부분이 어렵습니다. MusiXTeX 코드는 좀 보고 있으면 현기증이 나지요. 게다가, MusiXTeX 매뉴얼에 쓰고 있는 대로, 작은 빈 칸 하나도 용서하지 않는 것이 MusiXTeX이라 특히 행끝의 % 부호를 주의하여야 합니다.
  • 우선, 다음 10행을 주석처리합니다. 이미 preamble로 갔거나 (LaTeX에서는 사용하지 않을) kotexplain 등을 부르는 부분입니다.
    %\def\mtxversion{0.60}
    %\def\mtxdate{<16 March 2005>}
    %\input mtx
    %\input kotexplain
    %\mtxComposerLine{김동환 작사}{김동진 작곡}
    %\mtxTitleLine{{\hfontsize{at 18pt}봄이 오면}}
    %\input musixtex
    %\input pmx
    %\input musixmad
    
  • 옛날 htex을 쓰던 시절에는 htex으로 만들어진 악보를 HLaTeX으로 옮기기가 너무 어려웠습니다. 한글 구현 방식이 판이하게 달랐기 때문이지요. 그러나 kotexplain과 dhucs는 형제간이기 때문에 이행이 아주 수월합니다.
  • 그 다음 몇 줄 가운데 페이지 레이아웃에 관계되는 hsize/vsize는 반드시 지워주어야 합니다. 수정한 결과는 다음과 같습니다. \nopagenumbers도 LaTeX의 pagestyle로 대체되어야 할 부분이고 tracingstats는 music 환경이 스스로 설정하므로 이들도 삭제합니다.
    \smallmusicsize%
    %\nopagenumbers
    %\tracingstats=2\relax
    %\hsize=524pt
    %\vsize740pt
    \def\nbinstruments{2}
    
  • 33행의 \readmod{a}라는 부분은 필요없습니다. 삭제합니다.
  • 타이틀과 작곡자를 표시하는 부분인 37행과 38행을 찾아서 주석처리 합니다. 이 부분의 식자는 LaTeX을 이용할 것입니다.
  • 이제 끝으로 맨 끝행 (189) 의 \bye를 지웁니다. LaTeX에는 \bye라는 명령이 없습니다.
  • 여기까지 하면 일단 컴파일은 가능할 것입니다. afinal을 컴파일하여봅니다. 물론 latex -> musixflx -> latex의 루트를 거칩니다.

약간의 레이아웃 설정
  • PlainTeX에서 만든 악보는 피아노의 두 staff 간 간격이 좀 먼 듯하고 가사 들어가는 부분이 빡빡한 느낌을 줍니다. 이 부분을 수정해보겠습니다.
  • 관련된 부분은 ai.tex의 32행입니다.
    stafftopmarg0pt\staffbotmarg0pt\interstaff{14.6}\relax
    
  • 위의 값을 적절히 조절하면 원하는 레이아웃을 얻을 수 있습니다. 이밖에
    \mtxInterInstrument{1}{6}%
    \mtxStaffBottom{0}%
    
    와 같은 매크로를 이용할 수도 있습니다.
  • 아무튼, 추천하는 값은 대강 다음과 같습니다.
    \stafftopmarg0pt\staffbotmarg10pt\interstaff{11}\relax
    \mtxInterInstrument{1}{7}%
    \mtxStaffBottom{0}%
    
  • 이 정도면 우리가 설정한 판면에 한 페이지에 다 들어갈 것입니다. 이 값들은 경험치인데 \mtx... 명령이 원래의 \inter... 또는 \...marg 명령을 오버라이드하므로 되도록 \mtx... 명령을 수정하는 것이 좋습니다. 아무튼지간에 각 매크로의 의미는 이름이 잘 말해주고 있다고 생각합니다. 예를 들어 \mtxInterInstrument#1#2에서 #1은 악기의 번호(아래에서부터 1, 2, ...)인데, 여기서 1번이라 한 것은 piano 보를 가리킵니다. 그리고 두번째 숫자는 MusiXTeX의 레이아웃 길이 기본 단위에 곱해지는 승수입니다.
  • 여러 가지 시도를 해보시기를 권장합니다. 다만, 값을 바꾸어도 레이아웃이 달라지지 않으면 그 값을 오버라이드하는 다른 매크로가 없는지 조사해보아야 합니다.

정리 다음 과제
  • 다음 과제는 좀 고급과정으로, 전주 시작 부분의 노래 보를 없애고 피아노 반주부만 남기는 방법과 몇 가지 MusiXTeX 트릭을 시도해보기로 합니다.
  • 지금까지의 방법으로도 간단한 피아노 반주가 붙은 노래를 조판하는 데는 어려움이 없을 것입니다.

잘 됩니다. {OK} 그런데, 33행의 \readmon{a}는 \readmod{a}로 되어있었습니다. --ischo 2006-05-08 03:20:59

일전의 도은이아버님의 smallmusixtex를 사용한 source에서는 \dim(?) error가 있었던것 같은데요? 어떨때 이런 error message가 나오는지요? 만약 위의 source를 긴 글과 같이 조판하게 될때 나타나게 되는지요?...... 어찌 되었던 재미있게 잘 보고 있습니다. 위의 숙제도 한번 해보고 싶은데요. 도통시간이 나지를 않습니다. -- synapse 2006-05-08 22:46:19
이름:

서명하지 않기
 

^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-08-19 16:14:58
Processing time 0.0471 sec