折腾许久,在群里面也问询了几次后,实在是没有解决的地方,总是会报错。还是回到论坛上来请教下看有无大神来帮忙答疑下。
夏师的 exam-zh-main
原始模板中,正常编译,以及使用 -shell-escape
都是没有问题的。
exam-zh-main
里面是这样设置的:
\examsetup{
page/size=a4paper,
paren/show-paren=true,
paren/show-answer=true,
fillin/show-answer=false,
solution/show-solution=false
}
\ExamPrintAnswerSet{
sealline/show=true,
page/size=a3paper,
paren/show-answer=false,
fillin/show-answer=false,
solution/show-solution=false,
}
我前几天使用论坛上夏师上传的另外一个语文试卷模板,编译了一套语文试卷,里面没有这么多设置,正常编译成功。
但我把上面 exam-zh-main
里面的设置放在了 MWE
中,就出现了报错,正常编译及 -shell-escape
都会报错。
正常编译报错如下:
-shell-escape
编译报错如下:
应该是同一个地方的问题。
其实在我最开始试用 exam-zh
时,也有遇到这样的问题,就是 show
这里不晓得什么时候就报错,也解决不了。
求救大佬们!
附件见后。
d279431d374c5d5eca65f9ce96503835.zip
请你首先保证你.tex
文件调用的exam-zh.cls
的版本是v0.2.1
及以上....
因为你的代码有点乱,版本也有点乱,MWE也太长,下面的介绍将告诉你如何在TeXLive2024
下编译exam-zh v0.2.1
实现所谓的师生两版.
下面是我构造的一个最简单的MWE:
% TeXLive2024 其下的 texmf 树的 exam-zh版本是v0.2.1
\documentclass{exam-zh}
\examsetup{
style/student-version-suffix=第二版, % default value = "_student_version"
page/size=a4paper,
paren/show-paren=true,
paren/show-answer=false,
fillin/show-answer=false,
solution/show-solution=hide,
}
% 下面\ExamPrintAnswerSet的设置会继承\examsetup之后补充上面的设置
\ExamPrintAnswerSet[
\geometry{showframe}
]{
page/size=a4paper,
paren/show-answer=true,
fillin/show-answer=true,
solution/show-solution=show-stay,
}
% \ExamPrintAnswer % 可以省略 -shell-escape选项命令已经实现了这一行
\title{Exam-zh使用考试招生全国统一考试}
\subject{\LaTeX{}}
\begin{document}
% 1.
\begin{question}[points = 2]
设集合 $A = \{x \mid -2 < x < 4\}$,$B = \{2, 3, 4, 5\}$,则 $A \cap B = $ \paren[A]
\begin{choices}
\item $\{2\}$
\item $\{2, 3\}$
\item $\{3, 4\}$
\item $\{2, 3, 4\}$
\end{choices}
\end{question}
% 14.
\begin{question}
已知 $O$ 为坐标原点,抛物线 $C \colon y^2 = 2px$($p > 0$)的焦点为 $F$,
$P$ 为 $C$ 上一点,$PF$ 与 $x$ 轴垂直,$Q$ 为 $x$ 轴上一点,且 $PQ \perp OP$,
若 $|FQ| = 6$,则 $C$ 的准线方程为 \fillin[$\dfrac{1}{3}$] 。
\end{question}
% 22.
\begin{problem}[points = 12]
已知函数 $f(x) = x (1 - \ln x)$。
\begin{enumerate}
\item 讨论 $f(x)$ 的单调性;
\item 设 $a$,$b$ 为两个不相等的正数,且 $b \ln a - a \ln b = a - b$,
证明:$2 < \frac{1}{a} + \frac{1}{b} < \eu$。
\end{enumerate}
\end{problem}
\begin{solution}
函数的定义域为 $(0, +\infty)$,
又 \[f^{\prime}(x) = 1 - \ln x-1 = -\ln x, \score{2}\]
当 $x \in(0, 1)$ 时, $f^{\prime}(x) > 0$, 当 $x \in(1, +\infty)$ 时, $f^{\prime}(x) < 0$,
故 $f(x)$ 的递增区间为 $(0,1)$, 递减区间为 $(1, +\infty)$.
\end{solution}
\end{document}
如果使用latexmk -xelatex mwe
编译,效果是出现一个仅有三道题的mwe.pdf
文件如下:
请仔细理解文档中关于师生两版的内容:
一言以蔽之:\ExamPrintAnswerSet
的设置会继承\examsetup
的内容之后补充(append)其设置
如果使用latexmk -xelatex -shell-escape mwe
编译,效果是在当前目录下出现的两个mwe.pdf
以及mwe-第二版.pdf
文件如下:
按照文档默认值的说明:
student-version-suffix = 〈suffix〉
师生两版的第二个版本的 PDF 名称的后缀。即第二个 PDF 的名称为 <jobname><suffix>.pdf。
默认值为 _student_version
。
这意味着夏老师设计的时候本身是希望\examsetup
生成的第一版是带答案的"老师版",附加上\ExamPrintAnswerSet
之后的第二版是不带答案的"学生版"
上面的情况,需要在\examsetup
中设置show-answer,之后在\ExamPrintAnswerSet
中设置hide-answer,这样后面hide-answer的命令会覆盖前面的配置,实现原版是教师版,新版是学生版的效果。
以上面MWE代码设置为例:
\examsetup{
style/student-version-suffix=第二版, % default value = "_student_version"
page/size=a4paper,
paren/show-paren=true,
paren/show-answer=false,
fillin/show-answer=false,
solution/show-solution=hide,
}
% 下面\ExamPrintAnswerSet的设置会继承\examsetup之后补充上面的设置
\ExamPrintAnswerSet[
\geometry{showframe}
]{
page/size=a4paper,
paren/show-answer=true,
fillin/show-answer=true,
solution/show-solution=show-stay,
}
这意味着对于第一份文件mwe.pdf
,他的设置为:
page/size=a4paper,
paren/show-paren=true,
paren/show-answer=false,
fillin/show-answer=false,
solution/show-solution=hide,
对于第二份,注意\ExamPrintAnswerSet
会覆盖前面的信息,其配置等价于
\geometry{showframe}
------继承第一份pdf的配置--------
page/size=a4paper,
paren/show-paren=true,
paren/show-answer=false,
fillin/show-answer=false,
solution/show-solution=hide,
-------在其后追加第二份pdf的补充配置----------
page/size=a4paper, % 其实这行可以省略,因为已经继承了page/size=a4paper
paren/show-answer=true, % 覆盖上面的 false
fillin/show-answer=true, % 覆盖上面的 false
solution/show-solution=show-stay, % 覆盖上面的 hide
只要你弄懂上面不同设置的区别和逻辑,就可以自行灵活调整和设置,想怎么出题怎么出题,想让什么文档呈现什么效果都行(【第一份老师-第二份学生】或者【第一份学生-第二份老师】),当然,不要忘记使用-shell-escape
选项编译。
明确使用的版本,仔细研究所使用版本的文档,用正确版本的正确选项,多用最小的例子去尝试,提问给严格规范的MWE。
如果你弄懂了最简单的例子实现了师生两版,那么用到你庞大的工程中想必是事半功倍的。希望以上对你有所帮助。
使用
-shell-escape
编译,出现一句! Undefined control sequence.
↑↑↑正常编译,也是报错
! Undefined control sequence.
↑↑↑我理解是句没有定义的控制顺序。
-shell-escape
编译方式,是在知乎上面找到的方法设置的。目前用的是
exam-zh-0.23
和texlive 2022
。使用texlive 2022
的一个原因是我使用hanzibox
在texlive 2024
中编译出来的作文纸格一直不成功。就您的经验,
! Undefined control sequence.
这种错误是否有解。再次感谢!
我把以下部分拷进去从码云上面下载的新的
exam-zh-0.23
的样例example-single.tex
中,也还是报错! Undefined control sequence.
迄今为止,师生两版维一成功的一次,是在论坛上面下载的夏师之前的那个文件夹的样例。实在是丝滑。可惜的是,再也没有感受过那种丝滑。
what a pity!
@u10189 不会pity的,一定可以找到合理原因的。
下面记录一下在
TeXLivee2022
下打补丁的方法。部分用户在TeXLive2022
下使用会出现如下错误:读错误信息,显然是因为
\IfBlankTF
未定义导致的,通过查询source2e.pdf
可知:在
2022-03
拉取的TeXLive2022
缺少对\IfBlankTF
的定义,那么可以如下patch
:换言之我上面的
mwe
修改成如下即可在TeXlive2022
下暂时编译:另外
exam-zh
是一个富有生命力的宏包(虽然已经停止维护了),其更新时间大多在2023~2024,强烈建议主力使用exam-zh
的用户升级到TeXLive2024
版本。@u10189 关于你
\hanzibox
的问题,你是否尝试过在标准文档类下编译(?)建议针对这一具体问题开新的提问,耿老师就在论坛里,如果你提出问题我相信他是很乐意亲自为你解答的。@u70550 我测试过了 TeXLive2024下
hanzibox
行为确实不合理,可以考虑提个issues,优秀的宏包肯定是向最新版本兼容的。