Estou usando o lyluatex
pacote para integrar LilyPond ao LaTeX. Eu criei o seguinte comando para gerar convenientemente o Figured Bass no tamanho correto em um texto:
\newcommand{\fig}[1]{%
\raisebox{-2pt}{%
\lilypond{%
#(set-global-staff-size 18)%
\figures {#1}
}%
}%
}
O problema é que #(set-global-staff-size 18)
não é realmente um argumento, mas sim um comando LilyPond. O código é compilado, mas sempre tenho que dizer para ele pular o argumento inválido.
\detokenize
e \string
se mostraram ineficazes.
Alguma sugestão sobre como passar a hashtag para LilyPond enquanto o LaTeX a ignora?
Responder1
Se #
for o catcode 12 entrando \lilypad
, então isto:
\documentclass{article}
\begin{document}
\newcommand{\fig}[1]{%
\raisebox{-2pt}{%
\prelilypond{%
##(set-global-staff-size 18)%
figures {#1}% I removed the backslash for this non-working example.
}%
}%
}
\newcommand\prelilypond[1]{\expandafter\lilypond\expandafter{\string#1}}
\def\lilypond#1{#1}
\fig{1}
\end{document}
Se #
for o catcode 6, então isto:
\documentclass{article}
\begin{document}
\newcommand{\fig}[1]{%
\raisebox{-2pt}{%
\lilypond{%
##(set-global-staff-size 18)%
figures {#1}% I removed the backslash for this non-working example.
}%
}%
}
\def\lilypond#1{\string#1}
\fig{1}
\end{document}
Obviamente, nesses exemplos, eu redefini \lilypad
para algo detalhado, então não precisei executar um exemplo musical real.
Responder2
Você pode usar \edef
, o que requer tornar alguns nomes de sequência de controle não expansíveis; uma interface de nível inferior é necessária para garantir \fig
um novo comando.
\makeatletter
\@ifdefinable{\fig}{%
\edef\fig#1{%
\noexpand\raisebox{-2pt}{%
\noexpand\lilypond{%
\string#(set-global-staff-size 18)%
\noexpand\figures {#1}%
}%
}%
}%
}
\makeatother