使用Latex排版选择题试卷

本文档介绍了如何使用Python和LaTeX自动化编排包含100多道选择题的试卷。通过正则表达式处理文本答案,利用LaTeX模板和编辑器的替换功能进行排版。在处理过程中,遇到LaTeX错误和过满框问题,通过重新安装和调整编译器设置得以解决。此外,还分享了在WPS或Word中使用替换序列的技巧,以及如何挖空题干答案和替换选项。最后给出了一个可运行的LaTeX代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

食用指南:使用python 语言实现了latex纯文本自动化编排


一、需求描述😗

工作原因,需要制作一张含有100多道选择题试卷
为了排版美观,我找了份LaTeX选择题模板
手动输入每一道过于麻烦,便找到了对应的自动化模块


最让人尴尬的事情发生了,我发现编辑器自带替换的功能,
而且支持正则表达式

二、解决方案✅

1. 内容处理

(1)文本答案挖除

将几页问卷复制txt文本文件中,为了把这些正确答案挖除,直接使用正则表式的替换

在这里插入图片描述

2. 排版处理

(1)模板在本地miktex中的编译

为了实现这一步,主要注意三点.

  1. 安装miktex选择为所有用户安装
    (确保软件能够启动,更新,旧版本有一些要命的bug)
  2. 使用xelatex编译
    (为了能正常编译一些宏包)
  3. 使用ctex宏包中的ctexart文档类
    (未了正确显示中文,确保已安装ctex宏包,安装可参考缺少lastpage宏包处理办法)

在这里插入图片描述

(2)模板的源代码分析

3.文本与latex的交互

把每一个题目看做是一个基本单元,对这个基本单元进行函数封装
然后调用100次函数就可以实现整篇文稿的写作。

三、遇到的bug🤣

1. LaTeX出现问题

LaTeX选择题模板复制到TeXworks过程中,出现了如下报错。
在这里插入图片描述
重现安装,记得选择为所有用户

通配符使用问题

在这里插入图片描述
通过参考这篇博客的方法如下:
在这里插入图片描述

我完美的解决了这个问题

环境问题

在这里插入图片描述

[已解决] LaTeX中的enumerate环境出现overfull box的情况

四、奇技淫巧❎

##(一)复制到WPS处理(word也是一样的,支持正版国产)
在这里插入图片描述

##(二)使用word的替换序列
使用通配符替换
1.题号替换(先两位数替换,再替换一位数:至于为什么不一次性替换完,应为我不会😅)

先看通配符的内容:^#表示任意数字,不要忘记后面的“、”,不然可能会匹配到题干中的数字

^#^#、

我想把序列直接换成latex中的item命令,因为\item命令可以自动生成有序列,下面是latex的源码,对照着来看,很容易理解,替换的目标
在这里插入图片描述
但是悲伤的是直接替换会报错的,

在这里插入图片描述

所以我改进了一下
在这里插入图片描述

下面是我第五次替换了,} 必须要有因为如果导入latex中,D选后面你会发现没办替换口号了,难道要手动一个个添加吗,后来我发现可以换序号,只要手动删掉第一个,给最后一个添加有括号就行了。^p换行符号,不加也可以,或者跟着自己需求多加几个。是为了让我的latex源码更加易读。(latex的源码里面,分段等于换行,应为编译器要吃掉一个空行才知道一行完结)^092的原因不说了,~是用来当空格使用的,在latex中,不然\item与后面的中文之间没有间隔,会出现无法识别命令的情况

^#^#、
}^p^092item~

##(三)题干答案挖空
直接使用

(  )

进行选择括号
替换成请添加图片描述

~^092underline{~~~~~~~~}

##(四)A选项替换为命令
这个命令决定了选择题我是排成一行,还是两行,还是四行。
由于选项大部分较短,处于减少手动修改的目的,选择单行命令,
在这里插入图片描述

当让修改完不要编译,肯定不过的,应为有一些个选项只有ABC没有D, 我参考写的单行函数比较菜,做不到自适应三个选项的。

^#^#、
}^p^092item~

##(五)B,CD选型替换成对应的括号}{
^$表示任意的字母

这个就是最令人尴尬的事情了

在这里插入图片描述

其他参考文献😎

  1. Plot NetworkX Graph with numpy array error

  2. AttributeError: module ‘scipy.sparse’ has no attribute ‘coo_array’

  3. attributeError:模块’scipy.sparse’没有属性’coo_array’

  4. 使用networkx画图时,报错:AttributeError: module ‘scipy.sparse’ has no attribute ‘coo_array’

补充的两步走😎

最小可以运行的方案


\documentclass{ctexart}%
\usepackage{lineno,hyperref}
\usepackage{colortbl}
\usepackage{amsmath,amssymb,amsfonts}
\usepackage{algorithmic}
\usepackage{graphicx}
\usepackage{float}

\usepackage[T1]{fontenc}%
\usepackage[utf8]{inputenc}%
\usepackage{lmodern}%
\usepackage{textcomp}%

\usepackage{ctex}
\usepackage{enumerate}
\usepackage{geometry}
\geometry{a4paper,left=2cm,right=2cm,top=2cm,bottom=2cm}



\newcommand{\twolines}[4]{\\\begin{tabular}{*{2}{@{}p{8cm}}}(A)~#1 & (B)~#2\end{tabular}\\
					\begin{tabular}{*{2}{@{}p{8cm}}}(C)~#3 &(D)~#4\end{tabular}}  %两行四个

\newcommand{\twolinesT}[3]{\\\begin{tabular}{*{2}{@{}p{8cm}}}(A)~#1 & (B)~#2\end{tabular}\\
					\begin{tabular}{*{2}{@{}p{8cm}}}(C)~#3\end{tabular}}  %两行四个

\newcommand{\fourlines}[4]{\\(A)~#1 \\ (B)~#2 \\ (C)~#3 \\ (D)~#4}  % 


\newcommand{\fourlinesT}[3]{\\(A)~#1 \\ (B)~#2 \\ (C)~#3}  % 3行每行1个

%===========================================
\begin{document}

\par

\section{单项选择题(90)}
	
\begin{enumerate}


\item  食品生产经营者在采购食品原料时,除需要查验供货者的许可证外,还应查验~\underline{~~~~~~~~}
\twolines{产品合格证明文件 }{健康证明}{培训证明 }{法人授权委托书}



\end{enumerate}

\section{多项选择题(10)}

\begin{enumerate}



\item~进口的食品添加剂应当有~\underline{~~~~~~~~}\twolines{出口国标识}{中文标签}{中文说明书}{英文说明}

\item~在食品安全事故调查中,任何单位或者个人不得对食品安全事故~\underline{~~~~~~~~},不得毁灭有关证据。
\twolines{隐瞒}{谎报}{向媒体报道}{缓报}

\end{enumerate}


\end{document}

第二部:使用替换功能
这样直接挖空也是可以的

在这里插入图片描述
我的括号是全角的,但是部分大小写,个数无所谓
……092underline{~~~~~~~}
(*)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值