Путаница с «xkeyval» и «newcommand»: лучший способ использования с «lstinputlisting»

Путаница с «xkeyval» и «newcommand»: лучший способ использования с «lstinputlisting»

Я написал эту команду, чтобы получить «фрагменты» кода:

\newcommand\codesnippetsnippet[3]{
\immediate\write18{find ../../../.. -name '#1' -print | grep #2 | xargs cat > ./listingwithoutcomments}

\lstinputlisting[autogobble=true,linerange=#3,rangeprefix=//---,includerangemarker=false,language=mycodelanguage,frame=single]{./listingwithoutcomments}

\immediate\write18{rm -f -- 'listingwithoutcomments'}
}

Используется так:

\codesnippet{option1}{option2}{option3}

Более полно:

\codesnippet{thisissomecode.codefile}{thisisagrepfilter}{thisisalinerangemarker}

Мотивация этого в основном в том, что я пытаюсь использовать lstinputlistingдля рекурсивного поиска файлов в структуре каталогов (Linux), и я использую findBash, чтобы обойти тот факт, что он не может. По крайней мере, я не верю, что он может.

Дело в том, что я подозреваю, что это не лучший способ сделать это, но он работает в том смысле, что делает то, что я хочу. Я не большой поклонник способа, которым я использую три отдельных варианта, хотя, и это то, чего я действительно хочу избежать, если это возможно, но я действительно пытаюсь понять, как я бы использовал, xkeyvalчтобы достичь этого, что, как я думаю, является моим лучшим выбором. Что я действительно хотел бы, например, так это иметь возможность использовать codesnippetвот так:

\codesnippet[filename=,grepfilter=,linerangemarker=}

... или даже лучше, использовать linerange согласно опции lstinputlisting, но я подозреваю, что это, вероятно, невозможно:

\codesnippet[filename=,grepfilter=,linerange=}

Думаю, моя проблема в том, что я встраиваю команду ( lstinputlisting) в свою «новую команду», и поскольку мне не удалось поэкспериментировать с ней, xkeyvalя просто хочу спросить, может ли кто-нибудь:

A. Помогите мне встать на правильный путь и понять, как бы мне удалось xkeyvalпридумать что-то вроде этого:

\codesnippet[filename=,grepfilter=,linerangemarker=}

B. Помогите мне понять, может ли использование lstinputlistingусложнять ситуацию, поскольку у него есть свои варианты

C. (Бонус) Помогите мне понять, есть ли лучший способ сделать это в целом, и что еще я могу делать неправильно... например, есть ли способ найти lstinputlistingфайлы рекурсивно, не используя findвообще?

Любая помощь, как всегда, будет высоко оценена.

Связанный контент