xkeyval/lstinputlisting: "constante alfabética incorrecta" cuando se usa con la opción linerange

xkeyval/lstinputlisting: "constante alfabética incorrecta" cuando se usa con la opción linerange

Estoy intentando utilizar xkeyvalpara crear una opción personalizada ( \codeblock) para mi lstinputlisting(específicamente para la linerangepieza). Este es mi 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

Recibo el error:

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

Esto proviene del uso:

\linerange=\block

Entonces lo intenté:

\linerange=\\block

... pero luego la lista resultante está completamente vacía.

No creo que haya ningún problema con mi xkeyvalsintaxis, pero no estoy seguro de cómo hacer que esto funcione.

Respuesta1

Resolví esto con:

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

información relacionada