我需要做一些工作,但我必须经常对表格使用相同的设置,然后我输入了以下代码
\newcommand{\tab41}[4]{\begin{center}
\begin{tabular}{|c|l||c|l||c|l||c|l|}
\hline
(A) & #1 & (B) & #2 (C) #3 & (D) & #4\\
\hline
\end{tabular}
\end{center}}
并且失败了。我做错了什么?
答案1
这不起作用的原因是宏名称可能不包含数字和其他非字母(_
并且^
通常不包含@
,除非在包和类内部等发生变化)。
您应该避免在宏名称中使用数字。人们通常使用罗马数字,例如\mymacroiv
而不是\mymacro4
。但是有一些方法可以解决这个问题,请参阅:
您可以使用 TeX(而不是 LaTeX)方式来定义宏,41
作为参数文本,即宏在其名称后等待的内容。这样,您就拥有一个\tab
等待并删除41
其名称后直接内容的宏。但是,这仅在您没有任何其他\tab<number>
宏时才有效。
\documentclass{article}
\begin{document}
\newcommand\tab{}% to get an error if \tab is already defined
\def\tab41#1#2#3#4{\begin{center}
\begin{tabular}{|c|l||c|l||c|l||c|l|}
\hline
(A) & #1 & (B) & #2 (C) #3 & (D) & #4\\
\hline
\end{tabular}
\end{center}}
\tab41{a}{b}{c}{d}
\end{document}
--
如果您确实需要多个\tab<number>
宏,那么您可以定义一个\tab
宏,它将数字读取为两个参数(不是{ }
必需的),并调用使用 定义的正确宏\@namedef
,其中宏名称以文本形式提供,因此可以包含所有可打印字符。因为\@namedef
是内部 LaTeX 宏,所以您需要使用它\makeatletter
并\makeatother
了解它的用法。
\documentclass{article}
\makeatletter
\newcommand\tab[2]{\@nameuse{tab#1#2}}
\@namedef{tab41}#1#2#3#4{\begin{center}
\begin{tabular}{|c|l||c|l||c|l||c|l|}
\hline
(A) & #1 & (B) & #2 (C) #3 & (D) & #4\\
\hline
\end{tabular}
\end{center}}
\@namedef{tab25}#1#2#3#4{\begin{center}
\begin{tabular}{|c|l||c|l||c|l||c|l|}
\hline
(Other) & #1 & (table) & #2 (C) #3 & (D) & #4\\
\hline
\end{tabular}
\end{center}}
\makeatother
\begin{document}
\tab41{a}{b}{c}{d}
\tab25{a}{b}{c}{d}
\end{document}