
대부분의 경우, 키를 정의할 때 키 값을 둘러싸는 중괄호는 l3keys
키 자체에 n
-, c
- 또는 e
-type 인수가 있는 경우에도 생략되며 일반적으로 중괄호 인수가 필요합니다. 이는 중괄호를 제공하는 것보다 일관성이 없고 더 혼란스럽지 않습니까?
내 질문: (1) 중괄호가 때때로 생략되는 이유는 무엇입니까? (2) 에서 프로그래밍하는 가장 좋은 방법은 무엇입니까 expl3
?
l3keys
내 MWE는 중괄호 값을 사용하지 않고 키를 정의하는 간단한 데모입니다 . 주석 처리된 코드에서 키는 중괄호 값으로 정의됩니다.
\documentclass{article}
\ExplSyntaxOn
\keys_define:nn { my }
{
string .str_set:c = l__my_tmpa_str , % note the 'c'-type argument
string .initial:n = initial ,
string .value_required:n = true ,
stringadd .code:n = \str_put_right:Nn \l__my_tmpa_str { foo } ,
stringadd .value_forbidden:n = true ,
stringadde .code:n = \str_put_right:Ne \l__my_tmpa_str {#1} ,
stringadde .value_required:n = true
}
% \keys_define:nn { my }
% {
% string .str_set:c = { l__my_tmpa_str } ,
% string .initial:n = { initial } ,
% string .value_required:n = { true } ,
% stringadd .code:n = { \str_put_right:Nn \l__my_tmpa_str { foo } } ,
% stringadd .value_forbidden:n = { true } ,
% stringadde .code:n = { \str_put_right:Ne \l__my_tmpa_str {#1} } ,
% stringadde .value_required:n = { true }
% }
\ExplSyntaxOff
\begin{document}
\ExplSyntaxOn
\str_use:N \l__my_tmpa_str
\par
\keys_set:nn { my }
{
string = blah
}
\str_use:N \l__my_tmpa_str
\par
\keys_set:nn { my }
{
stringadd
}
\str_use:N \l__my_tmpa_str
\par
\tl_set:Nn \l_tmpa_tl { blah!!! }
\keys_set:nn { my }
{
stringadde = \l_tmpa_tl
}
\str_use:N \l__my_tmpa_str
\par
\keys_set:nn { my } { stringadd }
\str_use:N \l__my_tmpa_str
\ExplSyntaxOff
\end{document}
답변1
-lists interface3
내에서 유효한 입력이 무엇인지 정의하는 문서가 있습니다 (하위 섹션 27.10 참조). key=value
여기서 모든 내용을 반복하고 싶지는 않지만 다음과 같이 요약됩니다.
중괄호는 선택 사항이며 중첩된 중괄호 외부에 있는 경우를 제외하고는 차이가 없습니다.
- 값에 쉼표가 포함됩니다
- 값에 하나 이상의 등호가 포함되어 있습니다.
- 값의 양쪽 끝에 공백이 하나 이상 있습니다.
위의 사항 중 어느 것도 사실이 아닌 경우 중괄호는 완전히 선택 사항입니다(그리고 실제로 TeX가 더 적은 토큰을 이동해야 하기 때문에 생략하면 더 나은 성능을 얻을 수 있습니다).
따라서 "모범 사례"란 무엇입니까? 읽고 유지 관리하기가 더 쉽다고 생각하는 모든 것, 그리고 불필요한 중괄호 세트를 모두 생략하여 속도를 약간 향상시키고자 하는 경우입니다. 그러나 사용자 입력을 전달하자마자 공백/쉼표/등호 기호가 포함될지 여부를 알 수 없으므로 이 경우 반드시 중괄호를 사용해야 합니다.