复选框枚举列表,其中包含已选中的项目

复选框枚举列表,其中包含已选中的项目

按照此邮政,我想做一个复选框列表,其中包含枚举元素。每个枚举标签之前都有一个空的复选框。在下面的 MWE 中,我想选中第三个元素前面的框。(但仍然编号为 c。)

\documentclass{article}

\usepackage{pifont,amssymb} % for the symbols
\usepackage[shortlabels]{enumitem}
\newlist{answerlist}{enumerate}{2}
\setlist[answerlist]{label={$\square$ \hspace{1pt}\alph*.}}
\newcommand{\cmark}{\ding{51}}%
\newcommand{\correct}{
    \rlap{$\square$ \hspace{1pt}\alph*{\theenumi}.}{\raisebox{2pt}{\large\hspace{1pt}\cmark} \*a}%
    \hspace{-2.5pt}
}
\newcommand{\correctanswer}{\item[\correct] }


\begin{document}

\begin{answerlist}
  \item One 
  \item Two
  \correctanswer Test
\end{answerlist}
  
\end{document}

但是上面的 \correctanswer 会产生错误,因为计数器 \theenumi 此时似乎为零。

答案1

\alph在定义中有特殊含义enumitem;它定义\alph*alph当前的计数器级别。您在列表设置之外使用它,因此\alph*实际上与...相同,\alph{*}并且不存在*计数器。

下面的例子提供了您想要的内容:

在此处输入图片描述

\documentclass{article}

\usepackage{pifont,amssymb} % for the symbols
\usepackage[shortlabels]{enumitem}

\newlist{answerlist}{enumerate}{2}
\setlist[answerlist]{label={\alph*.\makebox[0pt][r]{\noexpand\emptysquare\hspace{2em}}},ref=\alph*}

\newcommand{\emptysquare}{$\square$}
\newcommand{\checkedsquare}{\makebox[0pt][l]{\raisebox{1pt}[0pt][0pt]{\large\hspace{1pt}\cmark}}$\square$}
\newcommand{\cmark}{\ding{51}}%
\newcommand{\correctanswer}{{\renewcommand{\emptysquare}{\checkedsquare}\item\leavevmode}}

\begin{document}

\begin{answerlist}
  \item One 
  \item Two
  \correctanswer Test
  \item Three
\end{answerlist}
  
\end{document}

答案2

我复制粘贴修改了这个问题的可接受答案https://tex.stackexchange.com/a/564221/212071以及对相关问题的回答:https://tex.stackexchange.com/a/155051/212071

基本上,关键的“创新”是显然enumitem有一个before=选项,我们可以使用它来代替\renewcommand ... \leavemode接受的答案。这似乎使引用更好地发挥作用(特别是解决此评论)。

无论如何,下面是复制粘贴修改的一个最小工作示例。

\documentclass{article}

\usepackage{enumitem}

% https://tex.stackexchange.com/a/564221/212071 copy-paste
\newlist{answerlist}{enumerate}{2}

\newif\ifmoditem
\newcommand{\setupmodenumerate}{%
  \global\moditemfalse
  \let\origmakelabel\makelabel
  \def\moditem##1{\global\moditemtrue\def\mesymbol{##1}\item}%
  \def\makelabel##1{%
    \origmakelabel{\ifmoditem\llap{\mesymbol\enspace}\fi##1}%
    \global\moditemfalse}%
}

\setlist[answerlist]{ref={\arabic*},label={\arabic*},before=\setupmodenumerate}

\usepackage{amssymb} % needed for square
\usepackage{pifont} % needed for checked square
 
\newcommand{\emptysquare}{$\square$}
\newcommand{\cmark}{\ding{51}}%
\newcommand{\checkedsquare}{\makebox[0pt][l]{\raisebox{1pt}[0pt][0pt]{\large\hspace{1pt}\cmark}}$\square$}

\newcommand{\todoitem}{\moditem{\emptysquare}}
\newcommand{\doneitem}{\moditem{\checkedsquare}}

\begin{document}

\begin{answerlist}
  \todoitem One 
  \todoitem Two
  \doneitem Test
  \todoitem Three
\end{answerlist}

\end{document}

相关内容