與“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=}

……或甚至更好,實際上根據 lstinputlisting 選項使用 linerange,但我懷疑這可能是不可能的:

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

我認為我的麻煩源於這樣一個事實:我lstinputlisting在“newcommand”中嵌入了一個命令(),並且由於我沒有任何運氣進行實驗,xkeyval我只想問是否有人可以:

答:幫助我走上正確的軌道,了解我將如何xkeyval想出這樣的東西:

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

B. 幫助我了解使用 是否lstinputlisting會使事情變得複雜,因為它有自己的選項

C.(獎勵)幫助我了解是否有更好的方法來完成此操作,以及我可能做錯了什麼...例如,有沒有一種方法可以lstinputlisting遞歸地查找文件而無需find完全使用?

任何幫助將一如既往地受到高度讚賞。

相關內容