本文最后更新于 2026年10月2日 上午
写在前面
今天久违的更新一次博客,想把这一段时间用 LATEX 制作数学试卷的经验分享出来
安装
TexLive
Windows版推荐使用TexLive,下载地址:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/texlive.iso
对于Linux,可以使用包管理器直接下载TexLive,这里以Arch为例:
该texlive是一个软件包组,会下载TexLive中的内容。
exam-zh
对于卷子本体,我选择了exam-zh这个宏包来方便排版。项目地址:https://github.com/xkwxdyy/exam-zh
如果你使用的是上面的TexLive发行版,可以直接在终端中使用它自带的tlmgr这个宏包管理器安装exam-zh这个宏:
在Windows下,可以按下组合键Win+X,在弹出的选择框内选择“终端(管理员)”或“Windows Powershell(管理员)”,之后在出现的窗口中输入以下内容:
1 2 3
| tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/ tlmgr update --self tlmgr install exam-zh
|
Linux使用的命令同上,但可能需要以root权限运行以上命令
更多关于exam-zh的内容可以参考官方仓库
配置
对于 LATEX 文本编辑器,我选择了 Visual Studio Code
在VSCode中安装LaTeX Workshow,LaTex等插件,更详细的教程可以参考这个,在这里就不过多叙述了
值得注意的是这个exam-zh强制要求使用 XeLaTeX 作为编译器,然而上面的插件默认使用pdflatex构建,于是我们需要按下Ctrl+Shift+P,然后搜索Preferences: Open User Settings来打开VSCode的设置页面
之后在设置页面内搜索recipe,将搜索结果中的Latex-workshop › Latex › Recipe: Default下的内容从first改为latexmk (xelatex)
这样你就可以享受到每次保存/切换窗口的时候自动构建了,构建出的内容应当是和.tex文件同目录,同名称的.pdf文件
试卷
文字内容
拼好题
如果你想要干的是拼好题的话,试卷中的文字内容,我十分建议使用带有识图功能的DeepSeek,豆包等AI直接通过卷子图片转成LaTeX文字内容
就让AI直接按下面的格式生成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| \documentclass[fontset=fandol]{exam-zh} \usepackage{unicode-math,microtype,esvect,xeCJK} \examsetup{ question/show-answer = false, fillin/no-answer-type = none, title/title-format=\bfseries \LARGE, }
\hfuzz=5pt
\begin{document}
\title{训练} \maketitle
\section{选择题} \begin{question} 已知空间向量 $\symbfit{a}=(\sqrt{3},0,1),\symbfit{b}=\left(\dfrac14,0,\dfrac{\sqrt{3}}4\right)$,则 $\symbfit{a}$ 在 $\symbfit{b}$ 上的投影向量的模为 \begin{choices} \item $\sqrt{3}$ \item $1$ \item $2$ \item $\dfrac12$ \end{choices} \end{question}
\section{多选题} \begin{question} 已知直线 $l:2x-y+4=0$,则下列说法正确的是 \begin{choices} \item $l$ 在 $x$ 轴上的截距为 $2$ \item $l$ 与直线 $x+2y+4=0$ 垂直 \item $l$ 与直线 $2x-y-1=0$ 之间的距离为 $\sqrt{5}$ \item $l$ 与圆 $x^2+y^2=4$ 相离 \end{choices} \end{question}
\section{填空题} \begin{question} 已知两直线 $3x+y-3=0$ 与 $3x+y-1=0$ 之间的距离为 \fillin. \end{question}
\section{解答题} \begin{problem}[points = 15] 求满足下列条件的直线方程: \begin{enumerate} \item 过点 $(1,2)$,且与直线 $3x-2y+3=0$ 平行的直线方程; \item 过点 $(-1,2)$,且与直线 $3x-y+2=0$ 垂直的直线方程; \item 过点 $(1,-2)$,且在两坐标轴上截距相等的直线方程. \end{enumerate} \vspace{3cm} \end{problem} \end{document}
|
这样生成出来的试卷还是比较赏心悦目的,只有题,没有其他很复杂的内容
如果更想要带主标题,科目,注意事项等的高考试卷对应的样式的卷子的话可以看这个模板
图片内容
对于立体几何,找到一个趁手的工具还是很困难的,你总不能说你爱对着TikZ搓吧(
那么我们就可以使用InkScape这个矢量画图工具
首先我们可以把照片中的几何图形(或者你在geogebra中绘制好的,调好透视的3d图形)复制到画布中
接着创建新图层,将原来的图片锁定,在新图层中把线,点,标签什么的都描一遍
这个工具的吸附功能还是比较好用的,可以在右上角开启
具体怎么用,我可能会出一期视频,或者你也可以找找其他的教程
画完之后隐藏原来只含有源图片的图层,然后Ctrl+A全选,Ctrl+Shift+D打开画布控制菜单,最后点击缩放内容到画布右边的按钮就可以限制尺寸了
我推荐内容保存成默认的InkScape SVG便于之后的更改,但是想要插入 LATEX 文档里面的话这个格式肯定是不方便的,于是我们就要在左上角的文件>保存副本中手动保存成.pdf格式,这样更方便使用
图文混编
那接下来要做的就是把图片和文字混编起来了,常见的有下面几种形式
图文并列
wrapstuff
wrapstuff是嵌入到exam-zh内的功能,混编之后就像这样:

源代码:
1 2 3 4 5 6 7 8 9 10 11 12
| \begin{question} \begin{wrapstuff}[r] \includegraphics[width=0.35\linewidth]{img/p10-1.pdf} \end{wrapstuff} 如图,平行六面体 $ABCD-A_1B_1C_1D_1$ 的所有棱长均为 $1$,且 $\angle BAD=60^\circ,\angle A_1AB=120^\circ,\angle A_1AD=90^\circ$,记 $\vv{AB}=\symbfit{a},\vv{AD}=\symbfit{b},\vv{AA_1}=\symbfit{c}$,则下列说法正确的是 \begin{choices} \item $\vv{BD_1}=\symbfit{b}+\symbfit{c}-\symbfit{a}$ \item $|\vv{BD_1}|=\sqrt{3}$ \item $\vv{AC_1}\perp \vv{A_1D}$ \item 直线 $BD_1$ 与 $A_1D$ 所成角的余弦值为 $\dfrac{\sqrt{6}}6$ \end{choices} \end{question}
|
其中的width=0.35\linewidth的意思是占这一行的35%,嫌大嫌小都可以调
但是这个方法有较大的局限性,比如在大题里用很可能会让排版爆掉,于是就有了下面这个灵活性更高的方法
minipage
minipage是 LATEX 中自带的宏,效果如下:

源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| \begin{problem}[points = 13] 如图,在平行六面体 $ABCD-A_1B_1C_1D_1$ 中,$M$ 为 $AC$ 与 $BD$ 的交点,$N$ 为 $BB_1$ 的靠近 $B$ 的三等分点,若 $\vv{A_1B_1}=\symbfit{a},\vv{A_1D_1}=\symbfit{b},\vv{A_1A}=\symbfit{c}$. \par\noindent \begin{minipage}[t]{0.7\linewidth} \begin{enumerate} \item 用 $\symbfit{a},\symbfit{b},\symbfit{c}$ 表示 $\vv{A_1C},\vv{NM}$ 向量; \item 若 $\angle B_1A_1D_1=\angle B_1A_1A=\angle D_1A_1A=\dfrac{\pi}{3}$,$|\vv{A_1B_1}|=|\vv{A_1D_1}|=|\vv{A_1A}|=2$,计算 $\vv{A_1C}\cdot\vv{NM}$. \end{enumerate} \vspace{3cm} \end{minipage} \hfill \begin{minipage}[t]{0.3\linewidth} \vspace{0pt} \includegraphics[width=\linewidth]{img/p15-1.pdf} \end{minipage} \end{problem}
|
这个[t]代表顶部对齐,写上可以让小题与题干之间的距离看起来更赏心悦目
然而下面的这个\vspace{0pt}如果去掉就会让整个排版很诡异的崩溃
上面的\vspace{3cm}可以自己改动。如果这个题比较难写,需要留空比较多的话可以把数字写大一点
这里的\includegraphics[width=\linewidth]指的就是minipage中的宽度了,如果想调文字和图片的占比的话就要调整\begin{minipage}后面的数字了。注意相加需要不大于1(多了会超出边距),可以小于1(适用于想让文字与图片空隙大一点的情况)
图文分排
center & flushright/left
center,flushright,flushleft同样是 LATEX 自带的宏,我们以center为例,效果如下:

源代码:
1 2 3 4 5 6 7 8 9 10 11 12
| \begin{question} 如图,在棱长为 $1$ 的正方体 $ABCD-A_1B_1C_1D_1$ 中,$E,F$ 分别是 $AB,AD$ 的中点,$M$ 为线段 $C_1D_1$ 上的动点,则下列说法正确的是 \begin{center} \includegraphics[width=0.3\linewidth]{img/p11-1.pdf} \end{center} \begin{choices} \item 三棱锥 $M-A_1EF$ 的体积为定值 \item 不存在点 $M$,使得 $EF\perp ME$ \item 平面 $MEF$ 与平面 $ABCD$ 所成角的正切值的最大值为 $2\sqrt{2}$ \item $\vv{D_1M}=\dfrac12\vv{D_1C_1}$ 时,平面 $MEF$ 截该正方体的外接球所得截面的面积为 $3\pi$ \end{choices} \end{question}
|
其中的\begin{center}可以换成\begin{flushright},\begin{flushleft}等,效果为靠右或者靠左
textfigure
textfigure是exam-zh内置的一个宏,效果和flushright有点像,只不过好像会引入额外的间隔,效果如下:

源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| \begin{question} \textfigure{ 如图,一个结晶体的形状为平行六面体$ABCD-A_1B_1C_1D_1$,其中,以顶点$A$为端点的三条棱长都相等,且它们彼此的夹角都是$60^\circ$,下列说法中正确的是 }{ \includegraphics[width=0.3\linewidth]{img/image10.png} } \begin{choices} \item $(\vv{AA_1}+\vv{AB}+\vv{AD})^2=2\vv{AC}^2$ \item $\vv{AC_1}\cdot(\vv{AB}−\vv{AD})=0$ \item 向量$\vv{B_1C}$与$\vv{AA_1}$的夹角是$60^\circ$ \item $\vv{BD_1}$与$\vv{AC}$所成角的余弦值为$\dfrac{\sqrt{6}}{3}$ \end{choices} \end{question}
|
AI说这个在大题中可能会有问题,需要注意一下,尽量还是用minipage或者flushright比较好吧(其实我也不清楚QwQ)
多图并排
multifigures是exam-zh内置的一个宏,可以实现多个图片的横向/纵向并排,效果如下:

源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| \begin{problem}[points = 17] 如图①所示,在$Rt\triangle{ABC}$中,$\angle{C}=90°,BC=3,AC=6$,$D,E$分别是$AC,AB$上的点, 且$DE\parallel{BC},DE=2$,将$\triangle{ADE}$沿$DE$折起到$\triangle{A_1DE}$的位置,使$A_1C\perp{CD}$,如图②所示. \begin{enumerate} \item 求证:$A_1C\perp$平面$BCDE$; \item 若$M$是$A_1D$的中点,求直线$CM$与平面$A_1BE$所成角的大小; \item 线段$BC$上是否存在点$P$,使平面$A_1DP$与平面$A_1BE$垂直?并说明理由. \end{enumerate} \begin{multifigures}[columns=1, xshift=0.75\linewidth] \item[图①] \includegraphics[width=0.4\linewidth]{img/image19-1.png} \item[图②] \includegraphics[width=0.4\linewidth]{img/image19-2.png} \end{multifigures} \end{problem}
|
这里面的xshift=0.75\linewidth指的是图片向右偏移到0.75列宽的位置,比较适合大题
其中把columns=1改成其他的数值,比如columns=2就可以有横向编排的效果,比如:

源代码:
1 2 3 4 5 6 7 8 9 10 11 12
| \begin{question} 如图,在空间四边形$ABCD$中,$AC$和$BD$为对角线,$G$为$\triangle{ABC}$的重心,$E$是$BD$上一点,$BE=3ED$,以$\{\vv{AB},\vv{AC},\vv{AD}\}$为基底,则$\vv{GE}=$ \fillin \end{question}
\begin{question} 如图,在直三棱柱$ABC-A_1B_1C_1$中,$\angle{ABC}=90^\circ$,$AB=BC=AA_1=2$,点$D$是$AC$的中点,则异面直线$A_1D$和$B_1C$所成角的大小为 \fillin \end{question}
\begin{multifigures}[columns = 2, column-gap=2cm] \item[13题图] \includegraphics[width=0.4\linewidth]{img/image13.png} \item[14题图] \includegraphics[width=0.4\linewidth]{img/image14.png} \end{multifigures}
|
其中的column-gap=2cm指的是两张图片之间的间距,可以变大也可以变小
横向的比较适用于填空题,选择题的多张图片挤在一起
导出
做完这这一切就可以导出了。其实在每次按下保存的时候,VSCode中的插件就会自动为我们编译好,不过为了防止未定义行为(究竟在未定义些什么。。。),我们可以手动编译一下:
其中的paper.tex为你的tex文件的文件名,还是尽量不要用中文比较好,可能会引发其他很难定位的问题
如果想要A3大小的横排,就在我刚开始给出的模板中取消page/size = a3paper那一行前面的%符号(这个符号代表 LATEX 中的注释)
享受你的试卷吧
结语
这篇文章是我在做了这几次粘贴来的试卷的数字化(迫真)后总结出来的,可能会有照顾不到的地方,也可能有一些更好的但是我不知道的解决方法,恳请看到这个文章的各位大佬发现问题后点明,谢谢大家!