我的设置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}