为每个学生准备一张特殊的考卷

为每个学生准备一张特殊的考卷

我想知道是否有办法从 Excel 文件中读取数据,然后以某种方式使用表格外的 for 循环获取每个学生的特殊考试表。

到目前为止,我们一直在使用类似这样的代码:

Fill the blanks below and answer the question.

\begin{tabular}{|l|l|}
\hline
Name:    & E-mail:         \\ \hline
Surname: & Student Number: \\ \hline
\end{tabular}

Question: 2+2=?

我们将上述试卷打印 100 次,供 100 名学生的班级使用。现在我想做这样的事情:

\readfile{students.xls}

\forloop{from i=1 to i=100}{

Answer the question below.

\begin{tabular}{|l|l|}
\hline
Name: \cell{A_i}    & E-mail: \cell{B_i}         \\ \hline
Surname: \cell{C_i} & Student Number: \cell{D_i} \\ \hline
\end{tabular}

Question: 2+2=?

\newpage
}

得到一个100页的.pdf文件,其中每个学生都有一个特殊的页面。

提前致谢。

答案1

您可以使用ods文件包,支持对 OpenDocument 电子表格文件进行操作。您需要使用 LibreOffice 将您的 excel 文件转换为 ODS(Excel 也可以执行此操作,但 LibreOffice 生成的文件更干净)。

Odsfile提供\includespread带有keyval接口的命令:

\documentclass{article}
\usepackage{fontspec}
\usepackage{odsfile}
\usepackage{url}
\begin{document}
\includespread[%
  file=students.ods,
  range=a1:d,
  rowtemplate={%
    \begin{tabular}{|l|l|}%
    \hline%
    Name: -{1} & E-mail: -{2}\\ \hline% 
    Surname: -{3} & Student Number: -{4}\\ \hline%
    \end{tabular}%
  \endgraf%
    Question: $2 + 2  = $ ?
    \newpage},
  ]

\end{document}

file属性指定电子表格文件,范围指定要处理的范围(列为a、、等,行有编号,当数字剩余时bc范围的第二部分的默认值为行数)。

rowtemplate可以指定将对每一行执行的代码,使用 访问列-{column number}。请注意,我们必须使用\endgraf而不是段落。

该文件必须使用 进行编译lualatex

样本:

在此处输入图片描述

答案2

简短回答:您正在寻找自动多项选择(美国管理公司)。

长答案:您正在寻找自动多项选择(美国管理公司) 是一个 LaTeX 软件包和一个免费的 Linux GUI 程序。如果您是定期参加考试的 Windows 用户,那么只需安装 Linux 即可拥有此程序。AMC 可以为每个学生安排一次考试,考试题目是随机的,因此每个学生都有完全不同的题目,或者题目相同,但随机混合,答案的顺序也不同。笔试的扫描图像可以自动标记,并使用一些标识码将其结果导出到与学生姓名关联的 LibreOffice 电子表格中。

答案3

您可以使用 csvsimple 包(http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/csvsimple/csvsimple.pdf

以下是这个包的一些功能,我觉得非常有用。文档非常详细

使用给定的数据文件

================= StudentFile.txt=============

name, email, surname, studentnumber
robert, [email protected], roro, 123466
julie, [email protected], juju, 987456
laure,[email protected],lolo, 147852
aline,[email protected],lili,963258
martine,[email protected], titine,258741

===========================================

和乳胶源

\documentclass{article}
\usepackage{csvsimple}
\begin{document}
\csvreader%
{StudentFile.txt}{1=\name,2=\email,3=\surname,4=\studentnumber}%
{
\begin{tabular}{|l|l|}
\hline
Name: \name   & E-mail: \email       \\ \hline
Surname: \surname & Student Number: \studentnumber \\ \hline
\end{tabular}
\vfill
Questions:

$2+\studentnumber=????$
\vfill
\clearpage
}%

\end{document}

答案4

一种穷人低重量无包装方法,限制为 4 条记录(如果更认真地处理空间删除,可以增加到 9 条记录)。适应个人需求。

\documentclass{article}
% only for self-contained example here
\usepackage{filecontents}
\begin{filecontents*}{StudentFile.txt}
robert, [email protected], roro, 123466
julie, [email protected], juju, 987456
laure,[email protected],lolo, 147852
aline,[email protected],lili,963258
martine,[email protected], titine,258741
\end{filecontents*}

% input stream
\newread\MyFile

\makeatletter
\newcommand*\ParseCSVFile [1]{%
    \openin\MyFile #1\relax
    {\endlinechar-1\ParseCSVFile@}%
    \closein\MyFile
}%
\def\ParseCSVFile@ {%
    \ifeof \MyFile
    \else
        \read \MyFile to \ParseCSVFile@oneline
%debugging
%\typeout{ICI: \ParseCSVFile@oneline}%
        \ifx\ParseCSVFile@oneline\par
        \else
        \ifx\ParseCSVFile@oneline\empty
        \else
           \expandafter
               \ParseCSVFile@DoOneLine\ParseCSVFile@oneline$$$$%
        \fi\fi
        \expandafter\ParseCSVFile@
    \fi
}%

% to be customized as need. 
\def\ParseCSVFile@DoOneLine #1#2,#3#4,#5#6,#7#8$$$${%
    \begin{tabular}{|l|l|}%
    \hline
    Name: #1#2& E-mail: #3#4\\ 
    \hline
    Surname: #5#6& Student Number: #7#8\\ 
    \hline
    \end{tabular}%
  \par
    Question: $2 + 2  = $ ?
\clearpage
}

\makeatother

\begin{document}

\ParseCSVFile {StudentFile.txt}

\end{document}

相关内容