我已经使用 datatool 创建了问题数据库(非常大的数据库)
\DTLnewdb{finitemath}
\long\def\newproblem#1#2#3#4#5#6#7#8#9{%
\DTLnewrow{finitemath}%
\DTLnewdbentry{finitemath}{seq}{#1}%
\DTLnewdbentry{finitemath}{yr}{#2}%
\DTLnewdbentry{finitemath}{sub}{#3}%
\DTLnewdbentry{finitemath}{top}{#4}%
\DTLnewdbentry{finitemath}{mar}{#5}%
\DTLnewdbentry{finitemath}{qus}{#6}%
\DTLnewdbentry{finitemath}{url}{#7}%
\DTLnewdbentry{finitemath}{exp}{#8}%
\DTLnewdbentry{finitemath}{ans}{#9}%
}
\newproblem{1}{2018}{DM}{comb}{1}{
\textbf{Which one of the following\begin{lstlisting}
is a closed form expression for the generating function of\end{lstlisting}
the sequence $\{a_n\}$, where $a_n = 2n +3 \text{ for all } n=0, 1, 2, \dots$?}\\
$($A$)$ $\frac{3}{(1-x)^2}$\\
$($B$)$ $\frac{3x}{(1-x)^2}$\\
$($C$)$ $\frac{2-x}{(1-x)^2}$\\
$($D$)$ $\frac{3-x}{(1-x)^2}$\\
}{\url{http://gatefreaks.com/index.php?qa=9036&qa_1=dm-gate-2015-3-1}}{.}{Ans:d}
数据库有 9 个不同的列。我有 10 个这样的数据库文件。我使用主文件来合并所有这些数据库,当我编译它时,输出一个排序的 pdf 文件(根据任何字段)。但编译需要几个小时。有什么方法可以提高效率吗?
我读到过一些文章说可以使用 datatooltk 来完成此操作。但我不知道如何将我的数据库导入 datatooltk?还有其他方法吗?
答案1
确保您至少拥有 1.8 版(2018-01-26)datatooltk
。您至少还需要 Java 7。(Java 8是当前版本。
要安装datatooltk
,请下载datatooltk-installer.jar
从 CTAN 中下载并运行。如果您的操作系统将.jar
扩展识别为 Java 应用程序,您应该能够双击或使用“打开方式...”,否则您可以从命令行安装:
java -jar datatooltk-installer.jar
有 GUI 模式和批处理模式。安装程序应在应用程序菜单中放置 GUI 版本的链接,尽管这可能会因操作系统而异。在 GUI 模式下使用文件 -> 打开并选择.tex
包含问题定义的文件。运气好的话,它应该能够解析你的定义\newproblem
。如果不行,请尝试替换
\long\def\newproblem#1#2#3#4#5#6#7#8#9{%
和
\newcommand{\newproblem}[9]{%
只要.tex
文件中没有太复杂的内容,它就应该能够创建数据库。(如果文件很大,可能需要一段时间才能解析。)然后您可以将其保存到.dbtex
使用另存为.... 然后您可以使用或加载.dbtex
文件到您的文档中。\input
\DTLloaddbtex
或者,从命令行:
datatooltk --in inputfile.tex --output outputfile.dbtex
如果需要对数据进行排序,在同一步骤中执行会更有效率。例如:
datatooltk --in inputfile.tex --sort yr --output outputfile.dbtex
当您打开一个.tex
不符合该.dbtex
格式的文件时,您会收到一条消息:
Quick load failed (Premature end of file. Failed to find '\newtoks\csname').
Trying again with TeX Parser Library.
这只是意味着datatooltk
切换到使用 TeX 解析器库来解释文件内容,这比其默认的加载文件方法要慢.dbtex
。
有关的:datatool
表现。