Я использую lyluatex
пакет для интеграции LilyPond в LaTeX. Я создал следующую команду для удобного вывода Figured Bass правильного размера в тексте:
\newcommand{\fig}[1]{%
\raisebox{-2pt}{%
\lilypond{%
#(set-global-staff-size 18)%
\figures {#1}
}%
}%
}
Проблема в том, что #(set-global-staff-size 18)
это не аргумент, а команда LilyPond. Код компилируется, но мне приходится каждый раз указывать ему пропускать недопустимый аргумент.
\detokenize
и \string
оказались неэффективными.
Есть ли у вас предложения, как передать хэштег в LilyPond, заставив LaTeX его игнорировать?
решение1
Если #
может быть catcode 12, входящий в \lilypad
, то это:
\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}
Если #
должен быть catcode 6, то это:
\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}
Очевидно, в этих примерах я переопределил это \lilypad
на что-то более подробное, поэтому мне не пришлось исполнять реальный музыкальный пример.
решение2
Вы можете использовать \edef
, что потребует сделать несколько имен управляющих последовательностей нерасширяемыми; для обеспечения \fig
новой команды необходим интерфейс более низкого уровня.
\makeatletter
\@ifdefinable{\fig}{%
\edef\fig#1{%
\noexpand\raisebox{-2pt}{%
\noexpand\lilypond{%
\string#(set-global-staff-size 18)%
\noexpand\figures {#1}%
}%
}%
}%
}
\makeatother