xkeyval/lstinputlisting: “constante alfabética inadequada” quando usada com a opção linerange

xkeyval/lstinputlisting: “constante alfabética inadequada” quando usada com a opção linerange

Estou tentando usar xkeyvalpara criar uma opção customizada ( \codeblock) para minha lstinputlisting(especificamente para a linerangepeça). Este é o meu 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

Eu recebo o erro:

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

Isso vem do uso:

\linerange=\block

Então eu tentei:

\linerange=\\block

... mas a listagem resultante fica completamente vazia.

Não acho que haja algo errado com minha xkeyvalsintaxe, mas não tenho certeza de como fazer isso funcionar.

Responder1

Eu resolvi isso com:

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

informação relacionada