我正在尝试将我的练习/测试表从 LaTeX 转换为 ConTeXt,并且已经包含了许多功能,因此工作量比我预期的要少得多。特别是与模式相结合的块系统非常适合生成带有答案/分数等的学生版本和教师版本。我已经设置了一个工作表并尝试找到一种在练习中包含分数的好方法。它们应该显示在右边距(下面的 xx-Part),我想稍后处理它们以执行一些操作,例如计算总分数,获取成绩分布表等。是否有可能将一个额外的参数“points”添加到枚举或块“Exercise”,该参数可以在文档的其他部分读出?这是工作表的当前状态:
\mainlanguage[en]
\setuppapersize[A4]
\setupbodyfont[modern,ss,13pt]
\usesymbols[fontawesome]
\usesymbols[cc]
\definehspace[date][7 em]
\definecolor[schoolcolor][c=1,m=0.68,y=0,k=0.14]
\setupheader[text][
before={\startframed[frame=off,bottomframe=on,framecolor=schoolcolor]},
after={\stopframed},
]
\setupheadertexts[Title]
\setupheadertexts[Class][{\symbol[fontawesome][calendar]\hspace[date]\color[schoolcolor]{School}}]
\setupfootertexts[Page \currentpage~of \lastpage]
\setupfootertexts[teacher][{\symbol[cc][cc]\symbol[cc][by]\symbol[cc][sa]}]
\defineenumeration[Exercise][
location=top,
text=\llap{\getglyphdirect{ZapfDingbats*dingbats}{\number"270E}~}Exercise,
title=yes,
right=:,
titleleft=,
titleright=,
]
\defineblock[Exercise]
\keepblocks[Exercise]
\defineenumeration[answer][
location=top,
text=Answer,
]
\defineblock[answer]
% \keepblocks[answer]
\starttext
\section{Part 1}
\beginExercise
\startExercise{Questiontitle 1}\inrightmargin{ \hl[2] / xx}
Question 1...
\beginanswer
\startanswer
Answer 1...
\stopanswer
\endanswer
\stopExercise
\endExercise
\beginExercise
\startExercise{Questiontitle 2}
Question 2...
\beginanswer
\startanswer
Answer 2...
\stopanswer
\endanswer
\stopExercise
\endExercise
\section{Part 2}
\beginExercise
\startExercise{Questiontitle 3}
Question 3...
\beginanswer
\startanswer
Answer 3...
\stopanswer
\endanswer
\stopExercise
\endExercise
\subject{Answers}
\resetanswer
\useblocks[answer]
\subject{Points}
TODO: Process points
- get all points from exercises
- calculate max points
- setup linear grade distribution
- get points from grade distribution
\stoptext
答案1
我试了一下。您可以为枚举使用不同的名称,也可以为实际使用的开始/停止使用不同的名称。让我们保留您用于枚举的名称并定义一个exo
开始/停止。下面的代码允许[points]
在标题前添加一个可选参数。这是一个工作示例。
% macros=mkvi
\defineenumeration[Exercise][
location=top,
text=Exercise,
title=yes,
right=:,
titleleft=,
titleright=,
]
\defineblock[Exercise]
\keepblocks[Exercise]
\defineenumeration[answer][
location=top,
text=Answer,
]
\defineblock[answer]
% \keepblocks[answer]
\unprotect
\def\startexo{\dosingleempty\do_startexo}
\def\do_startexo[#pointsexo]#titleexo{%
\iffirstargument{\inrightmargin{ \hl[2] / #pointsexo}}\fi
\startExercise{#titleexo}\par%
}
\def \stopexo{\stopExercise}
\protect
\starttext
\beginExercise
\startexo{title 1}
Question 1...
\startanswer
Answer 1...
\stopanswer
\endanswer
\stopexo
\endExercise
\beginExercise
\startexo[3]{title 2}
Question 2...
\startanswer
Answer 2...
\stopanswer
\endanswer
\stopexo
\endExercise
\stoptext
请注意,% macro=mkvi
代码第一行似乎需要。我不知道详细信息。
我主要使用这个页面: 在 ConTeXt 中 \def 和 \define 相同吗? 希望我没有增加笨拙之处。