如何在 LaTeX 中计算平均值?

如何在 LaTeX 中计算平均值?

我想设置一个 LaTeX 评分模板,其中包含多个类别,模板用户可以使用 AF 单独评分。最终成绩必须计算为这些类别的算术平均值。

我定义了三个函数:

  1. 将 AF 转换为数值 ( \gradetovalue)。
  2. 计算平均值 ( \calculatemean)。
  3. 将值转换回等级(\valuetograde)。

但是,我不知道如何进行第二步。我查看了包fpeval中的一些简单用法xfp,但当参数包含常量以外的其他内容时,我最终只得到了一堆编译错误。

此处有简化的示例:

\documentclass{article}
\usepackage{xstring}

% Definitions %
\newcommand{\gradetovalue}[1]{%
\IfStrEq{#1}{A}{1.0}
{\IfStrEq{#1}{B}{1.5}
{\IfStrEq{#1}{C}{2.0}
{\IfStrEq{#1}{D}{3.0}
{\IfStrEq{#1}{E}{4.0}
{\IfStrEq{#1}{F}{5.0}
{Error}
}}}}}}

\newcommand{\calculatemean}{%
    % Return (\gradetovalue{\categoryA} + \gradetovalue{\categoryB} + \gradetovalue{\categoryC}) / 3
}

\newcommand{\valuetograde}[1]{%
\newdimen \x
\x = #1pt
\ifdim \x < 1.24pt A \else
\ifdim \x < 1.74pt B \else
\ifdim \x < 2.44pt C \else
\ifdim \x < 3.44pt D \else
\ifdim \x < 4.44pt E \else F
\fi\fi\fi\fi\fi
}

\newcommand{\finalgrade}{\valuetograde{\calculatemean}}


% User should provide these %
\newcommand{\categoryA}{B}
\newcommand{\categoryB}{A}
\newcommand{\categoryC}{D}


\begin{document}

Grades in categories are: \categoryA, \categoryB, \categoryC. The final grade is \finalgrade.

\end{document}

答案1

您可以用于\dimexpr此计算,因为您使用的是\x尺寸。

\def\gradeA{1.0}
\def\gradeB{1.5}
\def\gradeC{2.0}
\def\gradeD{3.0}
\def\gradeE{4.0}
\def\gradeF{5.0}

\def\gradetovalue#1{\csname grade#1\endcsname}

\newdimen\x
\def\finalgrade{%
   \x=\dimexpr (\gradetovalue\categoryA pt + \gradetovalue\categoryB pt + \gradetovalue\categoryC pt) / 3 \relax
   \ifdim \x < 1.24pt A \else
   \ifdim \x < 1.74pt B \else
   \ifdim \x < 2.44pt C \else
   \ifdim \x < 3.44pt D \else
   \ifdim \x < 4.44pt E \else F
   \fi\fi\fi\fi\fi
}

\def\categoryA{B}
\def\categoryB{A}
\def\categoryC{D}

Grades in categories are: \categoryA, \categoryB, \categoryC. The final grade is \finalgrade.

\bye

\newdimen并在宏之外使用。

相关内容