
私は、TeX 内で Lilypond を使用していくつかの音楽練習をタイプセットしています。プレーン コードは問題なく動作するようですが、再利用されるコードがたくさんあるため、変数を設定しようとしました。変数は取得されるものの、展開されないようです。
MWE:
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = LilyPond-Book
% !LILYPOND tex = xelatex
\documentclass{memoir}
\begin{document}
\begin{lilypond}
{
\include "lilypond-variables.ly"
\time 2/4
\grace { g''32 } g'4 \Ggrace a'4 \Ggrace b'4 \Ggrace c''4
\Ggrace d''4 \Ggrace e''4 \Ggrace f''4 g''4
a''2 g''4 f''4 \Ggrace e''4
\Ggrace d''4 \Ggrace c''4 \Ggrace b'4 \Ggrace a'4
\Ggrace g'4
\bar "||"
}
\end{lilypond}
\end{document}
含まれるファイルlilypond-variables.ly
:
Ggrace = { \grace { g''32 } }
出力:
ご覧のとおり、「ハードコードされた」g の装飾音は問題ありませんが、生成されるはずの装飾音は\Ggrace
表示されません。
\include
私は(Lilypond のドキュメントで指定されている引用符付き) と(上記のような引用符と中括弧付き)を試しました。\input
その前には TeX コード内で標準の s を試しました\newcommand
が、結果は同じでした。
装飾音符の組み合わせが非常に多いため、これはかなり大きな問題です。 最初はすべてハードコードしていたので、今後のコーディングが面倒でエラーが発生しにくくなると考えました。
macOS Sierra 10.12.5 (16F73) および TL 2016 を使用しています。
答え1
\include
を中括弧の外側に移動すると、コードは次のように正常に動作することがわかります。
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = LilyPond-Book
% !LILYPOND tex = xelatex
\documentclass{memoir}
\begin{document}
\begin{lilypond}
\include "lilypond-variables.ly"
{
\time 2/4
\grace { g''32 } g'4 \Ggrace a'4 \Ggrace b'4 \Ggrace c''4
\Ggrace d''4 \Ggrace e''4 \Ggrace f''4 g''4
a''2 g''4 f''4 \Ggrace e''4
\Ggrace d''4 \Ggrace c''4 \Ggrace b'4 \Ggrace a'4
\Ggrace g'4
\bar "||"
}
\end{lilypond}
\end{document}
出力:
つまり、@egreg が示唆したように、これは実際には Lilypond の問題でした (解決策を示してくれた Lilypond リストの同僚に感謝します)。