用于区分大小写的随机数生成器

用于区分大小写的随机数生成器

我想使用随机区分大小写来编译一段代码。我该如何实现呢?

无 LaTeX 伪代码:

x = rand(1,4) // random number between 1 and 4
if( x == 1 )
Let us talk about apples!
else if( x == 2 )
Let us talk about pears!
else if( x == 3 )
Let us talk about plums!
else 
Let us talk about cherries!

实现这一目标的最佳方法是什么?我也想在数学环境中使用它。

答案1

您可以创建一个命令,从列表中输出随机项目。

如果项目包含多个标记,则必须用括号括起来。

有两个版本:第一个版本定义一个命令(适合长列表),第二个版本可以内联使用。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\makerandomchoice}{mm}
 {
  \shuhalo_random_choice_make:Nn #1 { #2 }
 }

\NewExpandableDocumentCommand{\randomchoice}{m}
 {
  \shuhalo_random_choice:n { #1 }
 }

\cs_new_protected:Nn \shuhalo_random_choice_make:Nn
 {
  \cs_new:Npn #1
   {
    \shuhalo_random_choice:n { #2 }
   }
 }

\cs_new:Nn \shuhalo_random_choice:n
 {
  \tl_item:nn { #1 } { \int_rand:nn { 1 } { \tl_count:n { #1 } } }
 }

\ExplSyntaxOff

\makerandomchoice{\talk}{
  {Let us talk about apples!}
  {Let us talk about pears!}
  {Let us talk about plums!}
  {Let us talk about cherries!}
}
\makerandomchoice{\letter}{ABCDEFGHIJKLMNOPQRSTUVWXYZ}

\begin{document}

\talk

\talk

\talk

\talk

\talk

\letter\letter\letter\letter\letter\letter\letter\letter
\letter\letter\letter\letter\letter\letter\letter\letter

\randomchoice{{Pear}{Apple}{Plum}{Cherry}}

\randomchoice{{Pear}{Apple}{Plum}{Cherry}}

\randomchoice{{Pear}{Apple}{Plum}{Cherry}}

\randomchoice{{Pear}{Apple}{Plum}{Cherry}}

\end{document}

项目之间的空格将被忽略。

在此处输入图片描述

答案2

如果您了解 R 和knitr,则可以使用一些与您的伪代码非常相似的代码来实现:

\documentclass{article}
\begin{document}
<<fruit-roulette,echo=F,cache=FALSE>>=
x    <- sample(1:4, 1) 
talk <- if( x == 1 ) {"apples"} else {
        if( x == 2 ) {"pears"}  else {
        if( x == 3 ) {"plums"}  else {
        if( x == 4 ) {"cherries"}}}} 
@

Because $x=\Sexpr{x}$, let us talk about \Sexpr{talk}! 

\end{document}

在每次编译中,LaTeX 文本可能会发生变化,可能的结果如下:


姆韦


正如您在此处看到的,\Sexpr{}可以在数学和文本模式下使用,但要考虑到 R 输出将根据 LaTeX 规则进行格式化(例如,作为fooR 对象“大苹果”,\Sexpr{foo}或者$\mbox{\Sexpr{foo}}$将只产生“大苹果”,但\Sexpr{talk}会产生“大苹果“。

相关内容