使用Latex排版选择题试卷
食用指南:使用python 語言實現了latex純文本自動化編排
一、需求描述😗
工作原因,需要制作一張含有100多道選擇題試卷。
為了排版美觀,我找了份LaTeX選擇題模板,
手動輸入每一道過于麻煩,便找到了對應的自動化模塊
最讓人尷尬的事情發生了,我發現編輯器自帶替換的功能,
而且支持正則表達式
二、解決方案?
1. 內容處理
(1)文本答案挖除
將幾頁問卷復制txt文本文件中,為了把這些正確答案挖除,直接使用正則表式的替換
2. 排版處理
(1)模板在本地miktex中的編譯
為了實現這一步,主要注意三點.
(確保軟件能夠啟動,更新,舊版本有一些要命的bug)
(為了能正常編譯一些宏包)
(未了正確顯示中文,確保已安裝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~##(三)題干答案挖空
直接使用
進行選擇括號
替換成
##(四)A選項替換為命令
這個命令決定了選擇題我是排成一行,還是兩行,還是四行。
由于選項大部分較短,處于減少手動修改的目的,選擇單行命令,
在這里插入圖片描述
當讓修改完不要編譯,肯定不過的,應為有一些個選項只有ABC沒有D, 我參考寫的單行函數比較菜,做不到自適應三個選項的。
^#^#、 }^p^092item~##(五)B,CD選型替換成對應的括號}{
^$表示任意的字母
這個就是最令人尷尬的事情了
其他參考文獻😎
Plot NetworkX Graph with numpy array error
AttributeError: module ‘scipy.sparse’ has no attribute ‘coo_array’
attributeError:模塊’scipy.sparse’沒有屬性’coo_array’
使用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{~~~~~~~}
(*)
總結
以上是生活随笔為你收集整理的使用Latex排版选择题试卷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [229]python3的request
- 下一篇: FUTURES模型 | 4. Deman