我正在尝试从enumitem
列表切换到tasks
列表,但以下在普通enumerate
环境中有效的操作会在环境中生成“出现问题 - 可能缺少 \item”错误tasks
:
\documentclass{article}
\usepackage{tasks}
\newcommand{\itemexpansion}{\item test \item test \item test \item test}
\newcommand{\taskexpansion}{\task test \task test \task test \task test}
\begin{document}
% OK
\begin{enumerate}
\itemexpansion
\end{enumerate}
% Error
\begin{tasks}
\taskexpansion
\end{tasks}
\end{document}
我可以说这里有一个扩展问题,但我的理解能力仅限于此。它似乎与手册中警告的情况不符。有没有一种解决方法可以让我将宏的结果(其内容在其他地方收集)转储到环境中tasks
?
答案1
tasks
需要明确地看到\task
。
您可以添加以下“命令”形式tasks
:
\documentclass{article}
\usepackage{tasks}
\ExplSyntaxOn
\NewDocumentCommand{\dotasks}{O{}d()m}
{
\hagen_tasks:Vnn { #3 } { #1 } { #2 }
}
\cs_new_protected:Nn \hagen_tasks:nnn
{
\tl_if_novalue:nTF { #3 }
{
\begin{tasks}[#2]#1\end{tasks}
}
{
\begin{tasks}[#2](#3)#1\end{tasks}
}
}
\cs_generate_variant:Nn \hagen_tasks:nnn { V }
\ExplSyntaxOff
\newcommand{\itemexpansion}{\item test \item test \item test \item test}
\newcommand{\taskexpansion}{\task test \task test \task test \task test}
\begin{document}
\begin{enumerate}
\itemexpansion
\end{enumerate}
\dotasks{\taskexpansion}
\dotasks(2){\taskexpansion}
\dotasks[counter-format=(tsk[r]),label-width=4ex](2){\taskexpansion}
\end{document}
答案2
我创建了一个Tasks
调用的新环境tasks
,同时扩展第一个参数(在本例中为\taskexpansion
)。
\documentclass{article}
\usepackage{tasks,environ}
\newcommand{\itemexpansion}{\item test \item test \item test \item test}
\newcommand{\taskexpansion}{\task test \task test \task test \task test}
\NewEnviron{Tasks}{%
\def\tmp{\begin{tasks}}%
\expandafter\expandafter\expandafter\tmp\BODY%
\end{tasks}%
}
\begin{document}
% OK
\begin{enumerate}
\itemexpansion
\end{enumerate}
% No longer Error
\begin{Tasks}
\taskexpansion
\end{Tasks}
\end{document}