LaTeX的tasks宏包


tasks 宏包

LaTeX的列表(list)通常是將項(item,條目)一個一個垂直的平行顯示,所謂“列”表的由來。
水平分列列表,即將多個項分散到各列而不是一列,在出考卷的選擇題時常碰到,LaTeX中的包有:enumcols(enumlists)、tasks(exsheets)
enumcols宏包是李清創建的,TeXlive 2018后,與CTeX的模板沖突。本篇主要討論tasks宏包的使用。tasks宏包的主要用法如下:

\begin{tasks}[<選項>](<列數>)
    \task item1
    \task item2
\end{tasks}

例:選擇題的文檔

\documentclass{ctexart}
% 導言區添加
\usepackage{tasks}
\settasks{                     %設置
    counter-format=tsk[A],     %編號
    label-format={\bfseries},  %加粗
    %item-indent={-0.1em},
    %label-offset={-0.05em}
}

% 測試用
\newcommand{\sample}{This is some sample text we will use to create a somewhat longer text spanning a
few lines. This is some sample text we will use to create a somewhat longer text
spanning a few lines}


\begin{document}

選擇題有4個選項,分4列顯示選項A,B,C,D。

\begin{enumerate}
    \begin{tasks}(4)
        \task $x^2 + y^2 = R^2$
        \task $\mathrm{E}=\mathrm{MC}^2$
        \task $e^{-i\pi} = 1$
        \task \sample
    \end{tasks}
\end{enumerate}

\end{document}

例:跨越多個列的項

\begin{tasks}(4)
    \task \sample
    \task* \texttt{*}占用后面的所有列\sample
    \task* 占用后面的所有列\sample
    \task*(2) \texttt{*}本身可以帶選項,指定占用的列數\sample
    \task*[(x)] 指定該條目的編號為(x)
    \startnewitemline
    \task! 另起新條目並占用以后的所有列\sample
    \task \sample
\end{tasks}

基於tasks定義新列表環境

\NewTasks{itemtasks}[\item] %以\item為分隔符

% 文檔中
\begin{itemtasks}(3)
    \item \sample
    \item \sample
    \item \sample
\end{itemtasks}

使用如下定義的環境mytasks不能嵌套在enumerate環境,提示
“begin{mytasks} on input line 22 ended by \end{itemtasks}”

“\begin{itemtasks} on input line 22 ended by \end{document}”

