按照此邮政,我想做一个复选框列表,其中包含枚举元素。每个枚举标签之前都有一个空的复选框。在下面的 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}