「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) ディレクトリ構造内でファイルを再帰的に検索するために を使用しようとしているためであり、それができないという事実を回避するために Bash から を使用していますfind。少なくとも、それができるとは思いません。

問題は、これが最善の方法ではないと思うことですが、私が望んでいることを実現するという意味では機能します。ただし、3 つの個別のオプションを使用する方法はあまり好きではなく、可能であればそれを避けたいのですが、これを実現するためにどのように使用すればよいのか理解するのに苦労しています。これが最善の策だと思います。たとえば、私が本当に望んでいるのは、次のようにxkeyval使用できることです。codesnippet

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

... または、さらに良い方法として、実際に lstinputlisting オプションごとに linerange を使用しますが、これはおそらく不可能だと思います。

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

私の問題は、コマンド ( ) を「newcommand」内に埋め込んでいることから生じていると思いますがlstinputlisting、実験してもうまくいかなかったので、xkeyval誰かできるかどうか尋ねたいだけです:

xkeyvalA.次のようなものを思いつくためにどのように使用すればよいかを理解し、正しい方向に進むのを手伝ってください。

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

lstinputlistingB.独自のオプションがあるため、の使用が事態を複雑にしている可能性があるかどうかを理解するのを手伝ってください。

C. (ボーナス) これをすべて行うためのより良い方法があるかどうか、また他に何が間違っている可能性があるかを教えてください。たとえば、 altogetherlstinputlistingを使用せずにファイルを再帰的に検索する方法はありますかfind?

いつものように、どんな助けでも大歓迎です。

関連情報