我想定义一个命令,它接受三个参数:问题编号、问题文本以及我的答案。虽然我确信有很多不同的解决方案,但我不知道哪个是正确的答案。其中一个复杂之处在于,无论问题编号的宽度如何,我都希望所有问题和答案(不是问题编号)都左对齐(1.1 vs 1.10)。我已经制作了一些开始的东西,但我收到了一个奇怪的错误,我根本无法理解。以下是代码:
\documentclass[letterpaper,10pt]{article}
\newcommand{\question}[3]{
\begin{itemize}
\item[\makebox[1cm][l]{#1}] #2
\vspace{.2in}
#3
\end{itemize}
}
\begin{document}
\question{a}{b}{c}
\end{document}
当我执行此操作时,结果如下:
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/MacPorts 2013_6)
restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2011/06/27>
Babel <3.9f> and hyphenation patterns for 43 languages loaded.
(/opt/local/share/texmf-texlive/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/opt/local/share/texmf-texlive/tex/latex/base/size10.clo)) (./test.aux)
! Argument of \@makebox has an extra }.
<inserted text>
\par
l.18 \question{a}{b}{c}
? ^D
! Emergency stop.
<inserted text>
\par
l.18 \question{a}{b}{c}
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on test.log.
对于我做错的事情有什么建议吗?感谢您的帮助。
答案1
您的问题本质上类似于项目标签末尾的右方括号在其前面添加空格- 不同的原因;相同的结果/解决方案。在您的定义中,\question
您应该使用
\newcommand{\question}[3]{%
\begin{itemize}
\item[{\makebox[1cm][l]{#1}}] #2
\vspace{.2in}
#3
\end{itemize}
}
请注意,提供给可选参数的参数\item
是如何用括号括起来的,以避免对参数的结束位置产生混淆。