\NewTasks{itemtasks}[\item]    % 以\item為分隔符
\newenvironment{mytasks}[1][2]{
    \begin{itemtasks}(#1)
}{
    \end{itemtasks}
}

% 文檔中
\begin{enumerate}
    \item 第一個問題選項如下
        \begin{mytasks}[2]
            \item $x^2 + y^2 = R^2$
            \item $\mathrm{E}=\mathrm{MC}^2$
            \item $e^{-i\pi} = 1$
            \item \sample
        \end{mytasks}
\end{enumerate}

mytasks是按照\NewEnviron(xparse包)定義的,標准的環境定義方法使用\itemtasks...\enditemtasks

\newenvironment{mytasks}[1][2]{
    \itemtasks(#1)
}{
\enditemtasks
}

% 文檔中
\begin{enumerate}
    \item 第一個問題選項如下
        \begin{mytasks}[4]
            \item $x^2 + y^2 = R^2$
            \item $\mathrm{E}=\mathrm{MC}^2$
            \item $e^{-i\pi} = 1$
            \item \sample
        \end{mytasks}
\end{enumerate}

使用environ'包的\NewEnviron`命令定義

\NewTasks{itemtasks}[\item]        % 以\item為分隔符

\usepackage{environ}
\NewEnviron{mytasksenv}[1][2]{
    \def\tempbegin{\begin{itemtasks}(#1)} 
            \expandafter\tempbegin\BODY 
        \end{itemtasks}
}{}

% 文檔中
\begin{mytasksenv}[4]
    \item $x^2 + y^2 = R^2$
    \item $\mathrm{E}=\mathrm{MC}^2$
    \item $e^{-i\pi} = 1$
    \item $x^2 + y^2 = R^2$
\end{mytasksenv}

使用xparse'包的\NewDocumentEnvironment`定義

\usepackage{xparse}
\NewDocumentEnvironment{mytasksx}{}
  {\newTask(2)}
  {\endnewTask}

完整的示例

%!TEX program = xelatex
\documentclass[UTF8]{ctexart}

\usepackage{url}
\usepackage{tasks}
\settasks{
	counter-format=tsk[A],
	label-format={\bfseries},
	%item-indent={-0.1em},
	%label-offset={-0.05em}
}

\NewTasks{itemtasks}[\item]
%\newenvironment{mytasks}[1][2]{
%	\begin{itemtasks}(#1)
%}{
%	\end{itemtasks}
%}

\newenvironment{mytasks}[1][2]{
	\itemtasks(#1)
}{
\enditemtasks
}

%https://tex.stackexchange.com/questions/237230/tasks-in-custom-environment
\usepackage{environ}
\NewEnviron{mytasksenv}[1][2]{
	\def\tempbegin{\begin{itemtasks}(#1)} 
			\expandafter\tempbegin\BODY 
		\end{itemtasks}
}{}

\usepackage{xparse}
%https://tex.stackexchange.com/questions/391459/nesting-tasks-within-an-xparse-environment
\NewDocumentEnvironment{mytasksx}{}
  {\itemtasks(2)}
  {\enditemtasks}

\newcommand{\sample}{This is some sample text we will use to create a somewhat longer text spanning a	few lines. This is some sample text we will use to create a somewhat longer text spanning a few lines}

\begin{document}

\begin{mytasksenv}[4]
	\item six, 繼續上面的編號.
	\item seven
	\item seven
	\item seven
\end{mytasksenv}

\begin{enumerate}
	\item 第一個問題選項如下
		\begin{mytasks}[2]
			\item $x^2 + y^2 = R^2$
			\item $\mathrm{E}=\mathrm{MC}^2$
			\item $e^{-i\pi} = 1$
			\item \sample
		\end{mytasks}
\end{enumerate}


\begin{tasks}(4)
	\task* 一般使用格式為\texttt{\\begin\{tasks\}[選項](列數)}
	\task 可使用\texttt{*}
	\task three
\end{tasks}

\begin{tasks}[resume=true]
	\task six, 繼續上面的編號.
	\task seven
\end{tasks}

This is some sample text we will use to create a somewhat longer text spanning a
few lines.

\begin{enumerate}
	\item 在LyX中,定義新環境itemtasks,用item分隔符!不會與外面的item沖突!但是LyX插入的選項放在中括號匯總,而tasks要求放在小括號中。
	\item \url{http://troubleshooters.com/linux/lyx/ownlists.htm}不知道說啥
	\item 第二個問題有如下的選項
		\begin{tasks}(4)
			\task $x^2 + y^2 = R^2$
			\task $\mathrm{E}=\mathrm{MC}^2$
			\task $e^{-i\pi} = 1$
			\task \sample
		\end{tasks}
	\item 第三
		\begin{tasks}(2)
			\task $x^2 + y^2 = R^2$
			\task $\mathrm{E}=\mathrm{MC}^2$
			\task $e^{-i\pi} = 1$
			\task $e^{-i\pi} = 1$
		\end{tasks}
\end{enumerate}

\begin{tasks}(4)
	\task \sample
	\task* \texttt{*}占用后面的所有列\sample
	\task* 占用后面的所有列\sample
	\task*(2) \texttt{*}本身可以帶選項,指定占用的列數\sample
	\task*[(x)] 指定該條目的編號為(x)
	\startnewitemline
	\task! 另起新條目並占用以后的所有列\sample
	\task \sample
\end{tasks}

\end{document}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM