내부 치수/접착제/머글루란 무엇입니까?

내부 치수/접착제/머글루란 무엇입니까?

l3skip의 문서에는 \dim_eval:n경고가 표시되어 있습니다.

이 [...]는 ⟨가 아니기 때문에 TeX 스타일 할당에 사용되는 경우 적절한 종료가 필요합니다.내부 치수⟩.

\skip_eval:n유사한 경고는 ⟨에 대한 설명 과 \muskip_eval:n⟨에 대한 설명에서 찾을 수 있습니다 .내부 접착제⟩ 그리고 ⟨내부 머글루⟩ 대신에 ⟨내부 치수⟩.

나는 TeX에서 건너뛰기와 차원을 처리하는 데 상당히 익숙하지만 이전에는 이런 표현을 본 적이 없습니다.내부 치수. TeXbook에서 나는 24장의 다소 기술적인 문법 표기법 이외의 문구에 대한 설명을 찾을 수 없었습니다. 이 표기법에는 확실히 필요한 모든 정보가 포함되어 있지만 실제로는 도움이 되지 않았습니다.

그렇다면 정확히 무엇입니까?내부 치수? 다른 유형의 측정기준에는 어떤 것이 있나요? (외부 차원?) 위의 경고에서 언급한 것과 같이 두 가지의 다른 동작에 대한 예는 무엇입니까?

답변1

expl3먼저 일반적인 TeX 개념을 다룬 다음 해당 기능 의 문서화에서 이것이 왜 중요한지 다루겠습니다 .

내부 차원(또는 내부 개수 등)은 TeX에 의해 구문 분석되어 이제 올바른 형식으로 저장되는 것입니다. 따라서 TeX는 내부 차원이~이다유효한 치수이며 추가 자료를 '찾을' 필요가 없습니다. 대조적으로, 외부 치수(등.)은 개별 토큰으로 구성되어 있으며 사용하려면 TeX에서 다시 구문 분석해야 합니다. 따라서 우리가쓰다 12.0pt, 우리는외부표현(TeX는 그것이 유효한 치수인지 알기 위해 그것을 구문 분석해야 할 것입니다), 그러나 그 이후에는

\newdimen\mydimen
\mydimen=12pt %

나는 사용할 수 있고 \mydimenTeX는 사용합니다~ 아니다무엇이든 구문 분석해야 합니다. \mydimen내부 차원을 보유합니다.

이것이 왜 중요합니까? TeX의 구문 분석 규칙에 관한 모든 것, 특히 TeX는 차원, 정수,등., 그리고 더 중요한 것은 외부 표현을 사용하면 TeX가 '적합'하지 않은 것을 찾을 때까지 구문 분석을 중단하지 않는다는 것입니다. 예를 들어

\def\foo{123}
\newcount\fooint
\fooint=123 %
\newcount\testint
%%%
\testint=\foo 456 %
\showthe\testint
\testint=\fooint 456 %
\showthe\testint

첫 번째 경우가 잘못된 결과를 제공한다는 것을 알 수 있습니다. 단순히 로 확장되는 매크로가 있고 123TeX는 선택적 공간에 도달할 때까지 정수를 계속 찾습니다. 대조적으로, 내부 개수 표현을 사용하면 구문 분석에 대한 의문이 없습니다.\fooint ~이다 123.

핵심은 내부 표현이 사용하기에 '더 안전'하고(그리고 더 빠르다는 것) 즉, 어디에서 끝나는지에 대한 질문이 전혀 없다는 것입니다.


이것이 와 어떤 관련이 있나요 expl3? like는 \dim_eval:n표현을 취해 차원으로 변환하는 데 사용됩니다. 그러나 매크로( tl)의 확장을 통해 저장하고 조판할 수도 있도록 허용하는 것이 편리한 것으로 나타났습니다.등.그러기 위해서는 평가 결과가 다음과 같이 정리되어야 합니다.외부대표가 아닌내부하나. 즉, 이러한 함수는 값을 매크로로 저장하는 것처럼 동작합니다. 종료를 관찰해야 합니다.

문제가 되지 않는 모든 '순수한' expl3사용에 대해서는 올바른 위치에서 올바르게 종료되었으므로 문제가 되지 않습니다. 그러나 이러한 함수를 보다 고전적인 TeX 프로그래밍과 혼합하여 사용하는 경우 해당 기능이 어떻게 작동하는지 알아야 합니다. 그만큼egreg로 대답하다이것을 잘 보여줍니다.


TeX 세부 사항을 원하는 사람들을 위한 것은 \dim_eval:n원시적인 용어입니다.

\the\dimexpr #1\relax

내부 표현으로 끝내고 싶다면 우리가 원하는 것은

\dimexpr #1\relax

그러나 이는 조판이나 -type 확장 내부에서 (성공적으로) 사용할 수 없으므로 x우리가 원하는 정의에 적합하지 않습니다.

답변2

다음 예를 고려하십시오

\documentclass{article}
\usepackage{expl3}

\ExplSyntaxOn
\cs_set_eq:NN \dimeval \dim_eval:n
\ExplSyntaxOff

\newlength{\mylen}

\begin{document}

Do an assignment \mylen=\dimeval{3pt+1cm} plus something else.

\end{document}

오류가 발생하는 경우

! Missing number, treated as zero.
<to be read again> 
                   s
l.12 ...assignment \mylen=\dimeval{3pt+1cm} plus s
                                                  omething else.

이것이 바로 에서 언급된 내용입니다 interface3.

An 은 다음과 같은 (고정된) 길이를 저장하는 레지스터 또는 내부 레지스터 <internal dimension>입니다 . e-TeX 확장을 사용하는 경우도 의 인스턴스입니다 .\dimen\parindent\dimexpr<internal dimension>

또 다른 중요한 사실은 레지스터를 \newlength할당 하므로 TeX가 사양 을 \skip기대하게 된다는 것입니다 . 매크로가 적절한 종료를 제공하기 때문에 를 사용할 때는 이런 일이 발생하지 않습니다 .plusminus\setlength\relax

관련 정보