鑑於有時候因著選項數的不同, 我們會想要用不同的排版 (例如說只有 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 個選項的情形。
沒有留言:
張貼留言