언뜻 보면 \c_empty_box
를 대체하는 것으로 이해했지만 \mbox{}
다음 MWE(이상한 동작을 지적함 \c_empty_box
: "æ"로 대체됨)는 나에게 심각한 의구심을 줍니다.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_foo_tl%
\tl_new:N \l_bar_tl%
\tl_set:Nn \l_foo_tl {%
\mbox{} \hfill Foo
}
\tl_set:Nn \l_bar_tl {%
\c_empty_box \hfill Bar
}
\NewDocumentCommand{\baz}{ }
{
\l_foo_tl
\par
\l_bar_tl
}%
\ExplSyntaxOff
\begin{document}
\baz
\end{document}
답변1
다른 상수 변수와 마찬가지로 \c_empty_box
비교 예시에 사용하기 위한 고정 데이터 포인트로 사용됩니다. 이는 할당되어서는 안 되며 \box_use:N
a가 '예상'으로 표시되지 않은 컨텍스트에서 사용하여 액세스해야 합니다 <box>
.
이 expl3
언어는 낮은 수준의 프로그래밍을 위한 것이므로 모든 LaTeX2e 문서 명령과 동등한 기능을 가질 것으로 기대해서는 안 되며 동시에 아직 개발해야 할 영역도 있습니다. 고급 LaTeX2e \mbox
는 매우 다른 구성이며 주어진 인수를 포함하는 수평 상자를 삽입하기 위한 것입니다. 내부적으로 \mbox
는 를 사용하고 \leavevmode
, 이는 를 사용합니다 \voidb@x
. \c_empty_box
와 의 동등성은 \voidb@x
혼란을 야기했을 수도 있습니다.
현재 \leavevmode
기능을 가장 잘 처리하는 방법에 대한 논의가 여전히 진행 중입니다. 거의 확실한 것은 다음과 같은 것을 사용하여 구현될 것이라는 점입니다.
\protected\def\leavevmode{%
\ifvmode
\expandafter\indent
\fi
}
unbox 작업이 아닌. 이는 위의 구성이 \everypar
삽입되기 전에 완료되도록 수평 모드로 전환하는 반면, '고전적인' \leavevmode
정의에서는 토큰 뒤에 언박싱을 남겨두기 때문입니다 \everypar
. (pdfTeX와 LuaTeX는 \quitvmode
위의 '개선된' 정의와 동일한 효과를 가지지만 XeTeX에는 이것이 부족하며 어떤 경우에도 추가 기본 요소로부터 이득이 없습니다.)
답변2
아니요, 이름에서 알 수 있듯이 인수를 사용하지 않습니다. 실제로는
> \c_empty_box=\char"1A.
l.5 \show\c_empty_box
> \box26=void
즉, 다음 \voidb@x
과 같이 정의 됩니다.
\newbox\voidb@x % permanently void box register
2e 또는 일반 텍스트로.
\mbox
단락을 시작한 \leavevmode
다음 \hbox
내부 내용이 없는 단락을 만듭니다.
모든 상자 할당과 마찬가지로 실제로 저장되는 것은 숫자(또는 프리미티브로 전달될 수 있음)입니다 \box
. \setbox
일반적 \wd
으로 할당 루틴은 \chardef
토큰을 사용하여 숫자를 저장합니다. 따라서 상자 명령을 접두사로 지정하지 않고 토큰에 액세스하면 다음과 같은 결과를 얻습니다. \char26
따라서 현재 글꼴 인코딩의 해당 슬롯에 있는 것은 무엇이든 됩니다.