
Я пытаюсь использовать 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