tikz 中的运动点自动化表格

tikz 中的运动点自动化表格

我是一名计算机科学专业的学生。我的大部分练习都是用 LaTeX 写的。所以我经常需要创建一个练习分数表,其中包含不同数量的练习和每个练习的不同分数。

因此我想定义一个命令来快速完成这项工作。这个想法是提供一个命令\excercisepoints{4,5,3}来打印一个包含 3 个练习空间的表格。其中第一个给出 4 分,第二个给出 5 分,依此类推。

我也想要一行来表示点数总和。因为我非常喜欢 TikZ,所以我决定在 TikZ 中实现这一点。

通过使用这三个问题(123)我得出的结论是:

\documentclass[class=article]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{etoolbox}
\usetikzlibrary{matrix}
\tikzset{ 
    table/.style={
        matrix of nodes,
        row sep=-\pgflinewidth,
        column sep=-\pgflinewidth,
        nodes={
            rectangle,
            draw=black,
            align=center
        },
        minimum height=1.5em,
        text depth=0.5ex,
        text height=2ex,
        nodes in empty cells,
%%
        row 1/.style={
            nodes={
                fill=black,
                text=white,
                font=\bfseries
            }
        }
    }
}
\begin{document}
\newcommand{\excercisepoints}[1]{
\let\mymatrixcontent\empty
\foreach[count=\c] \i in {#1} {
    \expandafter\gappto\expandafter\mymatrixcontent\expandafter{\c \& \i \& \\}%
}
\begin{tikzpicture}
\matrix (first) [ampersand replacement=\&, table,text width=6em]
{
Excercise \& Maximal \& Achieved\\
\mymatrixcontent
$\sum$ \& \&\\
};
\end{tikzpicture}}
\excercisepoints{2,4,3}
\end{document}

得出以下结果:

输出

因此存在两个问题:

  1. \i不被解释为内部变量\expandafter{}
  2. 我不知道如何对数字求和。我已经用 tikz 试过了。但我只找到了用于对维度求和的命令,而不是自然数。

编辑:

对于稍后观看这些内容的人来说,这是工作宏:

\RequirePackage{tikz}
\RequirePackage{etoolbox}
\usetikzlibrary{matrix}
\tikzset{ 
    table/.style={
        matrix of nodes,
        row sep=-\pgflinewidth,
        column sep=-\pgflinewidth,
        nodes={
            rectangle,
            draw=black,
            align=center
        },
        minimum height=1.5em,
        text depth=0.5ex,
        text height=2ex,
        nodes in empty cells,
%%
        row 1/.style={
            nodes={
                fill=black,
                text=white,
                font=\bfseries
            }
        }
    }
}
\newcommand{\punkteliste}[1]{%
\let\mymatrixcontent\empty
\def\mySum{0}
\foreach[count=\c] \i in {#1} {%
    \xappto\mymatrixcontent{\c \noexpand\& \i \noexpand\& \noexpand\\}%
    \pgfmathparse{int(\mySum+\i)}\global\let\mySum\pgfmathresult
}
\begin{tikzpicture}
\matrix (first) [ampersand replacement=\&, table,text width=6em]
{
Excercise \& Maximal \& Achieved\\
\mymatrixcontent
$\sum$ \& \mySum \&\\
};

答案1

除了我的评论之外,还有 的/pgf/number format/int detect选项\pgfmathprintnumber

代码

\documentclass[tikz]{standalone}
\usepackage{etoolbox}
\usetikzlibrary{matrix}
\tikzset{ 
    table/.style={
        matrix of nodes,
        row sep=-\pgflinewidth,
        column sep=-\pgflinewidth,
        nodes={
            rectangle,
            draw=green,
            text width=6em,
            minimum width=6em+0*\pgfkeysvalueof{/pgf/inner xsep},
            align=center
        },
        minimum height=1.5em,
        text depth=0.5ex,
        text height=2ex,
        nodes in empty cells,
%%
        row 1/.style={
            nodes={
                fill=black,
                text=white,
%                font=\bfseries
            }
        }
    }
}

\newcommand{\excercisepoints}[1]{%
    \let\mymatrixcontent\empty
    \def\mySum{0}%
    \foreach[count=\c] \i in {#1} {%
        \xappto\mymatrixcontent{\c \noexpand\& \i \noexpand\& \noexpand\\}%
        \pgfmathparse{\mySum+\i}
        \global\let\mySum\pgfmathresult
    }%
    \begin{tikzpicture}
    \matrix (first) [ampersand replacement=\&, table]
    {
    \bfseries Excercise \& \bfseries Maximal \& \bfseries Achieved\\
    \mymatrixcontent
    $\sum$ \& \pgfmathprintnumber[int detect]{\mySum} \&\\
    };
    \end{tikzpicture}}
\begin{document}
\excercisepoints{2,4,3}
\end{document}

输出

在此处输入图片描述

相关内容