我应该如何定义一个包含供 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} 

相关内容