xkeyval/lstinputlisting: «неправильная буквенная константа» при использовании с опцией linerange

xkeyval/lstinputlisting: «неправильная буквенная константа» при использовании с опцией linerange

Я пытаюсь использовать xkeyvalдля создания пользовательской опции ( \codeblock) для моего lstinputlisting(конкретно для linerangeчасти). Это мой MWE:

\makeatletter

\newcommand{\code}{}

\define@key{code}{block}{\renewcommand\codeblock{#1}}

\setkeys{code}{block=}
{}
\savekeys{code}{block}

\newcommand\code[1][]{
\setkeys{code}{#1}

\lstinputlisting[linerange=\codeblock,rangeprefix=//---,includerangemarker=false]{./listingwithoutcomments}  

}
\makeatother

Я получаю ошибку:

! Improper alphabetic constant.
<to be read again>
                   \code
l.4 \code[block=inout]

Это достигается за счет использования:

\linerange=\block

Итак, я попробовал:

\linerange=\\block

... но тогда полученный список будет совершенно пустым.

Я не думаю, что в моем xkeyvalсинтаксисе есть какие-то ошибки, но я не уверен, как заставить это работать?

решение1

Я обошёл это с помощью:

\edef\dolisting{\noexpand\lstinputlisting[linerange=\codeblock,rangeprefix=//---,includerangemarker=false,language=maxj,frame=single]{./listingwithoutcomments}}
\dolisting

Связанный контент