有多个选项的投票结果

有多个选项的投票结果

您可以轻松地在会议期间显示是/否投票的结果,如下所示:

\begin{Vote}
    \vote{Next meeting at 11am?}{2}{1}{1}
\end{Vote}

我正在寻找一种方法来显示具有多种可能选项的问题结果。

例如:

下次会议时间?
上午 10 点:2
上午 11 点:4
下午 6 点:0

知道如何在 LaTeX 中指定这一点吗?

答案1

包中的投票选项minutes使用按顺序调用的命令链定义,称为\min@voteI(是)、\min@voteII(否)、\min@voteIII(不投票)、\min@voteIV(决定)和一些其他命令来输出表格。如果您想要更多选项,您可以修改或添加此链中的命令。

一种相对简单的方法是将新命令放在链的开头\min@voteO(请注意,这是大写字母 o 而不是数字 0)。为了尽量减少需要添加的代码量,您可以牺牲一点语义正确性,并使用这个新命令替换\min@voteI,将前两个投票选项的值设置为部分表,然后跳转到\min@voteII。这意味着您可以不修改链的其余部分,其中假设只有三个选项(是/否/否投票)。

这种方法的语法问题是,第一个选项的标签(以及下面的 MWE 中的第二个选项)不能像在正常\vote命令中那样是可选的(默认值为“是”),但对于多选项投票来说,无论如何这都是不希望的。

可以通过修改命令以允许更多参数以同样的方式添加更多选项\min@voteO。使用这种方法无法添加任意数量的选项,为此您需要列表解析功能(这当然是可能的,但这意味着完全重写投票代码)。

MWE 显示新命令和原始命令:

\documentclass{article}
\usepackage[english]{babel}
\usepackage{minutes}
\makeatletter
\newcommand{\votethree}[1]{
\gdef\min@voteT{#1}%
\min@voteO
}
\newcommand{\min@voteO}[4]{
\gdef\min@voteTI{%
#1: & #2\\
#3}
\gdef\min@voteVI{#4}
\min@voteII
}
\makeatother

\begin{document}
\begin{Minutes}{Meeting at 9am}
\votethree{Next meeting}{10am}{2}{11am}{4}[6pm]{0}{1}[11am]
\vote{Next meeting}[11am]{2}[12pm]{1}{1}[11am]
\end{Minutes}
\end{document}

结果:

在此处输入图片描述

答案2

需要两个不同的宏;我将第一个称为\yeanay,用于“是/否”投票。\multiplevotes您可以根据需要拥有任意数量的子问题。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\yeanay}{mmmm}
 {% #1 = question, #2 = yeas, #3 = nays, #4 = no votes
  \par\noindent
  #1\\*
  Yes:~#2\\*
  No:~#3
  \int_compare:nF { #4 = 0 } { \\* No~vote:~#4 }
  \par
 }

\NewDocumentCommand{\multiplevote}{mm}
 {% #1 = question, #2 = list of options with votes
  \par\noindent
  #1
  \clist_map_inline:nn { #2 } { \__arno_vote:nn ##1 }
  \par
 }

\cs_new_protected:Nn \__arno_vote:nn
 {
  \\* #1:~#2
 }

\ExplSyntaxOff

\begin{document}

\yeanay{Next meeting on Monday?}{3}{1}{0}

\bigskip

\yeanay{Next meeting at 11am?}{2}{1}{1}

\bigskip

\multiplevote{Next meeting at?}{{10am}{2},{11am}{4},{6pm}{0}}

\end{document}

在此处输入图片描述

相关内容