
질문과 관련됨\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…