tikz-feynman 환경 내에서 사용하기 위한 옵션이 포함된 새 명령을 어떻게 정의해야 합니까?

tikz-feynman 환경 내에서 사용하기 위한 옵션이 포함된 새 명령을 어떻게 정의해야 합니까?

나는 다음과 같은 작업을 하고 싶습니다. 다이어그램이 있다고 가정해 보겠습니다.

\documentclass{article}

\usepackage{luatex85}
\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}
\feynmandiagram{
            e1 --[momentum={[arrow distance=2mm]\(l\)}] we1;
        };
\end{document}

그리고 모멘텀 키의 옵션 표현을 단순화하고 싶어서 명령을 정의했습니다.

\documentclass{article}

\usepackage{luatex85}
\usepackage[compat=1.1.0]{tikz-feynman}

\newcommand{\mom}[2]{{[arrow distance=#1]\(#2\)}}
\begin{document}            
\feynmandiagram{
            e1 --[momentum=\mom{2mm}{l}] we1;
        };

\end{document}

원래 다이어그램을 재현하는 대신 모멘텀 레이블 l[arrow distance=2mm]l. 전체 표현은 tikz-feynman 패키지로 평가되지 않았으며 추진력 자체로 간주되었습니다. 이 문제를 어떻게 바로잡아야 할까요?

답변1

대신 \newcommand두 가지 인수를 허용하는 새 스타일을 정의할 수 있습니다.\tikzfeynmanset{mymomentum/.style 2 args={momentum = [arrow distance = #1] \(#2\) }}

\documentclass{article}

\usepackage{luatex85}
\usepackage[compat=1.1.0]{tikz-feynman}
\tikzfeynmanset{
    mymomentum/.style 2 args={ momentum={[arrow distance=#1]\(#2\)}}
              }

\begin{document}


\feynmandiagram{
            e1 --[mymomentum={2mm}{l}] we1;
        };
\end{document}

답변 업데이트OP의 새로운 요구 사항을 고려

\documentclass{article}

\usepackage{luatex85}
\usepackage[compat=1.1.0]{tikz-feynman}
\tikzfeynmanset{
    mymomentum/.code n args={3}{
    \def\tempa{#1}
    \def\tempb{#2}
    \def\tempc{#3}

    \ifx \empty\tempa 
      \pgfkeysalso{momentum/arrow distance={3mm}} % default value
    \else \pgfkeysalso{momentum/arrow distance={#1}}
    \fi

    \ifx \empty\tempb 
       \pgfkeysalso{momentum/arrow shorten={0.15}} % default value
    \else \pgfkeysalso{momentum/arrow shorten={#2}}
    \fi


    \pgfkeysalso{momentum={#3}}
              }}
\begin{document}

\feynmandiagram{
            e1 --[mymomentum={}{}{$l$}] we1;
        };

 \feynmandiagram{
            e1 --[mymomentum={5mm}{0.3}{$m$}] we1;
        };       
\end{document} 

관련 정보