TikZ 옵션에서 tl 변수를 어떻게 사용합니까?

TikZ 옵션에서 tl 변수를 어떻게 사용합니까?

를 통해 몇 가지 옵션이 포함된 명령을 설정하고 있습니다 l3keys. 옵션 중 하나는 tikz-optionsTikZ 옵션 목록을 가져와서 {tikzpicture}.

\documentclass{article}

\usepackage{tikz,xparse}

\ExplSyntaxOn

\keys_define:nn { mymodule } {
   tikz-options .tl_set:N = \l_mymodule_tikz_options_tl,
   tikz-options .initial:n = {},
}

\tikzset{
   every~my~image/.style = {
      fill = blue,
   }
}

\NewDocumentCommand{ \myimage }{ o }{
   \IfValueT { #1 } {
      \keys_set:nn { mymodule } { #1 }
   }
   \begin{tikzpicture}[every~my~image, \l_mymodule_tikz_options_tl]
      \filldraw (0,0) rectangle (2,2);
   \end{tikzpicture}
}

\ExplSyntaxOff

\begin{document}
\myimage

\myimage[tikz-options={fill=red,draw=black}]
\end{document}

위의 예에서는 이 오류가 발생합니다.

! Package pgfkeys Error: I do not know the key '/tikz/fill=red,draw=black' and 
I am going to ignore it. Perhaps you misspelled it.

TikZ는 토큰 목록의 전체 내용을 다음과 같이 간주하므로 확장에 문제가 있는 것 같습니다.하나옵션. 수동으로 확장하려면 어떻게 해야 합니까?

답변1

옵션 세트를 전달하는 것이 아니라 옵션 세트를 포함하는 것을 전달하는 것입니다. 오류 메시지는 오류를 발행할 때 확장이 발생하여 올바른 옵션을 전달한 것으로 나타나기 때문에 약간 오해의 소지가 있습니다.

키-값 쌍을 흡수할 때 키-값 기반 패키지는 확장을 수행하지 않습니다. 이는 재앙이 될 수 있기 때문입니다. 따라서 해결책은 선택적 인수에 토큰을 전달하기 전에 토큰 목록을 확장하는 것입니다 \begin{tikzpicture}.

\documentclass{article}

\usepackage{tikz,xparse}

\tikzset{
   every my image/.style = {
      fill = blue,
   }
}

\ExplSyntaxOn

\keys_define:nn { mymodule }
 {
   tikz-options .tl_set:N = \l_mymodule_tikz_options_tl,
   tikz-options .initial:n = {},
 }

\NewDocumentCommand{ \myimage }{ O{} }
 {
   \group_begin:
   \keys_set:nn { mymodule } { #1 }
   \__tobi_start_tikzpicture:V \l_mymodule_tikz_options_tl
      \filldraw (0,0) rectangle (2,2);
   \end{tikzpicture}
   \group_end:
 }
\cs_new_protected:Nn \__tobi_start_tikzpicture:n
 {
   \begin{tikzpicture}[every~my~image,#1]
 }
\cs_generate_variant:Nn \__tobi_start_tikzpicture:n { V }

\ExplSyntaxOff

\begin{document}

\myimage

\myimage[tikz-options={fill=red,draw=black}]

\end{document}

여기에 이미지 설명을 입력하세요

관련 정보