## 编译环境 操作系统 * [10 ] Windows 7/8/10 * [x ] macOS * [x ] Linux `若需勾选,请把[ ]改成[x]` Tex发行版 * [2020 ] TexLive `年份` * [ ] MikTeX `版本号` * [ ] CTeX `若需勾选,请把[ ]改成[x]` ## 我的问题 在此输入你遇到的问题...![](https://wenda.latexstudio.net/data/attach/200606/izANdggK.jpg) 如这个图片内容。 将“乱序”的选项进行排列,使每个选项独占一行。之后,从题干中,提取答案,把题干答案删除,将答案以【答案】A的形式,加到最后一个选项的下一行。 我之前手动做的,重复操作程度太高了,我想使这个排版过程自动化。我之前查了一下,word排版的知识。有word vba,但我又看到评论说 word vba 不如latex. 所以,我来了。我现在考研复习+准备期末阶段。时间确实少。但是确定解决问题的方向,着实得花一些时间。 所以,我来求助了,希望答主们,帮我确定一下,解决这个问题的方向、方法。确定后,我可以自己去学相关知识。

1 回答1

2
关于你说的“从题干中提取答案,再把答案从题干中删除”这个过程,我这里就简化成“在排版的时候就知道答案是哪个”,因为每道题都需要手动去输入,所以可以直接把正确答案标记出来。 我这里大概实现了你的需求,主要用的是 `exam` 文档类实现基本环境定义,和 `exam-randomizechoices` 宏包实现选择题的随机排列。它的局限是不能排版多选题。 代码: ``` \documentclass[answers]{exam} % answers 选项控制是否输出答案,去掉即可取消输出答案 \usepackage{ctex} % 中文支持 \usepackage{listings} % 用于展示代码 \lstset{ numbers=left, % 左边显示行号 language=Java % 默认语言为 Java } \renewcommand*\thelstnumber{\the\value{lstnumber})} % 设置行号为 2) 的形式 \usepackage{exam-randomizechoices} % 随机化选择题 \setrandomizerseed{12} % 设定随机数种子 \renewcommand{\choiceshook}{% 设置选项的缩进 \setlength{\leftmargin}{1em}% } \CorrectChoiceEmphasis{} % 将正确答案在题干中显示为普通(默认为 \bfseries) \newcommand{\ansblnk}{(\quad )} % 显示一个括号 \newcommand{\anshere}{% 输出当前问题的答案,去掉文档类的 answers 选项将不会输出答案 \ifprintanswers 【答案】\noexpand\ref{question@\arabic{question}@correctchoice} \fi} \begin{document} \begin{questions} \question 有以下程序: \begin{lstlisting} System.out.println(""); \end{lstlisting} 该程序的执行结果是\ansblnk \begin{randomizechoices} \choice 程序执行后无输出 \choice 程序在第5行出现编译错误 \CorrectChoice 程序执行后输出“Equal” \choice 程序执行后出现异常 \end{randomizechoices} \anshere % 输出本题答案 \question 执行完下面的程序片段后,下面的哪些结论是正确的?\ansblnk \begin{lstlisting} int a,b,c; a=1; b=2; c=(a+b>3?a++:++b); \end{lstlisting} \begin{randomizechoices} \choice a 的值是2,b 的值是3 \CorrectChoice a 的值是1,b 的值是3 \choice a 的值是2,b 的值是2 \choice c的值是 false \end{randomizechoices} \anshere % 输出本题答案 % 问题 \ref{question@\arabic{question}} 的答案是 \ref{question@\arabic{question}@correctchoice}。 \end{questions} \ifprintanswers 答案:\par\printkeytable \fi \end{document} ``` 效果: ![](https://wenda.latexstudio.net/data/attach/200606/rCLRTxs0.jpg)

回答: 2020-06-06 11:28

又看了一遍我觉得可能误解了你的意思,不过文档确实可以这么来写,涉及到原来文本到 latex 的转换,你可以自己编写一个程序,把里面的选项之类的替换掉。

  • 好的,谢谢你啦。 – 逍遥 2020-06-07 19:39 回复

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。