将 LaTeX 3 代码与“正常” \newcommand 分开

将 LaTeX 3 代码与“正常” \newcommand 分开

考虑以下示例这里

\documentclass{article}

\usepackage{amsmath}
\usepackage{siunitx}

\ExplSyntaxOn
\newcommand*\calculation[1]{%
  \dfrac{\SI{#1}{\g}}{\SI{\total}{\g}} \cdot \SI{360}{\degree}
  & \biggl(\dfrac{\num{#1} \cdot 360}{\num{\total}}\biggr) \si{\degree}
  & \fp_eval:n {round(#1*360/\total)} \si{\degree}
  &
}
\cs_new_eq:NN \calculate \fp_eval:n
\ExplSyntaxOff

\newcommand*\total{\calculate{\honning+\pollen+\vand}}


\begin{document}

\begin{equation*}
\def\honning{16710}
\def\pollen{10155}
\def\vand{6210}
 \renewcommand*\arraystretch{2.2}
  \begin{array}{l@{\qquad} l@{{}={}} l@{{}\approx{}} r@{} l}
    \text{Honning:} & \calculation{\honning}; \\
    \text{Pollen:}  & \calculation{\pollen}; \\
    \text{Vand:}    & \calculation{\vand}.
  \end{array}
\end{equation*}

\end{document}

是否可以将定义放在/\calculation之外?我想要类似这样的内容\ExplSyntaxOn\ExplSyntaxOff

\ExplSyntaxOn
  \cs_new_eq:NN \calculate \fp_eval:n
\ExplSyntaxOff

\newcommand*\total{\calculate{\honning+\pollen+\vand}}
\newcommand*\calculation[1]{%
  \dfrac{\SI{#1}{\g}}{\SI{\total}{\g}} \cdot \SI{360}{\degree}
  & \biggl(\dfrac{\num{#1} \cdot 360}{\num{\total}}\biggr) \si{\degree}
  & \fp_eval:n {round(#1*360/\total)} \si{\degree}
  &
}

我认为这使得代码更容易浏览。

如果我尝试后者,我会收到以下错误。

! Undefined control sequence.
\calculation ...l }}\biggr ) \si {\degree } & \fp 
                                                  _eval:n {round(#1*360/\tot...
l.26     \text{Honning:} & \calculation{\honning}
                                                 ; \\

PS 请注意,我对 L3 几乎一无所知,因此请不要做出“太花哨”的解释。:)

更新

正如约瑟夫在下面的最后一条评论中所暗示的那样,唯一的问题是我没有思考。

相关内容