文章链接:
折腾新东西,学习用LaTeX3,重写了选择题选项拍版功能
老的代码用ifthen是从人教社论坛上抄来的,在学习新东西的过程中,通过实例来加深理解
代码如下
%!TEX program = xelatex
%!TEX endoding = UTF-8 (utf8)
\documentclass{article}
\usepackage{expl3}
\usepackage{ctex}
\ExplSyntaxOn
\cs_new_protected:Npn \__zljxx: #1#2#3#4{
\par\hspace{2em}
%把四个选项加上ABCD标签放进四个选项盒子
\box_clear_new:N \l__choiceA_box
\box_clear_new:N \l__choiceB_box
\box_clear_new:N \l__choiceC_box
\box_clear_new:N \l__choiceD_box
\hbox_set:Nn \l__choiceA_box {A.#1\;\;}
\hbox_set:Nn \l__choiceB_box {B.#2\;\;}
\hbox_set:Nn \l__choiceC_box {C.#3\;\;}
\hbox_set:Nn \l__choiceD_box {D.#4\;\;}
%计算四个选项中最长的那个
\dim_zero_new:N \l__max_choice_length_d
\dim_zero_new:N \l__max_length_AB_d
\dim_zero_new:N \l__max_length_CD_d
\dim_set:Nn \l__max_length_AB_d {\dim_max:nn {\box_wd:N \l__choiceA_box} {\box_wd:N \l__choiceB_box}}
\dim_set:Nn \l__max_length_CD_d {\dim_max:nn {\box_wd:N \l__choiceC_box} {\box_wd:N \l__choiceD_box}}
\dim_set:Nn \l__max_choice_length_d {\dim_max:nn {\dim_use:N \l__max_length_AB_d}{\dim_use:N \l__max_length_CD_d}}
%比较最长选项与四分之一行长度(一行四个),半行长度(一行两个),一行一个
\dim_compare:nNnTF {\dim_use:N \l__max_choice_length_d} < {.25\linewidth}
{%一行四个
\box_set_wd:Nn \l__choiceA_box {.25\linewidth}
\box_set_wd:Nn \l__choiceB_box {.25\linewidth}
\box_set_wd:Nn \l__choiceC_box {.25\linewidth}
\box_set_wd:Nn \l__choiceD_box {.25\linewidth}
\box_use:N \l__choiceA_box
\box_use:N \l__choiceB_box
\box_use:N \l__choiceC_box
\box_use:N \l__choiceD_box
}
{
\dim_compare:nNnTF {\dim_use:N \l__max_choice_length_d} < {.5\linewidth}
{%一行两个
\box_set_wd:Nn \l__choiceA_box {.5\linewidth}
\box_set_wd:Nn \l__choiceB_box {.5\linewidth}
\box_set_wd:Nn \l__choiceC_box {.5\linewidth}
\box_set_wd:Nn \l__choiceD_box {.5\linewidth}
\box_use:N \l__choiceA_box
\box_use:N \l__choiceB_box
\par\hspace{2em}
\box_use:N \l__choiceC_box
\box_use:N \l__choiceD_box
}
{%一行一个
\box_set_wd:Nn \l__choiceA_box {.5\linewidth}
\box_set_wd:Nn \l__choiceB_box {.5\linewidth}
\box_set_wd:Nn \l__choiceC_box {.5\linewidth}
\box_set_wd:Nn \l__choiceD_box {.5\linewidth}
\box_use:N \l__choiceA_box
\par\hspace{2em}
\box_use:N \l__choiceB_box
\par\hspace{2em}
\box_use:N \l__choiceC_box
\par\hspace{2em}
\box_use:N \l__choiceD_box
}
}
}
\cs_set_eq:NN \xx \__zljxx:
\ExplSyntaxOff
\begin{document}
\noindent
题目1:巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉
\xx{选项1}{选项2}{选项3}{选项4}
题目2:巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉
\xx{长长长长的选项}{选项}{长长长长的选项}{长长长长的选项}
题目3:巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉
\xx{特别特别特别特别特别特别长长长长的选项}{选项}{长长长长的选项}{选}
\end{document}
输出效果如下
功能没有新增,还是旧的功能,即自行判断一行写4个2个或者1个选项
另外,学习新东西还有一个好处,体会学习的过程,换位思考就能理解那些对于老师来说简单但是对于学生来说难的题目,同时理解学习的过程,就个人来说,最重要的是简单的实例练习,通过自主练习,能更好的理解所学内容,这也说明了数学学习过程中,做题的重要性