LaTeX 中的数字变量

LaTeX 中的数字变量

我的任务是创建一个 LaTeX 模板,用于为学生的研究提案生成评分报告。我们需要一种简单的方法来为提案的特定质量(例如文献综述)分配分数(数值),并设置评论部分。对于 LaTeX 初学者来说,一切都必须非常容易使用。出于某种原因,必须包含一个表示每个分配分数的滑动条。

我遇到的困难是创建一个保存分数的变量。这些分数必须 1) 相加得到最终分数,2) 用于可视滑块。

我尝试过计数器(如我的 MWE 所示),但计数器使用整数,而滑块需要浮点数。此外,滑块需要显示相对分数,一些质量可能占 5%,一些占 10%,等等,因此必须在 LaTeX 中执行一些计算。

总之,我如何保存可以满足这些要求的数值?1)允许求和2)允许计算并在另一个宏中使用。

我试图以 StackExchange 的精神来表达这个问题。如果我有错误,请原谅我;我的目的不是浪费你的时间。

    \documentclass[a4paper]{paper}   
    \usepackage{graphicx}
    \usepackage{xcolor}
    \usepackage{calc}
    \usepackage{tikz}
    \usetikzlibrary{calc,shadows,shadows.blur}

    \def\IosSevenSlider#1#2{
        \tikz[baseline=-0.1cm]{
            \coordinate (start) at (0,0);
            \coordinate (end) at (#1,0);
            \coordinate (mark) at ($(start)!#2!(end)$);
            \useasboundingbox (start|- 0,-.25) rectangle (end|- 0, .25);
            \draw[line width=0.4mm, line cap=round, blue!50!cyan] 
                 (start) -- (mark) edge[lightgray] (end);
            \node[fill=white, draw=lightgray, very thin,
                blur shadow={shadow xshift=0pt, shadow opacity=20, shadow yshift=-0.9mm,
                             shadow blur steps=6, shadow blur radius=0.3mm},
                circle, minimum size=0.25cm, inner sep=0pt] at (mark) {};
        }
    }


    % SETS UPS MARK VARIABLES, Q1 = Question 1 etc)
    \newcounter{q1} % Counts for 10%
    \newcounter{q2} % Counts for  5%

% THIS IS WHERE YOU WILL ENTER YOUR MARKS PER QUESTION
\setcounter{q1}{5}
\setcounter{q2}{3}

\begin{document} 
\begin{table}
    \centering
        \begin{tabular}{ll}

% Using the value for q1 results in the slider overshooting!        
Overall Presentation (Structure and English)    & \setlength{\fboxsep}{0pt} \fbox{\IosSevenSlider{5cm}{\value{q1}}} \\
% A hardcoded value works just fine. 
Clarity of title (Accurate and concise) & \setlength{\fboxsep}{0pt} \fbox{\IosSevenSlider{5cm}{.5}} \\
        \end{tabular}

\end{table}
\end {document}

答案1

使用普通的乳胶计数器来记录总数是没有问题的。只需用来\addtocounter加总分数,然后在最后打印总数即可。

您的滑块存在两个问题:

  • 首先,tikz需要数字坐标,但您的宏要求它转换(5cm,0)成坐标:只需使用(5,0)
  • 其次,您尝试使用 来定位滑块(start)!#2!(end),因此#2必须介于 0 和 1 之间,但您给它满分。您需要5/10,而不是5。这就是您出现溢出的原因。
  • 我怀疑您可能不希望滑块的宽度作为参数\IosSevenSlider,而是希望问题的最大标记作为参数。

最后,由于您希望让非 LaTeX 用户也能轻松使用此模板,我建议您将宏的核心部分放入单独的类文件中,然后只需调用环境即可创建表。破解您的代码,以下是我对类文件的建议:

\LoadClass[a4paper]{paper}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{calc}
\usepackage{tikz}
\usetikzlibrary{calc,shadows,shadows.blur}

\setlength{\fboxsep}{0pt}
% IsoSevenSlider[slider length]{mark}{maximum mark}
\newcommand\IosSevenSlider[3][4]{\fbox{%
    \tikz[baseline=-0.1cm]{
        \coordinate (start) at (0,0);
        \coordinate (end) at (#1,0);
        \coordinate (mark) at ($ (start)! {#2/#3} !(end) $);
        \useasboundingbox (start|- 0,-.25) rectangle (end|- 0, .25);
        \draw[line width=0.4mm, line cap=round, blue!50!cyan]
             (start) -- (mark) edge[lightgray] (end);
        \node[fill=white, draw=lightgray, very thin,
            blur shadow={shadow xshift=0pt, shadow opacity=20, shadow yshift=-0.9mm,
                         shadow blur steps=6, shadow blur radius=0.3mm},
            circle, minimum size=0.25cm, inner sep=0pt] at (mark) {};
    }}}

% Counters to keep track of students' marks and the maximum possible mark
\newcounter{TotalMarks}
\newcounter{MaximumMarks}

% \Mark{mark} or \Mark[maximum (default=5)]{mark}
\newcommand\Mark[2][5]{#2&\IosSevenSlider{#2}{#1}%
  \addtocounter{TotalMarks}{#2}\addtocounter{MaximumMarks}{#1}}

\newenvironment{Marks}%
  {\document\center\tabular{lll}}%
  {\textbf{Total marks} & \theTotalMarks &\IosSevenSlider{\theTotalMarks}{\theMaximumMarks}\\%
  \endtabular\endcenter\enddocument}

\endinput

如果调用这个函数marks.cls那么你的模板文件将会像这样:

\documentclass{marks}

\begin{Marks}
% Using the value for q1 results in the slider overshooting!
Overall Presentation (Structure and English)    & \Mark{5}\\
% A hardcoded value works just fine.
Clarity of title (Accurate and concise) & \Mark{3} \\
\end{Marks}

得出的结果为:

在此处输入图片描述

在执行此操作时,我对你的宏进行了一些修改。

  • 现在\IsoSevenSlider需要三个参数:#1=滑块宽度(可选)、#2=标记和#3=最大可能标记。可能#1可以删除。我只是破解了您的tikz代码以使其工作;特别是,我没有尝试改进或修改它:)此宏不会直接在模板中调用。默认情况下#1=4 - 选择此值只是为了使滑块适合页边距。
  • 环境Marks会启动和关闭文档并绘制表格。最后会添加一条总分线以及滑块。
  • \Mark宏会打印学生的分数并将其添加到累计总分中。该宏有一个可选参数,指定问题的最高分数(默认为 5)。请注意,环境创建的表格环境Marks现在有三列,并\Mark在最后两列中创建条目。

请注意,我没有为单个问号定义计数器。相反,我\Mark会打印分数并将其添加到累计总数中(它会跟踪可能的最高分数)。除非您以后想要使用单个分数,否则您无需记住它们(如果您以后确实需要这些分数,那么修改它\Mark以使其也能记住它们并不困难)。

编辑 我认为,您可以通过将&\\移入\Mark宏并将其定义更改为:来进一步简化 LaTeX,以适应新手用户:

\newcommand\Mark[2][5]{&#2&\IosSevenSlider{#2}{#1}\\%
  \addtocounter{TotalMarks}{#2}\addtocounter{MaximumMarks}{#1}}

经过此更改,你的模板文件将变为:

\documentclass{marks}

\begin{Marks}
Overall Presentation (Structure and English) \Mark{5}
Clarity of title (Accurate and concise) \Mark{3}
\end{Marks}

相关内容