......
\usepackage{environ}
\newlength{\choiceslen}
% 段落A1 %
\newif\ifshowcorrect
\newcounter{choices}
\newcommand{\choicefinal}[1]{%
\ifnum\value{choices}>0 \hfill\fi\egroup
\hspace{0pt}%
\hbox to\choiceslen
\bgroup
\stepcounter{choices}%
\ifcase#1\relax
(\Alph{choices})%
\else
\ifshowcorrect
\expandafter\underline
\fi
{(\Alph{choices})}%
\fi\space}
\newcommand{\choicetemp}[1]{\stepcounter{choices}\space(\Alph{choices})\cr}
% 段落A1 %
% 段落A2 %
\NewEnviron{choices}
{\setcounter{choices}{0}%
\let\choice\choicetemp
\settowidth{\choiceslen}{\vbox{\halign{##\hfil\cr\BODY\crcr}}}
\ifdim\choiceslen>.5\linewidth
\setlength{\choiceslen}{\linewidth}%一行一選項
\else
\ifdim\choiceslen>.333\linewidth
\setlength{\choiceslen}{.5\linewidth}%一行兩選項
\else
\ifdim\choiceslen>.25\linewidth
\setlength{\choiceslen}{.333\linewidth}%一行三選項
\else
\ifdim\choiceslen>.2\linewidth
\setlength{\choiceslen}{.25\linewidth}%一行四選項
\else
\setlength{\choiceslen}{.2\linewidth}%一行五選項
\fi\fi\fi\fi
\let\choice\choicefinal
\setcounter{choices}{0}%
\begin{flushleft}
\bgroup\BODY\hfill\egroup
\end{flushleft}}
% 段落A2 %
\newcommand\longch{\parbox[t]{0.92\linewidth}}%長選項自動換行
......
\begin{enumerate}
\item 選擇題
\begin{enumerate}[(\hspace{1cm}) 1.]
\item 這裡是選擇題第一題
\begin{choices}
\choice1 短選項
\choice0 短選項
\choice0 短選項
\choice0 短選項
\choice0 短選項
\end{choices}
\item 這裡是選擇題第二題
\begin{choices}
\choice0 長一點的選項
\choice0 長一點的選項
\choice0 長一點的選項
\choice0 長一點的選項
\choice0 長一點的選項
\end{choices}
\item 這裡是選擇題第三題
\begin{choices}
\choice0 再更長一點的選項
\choice0 再更長一點的選項
\choice0 再更長一點的選項
\choice0 再更長一點的選項
\choice0 再更長一點的選項
\end{choices}
\item 這裡是選擇題第四題
\begin{choices}
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\end{choices}
\item 這裡是選擇題第五題
\begin{choices}
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 \longch{這是一個長到不能再長的選項這是一個長到不能再長的選項這是一個長到不能再長的選項這是一個長到不能再長的選項這是一個長到不能再長的選項這是一個長到不能再長的選項}
\end{choices}
\end{enumerate}
\end{enumerate}
\end{document}
「段落A1」是用來設定正確答案的, 一般來說用不到, 但是必須要放著, 而程式碼的細節我也無法看懂。
「段落A2」是用來設定(自動計算)每行要放多少個選項, 我的程式碼中每行並列 1~5 個選項都有, 優點是最省空間, 缺點則是會比較不整齊。若要整齊的話, 建議調整成每行只有 1、2、4 個選項, 如下
\NewEnviron{choices}
{\setcounter{choices}{0}%
\let\choice\choicetemp
\settowidth{\choiceslen}{\vbox{\halign{##\hfil\cr\BODY\crcr}}}
\ifdim\choiceslen>.5\textwidth
\setlength{\choiceslen}{\textwidth}%
\else
\ifdim\choiceslen>.25\textwidth
\setlength{\choiceslen}{.5\textwidth}%
\else
\setlength{\choiceslen}{.25\textwidth}%
\fi
\fi
\let\choice\choicefinal
\setcounter{choices}{0}%
\begin{flushleft}
\bgroup\BODY\hfill\egroup
\end{flushleft}}
比對一下程式碼, 就可以看出運算的邏輯, 可以自行設定要的長度。\newcommand\longch{\parbox[t]{0.92\linewidth}}%長選項自動換行, 因為這段程式碼無法自動換行, 所以遇到長選項要用這個指令來換行。這裡是定義 \longch 為 \parbox, [t]是對齊上方, {0.92\linewidth} 是設定 \parbox 的長度。使用上只要輸入 \longch{} 即可。
正文區使用 choices 環境, 每項則用 \choice0 分列, 若是用 \choice1, 則上表示這是正確答案, 這部份我們暫不說明。
article_用latex做數學考卷3.tex
article_用latex做數學考卷3.pdf
沒有留言:
張貼留言