具有随机位置的表格环境

具有随机位置的表格环境

我想使用自定义表格环境模拟一个简单的随机字母云,如下所示:

\documentclass{article}
\usepackage{lcg}
\begin{document}

\reinitrand[first=12,last=20,counter=n]
\begin{tabular}[t]{*3{>{\rand\fontsize{\then}{\then}\selectfont}c}}
X & X & X \\
X & X & X \\
X & X & X \\
\end{tabular}

\end{document}

此外,我也想以类似的方式重新定位“单元格”,但这是不可能的,因为表格环境的语法支持声明但不支持命令,例如\put(,){}

换句话说,我想用tabular序言中的任何声明替换 \put 命令,以避免这种多余的语法:

\newcount\x
\newcount\y  
\newcommand{\rndpos}[1]{
    \rand\x\then
    \rand\y\then
    \put(\x,\y){#1}
    }

\reinitrand[first=0,last=4,counter=n]
\begin{tabular}[t]{*3{>{\rand\fontsize{\numexpr 3*\then+10}{\then}\selectfont}c}}
\rndpos{X} & \rndpos{X} & \rndpos{X} \\
\rndpos{X} & \rndpos{X} & \rndpos{X} \\
\rndpos{X} & \rndpos{X} & \rndpos{X} \\
\end{tabular}

答案1

使用collcell。另请参阅如何在每个表列上执行命令

\documentclass{article}
\usepackage{lcg}
%This friend makes the magic
\usepackage{collcell}
%Define a column type so the cell's content is passed as an argument to \rndpos. We can also put the random font size commands here
\newcommand{\rndsz}{%
\rand\fontsize{\numexpr 3*\then+10}{\then}\selectfont%
}
\newcolumntype{Z}{>{\rndsz\collectcell\rndpos}{c}<{\endcollectcell}}
\newcount\x
\newcount\y  
\newcommand{\rndpos}[1]{
    \rand\x\then
    \rand\y\then
    \put(\x,\y){#1}
}

\begin{document}
\reinitrand[first=0,last=4,counter=n]
\begin{tabular}[t]{*3{Z}}
    X & X & X \\
    X & X & X \\
    X & X & X \\
\end{tabular}
\end{document}

我认为不需要定义新的环境。

答案2

作为对 JairoAraujo 的精彩答案(赞同)的补充,这里有一个使用 的更简单的实现expl3

\documentclass{article}
\usepackage{xparse,collcell}
\usepackage{lmodern}

\ExplSyntaxOn
\NewDocumentCommand{\randomsizeandpos}{m}
 {
  \fontsize{\int_rand:nn{12}{20}}{0}\selectfont
  \put(\int_rand:nn{0}{4},\int_rand:nn{0}{4}){#1}
 }
\ExplSyntaxOff

\begin{document}

\begin{tabular}{ *{3}{>{\collectcell\randomsizeandpos}c<{\endcollectcell}} }
X & X & X \\
a & b & c \\
X & X & X \\
\end{tabular}

\end{document}

在此处输入图片描述

相关内容