Ignorar # (hashtag) dentro de \newcommand

Ignorar # (hashtag) dentro de \newcommand

Estoy usando el lyluatexpaquete 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.

\detokenizey \stringhan 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}

ingrese la descripción de la imagen aquí

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í \lilypada 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 \figque 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

información relacionada