tikz 옵션이 포함된 사용자 정의 환경

tikz 옵션이 포함된 사용자 정의 환경

사용자 정의 환경을 만들고 싶었는데 현재 다음과 같은 문제에 직면해 있습니다.

  • tikzpicture의 크기를 조정하는 옵션을 내 환경에 전달하고 싶지만 첫 번째 예가 작동하지 않고 다음 오류를 반환합니다 -> ! 숫자가 누락되어 0으로 처리됩니다.
  • 두 번째는 작동하는 것 같지만 두 번째와 비슷하다면 첫 번째가 작동하지 않는 이유를 이해할 수 없습니다.
  • 오류는 다음 코드로 인해 발생합니다. ->scale = \scalevalue
\documentclass{article}

\usepackage{l3keys2e}
\usepackage{tikz}

\ExplSyntaxOn
\keys_define:nn{test} {
    scale .tl_set:N = \l_test_scale_tl,
    scale .default:n = 1,
    scale .initial:n  = 1
}
\ExplSyntaxOff

\NewDocumentEnvironment{myenv}{o}
    {
        % Options
        \ExplSyntaxOn
        \IfNoValueF{#1}{\keys_set:nn {test}{#1}}
        \ExplSyntaxOff
        
        \ExplSyntaxOn
        \newcommand*{\scalevalue}{\the\numexpr\l_test_scale_tl\relax}
        
        \ExplSyntaxOff
        \begin{tikzpicture}[scale = \scalevalue, transform shape]
    }
    {
        \end{tikzpicture}
    }

\begin{document}
% Example 1: Error
%\begin{myenv}
%\node[draw] (a) at (0,0) {A};
%\end{myenv}

% Example 2: No error
\ExplSyntaxOn
\newcommand*{\scalevalue}{\l_test_scale_tl}
\ExplSyntaxOff
\begin{tikzpicture}[scale = \scalevalue, transform shape]
\node[draw] (a) at (0,0) {A};
\end{tikzpicture}
\end{document}

답변1

문제는 \ExplSyntaxOn너무 늦게 사용한다는 것이다. 이 순간에 처리 \NewDocumentEnvironment방법이 결정되기 때문에 읽는 순간 활성화되어야 합니다 . _그래서 당신은 다음과 같은 것이 필요합니다

\ExplSyntaxOn
\NewDocumentEnvironment{myenv}{o}{... no switching of \ExpSyntax ...}
\ExplSyntaxOff

그러나 이제 tikzpicture특히 와 사이의 공백 transformshape이 구문의 범위에 있으며, tikz는 transformshape(공백 없이) 알 수 없다고 불평할 것입니다.

이런 식으로 할 수 있습니다.

\documentclass{article}

\usepackage{l3keys2e}
\usepackage{tikz}

\ExplSyntaxOn
\keys_define:nn{test} {
    scale .tl_set:N = \l_test_scale_tl,
    scale .default:n = 1,
    scale .initial:n  = 1
  }
\newcommand\preparePic[1]{%
  \IfNoValueF{#1}{\keys_set:nn {test}{#1}}%
  \newcommand*{\scalevalue}{\the\numexpr\l_test_scale_tl\relax}%
}
\ExplSyntaxOff

\NewDocumentEnvironment{myenv}{o}
    {
        \preparePic{#1}
        \begin{tikzpicture}[scale = \scalevalue, transform shape]
    }
    {
        \end{tikzpicture}
    }

\begin{document}
\begin{myenv}
\node[draw] (a) at (0,0) {A};
\end{myenv}
\end{document}

관련 정보