Estoy usando el lyluatex
paquete para integrar LilyPond a LaTeX. Creé el siguiente comando para generar cómodamente un bajo figurado del tamaño correcto dentro de un texto:
\newcommand{\fig}[1]{%
\raisebox{-2pt}{%
\lilypond{%
#(set-global-staff-size 18)%
\figures {#1}
}%
}%
}
El problema es #(set-global-staff-size 18)
que no es realmente un argumento, sino un comando de LilyPond. El código se compila, pero tengo que decirle que omita el argumento no válido cada vez.
\detokenize
y \string
han resultado ineficaces.
¿Alguna sugerencia sobre cómo pasar el hashtag a LilyPond mientras LaTeX lo ignora?
Respuesta1
Si #
puede entrar el catcode 12 \lilypad
, entonces esto:
\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}
Si #
debe ser catcode 6, entonces esto:
\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, en estos ejemplos, los redefiní \lilypad
a algo detallado, por lo que no tuve que interpretar un ejemplo musical real.
Respuesta2
Puede utilizar \edef
, lo que requiere que algunos nombres de secuencias de control no sean expandibles; Se necesita una interfaz de nivel inferior para garantizar \fig
que sea un nuevo comando.
\makeatletter
\@ifdefinable{\fig}{%
\edef\fig#1{%
\noexpand\raisebox{-2pt}{%
\noexpand\lilypond{%
\string#(set-global-staff-size 18)%
\noexpand\figures {#1}%
}%
}%
}%
}
\makeatother