如何创建用于列表的计数命令(例如 TODO)?

如何创建用于列表的计数命令(例如 TODO)?

借口:我知道诸如、和之类的软件包todonotestodo但这fixme更像是学习 LaTeX 编程的任务。因此,不鼓励使用从 CTAN 下载的附加软件包。还想避免使用额外的 *.sty 文件。

如何在主 *.tex 中创建一个命令,以便稍后在列表中显示计数项目?例如:

Text before\todo[optional caption]{my text here}. 
Some other text in the document\todo{another todo but without caption}.

待办事项注释将在内联文本中被着色、添加前缀或以其他方式标记。调用\listoftodos将创建\todo文档中的 s 列表,并生成与 类似但独立的(超链接)列表\tableofcontents,其中 的内容{}将替换为 的内容[](如果且仅当 存在),页码在右侧。此列表只需要一个深度级别。

正在查看该todonotes包的源代码,但无法理解其中的意思。据我所知,此任务需要定义两个新命令,将文本存储在待办事项列表中,处理可选参数,最后使用hyperref(另一个)目录创建待办事项的引用列表。该列表将写入 *.aux 文件。

奖金:

  • 在公式或节标题内使用时的安全,在注释内使用格式或公式时的安全

  • 如何添加选项?一个简单的显示或隐藏内联文本选项(同时仍显示在 中\listoftodos)就很好了。

  • 此方法可以扩展到其他项目吗?\myitem,,,?\listofmyitems\otheritems\listofotheritems

附录:网上有没有关于 (La)TeX 编程的高级指南?这对任何未来的事业都会有帮助。

答案1

初始版本,无选项键

\documentclass{article}
\usepackage[x11names]{xcolor}
\usepackage{etoolbox}%
\usepackage{blindtext}% Just as text filler
\usepackage{hyperref}
\makeatletter
\def\todolist{}

\newcounter{todolistcounter}

\newcommand{\ToDo}{%
  \@ifnextchar[{\todoopt}{\todonoopt}%
}%

\newcommand{\todonoopt}[1]{%
  \refstepcounter{todolistcounter}
  % \addcontentsline{todo}{section}{\thetodolistcounter~#1} % No contents line
  \listgadd{\todolist}{#1}%
   #1%
   %      \colorbox{green}{\thetodolistcounter~#1}
}

\newcommand{\todoopt}[2][]{%
  \refstepcounter{todolistcounter}
  \addcontentsline{todo}{section}{\thetodolistcounter~#1}
  \listgadd{\todolist}{#2}%
   #2%
   %      \colorbox{green}{\thetodolistcounter~#2}
}%



\newcommand{\listoftodos}{%
  \section{List of Todos}
  \@starttoc{todo}
  \clearpage
}%

% inline display (as a enumerate) list 
\newcommand{\InTextListOfToDos}{%
\begin{enumerate}%
  \renewcommand*{\do}[1]{%
  \item ##1%
  }
  \dolistloop{\todolist}%
\end{enumerate}%
}


\makeatother

\begin{document}
\listoftodos
\ToDo{first} \ToDo{We}

\blindtext[5] \ToDo[should not]{should} \blindtext[10]\ToDo{start from scratch}
\ToDo{\begin{equation}
    E = mc^2%
    \end{equation}%
}

\blindtext

\section{The ToDos}

\section{A heading with a ToDo \protect\ToDo{Something}}


\InTextListOfToDos


\end{document}

相关内容