为了制作扑克牌,我需要制作一个 5 x 5 单元格的表格。第一行和第一列始终相同。但其他单元格取决于扑克牌。
因此,最好给出如下命令:\test{3,1,6,1,2,2,3,2,4,3,4,3,5,7,5,4} 来生成表格。
\documentclass{article}
\begin{document}
\newcommand\test[3][]%
{\begin{table}
\begin{tabular}{ c | c | c | c | c }
\hline
& lente & zomer & herfst & winter \\
\hline
B & 3 & 1 & 6 & 1 \\
G & 2 & 2 & #2 & #3 \\
D & 4 & 3 & 4 & 3 \\
S & 5 & 7 & 5 & 4 \\
\hline
\end{tabular}
\end{table}
}
\test{4}{6}
\end{document}
我可以使用更多参数来实现这一点,但为什么我必须为只有 2 个值设置 3 个选项?因此我进行了测试:
\newcommand\test[1][]%
和
\test{4}
答案1
您可能只是误解了命令的构造方式。
\newcommand{<cmd>}[<num>]{<stuff>}
<cmd>
创建带有强制参数的宏<num>
。因此,\newcommand{\test}[2]{<stuff>}
将在引用为和的\test{<first>}{<second>}
地方使用。如果您使用<first>
#1
<stuff>
<second>
#2
\newcommand{<cmd>}[<num>][<something>]{<stuff>}
然后<cmd>
取<num>
-1强制的参数,以及单一,可选参数。因此,\newcommand{\test}[2][something]{<stuff>}
可以以以下两种方式使用
\test{else} % <------- Single mandatory argument; optional argument will
% default to "something". That is, #1={something},
% #2={else}.
\test[someone]{else} % Optional + mandatory argument. #1={someone},
% #2={else}.
有关命令定义的更多信息,请参阅带有和不带有可选参数的不同命令定义。
在你的具体情况下,你需要
\newcommand\test[2]%
{\begin{tabular}{ c | c | c | c | c }
\hline
& lente & zomer & herfst & winter \\
\hline
B & 3 & 1 & 6 & 1 \\
G & 2 & 2 & #1 & #2 \\
D & 4 & 3 & 4 & 3 \\
S & 5 & 7 & 5 & 4 \\
\hline
\end{tabular}%
}
不需要table
浮动环境(就我所知)。另外,考虑使用booktabs
为了整洁地tabular
表示。
答案2
对于只有 16 个位置的情况,一些蛮力就足够了;对于更长的数据集,更巧妙地拆分列表才是最佳方法。在示例中,我展示了“短”版本和较长版本以供比较。
\documentclass{article}
\usepackage{booktabs}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\cards}{ m }
{
\arne_card_distribution:n { #1 }
}
\cs_new_protected:Nn \arne_card_distribution:n
{
\begin{tabular}{ *{5}{c} }
\toprule
& lente & zomer & herfst & winter \\
\cmidrule{2-5}
B & \clist_item:nn { #1 } { 1 }
& \clist_item:nn { #1 } { 2 }
& \clist_item:nn { #1 } { 3 }
& \clist_item:nn { #1 } { 4 } \\
G & \clist_item:nn { #1 } { 5 }
& \clist_item:nn { #1 } { 6 }
& \clist_item:nn { #1 } { 7 }
& \clist_item:nn { #1 } { 8 } \\
D & \clist_item:nn { #1 } { 9 }
& \clist_item:nn { #1 } { 10 }
& \clist_item:nn { #1 } { 11 }
& \clist_item:nn { #1 } { 12 } \\
S & \clist_item:nn { #1 } { 13 }
& \clist_item:nn { #1 } { 14 }
& \clist_item:nn { #1 } { 15 }
& \clist_item:nn { #1 } { 16 } \\
\bottomrule
\end{tabular}
}
\ExplSyntaxOff
\begin{document}
\cards{3,1,6,1,2,2,3,2,4,3,4,3,5,7,5,4}
\bigskip
\begin{tabular}{ c | c | c | c | c }
\hline
& lente & zomer & herfst & winter \\
\hline
B & 3 & 1 & 6 & 1 \\
G & 2 & 2 & 3 & 2 \\
D & 4 & 3 & 4 & 3 \\
S & 5 & 7 & 5 & 4 \\
\hline
\end{tabular}
\end{document}
如果您不喜欢这种booktabs
方式,那么提供必要的更改应该很容易。