通过自定义计数器值引用 todonotes 吗?

通过自定义计数器值引用 todonotes 吗?

我的设置todonotes如下:

\documentclass{article}
\usepackage{tikz}
\usepackage{todonotes}
\usepackage{hyperref}
\usepackage{setspace}
\usepackage{kantlipsum}

\newcounter{todoListItems}
\newcommand{\sstodo}[2][]
{\refstepcounter{todoListItems}{1}
\todo[caption={\protect\hypertarget{todo\thetodoListItems}{}\arabic{todoListItems}. #2}, #1]
{\begin{spacing}{1} \hfill \hyperlink{todo\thetodoListItems}{#2} \end{spacing} }}

\makeatletter\let\chapter\@undefined\makeatother


\begin{document}

\listoftodos

\kant[1] \sstodo{First}

\kant[2] \sstodo{Second}

\kant[3] \sstodo{Third}

\end{document}

如您所见,我设置了一个自定义计数器来计算todos(自定义的实例\sstodo)并在待办事项列表中打印值。我希望能够引用给定的并将拉取todo的编号todo打印出来。我希望以一种自动生成\ref标签的方式来做到这一点。todos

我还意识到我可能在思考如何以错误的方式实现我所寻找的目标。我所追求的是一种简单的方法来交叉引用 todonotes,而不需要手动为每个 todonotes 添加标签todonote。这样做的目的是允许todo合作者轻松引用项目。

我尝试使用解决方案这里但无法让它工作(尽管这促使我将我的改为\addtocounter\refstepcounter

答案1

我不完全清楚你希望它看起来像什么,但有一种可能性:

交叉引用待办事项,无需明确标记

为了进行设置,我使用了xparse提供\NewDocumentCommand。这允许多个可选参数。这\sstodo以向后兼容的方式更改了 的语法。基本上,它应该像以前一样工作,但如果您想明确指定标签(可能是因为待办事项注释的内容不适合作为标签),您可以编写

\sstodo(mylabel){My complex todo note}

代码如下:

\documentclass{article}
\usepackage{tikz}
\usepackage{todonotes}
\usepackage{xparse}
\usepackage{hyperref}
\usepackage{setspace}
\usepackage{kantlipsum}

\newcounter{todoListItems}
\NewDocumentCommand\sstodo{O{}d()m}{%
  \refstepcounter{todoListItems}{1}
  \IfNoValueTF{#2}{\label{#3}}{\label{#2}}%
  \todo[caption={\protect\hypertarget{todo\thetodoListItems}{}\arabic{todoListItems}. #3}, #1]
    {\begin{spacing}{1} \hfill \hyperlink{todo\thetodoListItems}{#3} \end{spacing} }}

\makeatletter\let\chapter\@undefined\makeatother


\begin{document}

\listoftodos

See todo notes \ref{First}, \ref{Second} and \ref{firstnew}.

\kant[1] \sstodo{First}

\kant[2] \sstodo{Second}

\kant[3] \sstodo(firstnew){Third}

\end{document}

在我发布这篇文章之后,我突然想到你可能想要的是以下内容:

获取文本中的计数器

如果是这样,您可能更喜欢:

\documentclass{article}
\usepackage{tikz}
\usepackage{todonotes}
\usepackage{xparse}
\usepackage{hyperref}
\usepackage{setspace}
\usepackage{kantlipsum}

\newcounter{todoListItems}
\NewDocumentCommand\sstodo{O{}d()m}{%
  \refstepcounter{todoListItems}%
  \arabic{todoListItems}%
  \IfNoValueTF{#2}{\label{#3}}{\label{#2}}%
  \todo[caption={\protect\hypertarget{todo\thetodoListItems}{}\arabic{todoListItems}. #3}, #1]
    {\begin{spacing}{1} \hfill \hyperlink{todo\thetodoListItems}{#3} \end{spacing} }}

\makeatletter\let\chapter\@undefined\makeatother


\begin{document}

\listoftodos

See todo notes \ref{First}, \ref{Second} and \ref{firstnew}.

\kant[1] \sstodo{First}

\kant[2] \sstodo{Second}

\kant[3] \sstodo(firstnew){Third}

\end{document}

相关内容