使用任务包生成带有宏的列表

使用任务包生成带有宏的列表

我不知道如何生成列表tasks包生成列表使用宏

如果您交换下面 MWE 中已标识的三行,您应该会收到以下错误消息:输入行 25 上的 \begin{tasks} 以 \end{document} 结束

请注意,使用enumitemxparse包(以及花哨的宏定义)似乎对问题没有任何影响(我尝试过不使用这两个包,只使用 LaTeX2e 的\newcommand)。

任何想法如何解决这个问题(例如制作一个宏生成tasks)?关于为什么发生这样的事也会受到赞赏!

\documentclass[letterpaper, 12pt]{article}

\usepackage{enumitem}
\usepackage{tasks}
\usepackage{xparse}

\NewDocumentCommand{\macone}{s O{} +g +g}{%
  \begin{enumerate}
  %\begin{tasks}%  %% <-- USE THIS INSTEAD OF LINE ABOVE
}

\NewDocumentCommand{\mactwo}{s O{} +g +g}{%
  \item #3
  %\task #3%  %% <-- USE THIS INSTEAD OF LINE ABOVE
}

\NewDocumentCommand{\macthree}{s O{} +g +g}{%
  \end{enumerate}
  %\end{tasks}%  %% <-- USE THIS INSTEAD OF LINE ABOVE
}

\begin{document}

\macone
\mactwo{Testing 123}
\macthree

\end{document}

答案1

解决方案似乎简单得多:

\documentclass[letterpaper, 12pt]{article}

\usepackage{tasks}

\NewTask{subquestions}[\subquestion]

\begin{document}

\begin{enumerate}
\item First question
  \begin{subquestions}
  \subquestion First subquestion
  \subquestion Second subquestion
  \end{subquestions}
\item Second question
\item Third question
  \begin{subquestions}[2]
  \subquestion First subquestion
  \subquestion Second subquestion
  \subquestion Third subquestion
  \end{subquestions}
\end{enumerate}

\end{document}

在此处输入图片描述

答案2

如果有人有更好的方法,请发表您的答案!!!


根据 @Werner 关于tasks用于environ定义tasks环境的包的评论(我已经验证了这一点,并且它使用 LaTeX3 语法来实现),我想出了以下解决方法。虽然这不是最理想的,但似乎有效:

  • 首先通过将代码写入外部文件(在宏或环境中)来构建列表;
  • 一旦整个列表结构完成,将文件重新输入到主文档中。

梅威瑟:

\documentclass[letterpaper, 12pt]{article}

\usepackage{enumitem}
\usepackage{newfile}
\usepackage{tasks}
\usepackage{xparse}

\newoutputstream{exfile}

\NewDocumentCommand{\startsubquestions}{s o +g +g}{%
  \addtostream{exfile}{\protect\begin{tasks}\IfNoValueF{#2}{(#2)}}%
}

\NewDocumentCommand{\subquestion}{s O{} +g +g}{%
  \addtostream{exfile}{\protect\task\space #3}%
}

\NewDocumentCommand{\endsubquestions}{s O{} +g +g}{%
  \addtostream{exfile}{\protect\end{tasks}}%
}

\begin{document}

\openoutputfile{\jobname.ex}{exfile}%
\addtostream{exfile}{\protect\begin{enumerate}}
\addtostream{exfile}{\protect\item\space First question}
        \startsubquestions
        \subquestion{First subquestion}
        \subquestion{Second subquestion}
        \endsubquestions
\addtostream{exfile}{\protect\item\space Second question}
\addtostream{exfile}{\protect\item\space Third question}
        \startsubquestions[2]
        \subquestion{First subquestion}
        \subquestion{Second subquestion}
        \subquestion{Third subquestion}
        \endsubquestions
\addtostream{exfile}{\protect\end{enumerate}}
\closeoutputstream{exfile}%

\InputIfFileExists{\jobname.ex}{}{``RECOMPILE (or file simply does not exist)''}%

\end{document}


文件中生成的代码\jobname.ex是:

\begin{enumerate}
\item First question
\begin{tasks}
\task First subquestion
\task Second subquestion
\end{tasks}
\item Second question
\item Third question
\begin{tasks}(2)
\task First subquestion
\task Second subquestion
\task Third subquestion
\end{tasks}
\end{enumerate}


输出为:

与此答案中第一个代码块相关的输出

相关内容