
나는 코드의 "조각"을 얻기 위해 다음 명령을 작성했습니다.
\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=}
... 또는 더 나은 방법은 실제로 lstinputlisting 옵션에 따라 linerange를 사용하는 것이지만 아마도 이것이 불가능할 것으로 생각됩니다.
\codesnippet[filename=,grepfilter=,linerange=}
내 문제는 내 "newcommand" 안에 명령( )을 삽입하고 있다는 사실에서 비롯된 것 같아요. lstinputlisting
실험해 볼 기회가 없었기 때문에 xkeyval
누구든지 다음을 수행할 수 있는지 물어보고 싶습니다.
xkeyval
A. 다음과 같은 것을 생각해 내는 방법을 이해하는 데 올바른 길을 갈 수 있도록 도와주세요 .
\codesnippet[filename=,grepfilter=,linerangemarker=}
lstinputlisting
B. 자체 옵션이 있으므로 사용이 복잡할 수 있는지 이해하도록 도와주세요.
C. (보너스) 이 작업을 수행하는 더 좋은 방법이 있는지 이해하도록 도와주세요. 또 제가 잘못하고 있는 것은 무엇입니까? 예를 들어 완전히 lstinputlisting
사용하지 않고 재귀적으로 파일을 찾을 수 있는 방법이 있습니까?find
어떤 도움이라도 언제나 감사하겠습니다.