我正在尝试制作一个命令,用于创建具有相等元素的方表。表格大小需要由用户定义。如下所示:
\tabelax{<size>}{<element>}
例子:
\tabelax{3}{a}
会给:
我正在尝试以下代码:
\newcounter{coluna} % número de colunas
\newcounter{linha} % número de linhas
\makeatletter
\newcommand{\tabelax}[2]{
\setcounter{coluna}{0}
\setcounter{linha}{0}
\begin{tabular}{|c|
\setcounter{coluna}{0}
\@whilenum\value{coluna}<#1\do{
c|\stepcounter{coluna}}
}%
\hline
\setcounter{linha}{0}
\@whilenum\value{linha}<#1\do{
#2\setcounter{coluna}{0}
\@whilenum\value{coluna}<#1\do{
& #2 \stepcounter{coluna}
}\\\hline\stepcounter{linha}
}
\end{tabular}
}
\makeatother
这将产生以下错误:
Package array: Illegal pream-token (\@nil): `c' used.
LaTeX
Package array: Empty preamble: `l' used.
LaTeX
Only one # is allowed per tab.
\@preamble ...mpdima width\z@ \unhbox \z@ \@sharp
LaTeX
Extra alignment tab has been changed to \cr.
<template> ...a width\z@ \unhbox \z@ \endtemplate
LaTeX
有人知道我做错什么了吗?
答案1
您可以利用该youngtab
包:
\documentclass{article}
\usepackage{youngtab}
\ExplSyntaxOn
\NewDocumentCommand{\tabelax}{mm}
{% #1 = number of lines, #2 = symbol
\felipe_tabelax:nn { #1 } { #2 }
}
\tl_new:N \l__felipe_tabelax_tl
\cs_new_protected:Nn \felipe_tabelax:nn
{
\tl_set:Nx \l__felipe_tabelax_tl { \prg_replicate:nn { #1 } { #2 } }
\int_step_inline:nnn { 2 } { #1 }
{
\tl_put_right:Nx \l__felipe_tabelax_tl { , \prg_replicate:nn { #1 } { #2 } }
}
\__felipe_tabelax_make:V \l__felipe_tabelax
}
\cs_new_protected:Nn \__felipe_tabelax_make:n
{
\young(#1)
}
\cs_generate_variant:Nn \__felipe_tabelax_make:n { V }
\ExplSyntaxOff
\begin{document}
\tabelax{3}{a} \tabelax{1}{b} \tabelax{4}{c}
\end{document}
在第一个示例中,代码构建了一个包含以下内容的标记列表
aaa,aaa,aaa
并将其传递给\young
。请参阅包文档。
答案2
该包nicematrix
提供了几个命令,以便根据一般模式自动组成可变大小的矩阵。
这些命令接受两个强制参数。第一个是矩阵的格式,其语法为 ,r-c
其中r
是行数和c
列数。第二个参数是模式(它是插入到构造矩阵的每个单元中的标记列表)。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
$\AutoNiceMatrix{3-3}{\color{red}a}$
\bigskip
$\AutoNiceMatrix{1-1}{\fbox{b}}$
\bigskip
\setlength{\arraycolsep}{-0.1pt}
\renewcommand{\arraystretch}{0.6}
\setlength{\fboxrule}{0.1pt}
$\AutoNiceMatrix{4-4}{\fbox{c}}$
\bigskip
\setlength{\arraycolsep}{4pt}
\renewcommand{\arraystretch}{1.5}
$\pAutoNiceMatrix{3-7}{\alpha_{\arabic{iRow},\arabic{jCol}}}$
\end{document}
答案3
您不需要使用\halign
表格(即 LaTeX 中的表格环境),框和\loop
宏就足够了:
\newcount \tableN
\def\tableax#1#2{\tableN=#1\vbox{\hrule \relax
\loop \tableR{#1}{#2}
\hrule
\advance\tableN by-1
\ifnum\tableN>0 \repeat
}}
\def\tableR#1#2{\hbox{\tableN=#1\vrule height.85em depth.35em \relax
\loop \hbox to1.2em{\hss#2\hss}\vrule
\advance\tableN by-1
\ifnum\tableN>0 \repeat
}}
test: \tableax{3}{a}
为什么我们只需要一个计数器?因为行是在 TeX 组中排版的(在 中\hbox{}
),我们可以在这里借用相同的计数器进行内部循环。