带模数的 Switch 案例

带模数的 Switch 案例

我正在尝试设置一个 LaTeX 文档,该文档可创建考试的多个版本。我正在考虑在文档的早期定义一个整数变量,然后根据该变量的模数使用 switch-case 构造。

类似 C 的伪代码如下所示:

switch(integervariable % 3){
case 0: What is your name?
case 1: What is your quest?
case 2: What is your favorite color?
}

我怎样才能在 LaTeX 中实现这样的构造?

理想情况下,构造可以自行识别案例的数量。

答案1

\ifcase可以使用原语。模数必须通过更复杂的公式来计算,因为运算/符会进行舍入,而不会截断。

\newcount\integervariable

\integervariable=7

\ifcase\numexpr \integervariable - 3*((\integervariable+2)/3 -1) \relax
case 0: What is your name?\or
case 1: What is your quest?\or
case 2: What is your favorite color?\fi

如果要设置通用“模数”,则实现会更加复杂,因为/运算符会根据零进行对称舍入,很遗憾没有截断。

如果您想从命令行设置一个整数值,那么另一种方法(使用\def\ivalue)更为舒适。

如果要打印\defed,\ivalue请使用 。如果要从上一个示例\ivalue打印,请使用。\integervalue\the\integervalue

\ifx\ivalue\undefined \def\ivalue{7}\fi
\def\imodul{4}

\def\modulo#1#2{\ifnum#1=0 0\else(#1-#2*((2*#1-#2)/(2*#2)))\fi}

\ifcase\numexpr \modulo\ivalue\imodul \relax
  case 0: What is your name?\or
  case 1: What is your quest?\or
  case 2: What is your favorite color?\or
  case 3: If you need something more, open new tread...\else
  other cases\fi

\bye

\ivalue您可以从 Unix 命令行设置:

pdftex '\def\ivalue{5} \input' document

答案2

有点“固定”随机化?

在这里,首先定义一组问题,然后\makeexam使用整数参数调用n

该命令将选择项目n对问题数量取模(实际上通过顺序反转来避免 0 的问题)。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\tl_new:N \g_shuhalo_exam_questions_tl
\int_new:N \g_shuhalo_exam_modulo_int

\NewDocumentCommand{\cquestion}{m}
 {
  \item 
  \tl_item:nn { #1 }
   {
    \tl_count:n { #1 } - \int_mod:nn { \g_shuhalo_exam_modulo_int }{ \tl_count:n { #1 } }
   }
 }

\NewDocumentEnvironment{setexam}{b}
 {
  \tl_gset:Nn \g_shuhalo_exam_questions_tl { #1 }
 }{}

\NewDocumentCommand{\makeexam}{m}
 {
  \int_gset:Nn \g_shuhalo_exam_modulo_int { #1 }
  \begin{enumerate}
  \tl_use:N \g_shuhalo_exam_questions_tl
  \end{enumerate}
 }

\ExplSyntaxOff

\begin{setexam}
\cquestion{
  {What's your name?}
  {What's your quest?}
  {What's your favorite color?}
}
\cquestion{
 {Who's your favorite actor?}
 {What's your favorite pet?}
 {Can pigs fly?}
 {What's the ultimate question to life, universe and everything?}
}
\end{setexam}

\begin{document}

\section{exam}

\makeexam{1}

\section{exam}

\makeexam{2}

\section{exam}

\makeexam{3}

\section{exam}

\makeexam{4}

\section{exam}

\makeexam{5}

\section{exam}

\makeexam{6}

\end{document}

在此处输入图片描述

相关内容