以与 pdflatex 和 lualatex 兼容的方式生成随机颜色

以与 pdflatex 和 lualatex 兼容的方式生成随机颜色

现在,我正在使用 pdftex 生成随机颜色

\definecolor{randomcolor}{RGB}
{
    \pdfuniformdeviate 255,
    \pdfuniformdeviate 255,
    \pdfuniformdeviate 255
}

一切运行良好,直到我尝试使用 luatex 进行编译。

生成随机颜色(直接或通过生成 3 个随机数)的最佳方法是什么,并且与 pdftex 和 luatex 兼容?

我怀疑有些事情涉及前列腺素是答案。或者可能只是一个条件,其中一个分支用于 pdftex(看起来像当前分支),另一个用于 luatex(可能调用一小段 luacode)。

答案1

luatex85包确实

\let\pdfuniformdeviate\uniformdeviate

你可以这样做\usepackage{luatex85}

\documentclass{article}
\usepackage{xcolor}

\unless\ifdefined\pdfuniformdeviate
  \let\pdfuniformdeviate\uniformdeviate
\fi

\definecolor{randomcolor}{RGB}
{
    \pdfuniformdeviate 255,
    \pdfuniformdeviate 255,
    \pdfuniformdeviate 255
}
\extractcolorspec{randomcolor}\test
\typeout{\test}

\stop

这将输出类似

{rgb}{0.84706,0.4,0.68234}

同时使用pdflatexlualatex。我猜,当 中也可以使用随机数时xelatex,会将一个通用接口添加到 LaTeX 内核中。

答案2

基于为每一帧随机分配背景颜色

另一种方法基于pgf

\documentclass{article}

\usepackage{pgf}
\usepackage{pgffor}
\usepackage{xcolor}

\usepackage{ifluatex}
\usepackage{ifxetex}

\ifluatex
  \let\pdfrandomseed\randomseed
\fi

\ifxetex
  \pgfmathsetseed{\time}
\else
  \pgfmathsetseed{\number\pdfrandomseed}
\fi

\newcommand{\randomcolor}{%
    \pgfmathsetmacro{\R}{rnd}%
    \pgfmathsetmacro{\G}{rnd}%
    \pgfmathsetmacro{\B}{rnd}%
    \definecolor{randomcol}{rgb}{\R,\G,\B}%
}

\begin{document}

\noindent%
\foreach \n in {1,...,1350}{%
   \randomcolor\color{randomcol}\rule{0.41cm}{0.41cm}\-%
}

\end{document}

在此处输入图片描述

答案3

还有lcg包(Linear Congruential Generator 的缩写),可与所有编译器配合使用,包括lualatex。该包提供了一个命令\rand来生成随机数并将其存储在rand计数器中。要在 中使用,\definecolor您应该使用 转换计数器\the\value

first您可以使用包选项和设置随机生成器的界限last,也可以使用命令在文档中更改它们\reinitrand。默认种子基于系统时钟,以分钟为单位(因此输出每分钟只会更改一次)。您还可以提供自定义种子。

梅威瑟:

\documentclass{article}
\usepackage[first=1,last=255]{lcg}
\usepackage{xcolor}
\rand\edef\colora{\the\value{rand}}
\rand\edef\colorb{\the\value{rand}}
\rand\edef\colorc{\the\value{rand}}

\definecolor{randomcolor}{RGB}
{
    \colora,
    \colorb,
    \colorc
}
\begin{document}
\colorbox{randomcolor}{Random color: \colora,\colorb,\colorc}
\end{document}

结果:

在此处输入图片描述

相关内容