l3keys (연필 기호)를 사용하는 키 값
다음 MWE를 고려하십시오.

\documentclass[letterpaper,11pt]{article}
\usepackage{l3draw}
\ExplSyntaxOn
\dim_new:N \l__pencil_dim
\fp_new:N \l__pencil_linethickness_fp
\cs_new_protected:Nn \pencil_diagram:n
{
\dim_set:Nn \l__pencil_dim { #1 }
\draw_begin:
\draw_transform_rotate:n { 110 } %rotation
\draw_linewidth:n { \l__pencil_linethickness_fp }
\draw_cap_round:
\draw_join_round:
\draw_path_moveto:n { 0.0\l__pencil_dim , 0.125\l__pencil_dim }
\draw_path_lineto:n { 0.125\l__pencil_dim , 0.0\l__pencil_dim }
\draw_path_lineto:n { 1.0\l__pencil_dim , 0.0\l__pencil_dim }
\draw_path_lineto:n { 1.0\l__pencil_dim , 0.25\l__pencil_dim }
\draw_path_lineto:n { 0.125\l__pencil_dim , 0.25\l__pencil_dim }
\draw_path_close:
\color_fill:n { black } %color
\draw_path_use_clear:n { fill, stroke }
\draw_path_moveto:n { 1.125\l__pencil_dim , 0.0\l__pencil_dim }
\draw_path_lineto:n { 1.25\l__pencil_dim , 0.0\l__pencil_dim }
\draw_path_curveto:nn
{ 1.35\l__pencil_dim , 0.125\l__pencil_dim }
{ 1.25\l__pencil_dim , 0.25\l__pencil_dim }
\draw_path_lineto:n { 1.125\l__pencil_dim , 0.25\l__pencil_dim }
\draw_path_close:
\color_fill:n { black } %color
\draw_path_use_clear:n { fill, stroke }
\draw_end:
}
\NewDocumentCommand{\explpencil}{ O{1ex} }
{
\fp_set:Nn \l__pencil_linethickness_fp { 0.08ex }
\pencil_diagram:n { #1 }
}
\ExplSyntaxOff
\begin{document}
\explpencil[2ex] sample text
\end{document}
@egreg 솔루션에서 그는 l3keys
값을 사용하여 사용자가 가질 수있는 입력과 특히 tl_if_empty:NTF
. 입력이 필수가 아니며 사용자에게 의존한다는 사실이 마음에 듭니다.
색상 ( \l__pencil_color
), 치수 ( \l__pencil_dim
) 및 회전 ( \l__pencil_rotation
)에 초점을 맞춘 유사한 키 값을 만들려면 어떻게해야합니까 ? 괄호 안의 이름은 제안 된 이름입니다.
나는 다음과 같은 가능성을 찾고있다
\explpencil
,\explpencil[2ex]
,\explpencil[2ex,30]
,\explpencil[red][2ex][30]
입력 순서가 중요하지 않지만 예상 결과를 생성 할 수있는 경우 가급적이면; 말하십시오 \explpencil[red][2ex][30]=\explpencil[2ex][red][30]
.
답변
하나의 선택적 인수는 좋으며 두 개는 기억할 수 있습니다. 둘 이상은 항상 상대적인 순서를 위해 매뉴얼을보아야합니다.
설정할 옵션이 많을 때 키-값 구문을 사용하는 것이 훨씬 좋습니다.
\documentclass[letterpaper,11pt]{article}
\usepackage{l3draw}
\ExplSyntaxOn
% user interface
\NewDocumentCommand{\explpencil}{ O{} }
{
\group_begin:
\aze_pencil_diagram:n { #1 }
\group_end:
}
% variables and variants
\cs_generate_variant:Nn \color_fill:n { V }
\dim_new:N \l__aze_pencil_size_dim
\fp_new:N \l__aze_pencil_linethickness_fp
\keys_define:nn { aze/pencil }
{
size .dim_set:N = \l__aze_pencil_size_dim,
color .tl_set:N = \l__aze_pencil_color_tl,
color .initial:n = black,
angle .fp_set:N = \l__aze_pencil_angle_fp,
angle .initial:n = 110,
thick .dim_set:N = \l__aze_pencil_thick_dim,
}
% internal implementation
\cs_new_protected:Nn \aze_pencil_diagram:n
{
\keys_set:nn { aze/pencil } { size=1ex, thick=0.08ex, #1 }
\draw_begin:
\draw_transform_rotate:n { \l__aze_pencil_angle_fp } % angle
\draw_linewidth:n { \l__aze_pencil_thick_dim }
\draw_cap_round:
\draw_join_round:
\draw_path_moveto:n { 0.000\l__aze_pencil_size_dim , 0.125\l__aze_pencil_size_dim }
\draw_path_lineto:n { 0.125\l__aze_pencil_size_dim , 0.000\l__aze_pencil_size_dim }
\draw_path_lineto:n { 1.000\l__aze_pencil_size_dim , 0.000\l__aze_pencil_size_dim }
\draw_path_lineto:n { 1.000\l__aze_pencil_size_dim , 0.250\l__aze_pencil_size_dim }
\draw_path_lineto:n { 0.125\l__aze_pencil_size_dim , 0.250\l__aze_pencil_size_dim }
\draw_path_close:
\color_fill:V \l__aze_pencil_color_tl %color
\draw_path_use_clear:n { fill, stroke }
\draw_path_moveto:n { 1.125\l__aze_pencil_size_dim , 0.0\l__aze_pencil_size_dim }
\draw_path_lineto:n { 1.250\l__aze_pencil_size_dim , 0.0\l__aze_pencil_size_dim }
\draw_path_curveto:nn
{ 1.35\l__aze_pencil_size_dim , 0.125\l__aze_pencil_size_dim }
{ 1.25\l__aze_pencil_size_dim , 0.250\l__aze_pencil_size_dim }
\draw_path_lineto:n { 1.125\l__aze_pencil_size_dim , 0.25\l__aze_pencil_size_dim }
\draw_path_close:
\color_fill:V \l__aze_pencil_color_tl %color
\draw_path_use_clear:n { fill, stroke }
\draw_end:
}
\ExplSyntaxOff
\begin{document}
\explpencil{} sample text
\explpencil[size=2ex] sample text
\explpencil[size=1ex,color=red,angle=50,thick=0.01ex] sample text
\end{document}
가능한 옵션은 size
, color
, angle
와 thick
. 마지막 것은 검은 색 연필과는 무관하며 색연필에는 중요합니다.
왜 color
및 angle
초기 값 동안이 size
와 thick
하지? 왜냐하면 우리 는 그림이 맥락에 적응할 수 있도록 size
이라는 관점 ex
에서 있기를 원하기 때문입니다. 우리가 설정 한 경우 size
처음에 1ex
,이 차원이 될 것이다 시간에 이렇게 문서 전문에, 설정이 이루어집니다. 에서도 마찬가지로 thick
값이 호출 시간에 설정되므로 명시적인 옵션으로 재정의 될 수 있습니다.
