如何包含随机图像?

如何包含随机图像?

我想让 LaTeX 从一系列八张图片中随机挑选一张图像文件并将其包含在内。我发现 ''lcg'' 包可以生成随机数:

\usepackage{lcg}
\reinitrand[counter=sec,first=1,last=8]

因此我预计此行将随机包含其中一张图片:

\includegraphics[width=0.6cm]{excl0\rand\arabic{sec}c.png}

其中文件名为 excl01c.png、excl02c.png 等。结果并不像我想象的那样,我收到了一条错误消息:

Runaway definition?
->excl0\cr@nd = 126\advance \cr@nd \inputlineno \multiply \cr@nd 3\advance \ETC
.
! TeX capacity exceeded, sorry [main memory size=3000000].
<argument> Random number generator initiali
                                       zed to \the \cr@nd

我的问题是这种错误的原因是什么,如何修复它,如何让 LaTeX 随机选择图像文件?

答案1

\rand指令计算一个随机数并将其存储在sec计数器中。另一方面,的参数应该\includegraphics是文件名(宏扩展后),而不是计算它的指令集。

在执行之前先进行计算\includegraphics

\rand\includegraphics[width=0.6cm]{excl0\arabic{sec}c.png}

笔记

\rand将执行一些在“仅扩展”上下文中不允许的计算。作为参数传递给的字符串\includegraphics(或\input,使用相同机制)包含宏,但这些应该能够扩展到仅限字符

扩展

例如,如果您需要使用编号从 01 到 20 的文件,则必须确保该命令为小于 10 的数字打印填充零;LaTeX 内核提供了\two@digits此功能:

\makeatletter
\newcommand{\printrandom}{\two@digits{\thesec}}
\makeatother

\rand\includegraphics[width=0.6cm]{excl\printrandom c.png}

对于更多数字,您可以模拟以下行为\two@digits

  1. 两位数

    \newcommand{\printrandom}{\ifnum\value{sec}<10 0\fi\arabic{sec}}
    
  2. 三位数

    \newcommand{\printrandom}{\ifnum\value{sec}<100 0\fi\ifnum\value{sec}<10 0\fi\arabic{sec}}
    

再次使用\rand\includegraphics[width=0.6cm]{excl\printrandom c.png}

答案2

在文件名 do de job 中使用\randof\includegraphics和 the之前。在 MWE 中, to是它们各自的手写数字:\thesecimages1.pngimage4.png

    \documentclass{article}
    \usepackage{lcg}
    \reinitrand[counter=sec,first=1,last=4]
    \usepackage{graphicx}

    \begin{document}

    \rand\includegraphics[width=3em]{image\thesec}
    \rand\includegraphics[width=3em]{image\thesec}
    \rand\includegraphics[width=3em]{image\thesec}
    \rand\includegraphics[width=3em]{image\thesec}
    \rand\includegraphics[width=3em]{image\thesec}
    \rand\includegraphics[width=3em]{image\thesec}
    \rand\includegraphics[width=3em]{image\thesec}
    \rand\includegraphics[width=3em]{image\thesec}
    \rand\includegraphics[width=3em]{image\thesec}

\end{document}

平均能量损失

相关内容