如何对文本进行排序或如何制作基于 tex 的测试生成器

如何对文本进行排序或如何制作基于 tex 的测试生成器

假设我有一个包含一堆测试问题的长文件。我想选择一个子集并用它们进行测试。当然我可以复制/粘贴。但是是否有一个包可以帮助对文本进行排序和显示?这类似于 bibtex 所做的,但我只想通过类似“include”的方式插入文本/问题,例如“include 95,22,43 from algebra.tex”以从该文件插入问题 95,22,43 并枚举它们。

我找到的最接近的物品是这个从某种数据库自动生成工作簿答案包

答案1

这个问题很老了,但让我很好奇。这可能一点也不安全。也就是说,你需要知道你给文件输入了什么。

这当然是脆弱的,并且由于它使用外部写入,因此本质上是不安全的。

买者自负...

如果\jobname.tex.tex文件,\jobname.dat则应包含问题。每个问题前面应有一行PRef:<label>。标签不得包含奇怪的字符,包括空格。\princlude{}应包含按所需顺序排列的问题列表,并以空格分隔。因此,如果您希望按该顺序排列问题 98、1 和 33,则\princlude{98 1 33}。其他文件是通过直接写入或通过即时创建的bashful

\documentclass{article}
\usepackage{bashful}
\begin{filecontents}{\jobname.dat}
PRef:1
$2+2=?$
PRef:2
If a chimpanzee has 5 bananas, 6 oranges and 2 coconuts, how many tomatoes does the nearest gorilla have?
Answers should be correct to 5 decimal places.
PRef:3
Is she right?
PRef:4
Why is there nothing rather than something?
PRef:5
Prove the Bishop wrong.
If the Bishop objects, consider the Queen's advice to Alice or take the train instead.
\end{filecontents}

\newwrite\writeme
\newcommand\princlude[1]{%
  \immediate\openout\writeme=my.prefs%
  \immediate\write\writeme{#1 }%
  \immediate\closeout\writeme}

\AtEndDocument{%
\begin{enumerate}
  \input{\jobname-pref.tex}
\end{enumerate}}

\begin{document}

\princlude{2 5 1}

\bash[stdoutFile=\jobname-pref.tex]
for i in $(cat my.prefs)
do
sed -n "/PRef:${i}/,/PRef:/p" prawf3.dat | sed -e "s/PRef:${i}/\\\\item /" -e '/^PRef:.*$/d'
done
\END

\end{document}

选定的问题

答案2

你可以用脚本语言来实现这一点。我不知道所有可以与 LaTeX 配合使用的脚本语言,但我知道PerlTeX,它允许您创建运行 Perl 代码的 LaTeX 宏和环境。您将其包含\usepackage{perltex}在序言中,然后perltex.pl在命令行中使用进行编译。

例如,你可以有一个函数,它从问题文件中读取问题并随机选择一个。你可以从此处给出的 Perl 代码并针对 LaTeX 进行修改,以便它根据文档排版该行。如果您不希望问题重复,则需要包含重复检查或修改代码以查找第一个问题,跳过随机数以获取下一个问题,依此类推。

相关内容