在 xparse 环境中嵌套任务

在 xparse 环境中嵌套任务

我需要使用 xparse,因为我要通过自定义环境传递多个可选参数(为简洁起见,此处未显示)。当我尝试传递以下内容时:

\documentclass{article}
\usepackage{tasks}
\usepackage{xparse}
\newlength{\longlabel}
\settowidth{\longlabel}{(m)}
\NewTasks[label-format=\color{blue}, counter-format={(tsk[a])}, label-width=\longlabel,
    item-indent=0pt, label-offset=2pt, column-sep={10pt}, before-skip=-8pt, after-item-skip=2pt, after-skip=-4pt]{newTask}[\item]

\NewDocumentEnvironment{dummyEnvironment}{}
  {\begin{newTask}(2)}
  {\end{newTask}}

\begin{document}

\begin{newTask}(2)
    \item Item 1
    \item Item 2
    \item Item 3
    \item Item 4
    \end{newTask}

\begin{dummyEnvironment}
    \item Item 1
    \item Item 2
    \item Item 3
    \item Item 4
    \end{dummyEnvironment}

\end{document}

返回错误,指出\begin{newTasks}已结束\end{dummyEnvironment}

错误:

C:\Users... LaTeX Error: \begin{newTask} on input line 22 ended by \end{dummyEnvironment}. [^^I\end{dummyEnvironment}]
C:\Users... LaTeX Error: \begin{dummyEnvironment} on input line 22 ended by \end{document}. [\end{document}]

现在,这个问题已经在“environ”包中得到解答了这里,但是如何使用 xparse 环境解决这个问题?

答案1

你可以(事实上,正如下面 egreg 评论的那样,你应该\newtask...\endnewtask直接使用:

\documentclass{article}
\usepackage{tasks}
\usepackage{xparse}
\newlength{\longlabel}
\settowidth{\longlabel}{(m)}
\NewTasks[label-format=\color{blue}, counter-format={(tsk[a])}, label-width=\longlabel,
    item-indent=0pt, label-offset=2pt, column-sep={10pt}, before-skip=-8pt, after-item-skip=2pt, after-skip=-4pt]{newTask}[\item]

\NewDocumentEnvironment{dummyEnvironment}{}
  {\newTask(2)}
  {\endnewTask}

\begin{document}

\begin{newTask}(2)
    \item Item 1
    \item Item 2
    \item Item 3
    \item Item 4
    \end{newTask}

\begin{dummyEnvironment}
    \item Item 1
    \item Item 2
    \item Item 3
    \item Item 4
    \end{dummyEnvironment}

\end{document}

当您使用 打开环境时,会发生的情况是使用或(我不记得是哪个了)\begin{newtask}...\end{newtask}打开一个新的 tex 组,并调用 。然后 Latex 向前查找匹配项,然后插入并关闭该组。使用OP 中的 ,latex 看到,因此向前查找匹配项。不幸的是,它找不到它,因为隐藏在 中,它首先看到的 中。这就是 OP 中的代码给出错误的原因。通过使用,您可以避免此问题。\bgroup\begingroup\newtask\end{newtask}\endnewtaskdummyEnvironment\begin{newtask}\end{newtask}\end{newtask}\end{dummyEnvironment}\newtask....\endnewtask

为了完整性,下面是输出:

在此处输入图片描述

相关内容