我有两个数据集,每个数据集都包含与特定主题相关的问题。这些问题存储在外部文件中(同样,每个主题一个文件),并以随机顺序加载到数据集中。我需要生成具有以下基本格式的文档:
测验 1
- 问题 1:显示 topic1 数据集中列出的第一个问题
- 问题 2:显示 topic2 数据集中列出的第一个问题
测验 2
- 问题 1:显示 topic1 数据集中列出的第二个问题
- 问题 2:显示 topic2 数据集中列出的第二个问题
继续...
我仔细阅读了文档,但怀疑自己并没有完全理解。唯一的示例似乎侧重于一次显示一个数据集中的所有问题。唯一的其他选择似乎是提前知道每个问题的标签是什么,但这没有帮助,因为问题是以随机顺序加载的。
如果您能提供任何帮助,我们将不胜感激。如果这个问题已经得到解决,轻轻地推到正确的地方会很棒。
答案1
由于您没有提供任何代码片段,因此并不完全清楚您希望它如何工作,但下面是我将如何执行此操作。
主题目录:
我将为每个主题创建目录。例如AlgebraQuestions/
,和
TrigQuestions/
包含所有文件,这些文件是这些主题的所有可能问题。这将定义如下:
\newcommand*{\ListOfTopics}{%
AlgebraQuestions,% MUST have trailing % here
TrigQuestions%
}%
此主题列表决定了测验中将有多少个问题,因为您似乎希望测验中每个主题都有一个问题。如果您将所有主题目录组织为子目录,则\ListOfTopics
可以根据子目录的名称自动生成。
每个主题的问题列表:
对于每个主题目录,我将定义一个pgfmathdeclarerandomlist
。因此,例如,如果主题有三个名为、和的AlgebraQuestions/
文件,我将定义:file
file2
file3
\pgfmathdeclarerandomlist{AlgebraQuestions}{{file1}{file2}{file3}}
在下面的 MWE 中,我对这个列表进行了硬编码,但它当然可以根据目录中现有的文件动态自动生成。
测验次数:
唯一需要手动设置(或在命令行上指定)的变量是您想要生成的测验数量:
\newcommand*{\NumberOfQuizes}{4}%
输出:
因此假设目录
AlgebraQuestions/
包含名为的文件AlgebraQ1,...,AlgebraQ6
,并且
TrigQuestions/
目录包含名为的文件,TrigQ1,...,TrigQ9
我们得到:
但是,您不需要像下面这样打印文件名\item
,而是需要导入在 中定义的文件名\RandomQuestion
。
笔记:
由于问题是随机选择的,因此有些测验可能会有相同的问题(例如下面的测验 3 和 4)。但是,随着问题数量的增加,这种可能性会降低。如果不希望出现这种情况,可以通过额外的编码来防止这种情况,以确保每个列表先前选择的随机数不会被重复使用。
如果每个主题的问题都在一个文件中,则可以调整解决方案在 LaTeX 文档中自动引用,挑选出特定的命名环境。其用法取决于问题的具体定义方式,并要求为每个问题指定一个名称以用于解决它。
然而,我会高度建议将每个问题放在单独的文件中(也许使用包裹
standalone
)如下- 大大简化了这一过程的管理(特别是当问题数量增加时),
- 允许人们轻松添加新问题,而不必担心为其提供唯一的名称,因为文件系统将确保每个问题的名称都是唯一的,
- 允许每个文件自行编译和校对,并且
- 如果需要,可以轻松创建一个包含所有问题的文档。请参阅参考资料部分以了解这方面的一些选项。
参考:
代码:
\documentclass{article}
%\usepackage[paperheight=3.0cm, paperwidth=12.0cm, margin=0.1cm]{geometry}% Simplify image capture
\usepackage{enumitem}
\usepackage{tikz}% Easy way to get all the pgf functions
% The list of topics determines how many questions will be in the quiz
% since it appears that you want one question per topic in a quiz.
% This could be auto generated.
\newcommand*{\ListOfTopics}{%
AlgebraQuestions,% MUST have trailing % here
TrigQuestions%
}%
% These list of files names from each question can be auto generated
% but for example purposes I am just using the file names as the
% content in the file. The number of questions in each topic do not
% need to be the same. I would create directories with the topic
% names and auto generate this based on the directory and file names.
\pgfmathdeclarerandomlist{AlgebraQuestions}{%
{AlgebraQ1}%
{AlgebraQ1}%
{AlgebraQ3}%
{AlgebraQ4}%
{AlgebraQ5}%
{AlgebraQ6}%
}%
\pgfmathdeclarerandomlist{TrigQuestions}{%
{TrigQ1}%
{TrigQ2}%
{TrigQ3}%
{TrigQ4}%
{TrigQ5}%
{TrigQ6}%
{TrigQ7}%
{TrigQ8}%
{TrigQ9}%
}%
\newcommand*{\NumberOfQuizes}{4}%
\begin{document}
\foreach \QuizNumber in {1,...,\NumberOfQuizes} {%
\clearpage% Start each quiz on a new page
\noindent\textbf{\Large Quiz Number \QuizNumber}%
\begin{enumerate}
\foreach \Topic in \ListOfTopics {%
% Determine random question to use form list
\pgfmathrandomitem{\RandomQuestion}{\Topic}
% The following should import the file named in \RandomQuestion
\item Random Question from Topic='\Topic':
\textbf{\Large\RandomQuestion}%
}%
\end{enumerate}
}%
\end{document}