假设我有一个包含一堆测试问题的长文件。我想选择一个子集并用它们进行测试。当然我可以复制/粘贴。但是是否有一个包可以帮助对文本进行排序和显示?这类似于 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 进行修改,以便它根据文档排版该行。如果您不希望问题重复,则需要包含重复检查或修改代码以查找第一个问题,跳过随机数以获取下一个问题,依此类推。