expl3의 내부 내용을 확장하지 않고 공간을 자르는 방법은 무엇입니까?

expl3의 내부 내용을 확장하지 않고 공간을 자르는 방법은 무엇입니까?

다음 패턴을 고려하세요.

\NewDocumentCommand{\mycommand}{m}{
    \myinternalcommand:n{#1}
}
\cs_new:Nn \myinternalcommand:n{
    \tl_if_single:nTF{#1}{TRUE}{FALSE}
}

입력으로 \mycommanda를 받는지 여부 에 따라 다른 작업을 수행하고 싶다고 가정해 보겠습니다 . 한 가지 작업을 수행해야 하고 다른 작업을 수행해야 합니다. 특히 일하고 싶습니다 .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 }

그래도 정말 걱정하고 있는 것 같긴 하지만문서 수준입력 공간 ...

관련 정보