鑑於有時候因著選項數的不同, 我們會想要用不同的排版 (例如說只有 4 個選項時, 不想讓他們分成第一行 3 個, 第二行 1 個選項), 所以我們可以在文章中手動修改。
但是我還想不到讓 LaTeX 自動因著選項而調整的方法, 所以先這樣解。
方法是在 preamble 時先設定一個 \if \else \fi 的判斷式, 程式碼如下:
\newif\ifchoices
......
\NewEnviron{choices}
{\setcounter{choices}{0}%
\let\choice\choicetemp
\settowidth{\choiceslen}{\vbox{\halign{##\hfil\cr\BODY\crcr}}}
\ifchoices
\ifdim\choiceslen>.5\linewidth
\setlength{\choiceslen}{\linewidth}%一行一選項
\else
\ifdim\choiceslen>.25\linewidth
\setlength{\choiceslen}{.5\linewidth}%一行三選項
\else
\setlength{\choiceslen}{.25\linewidth}%一行五選項
\fi
\fi
\else
\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
\fi
\let\choice\choicefinal
\setcounter{choices}{0}%
\begin{flushleft}
\bgroup\BODY\hfill\egroup
\end{flushleft}}
首先用 \newif 設定一個新的判斷式 \ifchoices, 然後在「段落 A2」的指令中設定選項長度及換行的部份修改程式碼如上, 那麼只要在文稿中加入 \choicesture, 之後的選項就會改成一行只有 1, 2, 4 選項, 加上 \choicesfalse, 之後的選項就是一行中可以有 1, 2, 3, 4, 5 個。
如果在文稿中完全不加入此指令, 則預設值為 5 個選項的情形。
沒有留言:
張貼留言