ExplSyntaxOn과 ExplSyntaxOff는 무엇을 합니까?

ExplSyntaxOn과 ExplSyntaxOff는 무엇을 합니까?

질문과 관련됨\makeatletter와 \makeatother는 무엇을 하나요?LaTeX2e의 경우, 여기서는 LaTeX3과 관련됩니다.

무엇을 \ExplSyntaxOn하고 \ExplSyntaxOff무엇을 합니까?

답변1

LaTeX3 코딩 언어인 는 함수 및 변수 이름에 및 를 '문자'로 expl3사용합니다 . 이를 통해 문서에서 코드 수준 자료를 사용할 수 있습니다.:_expl3

\cs_new:Npn .... % fails: command \cs followed by characters '_', 'n', 'e', 'w', etc.
\ExplSyntaxOn
\cs_new:Npn .... % works here: command name \cs_new:Npn

명령 \ExplSyntaxOn은 이를 활성화하고 공백 및 줄 끝 처리를 변경하여 무시되도록 합니다.

\ExplSyntaxOn
\cs_new:Npn \my_function:nn #1#2
  {
    % Code hre
  }

%각 줄 끝에는 필요하지 않습니다 ('일반' LaTeX2e 코드와 비교). 출력에 공백을 포함할 수 있도록 는 에 ~의해 '일반' 공백으로 만들어집니다 \ExplSyntaxOn. 공백 동작의 이러한 변경은 expl3이름 에 액세스하는 데 필수적인 것은 아니지만 expl3.

\ExplSyntaxOff이를 반전시켜 :, _~를 이전 값으로 반환 \ExplSyntaxOn하고 공백을 다시 '중요'하게 만듭니다.

기술적인 수준에서 명령 이름의 범주 코드 개념은 다음과 정확히 동일합니다.\makeatletter와 \makeatother는 무엇을 하나요?, \ExplSyntax...스위치가 더 많은 기능을 수행하지만.


~코드 블록 내 처리에 관해 참고할 몇 가지 사항입니다 . 첫째, ~코드 블록 내부의 '공백' 과 마찬가지로 ~줄 시작 부분의 a는 TeX에서 무시됩니다.

\ExplSyntaxOn
~ \cs_new:Npn .... 

와 정확히 똑같다

\ExplSyntaxOn
\cs_new:Npn .... 

'공백'은 무시됩니다.

둘째, while ~은 코드 블록 내부의 '공백' \␣이며 \~여전히 구별되며 LaTeX2e 정의를 갖습니다.


완전성을 위해 논의할 몇 가지 세부 사항이 더 있습니다. \ExplSyntaxOn또한 암시적으로 구문의 일부인 다른 문자에 대해 적절하게 catcode를 설정합니다.

  • TAB — 무시됨(공백과 마찬가지로)
  • "\int_eval:n { "F }— (= 15) 와 같은 16진수 입력에 필요한 '기타' 문자
  • &— 표 형식 자료의 정렬 문자
  • ^^^64스타일 표기를 위한 위 첨자 문자
  • |expl3— 부울 표현식 에 필요한 '다른' 문자

답변2

LaTeX2e 커널 매크로와 expl3 기능의 조합에 대한 정보를 추가하고 싶습니다. 이 명령은 \ExplSyntaxOn특수 토큰의 catcode를 변경하지 않습니다 @. 따라서 LaTeX2e 커널 매크로와 expl3 함수를 결합하려면 다음과 같이 호출해야 합니다 \makeatletter.

\ExplSyntaxOn
\makeatletter
\cs_set:Npn \@maketitle…

관련 정보