更改枚举项交叉引用的格式

更改枚举项交叉引用的格式

目前,我有一个自动对多个任务列表进行编号的系统。它看起来像这样:

\documentclass{article}
\usepackage{enumitem}

\newcounter{taskmajor}
\newlist{tasklistimpl}{enumerate}{2}
\setlist[tasklistimpl]{label=\textbf{Task \arabic{taskmajor}.\arabic*},itemindent=4em}
\newenvironment{tasklist}{
    \stepcounter{taskmajor}
    \let\olditem\item
    \renewcommand{\item}{\olditem --}
    \begin{tasklistimpl}
}{
    \end{tasklistimpl}
    \let\item\olditem
}

\begin{document}

\begin{tasklist}
\item \label{itm:first} Test item, first
\item \label{itm:second} Test item, second
\end{tasklist}

\begin{tasklist}
\item \label{itm:twopointone} Test item, two point one.
\end{tasklist}

\ref{itm:twopointone}

\end{document}

当我\ref{itm:twopointone}得到“任务 2.1“但我不确定在所有我引用它的地方都用粗体显示是否是一种明智的风格选择,所以我正在寻找一种方法来以某种方式禁用仅用于引用的粗体显示。有没有简单的方法可以做到这一点?或者我需要以某种方式重组事物?此外,多部分任务列表的构造(在实际文档中将跨越多个部分)是否合理?

此外,我也在寻找一种方法将其--再次移动到项目标签中,而不使其成为引用的一部分,因为由于对齐间距,语句的开头不再完全对齐。

答案1

我会使用单一列表类型来执行此操作。您不需要单独的环境,因为您可以注入代码来执行外部计数器。

\documentclass{article}
\usepackage{enumitem}

\newcounter{taskmajor}

\newlist{tasklist}{enumerate}{1}
\setlist[tasklist]{label={Task \thetaskmajor.\arabic* --},
    itemindent=4em,font=\bfseries,ref={Task \thetaskmajor.\arabic*},
    first=\refstepcounter{taskmajor}}

\begin{document}

\begin{tasklist}
\item \label{itm:first} Test item, first
\item \label{itm:second} Test item, second
\end{tasklist}

\begin{tasklist}
\item \label{itm:twopointone} Test item, two point one.
\end{tasklist}

In \ref{itm:twopointone}

\end{document}

代码输出

答案2

根据@Alan Munn 的建议,答案很简单。您只需使用命令的 ref 选项即可enumitemsetlist这也解决了我想将移动--到标签中的另一个问题。

我的代码变成:

\documentclass{article}
\usepackage{enumitem}

\newcounter{taskmajor}
\newlist{tasklistimpl}{enumerate}{2}
\setlist[tasklistimpl]{label=\textbf{Task \arabic{taskmajor}.\arabic*} --,ref=Task \arabic{taskmajor}.\arabic*,itemindent=4em}
\newenvironment{tasklist}{
    \stepcounter{taskmajor}
    \begin{tasklistimpl}}{\end{tasklistimpl}}

\begin{document}

\begin{tasklist}
\item \label{itm:first} Test item, first
\item \label{itm:second} Test item, second
\end{tasklist}

\begin{tasklist}
\item \label{itm:twopointone} Test item, two point one.
\end{tasklist}

\ref{itm:twopointone}

\end{document}

相关内容