
Я написал эту команду, чтобы получить «фрагменты» кода:
\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), и я использую find
Bash, чтобы обойти тот факт, что он не может. По крайней мере, я не верю, что он может.
Дело в том, что я подозреваю, что это не лучший способ сделать это, но он работает в том смысле, что делает то, что я хочу. Я не большой поклонник способа, которым я использую три отдельных варианта, хотя, и это то, чего я действительно хочу избежать, если это возможно, но я действительно пытаюсь понять, как я бы использовал, 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
вообще?
Любая помощь, как всегда, будет высоко оценена.