Я хочу сделать следующее: скажем, у меня есть диаграмма
\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
Вместо a \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}
Ответить на обновлениерассмотреть новые требования ОП
\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}