您可以轻松地在会议期间显示是/否投票的结果,如下所示:
\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}