考虑以下示例这里:
\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 几乎一无所知,因此请不要做出“太花哨”的解释。:)
更新
正如约瑟夫在下面的最后一条评论中所暗示的那样,唯一的问题是我没有思考。