可变尺寸方表命令

可变尺寸方表命令

我正在尝试制作一个命令,用于创建具有相等元素的方表。表格大小需要由用户定义。如下所示:

\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列数。第二个参数是模式(它是插入到构造矩阵的每个单元中的标记列表)。

b

\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{}),我们可以在这里借用相同的计数器进行内部循环。

相关内容