我有以下命令:
\def\tabfive{%
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{p{0.18\linewidth}p{0.18\linewidth}p{0.18\linewidth}p{0.18\linewidth}p{0.18\linewidth}}
\fiveoptions
}
\def\tabfour{%
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{p{0.23\linewidth}p{0.23\linewidth}p{0.23\linewidth}p{0.23\linewidth}}
\fouroptions
}
\def\tabend{\end{tabular}}
\def\fouroptions #1\\ { a) #1&b) #2&c) #3&d) #4~}
\def\fiveoptions #1\\ { a) #1&b) #2&c) #3&d) #4&e) #5~}
用法是:
\tabfour
10 &
12 &
15 &
20\\
\tabend
\tabfive
10 &
12 &
15 &
18 &
20\\
\tabend
有没有办法将这两个命令合并到名为的命令中\mytab
,然后 LaTeX 根据备选方案的数量选择正确的命令?
答案1
如果你想保持你的语法,那么就像
\newcounter{answers}
\renewcommand\theanswers{\alph{answers}}
\def\tabendi{\tabend}
\def\tabgen#1\\ \tabend{\setcounter{answers}{0}\noindent\tabgeni#1& & \tabend& }
\def\tabgeni#1& {%
\def\tempa{#1}%
\ifx\tempa\tabendi
\tabend
\else
\if\relax\detokenize{#1}\relax
\else
\makebox[.18\linewidth][l]{\stepcounter{answers}\theanswers)~#1}\hfill
\fi
\expandafter\tabgeni
\fi
}
\def\tabend{\par}
\let\tabfour\tabgen
\let\tabfive\tabgen
和
\tabgen
10 &
12 &
15 &
20\\
\tabend
\tabgen
10 &
12 &
15 &
18 &
20\\
\tabend
由于有 to 语句,旧语法仍可继续起作用\let
。
然而,不同的方法可能更方便,输入也更自由:
\usepackage{xparse}
\newcounter{answers}
\renewcommand\theanswers{\alph{answers}}
\ExplSyntaxOn
\NewDocumentCommand{\results}{m}
{
\seq_set_split:Nnn \l_results_a_seq {,}{#1}
\par\nobreak\noindent\setcounter{answers}{0}
\seq_map_inline:Nn \l_results_a_seq
{
\makebox[.18\linewidth][l]{\stepcounter{answers}\theanswers)~##1}\hfill
}
\par
}
\seq_new:N \l_results_a_seq
\ExplSyntaxOff
然后你可以输入你的结果
\results{
10,
12,
15,
20
}
\results{
10,
12,
15,
18,
20
}
这将产生
答案2
通过重新考虑使用方式tabular
并使用内联列表,您可以拥有可变数量的项目。
\documentclass{article}
\makeatletter
\newcounter{inline}
\def\inlinelist#1{%
\setcounter{inline}{0}%
\@for\next:=#1\do{%
\stepcounter{inline}%
\alph{inline})\thinspace\next\space}
}
\makeatother
\begin{document}
\inlinelist{one,two,three,four,five, six}
\inlinelist{one,two,three}
\end{document}
这是一个更短的解决方案,更灵活并且更少输入。
答案3
您可以定义带星号和不带星号的宏,以便\mytabs
使用\tabfour
和\mytabs*
使用\tabfive
。一个很好的参考是定义带星号的命令版本(* 宏)。
不过,我建议您使用enumitem
包中的内联列表功能:
\documentclass{article}
\usepackage[inline]{enumitem}
\begin{document}
\begin{enumerate*}[label=\alph*), itemjoin={\hspace*{5.0ex}}]
\item 10
\item 12
\item 15
\end{enumerate*}
\begin{enumerate*}[label=\alph*), itemjoin={\hspace*{5.0ex}}]
\item 10
\item 12
\item 15
\item 18
\item 20
\end{enumerate*}
\end{document}