话说昨天网友问我选择题选项怎么排版,我就给了《撸题集》里的相关代码。
那段代码依赖两个宏包:calc、ifthen,后来想到,既然作为“零件”使用,代码应尽量不依赖宏包才好,于是决定改写一下。
然而改写完在测试的时候,却发现原先的设计其实存在 bug,只不过一般碰不到,所以在撸题集用这么久都没发现。
请看以下示例:- \documentclass{article}
- \usepackage{calc,ifthen}
- \newlength\lxxa
- \newlength\lxxb
- \newlength\lxxc
- \newlength\lxxd
- \newlength\lxxmax
- \newlength\lhalf
- \newlength\lhalfhalf
- \newcommand\xx[4]{%
- \settowidth\lxxa{A. #1}%
- \settowidth\lxxb{B. #2}%
- \settowidth\lxxc{C. #3}%
- \settowidth\lxxd{D. #4}%
- \ifthenelse{
- \lengthtest{\lxxa > \lxxb}
- }{%
- \setlength\lxxmax\lxxa
- }{%
- \setlength\lxxmax\lxxb
- }%
- \ifthenelse{
- \lengthtest{\lxxmax < \lxxc}
- }{%
- \setlength\lxxmax\lxxc
- }{}%
- \ifthenelse{
- \lengthtest{\lxxmax < \lxxd}
- }{%
- \setlength\lxxmax\lxxd
- }{}%
- \addtolength\lxxmax{1.5em}%
- \setlength\lhalf{(\linewidth-\parindent)/2}%
- \setlength\lhalfhalf{\lhalf/2}%
- \ifthenelse{
- \lengthtest{\lxxmax > \lhalf}
- }{%
- A. #1 \par B. #2 \par C. #3 \par D. #4%
- }{%
- \ifthenelse{
- \lengthtest{\lxxmax > \lhalfhalf}
- }{%
- \begin{minipage}{\lhalf}
- A. #1
- \end{minipage}%
- \begin{minipage}{\lhalf}
- B. #2
- \end{minipage}\par
- \begin{minipage}{\lhalf}
- C. #3
- \end{minipage}%
- \begin{minipage}{\lhalf}
- D. #4
- \end{minipage}%
- }{%
- \begin{minipage}{\lhalfhalf}
- A. #1
- \end{minipage}%
- \begin{minipage}{\lhalfhalf}
- B. #2
- \end{minipage}%
- \begin{minipage}{\lhalfhalf}
- C. #3
- \end{minipage}%
- \begin{minipage}{\lhalfhalf}
- D. #4
- \end{minipage}%
- }%
- }}
- \begin{document}
- \rule{0.3\linewidth}{1ex}
- \xx{\rule{0.3\linewidth}{1ex}}234
- \end{document}
复制代码 结果:
考考大家,为什么同样的 rule 在选项里却变短了呢?
幸好修正它也不难,顺便地,我决定将“四图选项”命令 \fourtuxx 也改写下(原先的只能一行)。代码仍在测试中,效果:
|