7

I am maxing an exam using LaTeX and use this command for making multiple-choice options:

\newcommand{\mc}[5]{(\textbf{A}) #1 \qquad \qquad (\textbf{B}) #2 \qquad \qquad (\textbf{C}) #3 \qquad \qquad (\textbf{D}) #4 \qquad \qquad (\textbf{E}) #5}

However, for small answer choices (like 1 or 2) or for long ones (like names, etc.), the answer choices don't fit all the way across the screen, since I have the space between each option hard-coded in with \qquad.

Is there a way to automatically make the options space themselves out correctly so that they fit exactly across the page?

Thanks in advance.

11

Here is an alternative using the tasks package:

enter image description here

\documentclass{article}
\usepackage{tasks}
\setlength{\parindent}{0pt}

\begin{document}

\textbf{Question}: Here is the question text. Answers are arranged in 4 columns.
\begin{tasks}(4)
\task first answer
\task second answer
\task third answer
\task fourth answer
\end{tasks}

\bigskip

\textbf{Question}: Here is the question text. Answers are arranged in 2 columns.
\begin{tasks}(2)
\task first answer
\task second answer
\task third answer
\task fourth answer
\end{tasks}

\bigskip

\textbf{Question}: Here is the question text. Answers are arranged in 2 columns and are longer than a single line.
\begin{tasks}(2)
\task first answer first answer first answer first answer
\task second answer second answer second answer
\task third answer 
\task fourth answer
\end{tasks}

\end{document}

If you want your answer to spread across the whole textwidth, you could use tabularx as follows: (The red vertical lines indicate the width of the textblock). Please note that with this method, the spaces between the first and second , as well as between the second last and the last column will be bigger than the spaces between the other columns. (See also this comment)

enter image description here

\documentclass{article}
\usepackage{tabularx}
\setlength{\parindent}{0pt}
\begin{document}

\textbf{Question}: Here is the question text. Answers are arranged in 4 columns and take up the entire textwidth.

\begin{tabularx}{\textwidth}{@{}X>{\centering\arraybackslash}X>{\centering\arraybackslash}X>{\raggedleft\arraybackslash}X@{}}
 \textbf{A} first answer &
 \textbf{B} second answer &
 \textbf{C} third answer &
 \textbf{D} fourth answer
\end{tabularx}

\end{document}

Using tabular* in combination with \extracolsep{\fill} one can achieve the following output.Here, the horizontal white spaces between adjacent columns will be equal. If your answers are too long and need a linebreak, you might want to switch to p type columns instead. Please also note, that with this method, the width each answer takes up is different.

enter image description here

\documentclass{article}
\setlength{\parindent}{0pt}
\begin{document}

\textbf{Question}: Here is the question text. Answers are arranged in 4 columns and take up the entire textwidth.

\setlength{\tabcolsep}{0pt}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}ccccc}
 \textbf{A} 1 &
 \textbf{B} 2 &
 \textbf{C} 3 &
 \textbf{D} 4 &
 \textbf{E} 5
\end{tabular*}

\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}ccccc}
 \textbf{A} 1 &
 \textbf{B} 2 &
 \textbf{C} 3 &
 \textbf{D} 4 &
 \textbf{E} longer text
\end{tabular*}

\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}ccccc}
 \textbf{A} 1 &
 \textbf{B} long text &
 \textbf{C} 3 &
 \textbf{D} 4 &
 \textbf{E} longer text
\end{tabular*}

\end{document}
  • tabularx is a nice solution! – Black Mild Aug 18 at 10:10
  • Is there a way to make the tabularx look neatly-spaced? For example, when I use it for small answer options, I get something like this: (imgur.com/o6FTxEt). – flame Aug 19 at 2:31
  • 1
    @flame: I have updated my answer with an alternative solution using tabular*. Maybe you are more satisfied with this output. – leandriis Aug 19 at 17:52
  • 1
    The tabular* solution is exactly what I wanted, and it looks great! Thanks! – flame Aug 19 at 20:57
4

I am pretty sure that there are several ways. I propose TikZ way due to its flexibility. We can write a new command for this.

enter image description here

\documentclass{article}
\usepackage{tikz}
\begin{document}
\centerline{\LARGE\bfseries\textcolor{blue}{TIKZ for multiple choices}} 
\vspace*{1cm}

\noindent{\bfseries Question 1.} This question has $2$ choices.

\noindent\begin{tikzpicture}
\pgfmathsetmacro{\a}{\textwidth}
\path[font=\bfseries,blue] 
(0,0)         node{A. $x=1$}
++(0:\a/2 pt) node{B. $x=6$};
\end{tikzpicture}

\noindent{\bfseries Question 2.} This question has $3$ choices.

\noindent\begin{tikzpicture}
\pgfmathsetmacro{\a}{\textwidth}
\path[n/.style={font=\bfseries,circle,draw=blue,fill=gray!30},inner sep=1pt] 
(0,0)         node[n]{A}  +(0:1) node{$m=3$}
++(0:\a/3 pt) node[n]{B}  +(0:1) node{$m=4$}
++(0:\a/3 pt) node[n]{C}  +(0:1) node{$m=3$};
\end{tikzpicture}

\noindent{\bfseries Question 3.} This question has $4$ choices.

\noindent\begin{tikzpicture}
\pgfmathsetmacro{\a}{\textwidth}
\path[font=\bfseries,blue,right] 
(0,0)         node{A. $x=1$}
++(0:\a/4 pt) node{B. $x=6$}
++(0:\a/4 pt) node{C. $x=8$}
++(0:\a/4 pt) node{D. $x=6688$};
\end{tikzpicture}

\noindent{\bfseries Question 4.} This question also has $4$ choices. You can see choices of Question $3$ and Question $4$ are vertically aligned.

\noindent\begin{tikzpicture}
\pgfmathsetmacro{\a}{\textwidth}
\path[font=\bfseries,magenta,right] 
(0,0)         node{A. $y=11$}
++(0:\a/4 pt) node{B. $y=66$}
++(0:\a/4 pt) node{C. $y=88$}
++(0:\a/4 pt) node{D. $y=668866$};
\end{tikzpicture}

\noindent{\bfseries Question 5.} This question also has $4$ choices with other arrangement.

\noindent\begin{tikzpicture}
\pgfmathsetmacro{\a}{\textwidth}
\path[font=\bfseries,right] 
(0,0)        node[blue]   {A. Blue}
+(0:\a/2 pt) node[red]    {B. Red}
++(-90:.5)   node[violet] {C. Violet}
+(0:\a/2 pt) node[orange] {D. Orange};
\end{tikzpicture}

\end{document}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.