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

関連情報