수식은 LaTeX가 가장 잘하는 분야입니다. 그렇다면 오선보 악보는 어떨까요? 실제 선택지는 세 가지입니다. TeX 안에서 조판하는 MusiXTeX, 별도의 고품질 악보 엔진 LilyPond를 lilypond-book으로 가져오는 방식, 그리고 간단한 ABC 기보법을 abc 패키지로 넣는 방식입니다. 이 페이지에서는 각각의 구조와 선택 기준을 살펴봅니다.
MusiXTeX - TeX 안에서 악보 조판
MusiXTeX는 TeX 매크로만으로 악보를 조판하는 음악 조판 시스템입니다. 오래된 MusicTeX의 후속이며, 오선, 음표 머리, 빔, 슬러 등을 모두 TeX의 틀 안에서 그립니다. 외부 그리기 프로그램에 의존하지 않으므로 전체 도구 체인을 TeX 안에 묶어 두고 싶을 때 알맞습니다.
처리 방식도 독특합니다. 음표 사이의 간격을 최적화하기 위해 MusiXTeX는 세 번의 패스로 동작합니다. 먼저 TeX, 실제로는 e-TeX가 파일을 한 번 처리해 .mx1 파일을 쓰고, 포함된 Lua 스크립트 musixflx가 이를 읽어 각 박의 간격을 계산한 뒤 .mx2를 만듭니다. 마지막으로 TeX가 한 번 더 실행되어 최종 출력을 만듭니다. musixtex라는 래퍼 스크립트가 이 세 실행을 조율하며, 필요하면 아래의 pmx / M-Tx 같은 전처리기도 호출합니다.
musixtex score.tex # runs e-TeX → musixflx → e-TeX, then makes the PDF원시 MusiXTeX 매크로는 손으로 쓰기 어렵다는 평가가 일반적이어서, 직접 작성하는 경우는 드뭅니다. 대신 더 높은 수준의 프런트엔드를 사용합니다. pmx는 훨씬 간단한 입력 언어를 MusiXTeX 매크로로 컴파일하는 전처리기입니다. 가사가 있는 성악곡에는 pmx 앞단에 M-Tx를 더 두어 M-Tx -> pmx -> MusiXTeX 순서로 변환합니다. 아래는 최소 MusiXTeX 골격이며, 실제로는 pmx 입력으로 작성하는 편이 더 현실적입니다.
\input musixtex
\begin{music}
\instrumentnumber{1}
\setclef{1}{\treble}
\startextract
\Notes \qa{cdef} \en
\Notes \ha{g} \en
\endextract
\end{music}
\endLilyPond와 lilypond-book - 별도 엔진 가져오기
LilyPond는 자체 입력 언어를 가진 전용 악보 조판 엔진입니다. TeX와는 별도의 프로그램이며, 최고 수준의 악보 품질을 내는 도구로 널리 알려져 있습니다. 입력 방식은 MusiXTeX와 전혀 다르지만, 평이한 표기만으로도 그에 못지않거나 더 정교한 결과를 얻을 수 있습니다. 이를 LaTeX 문서와 결합하는 표준적인 방법이 lilypond-book입니다.
아이디어는 이렇습니다. 확장자가 .lytex인 파일에 LaTeX 본문과 LilyPond 조각을 함께 씁니다. 짧은 조각은 \lilypond{...}에, 긴 조각은 lilypond 환경에, 외부 파일은 \lilypondfile{...}로 넣을 수 있습니다. 이 파일을 lilypond-book에 넘기면 각 조각을 LilyPond로 렌더링해 이미지 또는 PDF를 만들고, 조각을 그래픽 포함 명령으로 바꾼 일반 .tex 파일을 씁니다. 그다음 평소처럼 컴파일하면 악보가 문서 안에 자연스럽게 들어갑니다.
% --- score.lytex ---
\documentclass{article}
\begin{document}
Here is a short phrase:
\begin{lilypond}[quote,fragment,staffsize=26]
c'4 d' e' f' g'2 g'
\end{lilypond}
\end{document}빌드는 두 단계입니다. 먼저 .lytex 파일을 lilypond-book으로 처리하고, --pdf를 붙이면 조각을 PDF로 임베드할 수 있습니다. 그런 다음 생성된 .tex를 pdflatex 등으로 컴파일합니다. 악보의 줄 너비는 프리앰블에서 본문 너비를 읽어 자동으로 맞춰집니다.
lilypond-book --pdf score.lytex # renders snippets, writes score.tex
pdflatex score.tex # compile the generated document더 현대적인 선택지는 lyluatex 패키지입니다. LuaLaTeX 전용이며 lilypond-book 전처리 단계를 거치지 않고, 컴파일 중 LilyPond를 직접 호출해 악보를 만들고 포함합니다. lily 환경이나 \lilypond 명령으로 악보를 쓰고 lualatex를 --shell-escape와 함께 실행하면 됩니다. lilypond-book의 드롭인 상위 호환으로 자리 잡고 있습니다.
abc 패키지 - 간단한 ABC 기보법
abc 패키지는 매우 간결한 텍스트 음악 형식인 ABC 기보법을 LaTeX에 삽입합니다. ABC는 사람이 읽고 쓰기 쉬운 것을 중시한 표기법이며, 아일랜드, 잉글랜드, 스코틀랜드 등 서유럽 계통의 민요와 리드 시트(단선율) 기록에 널리 쓰입니다.
구조는 lilypond-book과 비슷하게 외부 변환기에 의존합니다. abc 환경에 쓴 악보를 패키지가 \write18(셸 실행)을 통해 abcm2ps에 넘기고, 이 도구가 악보 이미지로 렌더링한 뒤 문서에 포함합니다. 셸 실행을 사용하므로 컴파일에는 -shell-escape가 필요합니다. 또한 ASCII ABC를 MusicTeX/MusiXTeX 입력으로 변환하는 고전적인 도구 abc2mtex도 있으며, 전처리기로 사용할 수 있습니다.
\documentclass{article}
\usepackage{abc}
\begin{document}
\begin{abc}
X:1
T:Simple Tune
M:4/4
L:1/8
K:C
CDEF|GABc|
\end{abc}
\end{document}pdflatex -shell-escape tune.tex # abc calls abcm2ps via \write18무엇을 선택할까
대략적인 기준은 다음과 같습니다. 도구 체인을 TeX 안에 두고 정교한 악보 조판도 TeX 안에서 끝내고 싶다면 MusiXTeX를 사용합니다. 실제로는 pmx / M-Tx를 거칩니다. 품질을 최우선으로 하는 본격 악보라면 LilyPond를 lilypond-book으로 가져오고, LuaLaTeX라면 lyluatex도 선택할 수 있습니다. 민요나 짧은 단선율을 빠르게 넣고 싶다면 abc 패키지가 적합합니다.
| 방식 | 작동 방식 | 적합한 용도 |
|---|---|---|
MusiXTeX | TeX 매크로로 조판(3패스 + pmx / M-Tx) | TeX 안에서 완결; 정교한 악보 |
LilyPond (lilypond-book) | 외부 엔진으로 렌더링 -> 이미지/PDF 포함 | 최고 품질의 본격 악보 |
lyluatex | LuaLaTeX가 컴파일 중 LilyPond를 직접 호출 | LuaLaTeX에서 쉽게 쓰는 LilyPond |
abc | ABC 기보를 abcm2ps로 변환해 포함 | 민요와 단선율 리드 시트 |
이 도구들은 모두 CTAN에 있으며 TeX Live 같은 주요 배포판에 포함됩니다. LilyPond 본체와 그에 따른 lilypond-book은 별도 설치가 필요할 수 있습니다. 외부 프로그램을 호출하는 abc와 lyluatex는 셸 실행을 허용하는 -shell-escape가 전제라는 점에 주의하세요.