다음 패턴을 고려하세요.
\NewDocumentCommand{\mycommand}{m}{
\myinternalcommand:n{#1}
}
\cs_new:Nn \myinternalcommand:n{
\tl_if_single:nTF{#1}{TRUE}{FALSE}
}
입력으로 \mycommand
a를 받는지 여부 에 따라 다른 작업을 수행하고 싶다고 가정해 보겠습니다 . 한 가지 작업을 수행해야 하고 다른 작업을 수행해야 합니다. 특히 일하고 싶습니다 .control sequence
\mycommand{\mycs}
\mycommand{abcde}
\mycommand{ \mycs }
\tl_trim_spaces
내 질문은: 제어 시퀀스를 확장하지 않고... 제어 시퀀스 주변의 공백을 자르는 데 사용하는 방법입니다 . (위 패턴에서는 :n
인수의 형식이 변경될 수 있습니다)
참고: 이 응용 프로그램이 좋지 않더라도(이 경우 이유를 알고 싶습니다) 원래 질문인 내부 내용을 확장하지 않고 공간을 자르는 방법에 여전히 관심이 있습니다.
답변1
문서 명령을 생성할 때 일반적으로 ltcmd
프로세서 인터페이스를 사용합니다.
\ExplSyntaxOn
\NewDocumentCommand \mycommand { > { \TrimSpaces } m }
{
\myinternalcommand:n {#1}
}
에 설명된 대로 코드 수준에서 공백을 자르려면 추가 확장을 방지한다는 interface3
사실에 의존할 수 있습니다 \tl_trim_spaces:n
. 예를 들어
\cs_new:Npn \my_pkg_fn:n #1
{
\use:e { \tl_trim_spaces:n {#1} }
}
\my_pkg_fn:n { ~ \foo }
\foo
입력 스트림에 정확히 남습니다 .
질문에 따르면 다음과 같은 작업을 수행하고 싶은 것 같습니다.
\cs_new:Npn \myinternalcommand:n #1
{
\myinternalcommand_aux:e {#1}
}
\cs_new:Npn \myinternalcommand_aux:n #1
{
\tl_if_single:nTF{#1}{TRUE}{FALSE}
}
\cs_generate_variant:Nn \myinternalcommand_aux:n { e }
그래도 정말 걱정하고 있는 것 같긴 하지만문서 수준입력 공간 ...