表格作为命令

表格作为命令

我需要做一些工作,但我必须经常对表格使用相同的设置,然后我输入了以下代码

\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}

相关内容