我是一名计算机科学专业的学生。我的大部分练习都是用 LaTeX 写的。所以我经常需要创建一个练习分数表,其中包含不同数量的练习和每个练习的不同分数。
因此我想定义一个命令来快速完成这项工作。这个想法是提供一个命令\excercisepoints{4,5,3}
来打印一个包含 3 个练习空间的表格。其中第一个给出 4 分,第二个给出 5 分,依此类推。
我也想要一行来表示点数总和。因为我非常喜欢 TikZ,所以我决定在 TikZ 中实现这一点。
\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}
得出以下结果:
因此存在两个问题:
\i
不被解释为内部变量\expandafter{}
- 我不知道如何对数字求和。我已经用 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}