
私は、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